diff -Naur ns-3.21/AUTHORS ns-3.22/AUTHORS
--- ns-3.21/AUTHORS	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/AUTHORS	2015-02-05 15:46:22.000000000 -0800
@@ -19,8 +19,10 @@
 Jonathan Brugge (j.d.brugge@student.utwente.nl)
 Junling Bu (linlinjavaer@gmail.com)
 Elena Buchatskaia (borovkovaes@iitp.ru)
+Nuno Cardoso (nunopcardoso@gmail.com)
 Gustavo Carneiro (gjc@inescporto.pt, gjcarneiro@gmail.com)
 Scott Carpenter (scarpen@ncsu.edu)
+Tiago Cerqueira (tiago.miguel43@gmail.com)
 Egemen K. Cetinkaya (ekc@iitc.ku.edu)
 Angelos Chatzipapas (chatzipa@ceid.upatras.gr)
 Eugene Chemeritskiy (echemeritskiy@arccn.ru)
@@ -102,26 +104,29 @@
 Sidharth Nabar (snabar@uw.edu)
 Hemanth Narra (hemanth@ittc.ku.edu)
 Roman Naumann (naumann@informatik.hu-berlin.de)
+Ben Newton (bn@cs.unc.edu)
 Andreas Nilsson (andrnils@gmail.com)
 Jaume Nin (jnin@cttc.es)
 Michael Nowatkowski (nowatkom@gmail.com)
 Anh Nguyen (annguyen@ittc.ku.edu)
 Duy Nguyen (duy@soe.ucsc.edu)
+Luis Pacheco (luisbelem@gmail.com)
 Lluís Parcerisa (parcerisa@gmail.com)
 Natale Patriciello (natale.patriciello@gmail.com)
 Tommaso Pecorella (tommaso.pecorella@unifi.it)
-Vikas Pushkar (vikaskupushkar@gmail.com)
+Guangyu Pei (guangyu.pei@boeing.com)
 Josh Pelkey (jpelkey@gatech.edu)
 Per (per_e_lists@rocketmail.com)
 Fernando Pereira (ferdonfeup@gmail.com)
 Colin Perkins (csp@csperkins.org) 
 Giuseppe Piro (g.piro@poliba.it)
 Yana Podkosova (yanapdk@rambler.ru)
-Guangyu Pei (guangyu.pei@boeing.com)
+Vikas Pushkar (vikaskupushkar@gmail.com)
 Andrea Ranieri (andreran@uno.it)
 Bruno Ranieri (Yrrsinn@googlemail.com)
 Ken Renard (kenneth.renard@arl.army.mil)
 Manuel Requena (mrequena@cttc.es)
+Matias Richart (mrichart@fing.edu.uy)
 George F. Riley (riley@ece.gatech.edu)
 Juergen Rinas (jrinas@gmx.de)
 Sebastian Rohde (sebastian.rohde@tu-dortmund.de)
@@ -134,11 +139,13 @@
 Francisco Javier Sánchez-Roselly (fnavarro@ujaen.es)
 Florian Schmidt (Florian.Schmidt@cs.rwth-aachen.de)
 Guillaume Seguin (guillaume.seguin@inria.fr)
+Ioannis Selinis (selinis.g@gmail.com)
 Tomasz Seweryn (tomasz.seweryn7@gmail.com)
 Dmitrii Shakshin (d.shakshin@gmail.com)
 Kulin Shah (m.kulin@gmail.com)
 Guowang Shi (shiguowang2007@gmail.com)
 Phillip Sitbon (phillip.sitbon@gmail.com)
+Pedro Silva (pmms@inesctec.pt)
 Anirudh Sivaraman (sk.anirudh@gmail.com) 
 Steven Smith (smith84@llnl.gov)
 Andrew Stanton (acstanton515@gmail.com)
@@ -165,3 +172,4 @@
 He Wu (mdzz@u.washington.edu)
 Yoshihiko Yazawa (yoshiyaz@gmail.com)
 Dizhi Zhou (dizhi.zhou@gmail.com)
+Gaurav Sathe (gaurav.sathe@tcs.com)
diff -Naur ns-3.21/bindings/python/ns3modulegen_core_customizations.py ns-3.22/bindings/python/ns3modulegen_core_customizations.py
--- ns-3.21/bindings/python/ns3modulegen_core_customizations.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/bindings/python/ns3modulegen_core_customizations.py	2015-02-05 15:46:22.000000000 -0800
@@ -112,7 +112,73 @@
 
 
 
-def generate_callback_classes(out, callbacks):
+def register_callback_classes(out, callbacks):
+    for callback_impl_num, template_parameters in enumerate(callbacks):
+        cls_name = "ns3::Callback< %s >" % ', '.join(template_parameters)
+        #print >> sys.stderr, "***** trying to register callback: %r" % cls_name
+        class_name = "PythonCallbackImpl%i" % callback_impl_num
+
+        class PythonCallbackParameter(Parameter):
+            "Class handlers"
+            CTYPES = [cls_name]
+            print("***** registering callback handler: %r (%r)" % (ctypeparser.normalize_type_string(cls_name), cls_name), file=sys.stderr)
+            DIRECTIONS = [Parameter.DIRECTION_IN]
+            PYTHON_CALLBACK_IMPL_NAME = class_name
+            TEMPLATE_ARGS = template_parameters
+            DISABLED = False
+
+            def convert_python_to_c(self, wrapper):
+                "parses python args to get C++ value"
+                assert isinstance(wrapper, typehandlers.ForwardWrapperBase)
+
+                if self.DISABLED:
+                    raise CodeGenerationError("wrapper could not be generated")
+
+                if self.default_value is None:
+                    py_callback = wrapper.declarations.declare_variable('PyObject*', self.name)
+                    wrapper.parse_params.add_parameter('O', ['&'+py_callback], self.name)
+                    wrapper.before_call.write_error_check(
+                        '!PyCallable_Check(%s)' % py_callback,
+                        'PyErr_SetString(PyExc_TypeError, "parameter \'%s\' must be callbale");' % self.name)
+                    callback_impl = wrapper.declarations.declare_variable(
+                        'ns3::Ptr<%s>' % self.PYTHON_CALLBACK_IMPL_NAME,
+                        '%s_cb_impl' % self.name)
+                    wrapper.before_call.write_code("%s = ns3::Create<%s> (%s);"
+                                                   % (callback_impl, self.PYTHON_CALLBACK_IMPL_NAME, py_callback))
+                    wrapper.call_params.append(
+                        'ns3::Callback<%s> (%s)' % (', '.join(self.TEMPLATE_ARGS), callback_impl))
+                else:
+                    py_callback = wrapper.declarations.declare_variable('PyObject*', self.name, 'NULL')
+                    wrapper.parse_params.add_parameter('O', ['&'+py_callback], self.name, optional=True)
+                    value = wrapper.declarations.declare_variable(
+                        'ns3::Callback<%s>' % ', '.join(self.TEMPLATE_ARGS),
+                        self.name+'_value',
+                        self.default_value)
+
+                    wrapper.before_call.write_code("if (%s) {" % (py_callback,))
+                    wrapper.before_call.indent()
+
+                    wrapper.before_call.write_error_check(
+                        '!PyCallable_Check(%s)' % py_callback,
+                        'PyErr_SetString(PyExc_TypeError, "parameter \'%s\' must be callbale");' % self.name)
+
+                    wrapper.before_call.write_code("%s = ns3::Callback<%s> (ns3::Create<%s> (%s));"
+                                                   % (value, ', '.join(self.TEMPLATE_ARGS),
+                                                      self.PYTHON_CALLBACK_IMPL_NAME, py_callback))
+
+                    wrapper.before_call.unindent()
+                    wrapper.before_call.write_code("}") # closes: if (py_callback) {
+
+                    wrapper.call_params.append(value)
+
+
+            def convert_c_to_python(self, wrapper):
+                raise typehandlers.NotSupportedError("Reverse wrappers for ns3::Callback<...> types "
+                                                     "(python using callbacks defined in C++) not implemented.")
+
+
+def generate_callback_classes(module, callbacks):
+    out = module.after_forward_declarations
     for callback_impl_num, template_parameters in enumerate(callbacks):
         sink = MemoryCodeSink()
         cls_name = "ns3::Callback< %s >" % ', '.join(template_parameters)
@@ -181,68 +247,23 @@
                               Warning)
                 ok = False
         if not ok:
+            try:
+                typehandlers.return_type_matcher.lookup(cls_name)[0].DISABLED = True
+            except typehandlers.TypeLookupError:
+                pass
+            try:
+                typehandlers.param_type_matcher.lookup(cls_name)[0].DISABLED = True
+            except typehandlers.TypeLookupError:
+                pass
             continue
 
         wrapper = CallbackImplProxyMethod(return_type, arguments)
         wrapper.generate(sink, 'operator()', decl_modifiers=[])
-            
+
         sink.unindent()
         sink.writeln('};\n')
+        print("Flushing to ", out, file=sys.stderr)
         sink.flush_to(out)
-        
-        class PythonCallbackParameter(Parameter):
-            "Class handlers"
-            CTYPES = [cls_name]
-            print("***** registering callback handler: %r" % ctypeparser.normalize_type_string(cls_name), file=sys.stderr)
-            DIRECTIONS = [Parameter.DIRECTION_IN]
-            PYTHON_CALLBACK_IMPL_NAME = class_name
-            TEMPLATE_ARGS = template_parameters
-
-            def convert_python_to_c(self, wrapper):
-                "parses python args to get C++ value"
-                assert isinstance(wrapper, typehandlers.ForwardWrapperBase)
-
-                if self.default_value is None:
-                    py_callback = wrapper.declarations.declare_variable('PyObject*', self.name)
-                    wrapper.parse_params.add_parameter('O', ['&'+py_callback], self.name)
-                    wrapper.before_call.write_error_check(
-                        '!PyCallable_Check(%s)' % py_callback,
-                        'PyErr_SetString(PyExc_TypeError, "parameter \'%s\' must be callbale");' % self.name)
-                    callback_impl = wrapper.declarations.declare_variable(
-                        'ns3::Ptr<%s>' % self.PYTHON_CALLBACK_IMPL_NAME,
-                        '%s_cb_impl' % self.name)
-                    wrapper.before_call.write_code("%s = ns3::Create<%s> (%s);"
-                                                   % (callback_impl, self.PYTHON_CALLBACK_IMPL_NAME, py_callback))
-                    wrapper.call_params.append(
-                        'ns3::Callback<%s> (%s)' % (', '.join(self.TEMPLATE_ARGS), callback_impl))
-                else:
-                    py_callback = wrapper.declarations.declare_variable('PyObject*', self.name, 'NULL')
-                    wrapper.parse_params.add_parameter('O', ['&'+py_callback], self.name, optional=True)
-                    value = wrapper.declarations.declare_variable(
-                        'ns3::Callback<%s>' % ', '.join(self.TEMPLATE_ARGS),
-                        self.name+'_value',
-                        self.default_value)
-
-                    wrapper.before_call.write_code("if (%s) {" % (py_callback,))
-                    wrapper.before_call.indent()
-
-                    wrapper.before_call.write_error_check(
-                        '!PyCallable_Check(%s)' % py_callback,
-                        'PyErr_SetString(PyExc_TypeError, "parameter \'%s\' must be callbale");' % self.name)
-
-                    wrapper.before_call.write_code("%s = ns3::Callback<%s> (ns3::Create<%s> (%s));"
-                                                   % (value, ', '.join(self.TEMPLATE_ARGS),
-                                                      self.PYTHON_CALLBACK_IMPL_NAME, py_callback))
-
-                    wrapper.before_call.unindent()
-                    wrapper.before_call.write_code("}") # closes: if (py_callback) {
-                                        
-                    wrapper.call_params.append(value)
-                    
-
-            def convert_c_to_python(self, wrapper):
-                raise typehandlers.NotSupportedError("Reverse wrappers for ns3::Callback<...> types "
-                                                     "(python using callbacks defined in C++) not implemented.")
 
 
 # def write_preamble(out):
@@ -374,7 +395,7 @@
     ofstream.add_constructor([Parameter.new("const char *", 'filename'),
                               Parameter.new("::std::ofstream::openmode", 'mode', default_value="std::ios_base::out")])
     ofstream.add_method('close', None, [])
-    
+
     add_std_ios_openmode(module)
 
 
diff -Naur ns-3.21/bindings/python/ns3modulegen-modular.py ns-3.22/bindings/python/ns3modulegen-modular.py
--- ns-3.21/bindings/python/ns3modulegen-modular.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/bindings/python/ns3modulegen-modular.py	2015-02-05 15:46:22.000000000 -0800
@@ -103,7 +103,7 @@
         module_customization.post_register_types(root_module)
 
     # register Callback<...> type handlers
-    ns3modulegen_core_customizations.generate_callback_classes(root_module.after_forward_declarations,
+    ns3modulegen_core_customizations.register_callback_classes(root_module.after_forward_declarations,
                                                                callback_classes)
 
     # -----------
@@ -114,20 +114,18 @@
 
     ns3modulegen_core_customizations.Object_customizations(root_module)
     ns3modulegen_core_customizations.Attribute_customizations(root_module)
-
+    ns3modulegen_core_customizations.generate_callback_classes(root_module,
+                                                               callback_classes)
 
     # -----------
     module_apidefs.register_functions(root_module)
-    
+
     if hasattr(module_customization, 'post_register_functions'):
         module_customization.post_register_functions(root_module)
 
-
     # -----------
     root_module.generate(out)
 
 if __name__ == '__main__':
     import sys
     main(sys.argv)
-
-    
diff -Naur ns-3.21/bindings/python/wscript ns-3.22/bindings/python/wscript
--- ns-3.21/bindings/python/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/bindings/python/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -13,7 +13,7 @@
 # after = TaskGen.after
 
 ## https://launchpad.net/pybindgen/
-REQUIRED_PYBINDGEN_VERSION = (0, 17, 0, 876)
+REQUIRED_PYBINDGEN_VERSION = (0, 17, 0, 886)
 REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
 
 RUN_ME=-3
@@ -255,6 +255,8 @@
                             "import pygccxml; print pygccxml.__version__"],
                             stdout=subprocess.PIPE).communicate()[0]
     pygccxml_version_str = out.strip()
+    # Bug 2013:  pygccxml versions > 1.0.0 prepend a 'v' to version number
+    pygccxml_version_str = pygccxml_version_str.lstrip('v')
     pygccxml_version = tuple([int(x) for x in pygccxml_version_str.split('.')])
     conf.msg('Checking for pygccxml version', pygccxml_version_str)
     if not (pygccxml_version >= REQUIRED_PYGCCXML_VERSION):
@@ -265,7 +267,7 @@
         conf.report_optional_feature("pygccxml", "Python API Scanning Support", False,
                                      "pygccxml too old")
         return
-    
+
 
     ## Check gccxml version
     try:
@@ -409,7 +411,7 @@
     """Generates a 'ns3.py' compatibility module."""
     before = 'cxx'
     color = 'BLUE'
-    
+
     def run(self):
         assert len(self.outputs) == 1
         outfile = file(self.outputs[0].abspath(), "w")
diff -Naur ns-3.21/CHANGES.html ns-3.22/CHANGES.html
--- ns-3.21/CHANGES.html	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/CHANGES.html	2015-02-05 15:46:22.000000000 -0800
@@ -51,6 +51,77 @@
 us a note on ns-developers mailing list.</p>
 
 <hr>
+<h1>Changes from ns-3.21 to ns-3.22</h1>
+<h2>New API:</h2>
+<ul>
+  <li> New classes were added for the PARF and APARF WiFi power and rate control mechanisms. 
+  </li>
+  <li> Support for WiFi 802.11n MPDU aggregation has been added.
+  </li>
+  <li> Additional support for modeling of vehicular WiFi networks has been added, including the channel-access coordination feature of IEEE 1609.4.  In addition, a Basic Safety Message (BSM) packet generator and related statistics-gathering classes have been added to the wave module. 
+  </li>
+  <li> A complete LTE release bearer procedure is now implemented which can be invoked by calling the new helper method LteHelper::DeActivateDedicatedEpsBearer ().
+  </li>
+  <li> It is now possible to print the Neighbor Cache (ARP and NDISC) by using
+       the RoutingProtocolHelper
+  </li>
+  <li> A TimeProbe class has been added to the data collection framework in 
+       the stats module, enabling TracedValues emitting values of type 
+       ns3::Time to be handled by the framework.
+  </li>
+  <li> A new attribute 'ClockGranularity' was added to the TcpSocketBase class,
+to control modeling of RTO calculation.
+  </li>
+</ul>
+
+<h2>Changes to existing API:</h2>
+<ul>
+  <li> Several deprecated classes and class methods were removed, including EmuNetDevice, RandomVariable and derived classes, Packet::PeekData(), Ipv6AddressHelper::NewNetwork(Ipv6Address, Ipv6Prefix), Ipv6InterfaceContainer::SetRouter(), Ipv4Route::GetOutputTtl(), TestCase::AddTestCase(TestCase*), and TestCase::GetErrorStatus().
+  </li>
+  <li> Print methods involving routing tables and neighbor caches, in classes Ipv4RoutingHelper and Ipv6RoutingHelper, were converted to static methods.
+  </li>  
+  <li>PointerValue attribute types in class UanChannel (NoiseModel), UanPhyGen (PerModel and SinrModel), UanPhyDual (PerModelPhy1, PerModelPhy2, SinrModelPhy1, and SinrModelPhy2), and SimpleNetDevice (TxQueue), were changed from PointerValue type to StringValue type, making them configurable via the Config subsystem. 
+  </li>
+  <li> WifiPhy::CalculateTxDuration() and WifiPhy::GetPayloadDurationMicroSeconds () now take an additional frequency parameter.
+  </li>
+  <li> The attribute 'Recievers' in class YansWifiPhy was misspelled, so
+       this has been corrected to 'Receivers'.
+  </li>
+  <li> We have now documented the callback function signatures
+       for all TracedSources, using an extra (fourth) argument to
+       TypeId::AddTraceSource to pass the fully-qualified name
+       of the signature typedef.  To ensure that future TraceSources
+       are similarly documented, the three argument version of 
+       AddTraceSource has been deprecated.
+  </li>	
+  <li> The "MinRTO" attribute of the RttEstimator class was moved to the TcpSocketBase class.  The "Gain" attribute of the RttMeanDeviation class was replaced 
+by new "Alpha" and "Beta" attributes.  
+  </li>	
+  <li> Attributes of the TcpTxBuffer and TcpRxBuffer class are now accessible through the TcpSocketBase class.
+  </li>	
+  <li> The LrWpanHelper class has a new constructor allowing users to configure a MultiModelSpectrumChannel as an option, and also provides Set/Get API to allow users to access the underlying channel object. 
+  </li>
+</ul>
+
+<h2>Changes to build system:</h2>
+<ul>
+  <li> waf was upgraded to version 1.7.16
+  </li>
+</ul>
+
+<h2>Changed behavior:</h2>
+This section is for behavioral changes to the models that were not due to a bug fix.
+<ul>
+  <li> The default value of the `Speed` attribute of ConstantSpeedPropagationDelayModel was changed from 300,000,000 m/s to 299,792,458 m/s (speed of light in a vacuum), causing propagation delays using this model to vary slightly.
+  </li>
+  <li> The LrWpanHelper object was previously instantiating only a LogDistancePropagationLossModel on a SingleModelSpectrumChannel, but no PropagationDelayModel.  The constructor now adds by default a ConstantSpeedPropagationDelayModel.
+  </li>
+  <li> The Nix-vector routing implementation now uses a lazy flush mechanism,
+       which dramatically speeds up the creation of large topologies.
+  </li>
+</ul>
+
+<hr>
 <h1>Changes from ns-3.20 to ns-3.21</h1>
 <h2>New API:</h2>
 <ul>
@@ -97,6 +168,8 @@
   </li>
   <li> A new CoDel queue model has been added to the 'internet' module.  
   </li>
+  <li> New test macros NS_TEST_ASSERT_MSG_GT_OR_EQ() and NS_TEST_EXPECT_MSG_GT_OR_EQ() have been added.
+  </li>
 </ul>
 
 <h2>Changes to existing API:</h2>
diff -Naur ns-3.21/doc/doxygen.conf ns-3.22/doc/doxygen.conf
--- ns-3.21/doc/doxygen.conf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/doxygen.conf	2015-02-05 15:46:22.000000000 -0800
@@ -1,112 +1,131 @@
-# -*-sh-*-
+## -*-sh-*-
 
-# Doxyfile 1.8.3.1
+# Doxyfile 1.8.9.1
 
 # This file describes the settings to be used by the documentation system
 # doxygen (www.doxygen.org) for a project.
 #
-# All text after a hash (#) is considered a comment and will be ignored.
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
 # The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ").
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
 
 #---------------------------------------------------------------------------
 # Project related configuration options
 #---------------------------------------------------------------------------
 
 # This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
 
 DOXYFILE_ENCODING      = UTF-8
 
-# The PROJECT_NAME tag is a single word (or sequence of words) that should
-# identify the project. Note that if you do not use Doxywizard you need
-# to put quotes around the project name if it contains spaces.
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
 
 PROJECT_NAME           = "ns-3"
 
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
 
 PROJECT_NUMBER         = "3-dev"
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer
-# a quick idea about the purpose of the project. Keep the description short.
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
 
 PROJECT_BRIEF          = "A Discrete-Event Network Simulator"
 
-# With the PROJECT_LOGO tag one can specify an logo or icon that is
-# included in the documentation. The maximum height of the logo should not
-# exceed 55 pixels and the maximum width should not exceed 200 pixels.
-# Doxygen will copy the logo to the output directory.
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
 
 PROJECT_LOGO           = ./doc/ns3_html_theme/static/ns-3-inverted-notext-small.png
 
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
 
 OUTPUT_DIRECTORY       = doc
 
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
 
 CREATE_SUBDIRS         = NO
 
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
 # documentation generated by doxygen is written. Doxygen will use this
 # information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
-# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
-# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
-# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
 
 OUTPUT_LANGUAGE        = English
 
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
 
 BRIEF_MEMBER_DESC      = YES
 
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
 # brief descriptions will be completely suppressed.
+# The default value is: YES.
 
 REPEAT_BRIEF           = YES
 
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
 
 ABBREVIATE_BRIEF       =
 
 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
+# doxygen will generate a detailed section even if there is only a brief
 # description.
+# The default value is: NO.
 
 ALWAYS_DETAILED_SEC    = NO
 
@@ -114,260 +133,282 @@
 # inherited members of a class in the documentation of that class as if those
 # members were ordinary class members. Constructors, destructors and assignment
 # operators of the base classes will not be shown.
+# The default value is: NO.
 
 INLINE_INHERITED_MEMB  = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
 
 FULL_PATH_NAMES        = YES
 
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip. Note that you specify absolute paths here, but also
-# relative paths, which will be relative from the directory where doxygen is
-# started.
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
 
 STRIP_FROM_PATH        =
 
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
 
 STRIP_FROM_INC_PATH    =
 
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful if your file system
-# doesn't support long names like on DOS, Mac, or CD-ROM.
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
 
 SHORT_NAMES            = NO
 
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
 
 JAVADOC_AUTOBRIEF      = YES
 
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-# interpret the first line (until the first dot) of a Qt-style
-# comment as the brief description. If set to NO, the comments
-# will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
 
 QT_AUTOBRIEF           = YES
 
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
 
 INHERIT_DOCS           = YES
 
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
 
 SEPARATE_MEMBER_PAGES  = NO
 
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
 
 TAB_SIZE               = 4
 
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# 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.
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which 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                = 
 
-# Link to bug tracker
+## 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
+## 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 ... */
+## 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
+## 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
-# "class=itcl::class" will allow you to use the command class in the
-# itcl::class meaning.
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
 
 TCL_SUBST              =
 
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
 
 OPTIMIZE_OUTPUT_FOR_C  = NO
 
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for
-# Java. For instance, namespaces will be presented as packages, qualified
-# scopes will look different, etc.
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources only. Doxygen will then generate output that is more tailored for
-# Fortran.
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
 
 OPTIMIZE_FOR_FORTRAN   = NO
 
 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for
-# VHDL.
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
 
 OPTIMIZE_OUTPUT_VHDL   = NO
 
 # Doxygen selects the parser to use depending on the extension of the files it
 # parses. With this tag you can assign which parser to use for a given
 # extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension,
-# and language is one of the parsers supported by doxygen: IDL, Java,
-# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
-# C++. For instance to make doxygen treat .inc files as Fortran files (default
-# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
-# that for custom extensions you also need to set FILE_PATTERNS otherwise the
-# files are not read by doxygen.
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
 
-EXTENSION_MAPPING      =
+EXTENSION_MAPPING      = no_extension=C++
 
-# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
-# comments according to the Markdown format, which allows for more readable
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
 # documentation. See http://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you
-# can mix doxygen, HTML, and XML commands with Markdown formatting.
-# Disable only in case of backward compatibilities issues.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
 
 MARKDOWN_SUPPORT       = YES
 
-# When enabled doxygen tries to link words that correspond to documented classes,
-# or namespaces to their corresponding documentation. Such a link can be
-# prevented in individual cases by by putting a % sign in front of the word or
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
 # globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
 
 AUTOLINK_SUPPORT       = YES
 
 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also makes the inheritance and collaboration
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
 # diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
 
 BUILTIN_STL_SUPPORT    = YES
 
 # If you use Microsoft's C++/CLI language, you should set this option to YES to
 # enable parsing support.
+# The default value is: NO.
 
 CPP_CLI_SUPPORT        = NO
 
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-# Doxygen will parse them like normal C++ but will assume all classes use public
-# instead of private inheritance when no explicit protection keyword is present.
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
 
 SIP_SUPPORT            = NO
 
 # For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES (the
-# default) will make doxygen replace the get and set methods by a property in
-# the documentation. This will only work if the methods are indeed getting or
-# setting a simple type. If this is not the case, or you want to show the
-# methods anyway, you should set this option to NO.
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
 
 IDL_PROPERTY_SUPPORT   = YES
 
 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
+# tag is set to YES then doxygen will reuse the documentation of the first
 # member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
+# The default value is: 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
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
 
 SUBGROUPING            = YES
 
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
-# unions are shown inside the group in which they are included (e.g. using
-# @ingroup) instead of on a separate page (for HTML and Man pages) or
-# section (for LaTeX and RTF).
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
 
 INLINE_GROUPED_CLASSES = NO
 
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
-# unions with only public data fields will be shown inline in the documentation
-# of the scope in which they are defined (i.e. file, namespace, or group
-# documentation), provided this scope is documented. If set to NO (the default),
-# structs, classes, and unions are shown on a separate page (for HTML and Man
-# pages) or section (for LaTeX and RTF).
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
 
 INLINE_SIMPLE_STRUCTS  = NO
 
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-# is documented as struct, union, or enum with the name of the typedef. So
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
 # with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically
-# be useful for C code in case the coding convention dictates that all compound
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
 # types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
 
 TYPEDEF_HIDES_STRUCT   = YES
 
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE      = 1
-
-# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-# their name and scope. Since this can be an expensive process and often the
-# same symbol appear multiple times in the code, doxygen keeps a cache of
-# pre-resolved symbols. If the cache is too small doxygen will become slower.
-# If the cache is too large, memory is wasted. The cache size is given by this
-# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
 
 LOOKUP_CACHE_SIZE      = 1
 
@@ -375,313 +416,362 @@
 # Build related configuration options
 #---------------------------------------------------------------------------
 
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
 
 EXTRACT_ALL            = YES
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
 
 EXTRACT_PRIVATE        = YES
 
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
 # scope will be included in the documentation.
+# The default value is: NO.
 
 EXTRACT_PACKAGE        = NO
 
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
 
 EXTRACT_STATIC         = YES
 
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
 
 EXTRACT_LOCAL_CLASSES  = YES
 
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
 
 EXTRACT_LOCAL_METHODS  = NO
 
 # If this flag is set to YES, the members of anonymous namespaces will be
 # extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base
-# name of the file that contains the anonymous namespace. By default
-# anonymous namespaces are hidden.
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
 
 EXTRACT_ANON_NSPACES   = YES
 
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
 
 HIDE_UNDOC_MEMBERS     = NO
 
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
 
 HIDE_UNDOC_CLASSES     = NO
 
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
 
 HIDE_FRIEND_COMPOUNDS  = NO
 
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
 
 HIDE_IN_BODY_DOCS      = NO
 
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
 
 INTERNAL_DOCS          = YES
 
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
 # allowed. This is useful if you have classes or files whose names only differ
 # in case and if your file system supports case sensitive file names. Windows
 # and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
 
 CASE_SENSE_NAMES       = NO
 
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
 
 HIDE_SCOPE_NAMES       = NO
 
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
 
 SHOW_INCLUDE_FILES     = YES
 
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
-# will list include files with double quotes in the documentation
-# rather than with sharp brackets.
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
 
 FORCE_LOCAL_INCLUDES   = NO
 
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
 
 INLINE_INFO            = YES
 
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
 
 SORT_MEMBER_DOCS       = YES
 
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
 
 SORT_BRIEF_DOCS        = YES
 
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
-# will sort the (brief and detailed) documentation of class members so that
-# constructors and destructors are listed first. If set to NO (the default)
-# the constructors will appear in the respective orders defined by
-# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
-# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
-# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
 
 SORT_MEMBERS_CTORS_1ST = YES
 
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-# hierarchy of group names into alphabetical order. If set to NO (the default)
-# the group names will appear in their defined order.
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
 
 SORT_GROUP_NAMES       = YES
 
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
 
 SORT_BY_SCOPE_NAME     = NO
 
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
-# do proper type resolution of all parameters of a function it will reject a
-# match between the prototype and the implementation of a member function even
-# if there is only one candidate or it is obvious which candidate to choose
-# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
-# will still accept a match between prototype and implementation in such cases.
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
 
 STRICT_PROTO_MATCHING  = NO
 
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
 
 GENERATE_TODOLIST      = YES
 
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
 
 GENERATE_TESTLIST      = YES
 
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
 
 GENERATE_BUGLIST       = YES
 
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
 
 GENERATE_DEPRECATEDLIST= YES
 
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if section-label ... \endif
-# and \cond section-label ... \endcond blocks.
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
 
 ENABLED_SECTIONS       =
 
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or macro consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and macros in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
 
 MAX_INITIALIZER_LINES  = 30
 
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
 # list will mention the files that were used to generate the documentation.
+# The default value is: YES.
 
 SHOW_USED_FILES        = YES
 
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
-# This will remove the Files entry from the Quick Index and from the
-# Folder Tree View (if specified). The default is YES.
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
 
 SHOW_FILES             = YES
 
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
-# Namespaces page.
-# This will remove the Namespaces entry from the Quick Index
-# and from the Folder Tree View (if specified). The default is YES.
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
 
 SHOW_NAMESPACES        = YES
 
 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
 # doxygen should invoke to get the current version for each file (typically from
 # the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
 
 FILE_VERSION_FILTER    =
 
 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
 # by doxygen. The layout file controls the global structure of the generated
 # output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option.
-# You can optionally specify a file name after the option, if omitted
-# DoxygenLayout.xml will be used as the name of the layout file.
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
 
 LAYOUT_FILE            =
 
-# The CITE_BIB_FILES tag can be used to specify one or more bib files
-# containing the references data. This must be a list of .bib files. The
-# .bib extension is automatically appended if omitted. Using this command
-# requires the bibtex tool to be installed. See also
-# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
-# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
-# feature you need bibtex and perl available in the search path. Do not use
-# file names with spaces, bibtex cannot handle them.
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
 
 CITE_BIB_FILES         =
 
 #---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
 
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
 
 QUIET                  = NO
 
 # The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
 
 WARNINGS               = YES
 
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
 
 WARN_IF_UNDOCUMENTED   = YES
 
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
 
 WARN_IF_DOC_ERROR      = YES
 
-# The WARN_NO_PARAMDOC option can be enabled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
 
 WARN_NO_PARAMDOC       = YES
 
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
 
 WARN_FORMAT            = "$file:$line: $text"
 
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
 
 WARN_LOGFILE           = doc/doxygen.log
 
 #---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
 #---------------------------------------------------------------------------
 
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
 
 INPUT                  = doc/modules \
                          doc/main.h \
@@ -691,35 +781,38 @@
                          src
 
 # This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-# also the default input encoding. Doxygen uses libiconv (or the iconv built
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-# the list of possible encodings.
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
 
 INPUT_ENCODING         = UTF-8
 
 # If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
-# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
-# *.f90 *.f *.for *.vhd *.vhdl
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
 
 FILE_PATTERNS          = *.c \
                          *.cc \
                          *.h \
                          *.py
 
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
 
 RECURSIVE              = YES
 
 # The EXCLUDE tag can be used to specify files and/or directories that should be
 # excluded from the INPUT source files. This way you can easily exclude a
 # subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
 # Note that relative paths are relative to the directory from which doxygen is
 # run.
 
@@ -728,14 +821,16 @@
 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
 # directories that are symbolic links (a Unix file system feature) are excluded
 # from the input.
+# The default value is: NO.
 
 EXCLUDE_SYMLINKS       = NO
 
 # If the value of the INPUT tag contains directories, you can use the
 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
 
 EXCLUDE_PATTERNS       = */.hg/* \
                          */bindings/*
@@ -745,12 +840,15 @@
 # output. The symbol name can be a fully qualified name, a word, or if the
 # wildcard * is used, a substring. Examples: ANamespace, AClass,
 # AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
 
-EXCLUDE_SYMBOLS        =
+EXCLUDE_SYMBOLS        = main
 
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
 
 EXAMPLE_PATH           = src/aodv/examples \
                          src/bridge/examples \
@@ -763,7 +861,6 @@
                          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 \
@@ -790,22 +887,22 @@
                          src/wimax/examples
 
 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
 
 EXAMPLE_PATTERNS       =
 
 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
 
 EXAMPLE_RECURSIVE      = NO
 
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
 
 IMAGE_PATH             = doc/ns3_html_theme/static \
                          src/lte/doc/source/figures \
@@ -817,191 +914,250 @@
 
 # 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
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.
-# If FILTER_PATTERNS is specified, this tag will be
-# ignored.
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
 
 INPUT_FILTER           =
 
 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.
-# Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.
-# The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty or if
-# non of the patterns match the file name, INPUT_FILTER is applied.
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
 
 FILTER_PATTERNS        =
 
 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
 
 FILTER_SOURCE_FILES    = NO
 
 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
-# and it is also possible to disable source filtering for a specific pattern
-# using *.ext= (so without naming a filter). This option only has effect when
-# FILTER_SOURCE_FILES is enabled.
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
 
 FILTER_SOURCE_PATTERNS =
 
-# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page (index.html).
-# This can be useful if you have a project on for instance GitHub and want reuse
-# the introduction page also for the doxygen output.
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
 
 USE_MDFILE_AS_MAINPAGE =
 
 #---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
 #---------------------------------------------------------------------------
 
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
 
 SOURCE_BROWSER         = YES
 
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
 
 INLINE_SOURCES         = NO
 
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C, C++ and Fortran comments will always remain visible.
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
 
 STRIP_CODE_COMMENTS    = YES
 
-# If the REFERENCED_BY_RELATION tag is set to YES
-# then for each documented function all documented
-# functions referencing it will be listed.
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
 
 REFERENCED_BY_RELATION = YES
 
-# If the REFERENCES_RELATION tag is set to YES
-# then for each documented function all documented entities
-# called/used by that function will be listed.
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
 
 REFERENCES_RELATION    = YES
 
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.
-# Otherwise they will link to the documentation.
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
 
 REFERENCES_LINK_SOURCE = YES
 
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
 
 USE_HTAGS              = NO
 
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
 
 VERBATIM_HEADERS       = YES
 
 #---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
 
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
 
 ALPHABETICAL_INDEX     = YES
 
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
 
 COLS_IN_ALPHA_INDEX    = 3
 
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
 
 IGNORE_PREFIX          =
 
 #---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
 
 GENERATE_HTML          = YES
 
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_OUTPUT            = html
 
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_FILE_EXTENSION    = .html
 
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header. Note that when using a custom header you are responsible
-#  for the proper inclusion of any scripts and style sheets that doxygen
-# needs, which is dependent on the configuration options used.
-# It is advised to generate a default header using "doxygen -w html
-# header.html footer.html stylesheet.css YourConfigFile" and then modify
-# that header. Note that the header is subject to change so you typically
-# have to redo this when upgrading to a newer version of doxygen or when
-# changing the value of configuration settings such as GENERATE_TREEVIEW!
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_HEADER            = doc/ns3_html_theme/ns3_doxy_header.html
 
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_FOOTER            = doc/ns3_html_theme/ns3_doxy_footer.html
 
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If left blank doxygen will
-# generate a default style sheet. Note that it is recommended to use
-# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
-# tag will in the future become obsolete.
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_STYLESHEET        =
 
-# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
-# user-defined cascading style sheet that is included after the standard
-# style sheets created by doxygen. Using this option one can overrule
-# certain style aspects. This is preferred over using HTML_STYLESHEET
-# since it does not replace the standard style sheet and is therefor more
-# robust against future updates. Doxygen will copy the style sheet file to
-# the output directory.
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_EXTRA_STYLESHEET  = doc/ns3_html_theme/static/ns3_stylesheet.css
 
 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
 # other source files which should be copied to the HTML output directory. Note
 # that these files will be copied to the base HTML output directory. Use the
-# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that
-# the files will be copied as-is; there are no commands or markers available.
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_EXTRA_FILES       = doc/ns3_html_theme/static/bar-top.png \
                          doc/ns3_html_theme/static/drop-down-menu.js \
@@ -1011,600 +1167,829 @@
                          doc/ns3_html_theme/static/ns3_links.js \
                          doc/ns3_html_theme/static/ver.png
 
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
-# Doxygen will adjust the colors in the style sheet and background images
-# according to this color. Hue is specified as an angle on a colorwheel,
-# see http://en.wikipedia.org/wiki/Hue for more information.
-# For instance the value 0 represents red, 60 is yellow, 120 is green,
-# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
-# The allowed range is 0 to 359.
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_COLORSTYLE_HUE    = 0
 
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
-# the colors in the HTML output. For a value of 0 the output will use
-# grayscales only. A value of 255 will produce the most vivid colors.
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_COLORSTYLE_SAT    = 0
 
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
-# the luminance component of the colors in the HTML output. Values below
-# 100 gradually make the output lighter, whereas values above 100 make
-# the output darker. The value divided by 100 is the actual gamma applied,
-# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
-# and 100 does not change the gamma.
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_COLORSTYLE_GAMMA  = 91
 
 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting
-# this to NO can help when comparing the output of multiple runs.
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_TIMESTAMP         = YES
 
 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
 # documentation will contain sections that can be hidden and shown after the
 # page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_DYNAMIC_SECTIONS  = YES
 
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
-# entries shown in the various tree structured indices initially; the user
-# can expand and collapse entries dynamically later on. Doxygen will expand
-# the tree to such a level that at most the specified number of entries are
-# visible (unless a fully collapsed tree already exceeds this amount).
-# So setting the number of entries 1 will produce a full collapsed tree by
-# default. 0 is a special value representing an infinite number of entries
-# and will result in a full expanded tree by default.
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_INDEX_NUM_ENTRIES = 100
 
-# If the GENERATE_DOCSET tag is set to YES, additional index files
-# will be generated that can be used as input for Apple's Xcode 3
-# integrated development environment, introduced with OSX 10.5 (Leopard).
-# To create a documentation set, doxygen will generate a Makefile in the
-# HTML output directory. Running make will produce the docset in that
-# directory and running "make install" will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-# it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
 # for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 GENERATE_DOCSET        = NO
 
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-# feed. A documentation feed provides an umbrella under which multiple
-# documentation sets from a single provider (such as a company or product suite)
-# can be grouped.
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
 
 DOCSET_FEEDNAME        = "Doxygen generated docs"
 
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-# should uniquely identify the documentation set bundle. This should be a
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-# will append .docset to the name.
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
 
 DOCSET_BUNDLE_ID       = org.nsnam.ns3
 
-# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
-# identify the documentation publisher. This should be a reverse domain-name
-# style string, e.g. com.mycompany.MyDocSet.documentation.
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
 
 DOCSET_PUBLISHER_ID    = org.nsnam.ns3
 
-# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
 
 DOCSET_PUBLISHER_NAME  = Publisher
 
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
-# of the generated HTML documentation.
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 GENERATE_HTMLHELP      = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
 # written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 CHM_FILE               =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 HHC_LOCATION           =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 GENERATE_CHI           = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file
-# content.
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 CHM_INDEX_ENCODING     =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 BINARY_TOC             = NO
 
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 TOC_EXPAND             = NO
 
 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
-# that can be used as input for Qt's qhelpgenerator to generate a
-# Qt Compressed Help (.qch) of the generated HTML documentation.
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 GENERATE_QHP           = NO
 
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
-# be used to specify the file name of the resulting .qch file.
-# The path specified is relative to the HTML output folder.
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
 
 QCH_FILE               =
 
-# The QHP_NAMESPACE tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#namespace
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
 
 QHP_NAMESPACE          = org.nsnam.ns3
 
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
 
 QHP_VIRTUAL_FOLDER     = doc
 
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
-# add. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#custom-filters
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
 
 QHP_CUST_FILTER_NAME   =
 
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
-# Qt Help Project / Custom Filters</a>.
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
 
 QHP_CUST_FILTER_ATTRS  =
 
 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's
-# filter section matches.
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
-# Qt Help Project / Filter Attributes</a>.
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
 
 QHP_SECT_FILTER_ATTRS  =
 
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
-# be used to specify the location of Qt's qhelpgenerator.
-# If non-empty doxygen will try to run qhelpgenerator on the generated
-# .qhp file.
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
 
 QHG_LOCATION           =
 
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
-#  will be generated, which together with the HTML files, form an Eclipse help
-# plugin. To install this plugin and make it available under the help contents
-# menu in Eclipse, the contents of the directory containing the HTML and XML
-# files needs to be copied into the plugins directory of eclipse. The name of
-# the directory within the plugins directory should be the same as
-# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
-# the help appears.
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 GENERATE_ECLIPSEHELP   = NO
 
-# A unique identifier for the eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have
-# this name.
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
 
 ECLIPSE_DOC_ID         = org.nsnam.ns3
 
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
-# at top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it. Since the tabs have the same information as the
-# navigation tree you can set this option to NO if you already set
-# GENERATE_TREEVIEW to YES.
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 DISABLE_INDEX          = NO
 
 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information.
-# If the tag value is set to YES, a side panel will be generated
-# containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
-# Windows users are probably better off using the HTML help feature.
-# Since the tree basically has the same information as the tab index you
-# could consider to set DISABLE_INDEX to NO when enabling this option.
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 GENERATE_TREEVIEW      = YES
 
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
-# (range [0,1..20]) that doxygen will group on one line in the generated HTML
-# documentation. Note that a value of 0 will completely suppress the enum
-# values from appearing in the overview section.
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 ENUM_VALUES_PER_LINE   = 4
 
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 TREEVIEW_WIDTH         = 250
 
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
-# links to external symbols imported via tag files in a separate window.
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 EXT_LINKS_IN_WINDOW    = NO
 
-# Use this tag to change the font size of Latex formulas included
-# as images in the HTML documentation. The default is 10. Note that
-# when you change the font size after a successful doxygen run you need
-# to manually remove any form_*.png images from the HTML output directory
-# to force them to be regenerated.
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 FORMULA_FONTSIZE       = 10
 
 # Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are
-# not supported properly for IE 6.0, but are supported on all modern browsers.
-# Note that when changing this option you need to delete any form_*.png files
-# in the HTML output before the changes have effect.
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 FORMULA_TRANSPARENT    = YES
 
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
-# (see http://www.mathjax.org) which uses client side Javascript for the
-# rendering instead of using prerendered bitmaps. Use this if you do not
-# have LaTeX installed or if you want to formulas look prettier in the HTML
-# output. When enabled you may also need to install MathJax separately and
-# configure the path to it using the MATHJAX_RELPATH option.
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 USE_MATHJAX            = NO
 
 # When MathJax is enabled you can set the default output format to be used for
-# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
-# SVG. The default value is HTML-CSS, which is slower, but has the best
-# compatibility.
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
 
 MATHJAX_FORMAT         = HTML-CSS
 
-# When MathJax is enabled you need to specify the location relative to the
-# HTML output directory using the MATHJAX_RELPATH option. The destination
-# directory should contain the MathJax.js script. For instance, if the mathjax
-# directory is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to
-# the MathJax Content Delivery Network so you can quickly see the result without
-# installing MathJax.
-# However, it is strongly recommended to install a local
-# copy of MathJax from http://www.mathjax.org before deployment.
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
 
 MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
 
-# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
-# names that should be enabled during MathJax rendering.
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
 
 MATHJAX_EXTENSIONS     =
 
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box
-# for the HTML output. The underlying search engine uses javascript
-# and DHTML and should work on any modern browser. Note that when using
-# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
-# (GENERATE_DOCSET) there is already a search function so this one should
-# typically be disabled. For large projects the javascript based search engine
-# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 SEARCHENGINE           = YES
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript.
-# There are two flavours of web server based search depending on the
-# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
-# searching and an index file used by the script. When EXTERNAL_SEARCH is
-# enabled the indexing and searching needs to be provided by external tools.
-# See the manual for details.
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
 
 SERVER_BASED_SEARCH    = NO
 
-# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
 # script for searching. Instead the search results are written to an XML file
 # which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain
-# the search results. Doxygen ships with an example indexer (doxyindexer) and
-# search engine (doxysearch.cgi) which are based on the open source search engine
-# library Xapian. See the manual for configuration details.
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
 
 EXTERNAL_SEARCH        = NO
 
 # The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will returned the search results when EXTERNAL_SEARCH is enabled.
-# Doxygen ships with an example search engine (doxysearch) which is based on
-# the open source search engine library Xapian. See the manual for configuration
-# details.
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
 
 SEARCHENGINE_URL       =
 
 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
 # search data is written to a file for indexing by an external tool. With the
 # SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
 
 SEARCHDATA_FILE        = searchdata.xml
 
-# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
 # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
 # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
 # projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
 
 EXTERNAL_SEARCH_ID     =
 
 # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
 # projects other than the one defined by this configuration file, but that are
 # all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
-# of to a relative location where the documentation can be found.
-# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
 
 EXTRA_SEARCH_MAPPINGS  =
 
 #---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
 
 GENERATE_LATEX         = NO
 
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_OUTPUT           = latex
 
 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-# Note that when enabling USE_PDFLATEX this option is only used for
-# generating bitmaps for formulas in the HTML output, but not in the
-# Makefile that is written to the output directory.
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_CMD_NAME         = latex
 
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 MAKEINDEX_CMD_NAME     = makeindex
 
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 COMPACT_LATEX          = YES
 
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, letter, legal and
-# executive. If left blank a4wide will be used.
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 PAPER_TYPE             = a4wide
 
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. To get the times font for
+# instance you can specify
+# EXTRA_PACKAGES=times
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 EXTRA_PACKAGES         = amsmath
 
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_HEADER           =
 
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
-# the generated latex document. The footer should contain everything after
-# the last chapter. If it is left blank doxygen will generate a
-# standard footer. Notice: only use this tag if you know what you are doing!
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_FOOTER           =
 
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 PDF_HYPERLINKS         = YES
 
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
 # higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 USE_PDFLATEX           = YES
 
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_BATCHMODE        = NO
 
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_HIDE_INDICES     = YES
 
-# If LATEX_SOURCE_CODE is set to YES then doxygen will include
-# source code with syntax highlighting in the LaTeX output.
-# Note that which sources are shown also depends on other settings
-# such as SOURCE_BROWSER.
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_SOURCE_CODE      = NO
 
 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
-# http://en.wikipedia.org/wiki/BibTeX for more info.
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_BIB_STYLE        = plain
 
 #---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
 
 GENERATE_RTF           = NO
 
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_OUTPUT             = rtf
 
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 COMPACT_RTF            = NO
 
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_HYPERLINKS         = NO
 
-# Load style sheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_STYLESHEET_FILE    =
 
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_EXTENSIONS_FILE    =
 
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
 #---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
 
 GENERATE_MAN           = NO
 
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 MAN_OUTPUT             = man
 
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 MAN_EXTENSION          = .3
 
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 MAN_LINKS              = NO
 
 #---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
 
 GENERATE_XML           = NO
 
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
 
 XML_OUTPUT             = xml
 
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
 
 XML_PROGRAMLISTING     = YES
 
 #---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
 
 GENERATE_AUTOGEN_DEF   = NO
 
 #---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
 
 GENERATE_PERLMOD       = NO
 
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 PERLMOD_LATEX          = NO
 
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.
-# This is useful
-# if you want to understand what is going on.
-# On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 PERLMOD_PRETTY         = YES
 
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 PERLMOD_MAKEVAR_PREFIX =
 
@@ -1612,126 +1997,155 @@
 # Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
 
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
 
 ENABLE_PREPROCESSING   = YES
 
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 MACRO_EXPANSION        = YES
 
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 EXPAND_ONLY_PREDEF     = YES
 
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# pointed to by INCLUDE_PATH will be searched when a #include is found.
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 SEARCH_INCLUDES        = YES
 
 # The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
 
-INCLUDE_PATH           =
+## Allow doxygen to find generated include files, such as ns3/core-config.h
 
-# Allow doxygen to find generated include files, such as ns3/core-config.h
-INCLUDE_PATH          += build
+INCLUDE_PATH           = build
 
 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
 # patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 INCLUDE_FILE_PATTERNS  =
 
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-# ns-3:
-#
-# We predefine NS3_ASSERT_ENABLE and NS3_LOG_ENABLE so doxygen sees
-# the working definitions.  (These are normally defined by waf
-# in ns3/core-config.h)
-#
-# Function like macros at file global scope typically need to be here,
-# since doxygen confuses invocations of these macros for function
-# definitions.
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+## ns-3:
+##
+## We predefine NS3_ASSERT_ENABLE and NS3_LOG_ENABLE so doxygen sees
+## the working definitions.  (These are normally defined by waf
+## in ns3/core-config.h)
+##
+## Function like macros at file global scope typically need to be here,
+## since doxygen confuses invocations of these macros for function
+## definitions.
 
-PREDEFINED             = \
-                         NS3_ASSERT_ENABLE \
+PREDEFINED             = NS3_ASSERT_ENABLE \
                          NS3_LOG_ENABLE \
                          NS_LOG_COMPONENT_DEFINE()=1 \
                          NS_LOG_COMPONENT_DEFINE_MASK()=1 \
-			 NS_OBJECT_ENSURE_REGISTERED()=1 \
+                         NS_OBJECT_ENSURE_REGISTERED()=1
 
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition that
-# overrules the definition found in the source code.
-
-EXPAND_AS_DEFINED      = ATTRIBUTE_VALUE_DEFINE \
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      = ATTRIBUTE_ACCESSOR_DEFINE \
+                         ATTRIBUTE_CHECKER_DEFINE \
+                         ATTRIBUTE_CHECKER_IMPLEMENT \
+                         ATTRIBUTE_CHECKER_IMPLEMENT_WITH_NAME \
+                         ATTRIBUTE_CONVERTER_DEFINE \
+                         ATTRIBUTE_HELPER_CPP \
+                         ATTRIBUTE_HELPER_HEADER \
+                         ATTRIBUTE_VALUE_DEFINE \
                          ATTRIBUTE_VALUE_DEFINE_WITH_NAME \
-                         ATTRIBUTE_HELPER_HEADER_2
+                         ATTRIBUTE_VALUE_IMPLEMENT \
+                         ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME
 
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all references to function-like macros
-# that are alone on a line, have an all uppercase name, and do not end with a
-# semicolon, because these will confuse the parser if not removed.
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 SKIP_FUNCTION_MACROS   = YES
 
 #---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
 #---------------------------------------------------------------------------
 
-# The TAGFILES option can be used to specify one or more tagfiles. For each
-# tag file the location of the external documentation should be added. The
-# format of a tag file without this location is as follows:
-#
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
 # TAGFILES = file1 file2 ...
 # Adding location for the tag files is done as follows:
-#
 # TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths
-# or URLs. Note that each tag file must have a unique name (where the name does
-# NOT include the path). If a tag file is not located in the directory in which
-# doxygen is run, you must also specify the path to the tagfile here.
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
 
 TAGFILES               =
 
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
 
 GENERATE_TAGFILE       =
 
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
 
 ALLEXTERNALS           = NO
 
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
 
 EXTERNAL_GROUPS        = YES
 
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
 # The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
 
 PERL_PATH              = /usr/bin/perl
 
@@ -1739,222 +2153,306 @@
 # Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option also works with HAVE_DOT disabled, but it is recommended to
-# install and use dot, since it yields more powerful graphs.
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
 
 CLASS_DIAGRAMS         = YES
 
 # You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
 # the mscgen tool resides. If left empty the tool is assumed to be found in the
 # default search path.
 
 MSCGEN_PATH            =
 
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
 
 HIDE_UNDOC_RELATIONS   = YES
 
 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
 
 HAVE_DOT               = YES
 
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
-# allowed to run in parallel. When set to 0 (the default) doxygen will
-# base this on the number of processors available in the system. You can set it
-# explicitly to a value larger than 0 to get control over the balance
-# between CPU load and processing speed.
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_NUM_THREADS        = 0
 
-# By default doxygen will use the Helvetica font for all dot files that
-# doxygen generates. When you want a differently looking font you can specify
-# the font name using DOT_FONTNAME. You need to make sure dot is able to find
-# the font, which can be done by putting it in a standard location or by setting
-# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
-# directory containing the font.
-
-DOT_FONTNAME           = FreeSans
-
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
-# The default size is 10pt.
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_FONTSIZE           = 10
 
-# By default doxygen will tell dot to use the Helvetica font.
-# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
-# set the path where dot can find it.
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_FONTPATH           =
 
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# CLASS_DIAGRAMS tag to NO.
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 CLASS_GRAPH            = YES
 
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 COLLABORATION_GRAPH    = YES
 
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 GROUP_GRAPHS           = YES
 
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
 # collaboration diagrams in a style similar to the OMG's Unified Modeling
 # Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 UML_LOOK               = NO
 
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside
-# the class node. If there are many fields or methods and many nodes the
-# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
-# threshold limits the number of items for each type to make the size more
-# managable. Set this to 0 for no limit. Note that the threshold may be
-# exceeded by 50% before the limit is enforced.
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 UML_LIMIT_NUM_FIELDS   = 10
 
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 TEMPLATE_RELATIONS     = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 INCLUDE_GRAPH          = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 INCLUDED_BY_GRAPH      = YES
 
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then
-# doxygen will generate a call dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable call graphs
-# for selected functions only using the \callgraph command.
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 CALL_GRAPH             = YES
 
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
-# doxygen will generate a caller dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable caller
-# graphs for selected functions only using the \callergraph command.
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 CALLER_GRAPH           = YES
 
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will generate a graphical hierarchy of all classes instead of a textual one.
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 GRAPHICAL_HIERARCHY    = YES
 
-# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DIRECTORY_GRAPH        = YES
 
 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are svg, png, jpg, or gif.
-# If left blank png will be used. If you choose svg you need to set
-# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-# visible in IE 9+ (other browsers do not have this requirement).
+# generated by dot.
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif and svg.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_IMAGE_FORMAT       = png
 
 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
 # enable generation of interactive SVG images that allow zooming and panning.
-# Note that this requires a modern browser other than Internet Explorer.
-# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
-# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-# visible. Older versions of IE do not have SVG support.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 INTERACTIVE_SVG        = NO
 
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
 # found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_PATH               =
 
 # The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOTFILE_DIRS           =
 
 # The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the
-# \mscfile command).
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
 
 MSCFILE_DIRS           =
 
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the
-# number of direct children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_GRAPH_MAX_NODES    = 50
 
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 MAX_DOT_GRAPH_DEPTH    = 0
 
 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not
-# seem to support this out of the box. Warning: Depending on the platform used,
-# enabling this option may lead to badly anti-aliased labels on the edges of
-# a graph (i.e. they become hard to read).
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_TRANSPARENT        = NO
 
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
 # files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_MULTI_TARGETS      = NO
 
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 GENERATE_LEGEND        = YES
 
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_CLEANUP            = YES
diff -Naur ns-3.21/doc/doxygen.warnings.report.sh ns-3.22/doc/doxygen.warnings.report.sh
--- ns-3.21/doc/doxygen.warnings.report.sh	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/doxygen.warnings.report.sh	2015-02-05 15:46:22.000000000 -0800
@@ -5,7 +5,8 @@
 
 me=$(basename $0)
 DIR="$(dirname $0)"
-ROOT="$(hg root)"
+# Trick to get the absolute path, since doxygen prefixes errors that way
+ROOT=$(cd "$DIR/.."; pwd)
 
 # Known log files
 STANDARDLOGFILE=doxygen.log
@@ -13,6 +14,9 @@
 # Default choice:  generate it
 LOG="$DIR/$WARNINGSLOGFILE"
 
+# Verbose log
+VERBLOG="$DIR/doxygen.verbose.log"
+
 
 # Options ------------------------------
 #
@@ -21,51 +25,96 @@
 {
     cat <<-EOF
 	
-	Usage: $me [-eth] [-f <log-file> | -l | -s] [-m <module> | -F <regex>]
+	Usage: $me [-eithv] [-f <log-file> | -l | -s] [-m <module> | -F <regex>]
 	
 	Run doxygen to generate all errors; report error counts
 	by module and file.
 	
-	The default behavior is to modify doxygen.conf temporarily to
-	report all undocumented elements, and to reduce the run time.
-	The output of this special run is kept in doc/$WARNINGSLOGFILE.
-
-	The -e and -t options exclude examples and test directories
-	from the counts.  The -m option only includes a specific module.
-	The -F option only includes files (or warnings) matching the <regex>.
-	The -m and -F options append the relevant warnings after the
-	numerical report.  These can be used in any combination.
+	-i  Skip build and print-introspected-doxygen.
 	
+	-f  Skip doxygen run; use existing <log-file>.
+	-s  Skip doxygen run; use existing warnings log doc/$WARNINGSLOGFILE
+	-l  Skip doxygen run; use the normal doxygen log doc/$STANDARDLOGFILE
+		
 	-e  Filter out warnings from */examples/*
 	-t  Filter out warnings from */test/*
 	-m  Only include files matching src/<module>
 	-F  Only include files matching the <regex> 
 
+	-v  Show the doxygen run output
+	-h  Print this usage message
+	    
+	The default behavior is to modify doxygen.conf temporarily to
+	report all undocumented elements, and to reduce the run time.
+	The output of this special run is kept in doc/$WARNINGSLOGFILE.
+	To further reduce the run time, the -i option also skips
+	print-introspected-doxygen, so waf doesn\'t have to compile
+	any modified files at all.
+
 	The -f, -l, and -s options skip the doxygen run altogether.
 	The first two use a specified or the standard log file;
 	the -s option uses the warnings log from a prior run.
 	Only the first of -f <log-file>, -s, or -l will have effect.
 		
-	-f  Skip doxygen run; use existing <log-file>.
-	-s  Skip doxygen run; use existing warnings log doc/$WARNINGSLOGFILE
-	-l  Skip doxygen run; use the normal doxygen log doc/$STANDARDLOGFILE
-		
-	-h  Print this usage message
-	    
+	The -e and -t options exclude examples and test directories
+	from the counts.  The -m option only includes a specific module.
+	The -F option only includes files (or warnings) matching the <regex>.
+	The -m and -F options append the relevant warnings after the
+	numerical report.  These can be used in any combination.
+	
 EOF
     exit 1
 }
 
+# Messaging ----------------------------
+#
+
+# Arg -v Verbosity level
+verbosity=0
+
+function verbose
+{
+    if [ "$1" == "-n" ]; then
+	echo -n "$2"
+    elif [ $verbosity -eq 1 ]; then
+	echo "$1 $2"
+    else
+	echo "$2"
+    fi
+}
+
+# Use file handle 6 for verbose output
+rm -f $VERBLOG
+exec 6>$VERBLOG
+
+function status_report
+{
+    local status="$1"
+    local long_msg="$2"
+    if [ $status -eq 0 ]; then
+	verbose "$long_msg "  "done."
+	rm -f $VERBLOG
+    else
+	verbose "$long_msg "  "FAILED.  Details:"
+	cat $VERBLOG
+	rm -f $VERBLOG
+	exit 1
+    fi
+}
+   
+
 # Argument processing ------------------
 #
 
 # -f argument
-usefilearg=0
-logfilearg=
+use_filearg=0
+logfile_arg=
 # -l
-usestandard=0
+use_standard=0
 # skip doxygen run; using existing log file
-SKIPDOXY=0
+skip_doxy=0 
+# skip print-introspected-doxygen, avoiding a build 
+skip_intro=0 
 
 # Filtering flags
 filter_examples=0
@@ -73,11 +122,16 @@
 filter_module=""
 filter_regex=""
 
-while getopts :etm:F:lF:sh option ; do
+echo
+echo "$me:"
+
+while getopts :eitm:F:lF:svh option ; do
 
     case $option in
 	
 	(e)  filter_examples=1        ;;
+
+	(i)  skip_intro=1              ;;
 	
 	(t)  filter_test=1            ;;
 
@@ -85,26 +139,33 @@
 
 	(F)  filter_regex="$OPTARG"   ;;
 
-	(l)  usestandard=1            ;;
+	(l)  use_standard=1            ;;
+
+	(f)  use_filearg=1
+	     logfile_arg="$OPTARG"
+	     ;;
 
-	(f)  usefilearg=1
-	     logfilearg="$OPTARG"
+	(s)  use_filearg=1
+	     logfile_arg="$DIR/$WARNINGSLOGFILE"
 	     ;;
 
-	(s)  usefilearg=1
-	     logfilearg="$DIR/$WARNINGSLOGFILE"
+	(v)  verbosity=1
+	     exec 6>&1
 	     ;;
 
 	(h)  usage ;;
+	
 	(:)  echo "$me: Missing argument to -$OPTARG" ; usage ;;
+	
 	(\?) echo "$me: Invalid option: -$OPTARG"     ; usage ;;
+	
     esac
 done
 
 function checklogfile
 {
     if [ -e "$1" ] ; then
-	SKIPDOXY=1
+	skip_doxy=1
 	LOG="$1"
     else
 	echo "$me: log file $1 does not exist."
@@ -113,22 +174,28 @@
 }
     
 # Which log file
-if [[ $usefilearg -eq 1 && "${logfilearg:-}" != "" ]] ; then
-    checklogfile "$logfilearg"
-elif [ $usestandard -eq 1 ]; then
+if [[ $use_filearg -eq 1 && "${logfile_arg:-}" != "" ]] ; then
+    checklogfile "$logfile_arg"
+elif [ $use_standard -eq 1 ]; then
     checklogfile "$DIR/$STANDARDLOGFILE"
 fi
 
 #  Run doxygen -------------------------
 #
 
-if [ $SKIPDOXY -eq 1 ]; then
+if [ $skip_doxy -eq 1 ]; then
     echo
     echo "Skipping doxygen run, using existing log file $LOG"
 else
 
-    # Run introspection, which may require a build
-    (cd "$ROOT" && ./waf --run print-introspected-doxygen >doc/introspected-doxygen.h)
+    if [ $skip_intro -eq 1 ]; then
+	verbose "" "Skipping ./waf build and print-introspected-doxygen."
+    else
+        # Run introspection, which may require a build
+	verbose -n "Building and running print-introspected-doxygen..."
+	(cd "$ROOT" && ./waf --run print-introspected-doxygen >doc/introspected-doxygen.h >&6 2>&6 )
+	status_report $? "./waf build"
+    fi
 
     # Modify doxygen.conf to generate all the warnings
     # (We also suppress dot graphs, so shorten the run time.)
@@ -137,20 +204,14 @@
 
     sed -i.bak -E '/^EXTRACT_ALL |^HAVE_DOT |^WARNINGS /s/YES/no/' $conf
 
-    echo
-    echo -n "Rebuilding doxygen docs with full errors..."
-    (cd "$ROOT" && ./waf --doxygen >/dev/null 2>&1)
+    verbose -n "Rebuilding doxygen (v$(doxygen --version)) docs with full errors..."
+    (cd "$ROOT" && ./waf --doxygen-no-build >&6 2>&6 )
     status=$?
 
     rm -f $conf
     mv -f $conf.bak $conf
 
-    if [ $status -eq 0 ]; then
-	echo "Done."
-    else
-	echo "FAILED."
-	exit 1
-    fi
+    status_report $status "Doxygen run"
 
     cp -f "$DIR/$STANDARDLOGFILE" "$DIR/$WARNINGSLOGFILE"
 
@@ -162,7 +223,7 @@
 # Filter regular expression for -m and -F
 filter_inRE=""
 if [ "$filter_module" != "" ] ; then
-    filter_inRE="src/$filter_module"
+    filter_inRE="${filter_inRE:-}${filter_inRE:+\\|}src/$filter_module"
 fi
 if [ "$filter_regex" != "" ] ; then
     filter_inRE="${filter_inRE:-}${filter_inRE:+\\|}$filter_regex"
@@ -171,7 +232,7 @@
 # Filter regular expression for -e and -t
 filter_outRE=""
 if [ $filter_examples -eq 1 ]; then
-    filter_outRE="/examples/"
+    filter_outRE="${filter_outRE:-}${filter_outRE:+\\|}/examples/"
 fi
 if [ $filter_test -eq 1 ]; then
     filter_outRE="${filter_outRE:-}${filter_outRE:+\\|}/test/"
@@ -199,9 +260,14 @@
 	flog=$( echo "$flog" | grep -v "$filter_outRE" )
     fi
 
+    flog=$(                         \
+	echo "$flog"              | \
+	sort -t ':' -k1,1 -k2,2n  | \
+	uniq                        \
+	)
+
     echo "$flog"
 }
-    
 
 # Analyze the log ----------------------
 #
@@ -266,9 +332,9 @@
 # Filtered in warnings
 filterin=
 if [ "${filter_inRE:-}" != "" ] ; then
-    filterin=$(                 \
-	filter_log            | \
-	sed "s|$ROOT/||g"       \
+    filterin=$(              \
+	filter_log         | \
+	sed "s|$ROOT/||g"    \
 	)
 fi
 
diff -Naur ns-3.21/doc/main.h ns-3.22/doc/main.h
--- ns-3.21/doc/main.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/main.h	2015-02-05 15:46:22.000000000 -0800
@@ -13,8 +13,7 @@
  *
  * \section install-sec Building the Documentation
  * 
- * ns-3 requires Doxygen version 1.5.4 or greater to fully build all items,
- * although earlier versions of Doxygen will mostly work.
+ * ns-3 requires Doxygen version 1.8.3.1 or greater.
  * 
  * Type "./waf --doxygen" or "./waf --doxygen-no-build" to build the 
  *  documentation.  The doc/ directory contains
diff -Naur ns-3.21/doc/manual/Makefile ns-3.22/doc/manual/Makefile
--- ns-3.21/doc/manual/Makefile	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/manual/Makefile	2015-02-05 15:46:22.000000000 -0800
@@ -90,13 +90,22 @@
 
 RESCALE = ../../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) $($@_width) $@ ; fi
-
+%.eps : %.dia
+	@echo dia $(notdir $<)
+	@$(DIA) -t eps $< -e $@ >/dev/null
+
+%.png : %.dia
+	@echo dia $(notdir $<)
+	@$(DIA) -t png $< -e $@ >/dev/null
+
+%.png : %.eps
+	@echo convert $(notdir $<)
+	@$(CONVERT) $< $@ >/dev/null
+
+%.pdf : %.eps
+	@echo epstopdf $(notdir $<)
+	@$(EPSTOPDF) $< -o=$@ >/dev/null
+	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 # You can set these variables from the command line.
 SPHINXOPTS    =
@@ -135,7 +144,7 @@
 copy-sources:  $(SOURCES)
 	@rm -rf $(SOURCETEMP)
 	@mkdir -p $(SOURCETEMP) 
-	@mkdir -p $(FIGURES) 
+	@mkdir -p $(FIGURES)
 	@cp -r $(SOURCES) $(SOURCETEMP)
 	@cp -r $(SOURCEFIGS) $(FIGURES)
 
diff -Naur ns-3.21/doc/manual/source/conf.py ns-3.22/doc/manual/source/conf.py
--- ns-3.21/doc/manual/source/conf.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/manual/source/conf.py	2015-02-05 15:46:22.000000000 -0800
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.21'
+version = 'ns-3.22'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.21'
+release = 'ns-3.22'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.21/doc/manual/source/documentation.rst ns-3.22/doc/manual/source/documentation.rst
--- ns-3.21/doc/manual/source/documentation.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/manual/source/documentation.rst	2015-02-05 15:46:22.000000000 -0800
@@ -476,7 +476,7 @@
    src/mesh/helper/dot11s/dot11s-installer.h:72: warning: Member m_root (variable) of class ns3::Dot11sStack is not documented.
    src/mesh/helper/dot11s/dot11s-installer.h:35: warning: return type of member ns3::Dot11sStack::GetTypeId is not documented
    src/mesh/helper/dot11s/dot11s-installer.h:56: warning: return type of member ns3::Dot11sStack::InstallStack is not documented
-   src/mesh/helper/flame/flame-installer.h:40: warning: Member GetTypeId() (function) of class ns3::FlameStack is not documented.
+   src/mesh/helper/flame/lfame-installer.h:40: warning: Member GetTypeId() (function) of class ns3::FlameStack is not documented.
    src/mesh/helper/flame/flame-installer.h:60: warning: return type of member ns3::FlameStack::InstallStack is not documented
    src/mesh/helper/mesh-helper.h:213: warning: Member m_nInterfaces (variable) of class ns3::MeshHelper is not documented.
    src/mesh/helper/mesh-helper.h:214: warning: Member m_spreadChannelPolicy (variable) of class ns3::MeshHelper is not documented.
@@ -519,6 +519,16 @@
     */
     class Foo
 
+* Did you know ``typedefs`` can have formal arguments?  This enables
+  documentation of function pointer signatures::
+
+    /**
+     * Bar callback function signature.
+     *
+     * \param ale The size of a pint of ale, in Imperial ounces.
+     */
+    typedef void (* BarCallback)(const int ale);
+    
 * Copy the ``Attribute`` help strings from the ``GetTypeId`` method to use
   as the brief descriptions of associated members.
 
diff -Naur ns-3.21/doc/manual/source/index.rst ns-3.22/doc/manual/source/index.rst
--- ns-3.21/doc/manual/source/index.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/manual/source/index.rst	2015-02-05 15:46:22.000000000 -0800
@@ -10,8 +10,8 @@
 * Tutorial, Manual *(this document)*, and Model Library for the `latest release <http://www.nsnam.org/documentation/latest/>`_ and `development tree <http://www.nsnam.org/ns-3-dev/documentation/>`_
 * `ns-3 wiki <http://www.nsnam.org/wiki/Main_Page>`_
 
-This document is written in `reStructuredText <http://docutils.sourceforge.net/rst.html>`_ for `Sphinx <http://sphinx.pocoo.org/>`_ and is maintained in the
-``doc/manual`` directory of ns-3's source code.
+Contents
+--------
 
 .. toctree::
    :maxdepth: 2
@@ -34,3 +34,10 @@
    python
    tests
    support
+
+Source
+------
+				   
+This document is written in `reStructuredText <http://docutils.sourceforge.net/rst.html>`_ for `Sphinx <http://sphinx.pocoo.org/>`_ and is maintained in the
+``doc/manual`` directory of ns-3's source code.
+
diff -Naur ns-3.21/doc/manual/source/logging.rst ns-3.22/doc/manual/source/logging.rst
--- ns-3.21/doc/manual/source/logging.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/manual/source/logging.rst	2015-02-05 15:46:22.000000000 -0800
@@ -320,7 +320,7 @@
 Adding logging to your code is very simple:
 
 1. Invoke the ``NS_LOG_COMPONENT_DEFINE (...);`` macro
-   outside of ``namespace ns3``.
+   inside of ``namespace ns3``.
 
   Create a unique string identifier (usually based on the name of the file
   and/or class defined within the file) and register it with a macro call
@@ -328,9 +328,9 @@
 
   ::
 
-    NS_LOG_COMPONENT_DEFINE ("Ipv4L3Protocol");
-
     namespace ns3 {
+    
+    NS_LOG_COMPONENT_DEFINE ("Ipv4L3Protocol");
     ...
 
   This registers ``Ipv4L3Protocol`` as a log component.
diff -Naur ns-3.21/doc/manual/source/new-modules.rst ns-3.22/doc/manual/source/new-modules.rst
--- ns-3.21/doc/manual/source/new-modules.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/manual/source/new-modules.rst	2015-02-05 15:46:22.000000000 -0800
@@ -11,14 +11,15 @@
 This chapter walks you through the steps necessary to add a new module
 to |ns3|.
 
-Step 1 - Familiarize yourself with the module layout
-****************************************************
+.. _Step-0:
+
+Step 0 - Module Layout
+**********************
 
 All modules can be found in the ``src`` directory.  Each module can be
 found in a directory that has the same name as the module.  For
-example, the spectrum module can be found here: ::
-
-  src/spectrum
+example, the ``spectrum`` module can be found here: ``src/spectrum``.
+We'll be quoting from the ``spectrum`` module for illustration.
 
 A prototypical module has the following directory structure and
 required files:
@@ -26,129 +27,164 @@
 .. sourcecode:: text
 
   src/
-        module-name/
-                bindings/
-                doc/
-                examples/
-                        wscript
-                helper/
-                model/
-                test/
-                        examples-to-run.py
-                wscript
+    module-name/
+      bindings/
+      doc/
+      examples/
+        wscript
+      helper/
+      model/
+      test/
+        examples-to-run.py
+      wscript
 
 Not all directories will be present in each module.
 
-Step 2 - Create your new module based on the template module
-************************************************************
+Step 1 - Create a Module Skeleton
+*********************************
 
-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:
+A python program is provided in the source directory that
+will create a skeleton for a new module.  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:
 
 .. sourcecode:: bash
 
   $ ./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
+  $ cd new-module
+  $ ls
+  doc examples  helper  model  test  wscript
+
+In more detail, the ``create-module.py`` script will create the
+directories as well as initial skeleton ``wscript``, ``.h``, ``.cc``
+and ``.rst`` files.  The complete module with skeleton files looks like this:
+
+.. sourcecode:: text
 
-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:
+    src/
+      new-module/
+        doc/
+	  new-module.rst
+	examples/
+	  new-module-example.cc
+	  wscript
+	helper/
+	  new-module-helper.cc
+	  new-module-helper.h
+	model/
+	  new-module.cc
+	  new-module.h
+	test/
+	  new-module-test-suite.cc
+	wscript
+
+(If required the ``bindings/`` directory listed in
+:ref:`Step-0 <Step-0>` will be created automatically during
+the build.)
+
+We next walk through how to customize this module.  Informing ``waf``
+about the files which make up your module is done by editing the two
+``wscript`` files.  We will walk through the main steps in this chapter.
+
+All |ns3| modules depend on the ``core`` module and usually on
+other modules.  This dependency is specified in the ``wscript`` file
+(at the top level of the module, not the separate ``wscript`` file
+in the ``examples`` directory!).  In the skeleton ``wscript``
+the call that will declare your new module to ``waf`` will look
+like this (before editing):
 
 .. sourcecode:: python
 
   def build(bld):
       module = bld.create_ns3_module('new-module', ['core'])
 
-and after editing:
+Let's assume that ``new-module`` depends on the ``internet``,
+``mobility``, and ``aodv`` modules.  After editing it the ``wscript`` file
+should look like:
 
 .. sourcecode:: python
 
   def build(bld):
       module = bld.create_ns3_module('new-module', ['internet', 'mobility', 'aodv'])
 
-Your module will most likely have model source files.  Initial skeletons (which will compile successfully) are created in ``model/new-module.cc`` and ``model/new-module.h``.  
-
-If your module will have helper source files, then they will go into the helper/ directory; again, initial skeletons are created in that directory.
+Note that only first level module dependencies should be listed, which
+is why we removed ``core``; the ``internet`` module in turn depends on
+``core``.
+
+Your module will most likely have model source files.  Initial skeletons
+(which will compile successfully) are created in ``model/new-module.cc``
+and ``model/new-module.h``.  
+
+If your module will have helper source files, then they will go into
+the ``helper/`` directory; again, initial skeletons are created
+in that directory.
+
+Finally, it is good practice to write tests and examples.  These will
+almost certainly be required for new modules to be accepted into
+the official |ns3| source tree.  A skeleton
+test suite and test case is created in the ``test/`` directory.
+The skeleton test suite will contain the below constructor,
+which declares a new unit test named ``new-module``,
+with a single test case consisting of the class ``NewModuleTestCase1``::
 
-Finally, it is good practice to write tests.  A skeleton test suite and test case is created in the test/ directory.  The below constructor specifies that it will be a unit test named 'new-module':  ::
-
-  New-moduleTestSuite::New-moduleTestSuite ()
+  NewModuleTestSuite::NewModuleTestSuite ()
     : TestSuite ("new-module", UNIT)
   {
-    AddTestCase (new New-moduleTestCase1);
+    AddTestCase (new NewModuleTestCase1);
   }
 
-Step 3 - Adding to your module's source files
-*********************************************
-
-If your new module has model and/or helper source files, then they
-must be specified in your
-
-.. sourcecode:: text
-
-  src/new-module/wscript
+Step 3 - Declare Source Files
+*****************************
 
-file by modifying it with your text editor.
+The public header and source code files for your new module
+should be specified in the ``wscript`` file by modifying it with
+your text editor.
 
-As an example, the source files for the spectrum module are specified
-in
+As an example, after declaring the ``spectrum`` module,
+the ``src/spectrum/wscript`` specifies the source code files
+with the following list:
 
-.. sourcecode:: text
-
-  src/spectrum/wscript
+.. sourcecode:: python
 
-with the following list of source files:
+   def build(bld):
 
-.. sourcecode:: python
+     module = bld.create_ns3_module('spectrum', ['internet', 'propagation', 'antenna', 'applications'])
 
-    module.source = [
-        'model/spectrum-model.cc',
-        'model/spectrum-value.cc',
+     module.source = [
+         'model/spectrum-model.cc',
+         'model/spectrum-value.cc',
                .
 	       .
 	       .
-        'model/microwave-oven-spectrum-value-helper.cc',
-        'helper/spectrum-helper.cc',
-        'helper/adhoc-aloha-noack-ideal-phy-helper.cc',
-        'helper/waveform-generator-helper.cc',
-        'helper/spectrum-analyzer-helper.cc',
-        ]
-
-Step 4 - Specify your module's header files
-*******************************************
+         'model/microwave-oven-spectrum-value-helper.cc',
+         'helper/spectrum-helper.cc',
+         'helper/adhoc-aloha-noack-ideal-phy-helper.cc',
+         'helper/waveform-generator-helper.cc',
+         'helper/spectrum-analyzer-helper.cc',
+         ]
+
+The objects resulting from compiling these sources will be assembled
+into a link library, which will be linked to any programs relying on this
+module.
 
-If your new module has model and/or helper header files, then they
-must be specified in your
+But how do such programs learn the public API of our new module?  Read on!
 
-.. 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
-
-.. sourcecode:: text
+Step 4 - Declare Public Header Files
+************************************
 
-  src/spectrum/wscript
+The header files defining the public API of your model and helpers
+also should be specified in the ``wscript`` file.
 
-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:
+Continuing with the ``spectrum`` model illustration,
+the public header files are specified with the following stanza.
+(Note that the argument to the ``bld`` function tells
+``waf`` to install this module's headers with the other |ns3| headers):
 
 .. sourcecode:: python
 
@@ -169,24 +205,29 @@
         'helper/spectrum-analyzer-helper.h',
         ]
 
-Step 5 - Specify your module's tests
-************************************
+Headers made public in this way will be accessible to users of your model
+with include statements like
 
-If your new module has tests, then they must be specified in your
+.. sourcecode:: cpp
 
-.. sourcecode:: text
+    #include "ns3/spectrum-model.h"
+    	
+Headers used strictly internally in your implementation should not
+be included here.  They are still accessible to your implemenation by
+include statements like
 
-  src/new-module/wscript
+.. sourcecode:: cpp
 
-file by modifying it with your text editor.
+    #include "my-module-implementation.h"
 
-As an example, the tests for the spectrum module are specified in
 
-.. sourcecode:: text
+Step 5 - Declare Tests
+**********************
 
-  src/spectrum/wscript
+If your new module has tests, then they must be specified in your
+``wscript`` file by modifying it with your text editor.
 
-with the following function call and list of test suites:
+The ``spectrum`` model tests are specified with the following stanza:
 
 .. sourcecode:: python
 
@@ -197,62 +238,62 @@
         'test/spectrum-value-test.cc',
         ]
 
+See :doc:`Tests <tests>` for more information on how to write test cases.	
 
-Step 6 - Specify your module's examples
-***************************************
+Step 6 - Declare Examples
+*************************
 
 If your new module has examples, then they must be specified in your
+``examples/wscript`` file.  (The skeleton top-level ``wscript`` will
+recursively include ``examples/wscript`` only if the examples were
+enabled at configure time.)
 
-.. sourcecode:: text
-
-  src/new-module/examples/wscript
+The ``spectrum`` model defines it's first example in
+``src/spectrum/examples/wscript`` with
 
-file by modifying it with your text editor.
-
-As an example, the examples for the core module are specified in
+.. sourcecode:: python
 
-.. sourcecode:: text
+  def build(bld):
+    obj = bld.create_ns3_program('adhoc-aloha-ideal-phy',
+                                 ['spectrum', 'mobility'])
+    obj.source = 'adhoc-aloha-ideal-phy.cc'
 
-  src/core/examples/wscript
+Note that the second argument to the function ``create_ns3_program()``
+is the list of modules that the program being created depends on; again,
+don't forget to include ``new-module`` in the list.  It's best practice
+to list only the direct module dependencies, and let ``waf`` deduce
+the full dependency tree.
 
-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:
+Occasionally, for clarity, you may want to split the implementation
+for your example among several source files.  In this case, just
+include those files as additional explicit sources of the example:
 
 .. sourcecode:: python
 
-    obj = bld.create_ns3_program('main-callback', ['core'])
-    obj.source = 'main-callback.cc'
+   obj = bld.create_ns3_program('new-module-example', [new-module])
+   obj.source = ['new-module-example.cc', 'new-module-example-part.cc']
 
-    obj = bld.create_ns3_program('sample-simulator', ['core'])
-    obj.source = 'sample-simulator.cc'
-
-The core module's Python examples are specified using the following
+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
+``register_ns3_script()`` is the list of modules that the Python example
 depends on:
 
 .. sourcecode:: python
 
-    bld.register_ns3_script('sample-simulator.py', ['core'])
+    bld.register_ns3_script('new-module-example.py', ['new-module'])
 
-Step 7 - Specify which of your module's examples should be run as tests
-***********************************************************************
+Step 7 - Examples Run as Tests
+******************************
 
-The test framework can also be instrumented to run example programs to
+In addition to running explicit test code, the test framework
+can also be instrumented to run full example programs to
 try to catch regressions in the examples.  However, not all examples
-are suitable for regression tests.  A file called ``examples-to-run.py``
-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
+are suitable for regression tests.  The file ``test/examples-to-run.py``
+controls the invocation of the examples when the test framework runs.
 
-.. sourcecode:: text
-
-  src/core/test/examples-to-run.py
-
-using the following two lists of C++ and Python examples:
+The ``spectrum`` model examples run by ``test.py`` are specified in
+``src/spectrum/test/examples-to-run.py`` using the following
+two lists of C++ and Python examples:
 
 .. sourcecode:: python
 
@@ -263,12 +304,9 @@
   #
   # See test.py for more information.
   cpp_examples = [
-      ("main-attribute-value", "True", "True"),
-      ("main-callback", "True", "True"),
-      ("sample-simulator", "True", "True"),
-      ("main-ptr", "True", "True"),
-      ("main-random-variable", "True", "True"),
-      ("sample-random-variable", "True", "True"),
+      ("adhoc-aloha-ideal-phy", "True", "True"),
+      ("adhoc-aloha-ideal-phy-with-microwave-oven", "True", "True"),
+      ("adhoc-aloha-ideal-phy-matrix-propagation-loss-model", "True", "True"),
   ]
   
   # A list of Python examples to run in order to ensure that they remain
@@ -281,57 +319,43 @@
       ("sample-simulator.py", "True"),
   ]
 
-Each tuple in the C++ list of examples to run contains
-
-.. sourcecode:: python
+As indicated in the comment, each entry in the C++ list of examples to run
+contains the tuple ``(example_name, do_run, do_valgrind_run)``, where
 
-    (example_name, do_run, do_valgrind_run)
-
-where example_name is the executable to be run, do_run is a
-condition under which to run the example, and do_valgrind_run is
-a condition under which to run the example under valgrind.  This
-is needed because NSC causes illegal instruction crashes with
-some tests when they are run under valgrind.
+  * ``example_name`` is the executable to be run,
+  * ``do_run`` is a condition under which to run the example, and
+  * ``do_valgrind_run`` is a condition under which to run the example
+    under valgrind.  (This is needed because NSC causes illegal instruction
+    crashes with 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
-
-.. sourcecode:: python
+Each entry in the Python list of examples to run contains the tuple
+``(example_name, do_run)``, where, as for the C++ examples,
 
-    (example_name, do_run)
+  * ``example_name`` is the Python script to be run, and
+  * ``do_run`` is a condition under which to run the example.
 
-where example_name is the Python script to be run and
-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,
+Again, the condition is a Python statement that can
+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
-
-.. sourcecode:: text
-
-  src/new-module/test/examples-to-run.py
-
-file by modifying it with your text editor.  These examples are run by
-test.py.
 
-Step 8 - Build and test your new module
-***************************************
+Step 8 - Configure and Build
+****************************
 
-You can now build and test your module as normal.  You must reconfigure
-the project as a first step or else your new module will not be included
-in the build.
+You can now configure, build and test your module as normal.
+You must reconfigure the project as a first step so that ``waf``
+caches the new information in your ``wscript`` files,
+or else your new module will not be included in the build.
 
 .. sourcecode:: bash
 
@@ -339,9 +363,11 @@
   $ ./waf build
   $ ./test.py
 
-and look for your new module's test suite (and example programs, if enabled) in the test output.
+Look for your new module's test suite (and example programs,
+if your module has any enabled) in the test output.
+
 
-Step 9 - Python bindings
+Step 9 - Python Bindings
 ************************
 
 Adding Python bindings to your module is optional, and the step is
diff -Naur ns-3.21/doc/manual/source/random-variables.rst ns-3.22/doc/manual/source/random-variables.rst
--- ns-3.21/doc/manual/source/random-variables.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/manual/source/random-variables.rst	2015-02-05 15:46:22.000000000 -0800
@@ -105,6 +105,41 @@
 
 .. _seeding-and-independent-replications:
 
+Creating random variables
+*************************
+
+|ns3| supports a number of random variable objects from the base class
+:cpp:class:`RandomVariableStream`.  These objects derive from 
+:cpp:class:`ns3::Object` and are handled by smart pointers.
+
+The correct way to create these objects is to use the templated 
+`CreateObject<>` method, such as:
+
+::
+
+  Ptr<UniformRandomVariable> x = CreateObject<UniformRandomVariable> ();
+
+then you can access values by calling methods on the object such as:
+
+::
+
+  myRandomNo = x->GetInteger ();
+  
+
+If you try to instead do something like this:
+
+::
+
+  myRandomNo = UniformRandomVariable().GetInteger ();
+
+your program will encounter a segmentation fault, because the implementation
+relies on some attribute construction that occurs only when `CreateObject`
+is called.
+
+Much of the rest of this chapter now discusses the properties of the
+stream of pseudo-random numbers generated from such objects, and how to
+control the seeding of such objects.
+
 Seeding and independent replications
 ************************************
 
diff -Naur ns-3.21/doc/models/Makefile ns-3.22/doc/models/Makefile
--- ns-3.21/doc/models/Makefile	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/models/Makefile	2015-02-05 15:46:22.000000000 -0800
@@ -34,7 +34,6 @@
 	$(SRC)/csma/doc/csma.rst \
 	$(SRC)/dsdv/doc/dsdv.rst \
 	$(SRC)/dsr/doc/dsr.rst \
-	$(SRC)/emu/doc/emu.rst \
 	$(SRC)/mpi/doc/distributed.rst \
 	$(SRC)/energy/doc/energy.rst \
 	$(SRC)/fd-net-device/doc/fd-net-device.rst \
@@ -143,12 +142,12 @@
 	$(SRC)/lte/doc/source/figures/epcSimulationTime.eps \
 	$(SRC)/lte/doc/source/figures/epcEutranRunningTime.eps \
 	$(SRC)/lte/doc/source/figures/profiling-memory.eps \
-	$(SRC)/lte/doc/source/figures/lte-rlc-implementation-model.eps \
-	$(SRC)/lte/doc/source/figures/lte-rlc-data-txon-dl.eps \
-	$(SRC)/lte/doc/source/figures/lte-rlc-data-retx-dl.eps \
-	$(SRC)/lte/doc/source/figures/lte-rlc-data-txon-ul.eps \
-	$(SRC)/lte/doc/source/figures/lte-rlc-data-retx-ul.eps \
-	$(SRC)/lte/doc/source/figures/lte-epc-x2-entity-saps.eps \
+	$(SRC)/lte/doc/source/figures/lte-rlc-implementation-model.dia \
+	$(SRC)/lte/doc/source/figures/lte-rlc-data-txon-dl.dia \
+	$(SRC)/lte/doc/source/figures/lte-rlc-data-retx-dl.dia \
+	$(SRC)/lte/doc/source/figures/lte-rlc-data-txon-ul.dia \
+	$(SRC)/lte/doc/source/figures/lte-rlc-data-retx-ul.dia \
+	$(SRC)/lte/doc/source/figures/lte-epc-x2-entity-saps.dia \
 	$(SRC)/lte/doc/source/figures/lte-strongest-cell-handover-algorithm.eps \
 	$(SRC)/lte/doc/source/figures/lte-phy-interference.pdf \
 	$(SRC)/lte/doc/source/figures/lte-phy-interference.png \
@@ -176,22 +175,14 @@
 	$(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/fr-enhanced-fractional-frequency-reuse-scheme.png \
-	$(SRC)/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.pdf \
-	$(SRC)/lte/doc/source/figures/fr-full-frequency-reuse-scheme.png \
-	$(SRC)/lte/doc/source/figures/fr-full-frequency-reuse-scheme.pdf \
-	$(SRC)/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.png \
-	$(SRC)/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.pdf \
-	$(SRC)/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.png \
-	$(SRC)/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.pdf \
-	$(SRC)/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.png \
-	$(SRC)/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.pdf \
-	$(SRC)/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.png \
-	$(SRC)/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.pdf \
-	$(SRC)/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.png \
-	$(SRC)/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.pdf \
-	$(SRC)/lte/doc/source/figures/ffr-distributed-scheme.png \
-	$(SRC)/lte/doc/source/figures/ffr-distributed-scheme.pdf \
+	$(SRC)/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.dia \
+	$(SRC)/lte/doc/source/figures/fr-full-frequency-reuse-scheme.dia \
+	$(SRC)/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.dia \
+	$(SRC)/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.dia \
+	$(SRC)/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.dia \
+	$(SRC)/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.dia \
+	$(SRC)/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.dia \
+	$(SRC)/lte/doc/source/figures/ffr-distributed-scheme.dia \
 	$(SRC)/lte/doc/source/figures/lte-fr-soft-1-rem.png \
 	$(SRC)/lte/doc/source/figures/lte-fr-soft-1-rem.pdf \
 	$(SRC)/lte/doc/source/figures/lte-ffr-soft-2-spectrum-trace.png \
@@ -226,10 +217,8 @@
 	$(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-dl-power-control.png \
-	$(SRC)/lte/doc/source/figures/lte-dl-power-control.pdf \
-	$(SRC)/lte/doc/source/figures/lte-ffr-scheduling.png \
-	$(SRC)/lte/doc/source/figures/lte-ffr-scheduling.pdf \
+	$(SRC)/lte/doc/source/figures/lte-dl-power-control.dia \
+	$(SRC)/lte/doc/source/figures/lte-ffr-scheduling.dia \
 	$(SRC)/lte/doc/source/figures/lte-handover-campaign-rem.pdf \
 	$(SRC)/lte/doc/source/figures/lte-handover-campaign-rem.png \
 	$(SRC)/lte/doc/source/figures/lte-legacy-handover-algorithm.pdf \
@@ -296,6 +285,16 @@
 	$(FIGURES)/eutran-profiling-scenario.eps \
 	$(FIGURES)/ff-example.eps \
 	$(FIGURES)/ff-mac-saps.eps \
+	$(FIGURES)/lte-dl-power-control.eps \
+	$(FIGURES)/lte-ffr-scheduling.eps \
+	$(FIGURES)/fr-enhanced-fractional-frequency-reuse-scheme.eps \
+	$(FIGURES)/fr-full-frequency-reuse-scheme.eps \
+	$(FIGURES)/fr-hard-frequency-reuse-scheme.eps \
+	$(FIGURES)/fr-soft-fractional-frequency-reuse-scheme.eps \
+	$(FIGURES)/fr-soft-frequency-reuse-scheme-v1.eps \
+	$(FIGURES)/fr-soft-frequency-reuse-scheme-v2.eps \
+	$(FIGURES)/fr-strict-frequency-reuse-scheme.eps \
+	$(FIGURES)/ffr-distributed-scheme.eps \
 	$(FIGURES)/lte-arch-enb-data.eps \
 	$(FIGURES)/lte-arch-enb-ctrl.eps \
 	$(FIGURES)/lte-arch-ue-data.eps \
@@ -364,6 +363,16 @@
 $(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-dl-power-control.pdf_width = 8cm
+$(FIGURES)/lte-ffr-scheduling.pdf_width = 8cm
+$(FIGURES)/fr-enhanced-fractional-frequency-reuse-scheme.pdf_width = 8cm
+$(FIGURES)/fr-full-frequency-reuse-scheme.pdf_width = 8cm
+$(FIGURES)/fr-hard-frequency-reuse-scheme.pdf_width = 8cm
+$(FIGURES)/fr-soft-fractional-frequency-reuse-scheme.pdf_width = 8cm
+$(FIGURES)/fr-soft-frequency-reuse-scheme-v1.pdf_width = 8cm
+$(FIGURES)/fr-soft-frequency-reuse-scheme-v2.pdf_width = 8cm
+$(FIGURES)/fr-strict-frequency-reuse-scheme.pdf_width = 8cm
+$(FIGURES)/ffr-distributed-scheme.pdf_width = 8cm
 $(FIGURES)/lte-arch-enb-data.pdf_width = 6cm 
 $(FIGURES)/lte-arch-enb-ctrl.pdf_width = 10cm
 $(FIGURES)/lte-arch-ue-data.pdf_width = 6cm
@@ -371,7 +380,9 @@
 $(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-dl.pdf_width = 10cm
 $(FIGURES)/lte-rlc-data-retx-ul.pdf_width = 10cm
+$(FIGURES)/lte-epc-x2-entity-saps.pdf_width = 12cm
 $(FIGURES)/lte-phy-interference.pdf_width = 12cm
 $(FIGURES)/lte-subframe-structure.pdf_width = 2in
 $(FIGURES)/mac-random-access-contention.pdf_width = 10cm
@@ -389,11 +400,21 @@
 
 RESCALE = ../../utils/rescale-pdf.sh
 
-%.eps : %.dia; $(DIA) -t eps $< -e $@
-%.png : %.dia; $(DIA) -t png $< -e $@
-%.png : %.eps; $(CONVERT) $< $@
+%.eps : %.dia
+	@echo dia $(notdir $<)
+	@$(DIA) -t eps $< -e $@ >/dev/null
+
+%.png : %.dia
+	@echo dia $(notdir $<)
+	@$(DIA) -t png $< -e $@ >/dev/null
+
+%.png : %.eps
+	@echo convert $(notdir $<)
+	@$(CONVERT) $< $@ >/dev/null
+
 %.pdf : %.eps
-	$(EPSTOPDF) $< -o=$@
+	@echo epstopdf $(notdir $<)
+	@$(EPSTOPDF) $< -o=$@ >/dev/null
 	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 # You can set these variables from the command line.
diff -Naur ns-3.21/doc/models/source/conf.py ns-3.22/doc/models/source/conf.py
--- ns-3.21/doc/models/source/conf.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/models/source/conf.py	2015-02-05 15:46:22.000000000 -0800
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.21'
+version = 'ns-3.22'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.21'
+release = 'ns-3.22'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.21/doc/models/source/emulation-overview.rst ns-3.22/doc/models/source/emulation-overview.rst
--- ns-3.21/doc/models/source/emulation-overview.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/models/source/emulation-overview.rst	2015-02-05 15:46:22.000000000 -0800
@@ -18,8 +18,7 @@
 
 **Note:** Prior to ns-3.17, the emulation capability was provided by a
 special device called an ``Emu`` NetDevice; the ``Emu`` NetDevice has
-been superseded by the ``FdNetDevice``, and will be deprecated and removed
-in future revisions of |ns3|.
+been replaced by the ``FdNetDevice``.
 
 One of the use-cases we want to support is that of a testbed. A concrete example
 of an environment of this kind is the ORBIT testbed. ORBIT is a laboratory
@@ -83,6 +82,5 @@
 
 .. toctree::
 
-  emu
   fd-net-device
   tap
diff -Naur ns-3.21/doc/tutorial/figures/cwnd.png ns-3.22/doc/tutorial/figures/cwnd.png
--- ns-3.21/doc/tutorial/figures/cwnd.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/figures/cwnd.png	2015-02-05 15:46:22.000000000 -0800
@@ -1,37 +1,36 @@
 PNG
 
-   IHDR       ,  )PLTE          @      @@  `  ``  @0`` @@@@   ````     ` @`` `   ` ```    @@ @` ```@     ` ` `@ @@`    ``               @ @``  @@`p T&s  IDATx흉 ,Npyv'"i            p3}<PEO BsbǷ@.r#i~va=(G9jfnhۣjqb¤  <893zc)/ߗ
-Hw /tFuh05~ r_ϳaSwDoG݉|~Rmg{\kW	V1ɀT/<(0uԃ#}_P.kv~cw:*fw!QsoF  
-+  
-+  
-+  /ռБ'ٿQ!A@'"oE@lj؜"`k6ٞ~A@l `C[r!q/"`3ή?@@l/('s]&_"Y(aE?Ȳ	ʈ]%K۷qv?庼!.TN$\wuh]'ˈ,?
-F\E!0r"6X.M;'X0 `MCV?Xk0 `-߀O9!`@JdB!`@
-d KL 5!`@@s!`@@s!`@@k$!`@@cD!`@@[d!`@@S$ 5;3h?h?h?h?hF
-ȫRΌP>A@C& R0 !`@@CzCj!`@@- Ɲԡ*QuC*!`@@W Ό
-*P1> y1oX}z/?"YոcDwL`%8,~|_^/b)w'.;V^'%!o@o&'`>b b~48-?(?(p	0ʰ0J |Xfc3̥0*!`@LC0 `9T0z! ^S7vcWT! ^Q?D+2i*w"&"`! & #`@C@?D(-C@m@sxF#Oi")<+oS<?D#C@<pFZ;.~rY?cV1(cz^0%o<RQ^T¥}Wܿ$κ#(:سq9]@!`G ߭mGCLe33S]@VzA|)kY:1b0 'g9u
-uC@׷o]bD\v]O	j&sOD@W-+sN{_9w/93u;Y@}u={WY@Ktn4%]b D{_;/>3um+k]{N)@@I	׃W^KY}FPxڄ¿ hb/b֡s	(n=&cvܬcPXZ.!Z-[mN9霴g%Uʀw,
-+yIWŒQ!IozmO8oX4	hǿ:B ȿP;7e;V;\h9y=wJsnB To&K'=lD:'6>1yv}JsX<艹^O3Cw'V.~v_"U]V#}4P~tf(΍"`IV;<h4Tͼ./v?V%Vq/_)ם롤:c܉[)b_%jguP{@#o5d|+گκgN	ء%cR@qL~߄^kz{RD7W}Y@E.3<>Q'OpѵTMӿP.;wH|𤄓yu2ࢊ:lbX 
-_:-֫dt[&x]<:>|RuZLlZ/`^I,,0=0&۱V;LHOфPP:Q6ۯV;L
-س]	_Zg09>|+ˢLk 
-赳n˸^KhX9pBuӫaR*nlZYNˀviA'
-UsبԢ8 'J/ǇOlwuEzC:GZހ8D #.	#Ղ4:տKpQœ@+Kea7B#F[CU 'ƇA,=#ՂiLP	#]F<	};3&sZ2zs?92r,8[0a*Qjq028#Ղ\J%q>әFpvG"0MpGS
-8!H `9g@+qZll:FHj7ngP0	3ǳa*+1W
-Z-eCaA
-xз;Qr+E3Zs]GDQW2f6l:è'q	ӂZP(?~DPjaPT$Z	xGmOD_~²;|N+Qxs䶛O7
-ĹZT?OOؼ?"
-d|E%
-=@NnMe0_l~ٴ0Q?xG0-D@>x|Q+}ml:F,*z	hX@mh%E%FN%X`X@RPKMEy=|$~R#-_j"p+=Lj	~G!oTٔFEXr-dZeDiy=	8
-,0_#5,66gXti"WXr-\2`*yp	X<
-&gWπ%TY0Xr-<2`2h$+85{&3|bo*z,
-j `:V'?~h/0f.~=6ʀX8>2ѡlڟ+E0V^đh	^~=)m3
-vOIZ^F7OϾq~\^M9dDcc0UqL2_9π ]ZS_G8
-ǟ+:i3ˀ)2 &*/ޏ>;,O5}"FZ^Г3`ϵ{,O5}~.h_h.|O?^eo3;[XIX^ܤ2'd9&@=my=Sd@LU\="t	.L3LL 1QȀV[ +M߾-^ɀ	dW
- h=P	]y=GM Q&iy='5pSz4K$& z^U΀y=?8;$pHp= *dqWиa3Ԉ̀ddcmy=d@WȀ$>P?X[^Ϡ}=}8h"`BĵpP@`P?X[^ϰpKȀfU]Tcmy=d@WȀd@WȀpVi_GGXl
-Kp[,ۇwπ
-3&q3*(0QqvDա#`^,i,'z8~'._|ȀeYSWƴ/d]Xo;6"`NC}y=x%Kc1Yπs9e*
-K ~U'+]Gs4wb"^DK{FpYYSMfN#`t	-dWNɀUT\KtACY֯02x  қjԬ*D΄ۼA]y.WzjMT_5e<Qp~%XR@My5bOo~qtn|hVzAaJ4WER-#eEa>)9YDˊ = ^VEȚoiy5-kpiGe!`~߭ʫM@@tTm10^a=4f"7D~*]Y6x +XWXXXɪ3ʷRB\ ǚ%ؕ&e +8((9 `~ڕW GxQ 󌏰13.~q wr^<D2 @@tT}Y0 D@W]A@˱4mr5V-6Ee@ȀM$'̜&7HVSuC@q҆ͩ!6o C@am MԶy + ~x(j@R^@!Q]7H@s-H>ʪ6? `kMk6*wY\cހ!aԐP7T
-
- 
-+  
-+'Mkqڿ0CݳBűY{؎#x/?lF l`  b      XwD>/;K)״>NjOzM{O#뾖|'f/{b=6jH_̻[kY,N.-jv\t4ײwCN/;\31^^9Qpz4^s-          4{
-67    IENDB`
\ No newline at end of file
+   IHDR       ,  2PLTE          @  Ai  @0`  @ ԥ** @   333MMMfff22U݂    d  "".W    p    ͇   PE rz挽kܠ   ݠݐP@Uk/ @@`` @@`pͷ|@ ___???w  "IDATx 29v[*Z_<B=sm+	𜡪          }u=]vmvE}l֗DL x}n֗D)ao=|w% ̯j rZ_BmYv} R zoZ_B& ]@YS?!G\C@AH$|x£{LdTb$Tb!	U%\,ݚiJI?$,i ێ˪kt17s>i SvÖzqh5n1ӥ?SU~\ \kuXkO[Ç`}MY8/MgY߯fx90ǫ[cÇͧ_7^~\5j[Fiw2yX iڴm,A{zՈDMZ$4\~?85ܲ2?[T}W{9`Zǲx^vcO+ mIWf$}r)7; `Z5P֫YhK0Sߋ6%[/;Xҟ@ڿ6U3o5I\ޜ`7ܴ	X!"`ZMì:rI['}Y8~ucpX73\ fe"z55ջQ;1uw_8ƱbcK" n55L5ӕtLYmIgu8sjgaly\ HR~K iiXZ0I ?7-cA 4 !aI 4 !aI 4 5o)!sI _N*i پB%u;WMOO i8KO itJ it;J i >ȿ- >ȿ_  ZW >ȿm AUh7 _ A5h? _ Kjq z}5RU, 0e%
+m 5$'qeȺ "+nVSVW 077W窓 0̈i]0#mϏ׋$!.: NLטq #v@?)R~ >ȿN ̙4 et |] _B7' Iu |~ ]kz& d^ SN)/3ɍ? X5ˠ&|rZ" &΀ rɽ3#LL/  ԙ$ # e dl	 ro6\>[/  @
+ w / { K/Ɵ? X |! _u  `a V 8 J)`ah ,̿y3 0"4l lgF `"K 0 %΋j4.c@ 솉s
+ @c>QpNJbQ z}5ihl Ì祛󀕝UqFke>И]fn t
+7b}#MY^%I e*/9ƴb 1ϯ	^vHd1 =s!4.p!?M@F3$D [&6C\@]OMtTʖ $
+ $TPxClT:_$C 	@P W[ HeL |`Y eO \# ,r '`Y Gf)@ 0\ >j3 ,b w; '> ,p X imZS. i;A WO` ,r R, c8 ,* 0@fS- 0 ,R NaT `t{ `ASc b R	 L ?ZYM ,yu + X Y 0^Z `a7̧ 7   @ƒ yَ) WStuTFlGVHK 0ЈVǵR `1VSu"]/_+ )@.V0&؜5RTXF1a9 *}B<@B kKJznK^c r
+ Z|xf g
+|@N + S  r*  c, ? )  9 -}
+  rjD˨ F)wD( 2 9 -Ny	 'IR S96 V +P? ) J 9 m|r % 2
+ \K8e J% dV %+@L ɅF? ( h.7	`G@F0% D 0e"B@>% V t0K   -r
+ &KC+ '}   mYtP 0I
+z@> IRuw͑5 ̓2Gp9 n3!>X7Ϧ=_*aZ9 ns!?2M-  =^+% */%Kۮi`ep KfO4	F#Ym MiqZ!~OI+#iXLL M¥k?Cp@LDt=@ *uKq p1p 5<I O "L, p{olx<DBt7E6 ?zWfQgc. < 7|R*+W8 x n r7ߟ+#e) </  ͍	&Ҝ
+   4 ?X @>%p;  -"˦ps  I@}Vƶp Ŀ>x0c-*Q "
+ P#%xZ ` V[rq|JE+[ ]|( </N   E.;h
+ p7 t|qH  #nD{ :in	Tys8$Zԓ.n<3 $w/ 7) \|  -Tx  mNtVd" = y鿢 vlgp D@]UƜoD@O=)鯢'xV|2azj. {Z@T<i3_iVJá3Uio>Mye7N"ۮit WS</x|D	ؿz *.օHT Fk (6 ǇOo
+!M0?Rm p!ݯ	0X<+}[]E>L9σoGf6
+Wxwka,]4;M FވKp]!pA]CwwW Тx]8 xr  wkKZ
+/zZ|	`0AJ`m]྘",
+y+Np š'aO }	\ vw#
+4
+-z`<0,uqw W YczJ@ ]2E=b V}\#0ShEs؋(Ǻ8;a  /EGM<~oNdKp[cW}-3t)4;ԅL Ve [w播hT&&8W "S[sElVXef"MͲBn#tnz|}[RMHL)"`>}ǒ#N +Q0t%R%oOj{r'=}".in+;|;Ti<]IQ0%[X$	5FtsQo}?VsK#m)  `)(;l s
+ :ě*$W\#0mQ5Ѱ#`VmF&8 $pܿ@<`|zXt/\zT3jߤb]ԥ1yeC:' YՕ V;3;nq^b _ѠaQp\U଺%Q%;u M*'*='e}N5d֜׫@<?۶<`tUDVp=.h~y}@S#id}1a̎j[x$#9ԃԳ!-d|#(~Ybkf=>,epP #&l":F@IF@V =l0U|ܾȉjSwQݽ	"`vrb{"`lp2LeD+\FX:ߋݷ- 4e0n-~w[ ]M[l)W[Xẽǫ(TWad)z?~B"=~<!Z4VMsꌀ}o2T%Dkv}fRW_E@-G<ؖSrjJD@m $jwaW.h* WI` F+A<F{K&$_=g6n_eE_[OKMWuaF
+BZ`D@Fm\Dpc"rc64JWB'yW< Σ" 7
+M}[60r3$f
+ENu XQ6s"o-7Kq1q' /?-4"2jYwc=h񿎀t  6aH <F +y͙o^;B_`xL} >	ی['_t+&bW.pM}cKB O Z`[2r
+hiTT}&ក-"2B
+hYML*&xgG@\
+muSZmwII~ Tӎz rk\Ay@`2ɛ;>>}.V|^3euIDr0"cj 0W= Ц,Fk?5faoxhTHB0hqF@<@ '$t==|"B6M} xwO "_4<_(c
+R=5sMʕ
+[G( ӊ ]5(ô
+{F0M VA$eL[*ռ긇} X;߾iX!z7lI+1oPOB3X  Ҥe k zI5gHAX	CCJ1E tُn)/reP¥8J79}^S1X wA !	%x  $Lmb5 z*.D	",  8P90!ob&Ow"fH1!T#<	1X1,MKx -A! J<" t ܗ r&
+_tC \# Etc \
+ dp PR{TZ (5Q7RP~a &(L#3ah->a3L&b7EЧI#` P  $e%i C@?$,F '  Y] ~Z! | 	[3*1Jꩶl	0 DB:i@ d .Y'!K֥8    Jyu2$lRV:vHfW<o^u`u;Ż<{	=TwM|Wo  |}>spX	i:Ϭ.^v, 7ָ+#0rFNR7π1QƓ&8IaCs'h|4T6p }cOaMR lGGJaHWe`ʙ &Tg04cAg螇KHfO	hǎUX!{.{N)~}_rBWR@!1eQ ?|0DxO9LA.ף8&82lVAs0Ut(x;w_ȗ|gE4A0";񭤦
+ev)q:<Zo+?ڬMR\[ c:>^Y4\=~W         C.    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/doc/tutorial/Makefile ns-3.22/doc/tutorial/Makefile
--- ns-3.21/doc/tutorial/Makefile	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/Makefile	2015-02-05 15:46:22.000000000 -0800
@@ -27,9 +27,22 @@
 
 .NOTPARALLEL:
 
-%.eps : %.dia; $(DIA) -t eps $< -e $@
-%.png : %.dia; $(DIA) -t png $< -e $@
-%.pdf : %.eps; $(EPSTOPDF) $< -o=$@
+%.eps : %.dia
+	@echo dia $(notdir $<)
+	@$(DIA) -t eps $< -e $@ >/dev/null
+
+%.png : %.dia
+	@echo dia $(notdir $<)
+	@$(DIA) -t png $< -e $@ >/dev/null
+
+%.png : %.eps
+	@echo convert $(notdir $<)
+	@$(CONVERT) $< $@ >/dev/null
+
+%.pdf : %.eps
+	@echo epstopdf $(notdir $<)
+	@$(EPSTOPDF) $< -o=$@ >/dev/null
+	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 help:
 	@echo "Please use \`make <target>' where <target> is one of"
diff -Naur ns-3.21/doc/tutorial/source/building-topologies.rst ns-3.22/doc/tutorial/source/building-topologies.rst
--- ns-3.21/doc/tutorial/source/building-topologies.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/source/building-topologies.rst	2015-02-05 15:46:22.000000000 -0800
@@ -1,6 +1,8 @@
 .. include:: replace.txt
 .. highlight:: cpp
 
+.. _BuildingTopologies:
+
 Building Topologies
 -------------------
 
@@ -413,7 +415,7 @@
 
   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
-  2.007602 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
+  2.017607 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
 
 The first line of the dump indicates that the link type is PPP (point-to-point)
 which we expect.  You then see the echo packet leaving node zero via the 
@@ -433,7 +435,7 @@
 
   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
+  2.013921 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
 
 Here we see that the link type is also PPP as we would expect.  You see the
 packet from IP address 10.1.1.1 (that was sent at 2.000000 seconds) headed 
@@ -453,12 +455,12 @@
 .. 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
-  2.003707 arp reply 10.1.2.4 is-at 00:00:00:00:00:06
-  2.003801 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, length 1024
-  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
-  2.003915 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
+  2.007698 ARP, Request who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, length 50
+  2.007710 ARP, Reply 10.1.2.4 is-at 00:00:00:00:00:06, length 50
+  2.007803 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, length 1024
+  2.013815 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.4, length 50
+  2.013828 ARP, Reply 10.1.2.1 is-at 00:00:00:00:00:03, length 50
+  2.013921 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
 
 As you can see, the link type is now "Ethernet".  Something new has appeared,
 though.  The bus network needs ``ARP``, the Address Resolution Protocol.
@@ -473,15 +475,15 @@
 
 .. 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
+  2.007698 ARP, Request who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, length 50
+  2.007710 ARP, Reply 10.1.2.4 is-at 00:00:00:00:00:06, length 50
 
 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
+  2.007803 IP 10.1.1.1.49153 > 10.1.2.4.9: UDP, length 1024
 
 The server receives the echo request and turns the packet around trying to send
 it back to the source.  The server knows that this address is on another network
@@ -492,14 +494,14 @@
 
 .. 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
+  2.013815 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.4, length 50
+  2.013828 ARP, Reply 10.1.2.1 is-at 00:00:00:00:00:03, length 50
 
 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
+  2.013921 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,
 
@@ -514,7 +516,7 @@
 
   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
+  2.013921 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
 
@@ -528,7 +530,7 @@
 
   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
-  2.007602 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
+  2.017607 IP 10.1.2.4.9 > 10.1.1.1.49153: UDP, length 1024
 
 Finally, recall that we added the ability to control the number of CSMA devices
 in the simulation by command line argument.  You can change this argument in
@@ -547,9 +549,10 @@
   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.405s)
-  Sent 1024 bytes to 10.1.2.5
-  Received 1024 bytes from 10.1.1.1
-  Received 1024 bytes from 10.1.2.5
+  At time 2s client sent 1024 bytes to 10.1.2.5 port 9
+  At time 2.0118s server received 1024 bytes from 10.1.1.1 port 49153
+  At time 2.0118s server sent 1024 bytes to 10.1.1.1 port 49153
+  At time 2.02461s client received 1024 bytes from 10.1.2.5 port 9
 
 Notice that the echo server has now been relocated to the last of the CSMA
 nodes, which is 10.1.2.5 instead of the default case, 10.1.2.4.
@@ -621,9 +624,10 @@
   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.407s)
-  Sent 1024 bytes to 10.1.2.101
-  Received 1024 bytes from 10.1.1.1
-  Received 1024 bytes from 10.1.2.101
+  At time 2s client sent 1024 bytes to 10.1.2.101 port 9
+  At time 2.0068s server received 1024 bytes from 10.1.1.1 port 49153
+  At time 2.0068s server sent 1024 bytes to 10.1.1.1 port 49153
+  At time 2.01761s client received 1024 bytes from 10.1.2.101 port 9
 
 Note that the echo server is now located at 10.1.2.101 which corresponds to
 having 100 "extra" CSMA nodes with the echo server on the last one.  If you
@@ -655,8 +659,8 @@
 .. 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
-  2.003811 arp who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.101
+  2.006698 ARP, Request who-has 10.1.2.101 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, length 50
+  2.013815 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.101, length 50
 
 Now take a look at the ``tcpdump`` for ``second-101-0.pcap``.
 
@@ -669,12 +673,12 @@
 .. 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
-  2.003696 arp reply 10.1.2.101 is-at 00:00:00:00:00:67
-  2.003801 IP 10.1.1.1.49153 > 10.1.2.101.9: UDP, length 1024
-  2.003801 arp who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.101
-  2.003822 arp reply 10.1.2.1 is-at 00:00:00:00:00:03
-  2.003822 IP 10.1.2.101.9 > 10.1.1.1.49153: UDP, length 1024
+  2.006698 ARP, Request who-has 10.1.2.101 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, length 50
+  2.006698 ARP, Reply 10.1.2.101 is-at 00:00:00:00:00:67, length 50
+  2.006803 IP 10.1.1.1.49153 > 10.1.2.101.9: UDP, length 1024
+  2.013803 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.101, length 50
+  2.013828 ARP, Reply 10.1.2.1 is-at 00:00:00:00:00:03, length 50
+  2.013828 IP 10.1.2.101.9 > 10.1.1.1.49153: UDP, length 1024
 
 Models, Attributes and Reality
 ******************************
@@ -1183,7 +1187,7 @@
 
 .. sourcecode:: bash
 
-  $ cp examples/third.cc scratch/mythird.cc
+  $ cp examples/tutorial/third.cc scratch/mythird.cc
   $ ./waf
   $ ./waf --run scratch/mythird
 
@@ -1195,9 +1199,10 @@
   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.407s)
-  Sent 1024 bytes to 10.1.2.4
-  Received 1024 bytes from 10.1.3.3
-  Received 1024 bytes from 10.1.2.4
+  At time 2s client sent 1024 bytes to 10.1.2.4 port 9
+  At time 2.01796s server received 1024 bytes from 10.1.3.3 port 49153
+  At time 2.01796s server sent 1024 bytes to 10.1.3.3 port 49153
+  At time 2.03364s client received 1024 bytes from 10.1.2.4 port 9
 
 Recall that the first message, ``Sent 1024 bytes to 10.1.2.4``," is the 
 UDP echo client sending a packet to the server.  In this case, the client
@@ -1235,19 +1240,18 @@
 
   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
-  0.000263 Assoc Request (ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit]
-  0.000279 Acknowledgment RA:00:00:00:00:00:09 
-  0.000552 Assoc Request (ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit]
-  0.000568 Acknowledgment RA:00:00:00:00:00:07 
-  0.000664 Assoc Response AID(0) :: Succesful
-  0.001001 Assoc Response AID(0) :: Succesful
-  0.001145 Acknowledgment RA:00:00:00:00:00:0a 
-  0.001233 Assoc Response AID(0) :: Succesful
-  0.001377 Acknowledgment RA:00:00:00:00:00:0a 
-  0.001597 Assoc Request (ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit]
-  0.001613 Acknowledgment RA:00:00:00:00:00:08 
-  0.001691 Assoc Response AID(0) :: Succesful
-  0.001835 Acknowledgment RA:00:00:00:00:00:0a 
+  0.000308 Assoc Request (ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit]
+  0.000324 Acknowledgment RA:00:00:00:00:00:08 
+  0.000402 Assoc Response AID(0) :: Successful
+  0.000546 Acknowledgment RA:00:00:00:00:00:0a 
+  0.000721 Assoc Request (ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit]
+  0.000737 Acknowledgment RA:00:00:00:00:00:07 
+  0.000824 Assoc Response AID(0) :: Successful
+  0.000968 Acknowledgment RA:00:00:00:00:00:0a 
+  0.001134 Assoc Request (ns-3-ssid) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit]
+  0.001150 Acknowledgment RA:00:00:00:00:00:09 
+  0.001273 Assoc Response AID(0) :: Successful
+  0.001417 Acknowledgment RA:00:00:00:00:00:0a 
   0.102400 Beacon (ns-3-ssid) [6.0* 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] IBSS
   0.204800 Beacon (ns-3-ssid) [6.0* 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] IBSS
   0.307200 Beacon (ns-3-ssid) [6.0* 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] IBSS
@@ -1268,8 +1272,8 @@
 .. 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
-  2.009767 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, length 1024
+  2.008151 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, length 1024
+  2.026758 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, length 1024
 
 This is the echo packet going from left to right (from Wifi to CSMA) and back
 again across the point-to-point link.
@@ -1285,8 +1289,8 @@
 .. 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
-  2.006081 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, length 1024
+  2.011837 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, length 1024
+  2.023072 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, length 1024
 
 This is also the echo packet going from left to right (from Wifi to CSMA) and 
 back again across the point-to-point link with slightly different timings
@@ -1304,12 +1308,12 @@
 .. 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
-  2.005870 ARP, Reply 10.1.2.4 is-at 00:00:00:00:00:06, length 50
-  2.005870 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, length 1024
-  2.005975 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.4, length 50
-  2.005975 ARP, Reply 10.1.2.1 is-at 00:00:00:00:00:03, length 50
-  2.006081 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, length 1024
+  2.017837 ARP, Request who-has 10.1.2.4 (ff:ff:ff:ff:ff:ff) tell 10.1.2.1, length 50
+  2.017861 ARP, Reply 10.1.2.4 is-at 00:00:00:00:00:06, length 50
+  2.017861 IP 10.1.3.3.49153 > 10.1.2.4.9: UDP, length 1024
+  2.022966 ARP, Request who-has 10.1.2.1 (ff:ff:ff:ff:ff:ff) tell 10.1.2.4, length 50
+  2.022966 ARP, Reply 10.1.2.1 is-at 00:00:00:00:00:03, length 50
+  2.023072 IP 10.1.2.4.9 > 10.1.3.3.49153: UDP, length 1024
 
 This should be easily understood.  If you've forgotten, go back and look at
 the discussion in ``second.cc``.  This is the same sequence.
@@ -1385,37 +1389,39 @@
 
 .. sourcecode:: text
 
-  Build finished successfully (00:00:01)
+  'build' finished successfully (5.989s)
   /NodeList/7/$ns3::MobilityModel/CourseChange x = 10, y = 0
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 9.41539, y = -0.811313
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 8.46199, y = -1.11303
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.52738, y = -1.46869
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 6.67099, y = -1.98503
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 5.6835, y = -2.14268
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 4.70932, y = -1.91689
-  Sent 1024 bytes to 10.1.2.4
-  Received 1024 bytes from 10.1.3.3
-  Received 1024 bytes from 10.1.2.4
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 5.53175, y = -2.48576
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 4.58021, y = -2.17821
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 4.18915, y = -1.25785
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 4.7572, y = -0.434856
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 4.62404, y = 0.556238
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 4.74127, y = 1.54934
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 5.73934, y = 1.48729
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 6.18521, y = 0.59219
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 6.58121, y = 1.51044
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.27897, y = 2.22677
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 6.42888, y = 1.70014
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.40519, y = 1.91654
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 6.51981, y = 1.45166
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.34588, y = 2.01523
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.81046, y = 2.90077
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 6.89186, y = 3.29596
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.46617, y = 2.47732
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.05492, y = 1.56579
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 8.00393, y = 1.25054
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.00968, y = 1.35768
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.33503, y = 2.30328
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.18682, y = 3.29223
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.96865, y = 2.66873
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 10.3841, y = 0.923277
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 10.2049, y = 1.90708
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 10.8136, y = 1.11368
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 10.8452, y = 2.11318
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 10.9797, y = 3.10409
+  At time 2s client sent 1024 bytes to 10.1.2.4 port 9
+  At time 2.01796s server received 1024 bytes from 10.1.3.3 port 49153
+  At time 2.01796s server sent 1024 bytes to 10.1.3.3 port 49153
+  At time 2.03364s client received 1024 bytes from 10.1.2.4 port 9
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 11.3273, y = 4.04175
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 12.013, y = 4.76955
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 12.4317, y = 5.67771
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 11.4607, y = 5.91681
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 12.0155, y = 6.74878
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 13.0076, y = 6.62336
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 12.6285, y = 5.698
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 13.32, y = 4.97559
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 13.1134, y = 3.99715
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 13.8359, y = 4.68851
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 13.5953, y = 3.71789
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 12.7595, y = 4.26688
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 11.7629, y = 4.34913
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 11.2292, y = 5.19485
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 10.2344, y = 5.09394
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 9.3601, y = 4.60846
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 8.40025, y = 4.32795
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 9.14292, y = 4.99761
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 9.08299, y = 5.99581
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 8.26068, y = 5.42677
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 8.35917, y = 6.42191
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.66805, y = 7.14466
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 6.71414, y = 6.84456
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 6.42489, y = 7.80181
+
diff -Naur ns-3.21/doc/tutorial/source/conf.py ns-3.22/doc/tutorial/source/conf.py
--- ns-3.21/doc/tutorial/source/conf.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/source/conf.py	2015-02-05 15:46:22.000000000 -0800
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.21'
+version = 'ns-3.22'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.21'
+release = 'ns-3.22'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.21/doc/tutorial/source/data-collection.rst ns-3.22/doc/tutorial/source/data-collection.rst
--- ns-3.21/doc/tutorial/source/data-collection.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/source/data-collection.rst	2015-02-05 15:46:22.000000000 -0800
@@ -103,19 +103,19 @@
 
 ::
 
-  +  std::string probeName;
-  +  std::string probeTrace;
+  +  std::string probeType;
+  +  std::string tracePath;
   +  if (useV6 == false)
   +    {
      ...
-  +      probeName = "ns3::Ipv4PacketProbe";
-  +      probeTrace = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
+  +      probeType = "ns3::Ipv4PacketProbe";
+  +      tracePath = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
   +    }
   +  else
   +    {
      ...
-  +      probeName = "ns3::Ipv6PacketProbe";
-  +      probeTrace = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
+  +      probeType = "ns3::Ipv6PacketProbe";
+  +      tracePath = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
   +    }
    ...
   +   // Use GnuplotHelper to plot the packet byte count over time
@@ -129,12 +129,12 @@
   +                             "Time (Seconds)",
   +                             "Packet Byte Count");
   + 
-  +   // Specify the probe type, probe path (in configuration namespace), and
+  +   // Specify the probe type, trace source 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,
+  +   plotHelper.PlotProbe (probeType,
+  +                         tracePath,
   +                         "OutputBytes",
   +                         "Packet Byte Count",
   +                         GnuplotAggregator::KEY_BELOW);
@@ -151,8 +151,8 @@
   + 
   +   // Specify the probe type, probe path (in configuration namespace), and
   +   // probe output trace source ("OutputBytes") to write.
-  +   fileHelper.WriteProbe (probeName,
-  +                          probeTrace,
+  +   fileHelper.WriteProbe (probeType,
+  +                          tracePath,
   +                          "OutputBytes");
   + 
       Simulator::Stop (Seconds (20));
@@ -161,7 +161,7 @@
   
 
 The careful reader will have noticed, when testing the IPv6 command
-line attribute, that ``seventh.cc`` had created a number of new output files:
+line attribute above, that ``seventh.cc`` had created a number of new output files:
 
 ::
 
@@ -178,6 +178,8 @@
 marshaling the data into a formatted ``gnuplot`` and into a formatted
 text file.  In the next sections, we'll review each of these.
 
+.. _GnuPlotHelper:
+
 GnuplotHelper
 *************
 
@@ -257,26 +259,26 @@
 
 ::
 
-  +  std::string probeName;
-  +  std::string probeTrace;
-  +  probeName = "ns3::Ipv6PacketProbe";
-  +  probeTrace = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
+  +  std::string probeType;
+  +  std::string tracePath;
+  +  probeType = "ns3::Ipv6PacketProbe";
+  +  tracePath = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
 
 We use them here:
 
 ::
    
-  +  // Specify the probe type, probe path (in configuration namespace), and
+  +  // Specify the probe type, trace source 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,
+  +  plotHelper.PlotProbe (probeType,
+  +                        tracePath,
   +                        "OutputBytes",
   +                        "Packet Byte Count",
   +                        GnuplotAggregator::KEY_BELOW);
 
-The first two arguments are the name of the probe type and the probe trace.
+The first two arguments are the name of the probe type and the trace source path.
 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
@@ -359,6 +361,8 @@
   +------------------+-------------------+------------------------------------+
   | bool             | BooleanProbe      | stats/model/uinteger-16-probe.h    |
   +------------------+-------------------+------------------------------------+
+  | ns3::Time        | TimeProbe         | stats/model/time-probe.h           |
+  +------------------+-------------------+------------------------------------+
 
 The following TraceSource types are supported by Probes as of this writing:
 
@@ -417,17 +421,17 @@
   +   // 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
+Finally, the trace source of interest must be hooked.  Again, the probeType and
+tracePath 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
+  +   // Specify the probe type, trace source path (in configuration namespace), and
   +   // probe output trace source ("OutputBytes") to write.
-  +   fileHelper.WriteProbe (probeName,
-  +                          probeTrace,
+  +   fileHelper.WriteProbe (probeType,
+  +                          tracePath,
   +                          "OutputBytes");
   + 
 
diff -Naur ns-3.21/doc/tutorial/source/figures/cwnd.png ns-3.22/doc/tutorial/source/figures/cwnd.png
--- ns-3.21/doc/tutorial/source/figures/cwnd.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/source/figures/cwnd.png	2015-02-05 15:46:22.000000000 -0800
@@ -1,37 +1,36 @@
 PNG
 
-   IHDR       ,  )PLTE          @      @@  `  ``  @0`` @@@@   ````     ` @`` `   ` ```    @@ @` ```@     ` ` `@ @@`    ``               @ @``  @@`p T&s  IDATx흉 ,Npyv'"i            p3}<PEO BsbǷ@.r#i~va=(G9jfnhۣjqb¤  <893zc)/ߗ
-Hw /tFuh05~ r_ϳaSwDoG݉|~Rmg{\kW	V1ɀT/<(0uԃ#}_P.kv~cw:*fw!QsoF  
-+  
-+  
-+  /ռБ'ٿQ!A@'"oE@lj؜"`k6ٞ~A@l `C[r!q/"`3ή?@@l/('s]&_"Y(aE?Ȳ	ʈ]%K۷qv?庼!.TN$\wuh]'ˈ,?
-F\E!0r"6X.M;'X0 `MCV?Xk0 `-߀O9!`@JdB!`@
-d KL 5!`@@s!`@@s!`@@k$!`@@cD!`@@[d!`@@S$ 5;3h?h?h?h?hF
-ȫRΌP>A@C& R0 !`@@CzCj!`@@- Ɲԡ*QuC*!`@@W Ό
-*P1> y1oX}z/?"YոcDwL`%8,~|_^/b)w'.;V^'%!o@o&'`>b b~48-?(?(p	0ʰ0J |Xfc3̥0*!`@LC0 `9T0z! ^S7vcWT! ^Q?D+2i*w"&"`! & #`@C@?D(-C@m@sxF#Oi")<+oS<?D#C@<pFZ;.~rY?cV1(cz^0%o<RQ^T¥}Wܿ$κ#(:سq9]@!`G ߭mGCLe33S]@VzA|)kY:1b0 'g9u
-uC@׷o]bD\v]O	j&sOD@W-+sN{_9w/93u;Y@}u={WY@Ktn4%]b D{_;/>3um+k]{N)@@I	׃W^KY}FPxڄ¿ hb/b֡s	(n=&cvܬcPXZ.!Z-[mN9霴g%Uʀw,
-+yIWŒQ!IozmO8oX4	hǿ:B ȿP;7e;V;\h9y=wJsnB To&K'=lD:'6>1yv}JsX<艹^O3Cw'V.~v_"U]V#}4P~tf(΍"`IV;<h4Tͼ./v?V%Vq/_)ם롤:c܉[)b_%jguP{@#o5d|+گκgN	ء%cR@qL~߄^kz{RD7W}Y@E.3<>Q'OpѵTMӿP.;wH|𤄓yu2ࢊ:lbX 
-_:-֫dt[&x]<:>|RuZLlZ/`^I,,0=0&۱V;LHOфPP:Q6ۯV;L
-س]	_Zg09>|+ˢLk 
-赳n˸^KhX9pBuӫaR*nlZYNˀviA'
-UsبԢ8 'J/ǇOlwuEzC:GZހ8D #.	#Ղ4:տKpQœ@+Kea7B#F[CU 'ƇA,=#ՂiLP	#]F<	};3&sZ2zs?92r,8[0a*Qjq028#Ղ\J%q>әFpvG"0MpGS
-8!H `9g@+qZll:FHj7ngP0	3ǳa*+1W
-Z-eCaA
-xз;Qr+E3Zs]GDQW2f6l:è'q	ӂZP(?~DPjaPT$Z	xGmOD_~²;|N+Qxs䶛O7
-ĹZT?OOؼ?"
-d|E%
-=@NnMe0_l~ٴ0Q?xG0-D@>x|Q+}ml:F,*z	hX@mh%E%FN%X`X@RPKMEy=|$~R#-_j"p+=Lj	~G!oTٔFEXr-dZeDiy=	8
-,0_#5,66gXti"WXr-\2`*yp	X<
-&gWπ%TY0Xr-<2`2h$+85{&3|bo*z,
-j `:V'?~h/0f.~=6ʀX8>2ѡlڟ+E0V^đh	^~=)m3
-vOIZ^F7OϾq~\^M9dDcc0UqL2_9π ]ZS_G8
-ǟ+:i3ˀ)2 &*/ޏ>;,O5}"FZ^Г3`ϵ{,O5}~.h_h.|O?^eo3;[XIX^ܤ2'd9&@=my=Sd@LU\="t	.L3LL 1QȀV[ +M߾-^ɀ	dW
- h=P	]y=GM Q&iy='5pSz4K$& z^U΀y=?8;$pHp= *dqWиa3Ԉ̀ddcmy=d@WȀ$>P?X[^Ϡ}=}8h"`BĵpP@`P?X[^ϰpKȀfU]Tcmy=d@WȀd@WȀpVi_GGXl
-Kp[,ۇwπ
-3&q3*(0QqvDա#`^,i,'z8~'._|ȀeYSWƴ/d]Xo;6"`NC}y=x%Kc1Yπs9e*
-K ~U'+]Gs4wb"^DK{FpYYSMfN#`t	-dWNɀUT\KtACY֯02x  қjԬ*D΄ۼA]y.WzjMT_5e<Qp~%XR@My5bOo~qtn|hVzAaJ4WER-#eEa>)9YDˊ = ^VEȚoiy5-kpiGe!`~߭ʫM@@tTm10^a=4f"7D~*]Y6x +XWXXXɪ3ʷRB\ ǚ%ؕ&e +8((9 `~ڕW GxQ 󌏰13.~q wr^<D2 @@tT}Y0 D@W]A@˱4mr5V-6Ee@ȀM$'̜&7HVSuC@q҆ͩ!6o C@am MԶy + ~x(j@R^@!Q]7H@s-H>ʪ6? `kMk6*wY\cހ!aԐP7T
-
- 
-+  
-+'Mkqڿ0CݳBűY{؎#x/?lF l`  b      XwD>/;K)״>NjOzM{O#뾖|'f/{b=6jH_̻[kY,N.-jv\t4ײwCN/;\31^^9Qpz4^s-          4{
-67    IENDB`
\ No newline at end of file
+   IHDR       ,  2PLTE          @  Ai  @0`  @ ԥ** @   333MMMfff22U݂    d  "".W    p    ͇   PE rz挽kܠ   ݠݐP@Uk/ @@`` @@`pͷ|@ ___???w  "IDATx 29v[*Z_<B=sm+	𜡪          }u=]vmvE}l֗DL x}n֗D)ao=|w% ̯j rZ_BmYv} R zoZ_B& ]@YS?!G\C@AH$|x£{LdTb$Tb!	U%\,ݚiJI?$,i ێ˪kt17s>i SvÖzqh5n1ӥ?SU~\ \kuXkO[Ç`}MY8/MgY߯fx90ǫ[cÇͧ_7^~\5j[Fiw2yX iڴm,A{zՈDMZ$4\~?85ܲ2?[T}W{9`Zǲx^vcO+ mIWf$}r)7; `Z5P֫YhK0Sߋ6%[/;Xҟ@ڿ6U3o5I\ޜ`7ܴ	X!"`ZMì:rI['}Y8~ucpX73\ fe"z55ջQ;1uw_8ƱbcK" n55L5ӕtLYmIgu8sjgaly\ HR~K iiXZ0I ?7-cA 4 !aI 4 !aI 4 5o)!sI _N*i پB%u;WMOO i8KO itJ it;J i >ȿ- >ȿ_  ZW >ȿm AUh7 _ A5h? _ Kjq z}5RU, 0e%
+m 5$'qeȺ "+nVSVW 077W窓 0̈i]0#mϏ׋$!.: NLטq #v@?)R~ >ȿN ̙4 et |] _B7' Iu |~ ]kz& d^ SN)/3ɍ? X5ˠ&|rZ" &΀ rɽ3#LL/  ԙ$ # e dl	 ro6\>[/  @
+ w / { K/Ɵ? X |! _u  `a V 8 J)`ah ,̿y3 0"4l lgF `"K 0 %΋j4.c@ 솉s
+ @c>QpNJbQ z}5ihl Ì祛󀕝UqFke>И]fn t
+7b}#MY^%I e*/9ƴb 1ϯ	^vHd1 =s!4.p!?M@F3$D [&6C\@]OMtTʖ $
+ $TPxClT:_$C 	@P W[ HeL |`Y eO \# ,r '`Y Gf)@ 0\ >j3 ,b w; '> ,p X imZS. i;A WO` ,r R, c8 ,* 0@fS- 0 ,R NaT `t{ `ASc b R	 L ?ZYM ,yu + X Y 0^Z `a7̧ 7   @ƒ yَ) WStuTFlGVHK 0ЈVǵR `1VSu"]/_+ )@.V0&؜5RTXF1a9 *}B<@B kKJznK^c r
+ Z|xf g
+|@N + S  r*  c, ? )  9 -}
+  rjD˨ F)wD( 2 9 -Ny	 'IR S96 V +P? ) J 9 m|r % 2
+ \K8e J% dV %+@L ɅF? ( h.7	`G@F0% D 0e"B@>% V t0K   -r
+ &KC+ '}   mYtP 0I
+z@> IRuw͑5 ̓2Gp9 n3!>X7Ϧ=_*aZ9 ns!?2M-  =^+% */%Kۮi`ep KfO4	F#Ym MiqZ!~OI+#iXLL M¥k?Cp@LDt=@ *uKq p1p 5<I O "L, p{olx<DBt7E6 ?zWfQgc. < 7|R*+W8 x n r7ߟ+#e) </  ͍	&Ҝ
+   4 ?X @>%p;  -"˦ps  I@}Vƶp Ŀ>x0c-*Q "
+ P#%xZ ` V[rq|JE+[ ]|( </N   E.;h
+ p7 t|qH  #nD{ :in	Tys8$Zԓ.n<3 $w/ 7) \|  -Tx  mNtVd" = y鿢 vlgp D@]UƜoD@O=)鯢'xV|2azj. {Z@T<i3_iVJá3Uio>Mye7N"ۮit WS</x|D	ؿz *.օHT Fk (6 ǇOo
+!M0?Rm p!ݯ	0X<+}[]E>L9σoGf6
+Wxwka,]4;M FވKp]!pA]CwwW Тx]8 xr  wkKZ
+/zZ|	`0AJ`m]྘",
+y+Np š'aO }	\ vw#
+4
+-z`<0,uqw W YczJ@ ]2E=b V}\#0ShEs؋(Ǻ8;a  /EGM<~oNdKp[cW}-3t)4;ԅL Ve [w播hT&&8W "S[sElVXef"MͲBn#tnz|}[RMHL)"`>}ǒ#N +Q0t%R%oOj{r'=}".in+;|;Ti<]IQ0%[X$	5FtsQo}?VsK#m)  `)(;l s
+ :ě*$W\#0mQ5Ѱ#`VmF&8 $pܿ@<`|zXt/\zT3jߤb]ԥ1yeC:' YՕ V;3;nq^b _ѠaQp\U଺%Q%;u M*'*='e}N5d֜׫@<?۶<`tUDVp=.h~y}@S#id}1a̎j[x$#9ԃԳ!-d|#(~Ybkf=>,epP #&l":F@IF@V =l0U|ܾȉjSwQݽ	"`vrb{"`lp2LeD+\FX:ߋݷ- 4e0n-~w[ ]M[l)W[Xẽǫ(TWad)z?~B"=~<!Z4VMsꌀ}o2T%Dkv}fRW_E@-G<ؖSrjJD@m $jwaW.h* WI` F+A<F{K&$_=g6n_eE_[OKMWuaF
+BZ`D@Fm\Dpc"rc64JWB'yW< Σ" 7
+M}[60r3$f
+ENu XQ6s"o-7Kq1q' /?-4"2jYwc=h񿎀t  6aH <F +y͙o^;B_`xL} >	ی['_t+&bW.pM}cKB O Z`[2r
+hiTT}&ក-"2B
+hYML*&xgG@\
+muSZmwII~ Tӎz rk\Ay@`2ɛ;>>}.V|^3euIDr0"cj 0W= Ц,Fk?5faoxhTHB0hqF@<@ '$t==|"B6M} xwO "_4<_(c
+R=5sMʕ
+[G( ӊ ]5(ô
+{F0M VA$eL[*ռ긇} X;߾iX!z7lI+1oPOB3X  Ҥe k zI5gHAX	CCJ1E tُn)/reP¥8J79}^S1X wA !	%x  $Lmb5 z*.D	",  8P90!ob&Ow"fH1!T#<	1X1,MKx -A! J<" t ܗ r&
+_tC \# Etc \
+ dp PR{TZ (5Q7RP~a &(L#3ah->a3L&b7EЧI#` P  $e%i C@?$,F '  Y] ~Z! | 	[3*1Jꩶl	0 DB:i@ d .Y'!K֥8    Jyu2$lRV:vHfW<o^u`u;Ż<{	=TwM|Wo  |}>spX	i:Ϭ.^v, 7ָ+#0rFNR7π1QƓ&8IaCs'h|4T6p }cOaMR lGGJaHWe`ʙ &Tg04cAg螇KHfO	hǎUX!{.{N)~}_rBWR@!1eQ ?|0DxO9LA.ף8&82lVAs0Ut(x;w_ȗ|gE4A0";񭤦
+ev)q:<Zo+?ڬMR\[ c:>^Y4\=~W         C.    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/doc/tutorial/source/getting-started.rst ns-3.22/doc/tutorial/source/getting-started.rst
--- ns-3.21/doc/tutorial/source/getting-started.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/source/getting-started.rst	2015-02-05 15:46:22.000000000 -0800
@@ -62,7 +62,7 @@
 
 The |ns3| code is available in Mercurial repositories on the server
 http://code.nsnam.org.  You can also download a tarball release at
-http://www.nsnam.org/releases/, or you can work with repositories
+http://www.nsnam.org/release/, or you can work with repositories
 using Mercurial.  We recommend using Mercurial unless there's a good reason
 not to.  See the end of this section for instructions on how to get a tarball
 release.
@@ -72,6 +72,12 @@
 downloading and building of various subsystems of |ns3| for you.  We 
 recommend that you begin your |ns3| work in this environment.
 
+One practice is to create a directory called ``workspace`` in one's home 
+directory under which one can keep local Mercurial repositories.  
+Any directory name will do, but we'll assume that ``workspace`` is used
+herein (note:  ``repos`` may also be used in some documentation as
+an example directory name).  
+
 Downloading |ns3| Using a Tarball
 +++++++++++++++++++++++++++++++++
 
@@ -90,32 +96,37 @@
   $ cd
   $ mkdir workspace
   $ cd workspace
-  $ wget http://www.nsnam.org/releases/ns-allinone-3.20.tar.bz2
-  $ tar xjf ns-allinone-3.20.tar.bz2
+  $ wget http://www.nsnam.org/release/ns-allinone-3.22.tar.bz2
+  $ tar xjf ns-allinone-3.22.tar.bz2
 
-If you change into the directory ``ns-allinone-3.20`` you should see a
+If you change into the directory ``ns-allinone-3.22`` you should see a
 number of files::
 
   $ ls
-  bake      constants.py   ns-3.20               README
-  build.py  netanim-3.103  pybindgen-0.16.0.825  util.py
+  bake      constants.py   ns-3.22               README
+  build.py  netanim-3.105  pybindgen-0.16.0.886  util.py
 
-You are now ready to build the |ns3| distribution.
+You are now ready to build the base |ns3| distribution.
 
 Downloading |ns3| Using Bake
 ++++++++++++++++++++++++++++
 
 Bake is a tool for distributed integration and building, 
-developed for the |ns3| project.  First of all, Bake is 
-developed in Python, and should be fetched from the project's 
-master code repositories using a tool called Mercurial, so to 
-run Bake one must have Python and mercurial on one's machine.
+developed for the |ns3| project.  Bake can be used to fetch development
+versions of the |ns3| software, and to download and build extensions to the 
+base |ns3| distribution, such as the Direct Code Execution environment,
+Network Simulation Cradle, ability to create new Python bindings, and
+others.
+
+In recent |ns3| releases, Bake has been included in the release
+tarball.  The configuration file included in the released version
+will allow one to download any software that was current at the
+time of the release.  That is, for example, the version of Bake that
+is distributed with the ``ns-3.21`` release can be used to fetch components
+for that |ns3| release or earlier, but can't be used to fetch components
+for later releases (unless the ``bakeconf.xml`` file is updated).
 
-One practice is to create a directory called ``workspace`` in one's home 
-directory under which one can keep local Mercurial repositories.  
-Any directory name will do, but we'll assume that ``workspace`` is used
-herein (note:  ``repos`` may also be used in some documentation as
-an example directory name).  You can get a copy of ``bake`` by typing the 
+You can also get the most recent copy of ``bake`` by typing the 
 following into your Linux shell (assuming you have installed Mercurial)::
 
   $ cd
@@ -134,7 +145,7 @@
   adding changesets
   adding manifests
   adding file changes
-  added 252 changesets with 661 changes to 62 files
+  added 339 changesets with 796 changes to 63 files
   updating to branch default
   45 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
@@ -152,10 +163,10 @@
 
 There are a few configuration targets available:
 
-1.  ``ns-3.20``:  the module corresponding to the release; it will download
+1.  ``ns-3.22``:  the module corresponding to the release; it will download
     components similar to the release tarball.
 2.  ``ns-3-dev``:  a similar module but using the development code tree
-3.  ``ns-allinone-3.20``:  the module that includes other optional features
+3.  ``ns-allinone-3.22``:  the module that includes other optional features
     such as click routing, openflow for |ns3|, and the Network Simulation
     Cradle
 4.  ``ns-3-allinone``:  similar to the released version of the allinone
@@ -173,7 +184,7 @@
 `"ns-3 Releases"
 <http://www.nsnam.org/releases>`_
 web page and clicking on the latest release link.  We'll proceed in
-this tutorial example with ``ns-3.20``.
+this tutorial example with ``ns-3.22``.
 
 We are now going to use the bake tool to pull down the various pieces of 
 |ns3| you will be using.  First, we'll say a word about running bake.
@@ -182,19 +193,24 @@
 and installing libraries into a build directory.  bake can be run
 by referencing the binary, but if one chooses to run bake from
 outside of the directory it was downloaded into, it is advisable
-to put bake into your path, such as follows (Linux bash shell example)::
+to put bake into your path, such as follows (Linux bash shell example).
+First, change into the 'bake' directory, and then set the following
+environment variables
+
+::
+
+  $ export BAKE_HOME=`pwd`
+  $ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
+  $ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib
 
-  $ 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 
-to it in our shell commands.
+This will put the bake.py program into the shell's path, and will allow
+other programs to find executables and libraries created by bake.  Although
+several bake use cases do not require setting PATH and PYTHONPATH as above,
+full builds of ns-3-allinone (with the optional packages) typically do.
 
 Step into the workspace directory and type the following into your shell::
 
-  $ ./bake.py configure -e ns-3.20
+  $ ./bake.py configure -e ns-3.22
 
 Next, we'l ask bake to check whether we have enough tools to download
 various components.  Type::
@@ -227,7 +243,9 @@
 
 In particular, download tools such as Mercurial, CVS, GIT, and Bazaar
 are our principal concerns at this point, since they allow us to fetch
-the code.  Please install missing tools at this stage if you are able to.
+the code.  Please install missing tools at this stage, in the usual
+way for your system (if you are able to), or contact your system 
+administrator as needed to install these tools.
 
 Next, try to download the software::
 
@@ -238,17 +256,17 @@
    >> Searching for system dependency pygoocanvas - OK
    >> Searching for system dependency python-dev - OK
    >> Searching for system dependency pygraphviz - OK
-   >> Downloading pybindgen-0.16.0.825 - OK
+   >> Downloading pybindgen-0.16.0.886 - OK
    >> Searching for system dependency g++ - OK
    >> Searching for system dependency qt4 - OK
-   >> Downloading netanim-3.103 - OK
-   >> Downloading ns-3.20 - OK    
+   >> Downloading netanim-3.105 - OK
+   >> Downloading ns-3.22 - OK    
 
 The above suggests that three sources have been downloaded.  Check the
 ``source`` directory now and type ``ls``; one should see::
 
   $ ls
-  netanim-3.103  ns-3.20  pybindgen-0.16.0.825
+  netanim-3.105  ns-3.22  pybindgen-0.16.0.886
 
 You are now ready to build the |ns3| distribution.
 
@@ -267,7 +285,7 @@
 
 If you downloaded
 using a tarball you should have a directory called something like 
-``ns-allinone-3.20`` under your ``~/workspace`` directory.  
+``ns-allinone-3.22`` under your ``~/workspace`` directory.  
 Type the following::
 
   $ ./build.py --enable-examples --enable-tests
@@ -281,31 +299,31 @@
 
 You will see lots of typical compiler output messages displayed as the build
 script builds the various pieces you downloaded.  Eventually you should see the
-following magic words::
+following::
 
-   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.20/ns-3.20/build'
+   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.22/ns-3.22/build'
    'build' finished successfully (6m25.032s)
   
    Modules built:
    antenna                   aodv                      applications             
    bridge                    buildings                 config-store             
    core                      csma                      csma-layout              
-   dsdv                      dsr                       emu                      
-   energy                    fd-net-device             flow-monitor             
-   internet                  lte                       mesh                     
+   dsdv                      dsr                       energy                   
+   fd-net-device             flow-monitor              internet                 
+   lr-wpan                   lte                       mesh                     
    mobility                  mpi                       netanim (no Python)      
    network                   nix-vector-routing        olsr                     
    point-to-point            point-to-point-layout     propagation              
-   spectrum                  stats                     tap-bridge               
-   test (no Python)          tools                     topology-read            
-   uan                       virtual-net-device        wifi                     
-   wimax                    
-  
+   sixlowpan                 spectrum                  stats                    
+   tap-bridge                test (no Python)          topology-read            
+   uan                       virtual-net-device        wave
+   wifi                      wimax                   
+   
    Modules not built (see ns-3 tutorial for explanation):
    brite                     click                     openflow                 
    visualizer               
 
-   Leaving directory `./ns-3.20'
+   Leaving directory `./ns-3.22'
 
 Regarding the portion about modules not built::
 
@@ -331,9 +349,9 @@
 
 and you should see something like::
 
-  >> Building pybindgen-0.16.0.825 - OK
-  >> Building netanim-3.103 - OK
-  >> Building ns-3.20 - OK
+  >> Building pybindgen-0.16.0.886 - OK
+  >> Building netanim-3.105 - OK
+  >> Building ns-3.22 - OK
 
 *Hint:  you can also perform both steps, download and build by calling 'bake.py deploy'.*
 
@@ -478,6 +496,29 @@
 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.
 
+The build.py script discussed above supports also the ``--enable-examples``
+and ``enable-tests`` arguments, but in general, does not directly support
+other waf options; for example, this will not work:
+
+::
+
+  $ ./build.py --disable-python
+
+will result in
+
+::
+
+  build.py: error: no such option: --disable-python
+
+However, the special operator ``--`` can be used to pass additional
+options through to waf, so instead of the above, the following will work:
+
+::
+
+  $ ./build.py -- --disable-python   
+
+as it generates the underlying command ``./waf configure --disable-python``.
+
 Here are a few more introductory tips about Waf.
 
 Configure vs. Build
@@ -573,6 +614,46 @@
 <http://code.google.com/p/distcc/>`_
 under Documentation section.
 
+Install
+=======
+
+Waf may be used to install libraries in various places on the system.
+The default location where libraries and executables are built is
+in the ``build`` directory, and because Waf knows the location of these
+libraries and executables, it is not necessary to install the libraries
+elsewhere.
+
+If users choose to install things outside of the build directory, users
+may issue the ``./waf install`` command.  By default, the prefix for
+installation is ``/usr/local``, so ``./waf install`` will install programs
+into ``/usr/local/bin``, libraries into ``/usr/local/lib``, and headers
+into ``/usr/local/include``.  Superuser privileges are typically needed
+to install to the default prefix, so the typical command would be
+``sudo ./waf install``.  When running programs with Waf, Waf will
+first prefer to use shared libraries in the build directory, then 
+will look for libraries in the library path configured in the local
+environment.  So when installing libraries to the system, it is good
+practice to check that the intended libraries are being used.
+
+Users may choose to install to a different prefix by passing the ``--prefix``
+option at configure time, such as:
+
+::
+
+  ./waf configure --prefix=/opt/local
+
+If later after the build the user issues the ``./waf install`` command, the 
+prefix ``/opt/local`` will be used.
+
+The ``./waf clean`` command should be used prior to reconfiguring 
+the project if Waf will be used to install things at a different prefix.
+
+In summary, it is not necessary to call ``./waf install`` to use |ns3|.
+Most users will not need this command since Waf will pick up the
+current libraries from the ``build`` directory, but some users may find 
+it useful if their use case involves working with programs outside
+of the |ns3| directory.
+
 One Waf
 =======
 
@@ -725,17 +806,19 @@
 inserting the program name for the ``%s`` placeholder.
 (I admit this is a bit awkward, but that's the way it is.  Patches welcome!)
 
-Another particularly useful example is to run the ``mytest`` test suite
-by itself.  Above, we used the ``./test.py`` script to run a whole slew of
+Another particularly useful example is to run a test suite by itself.
+Let's assume that a ``mytest`` test suite exists (it doesn't).
+Above, we used the ``./test.py`` script to run a whole slew of
 tests in parallel, by repeatedly invoking the real testing program,
 ``test-runner``.  To invoke ``test-runner`` directly for a single test::
 
-  $ ./waf --run test-runner --command-template="% --suite=mytest --verbose"
+  $ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"
 
-This passes the arguments to the ``test-runner`` program.  To print the
-available ``test-runner`` options::
+This passes the arguments to the ``test-runner`` program.
+Since ``mytest`` does not exist, an error message will be generated.
+To print the available ``test-runner`` options::
 
-  $ ./waf --run test-runner --command-template="% --help"
+  $ ./waf --run test-runner --command-template="%s --help"
 
 Debugging
 +++++++++
@@ -744,7 +827,7 @@
 a debugger (*e.g.* ``gdb``) or memory checker (*e.g.* ``valgrind``),
 you use a similar ``--command-template="..."`` form.
 
-For example, to run your |ns3| program ``mysim`` with the arguments
+For example, to run your |ns3| program ``hello-simulator`` with the arguments
 ``<args>`` under the ``gdb`` debugger::
 
   $ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
diff -Naur ns-3.21/doc/tutorial/source/tracing.rst ns-3.22/doc/tutorial/source/tracing.rst
--- ns-3.21/doc/tutorial/source/tracing.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/source/tracing.rst	2015-02-05 15:46:22.000000000 -0800
@@ -3,54 +3,70 @@
 .. role:: raw-role(raw)
    :format: html latex
 
+.. Mimic doxygen formatting for parameter names
+   
+.. raw:: html
+
+    <style>.param {font-weight:bold; color:#602020;}</style>
+
+.. role:: param
+
+
 Tracing
 -------
 
 Background
 **********
 
-As mentioned in the Using the Tracing System section, the whole point of running
-an |ns3| simulation is to generate output for study.  You have two basic 
-strategies to work with in |ns3|: using generic pre-defined bulk output 
-mechanisms and parsing their content to extract interesting information; or 
-somehow developing an output mechanism that conveys exactly (and perhaps only) 
-the information wanted.
-
-Using pre-defined bulk output mechanisms has the advantage of not requiring any
-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 does not exist in any of the pre-defined output mechanisms,
+As mentioned in :ref:`UsingTracingSystem`, the whole point
+of running an |ns3| simulation is to generate output for study.  You
+have two basic strategies to obtain output from |ns3|: using generic
+pre-defined bulk output mechanisms and parsing their content to
+extract interesting information; or somehow developing an output
+mechanism that conveys exactly (and perhaps only) the information
+wanted.
+
+Using pre-defined bulk output mechanisms has the advantage of not
+requiring any 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.  ``NS_LOG`` output is not considered part of the |ns3|
+API, and can change without warning between releases.  In addition,
+``NS_LOG`` output is only available in debug builds, so relying on it
+imposes a performance penalty.  Of course, if the information 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,
-this can certainly be done; and if you use one of the |ns3| mechanisms, 
-you may get your code added as a contribution.
-
-|ns3| provides another mechanism, called Tracing, that avoids some of the 
-problems inherent in the bulk output mechanisms.  It has several important 
-advantages.  First, you can reduce the amount of data you have to manage by only
-tracing the events of interest to you (for large simulations, dumping everything
-to disk for post-processing can create I/O bottlenecks).  Second, if you use this
-method, you can control the format of the output directly so you avoid the 
-postprocessing step with sed or awk script.  If you desire, your output can be 
-formatted directly into a form acceptable by gnuplot, for example.  You can add 
-hooks in the core which can then be accessed by other users, but which will 
-produce no information unless explicitly asked to do so.  For these reasons, we 
-believe that the |ns3| tracing system is the best way to get information 
-out of a simulation and is also therefore one of the most important mechanisms
+If you need to add some tidbit of information to the pre-defined bulk
+mechanisms, this can certainly be done; and if you use one of the
+|ns3| mechanisms, you may get your code added as a contribution.
+
+|ns3| provides another mechanism, called Tracing, that avoids some of
+the problems inherent in the bulk output mechanisms.  It has several
+important advantages.  First, you can reduce the amount of data you
+have to manage by only tracing the events of interest to you (for
+large simulations, dumping everything to disk for post-processing can
+create I/O bottlenecks).  Second, if you use this method, you can
+control the format of the output directly so you avoid the
+postprocessing step with ``sed``, ``awk``, ``perl`` or ``python``
+scripts.  If you desire, your output can be formatted directly into a
+form acceptable by gnuplot, for example (see also
+:ref:`GnuplotHelper`).  You can add hooks in the core which can then
+be accessed by other users, but which will produce no information
+unless explicitly asked to do so.  For these reasons, we believe that
+the |ns3| tracing system is the best way to get information out of a
+simulation and is also therefore one of the most important mechanisms
 to understand in |ns3|.
 
 Blunt Instruments
 +++++++++++++++++
-There are many ways to get information out of a program.  The most 
-straightforward way is to just directly print the information to the standard 
-output, as in,
 
-::
+There are many ways to get information out of a program.  The most
+straightforward way is to just print the information directly to the
+standard output, as in::
 
   #include <iostream>
   ...
@@ -63,35 +79,36 @@
     ...
   } 
 
-Nobody is going to prevent you from going deep into the core of |ns3| and
-adding print statements.  This is insanely easy to do and, after all, you have 
-complete control of your own |ns3| branch.  This will probably not turn 
-out to be very satisfactory in the long term, though.
-
-As the number of print statements increases in your programs, the task of 
-dealing with the large number of outputs will become more and more complicated.  
-Eventually, you may feel the need to control what information is being printed 
-in some way; perhaps by turning on and off certain categories of prints, or 
-increasing or decreasing the amount of information you want.  If you continue 
-down this path you may discover that you have re-implemented the ``NS_LOG``
-mechanism.  In order to avoid that, one of the first things you might consider
-is using ``NS_LOG`` itself.
-
-We mentioned above that one way to get information out of |ns3| is to 
-parse existing NS_LOG output for interesting information.  If you discover that 
-some tidbit of information you need is not present in existing log output, you 
-could edit the core of |ns3| and simply add your interesting information
-to the output stream.  Now, this is certainly better than adding your own
-print statements since it follows |ns3| coding conventions and could 
-potentially be useful to other people as a patch to the existing core.
-
-Let's pick a random example.  If you wanted to add more logging to the 
-|ns3| TCP socket (``tcp-socket-base.cc``) you could just add a new 
-message down in the implementation.  Notice that in TcpSocketBase::ReceivedAck()
-there is no log message for the no ACK case.  You could simply add one, 
-changing the code from:
-
-::
+Nobody is going to prevent you from going deep into the core of |ns3|
+and adding print statements.  This is insanely easy to do and, after
+all, you have complete control of your own |ns3| branch.  This will
+probably not turn out to be very satisfactory in the long term,
+though.
+
+As the number of print statements increases in your programs, the task
+of dealing with the large number of outputs will become more and more
+complicated.  Eventually, you may feel the need to control what
+information is being printed in some way, perhaps by turning on and
+off certain categories of prints, or increasing or decreasing the
+amount of information you want.  If you continue down this path you
+may discover that you have re-implemented the ``NS_LOG`` mechanism
+(see :ref:`UsingLogging`).  In order to avoid that, one of the first
+things you might consider is using ``NS_LOG`` itself.
+
+We mentioned above that one way to get information out of |ns3| is to
+parse existing ``NS_LOG`` output for interesting information.  If you
+discover that some tidbit of information you need is not present in
+existing log output, you could edit the core of |ns3| and simply add
+your interesting information to the output stream.  Now, this is
+certainly better than adding your own print statements since it
+follows |ns3| coding conventions and could potentially be useful to
+other people as a patch to the existing core.
+
+Let's pick a random example.  If you wanted to add more logging to the
+|ns3| TCP socket (``tcp-socket-base.cc``) you could just add a new
+message down in the implementation.  Notice that in
+``TcpSocketBase::ReceivedAck()`` there is no log message for the no ACK
+case.  You could simply add one, changing the code.  Here is the original::
 
   /** Process the newly received ACK */
   void
@@ -105,9 +122,8 @@
       }
     ...
 
-to add a new ``NS_LOG_LOGIC`` in the appropriate statement:
-
-::
+To log the no ACK case, you can add a new ``NS_LOG_LOGIC`` in the
+``if`` statement body::
 
   /** Process the newly received ACK */
   void
@@ -122,162 +138,178 @@
       }
     ...
 
-This may seem fairly simple and satisfying at first glance, but something to
-consider is that you will be writing code to add the ``NS_LOG`` statement 
-and you will also have to write code (as in grep, sed or awk scripts) to parse
-the log output in order to isolate your information.  This is because even 
-though you have some control over what is output by the logging system, you 
-only have control down to the log component level.  
-
-If you are adding code to an existing module, you will also have to live with the
-output that every other developer has found interesting.  You may find that in 
-order to get the small amount of information you need, you may have to wade 
-through huge amounts of extraneous messages that are of no interest to you.  You
-may be forced to save huge log files to disk and process them down to a few lines
-whenever you want to do anything.
-
-Since there are no guarantees in |ns3| about the stability of ``NS_LOG``
-output, you may also discover that pieces of log output on which you depend 
-disappear or change between releases.  If you depend on the structure of the 
-output, you may find other messages being added or deleted which may affect your
-parsing code.
-
-For these reasons, we consider prints to ``std::cout`` and NS_LOG messages 
-to be quick and dirty ways to get more information out of |ns3|.
-
-It is desirable to have a stable facility using stable APIs that allow one to 
-reach into the core system and only get the information required.  It is
-desirable to be able to do this without having to change and recompile the
-core system.  Even better would be a system that notified the user when an item
-of interest changed or an interesting event happened so the user doesn't have 
-to actively poke around in the system looking for things.
-
-The |ns3| tracing system is designed to work along those lines and is 
-well-integrated with the Attribute and Config subsystems allowing for relatively
-simple use scenarios.
+This may seem fairly simple and satisfying at first glance, but
+something to consider is that you will be writing code to add
+``NS_LOG`` statements and you will also have to write code (as in
+``grep``, ``sed`` or ``awk`` scripts) to parse the log output in order
+to isolate your information.  This is because even though you have
+some control over what is output by the logging system, you only have
+control down to the log component level, which is typically an entire
+source code file.
+
+If you are adding code to an existing module, you will also have to
+live with the output that every other developer has found interesting.
+You may find that in order to get the small amount of information you
+need, you may have to wade through huge amounts of extraneous messages
+that are of no interest to you.  You may be forced to save huge log
+files to disk and process them down to a few lines whenever you want
+to do anything.
+
+Since there are no guarantees in |ns3| about the stability of
+``NS_LOG`` output, you may also discover that pieces of log output 
+which you depend on disappear or change between releases.  If you depend
+on the structure of the output, you may find other messages being
+added or deleted which may affect your parsing code.
+
+Finally, ``NS_LOG`` output is only available in debug builds, you
+can't get log output from optimized builds, which run about twice as
+fast.  Relying on ``NS_LOG`` imposes a performance penalty.
+
+For these reasons, we consider prints to ``std::cout`` and ``NS_LOG``
+messages to be quick and dirty ways to get more information out of
+|ns3|, but not suitable for serious work.
+
+It is desirable to have a stable facility using stable APIs that allow
+one to reach into the core system and only get the information
+required.  It is desirable to be able to do this without having to
+change and recompile the core system.  Even better would be a system
+that notified user code when an item of interest changed or an
+interesting event happened so the user doesn't have to actively poke
+around in the system looking for things.
+
+The |ns3| tracing system is designed to work along those lines and is
+well-integrated with the :ref:`Attribute <Attribute>` and :ref:`Config
+<Config>` subsystems allowing for relatively simple use scenarios.
 
 Overview
 ********
 
-The ns-3 tracing system is built on the concepts of independent tracing sources
-and tracing sinks; along with a uniform mechanism for connecting sources to sinks.
-
-Trace sources are entities that can signal events that happen in a simulation and 
-provide access to interesting underlying data.  For example, a trace source could
-indicate when a packet is received by a net device and provide access to the 
-packet contents for interested trace sinks.  A trace source might also indicate 
-when an interesting state change happens in a model.  For example, the congestion
-window of a TCP model is a prime candidate for a trace source.
-
-Trace sources are not useful by themselves; they must be connected to other pieces
-of code that actually do something useful with the information provided by the source.
-The entities that consume trace information are called trace sinks.  Trace sources 
-are generators of events and trace sinks are consumers.  This explicit division 
-allows for large numbers of trace sources to be scattered around the system in 
-places which model authors believe might be useful.  
-
-There can be zero or more consumers of trace events generated by a trace source.  
-One can think of a trace source as a kind of point-to-multipoint information link.  
-Your code looking for trace events from a particular piece of core code could 
-happily coexist with other code doing something entirely different from the same
+The |ns3| tracing system is built on the concepts of independent
+tracing sources and tracing sinks, along with a uniform mechanism for
+connecting sources to sinks.
+
+Trace sources are entities that can signal events that happen in a
+simulation and provide access to interesting underlying data.  For
+example, a trace source could indicate when a packet is received by a
+net device and provide access to the packet contents for interested
+trace sinks.  A trace source might also indicate when an interesting
+state change happens in a model.  For example, the congestion window
+of a TCP model is a prime candidate for a trace source.  Every time
+the congestion window changes connected trace sinks are notified with
+the old and new value.
+
+Trace sources are not useful by themselves; they must be connected to
+other pieces of code that actually do something useful with the
+information provided by the source.  The entities that consume trace
+information are called trace sinks.  Trace sources are generators of
+data and trace sinks are consumers.  This explicit division allows
+for large numbers of trace sources to be scattered around the system
+in places which model authors believe might be useful.  Inserting
+trace sources introduces a very small execution overhead.
+
+There can be zero or more consumers of trace events generated by a
+trace source.  One can think of a trace source as a kind of
+point-to-multipoint information link.  Your code looking for trace
+events from a particular piece of core code could happily coexist with
+other code doing something entirely different from the same
 information.
 
-Unless a user connects a trace sink to one of these sources, nothing is output.  By
-using the tracing system, both you and other people at the same trace source are 
-getting exactly what they want and only what they want out of the system.  Neither
-of you are impacting any other user by changing what information is output by the 
-system.  If you happen to add a trace source, your work as a good open-source 
-citizen may allow other users to provide new utilities that are perhaps very useful
-overall, without making any changes to the |ns3| core.  
-
-A Simple Low-Level Example
-++++++++++++++++++++++++++
-
-Let's take a few minutes and walk through a simple tracing example.  We are going
-to need a little background on Callbacks to understand what is happening in the
-example, so we have to take a small detour right away.
+Unless a user connects a trace sink to one of these sources, nothing
+is output.  By using the tracing system, both you and other people
+hooked to the same trace source are getting exactly what they want and
+only what they want out of the system.  Neither of you are impacting
+any other user by changing what information is output by the system.
+If you happen to add a trace source, your work as a good open-source
+citizen may allow other users to provide new utilities that are
+perhaps very useful overall, without making any changes to the |ns3|
+core.
+
+Simple Example
+++++++++++++++
+
+Let's take a few minutes and walk through a simple tracing example.
+We are going to need a little background on Callbacks to understand
+what is happening in the example, so we have to take a small detour
+right away.
 
 Callbacks
 ~~~~~~~~~
 
-The goal of the Callback system in |ns3| is to allow one piece of code to 
-call a function (or method in C++) without any specific inter-module dependency.
-This ultimately means you need some kind of indirection -- you treat the address
-of the called function as a variable.  This variable is called a pointer-to-function
-variable.  The relationship between function and pointer-to-function pointer is 
+The goal of the Callback system in |ns3| is to allow one piece of code
+to call a function (or method in C++) without any specific
+inter-module dependency.  This ultimately means you need some kind of
+indirection -- you treat the address of the called function as a
+variable.  This variable is called a pointer-to-function variable.
+The relationship between function and pointer-to-function is
 really no different that that of object and pointer-to-object.
 
-In C the canonical example of a pointer-to-function is a 
-pointer-to-function-returning-integer (PFI).  For a PFI taking one int parameter,
-this could be declared like,
+In C the canonical example of a pointer-to-function is a
+pointer-to-function-returning-integer (PFI).  For a PFI taking one ``int``
+parameter, this could be declared like,
 
 ::
 
   int (*pfi)(int arg) = 0;
 
-What you get from this is a variable named simply "pfi" that is initialized
-to the value 0.  If you want to initialize this pointer to something meaningful,
-you have to have a function with a matching signature.  In this case, you could
-provide a function that looks like,
-
-::
+(But read the `C++-FAQ Section 33
+<http://www.parashift.com/c++-faq/pointers-to-members.html>`_ before
+writing code like this!)  What you get from this is a variable named
+simply ``pfi`` that is initialized to the value 0.  If you want to
+initialize this pointer to something meaningful, you have to have a
+function with a matching signature.  In this case, you could provide a
+function that looks like::
 
   int MyFunction (int arg) {}
 
-If you have this target, you can initialize the variable to point to your
-function:
-
-::
+If you have this target, you can initialize the variable to point to
+your function::
 
   pfi = MyFunction;
 
-You can then call MyFunction indirectly using the more suggestive form of
-the call,
-
-::
+You can then call MyFunction indirectly using the more suggestive form
+of the call::
 
   int result = (*pfi) (1234);
 
-This is suggestive since it looks like you are dereferencing the function
-pointer just like you would dereference any pointer.  Typically, however,
-people take advantage of the fact that the compiler knows what is going on
-and will just use a shorter form,
-
-::
+This is suggestive since it looks like you are dereferencing the
+function pointer just like you would dereference any pointer.
+Typically, however, people take advantage of the fact that the
+compiler knows what is going on and will just use a shorter form::
 
   int result = pfi (1234);
 
-This looks like you are calling a function named "pfi," but the compiler is
-smart enough to know to call through the variable ``pfi`` indirectly to
-the function ``MyFunction``.
-
-Conceptually, this is almost exactly how the tracing system will work.
-Basically, a trace source *is* a callback.  When a trace sink expresses
-interest in receiving trace events, it adds a Callback to a list of Callbacks
-internally held by the trace source.  When an interesting event happens, the 
-trace source invokes its ``operator()`` providing zero or more parameters.
-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``).
-
-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 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.
-
-If you are interested in more details about how this is actually arranged in 
-|ns3|, feel free to peruse the Callback section of the manual.
-
-Example Code
-~~~~~~~~~~~~
-
-We have provided some code to implement what is really the simplest example
-of tracing that can be assembled.  You can find this code in the tutorial
-directory as ``fourth.cc``.  Let's walk through it.
-
-::
+This looks like you are calling a function named ``pfi``, but the
+compiler is smart enough to know to call through the variable ``pfi``
+indirectly to the function ``MyFunction``.
+
+Conceptually, this is almost exactly how the tracing system works.
+Basically, a trace sink *is* a callback.  When a trace sink expresses
+interest in receiving trace events, it adds itself as a Callback to a
+list of Callbacks internally held by the trace source.  When an
+interesting event happens, the trace source invokes its
+``operator(...)`` providing zero or more arguments.  The
+``operator(...)`` eventually wanders down into the system and does
+something remarkably like the indirect call you just saw, providing
+zero or more parameters, just as the call to ``pfi`` above passed one
+parameter to the target function ``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 multiple
+Callbacks.  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.
+
+If you are interested in more details about how this is actually
+arranged in |ns3|, feel free to peruse the Callback section of the
+|ns3| Manual.
+
+Walkthrough: ``fourth.cc``
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We have provided some code to implement what is really the simplest
+example of tracing that can be assembled.  You can find this code in
+the tutorial directory as ``fourth.cc``.  Let's walk through it::
 
   /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
   /*
@@ -304,28 +336,25 @@
   
   using namespace ns3;
 
-Most of this code should be quite familiar to you.  As mentioned above, the
-trace system makes heavy use of the Object and Attribute systems, so you will 
-need to include them.  The first two includes above bring in the declarations
-for those systems explicitly.  You could use the core module header, but this
-illustrates how simple this all really is.  
-
-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 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=, 
-operator++, operator---, operator+, operator==, etc.
-
-What this all really means is that you will be able to trace changes to a C++
-object made using those operators.
-
-Since the tracing system is integrated with Attributes, and Attributes work
-with Objects, there must be an |ns3| ``Object`` for the trace source
-to live in.  The next code snippet declares and defines a simple Object we can
-work with.
+Most of this code should be quite familiar to you.  As mentioned
+above, the trace system makes heavy use of the Object and Attribute
+systems, so you will need to include them.  The first two includes
+above bring in the declarations for those systems explicitly.  You
+could use the core module header to get everything at once, but we do
+the includes explicitly here to illustrate how simple this all really
+is.
+
+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 itself around,
+rather than passing the address of the object.  What this all really
+means is that you will be able to trace all changes made to a
+TracedValue in a really simple way.
+
+Since the tracing system is integrated with Attributes, and Attributes
+work with Objects, there must be an |ns3| ``Object`` for the trace
+source to live in.  The next code snippet declares and defines a
+simple Object we can work with.
 
 ::
 
@@ -339,7 +368,8 @@
         .AddConstructor<MyObject> ()
         .AddTraceSource ("MyInteger",
                          "An integer value to trace.",
-                         MakeTraceSourceAccessor (&MyObject::m_myInt))
+                         MakeTraceSourceAccessor (&MyObject::m_myInt),
+                         "ns3::Traced::Value::Int32Callback")
         ;
       return tid;
     }
@@ -348,30 +378,50 @@
     TracedValue<int32_t> m_myInt;
   };
 
-The two important lines of code, above, with respect to tracing are the 
-``.AddTraceSource`` and the ``TracedValue`` declaration of ``m_myInt``.
-
-The ``.AddTraceSource`` provides the "hooks" used for connecting the trace
-source to the outside world through the config system.  The ``TracedValue`` 
-declaration provides the infrastructure that overloads the operators mentioned 
-above and drives the callback process.
+The two important lines of code, above, with respect to tracing are
+the ``.AddTraceSource`` and the ``TracedValue`` declaration of
+``m_myInt``.
+
+The ``.AddTraceSource`` provides the "hooks" used for connecting the
+trace source to the outside world through the Config system.  The
+first argument is a name for this trace source, which makes it
+visible in the Config system. The second argument is a help string.
+Now look at the third argument, in fact focus on the *argument* of
+the third argument: ``&MyObject::m_myInt``. This is the TracedValue
+which is being added to the class; it is always a class data member.
+(The final argument is the name of a ``typedef`` for the TracedValue
+type, as a string.  This is used to generate documentation for the
+correct Callback function signature, which is useful especially
+for more general types of Callbacks.)
+
+The ``TracedValue<>`` declaration provides the infrastructure that
+drives the callback process.  Any time the underlying value is changed
+the TracedValue mechanism will provide both the old and the new value
+of that variable, in this case an ``int32_t`` value.  The trace
+sink function for this TracedValue will need the signature
 
 ::
 
+  void (* TracedValueCallback)(const int32_t oldValue, const int32_t newValue);
+
+All trace sinks hooking this trace source must have this signature.
+We'll discuss below how you can determine the required callback
+signature in other cases.
+
+Sure enough, continuing through ``fourth.cc`` we see::
+
   void
   IntTrace (int32_t oldValue, int32_t newValue)
   {
     std::cout << "Traced " << oldValue << " to " << newValue << std::endl;
   }
 
-This is the definition of the trace sink.  It corresponds directly to a callback
-function.  Once it is connected, this function will be called whenever one of the
-overloaded operators of the ``TracedValue`` is executed.
-
-We have now seen the trace source and the trace sink.  What remains is code to
-connect the source to the sink.
+This is the definition of a matching trace sink.  It corresponds
+directly to the callback function signature.  Once it is connected,
+this function will be called whenever the ``TracedValue`` changes.
 
-::
+We have now seen the trace source and the trace sink.  What remains is
+code to connect the source to the sink, which happens in ``main``::
 
   int
   main (int argc, char *argv[])
@@ -382,51 +432,54 @@
     myObject->m_myInt = 1234;
   }
 
-Here we first create the Object in which the trace source lives.
+Here we first create the MyObject instance in which the trace source
+lives.
 
-The next step, the ``TraceConnectWithoutContext``, forms the connection
-between the trace source and the trace sink.  Notice the ``MakeCallback``
-template function.  This function does the magic required to create the
-underlying |ns3| Callback object and associate it with the function
-``IntTrace``.  TraceConnect makes the association between your provided
-function and the overloaded ``operator()`` in the traced variable referred 
-to by the "MyInteger" Attribute.  After this association is made, the trace
-source will "fire" your provided callback function.
-
-The code to make all of this happen is, of course, non-trivial, but the essence
-is that you are arranging for something that looks just like the ``pfi()``
-example above to be called by the trace source.  The declaration of the 
-``TracedValue<int32_t> m_myInt;`` in the Object itself performs the magic 
-needed to provide the overloaded operators (++, ---, etc.) that will use the
-``operator()`` to actually invoke the Callback with the desired parameters.
-The ``.AddTraceSource`` performs the magic to connect the Callback to the 
-Config system, and ``TraceConnectWithoutContext`` performs the magic to
-connect your function to the trace source, which is specified by Attribute
-name.
+The next step, the ``TraceConnectWithoutContext``, forms the
+connection between the trace source and the trace sink.  The first
+argument is just the trace source name "MyInteger" we saw above.
+Notice the ``MakeCallback`` template function.  This function does the
+magic required to create the underlying |ns3| Callback object and
+associate it with the function ``IntTrace``.  ``TraceConnect`` makes
+the association between your provided function and overloaded
+``operator()`` in the traced variable referred to by the "MyInteger"
+Attribute.  After this association is made, the trace source will
+"fire" your provided callback function.
+
+The code to make all of this happen is, of course, non-trivial, but
+the essence is that you are arranging for something that looks just
+like the ``pfi()`` example above to be called by the trace source.
+The declaration of the ``TracedValue<int32_t> m_myInt;`` in the Object
+itself performs the magic needed to provide the overloaded assignment
+operators that will use the ``operator()`` to actually invoke the
+Callback with the desired parameters.  The ``.AddTraceSource``
+performs the magic to connect the Callback to the Config system, and
+``TraceConnectWithoutContext`` performs the magic to connect your
+function to the trace source, which is specified by Attribute name.
 
 Let's ignore the bit about context for now.
 
-Finally, the line,
-
-::
+Finally, the line assigning a value to ``m_myInt``::
 
    myObject->m_myInt = 1234;
 
-should be interpreted as an invocation of ``operator=`` on the member 
+should be interpreted as an invocation of ``operator=`` on the member
 variable ``m_myInt`` with the integer ``1234`` passed as a parameter.
 
-It turns out that this operator is defined (by ``TracedValue``) to execute
-a callback that returns void and takes two integer values as parameters --- 
-an old value and a new value for the integer in question.  That is exactly 
-the function signature for the callback function we provided --- ``IntTrace``.
-
-To summarize, a trace source is, in essence, a variable that holds a list of
-callbacks.  A trace sink is a function used as the target of a callback.  The
-Attribute and object type information systems are used to provide a way to 
-connect trace sources to trace sinks.  The act of "hitting" a trace source
-is executing an operator on the trace source which fires callbacks.  This 
-results in the trace sink callbacks registering interest in the source being 
-called with the parameters provided by the source.
+Since ``m_myInt`` is a ``TracedValue``, this operator is defined to
+execute a callback that returns void and takes two integer values as
+parameters --- an old value and a new value for the integer in
+question.  That is exactly the function signature for the callback
+function we provided --- ``IntTrace``.
+
+To summarize, a trace source is, in essence, a variable that holds a
+list of callbacks.  A trace sink is a function used as the target of a
+callback.  The Attribute and object type information systems are used
+to provide a way to connect trace sources to trace sinks.  The act of
+"hitting" a trace source is executing an operator on the trace source
+which fires callbacks.  This results in the trace sink callbacks who
+registering interest in the source being called with the parameters
+provided by the source.
 
 If you now build and run this example,
 
@@ -434,32 +487,33 @@
 
   $ ./waf --run fourth
 
-you will see the output from the ``IntTrace`` function execute as soon as the
-trace source is hit:
+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.  
-
-Using the Config Subsystem to Connect to Trace Sources
-++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-The ``TraceConnectWithoutContext`` call shown above in the simple example is
-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 experimenting with 
-``third.cc``.
-
-Recall that we defined a trace sink to print course change information from the
-mobility models of our simulation.  It should now be a lot more clear to you 
-what this function is doing.
+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.
 
-::
+.. _Config:
+
+Connect with Config
++++++++++++++++++++
+
+The ``TraceConnectWithoutContext`` call shown above in the simple
+example is actually very rarely used in the system.  More typically,
+the ``Config`` subsystem is used to select 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 experimenting with ``third.cc``.
+
+Recall that we defined a trace sink to print course change information
+from the mobility models of our simulation.  It should now be a lot
+more clear to you what this function is doing::
 
   void
   CourseChange (std::string context, Ptr<const MobilityModel> model)
@@ -469,123 +523,128 @@
       " x = " << position.x << ", y = " << position.y);
   }
 
-When we connected the "CourseChange" trace source to the above trace sink,
-we used what is called a "Config Path" to specify the source when we
-arranged a connection between the pre-defined trace source and the new trace 
-sink:
-
-::
+When we connected the "CourseChange" trace source to the above trace
+sink, we used a Config path to specify the source when we arranged a
+connection between the pre-defined trace source and the new trace
+sink::
 
   std::ostringstream oss;
-  oss <<
-    "/NodeList/" << wifiStaNodes.Get (nWifi - 1)->GetId () <<
-    "/$ns3::MobilityModel/CourseChange";
+  oss << "/NodeList/"
+      << wifiStaNodes.Get (nWifi - 1)->GetId ()
+      << "/$ns3::MobilityModel/CourseChange";
 
   Config::Connect (oss.str (), MakeCallback (&CourseChange));
 
-Let's try and make some sense of what is sometimes considered relatively
-mysterious code.  For the purposes of discussion, assume that the node 
-number returned by the ``GetId()`` is "7".  In this case, the path
-above turns out to be,
+Let's try and make some sense of what is sometimes considered
+relatively mysterious code.  For the purposes of discussion, assume
+that the Node number returned by the ``GetId()`` is "7".  In this
+case, the path above turns out to be
 
 ::
 
   "/NodeList/7/$ns3::MobilityModel/CourseChange"
 
-The last segment of a config path must be an ``Attribute`` of an 
-``Object``.  In fact, if you had a pointer to the ``Object`` that has the
-"CourseChange" ``Attribute`` handy, you could write this just like we did 
-in the previous example.  You know by now that we typically store pointers to 
-our nodes in a NodeContainer.  In the ``third.cc`` example, the Nodes of
-interest are stored in the ``wifiStaNodes`` NodeContainer.  In fact, while
-putting the path together, we used this container to get a Ptr<Node> which we
-used to call GetId() on.  We could have used this Ptr<Node> directly to call
-a connect method directly:
-
-::
+The last segment of a config path must be an ``Attribute`` of an
+``Object``.  In fact, if you had a pointer to the ``Object`` that has
+the "CourseChange" ``Attribute`` handy, you could write this just like
+we did in the previous example.  You know by now that we typically
+store pointers to our ``Nodes`` in a NodeContainer.  In the ``third.cc``
+example, the Nodes of interest are stored in the ``wifiStaNodes``
+NodeContainer.  In fact, while putting the path together, we used this
+container to get a ``Ptr<Node>`` which we used to call ``GetId()``.  We
+could have used this ``Ptr<Node>`` to call a Connect method
+directly::
 
   Ptr<Object> theObject = wifiStaNodes.Get (nWifi - 1);
   theObject->TraceConnectWithoutContext ("CourseChange", MakeCallback (&CourseChange));
 
-In the ``third.cc`` example, we actually want an additional "context" to 
-be delivered along with the Callback parameters (which will be explained below) so we 
-could actually use the following equivalent code,
-
-::
+In the ``third.cc`` example, we actually wanted an additional "context"
+to be delivered along with the Callback parameters (which will be
+explained below) so we could actually use the following equivalent
+code::
 
   Ptr<Object> theObject = wifiStaNodes.Get (nWifi - 1);
   theObject->TraceConnect ("CourseChange", MakeCallback (&CourseChange));
 
-It turns out that the internal code for ``Config::ConnectWithoutContext`` and
-``Config::Connect`` actually do find a Ptr<Object> and call the appropriate
-TraceConnect method at the lowest level.
-
-The ``Config`` functions take a path that represents a chain of ``Object`` 
-pointers.  Each segment of a path corresponds to an Object Attribute.  The last 
-segment is the Attribute of interest, and prior segments must be typed to contain
-or find Objects.  The ``Config`` code parses and "walks" this path until it 
-gets to the final segment of the path.  It then interprets the last segment as
-an ``Attribute`` on the last Object it found while walking the path.  The  
-``Config`` functions then call the appropriate ``TraceConnect`` or 
-``TraceConnectWithoutContext`` method on the final Object.  Let's see what 
-happens in a bit more detail when the above path is walked.
-
-The leading "/" character in the path refers to a so-called namespace.  One 
-of the predefined namespaces in the config system is "NodeList" which is a 
-list of all of the nodes in the simulation.  Items in the list are referred to
-by indices into the list, so "/NodeList/7" refers to the eighth node in the
-list of nodes created during the simulation.  This reference is actually a 
-``Ptr<Node>`` and so is a subclass of an ``ns3::Object``.  
-
-As described in the Object Model section of the |ns3| manual, we support
-Object Aggregation.  This allows us to form an association between different 
-Objects without any programming.  Each Object in an Aggregation can be reached 
-from the other Objects.  
-
-The next path segment being walked begins with the "$" character.  This 
-indicates to the config system that a ``GetObject`` call should be made 
-looking for the type that follows.  It turns out that the MobilityHelper used in 
-``third.cc`` arranges to Aggregate, or associate, a mobility model to each of 
-the wireless Nodes.  When you add the "$" you are asking for another Object that
-has presumably been previously aggregated.  You can think of this as switching
-pointers from the original Ptr<Node> as specified by "/NodeList/7" to its 
-associated mobility model --- which is of type "$ns3::MobilityModel".  If you
-are familiar with ``GetObject``, we have asked the system to do the following:
-
-::
+It turns out that the internal code for
+``Config::ConnectWithoutContext`` and ``Config::Connect`` actually
+find a ``Ptr<Object>`` and call the appropriate ``TraceConnect``
+method at the lowest level.
+
+The ``Config`` functions take a path that represents a chain of
+``Object`` pointers.  Each segment of a path corresponds to an Object
+Attribute.  The last segment is the Attribute of interest, and prior
+segments must be typed to contain or find Objects.  The ``Config``
+code parses and "walks" this path until it gets to the final segment
+of the path.  It then interprets the last segment as an ``Attribute``
+on the last Object it found while walking the path.  The ``Config``
+functions then call the appropriate ``TraceConnect`` or
+``TraceConnectWithoutContext`` method on the final Object.  Let's see
+what happens in a bit more detail when the above path is walked.
+
+The leading "/" character in the path refers to a so-called namespace.
+One of the predefined namespaces in the config system is "NodeList"
+which is a list of all of the nodes in the simulation.  Items in the
+list are referred to by indices into the list, so "/NodeList/7" refers
+to the eighth Node in the list of nodes created during the simulation
+(recall indices start at `0').  This reference is actually a
+``Ptr<Node>`` and so is a subclass of an ``ns3::Object``.
+
+As described in the Object Model section of the |ns3| Manual, we make
+widespread use of object aggregation.  This allows us to form an
+association between different Objects without building a complicated
+inheritance tree or predeciding what objects will be part of a
+Node.  Each Object in an Aggregation can be reached from the other
+Objects.
+
+In our example the next path segment being walked begins with the "$"
+character.  This indicates to the config system that the segment is
+the name of an object type, so a ``GetObject`` call should be made
+looking for that type.  It turns out that the ``MobilityHelper`` used
+in ``third.cc`` arranges to Aggregate, or associate, a mobility model
+to each of the wireless ``Nodes``.  When you add the "$" you are
+asking for another Object that has presumably been previously
+aggregated.  You can think of this as switching pointers from the
+original Ptr<Node> as specified by "/NodeList/7" to its associated
+mobility model --- which is of type ``ns3::MobilityModel``.  If you
+are familiar with ``GetObject``, we have asked the system to do the
+following::
 
   Ptr<MobilityModel> mobilityModel = node->GetObject<MobilityModel> ()
 
-We are now at the last Object in the path, so we turn our attention to the 
-Attributes of that Object.  The ``MobilityModel`` class defines an Attribute 
-called "CourseChange".  You can see this by looking at the source code in
-``src/mobility/model/mobility-model.cc`` and searching for "CourseChange" in your
-favorite editor.  You should find,
+We are now at the last Object in the path, so we turn our attention to
+the Attributes of that Object.  The ``MobilityModel`` class defines an
+Attribute called "CourseChange".  You can see this by looking at the
+source code in ``src/mobility/model/mobility-model.cc`` and searching
+for "CourseChange" in your favorite editor.  You should find
 
 ::
 
   .AddTraceSource ("CourseChange",
                    "The value of the position and/or velocity vector changed",
-                   MakeTraceSourceAccessor (&MobilityModel::m_courseChangeTrace))
+                   MakeTraceSourceAccessor (&MobilityModel::m_courseChangeTrace),
+                   "ns3::MobilityModel::CourseChangeCallback")
 
 which should look very familiar at this point.  
 
-If you look for the corresponding declaration of the underlying traced variable 
-in ``mobility-model.h`` you will find
+If you look for the corresponding declaration of the underlying traced
+variable in ``mobility-model.h`` you will find
 
 ::
 
   TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
 
-The type declaration ``TracedCallback`` identifies ``m_courseChangeTrace``
-as a special list of Callbacks that can be hooked using the Config functions 
-described above.
-
-The ``MobilityModel`` class is designed to be a base class providing a common
-interface for all of the specific subclasses.  If you search down to the end of 
-the file, you will see a method defined called ``NotifyCourseChange()``:
-
-::
+The type declaration ``TracedCallback`` identifies
+``m_courseChangeTrace`` as a special list of Callbacks that can be
+hooked using the Config functions described above.  The ``typedef``
+for the callback function signature is also defined in the header file::
+
+  typedef void (* CourseChangeCallback)(Ptr<const MobilityModel> * model);
+
+The ``MobilityModel`` class is designed to be a base class providing a
+common interface for all of the specific subclasses.  If you search
+down to the end of the file, you will see a method defined called
+``NotifyCourseChange()``::
 
   void
   MobilityModel::NotifyCourseChange (void) const
@@ -593,323 +652,341 @@
     m_courseChangeTrace(this);
   }
 
-Derived classes will call into this method whenever they do a course change to
-support tracing.  This method invokes ``operator()`` on the underlying 
-``m_courseChangeTrace``, which will, in turn, invoke all of the registered
-Callbacks, calling all of the trace sinks that have registered interest in the
-trace source by calling a Config function.
-
-So, in the ``third.cc`` example we looked at, whenever a course change is 
-made in one of the ``RandomWalk2dMobilityModel`` instances installed, there
-will be a ``NotifyCourseChange()`` call which calls up into the 
-``MobilityModel`` base class.  As seen above, this invokes ``operator()``
-on ``m_courseChangeTrace``, which in turn, calls any registered trace sinks.
-In the example, the only code registering an interest was the code that provided
-the config path.  Therefore, the ``CourseChange`` function that was hooked 
-from Node number seven will be the only Callback called.
-
-The final piece of the puzzle is the "context".  Recall that we saw an output 
-looking something like the following from ``third.cc``:
-
-::
-
-  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.27897, y = 2.22677
-
-The first part of the output is the context.  It is simply the path through
-which the config code located the trace source.  In the case we have been looking at
-there can be any number of trace sources in the system corresponding to any number
-of nodes with mobility models.  There needs to be some way to identify which trace
-source is actually the one that fired the Callback.  An easy way is to request a 
-trace context when you ``Config::Connect``.
-
-How to Find and Connect Trace Sources, and Discover Callback Signatures
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-The first question that inevitably comes up for new users of the Tracing system is,
-"okay, I know that there must be trace sources in the simulation core, but how do
-I find out what trace sources are available to me"?  
-
-The second question is, "okay, I found a trace source, how do I figure out the
-config path to use when I connect to it"? 
-
-The third question is, "okay, I found a trace source, how do I figure out what 
-the return type and formal arguments of my callback function need to be"?
-
-The fourth question is, "okay, I typed that all in and got this incredibly bizarre
-error message, what in the world does it mean"?
-
-What Trace Sources are Available?
-+++++++++++++++++++++++++++++++++
-
-The answer to this question is found in the |ns3| Doxygen.  If you go to 
-the project web site, 
-`ns-3 project
-<http://www.nsnam.org>`_, you will find a link to "Documentation" in the navigation bar.  If you select this link, you will be
-taken to our documentation page. There 
-is a link to "Latest Release" that will take you to the documentation
-for the latest stable release of |ns3|.
-If you select the "API Documentation" link, you will be
-taken to the |ns3| API documentation page.
-
-Expand the "Modules" book in the NS-3 
-documentation tree by clicking the "+" box.  Now, expand
-the "C++ Constructs Used by All Modules" book in the tree by clicking its "+" box.  You should now
-see four extremely useful links:
-
-* The list of all trace sources
-* The list of all attributes
-* The list of all global values
-* Debugging
-
-The list of interest to us here is "the list of all trace sources".  Go 
-ahead and select that link.  You will see, perhaps not too surprisingly, a
-list of all of the trace sources available in the |ns3| core.
-
-As an example, scroll down to ``ns3::MobilityModel``.  You will find
-an entry for
-
-::
-
-  CourseChange: The value of the position and/or velocity vector changed 
+Derived classes will call into this method whenever they do a course
+change to support tracing.  This method invokes ``operator()`` on the
+underlying ``m_courseChangeTrace``, which will, in turn, invoke all of
+the registered Callbacks, calling all of the trace sinks that have
+registered interest in the trace source by calling a Config function.
+
+So, in the ``third.cc`` example we looked at, whenever a course change
+is made in one of the ``RandomWalk2dMobilityModel`` instances
+installed, there will be a ``NotifyCourseChange()`` call which calls
+up into the ``MobilityModel`` base class.  As seen above, this invokes
+``operator()`` on ``m_courseChangeTrace``, which in turn, calls any
+registered trace sinks.  In the example, the only code registering an
+interest was the code that provided the Config path.  Therefore, the
+``CourseChange`` function that was hooked from Node number seven will
+be the only Callback called.
+
+The final piece of the puzzle is the "context".  Recall that we saw an
+output looking something like the following from ``third.cc``::
+
+  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.27897, y =
+  2.22677
+
+The first part of the output is the context.  It is simply the path
+through which the config code located the trace source.  In the case
+we have been looking at there can be any number of trace sources in
+the system corresponding to any number of nodes with mobility models.
+There needs to be some way to identify which trace source is actually
+the one that fired the Callback.  The easy way is to connect with
+``Config::Connect``, instead of ``Config::ConnectWithoutContext``.
+
+Finding Sources
++++++++++++++++
+
+The first question that inevitably comes up for new users of the
+Tracing system is, *"Okay, I know that there must be trace sources in
+the simulation core, but how do I find out what trace sources are
+available to me?"*
+
+The second question is, *"Okay, I found a trace source, how do I figure
+out the Config path to use when I connect to it?"*
+
+The third question is, *"Okay, I found a trace source and the Config
+path, how do I figure out what the return type and formal arguments of
+my callback function need to be?"*
 
-You should recognize this as the trace source we used in the ``third.cc``
-example.  Perusing this list will be helpful.
+The fourth question is, *"Okay, I typed that all in and got this
+incredibly bizarre error message, what in the world does it mean?"*
 
-What String do I use to Connect?
-++++++++++++++++++++++++++++++++
+We'll address each of these in turn.
 
-The easiest way to do this is to grep around in the |ns3| codebase for someone
-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:
+Available Sources
++++++++++++++++++
 
-.. sourcecode:: bash
+*Okay, I know that there must be trace sources in the simulation core,
+but how do I find out what trace sources are available to me?*
 
-  $ find . -name '*.cc' | xargs grep CourseChange | grep Connect
+The answer to the first question is found in the |ns3| API
+documentation.  If you go to the project web site, `ns-3 project
+<http://www.nsnam.org>`_, you will find a link to "Documentation" in
+the navigation bar.  If you select this link, you will be taken to our
+documentation page. There is a link to "Latest Release" that will take
+you to the documentation for the latest stable release of |ns3|.  If
+you select the "API Documentation" link, you will be taken to the
+|ns3| API documentation page.
+
+In the sidebar you should see a hierachy that begins
+
+*  ns-3
+
+  *  ns-3 Documentation
+  *  All TraceSources
+  *  All Attributes
+  *  All GlobalValues
+
+The list of interest to us here is "All TraceSources".  Go ahead and
+select that link.  You will see, perhaps not too surprisingly, a list
+of all of the trace sources available in |ns3|.
 
-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
-just waiting for you to use:
+As an example, scroll down to ``ns3::MobilityModel``.  You will find
+an entry for
 
 ::
 
-  Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", 
-    MakeCallback (&CourseChangeCallback));
-
-If you cannot find any examples in the distribution, you can find this out
-from the |ns3| Doxygen.  It will probably be simplest just to walk 
-through the "CourseChanged" example.
-
-Let's assume that you have just found the "CourseChanged" trace source in 
-"The list of all trace sources" and you want to figure out how to connect to
-it.  You know that you are using (again, from the ``third.cc`` example) an
-``ns3::RandomWalk2dMobilityModel``.  So open the "Class List" book in
-the NS-3 documentation tree by clicking its "+" box.  You will now see a
-list of all of the classes in |ns3|.  Scroll down until you see the
-entry for ``ns3::RandomWalk2dMobilityModel`` and follow that link.
-You should now be looking at the "ns3::RandomWalk2dMobilityModel Class 
-Reference".
-
-If you now scroll down to the "Member Function Documentation" section, you
-will see documentation for the ``GetTypeId`` function.  You constructed one
-of these in the simple tracing example above:
-
-::
+  CourseChange: The value of the position and/or velocity vector changed 
 
-    static TypeId GetTypeId (void)
-    {
-      static TypeId tid = TypeId ("MyObject")
-        .SetParent (Object::GetTypeId ())
-        .AddConstructor<MyObject> ()
-        .AddTraceSource ("MyInteger",
-                         "An integer value to trace.",
-                         MakeTraceSourceAccessor (&MyObject::m_myInt))
-        ;
-      return tid;
-    }
+You should recognize this as the trace source we used in the
+``third.cc`` example.  Perusing this list will be helpful.
 
-As mentioned above, this is the bit of code that connected the Config 
-and Attribute systems to the underlying trace source.  This is also the
-place where you should start looking for information about the way to 
-connect. 
+Config Paths
+++++++++++++
 
-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:
+*Okay, I found a trace source, how do I figure out the Config path to
+use when I connect to it?*
 
-.. sourcecode:: bash
+If you know which object you are interested in, the "Detailed
+Description" section for the class will list all available trace
+sources.  For example, starting from the list of "All TraceSources,"
+click on the ``ns3::MobilityModel`` link, which will take you to the
+documentation for the ``MobilityModel`` class.  Almost at the top of
+the page is a one line brief description of the class, ending in a
+link "More...".  Click on this link to skip the API summary and go to
+the "Detailed Description" of the class.  At the end of the
+description will be (up to) three lists:
+
+* **Config Paths**: a list of typical Config paths for this class.
+* **Attributes**: a list of all attributes supplied by this class.
+* **TraceSources**: a list of all TraceSources available from this class.
+
+First we'll discuss the Config paths.
+
+Let's assume that you have just found the "CourseChange" trace source
+in the "All TraceSources" list and you want to figure out how to
+connect to it.  You know that you are using (again, from the
+``third.cc`` example) an ``ns3::RandomWalk2dMobilityModel``.  So
+either click on the class name in the "All TraceSources" list, or find
+``ns3::RandomWalk2dMobilityModel`` in the "Class List".  Either way 
+you should now be looking at the "ns3::RandomWalk2dMobilityModel Class
+Reference" page.
+
+If you now scroll down to the "Detailed Description" section, after
+the summary list of class methods and attributes (or just click on the
+"More..." link at the end of the class brief description at the top of
+the page) you will see the overall documentation for the class.
+Continuing to scroll down, find the "Config Paths" list:
+
+  **Config Paths**
+
+  ``ns3::RandomWalk2dMobilityModel`` is accessible through the
+  following paths with ``Config::Set`` and ``Config::Connect``:
+
+  * "/NodeList/[i]/$ns3::MobilityModel/$ns3::RandomWalk2dMobilityModel"
+
+The documentation tells you how to get to the
+``RandomWalk2dMobilityModel`` Object.  Compare the string above with
+the string we actually used in the example code::
 
-  This object is accessible through the following paths with Config::Set and Config::Connect: 
+  "/NodeList/7/$ns3::MobilityModel"
 
-  /NodeList/[i]/$ns3::MobilityModel/$ns3::RandomWalk2dMobilityModel 
+The difference is due to the fact that two ``GetObject`` calls are
+implied in the string found in the documentation.  The first, for
+``$ns3::MobilityModel`` will query the aggregation for the base class.
+The second implied ``GetObject`` call, for
+``$ns3::RandomWalk2dMobilityModel``, is used to cast the base class to
+the concrete implementation class.  The documentation shows both of
+these operations for you.  It turns out that the actual trace source
+you are looking for is found in the base class.
+
+Look further down in the "Detailed Description" section for the list
+of trace sources.  You will find
+
+  No TraceSources are defined for this type.
+  
+  **TraceSources defined in parent class ``ns3::MobilityModel``**
+
+  * **CourseChange**: The value of the position and/or velocity vector
+    changed.
+
+    Callback signature: ``ns3::MobilityModel::CourseChangeCallback``
+
+This is exactly what you need to know.  The trace source of interest
+is found in ``ns3::MobilityModel`` (which you knew anyway).  The
+interesting thing this bit of API Documentation tells you is that you
+don't need that extra cast in the config path above to get to the
+concrete class, since the trace source is actually in the base class.
+Therefore the additional ``GetObject`` is not required and you simply
+use the path::
 
-The documentation tells you how to get to the ``RandomWalk2dMobilityModel`` 
-Object.  Compare the string above with the string we actually used in the 
-example code:
+  "/NodeList/[i]/$ns3::MobilityModel"
 
-::
+which perfectly matches the example path::
 
   "/NodeList/7/$ns3::MobilityModel"
 
-The difference is due to the fact that two ``GetObject`` calls are implied 
-in the string found in the documentation.  The first, for ``$ns3::MobilityModel``
-will query the aggregation for the base class.  The second implied 
-``GetObject`` call, for ``$ns3::RandomWalk2dMobilityModel``, is used to "cast"
-the base class to the concrete implementation class.  The documentation shows 
-both of these operations for you.  It turns out that the actual Attribute you are
-going to be looking for is found in the base class as we have seen.
-
-Look further down in the ``GetTypeId`` doxygen.  You will find,
+As an aside, another way to find the Config path is to ``grep`` around in
+the |ns3| codebase for someone 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
 
-  No TraceSources defined for this type.
-  TraceSources defined in parent class ns3::MobilityModel:
-
-  CourseChange: The value of the position and/or velocity vector changed 
-  Reimplemented from ns3::MobilityModel
-
-This is exactly what you need to know.  The trace source of interest is found in
-``ns3::MobilityModel`` (which you knew anyway).  The interesting thing this
-bit of Doxygen tells you is that you don't need that extra cast in the config
-path above to get to the concrete class, since the trace source is actually in
-the base class.  Therefore the additional ``GetObject`` is not required and
-you simply use the path:
+  $ find . -name '*.cc' | xargs grep CourseChange | grep Connect
 
-::
+and you may find your answer along with working code.  For example, in
+this case, ``src/mobility/examples/main-random-topology.cc`` has
+something just waiting for you to use::
 
-  /NodeList/[i]/$ns3::MobilityModel
+  Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", 
+    MakeCallback (&CourseChange));
 
-which perfectly matches the example path:
+We'll return to this example in a moment.    
+      
+Callback Signatures
++++++++++++++++++++
 
-::
+*Okay, I found a trace source and the Config path, how do I figure out
+what the return type and formal arguments of my callback function need
+to be?*
 
-  /NodeList/7/$ns3::MobilityModel
+The easiest way is to examine the callback signature ``typedef``,
+which is given in the "Callback signature" of the trace source in the
+"Detailed Description" for the class, as shown above.
 
-What Return Value and Formal Arguments?
-+++++++++++++++++++++++++++++++++++++++
+Repeating the "CourseChange" trace source entry from
+``ns3::RandomWalk2dMobilityModel`` we have:
 
-The easiest way to do this is to grep around in the |ns3| codebase for someone
-who has already figured it out,  You should always try to copy someone else's
-working code.  Try something like:
+  * **CourseChange**: The value of the position and/or velocity vector
+    changed.
 
-.. sourcecode:: bash
+    Callback signature: ``ns3::MobilityModel::CourseChangeCallback``
 
-  $ find . -name '*.cc' | xargs grep CourseChange | grep Connect
+The callback signature is given as a link to the relevant ``typedef``,
+where we find
 
-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
-just waiting for you to use.  You will find
+  ``typedef void (* CourseChangeCallback)(const std::string context, Ptr<const MobilityModel> * model);``
+					  
+  **TracedCallback** signature for course change notifications.
 
-::
+  If the callback is connected using ``ConnectWithoutContext`` omit the
+  ``context`` argument from the signature.
 
-  Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", 
-    MakeCallback (&CourseChangeCallback));
+  **Parameters**:
 
-as a result of your grep.  The ``MakeCallback`` should indicate to you that
-there is a callback function there which you can use.  Sure enough, there is:
+      |  [in] :param:`context` The context string supplied by the Trace source.
+      |  [in] :param:`model` The MobilityModel which is changing course.
 
-::
+As above, to see this in use ``grep`` around in the |ns3| codebase for
+an example.  The example above, from
+``src/mobility/examples/main-random-topology.cc``, connects the
+"CourseChange" trace source to the ``CourseChange`` function in the
+same file::
 
   static void
-  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
+  CourseChange (std::string context, Ptr<const MobilityModel> model)
   {
     ...
   }
 
-Take My Word for It
-~~~~~~~~~~~~~~~~~~~
-
-If there are no examples to work from, this can be, well, challenging to 
-actually figure out from the source code.
+Notice that this function:
 
-Before embarking on a walkthrough of the code, I'll be kind and just tell you
-a simple way to figure this out:  The return value of your callback will always 
-be void.  The formal parameter list for a ``TracedCallback`` can be found 
-from the template parameter list in the declaration.  Recall that for our
-current example, this is in ``mobility-model.h``, where we have previously
-found:
-
-::
+* Takes a "context" string argument, which we'll describe in a minute.
+  (If the callback is connected using the ``ConnectWithoutContext``
+  function the ``context`` argument will be omitted.)
+* Has the ``MobilityModel`` supplied as the last argument (or only
+  argument if ``ConnectWithoutContext`` is used).
+* Returns ``void``.
+
+If, by chance, the callback signature hasn't been documented, and
+there are no examples to work from, determining the right callback
+function signature can be, well, challenging to actually figure out
+from the source code.
+
+Before embarking on a walkthrough of the code, I'll be kind and just
+tell you a simple way to figure this out: The return value of your
+callback will always be ``void``.  The formal parameter list for a
+``TracedCallback`` can be found from the template parameter list in
+the declaration.  Recall that for our current example, this is in
+``mobility-model.h``, where we have previously found::
 
   TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
 
-There is a one-to-one correspondence between the template parameter list in 
-the declaration and the formal arguments of the callback function.  Here,
-there is one template parameter, which is a ``Ptr<const MobilityModel>``.
-This tells you that you need a function that returns void and takes a
-a ``Ptr<const MobilityModel>``.  For example,
-
-::
+There is a one-to-one correspondence between the template parameter
+list in the declaration and the formal arguments of the callback
+function.  Here, there is one template parameter, which is a
+``Ptr<const MobilityModel>``.  This tells you that you need a function
+that returns void and takes a ``Ptr<const MobilityModel>``.  For
+example::
 
   void
-  CourseChangeCallback (Ptr<const MobilityModel> model)
+  CourseChange (Ptr<const MobilityModel> model)
   {
     ...
   }
 
-That's all you need if you want to ``Config::ConnectWithoutContext``.  If
-you want a context, you need to ``Config::Connect`` and use a Callback 
-function that takes a string context, then the required argument.
-
-::
+That's all you need if you want to ``Config::ConnectWithoutContext``.
+If you want a context, you need to ``Config::Connect`` and use a
+Callback function that takes a string context, then the template
+arguments::
 
   void
-  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
+  CourseChange (const std::string context, Ptr<const MobilityModel> model)
   {
     ...
   }
 
-If you want to ensure that your ``CourseChangeCallback`` is only visible
-in your local file, you can add the keyword ``static`` and come up with:
-
-::
+If you want to ensure that your ``CourseChangeCallback`` function is only
+visible in your local file, you can add the keyword ``static`` and
+come up with::
 
   static void
-  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
+  CourseChange (const std::string path, Ptr<const MobilityModel> model)
   {
     ...
   }
 
 which is exactly what we used in the ``third.cc`` example.
 
-The Hard Way
-~~~~~~~~~~~~
+Implementation
+~~~~~~~~~~~~~~
 
-This section is entirely optional.  It is going to be a bumpy ride, especially
-for those unfamiliar with the details of templates.  However, if you get through
-this, you will have a very good handle on a lot of the |ns3| low level
-idioms.
-
-So, again, let's figure out what signature of callback function is required for
-the "CourseChange" Attribute.  This is going to be painful, but you only need
-to do this once.  After you get through this, you will be able to just look at
-a ``TracedCallback`` and understand it.
-
-The first thing we need to look at is the declaration of the trace source.
-Recall that this is in ``mobility-model.h``, where we have previously
-found:
-
-::
+This section is entirely optional.  It is going to be a bumpy ride,
+especially for those unfamiliar with the details of templates.
+However, if you get through this, you will have a very good handle on
+a lot of the |ns3| low level idioms.
+
+So, again, let's figure out what signature of callback function is
+required for the "CourseChange" trace source.  This is going to be
+painful, but you only need to do this once.  After you get through
+this, you will be able to just look at a ``TracedCallback`` and
+understand it.
+
+The first thing we need to look at is the declaration of the trace
+source.  Recall that this is in ``mobility-model.h``, where we have
+previously found::
 
   TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
 
-This declaration is for a template.  The template parameter is inside the
-angle-brackets, so we are really interested in finding out what that
-``TracedCallback<>`` is.  If you have absolutely no idea where this might
-be found, grep is your friend.
-
-We are probably going to be interested in some kind of declaration in the 
-|ns3| source, so first change into the ``src`` directory.  Then, 
-we know this declaration is going to have to be in some kind of header file,
-so just grep for it using:
+This declaration is for a template.  The template parameter is inside
+the angle-brackets, so we are really interested in finding out what
+that ``TracedCallback<>`` is.  If you have absolutely no idea where
+this might be found, ``grep`` is your friend.
+
+We are probably going to be interested in some kind of declaration in
+the |ns3| source, so first change into the ``src`` directory.  Then,
+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
 
-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
-through more and start scanning through it.  On the first page, you will see
-some very suspiciously template-looking stuff.
+You'll see 303 lines fly by (I piped this through ``wc`` to see how bad it
+was).  Although that may seem like a lot, that's not really a lot.  Just
+pipe the output through ``more`` and start scanning through it.  On the
+first page, you will see some very suspiciously template-looking
+stuff.
 
 ::
 
@@ -927,34 +1004,34 @@
   TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
   TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
 
-It turns out that all of this comes from the header file 
-``traced-callback.h`` which sounds very promising.  You can then take a
-look at ``mobility-model.h`` and see that there is a line which confirms
-this hunch:
-
-::
+It turns out that all of this comes from the header file
+``traced-callback.h`` which sounds very promising.  You can then take
+a look at ``mobility-model.h`` and see that there is a line which
+confirms this hunch::
 
   #include "ns3/traced-callback.h"
 
-Of course, you could have gone at this from the other direction and started
-by looking at the includes in ``mobility-model.h`` and noticing the 
-include of ``traced-callback.h`` and inferring that this must be the file
-you want.
-
-In either case, the next step is to take a look at ``src/core/model/traced-callback.h``
-in your favorite editor to see what is happening.
-
-You will see a comment at the top of the file that should be comforting:
+Of course, you could have gone at this from the other direction and
+started by looking at the includes in ``mobility-model.h`` and
+noticing the include of ``traced-callback.h`` and inferring that this
+must be the file you want.
+
+In either case, the next step is to take a look at
+``src/core/model/traced-callback.h`` in your favorite editor to see
+what is happening.
+
+You will see a comment at the top of the file that should be
+comforting:
+
+  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), it forwards calls to a chain of
+  ns3::Callback.
 
-.. sourcecode:: text
+This should sound very familiar and let you know you are on the right
+track.
 
-  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),
-  it forwards calls to a chain of ns3::Callback.
-
-This should sound very familiar and let you know you are on the right track.
-
-Just after this comment, you will find,
+Just after this comment, you will find
 
 ::
 
@@ -966,23 +1043,20 @@
   {
     ...
 
-This tells you that TracedCallback is a templated class.  It has eight possible
-type parameters with default values.  Go back and compare this with the 
-declaration you are trying to understand:
-
-::
+This tells you that TracedCallback is a templated class.  It has eight
+possible type parameters with default values.  Go back and compare
+this with the declaration you are trying to understand::
 
   TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
 
-The ``typename T1`` in the templated class declaration corresponds to the 
-``Ptr<const MobilityModel>`` in the declaration above.  All of the other
-type parameters are left as defaults.  Looking at the constructor really
-doesn't tell you much.  The one place where you have seen a connection made
-between your Callback function and the tracing system is in the ``Connect``
-and ``ConnectWithoutContext`` functions.  If you scroll down, you will see
-a ``ConnectWithoutContext`` method here:
-
-::
+The ``typename T1`` in the templated class declaration corresponds to
+the ``Ptr<const MobilityModel>`` in the declaration above.  All of the
+other type parameters are left as defaults.  Looking at the
+constructor really doesn't tell you much.  The one place where you
+have seen a connection made between your Callback function and the
+tracing system is in the ``Connect`` and ``ConnectWithoutContext``
+functions.  If you scroll down, you will see a
+``ConnectWithoutContext`` method here::
 
   template<typename T1, typename T2, 
            typename T3, typename T4,
@@ -996,9 +1070,9 @@
     m_callbackList.push_back (cb);
   }
 
-You are now in the belly of the beast.  When the template is instantiated for
-the declaration above, the compiler will replace ``T1`` with 
-``Ptr<const MobilityModel>``.  
+You are now in the belly of the beast.  When the template is
+instantiated for the declaration above, the compiler will replace
+``T1`` with ``Ptr<const MobilityModel>``.
 
 ::
 
@@ -1010,34 +1084,27 @@
     m_callbackList.push_back (cb);
   }
 
-You can now see the implementation of everything we've been talking about.  The
-code creates a Callback of the right type and assigns your function to it.  This
-is the equivalent of the ``pfi = MyFunction`` we discussed at the start of
-this section.  The code then adds the Callback to the list of Callbacks for 
-this source.  The only thing left is to look at the definition of Callback.
-Using the same grep trick as we used to find ``TracedCallback``, you will be
-able to find that the file ``./core/callback.h`` is the one we need to look at.
-
-If you look down through the file, you will see a lot of probably almost
-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:
-   - 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.
+You can now see the implementation of everything we've been talking
+about.  The code creates a Callback of the right type and assigns your
+function to it.  This is the equivalent of the ``pfi = MyFunction`` we
+discussed at the start of this section.  The code then adds the
+Callback to the list of Callbacks for this source.  The only thing
+left is to look at the definition of Callback.  Using the same ``grep``
+trick as we used to find ``TracedCallback``, you will be able to find
+that the file ``./core/callback.h`` is the one we need to look at.
+
+If you look down through the file, you will see a lot of probably
+almost incomprehensible template code.  You will eventually come to
+some API Documentation for the Callback template class, though.  Fortunately,
+there is some English:
+
+  **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 reminaining (optional) template arguments represent the type of the subsequent arguments to the callback.
+  * up to nine arguments are supported.
 
 We are trying to figure out what the
 
@@ -1045,14 +1112,15 @@
 
     Callback<void, Ptr<const MobilityModel> > cb;
 
-declaration means.  Now we are in a position to understand that the first
-(non-optional) parameter, ``void``, represents the return type of the 
-Callback.  The second (non-optional) parameter, ``Ptr<const MobilityModel>``
-represents the first argument to the callback.
-
-The Callback in question is your function to receive the trace events.  From
-this you can infer that you need a function that returns ``void`` and takes
-a ``Ptr<const MobilityModel>``.  For example,
+declaration means.  Now we are in a position to understand that the
+first (non-optional) template argument, ``void``, represents the
+return type of the Callback.  The second (optional) template argument,
+``Ptr<const MobilityModel>`` represents the type of the first argument
+to the callback.
+
+The Callback in question is your function to receive the trace events.
+From this you can infer that you need a function that returns ``void``
+and takes a ``Ptr<const MobilityModel>``.  For example,
 
 ::
 
@@ -1062,23 +1130,20 @@
     ...
   }
 
-That's all you need if you want to ``Config::ConnectWithoutContext``.  If
-you want a context, you need to ``Config::Connect`` and use a Callback 
-function that takes a string context.  This is because the ``Connect``
-function will provide the context for you.  You'll need:
-
-::
+That's all you need if you want to ``Config::ConnectWithoutContext``.
+If you want a context, you need to ``Config::Connect`` and use a
+Callback function that takes a string context.  This is because the
+``Connect`` function will provide the context for you.  You'll need::
 
   void
-  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
+  CourseChangeCallback (std::string context, Ptr<const MobilityModel> model)
   {
     ...
   }
 
-If you want to ensure that your ``CourseChangeCallback`` is only visible
-in your local file, you can add the keyword ``static`` and come up with:
-
-::
+If you want to ensure that your ``CourseChangeCallback`` is only
+visible in your local file, you can add the keyword ``static`` and
+come up with::
 
   static void
   CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
@@ -1086,169 +1151,148 @@
     ...
   }
 
-which is exactly what we used in the ``third.cc`` example.  Perhaps you
-should now go back and reread the previous section (Take My Word for It).
+which is exactly what we used in the ``third.cc`` example.  Perhaps
+you should now go back and reread the previous section (Take My Word
+for It).
 
-If you are interested in more details regarding the implementation of 
+If you are interested in more details regarding the implementation of
 Callbacks, feel free to take a look at the |ns3| manual.  They are one
-of the most frequently used constructs in the low-level parts of |ns3|.
-It is, in my opinion, a quite elegant thing.
-
-What About TracedValue?
-+++++++++++++++++++++++
-
-Earlier in this section, we presented a simple piece of code that used a
-``TracedValue<int32_t>`` to demonstrate the basics of the tracing code.
-We just glossed over the way to find the return type and formal arguments
-for the ``TracedValue``.  Rather than go through the whole exercise, we
-will just point you at the correct file, ``src/core/model/traced-value.h`` and
-to the important piece of code:
-
-::
-
-  template <typename T>
-  class TracedValue
-  {
-  public:
-    ...
-    void Set (const T &v) {
-      if (m_v != v)
-        {
-  	m_cb (m_v, v);
-  	m_v = v;
-        }
-    }
-    ...
-  private:
-    T m_v;
-    TracedCallback<T,T> m_cb;
-  };
-
-Here you see that the ``TracedValue`` is templated, of course.  In the simple
-example case at the start of the section, the typename is int32_t.  This means 
-that the member variable being traced (``m_v`` in the private section of the 
-class) will be an ``int32_t m_v``.  The ``Set`` method will take a 
-``const int32_t &v`` as a parameter.  You should now be able to understand 
-that the ``Set`` code will fire the ``m_cb`` callback with two parameters:
-the first being the current value of the ``TracedValue``; and the second 
-being the new value being set.
-
-The callback, ``m_cb`` is declared as a ``TracedCallback<T, T>`` which
-will correspond to a ``TracedCallback<int32_t, int32_t>`` when the class is 
-instantiated.
-
-Recall that the callback target of a TracedCallback always returns ``void``.  
-Further recall that there is a one-to-one correspondence between the template 
-parameter list in the declaration and the formal arguments of the callback 
-function.  Therefore the callback will need to have a function signature that 
-looks like:
-
-::
-
-  void
-  MyCallback (int32_t oldValue, int32_t newValue)
-  {
-    ...
-  }
-
-It probably won't surprise you that this is exactly what we provided in that 
-simple example we covered so long ago:
-
-::
+of the most frequently used constructs in the low-level parts of
+|ns3|.  It is, in my opinion, a quite elegant thing.
 
-  void
-  IntTrace (int32_t oldValue, int32_t newValue)
-  {
-    std::cout << "Traced " << oldValue << " to " << newValue << std::endl;
-  }
+TracedValues
+++++++++++++
 
-A Real Example
-**************
+Earlier in this section, we presented a simple piece of code that used
+a ``TracedValue<int32_t>`` to demonstrate the basics of the tracing
+code.  We just glossed over the what a TracedValue really is and how
+to find the return type and formal arguments for the callback.
+
+As we mentioned, 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
+itself around, rather than passing the address of the object.  We
+extend that requirement to include the full set of assignment-style
+operators that are pre-defined for plain-old-data (POD) types:
+
+  +---------------------+---------------------+
+  | ``operator=`` (assignment)                |
+  +---------------------+---------------------+
+  | ``operator*=``      | ``operator/=``      |
+  +---------------------+---------------------+
+  | ``operator+=``      | ``operator-=``      |
+  +---------------------+---------------------+
+  | ``operator++`` (both prefix and postfix)  |
+  +---------------------+---------------------+
+  | ``operator--`` (both prefix and postfix)  |
+  +---------------------+---------------------+
+  | ``operator<<=``     | ``operator>>=``     |
+  +---------------------+---------------------+
+  | ``operator&=``      | ``operator|=``      |
+  +---------------------+---------------------+
+  | ``operator%=``      | ``operator^=``      |
+  +---------------------+---------------------+
+
+What this all really means is that you will be able to trace all
+changes made using those operators to a C++ object which has value
+semantics.
+
+The ``TracedValue<>`` declaration we saw above provides the
+infrastructure that overloads the operators mentioned above and drives
+the callback process.  On use of any of the operators above with a
+``TracedValue`` it will provide both the old and the new value of that
+variable, in this case an ``int32_t`` value.  By inspection of the
+``TracedValue`` declaration, we know the trace sink function will have
+arguments ``(const int32_t oldValue, const int32_t newValue)``.  The
+return type for a ``TracedValue`` callback function is always
+``void``, so the expected callback signature will be::
+
+  void (* TracedValueCallback)(const int32_t oldValue, const int32_t newValue);
+
+The ``.AddTraceSource`` in the ``GetTypeId`` method provides the
+"hooks" used for connecting the trace source to the outside world
+through the Config system.  We already discussed the first three
+agruments to ``AddTraceSource``: the Attribute name for the Config
+system, a help string, and the address of the TracedValue class data
+member.
+
+The final string argument, "ns3::Traced::Value::Int32" in the example,
+is the name of a ``typedef`` for the callback function signature.  We
+require these signatures to be defined, and give the fully qualified
+type name to ``AddTraceSource``, so the API documentation can link a
+trace source to the function signature.  For TracedValue the signature
+is straightforward; for TracedCallbacks we've already seen the API
+docs really help.
+
+Real Example
+************
+
+Let's do an example taken from one of the best-known books on TCP
+around.  "TCP/IP Illustrated, Volume 1: The Protocols," by W. Richard
+Stevens is a classic.  I just flipped the book open and ran across a
+nice plot of both the congestion window and sequence numbers versus
+time on page 366.  Stevens calls this, "Figure 21.10. Value of cwnd
+and send sequence number while data is being transmitted."  Let's just
+recreate the cwnd part of that plot in |ns3| using the tracing system
+and ``gnuplot``.
 
-Let's do an example taken from one of the best-known books on TCP around.  
-"TCP/IP Illustrated, Volume 1: The Protocols," by W. Richard Stevens is a 
-classic.  I just flipped the book open and ran across a nice plot of both the 
-congestion window and sequence numbers versus time on page 366.  Stevens calls 
-this, "Figure 21.10. Value of cwnd and send sequence number while data is being 
-transmitted."  Let's just recreate the cwnd part of that plot in |ns3|
-using the tracing system and ``gnuplot``.
-
-Are There Trace Sources Available?
-++++++++++++++++++++++++++++++++++
-
-The first thing to think about is how we want to get the data out.  What is it
-that we need to trace?  The first thing to do is to consult "The list of all
-trace sources" to see what we have to work with.  Recall that this is found
-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
+Available Sources
++++++++++++++++++
 
-It turns out that the |ns3| TCP implementation lives (mostly) in the 
-file ``src/internet/model/tcp-socket-base.cc`` while congestion control
-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:
+The first thing to think about is how we want to get the data out.
+What is it that we need to trace?  So let's consult "All Trace
+Sources" list to see what we have to work with.  Recall that this is
+found in the |ns3| API Documentation.  If you scroll through the list,
+you will eventually find:
+
+  **ns3::TcpNewReno**
+
+  * **CongestionWindow**: The TCP connection's congestion window
+  * **SlowStartThreshold**: TCP slow start threshold (bytes)
+
+It turns out that the |ns3| TCP implementation lives (mostly) in the
+file ``src/internet/model/tcp-socket-base.cc`` while congestion
+control 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
 
-You will find page after page of instances of tcp pointing you to that file. 
-
-If you open ``src/internet/model/tcp-newreno.cc`` in your favorite 
-editor, you will see right up at the top of the file, the following declarations:
+You will find page after page of instances of tcp pointing you to that
+file.
 
-::
+Bringing up the class documentation for ``TcpNewReno`` and skipping to
+the list of TraceSources you will find
 
-  TypeId
-  TcpNewReno::GetTypeId ()
-  {
-    static TypeId tid = TypeId("ns3::TcpNewReno")
-      .SetParent<TcpSocketBase> ()
-      .AddConstructor<TcpNewReno> ()
-      .AddTraceSource ("CongestionWindow",
-                       "The TCP connection's congestion window",
-                       MakeTraceSourceAccessor (&TcpNewReno::m_cWnd))
-      ;
-    return tid;
-  }
-
-This should tell you to look for the declaration of ``m_cWnd`` in the header
-file ``src/internet/model/tcp-newreno.h``.  If you open this file in your
-favorite editor, you will find:
-
-::
+  **TraceSources**
 
-  TracedValue<uint32_t> m_cWnd; //Congestion window
+  * **CongestionWindow**: The TCP connnection's congestion window
 
-You should now understand this code completely.  If we have a pointer to the 
-``TcpNewReno``, we can ``TraceConnect`` to the "CongestionWindow" trace 
-source if we provide an appropriate callback target.  This is the same kind of
-trace source that we saw in the simple example at the start of this section,
-except that we are talking about ``uint32_t`` instead of ``int32_t``.
+    Callback signature:  **ns3::Traced::Value::Uint322Callback**
 
-We now know that we need to provide a callback that returns void and takes 
-two ``uint32_t`` parameters, the first being the old value and the second 
-being the new value:
+Clicking on the callback ``typedef`` link we see the signature
+you now know to expect::
 
-::
+    typedef void(* ns3::Traced::Value::Int32Callback)(const int32_t oldValue, const int32_t newValue)
 
-  void
-  CwndTrace (uint32_t oldValue, uint32_t newValue)
-  {
-    ...
-  }
+You should now understand this code completely.  If we have a pointer
+to the ``TcpNewReno``, we can ``TraceConnect`` to the
+"CongestionWindow" trace source if we provide an appropriate callback
+target.  This is the same kind of trace source that we saw in the
+simple example at the start of this section, except that we are
+talking about ``uint32_t`` instead of ``int32_t``.  And we know
+that we have to provide a callback function with that signature.
 
-What Script to Use?
-+++++++++++++++++++
+Finding Examples
+++++++++++++++++
 
-It's always best to try and find working code laying around that you can 
-modify, rather than starting from scratch.  So the first order of business now
-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:
+It's always best to try and find working code laying around that you
+can modify, rather than starting from scratch.  So the first order of
+business now 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
 
@@ -1258,78 +1302,87 @@
 ``examples/tcp/tcp-large-transfer.cc`` and 
 ``src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc``.
 
-We haven't visited any of the test code yet, so let's take a look there.  You
-will typically find that test code is fairly minimal, so this is probably a
-very good bet.  Open ``src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc`` in your
-favorite editor and search for "CongestionWindow".  You will find,
+We haven't visited any of the test code yet, so let's take a look
+there.  You will typically find that test code is fairly minimal, so
+this is probably a very good bet.  Open
+``src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc`` in your favorite editor
+and search for "CongestionWindow".  You will find,
 
 ::
 
   ns3TcpSocket->TraceConnectWithoutContext ("CongestionWindow", 
     MakeCallback (&Ns3TcpCwndTestCase1::CwndChange, this));
 
-This should look very familiar to you.  We mentioned above that if we had a
-pointer to the ``TcpNewReno``, we could ``TraceConnect`` to the 
-"CongestionWindow" trace source.  That's exactly what we have here; so it
-turns out that this line of code does exactly what we want.  Let's go ahead
-and extract the code we need from this function 
-(``Ns3TcpCwndTestCase1::DoRun (void)``).  If you look at this function,
-you will find that it looks just like an |ns3| script.  It turns out that
-is exactly what it is.  It is a script run by the test framework, so we can just
-pull it out and wrap it in ``main`` instead of in ``DoRun``.  Rather than
-walk through this, step, by step, we have provided the file that results from
-porting this test back to a native |ns3| script --
-``examples/tutorial/fifth.cc``.  
-
-A Common Problem and Solution
-+++++++++++++++++++++++++++++
-
-The ``fifth.cc`` example demonstrates an extremely important rule that you 
-must understand before using any kind of ``Attribute``:  you must ensure 
-that the target of a ``Config`` command exists before trying to use it.
-This is no different than saying an object must be instantiated before trying
-to call it.  Although this may seem obvious when stated this way, it does
-trip up many people trying to use the system for the first time.
-
-Let's return to basics for a moment.  There are three basic time periods that
-exist in any |ns3| script.  The first time period is sometimes called 
-"Configuration Time" or "Setup Time," and is in force during the period 
-when the ``main`` function of your script is running, but before 
-``Simulator::Run`` is called.  The second time period  is sometimes called
-"Simulation Time" and is in force during the time period when 
-``Simulator::Run`` is actively executing its events.  After it completes
-executing the simulation,  ``Simulator::Run`` will return control back to 
-the ``main`` function.  When this happens, the script enters what can be 
-called "Teardown Time," which is when the structures and objects created 
-during setup are taken apart and released.
-
-Perhaps the most common mistake made in trying to use the tracing system is 
-assuming that entities constructed dynamically during simulation time are
-available during configuration time.  In particular, an |ns3|
-``Socket`` is a dynamic object often created by ``Applications`` to
-communicate between ``Nodes``.  An |ns3| ``Application`` 
-always has a "Start Time" and a "Stop Time" associated with it.  In the
-vast majority of cases, an ``Application`` will not attempt to create 
-a dynamic object until its ``StartApplication`` method is called at some
-"Start Time".  This is to ensure that the simulation is completely 
-configured before the app tries to do anything (what would happen if it tried
-to connect to a node that didn't exist yet during configuration time).  The 
-answer to this issue is to 1) create a simulator event that is run after the 
-dynamic object is created and hook the trace when that event is executed; or
-2) create the dynamic object at configuration time, hook it then, and give 
-the object to the system to use during simulation time.  We took the second 
-approach in the ``fifth.cc`` example.  This decision required us to create
-the ``MyApp`` ``Application``, the entire purpose of which is to take 
-a ``Socket`` as a parameter.  
-
-A fifth.cc Walkthrough
-++++++++++++++++++++++
-
-Now, let's take a look at the example program we constructed by dissecting
-the congestion window test.  Open ``examples/tutorial/fifth.cc`` in your
-favorite editor.  You should see some familiar looking code:
-
-::
+This should look very familiar to you.  We mentioned above that if we
+had a pointer to the ``TcpNewReno``, we could ``TraceConnect`` to the
+"CongestionWindow" trace source.  That's exactly what we have here; so
+it turns out that this line of code does exactly what we want.  Let's
+go ahead and extract the code we need from this function
+(``Ns3TcpCwndTestCase1::DoRun (void)``).  If you look at this
+function, you will find that it looks just like an |ns3| script.  It
+turns out that is exactly what it is.  It is a script run by the test
+framework, so we can just pull it out and wrap it in ``main`` instead
+of in ``DoRun``.  Rather than walk through this, step, by step, we
+have provided the file that results from porting this test back to a
+native |ns3| script -- ``examples/tutorial/fifth.cc``.
+
+Dynamic Trace Sources
++++++++++++++++++++++
+
+The ``fifth.cc`` example demonstrates an extremely important rule that
+you must understand before using any kind of trace source: you must
+ensure that the target of a ``Config::Connect`` command exists before
+trying to use it.  This is no different than saying an object must be
+instantiated before trying to call it.  Although this may seem obvious
+when stated this way, it does trip up many people trying to use the
+system for the first time.
+
+Let's return to basics for a moment.  There are three basic execution
+phases that exist in any |ns3| script.  The first phase is
+sometimes called "Configuration Time" or "Setup Time," and exists
+during the period when the ``main`` function of your script is
+running, but before ``Simulator::Run`` is called.  The second phase
+is sometimes called "Simulation Time" and exists during
+the time period when ``Simulator::Run`` is actively executing its
+events.  After it completes executing the simulation,
+``Simulator::Run`` will return control back to the ``main`` function.
+When this happens, the script enters what can be called the "Teardown
+Phase," which is when the structures and objects created during setup
+are taken apart and released.
+
+Perhaps the most common mistake made in trying to use the tracing
+system is assuming that entities constructed dynamically *during
+simulation time* are available during configuration time.  In
+particular, an |ns3| ``Socket`` is a dynamic object often created by
+``Applications`` to communicate between ``Nodes``.  An |ns3|
+``Application`` always has a "Start Time" and a "Stop Time" associated
+with it.  In the vast majority of cases, an ``Application`` will not
+attempt to create a dynamic object until its ``StartApplication``
+method is called at some "Start Time".  This is to ensure that the
+simulation is completely configured before the app tries to do
+anything (what would happen if it tried to connect to a Node that
+didn't exist yet during configuration time?).  As a result, during the
+configuration phase you can't connect a trace source to a trace sink
+if one of them is created dynamically during the simulation.
+
+The two solutions to this connundrum are
+
+#. Create a simulator event that is run after the dynamic object is
+   created and hook the trace when that event is executed; or
+#. Create the dynamic object at configuration time, hook it then, and
+   give the object to the system to use during simulation time.
+
+We took the second approach in the ``fifth.cc`` example.  This
+decision required us to create the ``MyApp`` ``Application``, the
+entire purpose of which is to take a ``Socket`` as a parameter.
+
+Walkthrough: ``fifth.cc``
++++++++++++++++++++++++++
+
+Now, let's take a look at the example program we constructed by
+dissecting the congestion window test.  Open
+``examples/tutorial/fifth.cc`` in your favorite editor.  You should
+see some familiar looking code::
 
   /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
   /*
@@ -1358,9 +1411,9 @@
   
   NS_LOG_COMPONENT_DEFINE ("FifthScriptExample");
 
-This has all been covered, so we won't rehash it.  The next lines of source are
-the network illustration and a comment addressing the problem described above
-with ``Socket``.
+This has all been covered, so we won't rehash it.  The next lines of
+source are the network illustration and a comment addressing the
+problem described above with ``Socket``.
 
 ::
 
@@ -1402,7 +1455,8 @@
 This should also be self-explanatory.  
 
 The next part is the declaration of the ``MyApp`` ``Application`` that
-we put together to allow the ``Socket`` to be created at configuration time.
+we put together to allow the ``Socket`` to be created at configuration
+time.
 
 ::
 
@@ -1434,35 +1488,34 @@
   };
 
 You can see that this class inherits from the |ns3| ``Application``
-class.  Take a look at ``src/network/model/application.h`` if you are interested in 
-what is inherited.  The ``MyApp`` class is obligated to override the 
-``StartApplication`` and ``StopApplication`` methods.  These methods are
-automatically called when ``MyApp`` is required to start and stop sending
-data during the simulation.
-
-How Applications are Started and Stopped (optional)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-It is worthwhile to spend a bit of time explaining how events actually get 
-started in the system.  This is another fairly deep explanation, and can be
-ignored if you aren't planning on venturing down into the guts of the system.
-It is useful, however, in that the discussion touches on how some very important
-parts of |ns3| work and exposes some important idioms.  If you are 
-planning on implementing new models, you probably want to understand this
-section.
-
-The most common way to start pumping events is to start an ``Application``.
-This is done as the result of the following (hopefully) familar lines of an 
-|ns3| script:
-
-::
+class.  Take a look at ``src/network/model/application.h`` if you are
+interested in what is inherited.  The ``MyApp`` class is obligated to
+override the ``StartApplication`` and ``StopApplication`` methods.
+These methods are automatically called when ``MyApp`` is required to
+start and stop sending data during the simulation.
+
+Starting/Stopping Applications
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+It is worthwhile to spend a bit of time explaining how events actually
+get started in the system.  This is another fairly deep explanation,
+and can be ignored if you aren't planning on venturing down into the
+guts of the system.  It is useful, however, in that the discussion
+touches on how some very important parts of |ns3| work and exposes
+some important idioms.  If you are planning on implementing new
+models, you probably want to understand this section.
+
+The most common way to start pumping events is to start an
+``Application``.  This is done as the result of the following
+(hopefully) familar lines of an |ns3| script::
 
   ApplicationContainer apps = ...
   apps.Start (Seconds (1.0));
   apps.Stop (Seconds (10.0));
 
-The application container code (see ``src/network/helper/application-container.h`` if
-you are interested) loops through its contained applications and calls,
+The application container code (see
+``src/network/helper/application-container.h`` if you are interested)
+loops through its contained applications and calls,
 
 ::
 
@@ -1476,81 +1529,85 @@
 
 as a result of the ``apps.Stop`` call.
 
-The ultimate result of these calls is that we want to have the simulator 
-automatically make calls into our ``Applications`` to tell them when to
-start and stop.  In the case of ``MyApp``, it inherits from class
-``Application`` and overrides ``StartApplication``, and 
+The ultimate result of these calls is that we want to have the
+simulator automatically make calls into our ``Applications`` to tell
+them when to start and stop.  In the case of ``MyApp``, it inherits
+from class ``Application`` and overrides ``StartApplication``, and
 ``StopApplication``.  These are the functions that will be called by
 the simulator at the appropriate time.  In the case of ``MyApp`` you
 will find that ``MyApp::StartApplication`` does the initial ``Bind``,
 and ``Connect`` on the socket, and then starts data flowing by calling
 ``MyApp::SendPacket``.  ``MyApp::StopApplication`` stops generating
-packets by cancelling any pending send events and closing the socket.
+packets by cancelling any pending send events then closes the socket.
 
-One of the nice things about |ns3| is that you can completely 
-ignore the implementation details of how your ``Application`` is 
-"automagically" called by the simulator at the correct time.  But since
-we have already ventured deep into |ns3| already, let's go for it.
-
-If you look at ``src/network/model/application.cc`` you will find that the
-``SetStartTime`` method of an ``Application`` just sets the member 
-variable ``m_startTime`` and the ``SetStopTime`` method just sets 
-``m_stopTime``.  From there, without some hints, the trail will probably
-end.
-
-The key to picking up the trail again is to know that there is a global 
-list of all of the nodes in the system.  Whenever you create a node in 
-a simulation, a pointer to that node is added to the global ``NodeList``.
-
-Take a look at ``src/network/model/node-list.cc`` and search for 
-``NodeList::Add``.  The public static implementation calls into a private
-implementation called ``NodeListPriv::Add``.  This is a relatively common
-idom in |ns3|.  So, take a look at ``NodeListPriv::Add``.  There
-you will find,
+One of the nice things about |ns3| is that you can completely ignore
+the implementation details of how your ``Application`` is
+"automagically" called by the simulator at the correct time.  But
+since we have already ventured deep into |ns3| already, let's go for
+it.
+
+If you look at ``src/network/model/application.cc`` you will find that
+the ``SetStartTime`` method of an ``Application`` just sets the member
+variable ``m_startTime`` and the ``SetStopTime`` method just sets
+``m_stopTime``.  From there, without some hints, the trail will
+probably end.
+
+The key to picking up the trail again is to know that there is a
+global list of all of the nodes in the system.  Whenever you create a
+node in a simulation, a pointer to that Node is added to the global
+``NodeList``.
+
+Take a look at ``src/network/model/node-list.cc`` and search for
+``NodeList::Add``.  The public static implementation calls into a
+private implementation called ``NodeListPriv::Add``.  This is a
+relatively common idom in |ns3|.  So, take a look at
+``NodeListPriv::Add``.  There you will find,
 
 ::
 
   Simulator::ScheduleWithContext (index, TimeStep (0), &Node::Initialize, node);
 
-This tells you that whenever a ``Node`` is created in a simulation, as
-a side-effect, a call to that node's ``Initialize`` method is scheduled for
-you that happens at time zero.  Don't read too much into that name, yet.
-It doesn't mean that the node is going to start doing anything, it can be
-interpreted as an informational call into the ``Node`` telling it that 
-the simulation has started, not a call for action telling the ``Node``
-to start doing something.
-
-So, ``NodeList::Add`` indirectly schedules a call to ``Node::Initialize``
-at time zero to advise a new node that the simulation has started.  If you 
-look in ``src/network/model/node.h`` you will, however, not find a method called
-``Node::Initialize``.  It turns out that the ``Initialize`` method is inherited
-from class ``Object``.  All objects in the system can be notified when
-the simulation starts, and objects of class ``Node`` are just one kind
-of those objects.
-
-Take a look at ``src/core/model/object.cc`` next and search for ``Object::Initialize``.
-This code is not as straightforward as you might have expected since 
-|ns3| ``Objects`` support aggregation.  The code in 
-``Object::Initialize`` then loops through all of the objects that have been
-aggregated together and calls their ``DoInitialize`` method.  This is another
-idiom that is very common in |ns3|.  There is a public API method,
-that stays constant across implementations, that calls a private implementation
-method that is inherited and implemented by subclasses.  The names are typically
-something like ``MethodName`` for the public API and ``DoMethodName`` for
-the private API.
-
-This tells us that we should look for a ``Node::DoInitialize`` method in 
-``src/network/model/node.cc`` for the method that will continue our trail.  If you
-locate the code, you will find a method that loops through all of the devices
-in the node and then all of the applications in the node calling 
-``device->Initialize`` and ``application->Initialize`` respectively.
+This tells you that whenever a Node is created in a simulation, as
+a side-effect, a call to that node's ``Initialize`` method is
+scheduled for you that happens at time zero.  Don't read too much into
+that name, yet.  It doesn't mean that the Node is going to start doing
+anything, it can be interpreted as an informational call into the
+Node telling it that the simulation has started, not a call for
+action telling the Node to start doing something.
+
+So, ``NodeList::Add`` indirectly schedules a call to
+``Node::Initialize`` at time zero to advise a new Node that the
+simulation has started.  If you look in ``src/network/model/node.h``
+you will, however, not find a method called ``Node::Initialize``.  It
+turns out that the ``Initialize`` method is inherited from class
+``Object``.  All objects in the system can be notified when the
+simulation starts, and objects of class Node are just one kind of
+those objects.
+
+Take a look at ``src/core/model/object.cc`` next and search for
+``Object::Initialize``.  This code is not as straightforward as you
+might have expected since |ns3| ``Objects`` support aggregation.  The
+code in ``Object::Initialize`` then loops through all of the objects
+that have been aggregated together and calls their ``DoInitialize``
+method.  This is another idiom that is very common in |ns3|, sometimes
+called the "template design pattern.": a public non-virtual API
+method, which stays constant across implementations, and that calls a
+private virtual implementation method that is inherited and
+implemented by subclasses.  The names are typically something like
+``MethodName`` for the public API and ``DoMethodName`` for the private
+API.
+
+This tells us that we should look for a ``Node::DoInitialize`` method
+in ``src/network/model/node.cc`` for the method that will continue our
+trail.  If you locate the code, you will find a method that loops
+through all of the devices in the Node and then all of the
+applications in the Node calling ``device->Initialize`` and
+``application->Initialize`` respectively.
 
 You may already know that classes ``Device`` and ``Application`` both
 inherit from class ``Object`` and so the next step will be to look at
-what happens when ``Application::DoInitialize`` is called.  Take a look at
-``src/network/model/application.cc`` and you will find:
-
-::
+what happens when ``Application::DoInitialize`` is called.  Take a
+look at ``src/network/model/application.cc`` and you will find::
 
   void
   Application::DoInitialize (void)
@@ -1563,37 +1620,37 @@
     Object::DoInitialize ();
   }
 
-Here, we finally come to the end of the trail.  If you have kept it all straight,
-when you implement an |ns3| ``Application``, your new application 
-inherits from class ``Application``.  You override the ``StartApplication``
-and ``StopApplication`` methods and provide mechanisms for starting and 
-stopping the flow of data out of your new ``Application``.  When a ``Node``
-is created in the simulation, it is added to a global ``NodeList``.  The act
-of adding a node to this ``NodeList`` causes a simulator event to be scheduled
-for time zero which calls the ``Node::Initialize`` method of the newly added 
-``Node`` to be called when the simulation starts.  Since a ``Node`` inherits
-from ``Object``, this calls the ``Object::Initialize`` method on the ``Node``
-which, in turn, calls the ``DoInitialize`` methods on all of the ``Objects``
-aggregated to the ``Node`` (think mobility models).  Since the ``Node``
-``Object`` has overridden ``DoInitialize``, that method is called when the 
-simulation starts.  The ``Node::DoInitialize`` method calls the ``Initialize`` methods
-of all of the ``Applications`` on the node.  Since ``Applications`` are
-also ``Objects``, this causes ``Application::DoInitialize`` to be called.  When
-``Application::DoInitialize`` is called, it schedules events for the 
-``StartApplication`` and ``StopApplication`` calls on the ``Application``.
-These calls are designed to start and stop the flow of data from the 
-``Application``
+Here, we finally come to the end of the trail.  If you have kept it
+all straight, when you implement an |ns3| ``Application``, your new
+application inherits from class ``Application``.  You override the
+``StartApplication`` and ``StopApplication`` methods and provide
+mechanisms for starting and stopping the flow of data out of your new
+``Application``.  When a Node is created in the simulation, it is
+added to a global ``NodeList``.  The act of adding a Node to this
+``NodeList`` causes a simulator event to be scheduled for time zero
+which calls the ``Node::Initialize`` method of the newly added
+Node to be called when the simulation starts.  Since a Node
+inherits from ``Object``, this calls the ``Object::Initialize`` method
+on the Node which, in turn, calls the ``DoInitialize`` methods on
+all of the ``Objects`` aggregated to the Node (think mobility
+models).  Since the Node ``Object`` has overridden
+``DoInitialize``, that method is called when the simulation starts.
+The ``Node::DoInitialize`` method calls the ``Initialize`` methods of
+all of the ``Applications`` on the node.  Since ``Applications`` are
+also ``Objects``, this causes ``Application::DoInitialize`` to be
+called.  When ``Application::DoInitialize`` is called, it schedules
+events for the ``StartApplication`` and ``StopApplication`` calls on
+the ``Application``.  These calls are designed to start and stop the
+flow of data from the ``Application``
 
-This has been another fairly long journey, but it only has to be made once, and
-you now understand another very deep piece of |ns3|.
+This has been another fairly long journey, but it only has to be made
+once, and you now understand another very deep piece of |ns3|.
 
 The MyApp Application
 ~~~~~~~~~~~~~~~~~~~~~
 
-The ``MyApp`` ``Application`` needs a constructor and a destructor,
-of course:
-
-::
+The ``MyApp`` ``Application`` needs a constructor and a destructor, of
+course::
 
   MyApp::MyApp ()
     : m_socket (0),
@@ -1612,8 +1669,8 @@
     m_socket = 0;
   }
 
-The existence of the next bit of code is the whole reason why we wrote this
-``Application`` in the first place.
+The existence of the next bit of code is the whole reason why we wrote
+this ``Application`` in the first place.
 
 ::
 
@@ -1628,13 +1685,13 @@
     m_dataRate = dataRate;
   }
   
-This code should be pretty self-explanatory.  We are just initializing member
-variables.  The important one from the perspective of tracing is the 
-``Ptr<Socket> socket`` which we needed to provide to the application 
-during configuration time.  Recall that we are going to create the ``Socket``
-as a ``TcpSocket`` (which is implemented by ``TcpNewReno``) and hook 
-its "CongestionWindow" trace source before passing it to the ``Setup``
-method.
+This code should be pretty self-explanatory.  We are just initializing
+member variables.  The important one from the perspective of tracing
+is the ``Ptr<Socket> socket`` which we needed to provide to the
+application during configuration time.  Recall that we are going to
+create the ``Socket`` as a ``TcpSocket`` (which is implemented by
+``TcpNewReno``) and hook its "CongestionWindow" trace source before
+passing it to the ``Setup`` method.
 
 ::
 
@@ -1648,19 +1705,22 @@
     SendPacket ();
   }
 
-The above code is the overridden implementation ``Application::StartApplication``
-that will be automatically called by the simulator to start our ``Application``
-running at the appropriate time.  You can see that it does a ``Socket`` ``Bind``
-operation.  If you are familiar with Berkeley Sockets this shouldn't be a surprise.
-It performs the required work on the local side of the connection just as you might 
-expect.  The following ``Connect`` will do what is required to establish a connection 
-with the TCP at ``Address`` m_peer.  It should now be clear why we need to defer
-a lot of this to simulation time, since the ``Connect`` is going to need a fully
-functioning network to complete.  After the ``Connect``, the ``Application`` 
-then starts creating simulation events by calling ``SendPacket``.
+The above code is the overridden implementation
+``Application::StartApplication`` that will be automatically called by
+the simulator to start our ``Application`` running at the appropriate
+time.  You can see that it does a ``Socket`` ``Bind`` operation.  If
+you are familiar with Berkeley Sockets this shouldn't be a surprise.
+It performs the required work on the local side of the connection just
+as you might expect.  The following ``Connect`` will do what is
+required to establish a connection with the TCP at ``Address`` m_peer.
+It should now be clear why we need to defer a lot of this to
+simulation time, since the ``Connect`` is going to need a fully
+functioning network to complete.  After the ``Connect``, the
+``Application`` then starts creating simulation events by calling
+``SendPacket``.
 
-The next bit of code explains to the ``Application`` how to stop creating 
-simulation events.
+The next bit of code explains to the ``Application`` how to stop
+creating simulation events.
 
 ::
 
@@ -1680,20 +1740,20 @@
       }
   }
 
-Every time a simulation event is scheduled, an ``Event`` is created.  If the 
-``Event`` is pending execution or executing, its method ``IsRunning`` will
-return ``true``.  In this code, if ``IsRunning()`` returns true, we 
-``Cancel`` the event which removes it from the simulator event queue.  By 
-doing this, we break the chain of events that the ``Application`` is using to
-keep sending its ``Packets`` and the ``Application`` goes quiet.  After we 
-quiet the ``Application`` we ``Close`` the socket which tears down the TCP 
-connection.
-
-The socket is actually deleted in the destructor when the ``m_socket = 0`` is
-executed.  This removes the last reference to the underlying Ptr<Socket> which 
-causes the destructor of that Object to be called.
+Every time a simulation event is scheduled, an ``Event`` is created.
+If the ``Event`` is pending execution or executing, its method
+``IsRunning`` will return ``true``.  In this code, if ``IsRunning()``
+returns true, we ``Cancel`` the event which removes it from the
+simulator event queue.  By doing this, we break the chain of events
+that the ``Application`` is using to keep sending its ``Packets`` and
+the ``Application`` goes quiet.  After we quiet the ``Application`` we
+``Close`` the socket which tears down the TCP connection.
+
+The socket is actually deleted in the destructor when the ``m_socket =
+0`` is executed.  This removes the last reference to the underlying
+Ptr<Socket> which causes the destructor of that Object to be called.
 
-Recall that ``StartApplication`` called ``SendPacket`` to start the 
+Recall that ``StartApplication`` called ``SendPacket`` to start the
 chain of events that describes the ``Application`` behavior.
 
 ::
@@ -1710,14 +1770,14 @@
       }
   }
 
-Here, you see that ``SendPacket`` does just that.  It creates a ``Packet``
-and then does a ``Send`` which, if you know Berkeley Sockets, is probably 
-just what you expected to see.
-
-It is the responsibility of the ``Application`` to keep scheduling the 
-chain of events, so the next lines call ``ScheduleTx`` to schedule another
-transmit event (a ``SendPacket``) until the ``Application`` decides it
-has sent enough.
+Here, you see that ``SendPacket`` does just that.  It creates a
+``Packet`` and then does a ``Send`` which, if you know Berkeley
+Sockets, is probably just what you expected to see.
+
+It is the responsibility of the ``Application`` to keep scheduling the
+chain of events, so the next lines call ``ScheduleTx`` to schedule
+another transmit event (a ``SendPacket``) until the ``Application``
+decides it has sent enough.
 
 ::
 
@@ -1731,24 +1791,24 @@
       }
   }
 
-Here, you see that ``ScheduleTx`` does exactly that.  If the ``Application``
-is running (if ``StopApplication`` has not been called) it will schedule a 
-new event, which calls ``SendPacket`` again.  The alert reader will spot
-something that also trips up new users.  The data rate of an ``Application`` is
-just that.  It has nothing to do with the data rate of an underlying ``Channel``.
-This is the rate at which the ``Application`` produces bits.  It does not take
-into account any overhead for the various protocols or channels that it uses to 
-transport the data.  If you set the data rate of an ``Application`` to the same
-data rate as your underlying ``Channel`` you will eventually get a buffer overflow.
-
-The Trace Sinks
-~~~~~~~~~~~~~~~
-
-The whole point of this exercise is to get trace callbacks from TCP indicating the
-congestion window has been updated.  The next piece of code implements the 
-corresponding trace sink:
-
-::
+Here, you see that ``ScheduleTx`` does exactly that.  If the
+``Application`` is running (if ``StopApplication`` has not been
+called) it will schedule a new event, which calls ``SendPacket``
+again.  The alert reader will spot something that also trips up new
+users.  The data rate of an ``Application`` is just that.  It has
+nothing to do with the data rate of an underlying ``Channel``.  This
+is the rate at which the ``Application`` produces bits.  It does not
+take into account any overhead for the various protocols or channels
+that it uses to transport the data.  If you set the data rate of an
+``Application`` to the same data rate as your underlying ``Channel``
+you will eventually get a buffer overflow.
+
+Trace Sinks
+~~~~~~~~~~~
+
+The whole point of this exercise is to get trace callbacks from TCP
+indicating the congestion window has been updated.  The next piece of
+code implements the corresponding trace sink::
 
   static void
   CwndChange (uint32_t oldCwnd, uint32_t newCwnd)
@@ -1756,14 +1816,16 @@
     NS_LOG_UNCOND (Simulator::Now ().GetSeconds () << "\t" << newCwnd);
   }
 
-This should be very familiar to you now, so we won't dwell on the details.  This
-function just logs the current simulation time and the new value of the 
-congestion window every time it is changed.  You can probably imagine that you
-could load the resulting output into a graphics program (gnuplot or Excel) and
-immediately see a nice graph of the congestion window behavior over time.
-
-We added a new trace sink to show where packets are dropped.  We are going to 
-add an error model to this code also, so we wanted to demonstrate this working.
+This should be very familiar to you now, so we won't dwell on the
+details.  This function just logs the current simulation time and the
+new value of the congestion window every time it is changed.  You can
+probably imagine that you could load the resulting output into a
+graphics program (gnuplot or Excel) and immediately see a nice graph
+of the congestion window behavior over time.
+
+We added a new trace sink to show where packets are dropped.  We are
+going to add an error model to this code also, so we wanted to
+demonstrate this working.
 
 ::
 
@@ -1773,23 +1835,24 @@
     NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
   }
 
-This trace sink will be connected to the "PhyRxDrop" trace source of the 
-point-to-point NetDevice.  This trace source fires when a packet is dropped
-by the physical layer of a ``NetDevice``.  If you take a small detour to the
-source (``src/point-to-point/model/point-to-point-net-device.cc``) you will
-see that this trace source refers to ``PointToPointNetDevice::m_phyRxDropTrace``.
-If you then look in ``src/point-to-point/model/point-to-point-net-device.h``
-for this member variable, you will find that it is declared as a
+This trace sink will be connected to the "PhyRxDrop" trace source of
+the point-to-point NetDevice.  This trace source fires when a packet
+is dropped by the physical layer of a ``NetDevice``.  If you take a
+small detour to the source
+(``src/point-to-point/model/point-to-point-net-device.cc``) you will
+see that this trace source refers to
+``PointToPointNetDevice::m_phyRxDropTrace``.  If you then look in
+``src/point-to-point/model/point-to-point-net-device.h`` for this
+member variable, you will find that it is declared as a
 ``TracedCallback<Ptr<const Packet> >``.  This should tell you that the
-callback target should be a function that returns void and takes a single
-parameter which is a ``Ptr<const Packet>`` -- just what we have above.
+callback target should be a function that returns void and takes a
+single parameter which is a ``Ptr<const Packet>`` (assuming we use
+``ConnectWithoutContext``) -- just what we have above.
 
-The Main Program
-~~~~~~~~~~~~~~~~
-
-The following code should be very familiar to you by now:
+Main Program
+~~~~~~~~~~~~
 
-::
+The following code should be very familiar to you by now::
 
   int
   main (int argc, char *argv[])
@@ -1804,18 +1867,20 @@
     NetDeviceContainer devices;
     devices = pointToPoint.Install (nodes);
 
-This creates two nodes with a point-to-point channel between them, just as
-shown in the illustration at the start of the file.
+This creates two nodes with a point-to-point channel between them,
+just as shown in the illustration at the start of the file.
 
-The next few lines of code show something new.  If we trace a connection that
-behaves perfectly, we will end up with a monotonically increasing congestion
-window.  To see any interesting behavior, we really want to introduce link 
-errors which will drop packets, cause duplicate ACKs and trigger the more
-interesting behaviors of the congestion window.
+The next few lines of code show something new.  If we trace a
+connection that behaves perfectly, we will end up with a monotonically
+increasing congestion window.  To see any interesting behavior, we
+really want to introduce link errors which will drop packets, cause
+duplicate ACKs and trigger the more interesting behaviors of the
+congestion window.
 
 |ns3| provides ``ErrorModel`` objects which can be attached to
-``Channels``.  We are using the ``RateErrorModel`` which allows us
-to introduce errors into a ``Channel`` at a given *rate*. 
+``Channels``.  We are using the ``RateErrorModel`` which allows us to
+introduce errors
+into a ``Channel`` at a given *rate*. 
 
 ::
 
@@ -1823,10 +1888,10 @@
   em->SetAttribute ("ErrorRate", DoubleValue (0.00001));
   devices.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em));
 
-The above code instantiates a ``RateErrorModel`` Object, and
-we set the "ErrorRate" ``Attribute`` to the desired value.
-We then set the resulting instantiated ``RateErrorModel`` as the error
-model used by the point-to-point ``NetDevice``.  This will give us some
+The above code instantiates a ``RateErrorModel`` Object, and we set
+the "ErrorRate" ``Attribute`` to the desired value.  We then set the
+resulting instantiated ``RateErrorModel`` as the error model used by
+the point-to-point ``NetDevice``.  This will give us some
 retransmissions and make our plot a little more interesting.
 
 ::
@@ -1838,13 +1903,13 @@
   address.SetBase ("10.1.1.0", "255.255.255.252");
   Ipv4InterfaceContainer interfaces = address.Assign (devices);
 
-The above code should be familiar.  It installs internet stacks on our two
-nodes and creates interfaces and assigns IP addresses for the point-to-point
-devices.
-
-Since we are using TCP, we need something on the destination node to receive
-TCP connections and data.  The ``PacketSink`` ``Application`` is commonly
-used in |ns3| for that purpose.
+The above code should be familiar.  It installs internet stacks on our
+two nodes and creates interfaces and assigns IP addresses for the
+point-to-point devices.
+
+Since we are using TCP, we need something on the destination Node to
+receive TCP connections and data.  The ``PacketSink`` ``Application``
+is commonly used in |ns3| for that purpose.
 
 ::
 
@@ -1863,19 +1928,21 @@
   PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", 
     InetSocketAddress (Ipv4Address::GetAny (), sinkPort));
 
-This code instantiates a ``PacketSinkHelper`` and tells it to create sockets
-using the class ``ns3::TcpSocketFactory``.  This class implements a design 
-pattern called "object factory" which is a commonly used mechanism for 
-specifying a class used to create objects in an abstract way.  Here, instead of 
-having to create the objects themselves, you provide the ``PacketSinkHelper``
-a string that specifies a ``TypeId`` string used to create an object which 
-can then be used, in turn, to create instances of the Objects created by the 
+This code instantiates a ``PacketSinkHelper`` and tells it to create
+sockets using the class ``ns3::TcpSocketFactory``.  This class
+implements a design pattern called "object factory" which is a
+commonly used mechanism for specifying a class used to create objects
+in an abstract way.  Here, instead of having to create the objects
+themselves, you provide the ``PacketSinkHelper`` a string that
+specifies a ``TypeId`` string used to create an object which can then
+be used, in turn, to create instances of the Objects created by the
 factory.
 
-The remaining parameter tells the ``Application`` which address and port it
-should ``Bind`` to.
+The remaining parameter tells the ``Application`` which address and
+port it should ``Bind`` to.
 
-The next two lines of code will create the socket and connect the trace source.
+The next two lines of code will create the socket and connect the
+trace source.
 
 ::
 
@@ -1884,23 +1951,23 @@
   ns3TcpSocket->TraceConnectWithoutContext ("CongestionWindow", 
     MakeCallback (&CwndChange));
 
-The first statement calls the static member function ``Socket::CreateSocket``
-and provides a ``Node`` and an explicit ``TypeId`` for the object factory
-used to create the socket.  This is a slightly lower level call than the 
-``PacketSinkHelper`` call above, and uses an explicit C++ type instead of 
-one referred to by a string.  Otherwise, it is conceptually the same thing.
-
-Once the ``TcpSocket`` is created and attached to the ``Node``, we can
-use ``TraceConnectWithoutContext`` to connect the CongestionWindow trace 
-source to our trace sink.
-
-Recall that we coded an ``Application`` so we could take that ``Socket``
-we just made (during configuration time) and use it in simulation time.  We now 
-have to instantiate that ``Application``.  We didn't go to any trouble to
-create a helper to manage the ``Application`` so we are going to have to 
-create and install it "manually".  This is actually quite easy:
-
-::
+The first statement calls the static member function
+``Socket::CreateSocket`` and provides a Node and an explicit
+``TypeId`` for the object factory used to create the socket.  This is
+a slightly lower level call than the ``PacketSinkHelper`` call above,
+and uses an explicit C++ type instead of one referred to by a string.
+Otherwise, it is conceptually the same thing.
+
+Once the ``TcpSocket`` is created and attached to the Node, we can
+use ``TraceConnectWithoutContext`` to connect the CongestionWindow
+trace source to our trace sink.
+
+Recall that we coded an ``Application`` so we could take that
+``Socket`` we just made (during configuration time) and use it in
+simulation time.  We now have to instantiate that ``Application``.  We
+didn't go to any trouble to create a helper to manage the
+``Application`` so we are going to have to create and install it
+"manually".  This is actually quite easy::
 
   Ptr<MyApp> app = CreateObject<MyApp> ();
   app->Setup (ns3TcpSocket, sinkAddress, 1040, 1000, DataRate ("1Mbps"));
@@ -1910,27 +1977,28 @@
 
 The first line creates an ``Object`` of type ``MyApp`` -- our
 ``Application``.  The second line tells the ``Application`` what
-``Socket`` to use, what address to connect to, how much data to send 
-at each send event, how many send events to generate and the rate at which
-to produce data from those events.
+``Socket`` to use, what address to connect to, how much data to send
+at each send event, how many send events to generate and the rate at
+which to produce data from those events.
 
-Next, we manually add the ``MyApp Application`` to the source node
-and explicitly call the ``Start`` and ``Stop`` methods on the 
+Next, we manually add the ``MyApp Application`` to the source Node and
+explicitly call the ``Start`` and ``Stop`` methods on the
 ``Application`` to tell it when to start and stop doing its thing.
 
-We need to actually do the connect from the receiver point-to-point ``NetDevice``
-to our callback now.
+We need to actually do the connect from the receiver point-to-point
+``NetDevice`` drop event to our ``RxDrop`` callback now.
 
 ::
 
   devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", MakeCallback (&RxDrop));
 
-It should now be obvious that we are getting a reference to the receiving 
-``Node NetDevice`` from its container and connecting the trace source defined
-by the attribute "PhyRxDrop" on that device to the trace sink ``RxDrop``.
+It should now be obvious that we are getting a reference to the
+receiving ``Node NetDevice`` from its container and connecting the
+trace source defined by the attribute "PhyRxDrop" on that device to
+the trace sink ``RxDrop``.
 
-Finally, we tell the simulator to override any ``Applications`` and just
-stop processing events at 20 seconds into the simulation.
+Finally, we tell the simulator to override any ``Applications`` and
+just stop processing events at 20 seconds into the simulation.
 
 ::
 
@@ -1941,21 +2009,23 @@
     return 0;
   }
 
-Recall that as soon as ``Simulator::Run`` is called, configuration time
-ends, and simulation time begins.  All of the work we orchestrated by 
-creating the ``Application`` and teaching it how to connect and send
-data actually happens during this function call.
+Recall that as soon as ``Simulator::Run`` is called, configuration
+time ends, and simulation time begins.  All of the work we
+orchestrated by creating the ``Application`` and teaching it how to
+connect and send data actually happens during this function call.
 
 As soon as ``Simulator::Run`` returns, the simulation is complete and
-we enter the teardown phase.  In this case, ``Simulator::Destroy`` takes
-care of the gory details and we just return a success code after it completes.
-
-Running fifth.cc
-++++++++++++++++
-
-Since we have provided the file ``fifth.cc`` for you, if you have built
-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.
+we enter the teardown phase.  In this case, ``Simulator::Destroy``
+takes care of the gory details and we just return a success code after
+it completes.
+
+Running ``fifth.cc``
+++++++++++++++++++++
+
+Since we have provided the file ``fifth.cc`` for you, if you have
+built your distribution (in debug mode since it uses ``NS_LOG`` -- recall
+that optimized builds optimize out ``NS_LOG``) it will be waiting for you
+to run.
 
 .. sourcecode:: bash
 
@@ -1963,33 +2033,36 @@
   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
-  1.21511 1608
-  1.22103 2144
-  ...
-  1.2471  8040
-  1.24895 8576
-  1.2508  9112
-  RxDrop at 1.25151
-  ...
-
-You can probably see immediately a downside of using prints of any kind in your
-traces.  We get those extraneous waf messages printed all over our interesting
-information along with those RxDrop messages.  We will remedy that soon, but I'm
-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``:
+  1       536
+  1.0093  1072
+  1.01528 1608
+  1.02167 2144
+  ...
+  1.11319 8040
+  1.12151 8576
+  1.12983 9112
+  RxDrop at 1.13696
+  ...
+
+You can probably see immediately a downside of using prints of any
+kind in your traces.  We get those extraneous waf messages printed all
+over our interesting information along with those RxDrop messages.  We
+will remedy that soon, but I'm 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
 
-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
-``TraceConnectWithoutContext("PhyRxDrop", MakeCallback (&RxDrop));`` in the
-script to get rid of the drop prints just as easily. 
+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 ``TraceConnectWithoutContext("PhyRxDrop",
+MakeCallback (&RxDrop));`` in the script to get rid of the drop prints
+just as easily.
 
-You can now run gnuplot (if you have it installed) and tell it to generate some 
-pretty pictures:
+You can now run gnuplot (if you have it installed) and tell it to
+generate some pretty pictures:
 
 .. sourcecode:: bash
 
@@ -1999,43 +2072,46 @@
   gnuplot> plot "cwnd.dat" using 1:2 title 'Congestion Window' with linespoints
   gnuplot> exit
 
-You should now have a graph of the congestion window versus time sitting in the 
-file "cwnd.png" that looks like:
+You should now have a graph of the congestion window versus time
+sitting in the file "cwnd.png" that looks like:
 
 .. figure:: figures/cwnd.png
 
 Using Mid-Level Helpers
 +++++++++++++++++++++++
 
-In the previous section, we showed how to hook a trace source and get hopefully
-interesting information out of a simulation.  Perhaps you will recall that we 
-called logging to the standard output using ``std::cout`` a "Blunt Instrument" 
-much earlier in this chapter.  We also wrote about how it was a problem having
-to parse the log output in order to isolate interesting information.  It may 
-have occurred to you that we just spent a lot of time implementing an example
-that exhibits all of the problems we purport to fix with the |ns3| tracing
-system!  You would be correct.  But, bear with us.  We're not done yet.
-
-One of the most important things we want to do is to is to have the ability to 
-easily control the amount of output coming out of the simulation; and we also 
-want to save those data to a file so we can refer back to it later.  We can use
-the mid-level trace helpers provided in |ns3| to do just that and complete
-the picture.
-
-We provide a script that writes the cwnd change and drop events developed in 
-the example ``fifth.cc`` to disk in separate files.  The cwnd changes are 
-stored as a tab-separated ASCII file and the drop events are stored in a pcap
-file.  The changes to make this happen are quite small.
-
-A sixth.cc Walkthrough
-~~~~~~~~~~~~~~~~~~~~~~
-
-Let's take a look at the changes required to go from ``fifth.cc`` to 
-``sixth.cc``.  Open ``examples/tutorial/fifth.cc`` in your favorite 
-editor.  You can see the first change by searching for CwndChange.  You will 
-find that we have changed the signatures for the trace sinks and have added 
-a single line to each sink that writes the traced information to a stream
-representing a file.
+In the previous section, we showed how to hook a trace source and get
+hopefully interesting information out of a simulation.  Perhaps you
+will recall that we called logging to the standard output using
+``std::cout`` a "blunt instrument" much earlier in this chapter.  We
+also wrote about how it was a problem having to parse the log output
+in order to isolate interesting information.  It may have occurred to
+you that we just spent a lot of time implementing an example that
+exhibits all of the problems we purport to fix with the |ns3| tracing
+system!  You would be correct.  But, bear with us.  We're not done
+yet.
+
+One of the most important things we want to do is to is to have the
+ability to easily control the amount of output coming out of the
+simulation; and we also want to save those data to a file so we can
+refer back to it later.  We can use the mid-level trace helpers
+provided in |ns3| to do just that and complete the picture.
+
+We provide a script that writes the cwnd change and drop events
+developed in the example ``fifth.cc`` to disk in separate files.  The
+cwnd changes are stored as a tab-separated ASCII file and the drop
+events are stored in a PCAP file.  The changes to make this happen are
+quite small.
+
+Walkthrough: ``sixth.cc``
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Let's take a look at the changes required to go from ``fifth.cc`` to
+``sixth.cc``.  Open ``examples/tutorial/sixth.cc`` in your favorite
+editor.  You can see the first change by searching for CwndChange.
+You will find that we have changed the signatures for the trace sinks
+and have added a single line to each sink that writes the traced
+information to a stream representing a file.
 
 ::
 
@@ -2053,46 +2129,40 @@
     file->Write(Simulator::Now(), p);
   }
 
-We have added a "stream" parameter to the ``CwndChange`` trace sink.  
-This is an object that holds (keeps safely alive) a C++ output stream.  It 
-turns out that this is a very simple object, but one that manages lifetime 
-issues for the stream and solves a problem that even experienced C++ users 
-run into.  It turns out that the copy constructor for ostream is marked 
-private.  This means that ostreams do not obey value semantics and cannot 
-be used in any mechanism that requires the stream to be copied.  This includes
+We have added a "stream" parameter to the ``CwndChange`` trace sink.
+This is an object that holds (keeps safely alive) a C++ output stream.
+It turns out that this is a very simple object, but one that manages
+lifetime issues for the stream and solves a problem that even
+experienced C++ users run into.  It turns out that the copy
+constructor for ``std::ostream`` is marked private.  This means that
+``std::ostreams`` do not obey value semantics and cannot be used in
+any mechanism that requires the stream to be copied.  This includes
 the |ns3| callback system, which as you may recall, requires objects
-that obey value semantics.  Further notice that we have added the following 
-line in the ``CwndChange`` trace sink implementation:
-
-::
+that obey value semantics.  Further notice that we have added the
+following line in the ``CwndChange`` trace sink implementation::
 
   *stream->GetStream () << Simulator::Now ().GetSeconds () << "\t" << oldCwnd << "\t" << newCwnd << std::endl;
 
-This would be very familiar code if you replaced ``*stream->GetStream ()``
-with ``std::cout``, as in:
-
-::
+This would be very familiar code if you replaced ``*stream->GetStream
+()`` with ``std::cout``, as in::
 
   std::cout << Simulator::Now ().GetSeconds () << "\t" << oldCwnd << "\t" << newCwnd << std::endl;
 
 This illustrates that the ``Ptr<OutputStreamWrapper>`` is really just
-carrying around a ``std::ofstream`` for you, and you can use it here like 
-any other output stream.
-
-A similar situation happens in ``RxDrop`` except that the object being 
-passed around (a ``Ptr<PcapFileWrapper>``) represents a pcap file.  There
-is a one-liner in the trace sink to write a timestamp and the contents of the 
-packet being dropped to the pcap file:
+carrying around a ``std::ofstream`` for you, and you can use it here
+like any other output stream.
 
-::
+A similar situation happens in ``RxDrop`` except that the object being
+passed around (a ``Ptr<PcapFileWrapper>``) represents a PCAP file.
+There is a one-liner in the trace sink to write a timestamp and the
+contents of the packet being dropped to the PCAP file::
 
   file->Write(Simulator::Now(), p);
 
-Of course, if we have objects representing the two files, we need to create
-them somewhere and also cause them to be passed to the trace sinks.  If you 
-look in the ``main`` function, you will find new code to do just that:
-
-::
+Of course, if we have objects representing the two files, we need to
+create them somewhere and also cause them to be passed to the trace
+sinks.  If you look in the ``main`` function, you will find new code
+to do just that::
 
   AsciiTraceHelper asciiTraceHelper;
   Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("sixth.cwnd");
@@ -2104,99 +2174,108 @@
   Ptr<PcapFileWrapper> file = pcapHelper.CreateFile ("sixth.pcap", std::ios::out, PcapHelper::DLT_PPP);
   devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", MakeBoundCallback (&RxDrop, file));
 
-In the first section of the code snippet above, we are creating the ASCII
-trace file, creating an object responsible for managing it and using a
-variant of the callback creation function to arrange for the object to be 
-passed to the sink.  Our ASCII trace helpers provide a rich set of
-functions to make using text (ASCII) files easy.  We are just going to 
-illustrate the use of the file stream creation function here.
-
-The ``CreateFileStream{}`` function is basically going to instantiate
-a std::ofstream object and create a new file (or truncate an existing file).
-This ofstream is packaged up in an |ns3| object for lifetime management
-and copy constructor issue resolution.
+In the first section of the code snippet above, we are creating the
+ASCII trace file, creating an object responsible for managing it and
+using a variant of the callback creation function to arrange for the
+object to be passed to the sink.  Our ASCII trace helpers provide a
+rich set of functions to make using text (ASCII) files easy.  We are
+just going to illustrate the use of the file stream creation function
+here.
+
+The ``CreateFileStream`` function is basically going to instantiate
+a ``std::ofstream`` object and create a new file (or truncate an existing
+file).  This ``std::ofstream`` is packaged up in an |ns3| object for lifetime
+management and copy constructor issue resolution.
 
 We then take this |ns3| object representing the file and pass it to
 ``MakeBoundCallback()``.  This function creates a callback just like
 ``MakeCallback()``, but it "binds" a new value to the callback.  This
-value is added to the callback before it is called.  
+value is added as the first argument to the callback before it is called.
 
-Essentially, ``MakeBoundCallback(&CwndChange, stream)`` causes the trace 
-source to add the additional "stream" parameter to the front of the formal
-parameter list before invoking the callback.  This changes the required 
-signature of the ``CwndChange`` sink to match the one shown above, which
-includes the "extra" parameter ``Ptr<OutputStreamWrapper> stream``.
-
-In the second section of code in the snippet above, we instantiate a 
-``PcapHelper`` to do the same thing for our pcap trace file that we did
-with the ``AsciiTraceHelper``. The line of code,
+Essentially, ``MakeBoundCallback(&CwndChange, stream)`` causes the
+trace source to add the additional "stream" parameter to the front of
+the formal parameter list before invoking the callback.  This changes
+the required signature of the ``CwndChange`` sink to match the one
+shown above, which includes the "extra" parameter
+``Ptr<OutputStreamWrapper> stream``.
+
+In the second section of code in the snippet above, we instantiate a
+``PcapHelper`` to do the same thing for our PCAP trace file that we
+did with the ``AsciiTraceHelper``. The line of code,
 
 ::
 
-  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile ("sixth.pcap", "w", PcapHelper::DLT_PPP);
-
-creates a pcap file named "sixth.pcap" with file mode "w".   This means that
-the new file is to truncated if an existing file with that name is found.  The
-final parameter is the "data link type" of the new pcap file.  These are 
-the same as the pcap library data link types defined in ``bpf.h`` if you are
-familar with pcap.  In this case, ``DLT_PPP`` indicates that the pcap file
-is going to contain packets prefixed with point to point headers.  This is true
-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 
-the list.  The entries in the list match those in ``bpf.h`` but we duplicate
-them to avoid a pcap source dependence.
-
-A |ns3| object representing the pcap file is returned from ``CreateFile``
-and used in a bound callback exactly as it was in the ascii case.
+  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile ("sixth.pcap",
+  "w", PcapHelper::DLT_PPP);
+
+creates a PCAP file named "sixth.pcap" with file mode "w".  This means
+that the new file is truncated (contents deleted) if an existing file
+with that name is found.  The final parameter is the "data link type"
+of the new PCAP file.  These are the same as the PCAP library data
+link types defined in ``bpf.h`` if you are familar with PCAP.  In this
+case, ``DLT_PPP`` indicates that the PCAP file is going to contain
+packets prefixed with point to point headers.  This is true 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 the list.  The entries in the list
+match those in ``bpf.h`` but we duplicate them to avoid a PCAP source
+dependence.
+
+A |ns3| object representing the PCAP file is returned from
+``CreateFile`` and used in a bound callback exactly as it was in the
+ASCII case.
 
-An important detour:  It is important to notice that even though both of these 
-objects are declared in very similar ways,
+An important detour: It is important to notice that even though both
+of these objects are declared in very similar ways,
 
 ::
 
   Ptr<PcapFileWrapper> file ...
   Ptr<OutputStreamWrapper> stream ...
 
-The underlying objects are entirely different.  For example, the 
-Ptr<PcapFileWrapper> is a smart pointer to an |ns3| Object that is a 
-fairly heaviweight thing that supports ``Attributes`` and is integrated into
-the config system.  The Ptr<OutputStreamWrapper>, on the other hand, is a smart 
-pointer to a reference counted object that is a very lightweight thing.
-Remember to always look at the object you are referencing before making any
-assumptions about the "powers" that object may have.  
+The underlying objects are entirely different.  For example, the
+``Ptr<PcapFileWrapper>`` is a smart pointer to an |ns3| Object that is
+a fairly heavyweight thing that supports Attributes and is integrated
+into the Config system.  The ``Ptr<OutputStreamWrapper>``, on the
+other hand, is a smart pointer to a reference counted object that is a
+very lightweight thing.  Remember to look at the object you are
+referencing before making any assumptions about the "powers" that
+object may have.
 
-For example, take a look at ``src/network/utils/pcap-file-wrapper.h`` in the 
-distribution and notice, 
+For example, take a look at ``src/network/utils/pcap-file-wrapper.h``
+in the distribution and notice,
 
 ::
 
   class PcapFileWrapper : public Object
 
-that class ``PcapFileWrapper`` is an |ns3| Object by virtue of 
-its inheritance.  Then look at ``src/network/model/output-stream-wrapper.h`` and 
-notice,
+that class ``PcapFileWrapper`` is an |ns3| Object by virtue of its
+inheritance.  Then look at
+``src/network/model/output-stream-wrapper.h`` and notice,
 
 ::
 
-  class OutputStreamWrapper : public SimpleRefCount<OutputStreamWrapper>
+  class OutputStreamWrapper : public
+  SimpleRefCount<OutputStreamWrapper>
 
-that this object is not an |ns3| Object at all, it is "merely" a
-C++ object that happens to support intrusive reference counting.
+that this object is not an |ns3| Object at all, it is "merely" a C++
+object that happens to support intrusive reference counting.
 
-The point here is that just because you read Ptr<something> it does not necessarily
-mean that "something" is an |ns3| Object on which you can hang |ns3|
-``Attributes``, for example.
+The point here is that just because you read ``Ptr<something>`` it does
+not necessarily mean that ``something`` is an |ns3| Object on which you
+can hang |ns3| Attributes, for example.
 
-Now, back to the example.  If you now build and run this example,
+Now, back to the example.  If you build and run this example,
 
 .. sourcecode:: bash
 
   $ ./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.
+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
 
@@ -2207,38 +2286,40 @@
 
 .. sourcecode:: bash
 
-  1.20919 536     1072
-  1.21511 1072    1608
-  ...
-  9.30922 8893    8925
-  9.31754 8925    8957
+  1       0       536
+  1.0093  536     1072
+  1.01528 1072    1608
+  1.02167 1608    2144
+  ...
+  9.69256 5149	  5204
+  9.89311 5204	  5259
+
+You have a tab separated file with a timestamp, an old congestion
+window and a new congestion window suitable for directly importing
+into your plot program.  There are no extraneous prints in the file,
+no parsing or editing is required.
 
-You have a tab separated file with a timestamp, an old congestion window and a
-new congestion window suitable for directly importing into your plot program.
-There are no extraneous prints in the file, no parsing or editing is required.
-
-Since "sixth.pcap" is a pcap file, you can fiew it with ``tcpdump``.
+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
-  1.411478 IP 10.1.1.1.49153 > 10.1.1.2.8080: . 33808:34312(504) ack 1 win 65535
-  ...
-  7.393557 IP 10.1.1.1.49153 > 10.1.1.2.8080: . 781568:782072(504) ack 1 win 65535
-  8.141483 IP 10.1.1.1.49153 > 10.1.1.2.8080: . 874632:875168(536) ack 1 win 65535
-
-You have a pcap file with the packets that were dropped in the simulation.  There
-are no other packets present in the file and there is nothing else present to
-make life difficult.
-
-It's been a long journey, but we are now at a point where we can appreciate the
-|ns3| tracing system.  We have pulled important events out of the middle
-of a TCP implementation and a device driver.  We stored those events directly in
-files usable with commonly known tools.  We did this without modifying any of the
-core code involved, and we did this in only 18 lines of code:
-
-::
+  reading from file sixth.pcap, link-type PPP (PPP)
+  1.136956 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 17177:17681, ack 1, win 32768, options [TS val 1133 ecr 1127,eol], length 504
+  1.403196 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 33280:33784, ack 1, win 32768, options [TS val 1399 ecr 1394,eol], length 504
+  ...
+  7.426220 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 785704:786240, ack 1, win 32768, options [TS val 7423 ecr 7421,eol], length 536
+  9.630693 IP 10.1.1.1.49153 > 10.1.1.2.8080: Flags [.], seq 882688:883224, ack 1, win 32768, options [TS val 9620 ecr 9618,eol], length 536
+
+You have a PCAP file with the packets that were dropped in the
+simulation.  There are no other packets present in the file and there
+is nothing else present to make life difficult.
+
+It's been a long journey, but we are now at a point where we can
+appreciate the |ns3| tracing system.  We have pulled important events
+out of the middle of a TCP implementation and a device driver.  We
+stored those events directly in files usable with commonly known
+tools.  We did this without modifying any of the core code involved,
+and we did this in only 18 lines of code::
 
   static void
   CwndChange (Ptr<OutputStreamWrapper> stream, uint32_t oldCwnd, uint32_t newCwnd)
@@ -2268,13 +2349,14 @@
   Ptr<PcapFileWrapper> file = pcapHelper.CreateFile ("sixth.pcap", "w", PcapHelper::DLT_PPP);
   devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", MakeBoundCallback (&RxDrop, file));
 
-Using Trace Helpers
-*******************
+Trace Helpers
+*************
 
 The |ns3| trace helpers provide a rich environment for configuring and
-selecting different trace events and writing them to files.  In previous
-sections, primarily "Building Topologies," we have seen several varieties
-of the trace helper methods designed for use inside other (device) helpers.
+selecting different trace events and writing them to files.  In
+previous sections, primarily :ref:`BuildingTopologies`, we have seen
+several varieties of the trace helper methods designed for use inside
+other (device) helpers.
 
 Perhaps you will recall seeing some of these variations: 
 
@@ -2285,82 +2367,91 @@
   csma.EnablePcap ("third", csmaDevices.Get (0), true);
   pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("myfirst.tr"));
 
-What may not be obvious, though, is that there is a consistent model for all of 
-the trace-related methods found in the system.  We will now take a little time
-and take a look at the "big picture".
-
-There are currently two primary use cases of the tracing helpers in |ns3|:
-Device helpers and protocol helpers.  Device helpers look at the problem
-of specifying which traces should be enabled through a node, device pair.  For 
-example, you may want to specify that pcap tracing should be enabled on a 
-particular device on a specific node.  This follows from the |ns3| device
-conceptual model, and also the conceptual models of the various device helpers.
-Following naturally from this, the files created follow a 
-<prefix>-<node>-<device> naming convention.  
-
-Protocol helpers look at the problem of specifying which traces should be
-enabled through a protocol and interface pair.  This follows from the |ns3|
-protocol stack conceptual model, and also the conceptual models of internet
-stack helpers.  Naturally, the trace files should follow a 
-<prefix>-<protocol>-<interface> naming convention.
-
-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.
+What may not be obvious, though, is that there is a consistent model
+for all of the trace-related methods found in the system.  We will now
+take a little time and take a look at the "big picture".
+
+There are currently two primary use cases of the tracing helpers in
+|ns3|:  device helpers and protocol helpers.  Device helpers look at
+the problem of specifying which traces should be enabled through a
+(node, device) pair.  For example, you may want to specify that PCAP
+tracing should be enabled on a particular device on a specific node.
+This follows from the |ns3| device conceptual model, and also the
+conceptual models of the various device helpers.  Following naturally
+from this, the files created follow a ``<prefix>-<node>-<device>`` naming
+convention.
+
+Protocol helpers look at the problem of specifying which traces should
+be enabled through a protocol and interface pair.  This follows from
+the |ns3| protocol stack conceptual model, and also the conceptual
+models of internet stack helpers.  Naturally, the trace files should
+follow a ``<prefix>-<protocol>-<interface>`` naming convention.
+
+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.
 
   +-----------------+---------+---------+
-  |                 |  pcap   |  ascii  |
+  |                 |  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 inherited by a subclass.  Inheriting from a mixin is not considered a form 
-of specialization but is really a way to collect functionality. 
-
-Let's take a quick look at all four of these cases and their respective 
-``mixins``.
-
-Pcap Tracing Device Helpers
-+++++++++++++++++++++++++++
-
-The goal of these helpers is to make it easy to add a consistent pcap trace
-facility to an |ns3| device.  We want all of the various flavors of
-pcap tracing to work the same across all devices, so the methods of these 
-helpers are inherited by device helpers.  Take a look at 
-``src/network/helper/trace-helper.h`` if you want to follow the discussion while 
-looking at real code.
-
-The class ``PcapHelperForDevice`` is a ``mixin`` provides the high level 
-functionality for using pcap tracing in an |ns3| device.  Every device 
-must implement a single virtual method inherited from this class.
+We use an approach called a ``mixin`` to add tracing functionality to
+our helper classes.  A ``mixin`` is a class that provides
+functionality when it is inherited by a subclass.  Inheriting from a
+mixin is not considered a form of specialization but is really a way
+to collect functionality.
+
+Let's take a quick look at all four of these cases and their
+respective ``mixins``.
+
+Device Helpers
+++++++++++++++
+
+PCAP
+~~~~
+
+The goal of these helpers is to make it easy to add a consistent PCAP
+trace facility to an |ns3| device.  We want all of the various flavors
+of PCAP tracing to work the same across all devices, so the methods of
+these helpers are inherited by device helpers.  Take a look at
+``src/network/helper/trace-helper.h`` if you want to follow the
+discussion while looking at real code.
+
+The class ``PcapHelperForDevice`` is a ``mixin`` provides the high
+level functionality for using PCAP tracing in an |ns3| device.  Every
+device must implement a single virtual method inherited from this
+class.
 
 ::
 
   virtual void EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename) = 0;
 
-The signature of this method reflects the device-centric view of the situation
-at this level.  All of the public methods inherited from class 
-``PcapUserHelperForDevice`` reduce to calling this single device-dependent
-implementation method.  For example, the lowest level pcap method,
+The signature of this method reflects the device-centric view of the
+situation at this level.  All of the public methods inherited from
+class ``PcapUserHelperForDevice`` reduce to calling this single
+device-dependent implementation method.  For example, the lowest level
+PCAP method,
 
 ::
 
   void EnablePcap (std::string prefix, Ptr<NetDevice> nd, bool promiscuous = false, bool explicitFilename = false);
 
-will call the device implementation of ``EnablePcapInternal`` directly.  All
-other public pcap tracing methods build on this implementation to provide 
-additional user-level functionality.  What this means to the user is that all 
-device helpers in the system will have all of the pcap trace methods available;
-and these methods will all work in the same way across devices if the device 
-implements ``EnablePcapInternal`` correctly.
+will call the device implementation of ``EnablePcapInternal``
+directly.  All other public PCAP tracing methods build on this
+implementation to provide additional user-level functionality.  What
+this means to the user is that all device helpers in the system will
+have all of the PCAP trace methods available; and these methods will
+all work in the same way across devices if the device implements
+``EnablePcapInternal`` correctly.
 
-Pcap Tracing Device Helper Methods
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Methods
+#######
 
 ::
 
@@ -2371,11 +2462,12 @@
   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 
-``promiscuous`` that defaults to false.  This parameter indicates that the
-trace should not be gathered in promiscuous mode.  If you do want your traces
-to include all traffic seen by the device (and if the device supports a 
-promiscuous mode) simply add a true parameter to any of the calls above.  For example,
+In each of the methods shown above, there is a default parameter
+called ``promiscuous`` that defaults to ``false``.  This parameter
+indicates that the trace should not be gathered in promiscuous mode.
+If you do want your traces to include all traffic seen by the device
+(and if the device supports a promiscuous mode) simply add a true
+parameter to any of the calls above.  For example,
 
 ::
 
@@ -2383,98 +2475,103 @@
   ...
   helper.EnablePcap ("prefix", nd, true);
 
-will enable promiscuous mode captures on the ``NetDevice`` specified by ``nd``.
+will enable promiscuous mode captures on the ``NetDevice`` specified
+by ``nd``.
 
-The first two methods also include a default parameter called ``explicitFilename``
-that will be discussed below.
+The first two methods also include a default parameter called
+``explicitFilename`` that will be discussed below.
 
-You are encouraged to peruse the Doxygen for class ``PcapHelperForDevice``
-to find the details of these methods; but to summarize ...
+You are encouraged to peruse the API Documentation for class
+``PcapHelperForDevice`` to find the details of these methods; but to
+summarize ...
 
-You can enable pcap tracing on a particular node/net-device pair by providing a
-``Ptr<NetDevice>`` to an ``EnablePcap`` method.  The ``Ptr<Node>`` is 
-implicit since the net device must belong to exactly one ``Node``.
-For example, 
+* You can enable PCAP tracing on a particular node/net-device pair by
+  providing a ``Ptr<NetDevice>`` to an ``EnablePcap`` method.  The
+  ``Ptr<Node>`` is implicit since the net device must belong to exactly
+  one Node.  For example,
 
-::
+  ::
 
-  Ptr<NetDevice> nd;
-  ...
-  helper.EnablePcap ("prefix", nd);
+    Ptr<NetDevice> nd;
+    ...
+    helper.EnablePcap ("prefix", nd);
 
-You can enable pcap tracing on a particular node/net-device pair by providing a
-``std::string`` representing an object name service string to an 
-``EnablePcap`` method.  The ``Ptr<NetDevice>`` is looked up from the name
-string.  Again, the ``<Node>`` is implicit since the named net device must 
-belong to exactly one ``Node``.  For example, 
+* You can enable PCAP tracing on a particular node/net-device pair by
+  providing a ``std::string`` representing an object name service string
+  to an ``EnablePcap`` method.  The ``Ptr<NetDevice>`` is looked up from
+  the name string.  Again, the ``<Node>`` is implicit since the named
+  net device must belong to exactly one Node.  For example,
 
-::
+  ::
 
-  Names::Add ("server" ...);
-  Names::Add ("server/eth0" ...);
-  ...
-  helper.EnablePcap ("prefix", "server/ath0");
+    Names::Add ("server" ...);
+    Names::Add ("server/eth0" ...);
+    ...
+    helper.EnablePcap ("prefix", "server/ath0");
 
-You can enable pcap tracing on a collection of node/net-device pairs by 
-providing a ``NetDeviceContainer``.  For each ``NetDevice`` in the container
-the type is checked.  For each device of the proper type (the same type as is 
-managed by the device helper), tracing is enabled.    Again, the ``<Node>`` is 
-implicit since the found net device must belong to exactly one ``Node``.
-For example, 
+* You can enable PCAP tracing on a collection of node/net-device pairs
+  by providing a ``NetDeviceContainer``.  For each ``NetDevice`` in the
+  container the type is checked.  For each device of the proper type
+  (the same type as is managed by the device helper), tracing is
+  enabled.  Again, the ``<Node>`` is implicit since the found net device
+  must belong to exactly one Node.  For example,
 
-::
+  ::
 
-  NetDeviceContainer d = ...;
-  ...
-  helper.EnablePcap ("prefix", d);
+    NetDeviceContainer d = ...;
+    ...
+    helper.EnablePcap ("prefix", d);
 
-You can enable pcap tracing on a collection of node/net-device pairs by 
-providing a ``NodeContainer``.  For each ``Node`` in the ``NodeContainer``
-its attached ``NetDevices`` are iterated.  For each ``NetDevice`` attached
-to each node in the container, the type of that device is checked.  For each 
-device of the proper type (the same type as is managed by the device helper), 
-tracing is enabled.
+* You can enable PCAP tracing on a collection of node/net-device pairs
+  by providing a ``NodeContainer``.  For each Node in the
+  ``NodeContainer`` its attached ``NetDevices`` are iterated.  For each
+  ``NetDevice`` attached to each Node in the container, the type of that
+  device is checked.  For each device of the proper type (the same type
+  as is managed by the device helper), tracing is enabled.
 
-::
+  ::
 
-  NodeContainer n;
-  ...
-  helper.EnablePcap ("prefix", n);
+    NodeContainer n;
+    ...
+    helper.EnablePcap ("prefix", n);
 
-You can enable pcap tracing on the basis of node ID and device ID as well as
-with explicit ``Ptr``.  Each ``Node`` in the system has an integer node ID
-and each device connected to a node has an integer device ID.
+* You can enable PCAP tracing on the basis of Node ID and device ID as
+  well as with explicit ``Ptr``.  Each Node in the system has an
+  integer Node ID and each device connected to a Node has an integer
+  device ID.
 
-::
+  ::
 
-  helper.EnablePcap ("prefix", 21, 1);
+    helper.EnablePcap ("prefix", 21, 1);
 
-Finally, you can enable pcap tracing for all devices in the system, with the
-same type as that managed by the device helper.
+* Finally, you can enable PCAP tracing for all devices in the system,
+  with the same type as that managed by the device helper.
 
-::
+  ::
 
-  helper.EnablePcapAll ("prefix");
+    helper.EnablePcapAll ("prefix");
 
-Pcap Tracing Device Helper Filename Selection
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Filenames
+#########
 
-Implicit in the method descriptions above is the construction of a complete 
-filename by the implementation method.  By convention, pcap traces in the 
-|ns3| system are of the form "<prefix>-<node id>-<device id>.pcap"
+Implicit in the method descriptions above is the construction of a
+complete filename by the implementation method.  By convention, PCAP
+traces in the |ns3| system are of the form ``<prefix>-<node id>-<device
+id>.pcap``
 
-As previously mentioned, every node in the system will have a system-assigned
-node id; and every device will have an interface index (also called a device id)
-relative to its node.  By default, then, a pcap trace file created as a result
-of enabling tracing on the first device of node 21 using the prefix "prefix"
-would be "prefix-21-1.pcap".
+As previously mentioned, every Node in the system will have a
+system-assigned Node id; and every device will have an interface index
+(also called a device id) relative to its node.  By default, then, a
+PCAP trace file created as a result of enabling tracing on the first
+device of Node 21 using the prefix "prefix" would be
+``prefix-21-1.pcap``.
 
-You can always use the |ns3| object name service to make this more clear.
-For example, if you use the object name service to assign the name "server"
-to node 21, the resulting pcap trace file name will automatically become,
-"prefix-server-1.pcap" and if you also assign the name "eth0" to the 
-device, your pcap file name will automatically pick this up and be called
-"prefix-server-eth0.pcap".
+You can always use the |ns3| object name service to make this more
+clear.  For example, if you use the object name service to assign the
+name "server" to Node 21, the resulting PCAP trace file name will
+automatically become, ``prefix-server-1.pcap`` and if you also assign
+the name "eth0" to the device, your PCAP file name will automatically
+pick this up and be called ``prefix-server-eth0.pcap``.
 
 Finally, two of the methods shown above,
 
@@ -2483,34 +2580,36 @@
   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);
 
-have a default parameter called ``explicitFilename``.  When set to true,
-this parameter disables the automatic filename completion mechanism and allows
-you to create an explicit filename.  This option is only available in the 
-methods which enable pcap tracing on a single device.  
-
-For example, in order to arrange for a device helper to create a single 
-promiscuous pcap capture file of a specific name ("my-pcap-file.pcap") on a
-given device, one could:
-
-::
+have a default parameter called ``explicitFilename``.  When set to
+true, this parameter disables the automatic filename completion
+mechanism and allows you to create an explicit filename.  This option
+is only available in the methods which enable PCAP tracing on a single
+device.
+
+For example, in order to arrange for a device helper to create a
+single promiscuous PCAP capture file of a specific name
+``my-pcap-file.pcap`` on a given device, one could::
 
   Ptr<NetDevice> nd;
   ...
   helper.EnablePcap ("my-pcap-file.pcap", nd, true, true);
 
-The first ``true`` parameter enables promiscuous mode traces and the second
-tells the helper to interpret the ``prefix`` parameter as a complete filename.
-
-Ascii Tracing Device Helpers
-++++++++++++++++++++++++++++
-
-The behavior of the ascii trace helper ``mixin`` is substantially similar to 
-the pcap version.  Take a look at ``src/network/helper/trace-helper.h`` if you want to 
-follow the discussion while looking at real code.
-
-The class ``AsciiTraceHelperForDevice`` adds the high level functionality for 
-using ascii tracing to a device helper class.  As in the pcap case, every device
-must implement a single virtual method inherited from the ascii trace ``mixin``.
+The first ``true`` parameter enables promiscuous mode traces and the
+second tells the helper to interpret the ``prefix`` parameter as a
+complete filename.
+
+ASCII
+~~~~~
+
+The behavior of the ASCII trace helper ``mixin`` is substantially
+similar to the PCAP version.  Take a look at
+``src/network/helper/trace-helper.h`` if you want to follow the
+discussion while looking at real code.
+
+The class ``AsciiTraceHelperForDevice`` adds the high level
+functionality for using ASCII tracing to a device helper class.  As in
+the PCAP case, every device must implement a single virtual method
+inherited from the ASCII trace ``mixin``.
 
 ::
 
@@ -2520,12 +2619,13 @@
                                     bool explicitFilename) = 0;
 
 
-The signature of this method reflects the device-centric view of the situation
-at this level; and also the fact that the helper may be writing to a shared
-output stream.  All of the public ascii-trace-related methods inherited from 
-class ``AsciiTraceHelperForDevice`` reduce to calling this single device-
-dependent implementation method.  For example, the lowest level ascii trace
-methods,
+The signature of this method reflects the device-centric view of the
+situation at this level; and also the fact that the helper may be
+writing to a shared output stream.  All of the public
+ASCII-trace-related methods inherited from class
+``AsciiTraceHelperForDevice`` reduce to calling this single device-
+dependent implementation method.  For example, the lowest level ascii
+trace methods,
 
 ::
 
@@ -2533,16 +2633,17 @@
   void EnableAscii (Ptr<OutputStreamWrapper> stream, Ptr<NetDevice> nd);
 
 
-will call the device implementation of ``EnableAsciiInternal`` directly,
-providing either a valid prefix or stream.  All other public ascii tracing 
-methods will build on these low-level functions to provide additional user-level
-functionality.  What this means to the user is that all device helpers in the 
-system will have all of the ascii trace methods available; and these methods
-will all work in the same way across devices if the devices implement 
+will call the device implementation of ``EnableAsciiInternal``
+directly, providing either a valid prefix or stream.  All other public
+ASCII tracing methods will build on these low-level functions to
+provide additional user-level functionality.  What this means to the
+user is that all device helpers in the system will have all of the
+ASCII trace methods available; and these methods will all work in the
+same way across devices if the devices implement
 ``EnablAsciiInternal`` correctly.
 
-Ascii Tracing Device Helper Methods
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Methods
+#######
 
 ::
 
@@ -2564,21 +2665,23 @@
   void EnableAscii (std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename);
   void EnableAscii (Ptr<OutputStreamWrapper> stream, uint32_t nodeid, uint32_t deviceid);
 
-You are encouraged to peruse the Doxygen for class ``AsciiTraceHelperForDevice``
-to find the details of these methods; but to summarize ...
-
-There are twice as many methods available for ascii tracing as there were for
-pcap tracing.  This is because, in addition to the pcap-style model where traces
-from each unique node/device pair are written to a unique file, we support a model
-in which trace information for many node/device pairs is written to a common file.
-This means that the <prefix>-<node>-<device> file name generation mechanism is 
-replaced by a mechanism to refer to a common file; and the number of API methods
-is doubled to allow all combinations.
-
-Just as in pcap tracing, you can enable ascii tracing on a particular 
-node/net-device pair by providing a ``Ptr<NetDevice>`` to an ``EnableAscii``
-method.  The ``Ptr<Node>`` is implicit since the net device must belong to 
-exactly one ``Node``.  For example, 
+You are encouraged to peruse the API Documentation for class
+``AsciiTraceHelperForDevice`` to find the details of these methods;
+but to summarize ...
+
+* There are twice as many methods available for ASCII tracing as
+  there were for PCAP tracing.  This is because, in addition to the
+  PCAP-style model where traces from each unique node/device pair are
+  written to a unique file, we support a model in which trace
+  information for many node/device pairs is written to a common file.
+  This means that the <prefix>-<node>-<device> file name generation
+  mechanism is replaced by a mechanism to refer to a common file; and
+  the number of API methods is doubled to allow all combinations.
+
+* Just as in PCAP tracing, you can enable ASCII tracing on a
+  particular (node, net-device) pair by providing a ``Ptr<NetDevice>``
+  to an ``EnableAscii`` method.  The ``Ptr<Node>`` is implicit since
+  the net device must belong to exactly one Node.  For example,
 
 ::
 
@@ -2586,183 +2689,197 @@
   ...
   helper.EnableAscii ("prefix", nd);
 
-The first four methods also include a default parameter called ``explicitFilename``
-that operate similar to equivalent parameters in the pcap case.
-
-In this case, no trace contexts are written to the ascii trace file since they
-would be redundant.  The system will pick the file name to be created using
-the same rules as described in the pcap section, except that the file will
-have the suffix ".tr" instead of ".pcap".
-
-If you want to enable ascii tracing on more than one net device and have all 
-traces sent to a single file, you can do that as well by using an object to
-refer to a single file.  We have already seen this in the "cwnd" example
-above:
-
-::
-
-  Ptr<NetDevice> nd1;
-  Ptr<NetDevice> nd2;
-  ...
-  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
-  ...
-  helper.EnableAscii (stream, nd1);
-  helper.EnableAscii (stream, nd2);
-
-
-In this case, trace contexts are written to the ascii trace file since they
-are required to disambiguate traces from the two devices.  Note that since the
-user is completely specifying the file name, the string should include the ",tr"
-for consistency.
-
-You can enable ascii tracing on a particular node/net-device pair by providing a
-``std::string`` representing an object name service string to an 
-``EnablePcap`` method.  The ``Ptr<NetDevice>`` is looked up from the name
-string.  Again, the ``<Node>`` is implicit since the named net device must 
-belong to exactly one ``Node``.  For example, 
-
-::
-
-  Names::Add ("client" ...);
-  Names::Add ("client/eth0" ...);
-  Names::Add ("server" ...);
-  Names::Add ("server/eth0" ...);
-  ...
-  helper.EnableAscii ("prefix", "client/eth0");
-  helper.EnableAscii ("prefix", "server/eth0");
-
-This would result in two files named "prefix-client-eth0.tr" and 
-"prefix-server-eth0.tr" with traces for each device in the respective trace
-file.  Since all of the EnableAscii functions are overloaded to take a stream wrapper,
-you can use that form as well:
+* The first four methods also include a default parameter called
+  ``explicitFilename`` that operate similar to equivalent parameters
+  in the PCAP case.
+
+  In this case, no trace contexts are written to the ASCII trace file
+  since they would be redundant.  The system will pick the file name
+  to be created using the same rules as described in the PCAP section,
+  except that the file will have the suffix ``.tr`` instead of
+  ``.pcap``.
+
+* If you want to enable ASCII tracing on more than one net device
+  and have all traces sent to a single file, you can do that as well
+  by using an object to refer to a single file.  We have already seen
+  this in the "cwnd" example above::
 
-::
-
-  Names::Add ("client" ...);
-  Names::Add ("client/eth0" ...);
-  Names::Add ("server" ...);
-  Names::Add ("server/eth0" ...);
-  ...
-  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
-  ...
-  helper.EnableAscii (stream, "client/eth0");
-  helper.EnableAscii (stream, "server/eth0");
+    Ptr<NetDevice> nd1;
+    Ptr<NetDevice> nd2;
+    ...
+    Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
+    ...
+    helper.EnableAscii (stream, nd1);
+    helper.EnableAscii (stream, nd2);
 
-This would result in a single trace file called "trace-file-name.tr" that 
-contains all of the trace events for both devices.  The events would be 
-disambiguated by trace context strings.
 
-You can enable ascii tracing on a collection of node/net-device pairs by 
-providing a ``NetDeviceContainer``.  For each ``NetDevice`` in the container
-the type is checked.  For each device of the proper type (the same type as is 
-managed by the device helper), tracing is enabled.    Again, the ``<Node>`` is 
-implicit since the found net device must belong to exactly one ``Node``.
-For example, 
+  In this case, trace contexts *are* written to the ASCII trace file
+  since they are required to disambiguate traces from the two devices.
+  Note that since the user is completely specifying the file name, the
+  string should include the ``,tr`` suffix for consistency.
+
+* You can enable ASCII tracing on a particular (node, net-device)
+  pair by providing a ``std::string`` representing an object name
+  service string to an ``EnablePcap`` method.  The ``Ptr<NetDevice>``
+  is looked up from the name string.  Again, the ``<Node>`` is
+  implicit since the named net device must belong to exactly one Node.
+  For example,
+
+  ::
+
+    Names::Add ("client" ...);
+    Names::Add ("client/eth0" ...);
+    Names::Add ("server" ...);
+    Names::Add ("server/eth0" ...);
+    ...
+    helper.EnableAscii ("prefix", "client/eth0");
+    helper.EnableAscii ("prefix", "server/eth0");
 
-::
+    This would result in two files named ``prefix-client-eth0.tr`` and
+    ``prefix-server-eth0.tr`` with traces for each device in the
+    respective trace file.  Since all of the ``EnableAscii`` functions
+    are overloaded to take a stream wrapper, you can use that form as
+    well::
+
+    Names::Add ("client" ...);
+    Names::Add ("client/eth0" ...);
+    Names::Add ("server" ...);
+    Names::Add ("server/eth0" ...);
+    ...
+    Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
+    ...
+    helper.EnableAscii (stream, "client/eth0");
+    helper.EnableAscii (stream, "server/eth0");
 
-  NetDeviceContainer d = ...;
-  ...
-  helper.EnableAscii ("prefix", d);
+  This would result in a single trace file called
+  ``trace-file-name.tr`` that contains all of the trace events for
+  both devices.  The events would be disambiguated by trace context
+  strings.
+
+* You can enable ASCII tracing on a collection of (node, net-device)
+  pairs by providing a ``NetDeviceContainer``.  For each ``NetDevice``
+  in the container the type is checked.  For each device of the proper
+  type (the same type as is managed by the device helper), tracing is
+  enabled.  Again, the ``<Node>`` is implicit since the found net
+  device must belong to exactly one Node.  For example,
 
-This would result in a number of ascii trace files being created, each of which
-follows the <prefix>-<node id>-<device id>.tr convention.  Combining all of the
-traces into a single file is accomplished similarly to the examples above:
+  ::
 
-::
+    NetDeviceContainer d = ...;
+    ...
+    helper.EnableAscii ("prefix", d);
 
-  NetDeviceContainer d = ...;
-  ...
-  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
-  ...
-  helper.EnableAscii (stream, d);
+    This would result in a number of ASCII trace files being created,
+    each of which follows the ``<prefix>-<node id>-<device id>.tr``
+    convention.
 
-You can enable ascii tracing on a collection of node/net-device pairs by 
-providing a ``NodeContainer``.  For each ``Node`` in the ``NodeContainer``
-its attached ``NetDevices`` are iterated.  For each ``NetDevice`` attached
-to each node in the container, the type of that device is checked.  For each 
-device of the proper type (the same type as is managed by the device helper), 
-tracing is enabled.
+  Combining all of the traces into a single file is accomplished
+  similarly to the examples above::
 
-::
+    NetDeviceContainer d = ...;
+    ...
+    Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
+    ...
+    helper.EnableAscii (stream, d);
 
-  NodeContainer n;
-  ...
-  helper.EnableAscii ("prefix", n);
+* You can enable ASCII tracing on a collection of (node, net-device)
+  pairs by providing a ``NodeContainer``.  For each Node in the
+  ``NodeContainer`` its attached ``NetDevices`` are iterated.  For
+  each ``NetDevice`` attached to each Node in the container, the type
+  of that device is checked.  For each device of the proper type (the
+  same type as is managed by the device helper), tracing is enabled.
 
-This would result in a number of ascii trace files being created, each of which
-follows the <prefix>-<node id>-<device id>.tr convention.  Combining all of the
-traces into a single file is accomplished similarly to the examples above:
+  ::
 
-You can enable pcap tracing on the basis of node ID and device ID as well as
-with explicit ``Ptr``.  Each ``Node`` in the system has an integer node ID
-and each device connected to a node has an integer device ID.
+    NodeContainer n;
+    ...
+    helper.EnableAscii ("prefix", n);
 
-::
+  This would result in a number of ASCII trace files being created,
+  each of which follows the ``<prefix>-<node id>-<device id>.tr``
+  convention.  Combining all of the traces into a single file is
+  accomplished similarly to the examples above.
+
+* You can enable PCAP tracing on the basis of Node ID and device ID
+  as well as with explicit ``Ptr``.  Each Node in the system has an
+  integer Node ID and each device connected to a Node has an integer
+  device ID.
+
+  ::
+
+    helper.EnableAscii ("prefix", 21, 1);
+
+  Of course, the traces can be combined into a single file as shown
+  above.
+
+* Finally, you can enable PCAP tracing for all devices in the
+  system, with the same type as that managed by the device helper.
+
+  ::
+
+    helper.EnableAsciiAll ("prefix");
+
+  This would result in a number of ASCII trace files being created,
+  one for every device in the system of the type managed by the
+  helper.  All of these files will follow the ``<prefix>-<node
+  id>-<device id>.tr`` convention.  Combining all of the traces into a
+  single file is accomplished similarly to the examples above.
+
+Filenames
+#########
+
+Implicit in the prefix-style method descriptions above is the
+construction of the complete filenames by the implementation method.
+By convention, ASCII traces in the |ns3| system are of the form
+``<prefix>-<node id>-<device id>.tr``
+
+As previously mentioned, every Node in the system will have a
+system-assigned Node id; and every device will have an interface index
+(also called a device id) relative to its node.  By default, then, an
+ASCII trace file created as a result of enabling tracing on the first
+device of Node 21, using the prefix "prefix", would be
+``prefix-21-1.tr``.
+
+You can always use the |ns3| object name service to make this more
+clear.  For example, if you use the object name service to assign the
+name "server" to Node 21, the resulting ASCII trace file name will
+automatically become, ``prefix-server-1.tr`` and if you also assign the
+name "eth0" to the device, your ASCII trace file name will
+automatically pick this up and be called ``prefix-server-eth0.tr``.
+
+Several of the methods have a default parameter called
+``explicitFilename``.  When set to true, this parameter disables the
+automatic filename completion mechanism and allows you to create an
+explicit filename.  This option is only available in the methods which
+take a prefix and enable tracing on a single device.
 
-  helper.EnableAscii ("prefix", 21, 1);
+Protocol Helpers
+++++++++++++++++
 
-Of course, the traces can be combined into a single file as shown above.
+PCAP
+~~~~
 
-Finally, you can enable pcap tracing for all devices in the system, with the
-same type as that managed by the device helper.
-
-::
-
-  helper.EnableAsciiAll ("prefix");
-
-This would result in a number of ascii trace files being created, one for
-every device in the system of the type managed by the helper.  All of these
-files will follow the <prefix>-<node id>-<device id>.tr convention.  Combining
-all of the traces into a single file is accomplished similarly to the examples
-above.
-
-Ascii Tracing Device Helper Filename Selection
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Implicit in the prefix-style method descriptions above is the construction of the
-complete filenames by the implementation method.  By convention, ascii traces
-in the |ns3| system are of the form "<prefix>-<node id>-<device id>.tr"
-
-As previously mentioned, every node in the system will have a system-assigned
-node id; and every device will have an interface index (also called a device id)
-relative to its node.  By default, then, an ascii trace file created as a result
-of enabling tracing on the first device of node 21, using the prefix "prefix",
-would be "prefix-21-1.tr".
-
-You can always use the |ns3| object name service to make this more clear.
-For example, if you use the object name service to assign the name "server"
-to node 21, the resulting ascii trace file name will automatically become,
-"prefix-server-1.tr" and if you also assign the name "eth0" to the 
-device, your ascii trace file name will automatically pick this up and be called
-"prefix-server-eth0.tr".
-
-Several of the methods have a default parameter called ``explicitFilename``.
-When set to true, this parameter disables the automatic filename completion 
-mechanism and allows you to create an explicit filename.  This option is only
-available in the methods which take a prefix and enable tracing on a single device.  
-
-Pcap Tracing Protocol Helpers
-+++++++++++++++++++++++++++++
-
-The goal of these ``mixins`` is to make it easy to add a consistent pcap trace
-facility to protocols.  We want all of the various flavors of pcap tracing to 
-work the same across all protocols, so the methods of these helpers are 
-inherited by stack helpers.  Take a look at ``src/network/helper/trace-helper.h``
-if you want to follow the discussion while looking at real code.
-
-In this section we will be illustrating the methods as applied to the protocol
-``Ipv4``.  To specify traces in similar protocols, just substitute the
-appropriate type.  For example, use a ``Ptr<Ipv6>`` instead of a
-``Ptr<Ipv4>`` and call ``EnablePcapIpv6`` instead of ``EnablePcapIpv4``.
-
-The class ``PcapHelperForIpv4`` provides the high level functionality for
-using pcap tracing in the ``Ipv4`` protocol.  Each protocol helper enabling these
-methods must implement a single virtual method inherited from this class.  There
-will be a separate implementation for ``Ipv6``, for example, but the only
-difference will be in the method names and signatures.  Different method names
-are required to disambiguate class ``Ipv4`` from ``Ipv6`` which are both 
-derived from class ``Object``, and methods that share the same signature.
+The goal of these ``mixins`` is to make it easy to add a consistent
+PCAP trace facility to protocols.  We want all of the various flavors
+of PCAP tracing to work the same across all protocols, so the methods
+of these helpers are inherited by stack helpers.  Take a look at
+``src/network/helper/trace-helper.h`` if you want to follow the
+discussion while looking at real code.
+
+In this section we will be illustrating the methods as applied to the
+protocol ``Ipv4``.  To specify traces in similar protocols, just
+substitute the appropriate type.  For example, use a ``Ptr<Ipv6>``
+instead of a ``Ptr<Ipv4>`` and call ``EnablePcapIpv6`` instead of
+``EnablePcapIpv4``.
+
+The class ``PcapHelperForIpv4`` provides the high level functionality
+for using PCAP tracing in the ``Ipv4`` protocol.  Each protocol helper
+enabling these methods must implement a single virtual method
+inherited from this class.  There will be a separate implementation
+for ``Ipv6``, for example, but the only difference will be in the
+method names and signatures.  Different method names are required to
+disambiguate class ``Ipv4`` from ``Ipv6`` which are both derived from
+class ``Object``, and methods that share the same signature.
 
 ::
 
@@ -2771,34 +2888,34 @@
                                        uint32_t interface,
                                        bool explicitFilename) = 0;
 
-The signature of this method reflects the protocol and interface-centric view 
-of the situation at this level.  All of the public methods inherited from class 
-``PcapHelperForIpv4`` reduce to calling this single device-dependent
-implementation method.  For example, the lowest level pcap method,
+The signature of this method reflects the protocol and
+interface-centric view of the situation at this level.  All of the
+public methods inherited from class ``PcapHelperForIpv4`` reduce to
+calling this single device-dependent implementation method.  For
+example, the lowest level PCAP method,
 
 ::
 
   void EnablePcapIpv4 (std::string prefix, Ptr<Ipv4> ipv4, uint32_t interface, bool explicitFilename = false);
 
 
-will call the device implementation of ``EnablePcapIpv4Internal`` directly.
-All other public pcap tracing methods build on this implementation to provide 
-additional user-level functionality.  What this means to the user is that all 
-protocol helpers in the system will have all of the pcap trace methods 
-available; and these methods will all work in the same way across 
-protocols if the helper implements ``EnablePcapIpv4Internal`` correctly.
-
-Pcap Tracing Protocol Helper Methods
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-These methods are designed to be in one-to-one correspondence with the ``Node``-
-and ``NetDevice``- centric versions of the device versions.  Instead of
-``Node`` and ``NetDevice`` pair constraints, we use protocol and interface
-constraints.
-
-Note that just like in the device version, there are six methods:
+will call the device implementation of ``EnablePcapIpv4Internal``
+directly.  All other public PCAP tracing methods build on this
+implementation to provide additional user-level functionality.  What
+this means to the user is that all protocol helpers in the system will
+have all of the PCAP trace methods available; and these methods will
+all work in the same way across protocols if the helper implements
+``EnablePcapIpv4Internal`` correctly.
+
+Methods
+#######
+
+These methods are designed to be in one-to-one correspondence with the
+Node- and ``NetDevice``- centric versions of the device versions.
+Instead of Node and ``NetDevice`` pair constraints, we use
+protocol and interface constraints.
 
-::
+Note that just like in the device version, there are six methods::
 
   void EnablePcapIpv4 (std::string prefix, Ptr<Ipv4> ipv4, uint32_t interface, bool explicitFilename = false);
   void EnablePcapIpv4 (std::string prefix, std::string ipv4Name, uint32_t interface, bool explicitFilename = false);
@@ -2807,124 +2924,134 @@
   void EnablePcapIpv4 (std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename);
   void EnablePcapIpv4All (std::string prefix);
 
-You are encouraged to peruse the Doxygen for class ``PcapHelperForIpv4``
-to find the details of these methods; but to summarize ...
-
-You can enable pcap tracing on a particular protocol/interface pair by providing a
-``Ptr<Ipv4>`` and ``interface`` to an ``EnablePcap`` method.  For example, 
-
-::
-
-  Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
-  ...
-  helper.EnablePcapIpv4 ("prefix", ipv4, 0);
-
-You can enable pcap tracing on a particular node/net-device pair by providing a
-``std::string`` representing an object name service string to an 
-``EnablePcap`` method.  The ``Ptr<Ipv4>`` is looked up from the name
-string.  For example, 
-
-::
-
-  Names::Add ("serverIPv4" ...);
-  ...
-  helper.EnablePcapIpv4 ("prefix", "serverIpv4", 1);
-
-You can enable pcap tracing on a collection of protocol/interface pairs by 
-providing an ``Ipv4InterfaceContainer``.  For each ``Ipv4`` / interface
-pair in the container the protocol type is checked.  For each protocol of the 
-proper type (the same type as is managed by the device helper), tracing is 
-enabled for the corresponding interface.  For example, 
-
-::
-
-  NodeContainer nodes;
-  ...
-  NetDeviceContainer devices = deviceHelper.Install (nodes);
-  ... 
-  Ipv4AddressHelper ipv4;
-  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
-  ...
-  helper.EnablePcapIpv4 ("prefix", interfaces);
-
-You can enable pcap tracing on a collection of protocol/interface pairs by 
-providing a ``NodeContainer``.  For each ``Node`` in the ``NodeContainer``
-the appropriate protocol is found.  For each protocol, its interfaces are 
-enumerated and tracing is enabled on the resulting pairs.  For example,
-
-::
-
-  NodeContainer n;
-  ...
-  helper.EnablePcapIpv4 ("prefix", n);
+You are encouraged to peruse the API Documentation for class
+``PcapHelperForIpv4`` to find the details of these methods; but to
+summarize ...
 
-You can enable pcap tracing on the basis of node ID and interface as well.  In
-this case, the node-id is translated to a ``Ptr<Node>`` and the appropriate
-protocol is looked up in the node.  The resulting protocol and interface are
-used to specify the resulting trace source.
+* You can enable PCAP tracing on a particular protocol/interface pair by
+  providing a ``Ptr<Ipv4>`` and ``interface`` to an ``EnablePcap``
+  method.  For example,
 
-::
+  ::
 
-  helper.EnablePcapIpv4 ("prefix", 21, 1);
+    Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
+    ...
+    helper.EnablePcapIpv4 ("prefix", ipv4, 0);
 
-Finally, you can enable pcap tracing for all interfaces in the system, with
-associated protocol being the same type as that managed by the device helper.
+* You can enable PCAP tracing on a particular node/net-device pair by
+  providing a ``std::string`` representing an object name service string
+  to an ``EnablePcap`` method.  The ``Ptr<Ipv4>`` is looked up from the
+  name string.  For example,
 
-::
+  ::
 
-  helper.EnablePcapIpv4All ("prefix");
+    Names::Add ("serverIPv4" ...);
+    ...
+    helper.EnablePcapIpv4 ("prefix", "serverIpv4", 1);
 
-Pcap Tracing Protocol Helper Filename Selection
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* You can enable PCAP tracing on a collection of protocol/interface
+  pairs by providing an ``Ipv4InterfaceContainer``.  For each ``Ipv4`` /
+  interface pair in the container the protocol type is checked.  For
+  each protocol of the proper type (the same type as is managed by the
+  device helper), tracing is enabled for the corresponding interface.
+  For example,
 
-Implicit in all of the method descriptions above is the construction of the
-complete filenames by the implementation method.  By convention, pcap traces
-taken for devices in the |ns3| system are of the form 
-"<prefix>-<node id>-<device id>.pcap".  In the case of protocol traces,
-there is a one-to-one correspondence between protocols and ``Nodes``.
-This is because protocol ``Objects`` are aggregated to ``Node Objects``.
-Since there is no global protocol id in the system, we use the corresponding
-node id in file naming.  Therefore there is a possibility for file name 
-collisions in automatically chosen trace file names.  For this reason, the
-file name convention is changed for protocol traces.
+  ::
 
-As previously mentioned, every node in the system will have a system-assigned
-node id.  Since there is a one-to-one correspondence between protocol instances
-and node instances we use the node id.  Each interface has an interface id 
-relative to its protocol.  We use the convention 
-"<prefix>-n<node id>-i<interface id>.pcap" for trace file naming in protocol
-helpers.
+    NodeContainer nodes;
+    ...
+    NetDeviceContainer devices = deviceHelper.Install (nodes);
+    ... 
+    Ipv4AddressHelper ipv4;
+    ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+    Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
+    ...
+    helper.EnablePcapIpv4 ("prefix", interfaces);
 
-Therefore, by default, a pcap trace file created as a result of enabling tracing
-on interface 1 of the Ipv4 protocol of node 21 using the prefix "prefix"
-would be "prefix-n21-i1.pcap".
+* You can enable PCAP tracing on a collection of protocol/interface
+  pairs by providing a ``NodeContainer``.  For each Node in the
+  ``NodeContainer`` the appropriate protocol is found.  For each
+  protocol, its interfaces are enumerated and tracing is enabled on the
+  resulting pairs.  For example,
 
-You can always use the |ns3| object name service to make this more clear.
-For example, if you use the object name service to assign the name "serverIpv4"
-to the Ptr<Ipv4> on node 21, the resulting pcap trace file name will 
-automatically become, "prefix-nserverIpv4-i1.pcap".
+  ::
 
-Several of the methods have a default parameter called ``explicitFilename``.
-When set to true, this parameter disables the automatic filename completion 
-mechanism and allows you to create an explicit filename.  This option is only
-available in the methods which take a prefix and enable tracing on a single device.  
+    NodeContainer n;
+    ...
+    helper.EnablePcapIpv4 ("prefix", n);
 
-Ascii Tracing Protocol Helpers
-++++++++++++++++++++++++++++++
+* You can enable PCAP tracing on the basis of Node ID and interface as
+  well.  In this case, the node-id is translated to a ``Ptr<Node>`` and
+  the appropriate protocol is looked up in the node.  The resulting
+  protocol and interface are used to specify the resulting trace source.
+
+  ::
+
+    helper.EnablePcapIpv4 ("prefix", 21, 1);
+
+* Finally, you can enable PCAP tracing for all interfaces in the
+  system, with associated protocol being the same type as that managed
+  by the device helper.
+
+  ::
+
+    helper.EnablePcapIpv4All ("prefix");
+
+Filenames
+#########
+
+Implicit in all of the method descriptions above is the construction
+of the complete filenames by the implementation method.  By
+convention, PCAP traces taken for devices in the |ns3| system are of
+the form "<prefix>-<node id>-<device id>.pcap".  In the case of
+protocol traces, there is a one-to-one correspondence between
+protocols and ``Nodes``.  This is because protocol ``Objects`` are
+aggregated to ``Node Objects``.  Since there is no global protocol id
+in the system, we use the corresponding Node id in file naming.
+Therefore there is a possibility for file name collisions in
+automatically chosen trace file names.  For this reason, the file name
+convention is changed for protocol traces.
+
+As previously mentioned, every Node in the system will have a
+system-assigned Node id.  Since there is a one-to-one correspondence
+between protocol instances and Node instances we use the Node id.
+Each interface has an interface id relative to its protocol.  We use
+the convention "<prefix>-n<node id>-i<interface id>.pcap" for trace
+file naming in protocol helpers.
+
+Therefore, by default, a PCAP trace file created as a result of
+enabling tracing on interface 1 of the Ipv4 protocol of Node 21 using
+the prefix "prefix" would be "prefix-n21-i1.pcap".
+
+You can always use the |ns3| object name service to make this more
+clear.  For example, if you use the object name service to assign the
+name "serverIpv4" to the Ptr<Ipv4> on Node 21, the resulting PCAP
+trace file name will automatically become,
+"prefix-nserverIpv4-i1.pcap".
+
+Several of the methods have a default parameter called
+``explicitFilename``.  When set to true, this parameter disables the
+automatic filename completion mechanism and allows you to create an
+explicit filename.  This option is only available in the methods which
+take a prefix and enable tracing on a single device.
 
-The behavior of the ascii trace helpers is substantially similar to the pcap
-case.  Take a look at ``src/network/helper/trace-helper.h`` if you want to 
-follow the discussion while looking at real code.
+ASCII
+~~~~~
 
-In this section we will be illustrating the methods as applied to the protocol
-``Ipv4``.  To specify traces in similar protocols, just substitute the
-appropriate type.  For example, use a ``Ptr<Ipv6>`` instead of a
-``Ptr<Ipv4>`` and call ``EnableAsciiIpv6`` instead of ``EnableAsciiIpv4``.
+The behavior of the ASCII trace helpers is substantially similar to
+the PCAP case.  Take a look at ``src/network/helper/trace-helper.h``
+if you want to follow the discussion while looking at real code.
 
-The class ``AsciiTraceHelperForIpv4`` adds the high level functionality
-for using ascii tracing to a protocol helper.  Each protocol that enables these
-methods must implement a single virtual method inherited from this class.
+In this section we will be illustrating the methods as applied to the
+protocol ``Ipv4``.  To specify traces in similar protocols, just
+substitute the appropriate type.  For example, use a ``Ptr<Ipv6>``
+instead of a ``Ptr<Ipv4>`` and call ``EnableAsciiIpv6`` instead of
+``EnableAsciiIpv4``.
+
+The class ``AsciiTraceHelperForIpv4`` adds the high level
+functionality for using ASCII tracing to a protocol helper.  Each
+protocol that enables these methods must implement a single virtual
+method inherited from this class.
 
 ::
 
@@ -2934,12 +3061,13 @@
                                         uint32_t interface,
                                         bool explicitFilename) = 0;
 
-The signature of this method reflects the protocol- and interface-centric view 
-of the situation at this level; and also the fact that the helper may be writing
-to a shared output stream.  All of the public methods inherited from class 
-``PcapAndAsciiTraceHelperForIpv4`` reduce to calling this single device-
-dependent implementation method.  For example, the lowest level ascii trace
-methods,
+The signature of this method reflects the protocol- and
+interface-centric view of the situation at this level; and also the
+fact that the helper may be writing to a shared output stream.  All of
+the public methods inherited from class
+``PcapAndAsciiTraceHelperForIpv4`` reduce to calling this single
+device- dependent implementation method.  For example, the lowest
+level ASCII trace methods,
 
 ::
 
@@ -2947,16 +3075,17 @@
   void EnableAsciiIpv4 (Ptr<OutputStreamWrapper> stream, Ptr<Ipv4> ipv4, uint32_t interface);
 
 
-will call the device implementation of ``EnableAsciiIpv4Internal`` directly,
-providing either the prefix or the stream.  All other public ascii tracing 
-methods will build on these low-level functions to provide additional user-level
-functionality.  What this means to the user is that all device helpers in the 
-system will have all of the ascii trace methods available; and these methods
-will all work in the same way across protocols if the protocols implement 
+will call the device implementation of ``EnableAsciiIpv4Internal``
+directly, providing either the prefix or the stream.  All other public
+ASCII tracing methods will build on these low-level functions to
+provide additional user-level functionality.  What this means to the
+user is that all device helpers in the system will have all of the
+ASCII trace methods available; and these methods will all work in the
+same way across protocols if the protocols implement
 ``EnablAsciiIpv4Internal`` correctly.
 
-Ascii Tracing Protocol Helper Methods
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Methods
+#######
 
 ::
 
@@ -2978,207 +3107,215 @@
   void EnableAsciiIpv4 (std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename);
   void EnableAsciiIpv4 (Ptr<OutputStreamWrapper> stream, uint32_t nodeid, uint32_t interface);
 
-You are encouraged to peruse the Doxygen for class ``PcapAndAsciiHelperForIpv4``
-to find the details of these methods; but to summarize ...
-
-There are twice as many methods available for ascii tracing as there were for
-pcap tracing.  This is because, in addition to the pcap-style model where traces
-from each unique protocol/interface pair are written to a unique file, we 
-support a model in which trace information for many protocol/interface pairs is 
-written to a common file.  This means that the <prefix>-n<node id>-<interface>
-file name generation mechanism is replaced by a mechanism to refer to a common 
-file; and the number of API methods is doubled to allow all combinations.
-
-Just as in pcap tracing, you can enable ascii tracing on a particular 
-protocol/interface pair by providing a ``Ptr<Ipv4>`` and an ``interface``
-to an ``EnableAscii`` method.
-For example, 
-
-::
-
-  Ptr<Ipv4> ipv4;
-  ...
-  helper.EnableAsciiIpv4 ("prefix", ipv4, 1);
-
-In this case, no trace contexts are written to the ascii trace file since they
-would be redundant.  The system will pick the file name to be created using
-the same rules as described in the pcap section, except that the file will
-have the suffix ".tr" instead of ".pcap".
-
-If you want to enable ascii tracing on more than one interface and have all 
-traces sent to a single file, you can do that as well by using an object to
-refer to a single file.  We have already something similar to this in the
-"cwnd" example above:
-
-::
-
-  Ptr<Ipv4> protocol1 = node1->GetObject<Ipv4> ();
-  Ptr<Ipv4> protocol2 = node2->GetObject<Ipv4> ();
-  ...
-  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
-  ...
-  helper.EnableAsciiIpv4 (stream, protocol1, 1);
-  helper.EnableAsciiIpv4 (stream, protocol2, 1);
+You are encouraged to peruse the API Documentation for class
+``PcapAndAsciiHelperForIpv4`` to find the details of these methods;
+but to summarize ...
+
+* There are twice as many methods available for ASCII tracing as there
+  were for PCAP tracing.  This is because, in addition to the PCAP-style
+  model where traces from each unique protocol/interface pair are
+  written to a unique file, we support a model in which trace
+  information for many protocol/interface pairs is written to a common
+  file.  This means that the <prefix>-n<node id>-<interface> file name
+  generation mechanism is replaced by a mechanism to refer to a common
+  file; and the number of API methods is doubled to allow all
+  combinations.
+
+* Just as in PCAP tracing, you can enable ASCII tracing on a particular
+  protocol/interface pair by providing a ``Ptr<Ipv4>`` and an
+  ``interface`` to an ``EnableAscii`` method.  For example,
 
-In this case, trace contexts are written to the ascii trace file since they
-are required to disambiguate traces from the two interfaces.  Note that since 
-the user is completely specifying the file name, the string should include the
-",tr" for consistency.
+  ::
 
-You can enable ascii tracing on a particular protocol by providing a 
-``std::string`` representing an object name service string to an 
-``EnablePcap`` method.  The ``Ptr<Ipv4>`` is looked up from the name
-string.  The ``<Node>`` in the resulting filenames is implicit since there
-is a one-to-one correspondence between protocol instances and nodes,
-For example, 
-
-::
-
-  Names::Add ("node1Ipv4" ...);
-  Names::Add ("node2Ipv4" ...);
-  ...
-  helper.EnableAsciiIpv4 ("prefix", "node1Ipv4", 1);
-  helper.EnableAsciiIpv4 ("prefix", "node2Ipv4", 1);
-
-This would result in two files named "prefix-nnode1Ipv4-i1.tr" and 
-"prefix-nnode2Ipv4-i1.tr" with traces for each interface in the respective 
-trace file.  Since all of the EnableAscii functions are overloaded to take a 
-stream wrapper, you can use that form as well:
-
-::
-
-  Names::Add ("node1Ipv4" ...);
-  Names::Add ("node2Ipv4" ...);
-  ...
-  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
-  ...
-  helper.EnableAsciiIpv4 (stream, "node1Ipv4", 1);
-  helper.EnableAsciiIpv4 (stream, "node2Ipv4", 1);
-
-This would result in a single trace file called "trace-file-name.tr" that 
-contains all of the trace events for both interfaces.  The events would be 
-disambiguated by trace context strings.
-
-You can enable ascii tracing on a collection of protocol/interface pairs by 
-providing an ``Ipv4InterfaceContainer``.  For each protocol of the proper 
-type (the same type as is managed by the device helper), tracing is enabled
-for the corresponding interface.  Again, the ``<Node>`` is implicit since 
-there is a one-to-one correspondence between each protocol and its node.
-For example, 
-
-::
-
-  NodeContainer nodes;
-  ...
-  NetDeviceContainer devices = deviceHelper.Install (nodes);
-  ... 
-  Ipv4AddressHelper ipv4;
-  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
-  ...
-  ...
-  helper.EnableAsciiIpv4 ("prefix", interfaces);
-
-This would result in a number of ascii trace files being created, each of which
-follows the <prefix>-n<node id>-i<interface>.tr convention.  Combining all of the
-traces into a single file is accomplished similarly to the examples above:
-
-::
-
-  NodeContainer nodes;
-  ...
-  NetDeviceContainer devices = deviceHelper.Install (nodes);
-  ... 
-  Ipv4AddressHelper ipv4;
-  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
-  ...
-  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
-  ...
-  helper.EnableAsciiIpv4 (stream, interfaces);
-
-You can enable ascii tracing on a collection of protocol/interface pairs by 
-providing a ``NodeContainer``.  For each ``Node`` in the ``NodeContainer``
-the appropriate protocol is found.  For each protocol, its interfaces are 
-enumerated and tracing is enabled on the resulting pairs.  For example,
+    Ptr<Ipv4> ipv4;
+    ...
+    helper.EnableAsciiIpv4 ("prefix", ipv4, 1);
 
-::
+  In this case, no trace contexts are written to the ASCII trace file
+  since they would be redundant.  The system will pick the file name to
+  be created using the same rules as described in the PCAP section,
+  except that the file will have the suffix ".tr" instead of ".pcap".
+
+* If you want to enable ASCII tracing on more than one interface and
+  have all traces sent to a single file, you can do that as well by
+  using an object to refer to a single file.  We have already something
+  similar to this in the "cwnd" example above::
 
-  NodeContainer n;
-  ...
-  helper.EnableAsciiIpv4 ("prefix", n);
+    Ptr<Ipv4> protocol1 = node1->GetObject<Ipv4> ();
+    Ptr<Ipv4> protocol2 = node2->GetObject<Ipv4> ();
+    ...
+    Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
+    ...
+    helper.EnableAsciiIpv4 (stream, protocol1, 1);
+    helper.EnableAsciiIpv4 (stream, protocol2, 1);
 
-This would result in a number of ascii trace files being created, each of which
-follows the <prefix>-<node id>-<device id>.tr convention.  Combining all of the
-traces into a single file is accomplished similarly to the examples above:
+  In this case, trace contexts are written to the ASCII trace file since
+  they are required to disambiguate traces from the two interfaces.
+  Note that since the user is completely specifying the file name, the
+  string should include the ",tr" for consistency.
+
+* You can enable ASCII tracing on a particular protocol by providing a
+  ``std::string`` representing an object name service string to an
+  ``EnablePcap`` method.  The ``Ptr<Ipv4>`` is looked up from the name
+  string.  The ``<Node>`` in the resulting filenames is implicit since
+  there is a one-to-one correspondence between protocol instances and
+  nodes, For example,
 
-You can enable pcap tracing on the basis of node ID and device ID as well.  In
-this case, the node-id is translated to a ``Ptr<Node>`` and the appropriate
-protocol is looked up in the node.  The resulting protocol and interface are
-used to specify the resulting trace source.
+  ::
 
-::
+    Names::Add ("node1Ipv4" ...);
+    Names::Add ("node2Ipv4" ...);
+    ...
+    helper.EnableAsciiIpv4 ("prefix", "node1Ipv4", 1);
+    helper.EnableAsciiIpv4 ("prefix", "node2Ipv4", 1);
 
-  helper.EnableAsciiIpv4 ("prefix", 21, 1);
+  This would result in two files named "prefix-nnode1Ipv4-i1.tr" and
+  "prefix-nnode2Ipv4-i1.tr" with traces for each interface in the
+  respective trace file.  Since all of the EnableAscii functions are
+  overloaded to take a stream wrapper, you can use that form as well::
 
-Of course, the traces can be combined into a single file as shown above.
+    Names::Add ("node1Ipv4" ...);
+    Names::Add ("node2Ipv4" ...);
+    ...
+    Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
+    ...
+    helper.EnableAsciiIpv4 (stream, "node1Ipv4", 1);
+    helper.EnableAsciiIpv4 (stream, "node2Ipv4", 1);
 
-Finally, you can enable ascii tracing for all interfaces in the system, with
-associated protocol being the same type as that managed by the device helper.
+  This would result in a single trace file called "trace-file-name.tr"
+  that contains all of the trace events for both interfaces.  The events
+  would be disambiguated by trace context strings.
+
+* You can enable ASCII tracing on a collection of protocol/interface
+  pairs by providing an ``Ipv4InterfaceContainer``.  For each protocol
+  of the proper type (the same type as is managed by the device helper),
+  tracing is enabled for the corresponding interface.  Again, the
+  ``<Node>`` is implicit since there is a one-to-one correspondence
+  between each protocol and its node.  For example,
 
-::
+  ::
 
-  helper.EnableAsciiIpv4All ("prefix");
+    NodeContainer nodes;
+    ...
+    NetDeviceContainer devices = deviceHelper.Install (nodes);
+    ... 
+    Ipv4AddressHelper ipv4;
+    ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+    Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
+    ...
+    ...
+    helper.EnableAsciiIpv4 ("prefix", interfaces);
 
-This would result in a number of ascii trace files being created, one for
-every interface in the system related to a protocol of the type managed by the
-helper.  All of these files will follow the <prefix>-n<node id>-i<interface.tr
-convention.  Combining all of the traces into a single file is accomplished 
-similarly to the examples above.
+  This would result in a number of ASCII trace files being created, each
+  of which follows the <prefix>-n<node id>-i<interface>.tr convention.
+  Combining all of the traces into a single file is accomplished
+  similarly to the examples above::
 
-Ascii Tracing Protocol Helper Filename Selection
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    NodeContainer nodes;
+    ...
+    NetDeviceContainer devices = deviceHelper.Install (nodes);
+    ... 
+    Ipv4AddressHelper ipv4;
+    ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+    Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
+    ...
+    Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("trace-file-name.tr");
+    ...
+    helper.EnableAsciiIpv4 (stream, interfaces);
 
-Implicit in the prefix-style method descriptions above is the construction of the
-complete filenames by the implementation method.  By convention, ascii traces
-in the |ns3| system are of the form "<prefix>-<node id>-<device id>.tr"
+* You can enable ASCII tracing on a collection of protocol/interface
+  pairs by providing a ``NodeContainer``.  For each Node in the
+  ``NodeContainer`` the appropriate protocol is found.  For each
+  protocol, its interfaces are enumerated and tracing is enabled on the
+  resulting pairs.  For example,
 
-As previously mentioned, every node in the system will have a system-assigned
-node id.  Since there is a one-to-one correspondence between protocols and nodes
-we use to node-id to identify the protocol identity.  Every interface on a 
-given protocol will have an interface index (also called simply an interface) 
-relative to its protocol.  By default, then, an ascii trace file created as a result
-of enabling tracing on the first device of node 21, using the prefix "prefix",
-would be "prefix-n21-i1.tr".  Use the prefix to disambiguate multiple protocols
-per node.
+  ::
 
-You can always use the |ns3| object name service to make this more clear.
-For example, if you use the object name service to assign the name "serverIpv4"
-to the protocol on node 21, and also specify interface one, the resulting ascii 
-trace file name will automatically become, "prefix-nserverIpv4-1.tr".
+    NodeContainer n;
+    ...
+    helper.EnableAsciiIpv4 ("prefix", n);
 
-Several of the methods have a default parameter called ``explicitFilename``.
-When set to true, this parameter disables the automatic filename completion 
-mechanism and allows you to create an explicit filename.  This option is only
-available in the methods which take a prefix and enable tracing on a single device.  
+  This would result in a number of ASCII trace files being created,
+  each of which follows the <prefix>-<node id>-<device id>.tr
+  convention.  Combining all of the traces into a single file is
+  accomplished similarly to the examples above.
+
+* You can enable PCAP tracing on the basis of Node ID and device ID as
+  well.  In this case, the node-id is translated to a ``Ptr<Node>`` and
+  the appropriate protocol is looked up in the node.  The resulting
+  protocol and interface are used to specify the resulting trace source.
+
+  ::
+
+    helper.EnableAsciiIpv4 ("prefix", 21, 1);
+
+  Of course, the traces can be combined into a single file as shown
+  above.
+
+* Finally, you can enable ASCII tracing for all interfaces in the
+  system, with associated protocol being the same type as that managed
+  by the device helper.
+
+  ::
+
+    helper.EnableAsciiIpv4All ("prefix");
+
+  This would result in a number of ASCII trace files being created, one
+  for every interface in the system related to a protocol of the type
+  managed by the helper.  All of these files will follow the
+  <prefix>-n<node id>-i<interface.tr convention.  Combining all of the
+  traces into a single file is accomplished similarly to the examples
+  above.
+
+Filenames
+#########
+
+Implicit in the prefix-style method descriptions above is the
+construction of the complete filenames by the implementation method.
+By convention, ASCII traces in the |ns3| system are of the form
+"<prefix>-<node id>-<device id>.tr"
+
+As previously mentioned, every Node in the system will have a
+system-assigned Node id.  Since there is a one-to-one correspondence
+between protocols and nodes we use to node-id to identify the protocol
+identity.  Every interface on a given protocol will have an interface
+index (also called simply an interface) relative to its protocol.  By
+default, then, an ASCII trace file created as a result of enabling
+tracing on the first device of Node 21, using the prefix "prefix",
+would be "prefix-n21-i1.tr".  Use the prefix to disambiguate multiple
+protocols per node.
+
+You can always use the |ns3| object name service to make this more
+clear.  For example, if you use the object name service to assign the
+name "serverIpv4" to the protocol on Node 21, and also specify
+interface one, the resulting ASCII trace file name will automatically
+become, "prefix-nserverIpv4-1.tr".
+
+Several of the methods have a default parameter called
+``explicitFilename``.  When set to true, this parameter disables the
+automatic filename completion mechanism and allows you to create an
+explicit filename.  This option is only available in the methods which
+take a prefix and enable tracing on a single device.
 
 Summary
 *******
 
-|ns3| includes an extremely rich environment allowing users at several 
-levels to customize the kinds of information that can be extracted from 
-simulations.  
-
-There are high-level helper functions that allow users to simply control the 
-collection of pre-defined outputs to a fine granularity.  There are mid-level
-helper functions to allow more sophisticated users to customize how information
-is extracted and saved; and there are low-level core functions to allow expert
-users to alter the system to present new and previously unexported information
-in a way that will be immediately accessible to users at higher levels.
-
-This is a very comprehensive system, and we realize that it is a lot to 
-digest, especially for new users or those not intimately familiar with C++
-and its idioms.  We do consider the tracing system a very important part of
-|ns3| and so recommend becoming as familiar as possible with it.  It is
-probably the case that understanding the rest of the |ns3| system will
-be quite simple once you have mastered the tracing system
+|ns3| includes an extremely rich environment allowing users at several
+levels to customize the kinds of information that can be extracted
+from simulations.
+
+There are high-level helper functions that allow users to simply
+control the collection of pre-defined outputs to a fine granularity.
+There are mid-level helper functions to allow more sophisticated users
+to customize how information is extracted and saved; and there are
+low-level core functions to allow expert users to alter the system to
+present new and previously unexported information in a way that will
+be immediately accessible to users at higher levels.
+
+This is a very comprehensive system, and we realize that it is a lot
+to digest, especially for new users or those not intimately familiar
+with C++ and its idioms.  We do consider the tracing system a very
+important part of |ns3| and so recommend becoming as familiar as
+possible with it.  It is probably the case that understanding the rest
+of the |ns3| system will be quite simple once you have mastered the
+tracing system
diff -Naur ns-3.21/doc/tutorial/source/tweaking.rst ns-3.22/doc/tutorial/source/tweaking.rst
--- ns-3.21/doc/tutorial/source/tweaking.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial/source/tweaking.rst	2015-02-05 15:46:22.000000000 -0800
@@ -5,6 +5,8 @@
 Tweaking
 --------
 
+.. _UsingLogging:
+
 Using the Logging Module
 ************************
 
@@ -412,6 +414,8 @@
 Using Command Line Arguments
 ****************************
 
+.. _Attribute:
+
 Overriding Default Attributes
 +++++++++++++++++++++++++++++
 Another way you can change how |ns3| scripts behave without editing
@@ -722,6 +726,8 @@
 command line system.  If you are a script author, you can add new variables to 
 your scripts and hook them into the command line system quite painlessly.
 
+.. _UsingTracingSystem:
+
 Using the Tracing System
 ************************
 
diff -Naur ns-3.21/doc/tutorial-pt-br/Makefile ns-3.22/doc/tutorial-pt-br/Makefile
--- ns-3.21/doc/tutorial-pt-br/Makefile	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial-pt-br/Makefile	2015-02-05 15:46:22.000000000 -0800
@@ -27,9 +27,22 @@
 
 .NOTPARALLEL:
 
-%.eps : %.dia; $(DIA) -t eps $< -e $@
-%.png : %.dia; $(DIA) -t png $< -e $@
-%.pdf : %.eps; $(EPSTOPDF) $< -o=$@
+%.eps : %.dia
+	@echo dia $(notdir $<)
+	@$(DIA) -t eps $< -e $@ >/dev/null
+
+%.png : %.dia
+	@echo dia $(notdir $<)
+	@$(DIA) -t png $< -e $@ >/dev/null
+
+%.png : %.eps
+	@echo convert $(notdir $<)
+	@$(CONVERT) $< $@ >/dev/null
+
+%.pdf : %.eps
+	@echo epstopdf $(notdir $<)
+	@$(EPSTOPDF) $< -o=$@ >/dev/null
+	@if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
 
 help:
 	@echo "Please use \`make <target>' where <target> is one of"
diff -Naur ns-3.21/doc/tutorial-pt-br/source/conf.py ns-3.22/doc/tutorial-pt-br/source/conf.py
--- ns-3.21/doc/tutorial-pt-br/source/conf.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/doc/tutorial-pt-br/source/conf.py	2015-02-05 15:46:22.000000000 -0800
@@ -50,9 +50,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.21'
+version = 'ns-3.22'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.21'
+release = 'ns-3.22'
 
 # The language for content autogenerated by . Refer to babel documentation
 # for a list of supported languages.
diff -Naur ns-3.21/examples/energy/energy-model-example.cc ns-3.22/examples/energy/energy-model-example.cc
--- ns-3.21/examples/energy/energy-model-example.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/energy/energy-model-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include <vector>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("EnergyExample");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("EnergyExample");
+
 static inline std::string
 PrintReceivedPacket (Address& from)
 {
diff -Naur ns-3.21/examples/energy/energy-model-with-harvesting-example.cc ns-3.22/examples/energy/energy-model-with-harvesting-example.cc
--- ns-3.21/examples/energy/energy-model-with-harvesting-example.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/energy/energy-model-with-harvesting-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -60,10 +60,10 @@
 #include <vector>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("EnergyWithHarvestingExample");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("EnergyWithHarvestingExample");
+
 static inline std::string
 PrintReceivedPacket (Address& from)
 {
diff -Naur ns-3.21/examples/ipv6/fragmentation-ipv6.cc ns-3.22/examples/ipv6/fragmentation-ipv6.cc
--- ns-3.21/examples/ipv6/fragmentation-ipv6.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/ipv6/fragmentation-ipv6.cc	2015-02-05 15:46:22.000000000 -0800
@@ -41,7 +41,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("FragmentationIpv6Example");
 
-
 int main (int argc, char** argv)
 {
   bool verbose = false;
diff -Naur ns-3.21/examples/ipv6/loose-routing-ipv6.cc ns-3.22/examples/ipv6/loose-routing-ipv6.cc
--- ns-3.21/examples/ipv6/loose-routing-ipv6.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/ipv6/loose-routing-ipv6.cc	2015-02-05 15:46:22.000000000 -0800
@@ -44,6 +44,7 @@
 #include "ns3/csma-module.h"
 #include "ns3/applications-module.h"
 #include "ns3/ipv6-header.h"
+
 using namespace ns3;
 
 NS_LOG_COMPONENT_DEFINE ("LooseRoutingIpv6Example");
diff -Naur ns-3.21/examples/ipv6/radvd.cc ns-3.22/examples/ipv6/radvd.cc
--- ns-3.21/examples/ipv6/radvd.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/ipv6/radvd.cc	2015-02-05 15:46:22.000000000 -0800
@@ -97,7 +97,6 @@
   tmp2.Add (d1.Get (1)); /* R */
   Ipv6InterfaceContainer iicr1 = ipv6.Assign (tmp2); /* R interface to the first subnet is just statically assigned */
   iicr1.SetForwarding (0, true);
-  iicr1.SetDefaultRouteInAllNodes (0);
   iic1.Add (iicr1);
 
   /* second subnet R - n1 */
@@ -106,7 +105,6 @@
   tmp3.Add (d2.Get (0)); /* R */
   Ipv6InterfaceContainer iicr2 = ipv6.Assign (tmp3); /* R interface */
   iicr2.SetForwarding (0, true);
-  iicr2.SetDefaultRouteInAllNodes (0);
 
   NetDeviceContainer tmp4;
   tmp4.Add (d2.Get (1)); /* n1 */
@@ -115,10 +113,15 @@
 
   /* radvd configuration */
   RadvdHelper radvdHelper;
+
   /* R interface (n0 - R) */
-  radvdHelper.AddAnnouncedPrefix(iic1.GetInterfaceIndex (1), Ipv6Address("2001:1::0"), 64);
+  /* n0 will receive unsolicited (periodic) RA */
+  radvdHelper.AddAnnouncedPrefix (iic1.GetInterfaceIndex (1), Ipv6Address("2001:1::0"), 64);
+
   /* R interface (R - n1) */
+  /* n1 will have to use RS, as RA are not sent automatically */
   radvdHelper.AddAnnouncedPrefix(iic2.GetInterfaceIndex (1), Ipv6Address("2001:2::0"), 64);
+  radvdHelper.GetRadvdInterface (iic2.GetInterfaceIndex (1))->SetSendAdvert (false);
 
   ApplicationContainer radvdApps = radvdHelper.Install (r);
   radvdApps.Start (Seconds (1.0));
diff -Naur ns-3.21/examples/ipv6/radvd-two-prefix.cc ns-3.22/examples/ipv6/radvd-two-prefix.cc
--- ns-3.21/examples/ipv6/radvd-two-prefix.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/ipv6/radvd-two-prefix.cc	2015-02-05 15:46:22.000000000 -0800
@@ -132,7 +132,6 @@
   tmp2.Add (d1.Get (1)); /* R */
   Ipv6InterfaceContainer iicr1 = ipv6.Assign (tmp2); /* R interface to the first subnet is just statically assigned */
   iicr1.SetForwarding (0, true);
-  iicr1.SetDefaultRouteInAllNodes (0);
   iic1.Add (iicr1);
 
   /* add another IPv6 address for second prefix advertised on first subnet */
@@ -145,7 +144,6 @@
   tmp3.Add (d2.Get (0)); /* R */
   Ipv6InterfaceContainer iicr2 = ipv6.Assign (tmp3); /* R interface */
   iicr2.SetForwarding (0, true);
-  iicr2.SetDefaultRouteInAllNodes (0);
 
   NetDeviceContainer tmp4;
   tmp4.Add (d2.Get (1)); /* n1 */
diff -Naur ns-3.21/examples/ipv6/test-ipv6.cc ns-3.22/examples/ipv6/test-ipv6.cc
--- ns-3.21/examples/ipv6/test-ipv6.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/ipv6/test-ipv6.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/node.h"
 #include "ns3/mac48-address.h"
 
-NS_LOG_COMPONENT_DEFINE ("TestIpv6");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("TestIpv6");
+
 int 
 main (int argc, char *argv[])
 {
diff -Naur ns-3.21/examples/routing/simple-routing-ping6.py ns-3.22/examples/routing/simple-routing-ping6.py
--- ns-3.21/examples/routing/simple-routing-ping6.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/routing/simple-routing-ping6.py	2015-02-05 15:46:22.000000000 -0800
@@ -70,12 +70,14 @@
     # Create networks and assign IPv6 Addresses
     print "Addressing"
     ipv6 = ns.internet.Ipv6AddressHelper();
-    ipv6.NewNetwork(ns.network.Ipv6Address("2001:1::"), ns.network.Ipv6Prefix(64));
+    ipv6.SetBase(ns.network.Ipv6Address("2001:1::"), ns.network.Ipv6Prefix(64));
     i1 = ipv6.Assign(d1);
-    i1.SetRouter(1, True);
-    ipv6.NewNetwork(ns.network.Ipv6Address("2001:2::"), ns.network.Ipv6Prefix(64));
+    i1.SetForwarding(1, True);
+    i1.SetDefaultRouteInAllNodes(1);
+    ipv6.SetBase(ns.network.Ipv6Address("2001:2::"), ns.network.Ipv6Prefix(64));
     i2 = ipv6.Assign(d2);
-    i2.SetRouter(0, True);
+    i2.SetForwarding(0, True);
+    i2.SetDefaultRouteInAllNodes(0);
 
     # Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via r 
     print "Application"
diff -Naur ns-3.21/examples/stats/wifi-example-apps.cc ns-3.22/examples/stats/wifi-example-apps.cc
--- ns-3.21/examples/stats/wifi-example-apps.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/stats/wifi-example-apps.cc	2015-02-05 15:46:22.000000000 -0800
@@ -66,7 +66,8 @@
                    MakePointerAccessor (&Sender::m_interval),
                    MakePointerChecker <RandomVariableStream>())
     .AddTraceSource ("Tx", "A new packet is created and is sent",
-                     MakeTraceSourceAccessor (&Sender::m_txTrace))
+                     MakeTraceSourceAccessor (&Sender::m_txTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/examples/stats/wifi-example-sim.cc ns-3.22/examples/stats/wifi-example-sim.cc
--- ns-3.21/examples/stats/wifi-example-sim.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/stats/wifi-example-sim.cc	2015-02-05 15:46:22.000000000 -0800
@@ -49,9 +49,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("WiFiDistanceExperiment");
 
-
-
-
 void TxCallback (Ptr<CounterCalculator<uint32_t> > datac,
                  std::string path, Ptr<const Packet> packet) {
   NS_LOG_INFO ("Sent frame counted in " <<
diff -Naur ns-3.21/examples/tcp/tcp-large-transfer.cc ns-3.22/examples/tcp/tcp-large-transfer.cc
--- ns-3.21/examples/tcp/tcp-large-transfer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/tcp/tcp-large-transfer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -44,7 +44,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("TcpLargeTransfer");
 
-
 // The number of bytes to send in this simulation.
 static const uint32_t totalTxBytes = 2000000;
 static uint32_t currentTxBytes = 0;
diff -Naur ns-3.21/examples/tcp/tcp-nsc-comparison.cc ns-3.22/examples/tcp/tcp-nsc-comparison.cc
--- ns-3.21/examples/tcp/tcp-nsc-comparison.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/tcp/tcp-nsc-comparison.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,6 +21,10 @@
  * "DCE Cradle: Simulate Network Protocols with Real Stacks for Better Realism"
  * by Hajime Tazaki, Frederic Urbani and Thierry Turlett presented at WNS3 2013
  *
+ * By default, TCP timestamps, window scale, and SACK are disabled because
+ * they were not supported in ns-3 at the time of this paper.  TCP timestamp
+ * and window scale can be enabled by command line arguments.  
+ *
  */
 
 #include "ns3/log.h"
@@ -37,11 +41,13 @@
 
 std::string m_stack = "nsc-linux";
 std::string sock_factory;
-int m_seed = 1;
+uint32_t m_seed = 1;
 double startTime = 4.0;
 double stopTime = 20.0;
 uint32_t m_nNodes = 2;
 bool enablePcap = false;
+bool enableTimestamps = false;
+bool enableWindowScale = false;
 
 int
 main (int argc, char *argv[])
@@ -54,13 +60,20 @@
   CommandLine cmd;
   cmd.AddValue ("stack", "choose network stack", m_stack);
   cmd.AddValue ("seed", "randomize seed", m_seed);
-  cmd.AddValue ("nNodes", "the number of nodes in left side", m_nNodes);
+  cmd.AddValue ("nNodes", "the number of source and sink nodes", m_nNodes);
   cmd.AddValue ("stopTime", "duration", stopTime);
   cmd.AddValue ("enablePcap", "pcap", enablePcap);
+  cmd.AddValue ("enableTimestamps", "use TCP Timestamps option", enableTimestamps);
+  cmd.AddValue ("enableWindowScale", "use TCP Window Scale option", enableWindowScale);
   cmd.Parse (argc, argv);
 
   SeedManager::SetSeed (m_seed);
 
+  if (m_stack != "nsc-linux" && m_stack != "ns3")
+    {
+      NS_FATAL_ERROR ("Error, stack named " << m_stack << " is not supported");
+    }
+
   NodeContainer lefts, routers, rights, nodes;
   lefts.Create (m_nNodes);
   routers.Create (2);
@@ -73,6 +86,14 @@
   if (m_stack == "ns3")
     {
       sock_factory = "ns3::TcpSocketFactory";
+      if (enableTimestamps == false)
+        {
+          Config::SetDefault ("ns3::TcpSocketBase::WindowScaling", BooleanValue (false));
+        }
+      if (enableWindowScale == false)
+        {
+          Config::SetDefault ("ns3::TcpSocketBase::Timestamp", BooleanValue (false));
+        }
       internetStack.Install (nodes);
     }
   else if (m_stack == "nsc-linux")
@@ -84,10 +105,17 @@
       internetStack.Install (lefts);
       internetStack.Install (rights);
 
-      //these are not implemented in ns3 tcp so disable for comparison
+      // at the time this program was written, these were not implemented 
+      // in ns3 tcp, so disable for comparison
       Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_sack", StringValue ("0"));
-      Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_timestamps", StringValue ("0"));
-      Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_window_scaling", StringValue ("0"));
+      if (enableTimestamps == false)
+        {
+          Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_timestamps", StringValue ("0"));
+        }
+      if (enableWindowScale == false)
+        {
+          Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_window_scaling", StringValue ("0"));
+        }
     }
 
   PointToPointHelper pointToPoint;
@@ -160,7 +188,10 @@
   apps = sink.Install (rights);
   apps.Start (Seconds (3.9999));
 
-  pointToPoint.EnablePcapAll ("nsc.pcap");
+  if (enablePcap)
+    {
+      pointToPoint.EnablePcapAll ("nsc.pcap");
+    }
 
   Simulator::Stop (Seconds (stopTime));
   Simulator::Run ();
diff -Naur ns-3.21/examples/tcp/tcp-variants-comparison.cc ns-3.22/examples/tcp/tcp-variants-comparison.cc
--- ns-3.21/examples/tcp/tcp-variants-comparison.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/tcp/tcp-variants-comparison.cc	2015-02-05 15:46:22.000000000 -0800
@@ -56,8 +56,12 @@
 
 bool firstCwnd = true;
 bool firstSshThr = true;
+bool firstRtt = true;
+bool firstRto = true;
 Ptr<OutputStreamWrapper> cWndStream;
 Ptr<OutputStreamWrapper> ssThreshStream;
+Ptr<OutputStreamWrapper> rttStream;
+Ptr<OutputStreamWrapper> rtoStream;
 uint32_t cWndValue;
 uint32_t ssThreshValue;
 
@@ -96,6 +100,28 @@
     }
 }
 
+static void
+RttTracer (Time oldval, Time newval)
+{
+  if (firstRtt)
+    {
+      *rttStream->GetStream () << "0.0 " << oldval.GetSeconds () << std::endl;
+      firstRtt = false;
+    }
+  *rttStream->GetStream () << Simulator::Now ().GetSeconds () << " " << newval.GetSeconds () << std::endl;
+}
+
+static void
+RtoTracer (Time oldval, Time newval)
+{
+  if (firstRto)
+    {
+      *rtoStream->GetStream () << "0.0 " << oldval.GetSeconds () << std::endl;
+      firstRto = false;
+    }
+  *rtoStream->GetStream () << Simulator::Now ().GetSeconds () << " " << newval.GetSeconds () << std::endl;
+}
+
 
 static void
 TraceCwnd (std::string cwnd_tr_file_name)
@@ -110,7 +136,23 @@
 {
   AsciiTraceHelper ascii;
   ssThreshStream = ascii.CreateFileStream (ssthresh_tr_file_name.c_str ());
-  Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/SlowStartThreshold",MakeCallback (&SsThreshTracer));
+  Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/SlowStartThreshold", MakeCallback (&SsThreshTracer));
+}
+
+static void
+TraceRtt (std::string rtt_tr_file_name)
+{
+  AsciiTraceHelper ascii;
+  rttStream = ascii.CreateFileStream (rtt_tr_file_name.c_str ());
+  Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/RTT", MakeCallback (&RttTracer));
+}
+
+static void
+TraceRto (std::string rto_tr_file_name)
+{
+  AsciiTraceHelper ascii;
+  rtoStream = ascii.CreateFileStream (rto_tr_file_name.c_str ());
+  Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/RTO", MakeCallback (&RtoTracer));
 }
 
 int main (int argc, char *argv[])
@@ -124,6 +166,8 @@
   std::string tr_file_name = "";
   std::string cwnd_tr_file_name = "";
   std::string ssthresh_tr_file_name = "";
+  std::string rtt_tr_file_name = "";
+  std::string rto_tr_file_name = "";
   double data_mbytes = 0;
   uint32_t mtu_bytes = 400;
   uint16_t num_flows = 1;
@@ -142,6 +186,8 @@
   cmd.AddValue ("tr_name", "Name of output trace file", tr_file_name);
   cmd.AddValue ("cwnd_tr_name", "Name of output trace file", cwnd_tr_file_name);
   cmd.AddValue ("ssthresh_tr_name", "Name of output trace file", ssthresh_tr_file_name);
+  cmd.AddValue ("rtt_tr_name", "Name of output trace file", rtt_tr_file_name);
+  cmd.AddValue ("rto_tr_name", "Name of output trace file", rto_tr_file_name);
   cmd.AddValue ("data", "Number of Megabytes of data to transmit", data_mbytes);
   cmd.AddValue ("mtu", "Size of IP packets to send in bytes", mtu_bytes);
   cmd.AddValue ("num_flows", "Number of flows", num_flows);
@@ -312,6 +358,16 @@
           Simulator::Schedule (Seconds (0.00001), &TraceSsThresh, ssthresh_tr_file_name);
         }
 
+      if (rtt_tr_file_name.compare ("") != 0)
+        {
+          Simulator::Schedule (Seconds (0.00001), &TraceRtt, rtt_tr_file_name);
+        }
+
+      if (rto_tr_file_name.compare ("") != 0)
+        {
+          Simulator::Schedule (Seconds (0.00001), &TraceRto, rto_tr_file_name);
+        }
+
     }
 
   UnReLink.EnablePcapAll ("TcpVariantsComparison", true);
diff -Naur ns-3.21/examples/tutorial/first.py ns-3.22/examples/tutorial/first.py
--- ns-3.21/examples/tutorial/first.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/tutorial/first.py	2015-02-05 15:46:22.000000000 -0800
@@ -35,9 +35,10 @@
 stack.Install(nodes)
 
 address = ns.internet.Ipv4AddressHelper()
-address.SetBase(ns.network.Ipv4Address("10.1.1.0"), ns.network.Ipv4Mask("255.255.255.0"))
+address.SetBase(ns.network.Ipv4Address("10.1.1.0"),
+                ns.network.Ipv4Mask("255.255.255.0"))
 
-interfaces = address.Assign (devices);
+interfaces = address.Assign(devices)
 
 echoServer = ns.applications.UdpEchoServerHelper(9)
 
@@ -47,7 +48,7 @@
 
 echoClient = ns.applications.UdpEchoClientHelper(interfaces.GetAddress(1), 9)
 echoClient.SetAttribute("MaxPackets", ns.core.UintegerValue(1))
-echoClient.SetAttribute("Interval", ns.core.TimeValue(ns.core.Seconds (1.0)))
+echoClient.SetAttribute("Interval", ns.core.TimeValue(ns.core.Seconds(1.0)))
 echoClient.SetAttribute("PacketSize", ns.core.UintegerValue(1024))
 
 clientApps = echoClient.Install(nodes.Get(0))
diff -Naur ns-3.21/examples/tutorial/fourth.cc ns-3.22/examples/tutorial/fourth.cc
--- ns-3.21/examples/tutorial/fourth.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/tutorial/fourth.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,7 +33,8 @@
       .AddConstructor<MyObject> ()
       .AddTraceSource ("MyInteger",
                        "An integer value to trace.",
-                       MakeTraceSourceAccessor (&MyObject::m_myInt))
+                       MakeTraceSourceAccessor (&MyObject::m_myInt),
+                       "ns3::TracedValue::Int32Callback")
     ;
     return tid;
   }
diff -Naur ns-3.21/examples/tutorial/hello-simulator.cc ns-3.22/examples/tutorial/hello-simulator.cc
--- ns-3.21/examples/tutorial/hello-simulator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/tutorial/hello-simulator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -16,10 +16,10 @@
 
 #include "ns3/core-module.h"
 
-NS_LOG_COMPONENT_DEFINE ("HelloSimulator");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("HelloSimulator");
+
 int
 main (int argc, char *argv[])
 {
diff -Naur ns-3.21/examples/tutorial/seventh.cc ns-3.22/examples/tutorial/seventh.cc
--- ns-3.21/examples/tutorial/seventh.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/tutorial/seventh.cc	2015-02-05 15:46:22.000000000 -0800
@@ -210,8 +210,8 @@
   uint16_t sinkPort = 8080;
   Address sinkAddress;
   Address anyAddress;
-  std::string probeName;
-  std::string probeTrace;
+  std::string probeType;
+  std::string tracePath;
   if (useV6 == false)
     {
       Ipv4AddressHelper address;
@@ -219,8 +219,8 @@
       Ipv4InterfaceContainer interfaces = address.Assign (devices);
       sinkAddress = InetSocketAddress (interfaces.GetAddress (1), sinkPort);
       anyAddress = InetSocketAddress (Ipv4Address::GetAny (), sinkPort);
-      probeName = "ns3::Ipv4PacketProbe";
-      probeTrace = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
+      probeType = "ns3::Ipv4PacketProbe";
+      tracePath = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
     }
   else
     {
@@ -229,8 +229,8 @@
       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";
+      probeType = "ns3::Ipv6PacketProbe";
+      tracePath = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
     }
 
   PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", anyAddress);
@@ -265,12 +265,12 @@
                             "Time (Seconds)",
                             "Packet Byte Count");
 
-  // Specify the probe type, probe path (in configuration namespace), and
+  // Specify the probe type, trace source 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,
+  plotHelper.PlotProbe (probeType,
+                        tracePath,
                         "OutputBytes",
                         "Packet Byte Count",
                         GnuplotAggregator::KEY_BELOW);
@@ -285,10 +285,10 @@
   // 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
+  // Specify the probe type, trace source path (in configuration namespace), and
   // probe output trace source ("OutputBytes") to write.
-  fileHelper.WriteProbe (probeName,
-                         probeTrace,
+  fileHelper.WriteProbe (probeType,
+                         tracePath,
                          "OutputBytes");
 
   Simulator::Stop (Seconds (20));
diff -Naur ns-3.21/examples/wireless/examples-to-run.py ns-3.22/examples/wireless/examples-to-run.py
--- ns-3.21/examples/wireless/examples-to-run.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/examples-to-run.py	2015-02-05 15:46:22.000000000 -0800
@@ -25,6 +25,8 @@
     ("wifi-simple-infra", "True", "True"),
     ("wifi-simple-interference", "True", "True"),
     ("wifi-wired-bridging", "True", "True"),
+    ("power-adaptation-distance --manager=ns3::ParfWifiManager --outputFileName=parf --steps=5 --stepsSize=10", "True", "True"),
+    ("power-adaptation-distance --manager=ns3::AparfWifiManager --outputFileName=aparf --steps=5 --stepsSize=10", "True", "True"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.21/examples/wireless/ht-wifi-network.cc ns-3.22/examples/wireless/ht-wifi-network.cc
--- ns-3.21/examples/wireless/ht-wifi-network.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/ht-wifi-network.cc	2015-02-05 15:46:22.000000000 -0800
@@ -15,7 +15,8 @@
  * 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>
+ * Authors: Mirko Banchi <mk.banchi@gmail.com>
+ *          Sebastien Deronne <sebastien.deronne@gmail.com>
  */
 #include "ns3/core-module.h"
 #include "ns3/network-module.h"
@@ -25,220 +26,352 @@
 #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.
+//This is a simple example of an IEEE 802.11n Wi-Fi network.
 //
 //Network topology:
-// 
+//
 //  Wifi 192.168.1.0
-// 
-//             AP
-//   *    *    *
-//   |    |    |
-//   n1   n2   n3 
+//
+//         AP
+//    *    *
+//    |    |
+//    n1   n2
 //
 //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);
-}
-
-//==========================================================================
-//==========================================================================
+NS_LOG_COMPONENT_DEFINE ("ht-wifi-network");
 
 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 = 0;
-    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';
-   }
+  double simulationTime = 10; //seconds
+  CommandLine cmd;
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("udp", "UDP if set to 1, TCP otherwise", udp);
+  cmd.Parse (argc,argv);
+
+  std::cout << "DataRate" << "\t" << "Throughput" << '\n';
+  for (int mcs = 0; mcs <= 31; mcs++)
+    {
+      uint32_t payloadSize; //1500 byte IP packet
+      if (udp)
+        {
+          payloadSize = 1472; //bytes
+        }
+      else
+        {
+          payloadSize = 1448; //bytes
+          Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
+        }
+
+      NodeContainer wifiStaNode;
+      wifiStaNode.Create (1);
+      NodeContainer wifiApNode;
+      wifiApNode.Create (1);
+
+      YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+      YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+      phy.SetChannel (channel.Create ());
+
+      if (mcs <= 7)
+        {
+          phy.Set ("ShortGuardEnabled", BooleanValue (false));
+          phy.Set ("ChannelBonding", BooleanValue (false));
+        }
+      else if (mcs > 7 && mcs <= 15)
+        {
+          phy.Set ("ShortGuardEnabled", BooleanValue (true));
+          phy.Set ("ChannelBonding", BooleanValue (false));
+        }
+      else if (mcs > 15 && mcs <= 23)
+        {
+          phy.Set ("ShortGuardEnabled", BooleanValue (false));
+          phy.Set ("ChannelBonding", BooleanValue (true));
+        }
+      else
+        {
+          phy.Set ("ShortGuardEnabled", BooleanValue (true));
+          phy.Set ("ChannelBonding", BooleanValue (true));
+        }
+
+      WifiHelper wifi = WifiHelper::Default ();
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+      HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+
+      Ssid ssid = Ssid ("ns380211n");
+
+      double datarate = 0;
+      StringValue DataRate;
+      if (mcs == 0)
+        {
+          DataRate = StringValue ("OfdmRate6_5MbpsBW20MHz");
+          datarate = 6.5;
+        }
+      else if (mcs == 1)
+        {
+          DataRate = StringValue ("OfdmRate13MbpsBW20MHz");
+          datarate = 13;
+        }
+      else if (mcs == 2)
+        {
+          DataRate = StringValue ("OfdmRate19_5MbpsBW20MHz");
+          datarate = 19.5;
+        }
+      else if (mcs == 3)
+        {
+          DataRate = StringValue ("OfdmRate26MbpsBW20MHz");
+          datarate = 26;
+        }
+      else if (mcs == 4)
+        {
+          DataRate = StringValue ("OfdmRate39MbpsBW20MHz");
+          datarate = 39;
+        }
+      else if (mcs == 5)
+        {
+          DataRate = StringValue ("OfdmRate52MbpsBW20MHz");
+          datarate = 52;
+        }
+      else if (mcs == 6)
+        {
+          DataRate = StringValue ("OfdmRate58_5MbpsBW20MHz");
+          datarate = 58.5;
+        }
+      else if (mcs == 7)
+        {
+          DataRate = StringValue ("OfdmRate65MbpsBW20MHz");
+          datarate = 65;
+        }
+      else if (mcs == 8)
+        {
+          DataRate = StringValue ("OfdmRate7_2MbpsBW20MHz");
+          datarate = 7.2;
+        }
+      else if (mcs == 9)
+        {
+          DataRate = StringValue ("OfdmRate14_4MbpsBW20MHz");
+          datarate = 14.4;
+        }
+      else if (mcs == 10)
+        {
+          DataRate = StringValue ("OfdmRate21_7MbpsBW20MHz");
+          datarate = 21.7;
+        }
+      else if (mcs == 11)
+        {
+          DataRate = StringValue ("OfdmRate28_9MbpsBW20MHz");
+          datarate = 28.9;
+        }
+      else if (mcs == 12)
+        {
+          DataRate = StringValue ("OfdmRate43_3MbpsBW20MHz");
+          datarate = 43.3;
+        }
+      else if (mcs == 13)
+        {
+          DataRate = StringValue ("OfdmRate57_8MbpsBW20MHz");
+          datarate = 57.8;
+        }
+      else if (mcs == 14)
+        {
+          DataRate = StringValue ("OfdmRate65MbpsBW20MHzShGi");
+          datarate = 65;
+        }
+      else if (mcs == 15)
+        {
+          DataRate = StringValue ("OfdmRate72_2MbpsBW20MHz");
+          datarate = 72.2;
+        }
+      else if (mcs == 16)
+        {
+          DataRate = StringValue ("OfdmRate13_5MbpsBW40MHz");
+          datarate = 13.5;
+        }
+      else if (mcs == 17)
+        {
+          DataRate = StringValue ("OfdmRate27MbpsBW40MHz");
+          datarate = 27;
+        }
+      else if (mcs == 18)
+        {
+          DataRate = StringValue ("OfdmRate40_5MbpsBW40MHz");
+          datarate = 40.5;
+        }
+      else if (mcs == 19)
+        {
+          DataRate = StringValue ("OfdmRate54MbpsBW40MHz");
+          datarate = 54;
+        }
+      else if (mcs == 20)
+        {
+          DataRate = StringValue ("OfdmRate81MbpsBW40MHz");
+          datarate = 81;
+        }
+      else if (mcs == 21)
+        {
+          DataRate = StringValue ("OfdmRate108MbpsBW40MHz");
+          datarate = 108;
+        }
+      else if (mcs == 22)
+        {
+          DataRate = StringValue ("OfdmRate121_5MbpsBW40MHz");
+          datarate = 121.5;
+        }
+      else if (mcs == 23)
+        {
+          DataRate = StringValue ("OfdmRate135MbpsBW40MHz");
+          datarate = 135;
+        }
+      else if (mcs == 24)
+        {
+          DataRate = StringValue ("OfdmRate15MbpsBW40MHz");
+          datarate = 15;
+        }
+      else if (mcs == 25)
+        {
+          DataRate = StringValue ("OfdmRate30MbpsBW40MHz");
+          datarate = 30;
+        }
+      else if (mcs == 26)
+        {
+          DataRate = StringValue ("OfdmRate45MbpsBW40MHz");
+          datarate = 45;
+        }
+      else if (mcs == 27)
+        {
+          DataRate = StringValue ("OfdmRate60MbpsBW40MHz");
+          datarate = 60;
+        }
+      else if (mcs == 28)
+        {
+          DataRate = StringValue ("OfdmRate90MbpsBW40MHz");
+          datarate = 90;
+        }
+      else if (mcs == 29)
+        {
+          DataRate = StringValue ("OfdmRate120MbpsBW40MHz");
+          datarate = 120;
+        }
+      else if (mcs == 30)
+        {
+          DataRate = StringValue ("OfdmRate135MbpsBW40MHzShGi");
+          datarate = 135;
+        }
+      else
+        {
+          DataRate = StringValue ("OfdmRate150MbpsBW40MHz");
+          datarate = 150;
+        }
+
+      wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
+                                    "ControlMode", DataRate);
+      mac.SetType ("ns3::StaWifiMac",
+                   "Ssid", SsidValue (ssid),
+                   "ActiveProbing", BooleanValue (false));
+
+      NetDeviceContainer staDevice;
+      staDevice = wifi.Install (phy, mac, wifiStaNode);
+
+      mac.SetType ("ns3::ApWifiMac",
+                   "Ssid", SsidValue (ssid));
+
+      NetDeviceContainer apDevice;
+      apDevice = wifi.Install (phy, mac, wifiApNode);
+
+      // mobility.
+      MobilityHelper mobility;
+      Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+      positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+      positionAlloc->Add (Vector (1.0, 0.0, 0.0));
+      mobility.SetPositionAllocator (positionAlloc);
+
+      mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+      mobility.Install (wifiApNode);
+      mobility.Install (wifiStaNode);
+
+      /* Internet stack*/
+      InternetStackHelper stack;
+      stack.Install (wifiApNode);
+      stack.Install (wifiStaNode);
+
+      Ipv4AddressHelper address;
+
+      address.SetBase ("192.168.1.0", "255.255.255.0");
+      Ipv4InterfaceContainer staNodeInterface;
+      Ipv4InterfaceContainer apNodeInterface;
+
+      staNodeInterface = address.Assign (staDevice);
+      apNodeInterface = address.Assign (apDevice);
+
+      /* Setting applications */
+      ApplicationContainer serverApp, sinkApp;
+      if (udp)
+        {
+          //UDP flow
+          UdpServerHelper myServer (9);
+          serverApp = myServer.Install (wifiStaNode.Get (0));
+          serverApp.Start (Seconds (0.0));
+          serverApp.Stop (Seconds (simulationTime+1));
+
+          UdpClientHelper myClient (staNodeInterface.GetAddress (0), 9);
+          myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+          myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+          myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+          ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
+          clientApp.Start (Seconds (1.0));
+          clientApp.Stop (Seconds (simulationTime+1));
+        }
+      else
+        {
+          //TCP flow
+          uint16_t port = 50000;
+          Address apLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+          PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", apLocalAddress);
+          sinkApp = packetSinkHelper.Install (wifiStaNode.Get (0));
+
+          sinkApp.Start (Seconds (0.0));
+          sinkApp.Stop (Seconds (simulationTime+1));
+
+          OnOffHelper onoff ("ns3::TcpSocketFactory",Ipv4Address::GetAny ());
+          onoff.SetAttribute ("OnTime",  StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+          onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+          onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+          onoff.SetAttribute ("DataRate", DataRateValue (1000000000)); //bit/s
+          ApplicationContainer apps;
+
+          AddressValue remoteAddress (InetSocketAddress (staNodeInterface.GetAddress (0), port));
+          onoff.SetAttribute ("Remote", remoteAddress);
+          apps.Add (onoff.Install (wifiApNode.Get (0)));
+          apps.Start (Seconds (1.0));
+          apps.Stop (Seconds (simulationTime+1));
+        }
+
+      Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+      Simulator::Stop (Seconds (simulationTime+1));
+      Simulator::Run ();
+      Simulator::Destroy ();
+
+      double throughput = 0;
+      if (udp)
+        {
+          //UDP
+          uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+          throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
+        }
+      else
+        {
+          //TCP
+          uint32_t totalPacketsThrough = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
+          throughput = totalPacketsThrough * 8 / (simulationTime * 1000000.0); //Mbit/s
+        }
+      std::cout << datarate << "\t\t" << throughput << " Mbit/s" << std::endl;
+    }
   return 0;
-} 
+}
diff -Naur ns-3.21/examples/wireless/multirate.cc ns-3.22/examples/wireless/multirate.cc
--- ns-3.21/examples/wireless/multirate.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/multirate.cc	2015-02-05 15:46:22.000000000 -0800
@@ -64,10 +64,10 @@
 #include <iostream>
 #include <fstream>
 
-NS_LOG_COMPONENT_DEFINE ("multirate");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("multirate");
+
 class Experiment
 {
 public:
diff -Naur ns-3.21/examples/wireless/ofdm-ht-validation.cc ns-3.22/examples/wireless/ofdm-ht-validation.cc
--- ns-3.21/examples/wireless/ofdm-ht-validation.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/examples/wireless/ofdm-ht-validation.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,106 @@
+/* -*-  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
+ *
+ * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+#include "ns3/core-module.h"
+#include "ns3/yans-error-rate-model.h"
+#include "ns3/nist-error-rate-model.h"
+#include "ns3/gnuplot.h"
+
+#include <fstream>
+#include <vector>
+#include <cmath>
+
+using namespace ns3;
+
+int main (int argc, char *argv[])
+{
+  uint32_t FrameSize = 2000;
+  std::ofstream yansfile ("yans-frame-success-rate-n.plt");
+  std::ofstream nistfile ("nist-frame-success-rate-n.plt");
+  std::vector <std::string> modes;
+
+  modes.push_back ("OfdmRate6_5MbpsBW20MHz");
+  modes.push_back ("OfdmRate13MbpsBW20MHz");
+  modes.push_back ("OfdmRate19_5MbpsBW20MHz");
+  modes.push_back ("OfdmRate26MbpsBW20MHz");
+  modes.push_back ("OfdmRate39MbpsBW20MHz");
+  modes.push_back ("OfdmRate52MbpsBW20MHz");
+  modes.push_back ("OfdmRate58_5MbpsBW20MHz");
+  modes.push_back ("OfdmRate65MbpsBW20MHz");
+
+  CommandLine cmd;
+  cmd.AddValue ("FrameSize", "The frame size", FrameSize);
+  cmd.Parse (argc, argv);
+
+  Gnuplot yansplot = Gnuplot ("yans-frame-success-rate-n.eps");
+  Gnuplot nistplot = Gnuplot ("nist-frame-success-rate-n.eps");
+
+  Ptr <YansErrorRateModel> yans = CreateObject<YansErrorRateModel> ();
+  Ptr <NistErrorRateModel> nist = CreateObject<NistErrorRateModel> ();
+
+  for (uint32_t i = 0; i < modes.size (); i++)
+    {
+      std::cout << modes[i] << std::endl;
+      Gnuplot2dDataset yansdataset (modes[i]);
+      Gnuplot2dDataset nistdataset (modes[i]);
+
+      for (double snr = -5.0; snr <= 30.0; snr += 0.1)
+        {
+          double ps = yans->GetChunkSuccessRate (WifiMode (modes[i]), std::pow (10.0,snr / 10.0), FrameSize * 8);
+          yansdataset.Add (snr, ps);
+          ps = nist->GetChunkSuccessRate (WifiMode (modes[i]), std::pow (10.0,snr / 10.0), FrameSize * 8);
+          nistdataset.Add (snr, ps);
+        }
+
+      yansplot.AddDataset (yansdataset);
+      nistplot.AddDataset (nistdataset);
+    }
+
+  yansplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  yansplot.SetLegend ("SNR(dB)", "Frame Success Rate");
+  yansplot.SetExtra  ("set xrange [-5:30]\n\
+set yrange [0:1.2]\n\
+set style line 1 linewidth 5\n\
+set style line 2 linewidth 5\n\
+set style line 3 linewidth 5\n\
+set style line 4 linewidth 5\n\
+set style line 5 linewidth 5\n\
+set style line 6 linewidth 5\n\
+set style line 7 linewidth 5\n\
+set style line 8 linewidth 5\n\
+set style increment user"                                                                                                                                                                                                                                                                                                                                   );
+  yansplot.GenerateOutput (yansfile);
+  yansfile.close ();
+
+  nistplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  nistplot.SetLegend ("SNR(dB)", "Frame Success Rate");
+  nistplot.SetExtra  ("set xrange [-5:30]\n\
+set yrange [0:1.2]\n\
+set style line 1 linewidth 5\n\
+set style line 2 linewidth 5\n\
+set style line 3 linewidth 5\n\
+set style line 4 linewidth 5\n\
+set style line 5 linewidth 5\n\
+set style line 6 linewidth 5\n\
+set style line 7 linewidth 5\n\
+set style line 8 linewidth 5\n\
+set style increment user"                                                                                                                                                                                                                                                                                                                                   );
+
+  nistplot.GenerateOutput (nistfile);
+  nistfile.close ();
+}
+
diff -Naur ns-3.21/examples/wireless/power-adaptation-distance.cc ns-3.22/examples/wireless/power-adaptation-distance.cc
--- ns-3.21/examples/wireless/power-adaptation-distance.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/examples/wireless/power-adaptation-distance.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,472 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universidad de la República - Uruguay
+ *
+ * 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: Matias Richart <mrichart@fing.edu.uy>
+ */
+
+/**
+ * This example program is designed to illustrate the behavior of two
+ * power/rate-adaptive WiFi rate controls; namely, ns3::ParfWifiManager
+ * and ns3::AparfWifiManager.
+ *
+ * The output of this is typically two plot files, named throughput-parf.plt
+ * (or throughput-aparf.plt, if Aparf is used) and power-parf.plt If 
+ * Gnuplot program is available, one can use it to convert the plt file
+ * into an eps file, by running:
+ * \code{.sh}
+ *   gnuplot throughput-parf.plt
+ * \endcode
+ * Also, to enable logging of rate and power changes to the terminal, set this
+ * environment variable:
+ * \code{.sh}
+ *   export NS_LOG=PowerAdaptationDistance=level_info
+ * \endcode
+ *
+ * This simulation consist of 2 nodes, one AP and one STA.
+ * The AP generates UDP traffic with a CBR of 54 Mbps to the STA.
+ * The AP can use any power and rate control mechanism and the STA uses 
+ * only Minstrel rate control.
+ * The STA can be configured to move away from (or towards to) the AP.
+ * By default, the AP is at coordinate (0,0,0) and the STA starts at 
+ * coordinate (5,0,0) (meters) and moves away on the x axis by 1 meter every
+ * second.
+ *
+ * The output consists of:
+ * - A plot of average throughput vs. distance.
+ * - A plot of average transmit power vs. distance.
+ * - (if logging is enabled) the changes of power and rate to standard output.
+ *
+ * The Average Transmit Power is defined as an average of the power
+ * consumed per measurement interval, expressed in milliwatts.  The
+ * power level for each frame transmission is reported by the simulator, 
+ * and the energy consumed is obtained by multiplying the power by the
+ * frame duration.  At every 'stepTime' (defaulting to 1 second), the
+ * total energy for the collection period is divided by the step time 
+ * and converted from dbm to milliwatt units, and this average is 
+ * plotted against time.
+ *
+ * When neither Parf nor Aparf is selected as the rate control, the
+ * generation of the plot of average transmit power vs distance is suppressed
+ * since the other Wifi rate controls do not support the necessary callbacks
+ * for computing the average power.
+ *
+ * To display all the possible arguments and their defaults:
+ * \code{.sh}
+ *   ./waf --run "power-adaptation-distance --help"
+ * \endcode
+ * 
+ * Example usage (selecting Aparf rather than Parf):
+ * \code{.sh}
+ *   ./waf --run "power-adaptation-distance --manager=ns3::AparfWifiManager --outputFileName=aparf"
+ * \endcode
+ *
+ * Another example (moving towards the AP):
+ * \code{.sh}
+ *   ./waf --run "power-adaptation-distance --manager=ns3::AparfWifiManager --outputFileName=aparf --stepsSize=-1 --STA1_x=200"
+ * \endcode
+ *
+ * To enable the log of rate and power changes:
+ * \code{.sh}
+ *   export NS_LOG=PowerAdaptationDistance=level_info
+ * \endcode
+ */
+
+#include <sstream>
+#include <fstream>
+#include <math.h>
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/stats-module.h"
+#include "ns3/flow-monitor-module.h"
+
+using namespace ns3;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("PowerAdaptationDistance");
+
+// packet size generated at the AP
+static const uint32_t packetSize = 1420;
+
+class NodeStatistics
+{
+public:
+  NodeStatistics (NetDeviceContainer aps, NetDeviceContainer stas);
+
+  void CheckStatistics (double time);
+
+  void PhyCallback (std::string path, Ptr<const Packet> packet);
+  void RxCallback (std::string path, Ptr<const Packet> packet, const Address &from);
+  void PowerCallback (std::string path, uint8_t power, Mac48Address dest);
+  void RateCallback (std::string path, uint32_t rate, Mac48Address dest);
+  void SetPosition (Ptr<Node> node, Vector position);
+  void AdvancePosition (Ptr<Node> node, int stepsSize, int stepsTime);
+  Vector GetPosition (Ptr<Node> node);
+
+  Gnuplot2dDataset GetDatafile ();
+  Gnuplot2dDataset GetPowerDatafile ();
+
+private:
+  typedef std::vector<std::pair<Time,WifiMode> > TxTime;
+  void SetupPhy (Ptr<WifiPhy> phy);
+  Time GetCalcTxTime (WifiMode mode);
+
+  std::map<Mac48Address, uint32_t> actualPower;
+  std::map<Mac48Address, WifiMode> actualMode;
+  uint32_t m_bytesTotal;
+  double totalEnergy;
+  double totalTime;
+  Ptr<WifiPhy> myPhy;
+  TxTime timeTable;
+  Gnuplot2dDataset m_output;
+  Gnuplot2dDataset m_output_power;
+};
+
+NodeStatistics::NodeStatistics (NetDeviceContainer aps, NetDeviceContainer stas)
+{
+  Ptr<NetDevice> device = aps.Get (0);
+  Ptr<WifiNetDevice> wifiDevice = DynamicCast<WifiNetDevice> (device);
+  Ptr<WifiPhy> phy = wifiDevice->GetPhy ();
+  myPhy = phy;
+  SetupPhy (phy);
+  for (uint32_t j = 0; j < stas.GetN (); j++)
+    {
+      Ptr<NetDevice> staDevice = stas.Get (j);
+      Ptr<WifiNetDevice> wifiStaDevice = DynamicCast<WifiNetDevice> (staDevice);
+      Mac48Address addr = wifiStaDevice->GetMac ()->GetAddress ();
+      actualPower[addr] = 17;
+      actualMode[addr] = phy->GetMode (0);
+    }
+  actualMode[Mac48Address ("ff:ff:ff:ff:ff:ff")] = phy->GetMode (0);
+  totalEnergy = 0;
+  totalTime = 0;
+  m_bytesTotal = 0;
+  m_output.SetTitle ("Throughput Mbits/s");
+  m_output_power.SetTitle ("Average Transmit Power");
+}
+
+void
+NodeStatistics::SetupPhy (Ptr<WifiPhy> phy)
+{
+  uint32_t nModes = phy->GetNModes ();
+  for (uint32_t i = 0; i < nModes; i++)
+    {
+      WifiMode mode = phy->GetMode (i);
+      WifiTxVector txVector;
+      txVector.SetMode (mode);
+      timeTable.push_back (std::make_pair (phy->CalculateTxDuration (packetSize, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency (), 0, 0), mode));
+    }
+}
+
+Time
+NodeStatistics::GetCalcTxTime (WifiMode mode)
+{
+  for (TxTime::const_iterator i = timeTable.begin (); i != timeTable.end (); i++)
+    {
+      if (mode == i->second)
+        {
+          return i->first;
+        }
+    }
+  NS_ASSERT (false);
+  return Seconds (0);
+}
+
+void
+NodeStatistics::PhyCallback (std::string path, Ptr<const Packet> packet)
+{
+  WifiMacHeader head;
+  packet->PeekHeader (head);
+  Mac48Address dest = head.GetAddr1 ();
+
+  totalEnergy += actualPower[dest] * GetCalcTxTime (actualMode[dest]).GetSeconds ();
+  totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
+
+}
+
+void
+NodeStatistics::PowerCallback (std::string path, uint8_t power, Mac48Address dest)
+{
+  double   txPowerBaseDbm = myPhy->GetTxPowerStart ();
+  double   txPowerEndDbm = myPhy->GetTxPowerEnd ();
+  uint32_t nTxPower = myPhy->GetNTxPower ();
+  double dbm;
+  if (nTxPower > 1)
+    {
+      dbm = txPowerBaseDbm + power * (txPowerEndDbm - txPowerBaseDbm) / (nTxPower - 1);
+    }
+  else
+    {
+      NS_ASSERT_MSG (txPowerBaseDbm == txPowerEndDbm, "cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1");
+      dbm = txPowerBaseDbm;
+    }
+  actualPower[dest] = dbm;
+}
+
+void
+NodeStatistics::RateCallback (std::string path, uint32_t rate, Mac48Address dest)
+{
+  actualMode[dest] = myPhy->GetMode (rate);
+}
+
+void
+NodeStatistics::RxCallback (std::string path, Ptr<const Packet> packet, const Address &from)
+{
+  m_bytesTotal += packet->GetSize ();
+}
+
+void
+NodeStatistics::CheckStatistics (double time)
+{
+
+}
+
+void
+NodeStatistics::SetPosition (Ptr<Node> node, Vector position)
+{
+  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
+  mobility->SetPosition (position);
+}
+
+Vector
+NodeStatistics::GetPosition (Ptr<Node> node)
+{
+  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
+  return mobility->GetPosition ();
+}
+
+void
+NodeStatistics::AdvancePosition (Ptr<Node> node, int stepsSize, int stepsTime)
+{
+  Vector pos = GetPosition (node);
+  double mbs = ((m_bytesTotal * 8.0) / (1000000 * stepsTime));
+  m_bytesTotal = 0;
+  double atm = pow (10, ((totalEnergy / stepsTime) / 10));
+  totalEnergy = 0;
+  totalTime = 0;
+  m_output_power.Add (pos.x, atm);
+  m_output.Add (pos.x, mbs);
+  pos.x += stepsSize;
+  SetPosition (node, pos);
+  NS_LOG_INFO ("At time " << Simulator::Now ().GetSeconds () << " sec; setting new position to " << pos);
+  Simulator::Schedule (Seconds (stepsTime), &NodeStatistics::AdvancePosition, this, node, stepsSize, stepsTime);
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetDatafile ()
+{
+  return m_output;
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetPowerDatafile ()
+{
+  return m_output_power;
+}
+
+void PowerCallback (std::string path, uint8_t power, Mac48Address dest)
+{
+  NS_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Power " << (int)power);
+}
+
+void RateCallback (std::string path, uint32_t rate, Mac48Address dest)
+{
+  NS_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Rate " <<  rate);
+}
+
+int main (int argc, char *argv[])
+{
+  double maxPower = 17;
+  double minPower = 0;
+  uint32_t powerLevels = 18;
+
+  uint32_t rtsThreshold = 2346;
+  std::string manager = "ns3::ParfWifiManager";
+  std::string outputFileName = "parf";
+  int ap1_x = 0;
+  int ap1_y = 0;
+  int sta1_x = 5;
+  int sta1_y = 0;
+  uint32_t steps = 200;
+  uint32_t stepsSize = 1;
+  uint32_t stepsTime = 1;
+
+  CommandLine cmd;
+  cmd.AddValue ("manager", "PRC Manager", manager);
+  cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold);
+  cmd.AddValue ("outputFileName", "Output filename", outputFileName);
+  cmd.AddValue ("steps", "How many different distances to try", steps);
+  cmd.AddValue ("stepsTime", "Time on each step", stepsTime);
+  cmd.AddValue ("stepsSize", "Distance between steps", stepsSize);
+  cmd.AddValue ("maxPower", "Maximum available transmission level (dbm).", maxPower);
+  cmd.AddValue ("minPower", "Minimum available transmission level (dbm).", minPower);
+  cmd.AddValue ("powerLevels", "Number of transmission power levels available between "
+                "TxPowerStart and TxPowerEnd included.", powerLevels);
+  cmd.AddValue ("AP1_x", "Position of AP1 in x coordinate", ap1_x);
+  cmd.AddValue ("AP1_y", "Position of AP1 in y coordinate", ap1_y);
+  cmd.AddValue ("STA1_x", "Position of STA1 in x coordinate", sta1_x);
+  cmd.AddValue ("STA1_y", "Position of STA1 in y coordinate", sta1_y);
+  cmd.Parse (argc, argv);
+
+  if (steps == 0)
+    {
+      std::cout << "Exiting without running simulation; steps value of 0" << std::endl;
+    }
+
+  uint32_t simuTime = (steps + 1) * stepsTime;
+
+  // Define the APs
+  NodeContainer wifiApNodes;
+  wifiApNodes.Create (1);
+
+  //Define the STAs
+  NodeContainer wifiStaNodes;
+  wifiStaNodes.Create (1);
+
+  WifiHelper wifi = WifiHelper::Default ();
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
+  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
+  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
+
+  wifiPhy.SetChannel (wifiChannel.Create ());
+
+  NetDeviceContainer wifiApDevices;
+  NetDeviceContainer wifiStaDevices;
+  NetDeviceContainer wifiDevices;
+
+  //Configure the STA node
+  wifi.SetRemoteStationManager ("ns3::MinstrelWifiManager", "RtsCtsThreshold", UintegerValue (rtsThreshold));
+  wifiPhy.Set ("TxPowerStart", DoubleValue (maxPower));
+  wifiPhy.Set ("TxPowerEnd", DoubleValue (maxPower));
+
+  Ssid ssid = Ssid ("AP");
+  wifiMac.SetType ("ns3::StaWifiMac",
+                   "Ssid", SsidValue (ssid),
+                   "ActiveProbing", BooleanValue (false));
+  wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
+
+  //Configure the AP node
+  wifi.SetRemoteStationManager (manager, "DefaultTxPowerLevel", UintegerValue (maxPower), "RtsCtsThreshold", UintegerValue (rtsThreshold));
+  wifiPhy.Set ("TxPowerStart", DoubleValue (minPower));
+  wifiPhy.Set ("TxPowerEnd", DoubleValue (maxPower));
+  wifiPhy.Set ("TxPowerLevels", UintegerValue (powerLevels));
+
+  ssid = Ssid ("AP");
+  wifiMac.SetType ("ns3::ApWifiMac",
+                   "Ssid", SsidValue (ssid));
+  wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (0)));
+
+  wifiDevices.Add (wifiStaDevices);
+  wifiDevices.Add (wifiApDevices);
+
+  // Configure the mobility.
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  //Initial position of AP and STA
+  positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0));
+  NS_LOG_INFO ("Setting initial AP position to " << Vector (ap1_x, ap1_y, 0.0));
+  positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0));
+  NS_LOG_INFO ("Setting initial STA position to " << Vector (sta1_x, sta1_y, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (wifiApNodes.Get (0));
+  mobility.Install (wifiStaNodes.Get (0));
+ 
+  //Statistics counter
+  NodeStatistics statistics = NodeStatistics (wifiApDevices, wifiStaDevices);
+
+  //Move the STA by stepsSize meters every stepsTime seconds
+  Simulator::Schedule (Seconds (0.5 + stepsTime), &NodeStatistics::AdvancePosition, &statistics, wifiStaNodes.Get (0), stepsSize, stepsTime);
+
+  //Configure the IP stack
+  InternetStackHelper stack;
+  stack.Install (wifiApNodes);
+  stack.Install (wifiStaNodes);
+  Ipv4AddressHelper address;
+  address.SetBase ("10.1.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer i = address.Assign (wifiDevices);
+  Ipv4Address sinkAddress = i.GetAddress (0);
+  uint16_t port = 9;
+
+  //Configure the CBR generator
+  PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
+  ApplicationContainer apps_sink = sink.Install (wifiStaNodes.Get (0));
+
+  OnOffHelper onoff ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
+  onoff.SetConstantRate (DataRate ("54Mb/s"), packetSize);
+  onoff.SetAttribute ("StartTime", TimeValue (Seconds (0.5)));
+  onoff.SetAttribute ("StopTime", TimeValue (Seconds (simuTime)));
+  ApplicationContainer apps_source = onoff.Install (wifiApNodes.Get (0));
+
+  apps_sink.Start (Seconds (0.5));
+  apps_sink.Stop (Seconds (simuTime));
+
+  //------------------------------------------------------------
+  //-- Setup stats and data collection
+  //--------------------------------------------
+
+  //Register packet receptions to calculate throughput
+  Config::Connect ("/NodeList/1/ApplicationList/*/$ns3::PacketSink/Rx",
+                   MakeCallback (&NodeStatistics::RxCallback, &statistics));
+
+  //Register power and rate changes to calculate the Average Transmit Power
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/PowerChange",
+                   MakeCallback (&NodeStatistics::PowerCallback, &statistics));
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
+                   MakeCallback (&NodeStatistics::RateCallback, &statistics));
+
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
+                   MakeCallback (&NodeStatistics::PhyCallback, &statistics));
+
+  //Callbacks to print every change of power and rate
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/PowerChange",
+                   MakeCallback (PowerCallback));
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
+                   MakeCallback (RateCallback));
+
+  Simulator::Stop (Seconds (simuTime));
+  Simulator::Run ();
+
+  std::ofstream outfile (("throughput-" + outputFileName + ".plt").c_str ());
+  Gnuplot gnuplot = Gnuplot (("throughput-" + outputFileName + ".eps").c_str (), "Throughput");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Throughput (Mb/s)");
+  gnuplot.SetTitle ("Throughput (AP to STA) vs time");
+  gnuplot.AddDataset (statistics.GetDatafile ());
+  gnuplot.GenerateOutput (outfile);
+
+  if (manager.compare ("ns3::ParfWifiManager") == 0 ||
+      manager.compare ("ns3::AparfWifiManager") == 0)
+    {
+      std::ofstream outfile2 (("power-" + outputFileName + ".plt").c_str ());
+      gnuplot = Gnuplot (("power-" + outputFileName + ".eps").c_str (), "Average Transmit Power");
+      gnuplot.SetTerminal ("post eps color enhanced");
+      gnuplot.SetLegend ("Time (seconds)", "Power (mW)");
+      gnuplot.SetTitle ("Average transmit power (AP to STA) vs time");
+      gnuplot.AddDataset (statistics.GetPowerDatafile ());
+      gnuplot.GenerateOutput (outfile2);
+    }
+
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.21/examples/wireless/power-adaptation-interference.cc ns-3.22/examples/wireless/power-adaptation-interference.cc
--- ns-3.21/examples/wireless/power-adaptation-interference.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/examples/wireless/power-adaptation-interference.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,671 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universidad de la República - Uruguay
+ *
+ * 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: Matias Richart <mrichart@fing.edu.uy>
+ */
+
+/**
+ * This example program is designed to illustrate the behavior of two
+ * power/rate-adaptive WiFi rate controls; namely, ns3::ParfWifiManager
+ * and ns3::AparfWifiManager.
+ *
+ * This simulation consist of 4 nodes, two APs and two STAs.
+ * The APs generates UDP traffic with a CBR of 54 Mbps to the STAs.
+ * The APa use any power and rate control mechanism, and the STAs use only 
+ * Minstrel rate control.
+ * The STAs can be configured to be at any distance from the APs.
+ *
+ * The objective is to test power and rate control in the links with 
+ * interference from the other link.
+ *
+ * The output consists of:
+ * - A plot of average throughput vs. time.
+ * - A plot of average transmit power vs. time.
+ * - Plots for the percentage of time the APs are in each MAC state (IDLE, TX, RX, BUSY)
+ * - If enabled, the changes of power and rate to standard output.
+ * - If enabled, the average throughput, delay, jitter and tx opportunity for the total simulation time.
+ *
+ * Example usage:
+ * \code{.sh}
+ *   ./waf --run "power-adaptation-interference --manager=ns3::AparfWifiManager --outputFileName=aparf"
+ * \endcode
+ *
+ * Another example (changing STAs position):
+ * \code{.sh}
+ *   ./waf --run "power-adaptation-interference --manager=ns3::AparfWifiManager --outputFileName=aparf --STA1_x=5 --STA2_x=205"
+ * \endcode
+ *
+ * To enable the log of rate and power changes:
+ * \code{.sh}
+ *   export NS_LOG=PowerAdaptationInterference=level_info
+ * \endcode
+ */
+
+#include <sstream>
+#include <fstream>
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/stats-module.h"
+#include "ns3/flow-monitor-module.h"
+
+using namespace ns3;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("PowerAdaptationInterference");
+
+// packet size generated at the AP
+static const uint32_t packetSize = 1420;
+
+class NodeStatistics
+{
+public:
+  NodeStatistics (NetDeviceContainer aps, NetDeviceContainer stas);
+
+  void CheckStatistics (double time);
+
+  void PhyCallback (std::string path, Ptr<const Packet> packet);
+  void RxCallback (std::string path, Ptr<const Packet> packet, const Address &from);
+  void PowerCallback (std::string path, uint8_t power, Mac48Address dest);
+  void RateCallback (std::string path, uint32_t rate, Mac48Address dest);
+  void StateCallback (std::string path, Time init, Time duration, enum WifiPhy::State state);
+
+  Gnuplot2dDataset GetDatafile ();
+  Gnuplot2dDataset GetPowerDatafile ();
+  Gnuplot2dDataset GetIdleDatafile ();
+  Gnuplot2dDataset GetBusyDatafile ();
+  Gnuplot2dDataset GetTxDatafile ();
+  Gnuplot2dDataset GetRxDatafile ();
+
+  double GetBusyTime ();
+
+private:
+  typedef std::vector<std::pair<Time,WifiMode> > TxTime;
+  void SetupPhy (Ptr<WifiPhy> phy);
+  Time GetCalcTxTime (WifiMode mode);
+
+  std::map<Mac48Address, uint32_t> actualPower;
+  std::map<Mac48Address, WifiMode> actualMode;
+  uint32_t m_bytesTotal;
+  double totalEnergy;
+  double totalTime;
+  double busyTime;
+  double idleTime;
+  double txTime;
+  double rxTime;
+  double totalBusyTime;
+  double totalIdleTime;
+  double totalTxTime;
+  double totalRxTime;
+  Ptr<WifiPhy> myPhy;
+  TxTime timeTable;
+  Gnuplot2dDataset m_output;
+  Gnuplot2dDataset m_output_power;
+  Gnuplot2dDataset m_output_idle;
+  Gnuplot2dDataset m_output_busy;
+  Gnuplot2dDataset m_output_rx;
+  Gnuplot2dDataset m_output_tx;
+};
+
+NodeStatistics::NodeStatistics (NetDeviceContainer aps, NetDeviceContainer stas)
+{
+  Ptr<NetDevice> device = aps.Get (0);
+  Ptr<WifiNetDevice> wifiDevice = DynamicCast<WifiNetDevice> (device);
+  Ptr<WifiPhy> phy = wifiDevice->GetPhy ();
+  myPhy = phy;
+  SetupPhy (phy);
+  for (uint32_t j = 0; j < stas.GetN (); j++)
+    {
+      Ptr<NetDevice> staDevice = stas.Get (j);
+      Ptr<WifiNetDevice> wifiStaDevice = DynamicCast<WifiNetDevice> (staDevice);
+      Mac48Address addr = wifiStaDevice->GetMac ()->GetAddress ();
+      actualPower[addr] = 17;
+      actualMode[addr] = phy->GetMode (0);
+    }
+  actualMode[Mac48Address ("ff:ff:ff:ff:ff:ff")] = phy->GetMode (0);
+  totalEnergy = 0;
+  totalTime = 0;
+  busyTime = 0;
+  idleTime = 0;
+  txTime = 0;
+  rxTime = 0;
+  totalBusyTime = 0;
+  totalIdleTime = 0;
+  totalTxTime = 0;
+  totalRxTime = 0;
+  m_bytesTotal = 0;
+  m_output.SetTitle ("Throughput Mbits/s");
+  m_output_idle.SetTitle ("Idle Time");
+  m_output_busy.SetTitle ("Busy Time");
+  m_output_rx.SetTitle ("RX Time");
+  m_output_tx.SetTitle ("TX Time");
+}
+
+void
+NodeStatistics::SetupPhy (Ptr<WifiPhy> phy)
+{
+  uint32_t nModes = phy->GetNModes ();
+  for (uint32_t i = 0; i < nModes; i++)
+    {
+      WifiMode mode = phy->GetMode (i);
+      WifiTxVector txVector;
+      txVector.SetMode (mode);
+      timeTable.push_back (std::make_pair (phy->CalculateTxDuration (packetSize, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency (), 0, 0), mode));
+    }
+}
+
+Time
+NodeStatistics::GetCalcTxTime (WifiMode mode)
+{
+  for (TxTime::const_iterator i = timeTable.begin (); i != timeTable.end (); i++)
+    {
+      if (mode == i->second)
+        {
+          return i->first;
+        }
+    }
+  NS_ASSERT (false);
+  return Seconds (0);
+}
+
+void
+NodeStatistics::PhyCallback (std::string path, Ptr<const Packet> packet)
+{
+  WifiMacHeader head;
+  packet->PeekHeader (head);
+  Mac48Address dest = head.GetAddr1 ();
+
+  totalEnergy += actualPower[dest] * GetCalcTxTime (actualMode[dest]).GetSeconds ();
+  totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
+
+}
+
+void
+NodeStatistics::PowerCallback (std::string path, uint8_t power, Mac48Address dest)
+{
+  double   txPowerBaseDbm = myPhy->GetTxPowerStart ();
+  double   txPowerEndDbm = myPhy->GetTxPowerEnd ();
+  uint32_t nTxPower = myPhy->GetNTxPower ();
+  double dbm;
+  if (nTxPower > 1)
+    {
+      dbm = txPowerBaseDbm + power * (txPowerEndDbm - txPowerBaseDbm) / (nTxPower - 1);
+    }
+  else
+    {
+      NS_ASSERT_MSG (txPowerBaseDbm == txPowerEndDbm, "cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1");
+      dbm = txPowerBaseDbm;
+    }
+  actualPower[dest] = dbm;
+}
+
+void
+NodeStatistics::RateCallback (std::string path, uint32_t rate, Mac48Address dest)
+{
+  actualMode[dest] = myPhy->GetMode (rate);
+}
+
+void
+NodeStatistics::StateCallback (std::string path, Time init, Time duration, enum WifiPhy::State state)
+{
+  if (state == WifiPhy::CCA_BUSY)
+    {
+      busyTime += duration.GetSeconds ();
+      totalBusyTime += duration.GetSeconds ();
+    }
+  else if (state == WifiPhy::IDLE)
+    {
+      idleTime += duration.GetSeconds ();
+      totalIdleTime += duration.GetSeconds ();
+    }
+  else if (state == WifiPhy::TX)
+    {
+      txTime += duration.GetSeconds ();
+      totalTxTime += duration.GetSeconds ();
+    }
+  else if (state == WifiPhy::RX)
+    {
+      rxTime += duration.GetSeconds ();
+      totalRxTime += duration.GetSeconds ();
+    }
+}
+
+void
+NodeStatistics::RxCallback (std::string path, Ptr<const Packet> packet, const Address &from)
+{
+  m_bytesTotal += packet->GetSize ();
+}
+
+void
+NodeStatistics::CheckStatistics (double time)
+{
+  double mbs = ((m_bytesTotal * 8.0) / (1000000 * time));
+  m_bytesTotal = 0;
+  double atm = pow (10, ((totalEnergy / time) / 10));
+  totalEnergy = 0;
+  totalTime = 0;
+  m_output_power.Add ((Simulator::Now ()).GetSeconds (), atm);
+  m_output.Add ((Simulator::Now ()).GetSeconds (), mbs);
+
+  m_output_idle.Add ((Simulator::Now ()).GetSeconds (), idleTime * 100);
+  m_output_busy.Add ((Simulator::Now ()).GetSeconds (), busyTime * 100);
+  m_output_tx.Add ((Simulator::Now ()).GetSeconds (), txTime * 100);
+  m_output_rx.Add ((Simulator::Now ()).GetSeconds (), rxTime * 100);
+  busyTime = 0;
+  idleTime = 0;
+  txTime = 0;
+  rxTime = 0;
+
+  Simulator::Schedule (Seconds (time), &NodeStatistics::CheckStatistics, this, time);
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetDatafile ()
+{
+  return m_output;
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetPowerDatafile ()
+{
+  return m_output_power;
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetIdleDatafile ()
+{
+  return m_output_idle;
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetBusyDatafile ()
+{
+  return m_output_busy;
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetRxDatafile ()
+{
+  return m_output_rx;
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetTxDatafile ()
+{
+  return m_output_tx;
+}
+
+double
+NodeStatistics::GetBusyTime ()
+{
+  return totalBusyTime + totalRxTime;
+}
+
+void PowerCallback (std::string path, uint8_t power, Mac48Address dest)
+{
+  NS_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Power " <<  (int)power);
+  // end PowerCallback
+}
+
+void RateCallback (std::string path, uint32_t rate, Mac48Address dest)
+{
+  NS_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Rate " <<  rate);
+  // end PowerCallback
+}
+
+int main (int argc, char *argv[])
+{
+  //LogComponentEnable("ConstantRateWifiManager", LOG_LEVEL_FUNCTION);
+
+  double maxPower = 17;
+  double minPower = 0;
+  uint32_t powerLevels = 18;
+
+  uint32_t rtsThreshold = 2346;
+  std::string manager = "ns3::ParfWifiManager";
+  std::string outputFileName = "parf";
+  int ap1_x = 0;
+  int ap1_y = 0;
+  int sta1_x = 10;
+  int sta1_y = 0;
+  int ap2_x = 200;
+  int ap2_y = 0;
+  int sta2_x = 180;
+  int sta2_y = 0;
+  uint32_t simuTime = 100;
+
+  CommandLine cmd;
+  cmd.AddValue ("manager", "PRC Manager", manager);
+  cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold);
+  cmd.AddValue ("outputFileName", "Output filename", outputFileName);
+  cmd.AddValue ("simuTime", "Total simulation time (sec)", simuTime);
+  cmd.AddValue ("maxPower", "Maximum available transmission level (dbm).", maxPower);
+  cmd.AddValue ("minPower", "Minimum available transmission level (dbm).", minPower);
+  cmd.AddValue ("powerLevels", "Number of transmission power levels available between "
+                "TxPowerStart and TxPowerEnd included.", powerLevels);
+  cmd.AddValue ("AP1_x", "Position of AP1 in x coordinate", ap1_x);
+  cmd.AddValue ("AP1_y", "Position of AP1 in y coordinate", ap1_y);
+  cmd.AddValue ("STA1_x", "Position of STA1 in x coordinate", sta1_x);
+  cmd.AddValue ("STA1_y", "Position of STA1 in y coordinate", sta1_y);
+  cmd.AddValue ("AP2_x", "Position of AP2 in x coordinate", ap2_x);
+  cmd.AddValue ("AP2_y", "Position of AP2 in y coordinate", ap2_y);
+  cmd.AddValue ("STA2_x", "Position of STA2 in x coordinate", sta2_x);
+  cmd.AddValue ("STA2_y", "Position of STA2 in y coordinate", sta2_y);
+  cmd.Parse (argc, argv);
+
+  // Define the APs
+  NodeContainer wifiApNodes;
+  wifiApNodes.Create (2);
+
+  //Define the STAs
+  NodeContainer wifiStaNodes;
+  wifiStaNodes.Create (2);
+
+  WifiHelper wifi = WifiHelper::Default ();
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
+  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
+  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
+
+  wifiPhy.SetChannel (wifiChannel.Create ());
+
+  NetDeviceContainer wifiApDevices;
+  NetDeviceContainer wifiStaDevices;
+  NetDeviceContainer wifiDevices;
+
+  //Configure the STA nodes
+  wifi.SetRemoteStationManager ("ns3::AarfWifiManager", "RtsCtsThreshold", UintegerValue (rtsThreshold));
+  //wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode",StringValue ("ErpOfdmRate6Mbps"),"ControlMode",StringValue ("ErpOfdmRate6Mbps"));
+  wifiPhy.Set ("TxPowerStart", DoubleValue (maxPower));
+  wifiPhy.Set ("TxPowerEnd", DoubleValue (maxPower));
+
+  Ssid ssid = Ssid ("AP0");
+  wifiMac.SetType ("ns3::StaWifiMac",
+                   "Ssid", SsidValue (ssid),
+                   "ActiveProbing", BooleanValue (false),
+                   "MaxMissedBeacons", UintegerValue (1000));
+  wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
+
+  ssid = Ssid ("AP1");
+  wifiMac.SetType ("ns3::StaWifiMac",
+                   "Ssid", SsidValue (ssid),
+                   "ActiveProbing", BooleanValue (false));
+  wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (1)));
+
+  //Configure the AP nodes
+  wifi.SetRemoteStationManager (manager, "DefaultTxPowerLevel", UintegerValue (maxPower), "RtsCtsThreshold", UintegerValue (rtsThreshold));
+  wifiPhy.Set ("TxPowerStart", DoubleValue (minPower));
+  wifiPhy.Set ("TxPowerEnd", DoubleValue (maxPower));
+  wifiPhy.Set ("TxPowerLevels", UintegerValue (powerLevels));
+
+  ssid = Ssid ("AP0");
+  wifiMac.SetType ("ns3::ApWifiMac",
+                   "Ssid", SsidValue (ssid));
+  wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (0)));
+
+  ssid = Ssid ("AP1");
+  wifiMac.SetType ("ns3::ApWifiMac",
+                   "Ssid", SsidValue (ssid),
+                   "BeaconInterval", TimeValue (MicroSeconds (103424))); //for avoiding collisions);
+  wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (1)));
+
+  wifiDevices.Add (wifiStaDevices);
+  wifiDevices.Add (wifiApDevices);
+
+  // Configure the mobility.
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0));
+  positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0));
+  positionAlloc->Add (Vector (ap2_x, ap2_y, 0.0));
+  positionAlloc->Add (Vector (sta2_x, sta2_y, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (wifiApNodes.Get (0));
+  mobility.Install (wifiStaNodes.Get (0));
+  mobility.Install (wifiApNodes.Get (1));
+  mobility.Install (wifiStaNodes.Get (1));
+
+
+  //Configure the IP stack
+  InternetStackHelper stack;
+  stack.Install (wifiApNodes);
+  stack.Install (wifiStaNodes);
+  Ipv4AddressHelper address;
+  address.SetBase ("10.1.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer i = address.Assign (wifiDevices);
+  Ipv4Address sinkAddress = i.GetAddress (0);
+  Ipv4Address sinkAddress1 = i.GetAddress (1);
+  uint16_t port = 9;
+
+  //Configure the CBR generator
+  PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
+  ApplicationContainer apps_sink = sink.Install (wifiStaNodes.Get (0));
+
+  OnOffHelper onoff ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
+  onoff.SetConstantRate (DataRate ("54Mb/s"), packetSize);
+  onoff.SetAttribute ("StartTime", TimeValue (Seconds (0.0)));
+  onoff.SetAttribute ("StopTime", TimeValue (Seconds (100.0)));
+  ApplicationContainer apps_source = onoff.Install (wifiApNodes.Get (0));
+
+  PacketSinkHelper sink1 ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress1, port));
+  apps_sink.Add (sink1.Install (wifiStaNodes.Get (1)));
+
+  OnOffHelper onoff1 ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress1, port));
+  onoff1.SetConstantRate (DataRate ("54Mb/s"), packetSize);
+  onoff1.SetAttribute ("StartTime", TimeValue (Seconds (0.0)));
+  onoff1.SetAttribute ("StopTime", TimeValue (Seconds (100.0)));
+  apps_source.Add (onoff1.Install (wifiApNodes.Get (1)));
+
+  apps_sink.Start (Seconds (0.5));
+  apps_sink.Stop (Seconds (simuTime));
+
+  //------------------------------------------------------------
+  //-- Setup stats and data collection
+  //--------------------------------------------
+
+  //Statistics counters
+  NodeStatistics statisticsAp0 = NodeStatistics (wifiApDevices, wifiStaDevices);
+  NodeStatistics statisticsAp1 = NodeStatistics (wifiApDevices, wifiStaDevices);
+
+  //Register packet receptions to calculate throughput
+  Config::Connect ("/NodeList/2/ApplicationList/*/$ns3::PacketSink/Rx",
+                   MakeCallback (&NodeStatistics::RxCallback, &statisticsAp0));
+  Config::Connect ("/NodeList/3/ApplicationList/*/$ns3::PacketSink/Rx",
+                   MakeCallback (&NodeStatistics::RxCallback, &statisticsAp1));
+
+  //Register power and rate changes to calculate the Average Transmit Power
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/PowerChange",
+                   MakeCallback (&NodeStatistics::PowerCallback, &statisticsAp0));
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
+                   MakeCallback (&NodeStatistics::RateCallback, &statisticsAp0));
+  Config::Connect ("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/PowerChange",
+                   MakeCallback (&NodeStatistics::PowerCallback, &statisticsAp1));
+  Config::Connect ("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
+                   MakeCallback (&NodeStatistics::RateCallback, &statisticsAp1));
+
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
+                   MakeCallback (&NodeStatistics::PhyCallback, &statisticsAp0));
+  Config::Connect ("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
+                   MakeCallback (&NodeStatistics::PhyCallback, &statisticsAp1));
+
+  //Register States
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/State/State",
+                   MakeCallback (&NodeStatistics::StateCallback, &statisticsAp0));
+  Config::Connect ("/NodeList/1/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/State/State",
+                   MakeCallback (&NodeStatistics::StateCallback, &statisticsAp1));
+
+  statisticsAp0.CheckStatistics (1);
+  statisticsAp1.CheckStatistics (1);
+
+  //Callbacks to print every change of power and rate
+  Config::Connect ("/NodeList/[0-1]/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/PowerChange",
+                   MakeCallback (PowerCallback));
+  Config::Connect ("/NodeList/[0-1]/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
+                   MakeCallback (RateCallback));
+
+
+  // Calculate Throughput using Flowmonitor
+  //
+
+  FlowMonitorHelper flowmon;
+  Ptr<FlowMonitor> monitor = flowmon.InstallAll ();
+
+  Simulator::Stop (Seconds (simuTime));
+  Simulator::Run ();
+
+  Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier> (flowmon.GetClassifier ());
+  std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats ();
+  for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i = stats.begin (); i != stats.end (); ++i)
+    {
+      Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow (i->first);
+      if ((t.sourceAddress == "10.1.1.3" && t.destinationAddress == "10.1.1.1"))
+        {
+          NS_LOG_INFO ("Flow " << i->first  << " (" << t.sourceAddress << " -> " << t.destinationAddress << ")\n");
+          NS_LOG_INFO ("  Tx Bytes:   " << i->second.txBytes << "\n");
+          NS_LOG_INFO ("  Rx Bytes:   " << i->second.rxBytes << "\n");
+          NS_LOG_UNCOND ("  Throughput to 10.1.1.1: " << i->second.rxBytes * 8.0 / (i->second.timeLastRxPacket.GetSeconds () - i->second.timeFirstTxPacket.GetSeconds ()) / 1024 / 1024  << " Mbps\n");
+          NS_LOG_INFO ("  Mean delay:   " << i->second.delaySum.GetSeconds () / i->second.rxPackets << "\n");
+          NS_LOG_INFO ("  Mean jitter:   " << i->second.jitterSum.GetSeconds () / (i->second.rxPackets - 1) << "\n");
+          NS_LOG_INFO ("  Tx Opp: " << 1 - (statisticsAp0.GetBusyTime () / simuTime));
+        }
+      if ((t.sourceAddress == "10.1.1.4" && t.destinationAddress == "10.1.1.2"))
+        {
+          NS_LOG_INFO ("Flow " << i->first  << " (" << t.sourceAddress << " -> " << t.destinationAddress << ")\n");
+          NS_LOG_INFO ("  Tx Bytes:   " << i->second.txBytes << "\n");
+          NS_LOG_INFO ("  Rx Bytes:   " << i->second.rxBytes << "\n");
+          NS_LOG_UNCOND ("  Throughput to 10.1.1.2: " << i->second.rxBytes * 8.0 / (i->second.timeLastRxPacket.GetSeconds () - i->second.timeFirstTxPacket.GetSeconds ()) / 1024 / 1024  << " Mbps\n");
+          NS_LOG_INFO ("  Mean delay:   " << i->second.delaySum.GetSeconds () / i->second.rxPackets << "\n");
+          NS_LOG_INFO ("  Mean jitter:   " << i->second.jitterSum.GetSeconds () / (i->second.rxPackets - 1) << "\n");
+          NS_LOG_INFO ("  Tx Opp: " << 1 - (statisticsAp1.GetBusyTime () / simuTime));
+        }
+    }
+
+  //Plots for AP0
+  std::ofstream outfileTh0 (("throughput-" + outputFileName + "-0.plt").c_str ());
+  Gnuplot gnuplot = Gnuplot (("throughput-" + outputFileName + "-0.eps").c_str (), "Throughput");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Throughput (Mb/s)");
+  gnuplot.SetTitle ("Throughput (AP0 to STA) vs time");
+  gnuplot.AddDataset (statisticsAp0.GetDatafile ());
+  gnuplot.GenerateOutput (outfileTh0);
+
+  if (manager.compare ("ns3::ParfWifiManager") == 0 ||
+      manager.compare ("ns3::AparfWifiManager") == 0)
+    {
+      std::ofstream outfilePower0 (("power-" + outputFileName + "-0.plt").c_str ());
+      gnuplot = Gnuplot (("power-" + outputFileName + "-0.eps").c_str (), "Average Transmit Power");
+      gnuplot.SetTerminal ("post eps color enhanced");
+      gnuplot.SetLegend ("Time (seconds)", "Power (mW)");
+      gnuplot.SetTitle ("Average transmit power (AP0 to STA) vs time");
+      gnuplot.AddDataset (statisticsAp0.GetPowerDatafile ());
+      gnuplot.GenerateOutput (outfilePower0);
+    } 
+
+  std::ofstream outfileTx0 (("tx-" + outputFileName + "-0.plt").c_str ());
+  gnuplot = Gnuplot (("tx-" + outputFileName + "-0.eps").c_str (), "Time in TX State");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Percent");
+  gnuplot.SetTitle ("Percentage time AP0 in TX state vs time");
+  gnuplot.AddDataset (statisticsAp0.GetTxDatafile ());
+  gnuplot.GenerateOutput (outfileTx0);
+
+  std::ofstream outfileRx0 (("rx-" + outputFileName + "-0.plt").c_str ());
+  gnuplot = Gnuplot (("rx-" + outputFileName + "-0.eps").c_str (), "Time in RX State");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Percent");
+  gnuplot.SetTitle ("Percentage time AP0 in RX state vs time");
+  gnuplot.AddDataset (statisticsAp0.GetRxDatafile ());
+  gnuplot.GenerateOutput (outfileRx0);
+
+  std::ofstream outfileBusy0 (("busy-" + outputFileName + "-0.plt").c_str ());
+  gnuplot = Gnuplot (("busy-" + outputFileName + "-0.eps").c_str (), "Time in Busy State");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Percent");
+  gnuplot.SetTitle ("Percentage time AP0 in Busy state vs time");
+  gnuplot.AddDataset (statisticsAp0.GetBusyDatafile ());
+  gnuplot.GenerateOutput (outfileBusy0);
+
+  std::ofstream outfileIdle0 (("idle-" + outputFileName + "-0.plt").c_str ());
+  gnuplot = Gnuplot (("idle-" + outputFileName + "-0.eps").c_str (), "Time in Idle State");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Percent");
+  gnuplot.SetTitle ("Percentage time AP0 in Idle state vs time");
+  gnuplot.AddDataset (statisticsAp0.GetIdleDatafile ());
+  gnuplot.GenerateOutput (outfileIdle0);
+
+  //Plots for AP1
+  std::ofstream outfileTh1 (("throughput-" + outputFileName + "-1.plt").c_str ());
+  gnuplot = Gnuplot (("throughput-" + outputFileName + "-1.eps").c_str (), "Throughput");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Throughput (Mb/s)");
+  gnuplot.SetTitle ("Throughput (AP1 to STA) vs time");
+  gnuplot.AddDataset (statisticsAp1.GetDatafile ());
+  gnuplot.GenerateOutput (outfileTh1);
+
+  if (manager.compare ("ns3::ParfWifiManager") == 0 ||
+      manager.compare ("ns3::AparfWifiManager") == 0)
+    {
+      std::ofstream outfilePower1 (("power-" + outputFileName + "-1.plt").c_str ());
+      gnuplot = Gnuplot (("power-" + outputFileName + "-1.eps").c_str (), "Average Transmit Power");
+      gnuplot.SetTerminal ("post eps color enhanced");
+      gnuplot.SetLegend ("Time (seconds)", "Power (mW)");
+      gnuplot.SetTitle ("Average transmit power (AP1 to STA) vs time");
+      gnuplot.AddDataset (statisticsAp1.GetPowerDatafile ());
+      gnuplot.GenerateOutput (outfilePower1);
+    } 
+
+  std::ofstream outfileTx1 (("tx-" + outputFileName + "-1.plt").c_str ());
+  gnuplot = Gnuplot (("tx-" + outputFileName + "-1.eps").c_str (), "Time in TX State");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Percent");
+  gnuplot.SetTitle ("Percentage time AP1 in TX state vs time");
+  gnuplot.AddDataset (statisticsAp1.GetTxDatafile ());
+  gnuplot.GenerateOutput (outfileTx1);
+
+  std::ofstream outfileRx1 (("rx-" + outputFileName + "-1.plt").c_str ());
+  gnuplot = Gnuplot (("rx-" + outputFileName + "-1.eps").c_str (), "Time in RX State");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Percent");
+  gnuplot.SetTitle ("Percentage time AP1 in RX state vs time");
+  gnuplot.AddDataset (statisticsAp1.GetRxDatafile ());
+  gnuplot.GenerateOutput (outfileRx1);
+
+  std::ofstream outfileBusy1 (("busy-" + outputFileName + "-1.plt").c_str ());
+  gnuplot = Gnuplot (("busy-" + outputFileName + "-1.eps").c_str (), "Time in Busy State");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Percent");
+  gnuplot.SetTitle ("Percentage time AP1 in Busy state vs time");
+  gnuplot.AddDataset (statisticsAp1.GetBusyDatafile ());
+  gnuplot.GenerateOutput (outfileBusy1);
+
+  std::ofstream outfileIdle1 (("idle-" + outputFileName + "-1.plt").c_str ());
+  gnuplot = Gnuplot (("idle-" + outputFileName + "-1.eps").c_str (), "Time in Idle State");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Percent");
+  gnuplot.SetTitle ("Percentage time AP1 in Idle state vs time");
+  gnuplot.AddDataset (statisticsAp1.GetIdleDatafile ());
+  gnuplot.GenerateOutput (outfileIdle1);
+
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.21/examples/wireless/rate-adaptation-distance.cc ns-3.22/examples/wireless/rate-adaptation-distance.cc
--- ns-3.21/examples/wireless/rate-adaptation-distance.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/examples/wireless/rate-adaptation-distance.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,276 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universidad de la República - Uruguay
+ *
+ * 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: Matías Richart <mrichart@fing.edu.uy>
+ */
+
+/**
+ * This example program is designed to illustrate the behavior of
+ * rate-adaptive WiFi rate controls such as Minstrel.  Power-adaptive
+ * rate controls can be illustrated also, but separate examples exist for
+ * highlighting the power adaptation.
+ *
+ * This simulation consist of 2 nodes, one AP and one STA.
+ * The AP generates UDP traffic with a CBR of 54 Mbps to the STA.
+ * The AP can use any power and rate control mechanism and the STA uses
+ * only Minstrel rate control.
+ * The STA can be configured to move away from (or towards to) the AP.
+ * By default, the AP is at coordinate (0,0,0) and the STA starts at
+ * coordinate (5,0,0) (meters) and moves away on the x axis by 1 meter every
+ * second.
+ *
+ * The output consists of:
+ * - A plot of average throughput vs. distance.
+ * - (if logging is enabled) the changes of rate to standard output.
+ *
+ * Example usage:
+ * ./waf --run "rate-adaptation-distance --manager=ns3::MinstrelWifiManager --outputFileName=minstrel"
+ *
+ * Another example (moving towards the AP):
+ * ./waf --run "rate-adaptation-distance --manager=ns3::MinstrelWifiManager --outputFileName=minstrel --stepsSize=1 --STA1_x=-200"
+ *
+ * To enable the log of rate changes:
+ * export NS_LOG=RateAdaptationDistance=level_info
+ */
+
+#include <sstream>
+#include <fstream>
+#include <math.h>
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/stats-module.h"
+#include "ns3/flow-monitor-module.h"
+
+using namespace ns3;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("RateAdaptationDistance");
+
+class NodeStatistics
+{
+public:
+  NodeStatistics (NetDeviceContainer aps, NetDeviceContainer stas);
+
+  void CheckStatistics (double time);
+
+  void RxCallback (std::string path, Ptr<const Packet> packet, const Address &from);
+  void SetPosition (Ptr<Node> node, Vector position);
+  void AdvancePosition (Ptr<Node> node, int stepsSize, int stepsTime);
+  Vector GetPosition (Ptr<Node> node);
+
+  Gnuplot2dDataset GetDatafile ();
+
+private:
+  uint32_t m_bytesTotal;
+  Gnuplot2dDataset m_output;
+};
+
+NodeStatistics::NodeStatistics (NetDeviceContainer aps, NetDeviceContainer stas)
+{
+  m_bytesTotal = 0;
+}
+
+void
+NodeStatistics::RxCallback (std::string path, Ptr<const Packet> packet, const Address &from)
+{
+  m_bytesTotal += packet->GetSize ();
+}
+
+void
+NodeStatistics::CheckStatistics (double time)
+{
+
+}
+
+void
+NodeStatistics::SetPosition (Ptr<Node> node, Vector position)
+{
+  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
+  mobility->SetPosition (position);
+}
+
+Vector
+NodeStatistics::GetPosition (Ptr<Node> node)
+{
+  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
+  return mobility->GetPosition ();
+}
+
+void
+NodeStatistics::AdvancePosition (Ptr<Node> node, int stepsSize, int stepsTime)
+{
+  Vector pos = GetPosition (node);
+  double mbs = ((m_bytesTotal * 8.0) / (1000000 * stepsTime));
+  m_bytesTotal = 0;
+  m_output.Add (pos.x, mbs);
+  pos.x += stepsSize;
+  SetPosition (node, pos);
+  Simulator::Schedule (Seconds (stepsTime), &NodeStatistics::AdvancePosition, this, node, stepsSize, stepsTime);
+}
+
+Gnuplot2dDataset
+NodeStatistics::GetDatafile ()
+{
+  return m_output;
+}
+
+
+void RateCallback (std::string path, uint32_t rate, Mac48Address dest)
+{
+  NS_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Rate " <<  rate);
+}
+
+int main (int argc, char *argv[])
+{
+  uint32_t rtsThreshold = 2346;
+  std::string manager = "ns3::MinstrelWifiManager";
+  std::string outputFileName = "minstrel";
+  int ap1_x = 0;
+  int ap1_y = 0;
+  int sta1_x = 5;
+  int sta1_y = 0;
+  int steps = 200;
+  int stepsSize = 1;
+  int stepsTime = 1;
+
+  CommandLine cmd;
+  cmd.AddValue ("manager", "PRC Manager", manager);
+  cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold);
+  cmd.AddValue ("outputFileName", "Output filename", outputFileName);
+  cmd.AddValue ("steps", "How many different distances to try", steps);
+  cmd.AddValue ("stepsTime", "Time on each step", stepsTime);
+  cmd.AddValue ("stepsSize", "Distance between steps", stepsSize);
+  cmd.AddValue ("AP1_x", "Position of AP1 in x coordinate", ap1_x);
+  cmd.AddValue ("AP1_y", "Position of AP1 in y coordinate", ap1_y);
+  cmd.AddValue ("STA1_x", "Position of STA1 in x coordinate", sta1_x);
+  cmd.AddValue ("STA1_y", "Position of STA1 in y coordinate", sta1_y);
+  cmd.Parse (argc, argv);
+
+  int simuTime = steps * stepsTime;
+
+  // Define the APs
+  NodeContainer wifiApNodes;
+  wifiApNodes.Create (1);
+
+  //Define the STAs
+  NodeContainer wifiStaNodes;
+  wifiStaNodes.Create (1);
+
+  WifiHelper wifi = WifiHelper::Default ();
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
+  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
+  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
+
+  wifiPhy.SetChannel (wifiChannel.Create ());
+
+  NetDeviceContainer wifiApDevices;
+  NetDeviceContainer wifiStaDevices;
+  NetDeviceContainer wifiDevices;
+
+  //Configure the STA node
+  wifi.SetRemoteStationManager (manager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+  Ssid ssid = Ssid ("AP");
+  wifiMac.SetType ("ns3::StaWifiMac",
+                   "Ssid", SsidValue (ssid),
+                   "ActiveProbing", BooleanValue (false));
+  wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
+
+  //Configure the AP node
+  wifi.SetRemoteStationManager (manager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+  ssid = Ssid ("AP");
+  wifiMac.SetType ("ns3::ApWifiMac",
+                   "Ssid", SsidValue (ssid));
+  wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (0)));
+
+  wifiDevices.Add (wifiStaDevices);
+  wifiDevices.Add (wifiApDevices);
+
+  // Configure the mobility.
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  //Initial position of AP and STA
+  positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0));
+  positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (wifiApNodes.Get (0));
+  mobility.Install (wifiStaNodes.Get (0));
+
+  //Statistics counter
+  NodeStatistics atpCounter = NodeStatistics (wifiApDevices, wifiStaDevices);
+
+  //Move the STA by stepsSize meters every stepsTime seconds
+  Simulator::Schedule (Seconds (0.5 + stepsTime), &NodeStatistics::AdvancePosition, &atpCounter, wifiStaNodes.Get (0), stepsSize, stepsTime);
+
+  //Configure the IP stack
+  InternetStackHelper stack;
+  stack.Install (wifiApNodes);
+  stack.Install (wifiStaNodes);
+  Ipv4AddressHelper address;
+  address.SetBase ("10.1.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer i = address.Assign (wifiDevices);
+  Ipv4Address sinkAddress = i.GetAddress (0);
+  uint16_t port = 9;
+
+  //Configure the CBR generator
+  PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
+  ApplicationContainer apps_sink = sink.Install (wifiStaNodes.Get (0));
+
+  OnOffHelper onoff ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
+  onoff.SetConstantRate (DataRate ("54Mb/s"), 1420);
+  onoff.SetAttribute ("StartTime", TimeValue (Seconds (0.5)));
+  onoff.SetAttribute ("StopTime", TimeValue (Seconds (simuTime)));
+  ApplicationContainer apps_source = onoff.Install (wifiApNodes.Get (0));
+
+  apps_sink.Start (Seconds (0.5));
+  apps_sink.Stop (Seconds (simuTime));
+
+  //------------------------------------------------------------
+  //-- Setup stats and data collection
+  //--------------------------------------------
+
+  //Register packet receptions to calculate throughput
+  Config::Connect ("/NodeList/1/ApplicationList/*/$ns3::PacketSink/Rx",
+                   MakeCallback (&NodeStatistics::RxCallback, &atpCounter));
+
+  //Callbacks to print every change of rate
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
+                   MakeCallback (RateCallback));
+
+  Simulator::Stop (Seconds (simuTime));
+  Simulator::Run ();
+
+  std::ofstream outfile (("throughput-" + outputFileName + ".plt").c_str ());
+  Gnuplot gnuplot = Gnuplot (("throughput-" + outputFileName + ".eps").c_str (), "Throughput");
+  gnuplot.SetTerminal ("post eps color enhanced");
+  gnuplot.SetLegend ("Time (seconds)", "Throughput (Mb/s)");
+  gnuplot.SetTitle ("Throughput (AP to STA) vs time");
+  gnuplot.AddDataset (atpCounter.GetDatafile ());
+  gnuplot.GenerateOutput (outfile);
+
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.21/examples/wireless/simple-mpdu-aggregation.cc ns-3.22/examples/wireless/simple-mpdu-aggregation.cc
--- ns-3.21/examples/wireless/simple-mpdu-aggregation.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/examples/wireless/simple-mpdu-aggregation.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,166 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Sébastien Deronne
+ *
+ * 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: Sébastien Deronne <sebastien.deronne@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 MPDU aggregation feature works.
+// The throughput is obtained for a given number of aggregated MPDUs.
+//
+// The number of aggregated MPDUs can be chosen by the user through the nMpdus attibute.
+// A value of 1 means that no MPDU aggregation is performed.
+//
+// Example: ./waf --run "simple-mpdu-aggregation --nMpdus=64"
+//
+// Network topology:
+//
+//   Wifi 192.168.1.0
+//
+//        AP
+//   *    *
+//   |    |
+//   n1   n2
+//
+// 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 ("SimpleMpduAggregation");
+
+int main (int argc, char *argv[])
+{
+  uint32_t payloadSize = 1472; //bytes
+  uint64_t simulationTime = 10; //seconds
+  uint32_t nMpdus = 1;
+  bool enableRts = 0;
+    
+  CommandLine cmd;
+  cmd.AddValue("nMpdus", "Number of aggregated MPDUs", nMpdus); //number of aggregated MPDUs specified by the user
+  cmd.AddValue("payloadSize", "Payload size in bytes", payloadSize);
+  cmd.AddValue("enableRts", "Enable RTS/CTS", enableRts);
+  cmd.AddValue("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.Parse (argc, argv);
+    
+  if(!enableRts)
+    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+  else
+    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
+     
+  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
+
+  NodeContainer wifiStaNode;
+  wifiStaNode.Create (1);
+  NodeContainer wifiApNode;
+  wifiApNode.Create(1);
+
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
+  phy.SetChannel (channel.Create());
+
+  WifiHelper wifi = WifiHelper::Default ();
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("OfdmRate65MbpsBW20MHz"), "ControlMode", StringValue("OfdmRate6_5MbpsBW20MHz"));
+  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+
+  Ssid ssid = Ssid ("simple-mpdu-aggregation");
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false));
+
+  if (nMpdus > 1) mac.SetBlockAckThresholdForAc (AC_BE, 2); //enable Block ACK when A-MPDU is enabled (i.e. nMpdus > 1)
+
+  mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
+                              "MaxAmpduSize", UintegerValue (nMpdus*(payloadSize+100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes, i.e. nMpdus aggregated packets in an A-MPDU
+  
+  NetDeviceContainer staDevice;
+  staDevice = wifi.Install (phy, mac, wifiStaNode);
+
+  mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid),
+               "BeaconInterval", TimeValue (MicroSeconds(102400)),
+               "BeaconGeneration", BooleanValue (true));
+
+  if (nMpdus > 1) mac.SetBlockAckThresholdForAc (AC_BE, 2); //enable Block ACK when A-MPDU is enabled (i.e. nMpdus > 1)
+    
+  mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
+                              "MaxAmpduSize", UintegerValue (nMpdus*(payloadSize+100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes, i.e. nMpdus aggregated packets in an A-MPDU
+
+  NetDeviceContainer apDevice;
+  apDevice = wifi.Install (phy, mac, wifiApNode);
+
+  /* Setting mobility model */
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (1.0, 0.0, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+  mobility.Install (wifiApNode);
+  mobility.Install (wifiStaNode);
+
+  /* Internet stack*/
+  InternetStackHelper stack;
+  stack.Install (wifiApNode);
+  stack.Install (wifiStaNode);
+
+  Ipv4AddressHelper address;
+
+  address.SetBase ("192.168.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer StaInterface;
+  StaInterface = address.Assign (staDevice);
+  Ipv4InterfaceContainer ApInterface;
+  ApInterface = address.Assign (apDevice);
+ 
+  /* Setting applications */
+  UdpServerHelper myServer (9);
+  ApplicationContainer serverApp = myServer.Install (wifiStaNode.Get (0));
+  serverApp.Start (Seconds (0.0));
+  serverApp.Stop (Seconds (simulationTime+1));
+      
+  UdpClientHelper myClient (StaInterface.GetAddress (0), 9);
+  myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+  myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+  myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+              
+  ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
+  clientApp.Start (Seconds (1.0));
+  clientApp.Stop (Seconds (simulationTime+1));
+      
+  Simulator::Stop (Seconds (simulationTime+1));
+
+  Simulator::Run ();
+  Simulator::Destroy ();
+      
+  uint32_t totalPacketsThrough = DynamicCast<UdpServer>(serverApp.Get (0))->GetReceived ();
+  double throughput = totalPacketsThrough*payloadSize*8/(simulationTime*1000000.0);
+  std::cout << "Throughput: " << throughput << " Mbit/s" << '\n';
+    
+  return 0;
+}
diff -Naur ns-3.21/examples/wireless/simple-msdu-aggregation.cc ns-3.22/examples/wireless/simple-msdu-aggregation.cc
--- ns-3.21/examples/wireless/simple-msdu-aggregation.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/examples/wireless/simple-msdu-aggregation.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,160 @@
+/* -*-  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
+ *
+ * Authors: Mirko Banchi <mk.banchi@gmail.com>
+ *          Sébastien Deronne <sebastien.deronne@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 MSDU aggregation feature works.
+// The throughput is obtained for a given number of aggregated MSDUs.
+//
+// The number of aggregated MSDUs can be chosen by the user through the nMsdus attibute.
+// A value of 1 means that no MSDU aggregation is performed.
+//
+// Example: ./waf --run "simple-msdu-aggregation --nMsdus=5"
+//
+// Network topology:
+//
+//   Wifi 192.168.1.0
+//
+//        AP
+//   *    *
+//   |    |
+//   n1   n2
+//
+// 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 ("SimpleMsduAggregation");
+
+int main (int argc, char *argv[])
+{
+  uint32_t payloadSize = 1472; //bytes
+  uint64_t simulationTime = 10; //seconds
+  uint32_t nMsdus = 1;
+  bool enableRts = 0;
+    
+  CommandLine cmd;
+  cmd.AddValue("nMsdus", "Number of aggregated MSDUs", nMsdus); //number of aggregated MSDUs specified by the user
+  cmd.AddValue("payloadSize", "Payload size in bytes", payloadSize);
+  cmd.AddValue("enableRts", "Enable RTS/CTS", enableRts);
+  cmd.AddValue("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.Parse (argc, argv);
+ 
+  if(!enableRts)
+    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+  else
+    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
+    
+  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
+    
+  NodeContainer wifiStaNode;
+  wifiStaNode.Create (1);
+  NodeContainer wifiApNode;
+  wifiApNode.Create(1);
+    
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
+  phy.SetChannel (channel.Create());
+    
+  WifiHelper wifi = WifiHelper::Default ();
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("OfdmRate65MbpsBW20MHz"), "ControlMode", StringValue("OfdmRate6_5MbpsBW20MHz"));
+  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+
+  Ssid ssid = Ssid ("simple-msdu-aggregation");
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false));
+    
+  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator", 
+                              "MaxAmsduSize", UintegerValue (nMsdus*(payloadSize+100))); //enable MSDU aggregation for AC_BE with a maximum aggregated size of nMsdus*(payloadSize+100) bytes, i.e. nMsdus aggregated packets in an A-MSDU
+
+  NetDeviceContainer staDevice;
+  staDevice = wifi.Install (phy, mac, wifiStaNode);
+
+  mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid));
+    
+  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator", 
+                              "MaxAmsduSize", UintegerValue (nMsdus*(payloadSize+100))); //enable MSDU aggregation for AC_BE with a maximum aggregated size of nMsdus*(payloadSize+100) bytes, i.e. nMsdus aggregated packets in an A-MSDU
+    
+  NetDeviceContainer apDevice;
+  apDevice = wifi.Install (phy, mac, wifiApNode);
+ 
+  /* Setting mobility model */
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+    
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (1.0, 0.0, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+    
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+    
+  mobility.Install (wifiApNode);
+  mobility.Install (wifiStaNode);
+    
+  /* Internet stack*/
+  InternetStackHelper stack;
+  stack.Install (wifiApNode);
+  stack.Install (wifiStaNode);
+ 
+  Ipv4AddressHelper address;
+    
+  address.SetBase ("192.168.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer StaInterface;
+  StaInterface = address.Assign (staDevice);
+  Ipv4InterfaceContainer ApInterface;
+  ApInterface = address.Assign (apDevice);
+    
+  /* Setting applications */
+  UdpServerHelper myServer (9);
+  ApplicationContainer serverApp = myServer.Install (wifiStaNode.Get (0));
+  serverApp.Start (Seconds (0.0));
+  serverApp.Stop (Seconds (simulationTime+1));
+    
+  UdpClientHelper myClient (StaInterface.GetAddress (0), 9);
+  myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+  myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+  myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+    
+  ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
+  clientApp.Start (Seconds (1.0));
+  clientApp.Stop (Seconds (simulationTime+1));
+    
+  Simulator::Stop (Seconds (simulationTime+1));
+    
+  Simulator::Run ();
+  Simulator::Destroy ();
+    
+  uint32_t totalPacketsThrough = DynamicCast<UdpServer>(serverApp.Get (0))->GetReceived ();
+  double throughput = totalPacketsThrough*payloadSize*8/(simulationTime*1000000.0);
+  std::cout << "Throughput: " << throughput << " Mbit/s" << '\n';
+    
+    return 0;
+}
diff -Naur ns-3.21/examples/wireless/simple-wifi-frame-aggregation.cc ns-3.22/examples/wireless/simple-wifi-frame-aggregation.cc
--- ns-3.21/examples/wireless/simple-wifi-frame-aggregation.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/simple-wifi-frame-aggregation.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,149 +0,0 @@
-/* -*-  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 ("SimpleWifiFrameAggregation");
-
-int main (int argc, char *argv[])
-{
-  //LogComponentEnable ("EdcaTxopN", LOG_LEVEL_DEBUG);
-  LogComponentEnable ("MsduAggregator", LOG_LEVEL_INFO);
-  LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
-  LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
-
-  uint32_t nWifi = 1;
-  CommandLine cmd;
-  cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);
-  cmd.Parse (argc,argv);
-
-  NodeContainer wifiNodes;
-  wifiNodes.Create (2);
-  NodeContainer wifiApNode;
-  wifiApNode.Create (1);
- 
-  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
-  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
-  phy.SetChannel (channel.Create ());
-
-  WifiHelper wifi = WifiHelper::Default ();
-  QosWifiMacHelper mac = QosWifiMacHelper::Default ();
-  wifi.SetRemoteStationManager ("ns3::AarfWifiManager", "FragmentationThreshold", UintegerValue (2500));
-
-  Ssid ssid = Ssid ("ns-3-802.11n");
-  mac.SetType ("ns3::StaWifiMac",
-               "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false));
-  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator", 
-                              "MaxAmsduSize", UintegerValue (3839));
-
-  NetDeviceContainer staDevices;
-  staDevices = wifi.Install (phy, mac, wifiNodes);
-
-  mac.SetType ("ns3::ApWifiMac",
-               "Ssid", SsidValue (ssid));
-  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator", 
-                              "MaxAmsduSize", UintegerValue (7935));
-
-  NetDeviceContainer apDevice;
-  apDevice = wifi.Install (phy, mac, wifiApNode);
- 
-  /* Setting mobility model */
-  MobilityHelper mobility;
-
-  mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
-                                 "MinX", DoubleValue (0.0),
-                                 "MinY", DoubleValue (0.0),
-                                 "DeltaX", DoubleValue (5.0),
-                                 "DeltaY", DoubleValue (10.0),
-                                 "GridWidth", UintegerValue (3),
-                                 "LayoutType", StringValue ("RowFirst"));
-
-  mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
-                             "Bounds", RectangleValue (Rectangle (-50, 50, -50, 50)));
-  mobility.Install (wifiNodes);
-
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-  mobility.Install (wifiApNode);
-
-  /* Internet stack*/
-  InternetStackHelper stack;
-  stack.Install (wifiApNode);
-  stack.Install (wifiNodes);
-
-  Ipv4AddressHelper address;
-
-  address.SetBase ("192.168.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer wifiNodesInterfaces;
-  Ipv4InterfaceContainer apNodeInterface;
-
-  wifiNodesInterfaces = address.Assign (staDevices);
-  apNodeInterface = address.Assign (apDevice);
-
-  /* Setting applications */
-  UdpEchoServerHelper echoServer (9);
-
-  ApplicationContainer serverApps = echoServer.Install (wifiNodes.Get (1));
-  serverApps.Start (Seconds (1.0));
-  serverApps.Stop (Seconds (10.0));
-
-  UdpEchoClientHelper echoClient (wifiNodesInterfaces.GetAddress (1), 9);
-  echoClient.SetAttribute ("MaxPackets", UintegerValue (3));
-  echoClient.SetAttribute ("Interval", TimeValue (Seconds (0.000001)));
-  echoClient.SetAttribute ("PacketSize", UintegerValue (1500));
-
-  ApplicationContainer clientApps = 
-    echoClient.Install (wifiNodes.Get (0));
-  clientApps.Start (Seconds (2.0));
-  clientApps.Stop (Seconds (10.0));
-
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-  Simulator::Stop (Seconds (10.0));
-
-  phy.EnablePcap ("test-802.11n", 
-                  wifiNodes.Get (nWifi - 1)->GetId (), 0);
-
-  Simulator::Run ();
-  Simulator::Destroy ();
-
-  return 0;
-}
diff -Naur ns-3.21/examples/wireless/wifi-adhoc.cc ns-3.22/examples/wireless/wifi-adhoc.cc
--- ns-3.21/examples/wireless/wifi-adhoc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wifi-adhoc.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 
 #include <iostream>
 
-NS_LOG_COMPONENT_DEFINE ("Main");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("Main");
+
 class Experiment
 {
 public:
diff -Naur ns-3.21/examples/wireless/wifi-clear-channel-cmu.cc ns-3.22/examples/wireless/wifi-clear-channel-cmu.cc
--- ns-3.21/examples/wireless/wifi-clear-channel-cmu.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wifi-clear-channel-cmu.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include <vector>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("Main");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("Main");
+
 class Experiment
 {
 public:
diff -Naur ns-3.21/examples/wireless/wifi-hidden-terminal.cc ns-3.22/examples/wireless/wifi-hidden-terminal.cc
--- ns-3.21/examples/wireless/wifi-hidden-terminal.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wifi-hidden-terminal.cc	2015-02-05 15:46:22.000000000 -0800
@@ -149,7 +149,7 @@
   // 10. Print per flow statistics
   monitor->CheckForLostPackets ();
   Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier> (flowmon.GetClassifier ());
-  std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats ();
+  FlowMonitor::FlowStatsContainer stats = monitor->GetFlowStats ();
   for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i = stats.begin (); i != stats.end (); ++i)
     {
       // first 2 FlowIds are for ECHO apps, we don't want to display them
diff -Naur ns-3.21/examples/wireless/wifi-simple-adhoc.cc ns-3.22/examples/wireless/wifi-simple-adhoc.cc
--- ns-3.21/examples/wireless/wifi-simple-adhoc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wifi-simple-adhoc.cc	2015-02-05 15:46:22.000000000 -0800
@@ -63,10 +63,10 @@
 #include <vector>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("WifiSimpleAdhoc");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WifiSimpleAdhoc");
+
 void ReceivePacket (Ptr<Socket> socket)
 {
   while (socket->Recv ())
diff -Naur ns-3.21/examples/wireless/wifi-simple-adhoc-grid.cc ns-3.22/examples/wireless/wifi-simple-adhoc-grid.cc
--- ns-3.21/examples/wireless/wifi-simple-adhoc-grid.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wifi-simple-adhoc-grid.cc	2015-02-05 15:46:22.000000000 -0800
@@ -84,10 +84,10 @@
 #include <vector>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("WifiSimpleAdhocGrid");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WifiSimpleAdhocGrid");
+
 void ReceivePacket (Ptr<Socket> socket)
 {
   while (socket->Recv ())
@@ -227,6 +227,8 @@
       // Trace routing tables
       Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> ("wifi-simple-adhoc-grid.routes", std::ios::out);
       olsr.PrintRoutingTableAllEvery (Seconds (2), routingStream);
+      Ptr<OutputStreamWrapper> neighborStream = Create<OutputStreamWrapper> ("wifi-simple-adhoc-grid.neighbors", std::ios::out);
+      olsr.PrintNeighborCacheAllEvery (Seconds (2), neighborStream);
 
       // To do-- enable an IP-level trace that shows forwarding events only
     }
@@ -238,7 +240,7 @@
   // Output what we are doing
   NS_LOG_UNCOND ("Testing from node " << sourceNode << " to " << sinkNode << " with grid distance " << distance);
 
-  Simulator::Stop (Seconds (32.0));
+  Simulator::Stop (Seconds (33.0));
   Simulator::Run ();
   Simulator::Destroy ();
 
diff -Naur ns-3.21/examples/wireless/wifi-simple-infra.cc ns-3.22/examples/wireless/wifi-simple-infra.cc
--- ns-3.21/examples/wireless/wifi-simple-infra.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wifi-simple-infra.cc	2015-02-05 15:46:22.000000000 -0800
@@ -64,10 +64,10 @@
 #include <vector>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("WifiSimpleInfra");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WifiSimpleInfra");
+
 void ReceivePacket (Ptr<Socket> socket)
 {
   while (socket->Recv ())
diff -Naur ns-3.21/examples/wireless/wifi-simple-interference.cc ns-3.22/examples/wireless/wifi-simple-interference.cc
--- ns-3.21/examples/wireless/wifi-simple-interference.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wifi-simple-interference.cc	2015-02-05 15:46:22.000000000 -0800
@@ -92,10 +92,10 @@
 #include <vector>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("WifiSimpleInterference");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WifiSimpleInterference");
+
 static inline std::string PrintReceivedPacket (Ptr<Socket> socket)
 {
   Address addr;
diff -Naur ns-3.21/examples/wireless/wifi-sleep.cc ns-3.22/examples/wireless/wifi-sleep.cc
--- ns-3.21/examples/wireless/wifi-sleep.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wifi-sleep.cc	2015-02-05 15:46:22.000000000 -0800
@@ -62,10 +62,10 @@
 #include <string>
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("WifiSleep");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WifiSleep");
+
 template <int node>
 void RemainingEnergyTrace (double oldValue, double newValue)
 {
diff -Naur ns-3.21/examples/wireless/wifi-timing-attributes.cc ns-3.22/examples/wireless/wifi-timing-attributes.cc
--- ns-3.21/examples/wireless/wifi-timing-attributes.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/examples/wireless/wifi-timing-attributes.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,172 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 SEBASTIEN DERONNE
+ *
+ * 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: Sebastien Deronne <sebastien.deronne@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 example shows how to set Wi-Fi timing parameters through WifiMac attributes.
+//
+// Example: set slot time to 20 microseconds, while keeping other values as defined in the simulation script:
+//
+//          ./waf --run "wifi-timing-attributes --slot=20"
+//
+// Network topology:
+// 
+//  Wifi 192.168.1.0
+// 
+//       AP
+//  *    *
+//  |    |
+//  n1   n2
+//
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("wifi-timing-attributes");
+
+int main (int argc, char *argv[])
+{
+  uint32_t slot = 9; //slot time in microseconds
+  uint32_t sifs = 10; //SIFS duration in microseconds
+  uint32_t ackTimeout = 88; //ACK timeout duration in microseconds
+  uint32_t ctsTimeout = 88; //CTS timeout duration in microseconds
+  uint32_t rifs = 2; //RIFS duration in microseconds
+  uint32_t basicBlockAckTimeout = 286; //Basic Block ACK timeout duration in microseconds
+  uint32_t compressedBlockAckTimeout = 112; //Compressed Block ACK timeout duration in microseconds
+  double simulationTime = 10; //simulation time in seconds
+
+  CommandLine cmd;
+  cmd.AddValue ("slot", "Slot time in microseconds", slot);
+  cmd.AddValue ("sifs", "SIFS duration in microseconds", sifs);
+  cmd.AddValue ("ackTimeout", "ACK timeout duration in microseconds", ackTimeout);
+  cmd.AddValue ("ctsTimeout", "CTS timeout duration in microseconds", ctsTimeout);
+  cmd.AddValue ("rifs", "RIFS duration in microseconds", rifs);
+  cmd.AddValue ("basicBlockAckTimeoutTimeout", "Basic Block ACK timeout duration in microseconds", basicBlockAckTimeout);
+  cmd.AddValue ("compressedBlockAckTimeoutTimeout", "Compressed Block ACK timeout duration in microseconds", compressedBlockAckTimeout);
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.Parse (argc,argv);
+                
+  //Since default reference loss is defined for 5 GHz, it needs to be changed when operating at 2.4 GHz
+  Config::SetDefault ("ns3::LogDistancePropagationLossModel::ReferenceLoss", DoubleValue (40.046));
+ 
+  //Create nodes
+  NodeContainer wifiStaNode;
+  wifiStaNode.Create (1);
+  NodeContainer wifiApNode;
+  wifiApNode.Create (1);
+                
+  //Create wireless channel
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetChannel (channel.Create ());
+
+  //Default IEEE 802.11n (2.4 GHz)
+  WifiHelper wifi = WifiHelper::Default ();
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                "DataMode", StringValue("OfdmRate65MbpsBW20MHz"),
+                                "ControlMode", StringValue("OfdmRate6_5MbpsBW20MHz"));
+  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+
+  //Install PHY and MAC
+  Ssid ssid = Ssid ("ns3-wifi");
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false));
+
+  NetDeviceContainer staDevice;
+  staDevice = wifi.Install (phy, mac, wifiStaNode);
+
+  mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid));
+
+  NetDeviceContainer apDevice;
+  apDevice = wifi.Install (phy, mac, wifiApNode);
+
+  //Once install is done, we overwrite the standard timing values
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Slot", TimeValue (MicroSeconds (slot)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Sifs", TimeValue (MicroSeconds (sifs)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/AckTimeout", TimeValue (MicroSeconds (ackTimeout)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/CtsTimeout", TimeValue (MicroSeconds (ctsTimeout)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Rifs", TimeValue (MicroSeconds (rifs)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/BasicBlockAckTimeout", TimeValue (MicroSeconds (basicBlockAckTimeout)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/CompressedBlockAckTimeout", TimeValue (MicroSeconds (compressedBlockAckTimeout)));
+              
+  //Mobility
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+      
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (1.0, 0.0, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+      
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+      
+  mobility.Install (wifiApNode);
+  mobility.Install (wifiStaNode);
+
+  //Internet stack
+  InternetStackHelper stack;
+  stack.Install (wifiApNode);
+  stack.Install (wifiStaNode);
+
+  Ipv4AddressHelper address;
+
+  address.SetBase ("192.168.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer staNodeInterface;
+  Ipv4InterfaceContainer apNodeInterface;
+
+  staNodeInterface = address.Assign (staDevice);
+  apNodeInterface = address.Assign (apDevice);
+      
+  //Setting applications
+  UdpServerHelper myServer (9);
+  ApplicationContainer serverApp = myServer.Install (wifiStaNode.Get (0));
+  serverApp.Start (Seconds (0.0));
+  serverApp.Stop (Seconds (simulationTime));
+
+  UdpClientHelper client (staNodeInterface.GetAddress (0), 9);
+  client.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+  client.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+  client.SetAttribute ("PacketSize", UintegerValue (1472)); //bytes
+ 
+  ApplicationContainer clientApp = client.Install (wifiApNode.Get (0));
+  clientApp.Start (Seconds (1.0));
+  clientApp.Stop (Seconds (simulationTime));
+                
+  //Populate routing table
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  //Set simulation time and launch simulation
+  Simulator::Stop (Seconds (simulationTime));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  //Get and print results
+  uint32_t totalPacketsThrough = DynamicCast<UdpServer>(serverApp.Get (0))->GetReceived ();
+  double throughput = totalPacketsThrough * 1472 * 8/((simulationTime-1) * 1000000.0); //Mbit/s
+  std::cout << "Throughput: " << throughput << " Mbit/s" << std::endl;
+    
+  return 0;
+} 
diff -Naur ns-3.21/examples/wireless/wscript ns-3.22/examples/wireless/wscript
--- ns-3.21/examples/wireless/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/examples/wireless/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -22,8 +22,8 @@
     obj = bld.create_ns3_program('wifi-wired-bridging', ['internet', 'mobility', 'wifi', 'csma', 'bridge', 'applications'])
     obj.source = 'wifi-wired-bridging.cc'
 
-    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('simple-msdu-aggregation', ['internet', 'mobility', 'wifi', 'applications'])
+    obj.source = 'simple-msdu-aggregation.cc'
 
     obj = bld.create_ns3_program('multirate', ['internet', 'mobility', 'wifi', 'stats', 'flow-monitor', 'olsr', 'applications', 'point-to-point'])
     obj.source = 'multirate.cc'
@@ -46,8 +46,29 @@
     obj = bld.create_ns3_program('ofdm-validation', ['core', 'mobility', 'wifi', 'config-store', 'stats'])
     obj.source = 'ofdm-validation.cc'
 
+    obj = bld.create_ns3_program('ofdm-ht-validation', ['core', 'mobility', 'wifi', 'config-store', 'stats'])
+    obj.source = 'ofdm-ht-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'
+
+    obj = bld.create_ns3_program('wifi-timing-attributes', ['core','internet', 'mobility', 'wifi', 'applications', 'propagation'])
+    obj.source = 'wifi-timing-attributes.cc'
+
+    obj = bld.create_ns3_program('wifi-sleep', ['core', 'network', 'internet', 'mobility', 'wifi', 'applications', 'energy', 'config-store'])
+    obj.source = 'wifi-sleep.cc'
+    
+    obj = bld.create_ns3_program('power-adaptation-distance', ['core', 'mobility', 'wifi', 'applications', 'flow-monitor'])
+    obj.source = 'power-adaptation-distance.cc'
+    
+    obj = bld.create_ns3_program('power-adaptation-interference', ['core', 'mobility', 'wifi', 'applications', 'flow-monitor'])
+    obj.source = 'power-adaptation-interference.cc'
+
+    obj = bld.create_ns3_program('rate-adaptation-distance', ['core', 'mobility', 'wifi', 'applications', 'flow-monitor'])
+    obj.source = 'rate-adaptation-distance.cc'
+
+    obj = bld.create_ns3_program('simple-mpdu-aggregation', ['internet', 'mobility', 'wifi', 'applications'])
+    obj.source = 'simple-mpdu-aggregation.cc'
\ No newline at end of file
diff -Naur ns-3.21/ns3/_placeholder_ ns-3.22/ns3/_placeholder_
--- ns-3.21/ns3/_placeholder_	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/ns3/_placeholder_	1969-12-31 16:00:00.000000000 -0800
@@ -1 +0,0 @@
-This is a placeholder file used only to keep the ns3 directory present (needed for the WAF build system).
diff -Naur ns-3.21/RELEASE_NOTES ns-3.22/RELEASE_NOTES
--- ns-3.21/RELEASE_NOTES	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/RELEASE_NOTES	2015-02-05 16:17:45.000000000 -0800
@@ -9,6 +9,114 @@
 Consult the file CHANGES.html for more detailed information about changed
 API and behavior across ns-3 releases.
 
+Release 3.22
+============
+
+Availability
+------------
+This release is available from:
+http://www.nsnam.org/release/ns-allinone-3.22.tar.bz2
+
+Supported platforms
+-------------------
+This release has been tested on the following platforms:
+- Fedora Core 21 (64 bit) with g++-4.9.2
+- Ubuntu 14.10 (32 bit) with g++-4.9.1
+- Ubuntu 14.04 (64 bit) with g++-4.8.2
+- Ubuntu 12.04.4 (32/64 bit) with g++-4.6.3
+- CentOS/RHEL 6.6 (64-bit) with g++-4.4.7
+- OS X Yosemite 10.10 with Xcode 6.1.1 and clang-600.0.56
+- FreeBSD 10.1-RELEASE (64 bit) with clang-3.4.1
+
+New user-visible features
+-------------------------
+- (wifi) Support for MPDU aggregation has been added to the wifi model, 
+  as well as a number of related example programs.
+- (wifi) Added two combined power and rate control mechanisms to the
+  wifi module.  The new mechanisms, PARF and APARF, are the first in the
+  wifi module to jointly control transmission power and data rate.  Two use 
+  case examples (PowerAdaptationDistance and PowerAdaptationInterference) 
+  and a test case have also been added.
+- (lte) In previous releases of the LTE module, the bearer release
+  functionality was only partially supported. As an enhancement, a
+  complete release bearer procedure is now implemented, which can be
+  invoked by calling the new helper method
+  LteHelper::DeActivateDedicatedEpsBearer(). The related output can be
+  seen through the stats collected at different layers like PDCP, RLC,
+  MAC, PHY. To support this implementation, an example and test suite is
+  added within the LTE module examples and tests folder.  
+- (wave) Additional support has been added for WiFi-based vehicular networks, 
+  including the channel-access coordination features of IEEE 1609.4 and a 
+  comprehensive VANET routing example that includes a Basic Safety 
+  Message (BSM) packet generator application and associated statistics 
+  counters.  Together, these allow users to evaluate the performance effects 
+  in a VANET of varying transmission and channel properties (e.g., packet 
+  rate, message size, transmit power, propagation loss model, impact of 
+  routing protocol traffic, etc.).
+- (internet) It is now possible to print the Neighbor Cache (ARP and NDISC) 
+  by using the RoutingProtocolHelper
+- (stats) A new TimeProbe class has been added to hook the data collection 
+  framework to traced values emitting Time objects
+- (documentation) the callback function signatures for all TraceSources
+  is documented in Doxygen
+- (utils) print-introspected-doxygen.cc has had several enhancements;
+  use -h to read the usage message for details.
+- (core) TracedValue and TracedCallback function signatures are now documented,
+  which required changing the TypeId::AddTraceSource API.
+
+Bugs fixed
+----------
+- Bug 1405 - RttEstimator improvements
+- Bug 1551 - NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
+- Bug 1726 - WiFi Minstrel rate control algorithm doesn't save state
+- Bug 1734 - TcpSocketBase produces spurious delayed ACKs
+- Bug 1758 - Yans and Nist error rate models for 5/6 code rate 802.11n HT
+- Bug 1770 - mesh test and example crash for 32-bit optimized builds
+- Bug 1774 - compute signal power around channel, not across whole band, and fix LrWpanHelper to add a default PropagationDelayModel
+- Bug 1791 - TCP Endpoint never deallocates when closing
+- Bug 1801 - Setting Wi-Fi timing parameters through WifiMac attributes (documentation fix)
+- Bug 1906 - 802.11n PHY configuration for 2.4GHz and 5GHz devices
+- Bug 1957 - UdpSocketImpl is stuck after a Close()
+- Bug 1968 - Missing supported 802.11n HT rates in the WifiPhy constructor
+- Bug 1969 - Support short guard interval durations in 802.11n
+- Bug 1970 - Missing NotifyAckTimeoutStartNow in MacLow::StartDataTxTimers
+- Bug 1971 - 802.11n at 2.4 GHz should include a signal extension duration
+- Bug 1972 - CommandLine duplicate argument handling: documentation updated.
+- Bug 1983 - FlowMonitor returns containers copies instead of references.
+- Bug 1986 - test result divergence for lte-frequency-reuse test
+- Bug 1991 - PcapFileWrapper::CaptureSize attribute (snaplen) has no effect.
+- Bug 1995 - avoid multiple definitions of PI
+- Bug 1996 - RSRQ calculation: misleading variable names
+- Bug 1997 - Fix PlotProbe() documentation and usage for GnuplotHelper and FileHelper
+- Bug 2002 - Hardcoded include paths cause breakage
+- Bug 2011 - Default Speed attribute in ConstantSpeedPropagationDelayModel
+- Bug 2016 - Radvd do not consider the SendAdvert option and don't reply to RS
+- Bug 2020 - Erroneous MCS field in 802.11n PCAP files
+- Bug 2021 - Missing const qualifier in TopologyReader::Link::Attributes{Begin,End}()
+- Bug 2026 - 802.11n Ness parameter badly set for data frames
+- Bug 2027 - Calculation of HT training symbol duration does not accurately follow 802.11n standard
+- Bug 2028 - remove unnecessary Time to double conversions in Wifi models
+- Bug 2029 - new CQI generation approach fix
+- Bug 2030 - provide default values for WifiTxVector
+- Bug 2037 - HT capabilities may print bogus chars
+- Bug 2038 - Stop method does not stop next wave in WaveformGenerator
+- Bug 2042 - LTE a3-rsrp-handover-algorithm.cc:  error: overflow in implicit constant conversion
+- Bug 2043 - print-introspected-doxygen crashes when some modules are disabled 
+- Bug 2044 - Buffer::Iterator::ReadNtohU16() and ReadNtohU32() not implemented correctly
+- Bug 2045 - Missing NS_OBJECT_ENSURE_REGISTERED in TcpTxBuffer and TcpRxBuffer
+- Bug 2046 - set Block Ack timeout when SetStandard is called
+- Bug 2047 - Ipv6EndPointDemux::Lookup may crash
+- Bug 2049 - CQI feedback should always use the same calculation method
+- Bug 2053 - In tcp-socket-base.cc, NotifyDataSent incorrectly called with retransmits
+- Bug 2055 - TCP TxBuffer and RxBuffer traces don't work
+- Nix-vector routing implementation now uses a lazy flush mechanism,
+  which dramatically speeds up the creation of large topologies.
+
+Known issues
+------------
+In general, known issues are tracked on the project tracker available
+at http://www.nsnam.org/bugzilla/
+
 Release 3.21
 ============
 
diff -Naur ns-3.21/scratch/scratch-simulator.cc ns-3.22/scratch/scratch-simulator.cc
--- ns-3.21/scratch/scratch-simulator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/scratch/scratch-simulator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -16,10 +16,10 @@
 
 #include "ns3/core-module.h"
 
-NS_LOG_COMPONENT_DEFINE ("ScratchSimulator");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("ScratchSimulator");
+
 int 
 main (int argc, char *argv[])
 {
diff -Naur ns-3.21/scratch/subdir/scratch-simulator-subdir.cc ns-3.22/scratch/subdir/scratch-simulator-subdir.cc
--- ns-3.21/scratch/subdir/scratch-simulator-subdir.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/scratch/subdir/scratch-simulator-subdir.cc	2015-02-05 15:46:22.000000000 -0800
@@ -16,10 +16,10 @@
 
 #include "ns3/core-module.h"
 
-NS_LOG_COMPONENT_DEFINE ("ScratchSimulator");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("ScratchSimulator");
+
 int 
 main (int argc, char *argv[])
 {
diff -Naur ns-3.21/src/antenna/bindings/modulegen__gcc_ILP32.py ns-3.22/src/antenna/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/antenna/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -325,10 +325,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -422,7 +422,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -473,6 +478,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -549,6 +559,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -583,6 +597,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
diff -Naur ns-3.21/src/antenna/bindings/modulegen__gcc_LP64.py ns-3.22/src/antenna/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/antenna/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -325,10 +325,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -422,7 +422,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -473,6 +478,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -549,6 +559,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -583,6 +597,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
diff -Naur ns-3.21/src/antenna/model/angles.cc ns-3.22/src/antenna/model/angles.cc
--- ns-3.21/src/antenna/model/angles.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/model/angles.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,9 @@
 #include "angles.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("Angles");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Angles");
 
 double DegreesToRadians (double degrees)
 {
diff -Naur ns-3.21/src/antenna/model/antenna-model.cc ns-3.22/src/antenna/model/antenna-model.cc
--- ns-3.21/src/antenna/model/antenna-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/model/antenna-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "antenna-model.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("AntennaModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AntennaModel");
+
 NS_OBJECT_ENSURE_REGISTERED (AntennaModel);
 
 
diff -Naur ns-3.21/src/antenna/model/cosine-antenna-model.cc ns-3.22/src/antenna/model/cosine-antenna-model.cc
--- ns-3.21/src/antenna/model/cosine-antenna-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/model/cosine-antenna-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "cosine-antenna-model.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("CosineAntennaModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CosineAntennaModel");
+
 NS_OBJECT_ENSURE_REGISTERED (CosineAntennaModel);
 
 
diff -Naur ns-3.21/src/antenna/model/isotropic-antenna-model.cc ns-3.22/src/antenna/model/isotropic-antenna-model.cc
--- ns-3.21/src/antenna/model/isotropic-antenna-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/model/isotropic-antenna-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include "isotropic-antenna-model.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("IsotropicAntennaModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("IsotropicAntennaModel");
+
 NS_OBJECT_ENSURE_REGISTERED (IsotropicAntennaModel);
 
 
diff -Naur ns-3.21/src/antenna/model/parabolic-antenna-model.cc ns-3.22/src/antenna/model/parabolic-antenna-model.cc
--- ns-3.21/src/antenna/model/parabolic-antenna-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/model/parabolic-antenna-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "parabolic-antenna-model.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("ParabolicAntennaModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ParabolicAntennaModel");
+
 NS_OBJECT_ENSURE_REGISTERED (ParabolicAntennaModel);
 
 
diff -Naur ns-3.21/src/antenna/test/test-cosine-antenna.cc ns-3.22/src/antenna/test/test-cosine-antenna.cc
--- ns-3.21/src/antenna/test/test-cosine-antenna.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/test/test-cosine-antenna.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,10 @@
 #include <sstream>
 
 
-NS_LOG_COMPONENT_DEFINE ("TestCosineAntennaModel");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("TestCosineAntennaModel");
+
 enum CosineAntennaModelGainTestCondition  {
   EQUAL = 0,
   LESSTHAN = 1
diff -Naur ns-3.21/src/antenna/test/test-parabolic-antenna.cc ns-3.22/src/antenna/test/test-parabolic-antenna.cc
--- ns-3.21/src/antenna/test/test-parabolic-antenna.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/antenna/test/test-parabolic-antenna.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,10 @@
 #include <sstream>
 
 
-NS_LOG_COMPONENT_DEFINE ("TestParabolicAntennaModel");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("TestParabolicAntennaModel");
+
 enum ParabolicAntennaModelGainTestCondition  {
   EQUAL = 0,
   LESSTHAN = 1
diff -Naur ns-3.21/src/aodv/bindings/modulegen__gcc_ILP32.py ns-3.22/src/aodv/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/aodv/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1553,26 +1553,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
@@ -1978,10 +1998,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2569,7 +2589,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2620,6 +2645,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2696,6 +2726,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2730,6 +2764,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4891,6 +4927,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintArpCache', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -5249,14 +5289,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -5294,8 +5334,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -5316,10 +5356,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -6048,11 +6088,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -6804,11 +6839,6 @@
                    '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', 
@@ -6879,6 +6909,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/aodv/bindings/modulegen__gcc_LP64.py ns-3.22/src/aodv/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/aodv/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1553,26 +1553,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
@@ -1978,10 +1998,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2569,7 +2589,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2620,6 +2645,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2696,6 +2726,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2730,6 +2764,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4891,6 +4927,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintArpCache', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -5249,14 +5289,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -5294,8 +5334,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -5316,10 +5356,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -6048,11 +6088,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -6804,11 +6839,6 @@
                    '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', 
@@ -6879,6 +6909,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/aodv/examples/aodv.cc ns-3.22/src/aodv/examples/aodv.cc
--- ns-3.21/src/aodv/examples/aodv.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/examples/aodv.cc	2015-02-05 15:46:22.000000000 -0800
@@ -54,8 +54,8 @@
   void Report (std::ostream & os);
 
 private:
-  ///\name parameters
-  //\{
+
+  // parameters
   /// Number of nodes
   uint32_t size;
   /// Distance between nodes, meters
@@ -66,14 +66,11 @@
   bool pcap;
   /// Print routes if true
   bool printRoutes;
-  //\}
 
-  ///\name network
-  //\{
+  // network
   NodeContainer nodes;
   NetDeviceContainer devices;
   Ipv4InterfaceContainer interfaces;
-  //\}
 
 private:
   void CreateNodes ();
diff -Naur ns-3.21/src/aodv/model/aodv-neighbor.cc ns-3.22/src/aodv/model/aodv-neighbor.cc
--- ns-3.21/src/aodv/model/aodv-neighbor.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-neighbor.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,12 @@
 #include "ns3/log.h"
 #include <algorithm>
 
-NS_LOG_COMPONENT_DEFINE ("AodvNeighbors");
 
 namespace ns3
 {
+  
+NS_LOG_COMPONENT_DEFINE ("AodvNeighbors");
+
 namespace aodv
 {
 Neighbors::Neighbors (Time delay) : 
diff -Naur ns-3.21/src/aodv/model/aodv-neighbor.h ns-3.22/src/aodv/model/aodv-neighbor.h
--- ns-3.21/src/aodv/model/aodv-neighbor.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-neighbor.h	2015-02-05 15:46:22.000000000 -0800
@@ -85,11 +85,11 @@
   /// Get callback to ProcessTxError
   Callback<void, WifiMacHeader const &> GetTxErrorCallback () const { return m_txErrorCallback; }
  
-  ///\name Handle link failure callback
-  //\{
+  /// Handle link failure callback
   void SetCallback (Callback<void, Ipv4Address> cb) { m_handleLinkFailure = cb; }
+  /// Handle link failure callback
   Callback<void, Ipv4Address> GetCallback () const { return m_handleLinkFailure; }
-  //\}
+
 private:
   /// link failure callback
   Callback<void, Ipv4Address> m_handleLinkFailure;
diff -Naur ns-3.21/src/aodv/model/aodv-packet.h ns-3.22/src/aodv/model/aodv-packet.h
--- ns-3.21/src/aodv/model/aodv-packet.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-packet.h	2015-02-05 15:46:22.000000000 -0800
@@ -56,15 +56,13 @@
   /// c-tor
   TypeHeader (MessageType t = AODVTYPE_RREQ);
 
-  ///\name Header serialization/deserialization
-  //\{
+  // Header serialization/deserialization
   static TypeId GetTypeId ();
   TypeId GetInstanceTypeId () const;
   uint32_t GetSerializedSize () const;
   void Serialize (Buffer::Iterator start) const;
   uint32_t Deserialize (Buffer::Iterator start);
   void Print (std::ostream &os) const;
-  //\}
 
   /// Return type
   MessageType Get () const { return m_type; }
@@ -108,18 +106,15 @@
               uint32_t dstSeqNo = 0, Ipv4Address origin = Ipv4Address (),
               uint32_t originSeqNo = 0);
 
-  ///\name Header serialization/deserialization
-  //\{
+  // Header serialization/deserialization
   static TypeId GetTypeId ();
   TypeId GetInstanceTypeId () const;
   uint32_t GetSerializedSize () const;
   void Serialize (Buffer::Iterator start) const;
   uint32_t Deserialize (Buffer::Iterator start);
   void Print (std::ostream &os) const;
-  //\}
 
-  ///\name Fields
-  //\{
+  // Fields
   void SetHopCount (uint8_t count) { m_hopCount = count; }
   uint8_t GetHopCount () const { return m_hopCount; }
   void SetId (uint32_t id) { m_requestID = id; }
@@ -132,17 +127,14 @@
   Ipv4Address GetOrigin () const { return m_origin; }
   void SetOriginSeqno (uint32_t s) { m_originSeqNo = s; }
   uint32_t GetOriginSeqno () const { return m_originSeqNo; }
-  //\}
 
-  ///\name Flags
-  //\{
+  // Flags
   void SetGratiousRrep (bool f);
   bool GetGratiousRrep () const;
   void SetDestinationOnly (bool f);
   bool GetDestinationOnly () const;
   void SetUnknownSeqno (bool f);
   bool GetUnknownSeqno () const;
-  //\}
 
   bool operator== (RreqHeader const & o) const;
 private:
@@ -184,18 +176,15 @@
   RrepHeader (uint8_t prefixSize = 0, uint8_t hopCount = 0, Ipv4Address dst =
                 Ipv4Address (), uint32_t dstSeqNo = 0, Ipv4Address origin =
                 Ipv4Address (), Time lifetime = MilliSeconds (0));
-  ///\name Header serialization/deserialization
-  //\{
+  // Header serialization/deserialization
   static TypeId GetTypeId ();
   TypeId GetInstanceTypeId () const;
   uint32_t GetSerializedSize () const;
   void Serialize (Buffer::Iterator start) const;
   uint32_t Deserialize (Buffer::Iterator start);
   void Print (std::ostream &os) const;
-  //\}
 
-  ///\name Fields
-  //\{
+  // Fields
   void SetHopCount (uint8_t count) { m_hopCount = count; }
   uint8_t GetHopCount () const { return m_hopCount; }
   void SetDst (Ipv4Address a) { m_dst = a; }
@@ -206,15 +195,12 @@
   Ipv4Address GetOrigin () const { return m_origin; }
   void SetLifeTime (Time t);
   Time GetLifeTime () const;
-  //\}
 
-  ///\name Flags
-  //\{
+  // Flags
   void SetAckRequired (bool f);
   bool GetAckRequired () const;
   void SetPrefixSize (uint8_t sz);
   uint8_t GetPrefixSize () const;
-  //\}
 
   /// Configure RREP to be a Hello message
   void SetHello (Ipv4Address src, uint32_t srcSeqNo, Time lifetime);
@@ -249,15 +235,13 @@
   /// c-tor
   RrepAckHeader ();
 
-  ///\name Header serialization/deserialization
-  //\{
+  // Header serialization/deserialization
   static TypeId GetTypeId ();
   TypeId GetInstanceTypeId () const;
   uint32_t GetSerializedSize () const;
   void Serialize (Buffer::Iterator start) const;
   uint32_t Deserialize (Buffer::Iterator start);
   void Print (std::ostream &os) const;
-  //\}
 
   bool operator== (RrepAckHeader const & o) const;
 private:
@@ -291,21 +275,17 @@
   /// c-tor
   RerrHeader ();
 
-  ///\name Header serialization/deserialization
-  //\{
+  // Header serialization/deserialization
   static TypeId GetTypeId ();
   TypeId GetInstanceTypeId () const;
   uint32_t GetSerializedSize () const;
   void Serialize (Buffer::Iterator i) const;
   uint32_t Deserialize (Buffer::Iterator start);
   void Print (std::ostream &os) const;
-  //\}
 
-  ///\name No delete flag
-  //\{
+  // No delete flag
   void SetNoDelete (bool f);
   bool GetNoDelete () const;
-  //\}
 
   /**
    * Add unreachable node address and its sequence number in RERR header
diff -Naur ns-3.21/src/aodv/model/aodv-routing-protocol.cc ns-3.22/src/aodv/model/aodv-routing-protocol.cc
--- ns-3.21/src/aodv/model/aodv-routing-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-routing-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -42,10 +42,11 @@
 #include <algorithm>
 #include <limits>
 
-NS_LOG_COMPONENT_DEFINE ("AodvRoutingProtocol");
-
 namespace ns3
 {
+
+NS_LOG_COMPONENT_DEFINE ("AodvRoutingProtocol");
+
 namespace aodv
 {
 NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
diff -Naur ns-3.21/src/aodv/model/aodv-routing-protocol.h ns-3.22/src/aodv/model/aodv-routing-protocol.h
--- ns-3.21/src/aodv/model/aodv-routing-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-routing-protocol.h	2015-02-05 15:46:22.000000000 -0800
@@ -61,8 +61,7 @@
   virtual ~RoutingProtocol();
   virtual void DoDispose ();
 
-  ///\name From Ipv4RoutingProtocol
-  //\{
+  // Inherited from Ipv4RoutingProtocol
   Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr);
   bool RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
                    UnicastForwardCallback ucb, MulticastForwardCallback mcb,
@@ -73,10 +72,8 @@
   virtual void NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address);
   virtual void SetIpv4 (Ptr<Ipv4> ipv4);
   virtual void PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const;
-  //\}
 
-  ///\name Handle protocol parameters
-  //\{
+  // Handle protocol parameters
   Time GetMaxQueueTime () const { return MaxQueueTime; }
   void SetMaxQueueTime (Time t);
   uint32_t GetMaxQueueLen () const { return MaxQueueLen; }
@@ -89,7 +86,6 @@
   bool GetHelloEnable () const { return EnableHello; }
   void SetBroadcastEnable (bool f) { EnableBroadcast = f; }
   bool GetBroadcastEnable () const { return EnableBroadcast; }
-  //\}
 
  /**
   * Assign a fixed random variable stream number to the random variables
@@ -102,8 +98,8 @@
   int64_t AssignStreams (int64_t stream);
 
 private:
-  ///\name Protocol parameters.
-  //\{
+  
+  // Protocol parameters.
   uint32_t RreqRetries;             ///< Maximum number of retransmissions of RREQ with TTL = NetDiameter to discover a route
   uint16_t RreqRateLimit;           ///< Maximum number of RREQ per second.
   uint16_t RerrRateLimit;           ///< Maximum number of REER per second.
@@ -245,7 +241,7 @@
    * \param origin - originating node IP address
    */
   void SendRerrWhenNoRouteToForward (Ipv4Address dst, uint32_t dstSeqNo, Ipv4Address origin);
-  //\}
+  /// @}
 
   void SendTo (Ptr<Socket> socket, Ptr<Packet> packet, Ipv4Address destination);
 
diff -Naur ns-3.21/src/aodv/model/aodv-rqueue.cc ns-3.22/src/aodv/model/aodv-rqueue.cc
--- ns-3.21/src/aodv/model/aodv-rqueue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-rqueue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,11 @@
 #include "ns3/socket.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("AodvRequestQueue");
-
 namespace ns3
 {
+
+NS_LOG_COMPONENT_DEFINE ("AodvRequestQueue");
+
 namespace aodv
 {
 uint32_t
diff -Naur ns-3.21/src/aodv/model/aodv-rqueue.h ns-3.22/src/aodv/model/aodv-rqueue.h
--- ns-3.21/src/aodv/model/aodv-rqueue.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-rqueue.h	2015-02-05 15:46:22.000000000 -0800
@@ -61,8 +61,8 @@
   {
     return ((m_packet == o.m_packet) && (m_header.GetDestination () == o.m_header.GetDestination ()) && (m_expire == o.m_expire));
   }
-  ///\name Fields
-  //\{
+
+  // Fields
   UnicastForwardCallback GetUnicastForwardCallback () const { return m_ucb; }
   void SetUnicastForwardCallback (UnicastForwardCallback ucb) { m_ucb = ucb; }
   ErrorCallback GetErrorCallback () const { return m_ecb; }
@@ -73,8 +73,9 @@
   void SetIpv4Header (Ipv4Header h) { m_header = h; }
   void SetExpireTime (Time exp) { m_expire = exp + Simulator::Now (); }
   Time GetExpireTime () const { return m_expire - Simulator::Now (); }
-  //\}
+
 private:
+  
   /// Data packet
   Ptr<const Packet> m_packet;
   /// IP header
@@ -110,15 +111,15 @@
   bool Find (Ipv4Address dst);
   /// Number of entries
   uint32_t GetSize ();
-  ///\name Fields
-  //\{
+  
+  // Fields
   uint32_t GetMaxQueueLen () const { return m_maxLen; }
   void SetMaxQueueLen (uint32_t len) { m_maxLen = len; }
   Time GetQueueTimeout () const { return m_queueTimeout; }
   void SetQueueTimeout (Time t) { m_queueTimeout = t; }
-  //\}
 
 private:
+  
   std::vector<QueueEntry> m_queue;
   /// Remove all expired entries
   void Purge ();
diff -Naur ns-3.21/src/aodv/model/aodv-rtable.cc ns-3.22/src/aodv/model/aodv-rtable.cc
--- ns-3.21/src/aodv/model/aodv-rtable.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-rtable.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,11 @@
 #include "ns3/simulator.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("AodvRoutingTable");
-
 namespace ns3
 {
+
+NS_LOG_COMPONENT_DEFINE ("AodvRoutingTable");
+
 namespace aodv
 {
 
diff -Naur ns-3.21/src/aodv/model/aodv-rtable.h ns-3.22/src/aodv/model/aodv-rtable.h
--- ns-3.21/src/aodv/model/aodv-rtable.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/model/aodv-rtable.h	2015-02-05 15:46:22.000000000 -0800
@@ -101,8 +101,8 @@
 
   /// Mark entry as "down" (i.e. disable it)
   void Invalidate (Time badLinkLifetime);
-  ///\name Fields
-  //\{
+  
+  // Fields
   Ipv4Address GetDestination () const { return m_ipv4Route->GetDestination (); }
   Ptr<Ipv4Route> GetRoute () const { return m_ipv4Route; }
   void SetRoute (Ptr<Ipv4Route> r) { m_ipv4Route = r; }
@@ -131,7 +131,6 @@
   Time GetBlacklistTimeout () const { return m_blackListTimeout; }
   /// RREP_ACK timer
   Timer m_ackTimer;
-  //\}
 
   /**
    * \brief Compare destination address
diff -Naur ns-3.21/src/aodv/test/aodv-chain-regression-test-0-0.pcap ns-3.22/src/aodv/test/aodv-chain-regression-test-0-0.pcap
--- ns-3.21/src/aodv/test/aodv-chain-regression-test-0-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/aodv-chain-regression-test-0-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -6,33 +6,33 @@
 
     (    
     
-           +  @   @   <                            
+             T   T                    E  0     
+
+      
+   
+          4  @   @   <                            
      
-                Ԁ                 @   @                            
+        á        Ԁ                 @   @                            
 
-          @   @   <                            
+          @   @   <                             
      
-        ]        Ԁ               =  T   T   <                0     E  0      
+        f        Ԁ               F  T   T   <                0     E  0      
 
      
     
-  +        M        Ԁ               e  @   @                            
+  +        V        Ԁ               n  @   @               0            
 
-        h  @   @   <                @            
+        q  @   @   <                @            
      
-        x        Ԁ                  x   x   <                0     E  T    @  
+                Ԁ                 x   x   <                @     E  T    @  
 
-                                                                               Ԁ                 @   @               P            
+                                                                               Ԁ                 @   @               P            
 
-                Ԁ                 x   x   <                `     E  T    ?  
+        f        Ԁ                 x   x   <                `     E  T    ?  
 
-                                                                              Ԁ                x   x   <                p     E  T    =  
+                                                                       d       Ԁ               > x   x   <                p     E  T    =  
 
-                                                                               Ԁ               S T   T               @     E  0     
-
-      
-   
-             x   x   <                P     E  T   @  
+                                                                        N       Ԁ                  x   x   <                P     E  T   @  
 
                                                                               Ԁ                x   x   <                     E  T   ?  
 
@@ -42,7 +42,7 @@
 
       
     
-         Hk T   T               `     E  0     
+           T   T               `     E  0     
 
       
    
@@ -56,7 +56,7 @@
 
       
     
-         0o T   T                    E  0     
+           T   T                    E  0     
 
       
    
@@ -70,7 +70,7 @@
 
       
     
-         [ T   T                    E  0     
+         p  T   T                    E  0     
 
       
    
@@ -98,7 +98,7 @@
 
      
     
-           F        Ԁ              0o T   T                    E  0     
+           F        Ԁ                T   T                    E  0     
 
       
    
diff -Naur ns-3.21/src/aodv/test/aodv-chain-regression-test-1-0.pcap ns-3.22/src/aodv/test/aodv-chain-regression-test-1-0.pcap
--- ns-3.21/src/aodv/test/aodv-chain-regression-test-1-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/aodv-chain-regression-test-1-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -10,49 +10,49 @@
 
     (    
     
-             @   @   <                            
+           (  T   T                    E  0     
+
+      
+   
+            @   @   <                            
      
-        }        Ԁ                 @   @                            
+                Ԁ                 @   @                            
 
-          @   @   <                            
+        ğ  @   @   <                            
      
-        h        Ԁ               ~  T   T   <                0     E  0      
+        q        Ԁ                 T   T   <                0     E  0      
 
      
     
-  +                Ԁ                 @   @                            
+  +                Ԁ               '  @   @                            
 
-        !  @   @   <                            
+        *  @   @   <                             
      
-        1        Ԁ                 T   T   <                0     E  0      
+        :        Ԁ                 T   T   <                0     E  0      
 
      
     
-  +        y        Ԁ                 @   @                            
+  +                Ԁ                 @   @               0            
 
-          @   @   <                @            
+           @   @   <                @            
      
-                Ԁ                 x   x   <                0     E  T    @  
+                Ԁ                 x   x   <                @     E  T    @  
 
-                                                                               Ԁ               x  @   @               P            
+                                                                               Ԁ               '  @   @               P            
 
-        {  @   @   <                @            
+        *  @   @   <                @            
      
-                Ԁ               3  x   x   <                `     E  T    ?  
+        :        Ԁ                 x   x   <                `     E  T    ?  
 
-                                                                       (        Ԁ                 @   @               P            
+                                                                               Ԁ                 @   @               P            
 
-                Ԁ                x   x   <                `     E  T    >  
+        b        Ԁ                 x   x   <                `     E  T    >  
 
-                                                                              Ԁ               y x   x   <                p     E  T    >  
+                                                                       N       Ԁ               ( x   x   <                p     E  T    >  
 
-                                                                               Ԁ                x   x   <                p     E  T    =  
+                                                                        8       Ԁ                x   x   <                p     E  T    =  
 
-                                                                               Ԁ               `T T   T               @     E  0     
-
-      
-   
-            x   x   <                P     E  T   @  
+                                                                        {       Ԁ                 x   x   <                P     E  T   @  
 
                                                                               Ԁ                x   x   <                     E  T   ?  
 
@@ -70,7 +70,7 @@
 
       
     
-         k T   T               `     E  0     
+           T   T               `     E  0     
 
       
    
@@ -92,7 +92,7 @@
 
       
     
-         o T   T                    E  0     
+           T   T                    E  0     
 
       
    
@@ -114,7 +114,7 @@
 
       
     
-         0\ T   T                    E  0     
+           T   T                    E  0     
 
       
    
@@ -142,7 +142,7 @@
 
      
     
-           F        Ԁ              o T   T                    E  0     
+           F        Ԁ                T   T                    E  0     
 
       
    
diff -Naur ns-3.21/src/aodv/test/aodv-chain-regression-test-2-0.pcap ns-3.22/src/aodv/test/aodv-chain-regression-test-2-0.pcap
--- ns-3.21/src/aodv/test/aodv-chain-regression-test-2-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/aodv-chain-regression-test-2-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -12,51 +12,51 @@
     
            ,  @   @   <                            
      
-                Ԁ               \  @   @                            
+                Ԁ               e  @   @                            
 
-        ~  @   @   <                            
+          @   @   <                            
      
-        +        Ԁ               A  T   T   <                0     E  0      
+        4        Ԁ               J  T   T   <                0     E  0      
 
      
     
-  +        Q        Ԁ               )  @   @                            
+  +        Z        Ԁ               2  @   @                            
 
-        +  @   @   <                            
+        4  @   @   <                            
      
-        ;        Ԁ                 T   T   <                0     E  0      
+        D        Ԁ                 T   T   <                0     E  0      
 
      
     
-  +                Ԁ                 @   @                            
+  +        á        Ԁ                 @   @                            
 
-        ]        Ԁ               =  T   T   <                0     E  0      
+        f        Ԁ               F  T   T   <                0     E  0      
 
      
     
-  +        h  @   @   <                @            
+  +        q  @   @   <                @            
      
-                Ԁ                 @   @               P            
+                Ԁ                 @   @               P            
 
-          @   @   <                @            
+          @   @   <                @            
      
-                Ԁ                 x   x   <                `     E  T    ?  
+        f        Ԁ                 x   x   <                `     E  T    ?  
 
-                                                                               Ԁ               s  @   @               P            
+                                                                               Ԁ               "  @   @               P            
 
-        v  @   @   <                @            
+        %  @   @   <                @            
      
-                Ԁ               I  x   x   <                `     E  T    >  
+        5        Ԁ                 x   x   <                `     E  T    >  
 
-                                                                       >       Ԁ                @   @               P            
+                                                                               Ԁ                @   @               P            
 
-               Ԁ                x   x   <                `     E  T    =  
+        N       Ԁ                x   x   <                `     E  T    =  
 
-                                                                       &       Ԁ               c x   x   <                p     E  T    ?  
+                                                                              Ԁ                x   x   <                p     E  T    ?  
 
-                                                                        s       Ԁ                x   x   <                p     E  T    >  
+                                                                        "       Ԁ               p x   x   <                p     E  T    >  
 
-                                                                               Ԁ                x   x   <                p     E  T    =  
+                                                                        d       Ԁ               > x   x   <                p     E  T    =  
 
                                                                                 Ԁ                x   x   <                     E  T   ?  
 
diff -Naur ns-3.21/src/aodv/test/aodv-chain-regression-test-3-0.pcap ns-3.22/src/aodv/test/aodv-chain-regression-test-3-0.pcap
--- ns-3.21/src/aodv/test/aodv-chain-regression-test-3-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/aodv-chain-regression-test-3-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -6,54 +6,53 @@
 
     (    
     
-             @   @                            
+           }  T   T                     E  0      
+
+      
+    
+            @   @                           
 
           @   @   <                            
      
-        h        Ԁ               c  T   T   <                     E  0      
+        h        Ԁ               l  T   T   <                      E  0      
 
       
     
-  +        s        Ԁ                 @   @                            
+  +        |        Ԁ                 @   @                            
 
-          @   @   <                            
+          @   @   <                            
      
-                Ԁ                 T   T   <                0     E  0      
+                Ԁ                 T   T   <                0     E  0      
 
      
     
-  +        }        Ԁ                 @   @                            
+  +                Ԁ                 @   @                            
 
-        h        Ԁ               ~  T   T   <                0     E  0      
+        q        Ԁ                 T   T   <                0     E  0      
 
      
     
-  +        {  @   @   <                @            
+  +        *  @   @   <                @            
      
-        (        Ԁ                 @   @               P            
+                Ԁ                 @   @               P            
 
-          @   @   <                @            
+          @   @   <                @            
      
-                Ԁ                x   x   <                `     E  T    >  
+        b        Ԁ                 x   x   <                `     E  T    >  
 
-                                                                              Ԁ               ` @   @               P            
+                                                                               Ԁ                @   @               P            
 
-        b @   @   <                             
+         @   @   <                0            
      
-        r       Ԁ                x   x   <                `     E  T    =  
+        !       Ԁ                x   x   <                `     E  T    =  
 
-                                                                              Ԁ                x   x   <                0     E  T    @  
+                                                                              Ԁ                x   x   <                @     E  T    @  
 
-                                                                               Ԁ                x   x   <                p     E  T    ?  
+                                                                               Ԁ               Y x   x   <                p     E  T    ?  
 
-                                                                               Ԁ               y x   x   <                p     E  T    >  
+                                                                        N       Ԁ               ( x   x   <                p     E  T    >  
 
-                                                                        (
- T   T               @     E  0      
-
-      
-    
-                 Ԁ                x   x   <                     E  T   >  
+                                                                               Ԁ                x   x   <                     E  T   >  
 
                                                                              Ԁ              C  x   x   <                     E  T   =  
 
@@ -71,7 +70,7 @@
 
       
     
-           T   T               `     E  0     
+          j  T   T               `     E  0     
 
       
     
@@ -93,7 +92,7 @@
 
       
     
-           T   T                    E  0     
+         H^  T   T                    E  0     
 
       
     
@@ -115,7 +114,7 @@
 
       
     
-         X T   T                    E  0     
+         u  T   T                    E  0     
 
       
     
@@ -123,7 +122,7 @@
 
       
     
-         X T   T                    E  0     
+         u  T   T                    E  0     
 
       
     
@@ -131,7 +130,7 @@
 
       
     
-           T   T                    E  0     
+         0b  T   T                    E  0     
 
       
     
@@ -139,20 +138,19 @@
 
       
     
-          T   T   <                @    E  0      
-
-     
-   
-           ~       Ԁ              ( T   T                    E  0     
+         p  T   T                    E  0     
 
       
     
-         W  T   T               P    E  0     
+         @  T   T   <                @    E  0      
+
+     
+   
+                   Ԁ              W  T   T               P    E  0     
 
       
     
-         (
- T   T                    E  0     
+         }  T   T                    E  0     
 
       
     
@@ -160,7 +158,7 @@
 
       
     
-           T   T                    E  0     
+         0b  T   T                    E  0     
 
       
     
@@ -168,7 +166,7 @@
 
       
     
-      	     T   T                    E  0 	    
+      	    j  T   T                    E  0 	    
 
       
     
diff -Naur ns-3.21/src/aodv/test/aodv-chain-regression-test-4-0.pcap ns-3.22/src/aodv/test/aodv-chain-regression-test-4-0.pcap
--- ns-3.21/src/aodv/test/aodv-chain-regression-test-4-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/aodv-chain-regression-test-4-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -2,37 +2,37 @@
 
     (    
     
-           )  @   @                            
+            }  T   T                     E  0      
+
+      
+    
+          )  @   @                           
 
         ,  @   @   <                            
      
-        <        Ԁ               ۄ  T   T   <                     E  0      
+        <        Ԁ                 T   T   <                      E  0      
 
       
     
-  +                Ԁ               \  @   @                            
+  +                Ԁ               e  @   @                            
 
-        +        Ԁ               A  T   T   <                0     E  0      
+        4        Ԁ               J  T   T   <                0     E  0      
 
      
     
-  +        v  @   @   <                @            
+  +        %  @   @   <                @            
      
-        >       Ԁ                @   @               P            
+                Ԁ                @   @               P            
 
-         @   @   <                             
+         @   @   <                0            
      
-               Ԁ                x   x   <                `     E  T    =  
+        N       Ԁ                x   x   <                `     E  T    =  
 
-                                                                              Ԁ               1 x   x   <                0     E  T    @  
+                                                                              Ԁ                x   x   <                @     E  T    @  
 
-                                                                        &       Ԁ               c x   x   <                p     E  T    ?  
+                                                                               Ԁ                x   x   <                p     E  T    ?  
 
-                                                                        	 T   T               @     E  0      
-
-      
-    
-         !        Ԁ                x   x   <                     E  T   =  
+                                                                       !        Ԁ                x   x   <                     E  T   =  
 
                                                                              Ԁ              Y  x   x   <                P     E  T   @  
 
@@ -42,7 +42,7 @@
 
       
     
-           T   T               `     E  0     
+         xi  T   T               `     E  0     
 
       
     
@@ -56,7 +56,7 @@
 
       
     
-         `  T   T                    E  0     
+         ]  T   T                    E  0     
 
       
     
@@ -70,7 +70,7 @@
 
       
     
-          T   T                    E  0     
+         0u  T   T                    E  0     
 
       
     
@@ -78,7 +78,7 @@
 
       
     
-          T   T                    E  0     
+         0u  T   T                    E  0     
 
       
     
@@ -86,7 +86,7 @@
 
       
     
-         H  T   T                    E  0     
+         a  T   T                    E  0     
 
       
     
@@ -94,19 +94,19 @@
 
       
     
-         B T   T   <                @    E  0      
-
-     
-   
-           R       Ԁ               T   T                    E  0     
+           T   T                    E  0     
 
       
     
-         )X  T   T               P    E  0     
+         ȉ  T   T   <                @    E  0      
+
+     
+   
+           ؉        Ԁ              )X  T   T               P    E  0     
 
       
     
-         	 T   T                    E  0     
+          }  T   T                    E  0     
 
       
     
@@ -114,7 +114,7 @@
 
       
     
-         H  T   T                    E  0     
+         a  T   T                    E  0     
 
       
     
@@ -122,7 +122,7 @@
 
       
     
-      	     T   T                    E  0 	    
+      	   xi  T   T                    E  0 	    
 
       
     
diff -Naur ns-3.21/src/aodv/test/aodv-regression.cc ns-3.22/src/aodv/test/aodv-regression.cc
--- ns-3.21/src/aodv/test/aodv-regression.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/aodv-regression.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,7 +22,6 @@
 #include "bug-772.h"
 #include "loopback.h"
 
-#include "ns3/mesh-helper.h"
 #include "ns3/simulator.h"
 #include "ns3/mobility-helper.h"
 #include "ns3/double.h"
diff -Naur ns-3.21/src/aodv/test/bug-606-test-0-0.pcap ns-3.22/src/aodv/test/bug-606-test-0-0.pcap
--- ns-3.21/src/aodv/test/bug-606-test-0-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/bug-606-test-0-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -8,31 +8,31 @@
     
            3)  @   @   <                            
      
-        *        Ԁ               HJ  @   @                            
+        V*        Ԁ               I  @   @                            
 
-        jJ  @   @   <                            
+        I  @   @   <                            
      
-        K        Ԁ               K  T   T   <                0     E  0      
+        J        Ԁ               yK  T   T   <                0     E  0      
 
      
     
-  +        L        Ԁ               W  @   @                            
+  +        K        Ԁ               1W  @   @                            
 
-        X  @   @   <                @            
+        4X  @   @   <                @            
      
-        X        Ԁ               jY  x   x   <                0     E  T    @  
+        DX        Ԁ               X  x   x   <                0     E  T    @  
 
-                                                                       ^Z        Ԁ               y  @   @               P            
-
-        z        Ԁ               {  x   x   <                `     E  T    ?  
-
-                                                                       (}        Ԁ               \~  x   x   <                p     E  T    ?  
-
-                                                                        l~        Ԁ               S T   T               @     E  0     
+                                                                       Y        Ԁ               `m  T   T               @     E  0     
 
       
    
-             x   x   <                P     E  T   @  
+          Ty  @   @               P            
+
+        #z        Ԁ               W{  x   x   <                `     E  T    ?  
+
+                                                                       |        Ԁ               }  x   x   <                p     E  T    ?  
+
+                                                                        }        Ԁ                  x   x   <                P     E  T   @  
 
                                                                               Ԁ                x   x   <                     E  T   ?  
 
@@ -42,93 +42,85 @@
 
       
     
-         S T   T               `     E  0     
+         `m  T   T               `     E  0     
 
       
    
          (#  @   @               p            
 
-       /  T   T                    E  0     
-
-      
-    
-         4 T   T                    E  0     
-
-      
-   
-             @   @                           
-
-         @   @   <                            
+       *$  @   @   <                            
      
-               Ԁ                x   x   <                     E  T   @  
+       :$        Ԁ              $  x   x   <                     E  T   @  
 
-                                                                             Ԁ                x   x   <                     E  T   @  
-
-                                                                             Ԁ                T   T                    E  0     
+                                                                     %        Ԁ              /  T   T                    E  0     
 
       
     
-         P"  @   @                           
+         fE  @   @                           
 
-       #        Ԁ              $  x   x   <                     E  T   ?  
+       5F        Ԁ              G  x   x   <                     E  T   ?  
 
-                                                                     %  x   x   <                     E  T   ?  
+                                                                      N  T   T                    E  0     
 
-                                                                     8  @   @   <                           
+      
+   
+         \  @   @   <                            
      
-       9        Ԁ              ;        Ԁ              fY  @   @                           
+       ]        Ԁ              |  @   @                           
 
-       Y  @   @   <                            
+       }  @   @   <                            
      
-       4Z        Ԁ              [  x   x   <                0    E  T   ?  
+       }        Ԁ              ~  x   x   <                    E  T   ?  
 
-                                                                      '[        Ԁ              v\  x   x   <                @    E  T   ?  
+                                                                      ~        Ԁ                  x   x   <                     E  T   @  
+
+                                                                              Ԁ                x   x   <                     E  T   ?  
+
+                                                                     !        Ԁ                x   x   <                0    E  T   ?  
 
-                                                                      \        Ԁ               H T   T                    E  0     
+                                                                              Ԁ                T   T               @    E  0     
+
+      
+    
+         a  T   T                    E  0     
 
       
    
-             x   x   <                     E  T   @  
-
-                                                                     I  x   x   <                     E  T   @  
-
-                                                                     9  x   x   <                     E  T   @  
-
-                                                                     	  x   x   <                     E  T   @  
-
-                                                                     C  x   x   <                     E  T   @  
-
-                                                                       x   x   <                     E  T   @  
+         (#  @   @                           
+
+       Hq  T   T                    E  0     
 
-                                                                     /  x   x   <                     E  T   @  
+      
+   
+             @   @                           
+
+       R  T   T                    E  0     
 
-                                                                     W T   T                    E  0     
+      
+   
+             @   @                          
+
+       `m  T   T                    E  0     
 
       
    
-           X   X                    E  4     
+             @   @               0           
+
+         X   X               @    E  4     
 
           
     
-          @  T   T                   E  0     
+          '  T   T               P    E  0 	    
 
       
    
-           T   T                    E  0     
+      	   (#  T   T               `    E  0 
+    
 
       
    
-         \ X   X               0    E  4 	    
+      	   @ X   X               p    E  4     
 
           
     
-          'X T   T               @    E  0 
-    
-
-      
-   
-      	   @ T   T               P    E  0     
-
-      
-   
-      
\ No newline at end of file
+       
\ No newline at end of file
diff -Naur ns-3.21/src/aodv/test/bug-606-test-1-0.pcap ns-3.22/src/aodv/test/bug-606-test-1-0.pcap
--- ns-3.21/src/aodv/test/bug-606-test-1-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/bug-606-test-1-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -6,47 +6,47 @@
 
     (    
     
-             T   T                     E  0      
-
-      
-    
-          (  @   @                           
+           (  @   @                            
 
         (  @   @   <                            
      
-        p)        Ԁ               *  T   T   <                      E  0      
+        p)        Ԁ               *  T   T   <                     E  0      
 
       
     
-  +        *        Ԁ               I  @   @                            
+  +        **        Ԁ               ZI  @   @                            
 
-        J  @   @   <                            
+        \J  @   @   <                            
      
-        J        Ԁ               nK  T   T   <                0     E  0      
+        lJ        Ԁ               J  T   T   <                0     E  0      
 
      
     
-  +        3L        Ԁ               X  @   @                            
+  +        K        Ԁ               W  @   @                            
 
-        AX  @   @   <                @            
+        W  @   @   <                @            
      
-        X        Ԁ               "Z  x   x   <                0     E  T    @  
+        pX        Ԁ               Y  x   x   <                0     E  T    @  
 
-                                                                       2Z        Ԁ               by  @   @               P            
+                                                                       Y        Ԁ               m  T   T               @     E  0     
+
+      
+   
+          x  @   @               P            
 
-        ez  @   @   <                0            
+        y  @   @   <                             
      
-        uz        Ԁ               {  x   x   <                `     E  T    ?  
+        y        Ԁ               z  x   x   <                `     E  T    ?  
 
-                                                                       |        Ԁ               |  x   x   <                @     E  T    @  
+                                                                       {        Ԁ               |  x   x   <                0     E  T    @  
 
-                                                                        |        Ԁ               }  x   x   <                p     E  T    ?  
+                                                                        |        Ԁ               &}  x   x   <                p     E  T    ?  
+
+                                                                        ~        Ԁ                 T   T               @     E  0      
 
-                                                                        ~        Ԁ               `T T   T               @     E  0     
-
       
-   
-            x   x   <                P     E  T   @  
+    
+            x   x   <                P     E  T   @  
 
                                                                               Ԁ                x   x   <                     E  T   ?  
 
@@ -58,67 +58,71 @@
 
       
     
-         F  T   T               `     E  0     
-
-      
-    
-         `T T   T               `     E  0     
+         m  T   T               `     E  0     
 
       
    
-         p/  T   T                    E  0     
-
-      
-    
-          5 T   T                    E  0     
-
+           T   T               `     E  0     
+
       
-   
-         p   @   @                           
+    
+         #  @   @               p            
 
-          @   @   <                            
+       #  @   @   <                            
      
-       ?        Ԁ                x   x   <                     E  T   @  
-
-                                                                             Ԁ                x   x   <                     E  T   @  
+       g$        Ԁ              %  x   x   <                     E  T   @  
 
-                                                                             Ԁ              0  T   T                    E  0     
+                                                                     %        Ԁ              p/  T   T                    E  0     
 
       
     
-         !  @   @                           
+         D  @   @                           
 
-       "  @   @   <                            
+       E  @   @   <                p            
      
-       "        Ԁ              \#  x   x   <                     E  T   ?  
+       	F        Ԁ              F  x   x   <                     E  T   ?  
 
-                                                                     P$        Ԁ              $  x   x   <                     E  T   ?  
+                                                                     G        Ԁ              N  T   T                    E  0     
 
-                                                                     %        Ԁ              '  T   T                    E  0     
-
       
-    
-         8  @   @                           
+   
+         [  @   @                           
 
-       .8  @   @   <                           
+       [  @   @   <                            
      
-       8        Ԁ              9  x   x   <                     E  T   @  
+       T\        Ԁ              I]  x   x   <                     E  T   @  
 
-                                                                      9        Ԁ              S;  x   x   <                     E  T   @  
-
-                                                                      c;        Ԁ              X  @   @                           
+                                                                      Y]        Ԁ              |  @   @                           
 
-       Y  @   @   <                            
+       }  @   @   <                            
      
-       Z        Ԁ              _Z  x   x   <                0    E  T   ?  
+       }        Ԁ              2~  x   x   <                    E  T   ?  
+
+                                                                      '        Ԁ                T   T                    E  0     
+
+      
+    
+            x   x   <                     E  T   @  
+
+                                                                              Ԁ                x   x   <                     E  T   ?  
+
+                                                                             Ԁ                x   x   <                     E  T   @  
 
-                                                                      T[        Ԁ              [  x   x   <                @    E  T   ?  
+                                                                              Ԁ              L  x   x   <                0    E  T   ?  
 
-                                                                      \        Ԁ              H T   T                    E  0     
+                                                                      A        Ԁ              0  T   T               @    E  0     
+
+      
+    
+         0b  T   T                    E  0     
 
       
    
-         0  T   T               P    E  0     
+           T   T                    E  0     
+
+      
+    
+         0  T   T               P    E  0     
 
       
     
diff -Naur ns-3.21/src/aodv/test/bug-606-test-2-0.pcap ns-3.22/src/aodv/test/bug-606-test-2-0.pcap
--- ns-3.21/src/aodv/test/bug-606-test-2-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/bug-606-test-2-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -2,37 +2,37 @@
 
     (    
     
-           @  T   T                     E  0      
-
-      
-    
-          0(  @   @                           
+           0(  @   @                            
 
         3)  @   @   <                            
      
-        C)        Ԁ               *  T   T   <                      E  0      
+        C)        Ԁ               )  T   T   <                     E  0      
 
       
     
-  +        *        Ԁ               HJ  @   @                            
+  +        V*        Ԁ               I  @   @                            
 
-        K        Ԁ               K  T   T   <                0     E  0      
+        J        Ԁ               yK  T   T   <                0     E  0      
 
      
     
-  +        X  @   @   <                @            
+  +        4X  @   @   <                @            
      
-        ^Z        Ԁ               y  @   @               P            
+        Y        Ԁ               Ty  @   @               P            
 
-        y  @   @   <                0            
+        vy  @   @   <                             
      
-        z        Ԁ               {  x   x   <                `     E  T    ?  
+        #z        Ԁ               W{  x   x   <                `     E  T    ?  
 
-                                                                       {        Ԁ               3|  x   x   <                @     E  T    @  
+                                                                       g{        Ԁ               {  x   x   <                0     E  T    @  
+
+                                                                        |        Ԁ               }  x   x   <                p     E  T    ?  
 
-                                                                        (}        Ԁ               \~  x   x   <                p     E  T    ?  
+                                                                        (  T   T               @     E  0      
 
-                                                                                Ԁ                x   x   <                     E  T   ?  
+      
+    
+                  Ԁ                x   x   <                     E  T   ?  
 
                                                                              Ԁ              ,  x   x   <                P     E  T   @  
 
@@ -42,71 +42,71 @@
 
       
     
-         PF  T   T               `     E  0     
-
-      
-    
-         (#  T   T               p     E  0     
+         8  T   T               `     E  0     
 
       
     
-         /  T   T                    E  0     
-
-      
-    
-           @   @   <                            
+         *$  @   @   <                            
      
-               Ԁ                      Ԁ                T   T                    E  0     
+       %        Ԁ              /  T   T                    E  0     
 
       
     
-         P"  @   @                           
+         fE  @   @                           
 
-       r"  @   @   <                            
+       E  @   @   <                p            
      
-       #        Ԁ              $  x   x   <                     E  T   ?  
-
-                                                                     $$        Ԁ              %  x   x   <                     E  T   ?  
+       5F        Ԁ              G  x   x   <                     E  T   ?  
 
-                                                                     %        Ԁ              '  T   T                    E  0     
-
-      
-    
-         7  @   @                           
+                                                                     G        Ԁ              [  @   @                           
 
-       8  @   @   <                           
+       \  @   @   <                            
      
-       8        Ԁ              8  x   x   <                     E  T   @  
+       (\        Ԁ              \  x   x   <                     E  T   @  
 
-                                                                      9        Ԁ              :  x   x   <                     E  T   @  
-
-                                                                      ;        Ԁ              fY  @   @                           
+                                                                      ]        Ԁ              |  @   @                           
 
-       4Z        Ԁ              [  x   x   <                0    E  T   ?  
+       }        Ԁ              ~  x   x   <                    E  T   ?  
+
+                                                                        T   T                    E  0     
+
+      
+    
+                  Ԁ                x   x   <                     E  T   ?  
+
+                                                                             Ԁ              ,  x   x   <                     E  T   @  
 
-                                                                      v\  x   x   <                @    E  T   ?  
+                                                                      !        Ԁ                x   x   <                0    E  T   ?  
 
-                                                                      hB  T   T                    E  0     
+                                                                        T   T               @    E  0     
+
+      
+    
+           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     
 
       
     
-         PF  T   T                    E  0     
+         8  T   T                    E  0     
 
       
     
-         *  T   T                   E  0     
+           T   T                   E  0     
 
       
     
-      	   .  T   T                    E  0 	    
+      	   ȯ  T   T                    E  0 	    
 
       
     
diff -Naur ns-3.21/src/aodv/test/bug-772.cc ns-3.22/src/aodv/test/bug-772.cc
--- ns-3.21/src/aodv/test/bug-772.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/bug-772.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,7 +20,6 @@
 
 #include "bug-772.h"
 
-#include "ns3/mesh-helper.h"
 #include "ns3/simulator.h"
 #include "ns3/random-variable-stream.h"
 #include "ns3/rng-seed-manager.h"
diff -Naur ns-3.21/src/aodv/test/tcp-chain-test-0-0.pcap ns-3.22/src/aodv/test/tcp-chain-test-0-0.pcap
--- ns-3.21/src/aodv/test/tcp-chain-test-0-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/tcp-chain-test-0-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,8 +1,8 @@
-ò            i         T   T                     E  0      
+ò            i       Y  T   T                     E  0      
 
       
     
-          @ T   T                     E  0      
+          x  T   T                     E  0      
 
       
     
@@ -16,60 +16,61 @@
     (    
 
     
-             @   @   <                             
+          &8 @   @   <                             
      
-       k        Ԁ              '  @   @               0            
+       9       Ԁ              5Q @   @               0            
 
-       I  @   @   <                             
+       WQ @   @   <                             
      
-               Ԁ              ' T   T   <                @     E  0      
+       R       Ԁ              4S T   T   <                @     E  0      
 
      
 
     
-         7       Ԁ               @   @               0            
+         DS       Ԁ              f @   @               0            
 
-        @   @   <                P            
+       g @   @   <                P            
      
-              Ԁ              . \   \   <                @     E  8    @  
+       g       Ԁ              h \   \   <                @     E  8    @  
 
 
  	             
-                       Ԁ              r$ @   @               `            
+                h       Ԁ              
+m @   @               `            
 
-       A%       Ԁ              Q& \   \   <                p     E  8    ?  
+       m       Ԁ              n \   \   <                p     E  8    ?  
 
 
  	             
-                S       Ԁ              	 \   \   <                     E  8    8  
+                       Ԁ              Z \   \   <                     E  8    8  
 
 
  	            
-  Q                   Ԁ              g X   X   <                P     E  4   @  
+  X            j       Ԁ               X   X   <                P     E  4   @  
 
 
  	           
-  Z  Q         4       Ԁ               X   X   <                     E  4   ?  
+  ]  X                Ԁ              m X   X   <                     E  4   ?  
 
 
  	           
-  Z  Q         H p  p  <                `     E L   @  
+  ]  X         H p  p  <                `     E L   @  
 
 
  	           
-  e  Q                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              V p  p  <                     E L   ?  
+  e  X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              V p  p  <                     E L   ?  
 
 
  	           
-  e  Q                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 9       Ԁ               X   X   <                     E  4   8  
+  e  X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 '       Ԁ               X   X   <                     E  4   8  
 
 
  	     z    
-  m  e                Ԁ              I (  (  <                p     E    @  
+  m  e                Ԁ              7 (  (  <                p     E    @  
 
 
  	          
-  o  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ~       Ԁ               (  (  <                     E    ?  
+  o  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         l       Ԁ               (  (  <                     E    ?  
 
 
  	          
@@ -81,15 +82,15 @@
 
 
  	          
-    m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 o       Ԁ              ! X   X   <                     E  4   8  
+    m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              E X   X   <                     E  4   8  
 
 
  	     z    
-             1       Ԁ               (  (  <                     E    @  
+             U       Ԁ               (  (  <                     E    @  
 
 
  	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Ԁ                (  (  <                     E    ?  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Ԁ               (  (  <                     E    ?  
 
 
  	          
@@ -113,11 +114,11 @@
 
 
  	  	        
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ               X   X   <                     E  4   8  
+  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ              ` X   X   <                     E  4   8  
 
 
  	     	z    
-  g  _                Ԁ                p  p  <                     E L   @  
+  g  _         p       Ԁ                p  p  <                     E L   @  
 
 
  	          
@@ -137,11 +138,11 @@
 
 
  	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               X   X   <                P    E  4   8  
+    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         o       Ԁ              ! X   X   <                P    E  4   8  
 
 
  	     рz    
-                    Ԁ              h	 p  p  <                     E L 
+             1       Ԁ              h	 p  p  <                     E L 
   @  
 
 
@@ -163,11 +164,11 @@
 
 
  	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	       Ԁ              N	 X   X   <                    E  4   8  
+  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           t	       Ԁ              &	 X   X   <                    E  4   8  
 
 
  	     z    
-  a  Y         ^	       Ԁ              q p  p  <                     E L   @  
+  a  Y         6	       Ԁ              q p  p  <                     E L   @  
 
 
  	          
@@ -187,11 +188,11 @@
 
 
  	          
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              W X   X   <                    E  4   8  
+    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         6       Ԁ               X   X   <                    E  4   8  
 
 
  	     z    
-             g       Ԁ              Y p  p  <                     E L   @  
+                    Ԁ              Y p  p  <                     E L   @  
 
 
  	  q        
@@ -211,11 +212,11 @@
 
 
  	          
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           D       Ԁ               X   X   <                    E  4   8  
+  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ              E X   X   <                    E  4   8  
 
 
  	     z    
-  [  S                Ԁ                  p  p  <                @    E L   @  
+  [  S         U       Ԁ                  p  p  <                @    E L   @  
 
 
  	  Y        
@@ -240,72 +241,72 @@
 
       
    
-         1        Ԁ              2  X   X   <                    E  4   8  
+         =        Ԁ              7>  X   X   <                    E  4   8  
 
 
  	     qz    
-             2        Ԁ              ?  T   T                    E  0     
+             G>        Ԁ              ?  T   T                    E  0     
 
       
     
-          @   @               p           
+         H @   @               p           
 
-        @   @   <                0           
+       J @   @   <                0           
      
-       *       Ԁ               p  p  <                    E L   @  
+       Z       Ԁ               p  p  <                    E L   @  
 
 
  	  A        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   1       Ԁ               (  (  <                    E    @  
+  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   a       Ԁ               (  (  <                    E    @  
 
 
  	  !Y        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ               @   @               @           
+  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ              e @   @               @           
 
-              Ԁ              o p  p  <                P    E L   ?  
+       4       Ԁ               p  p  <                P    E L   ?  
 
 
  	  A        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   2	 (  (  <                `    E    ?  
+  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   z (  (  <                `    E    ?  
 
 
  	  !Y        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           + @   @   <                p           
+  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            @   @   <                p           
      
-       -       Ԁ              Z= @   @                          
+       M       Ԁ               @   @                          
 
-       |= @   @   <                           
+        @   @   <                           
      
-       )>       Ԁ              b? X   X   <                    E  4 	  8  
+              Ԁ               X   X   <                    E  4 	  8  
 
 
  	     !Yz    
-  p  M         r?       Ԁ               p  p  <                    E L   @  
+  r  M         	       Ԁ               p  p  <                    E L   @  
 
 
  	  #)        
-    p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 $       Ԁ               p  p  <                    E L   ?  
+    r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 $       Ԁ               p  p  <                    E L   ?  
 
 
  	  #)        
-    p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 M (  (  <                    E    @  
+    r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 M (  (  <                    E    @  
 
 
  	  %A        
-    p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         T (  (  <                    E    @  
+    r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         T (  (  <                    E    @  
 
 
  	  %A        
-    p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               (  (  <                    E    ?  
+    r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ               (  (  <                    E    ?  
 
 
  	  %A        
-    p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         K       Ԁ               X   X   <                    E  4 
+    r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         z       Ԁ              , X   X   <                    E  4 
   8  
 
 
  	     %Az    
-                    Ԁ              ظ p  p  <                    E L   @  
+             <       Ԁ              ظ p  p  <                    E L   @  
 
 
  	  '        
@@ -325,11 +326,11 @@
 
 
  	  ))        
-  	G                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           *       Ԁ               X   X   <                    E  4   8  
+  	G                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ               X   X   <                    E  4   8  
 
 
  	     ))z    
-  	O  	G                Ԁ                p  p  <                    E L   @  
+  	O  	G                Ԁ                p  p  <                    E L   @  
 
 
  	  *        
@@ -349,11 +350,11 @@
 
 
  	  -        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              M X   X   <                     E  4   8  
+  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         j       Ԁ               X   X   <                     E  4   8  
 
 
  	     -z    
-  	  	         ]       Ԁ              h	 p  p  <                    E L   @  
+  	  	         ,       Ԁ              h	 p  p  <                    E L   @  
 
 
  	  .        
@@ -379,13 +380,13 @@
 
  	  0        
   
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         0	       Ԁ              	 X   X   <                P    E  4   8  
+A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	       Ԁ              _	 X   X   <                P    E  4   8  
 
 
  	     0z    
   
 I  
-A         	       Ԁ              q p  p  <                0    E L   @  
+A         o	       Ԁ              q p  p  <                0    E L   @  
 
 
  	  2        
@@ -415,13 +416,13 @@
  	  4        
   
   
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              7 X   X   <                    E  4   8  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         U       Ԁ               X   X   <                    E  4   8  
 
 
  	     4z    
   
   
-         G       Ԁ              Y p  p  <                P    E L   @  
+                Ԁ              Y p  p  <                P    E L   @  
 
 
  	  6        
@@ -446,8 +447,8 @@
 
  	  8        
   ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         0       Ԁ               X   X   <                    E  4   8  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              a X   X   <                    E  4   8  
 
 
  	     8ɀz    
-  C  ;                Ԁ           
\ No newline at end of file
+  C  ;         q       Ԁ           
\ No newline at end of file
diff -Naur ns-3.21/src/aodv/test/tcp-chain-test-9-0.pcap ns-3.22/src/aodv/test/tcp-chain-test-9-0.pcap
--- ns-3.21/src/aodv/test/tcp-chain-test-9-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/tcp-chain-test-9-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,87 +1,86 @@
-ò            i       }  T   T                     E  0      
-	
-      
-	    
-	            T   T                     E  0      
+ò            i       e  T   T                     E  0      
 
 
       
 
     
 
-         H^  T   T                    E  0     
+          xP T   T                     E  0      
 	
       
 	    
-	         ə  @   @                            
-	
-               Ԁ                T   T   <                0     E  0      
-	
-   @ 
-
-    
-         @  T   T                    E  0     
+	         PF  T   T                    E  0     
 
 
       
 
     
 
-           @   @               @            
+           @   @                           
 	
 
-       
-  @   @   <                             
+       %  @   @   <                             
 
      
-	               Ԁ              ՠ  T   T   <                P     E  0      
+	       Җ        Ԁ              |  T   T   <                      E  0      
 	
 
      
    
 
-  _               Ԁ              W  @   @   <                `            
+  _               Ԁ                @   @               0            
+	
+               Ԁ              r  T   T   <                @     E  0      
+	
+   @ 
+
+    
+           @   @   <                P            
 	     
-               Ԁ              R       Ԁ               \   \   <                p     E  8    8  
+               Ԁ              81 T   T               `     E  0     
+	
+      
+	    
+	         @       Ԁ               \   \   <                p     E  8    8  
 
 
  	             
-                       Ԁ              x @   @               0            
+                       Ԁ               @   @               0            
 
 
-	       { @   @   <                            
+	        @   @   <                            
 	     
 
-              Ԁ              ٵ \   \   <                @     E  8    @  
+              Ԁ               \   \   <                @     E  8    @  
 
 
  	            
-  Q                   Ԁ              i \   \   <                     E  8    ?  
+  X                   Ԁ               \   \   <                     E  8    ?  
 
 
  	            
-  Q                   Ԁ               X   X   <                     E  4   8  
+  X            @       Ԁ               X   X   <                     E  4   8  
 
 
  	           
-  Z  Q                Ԁ                     Ԁ              S	 p  p  <                     E L   8  
+  ]  X                Ԁ                     Ԁ              S	 p  p  <                     E L   8  
 
 
  	           
-  e  Q                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 c	       Ԁ              	 X   X   <                P     E  4   @  
+  e  X                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 c	       Ԁ              	 X   X   <                P     E  4   @  
 
 
  	     z    
   m  e         ~
-       Ԁ              f X   X   <                     E  4   ?  
+       Ԁ              T X   X   <                     E  4   ?  
 
 
  	     z    
-  m  e         ,       Ԁ              0 (  (  <                     E    8  
+  m  e         ,       Ԁ              0 (  (  <                     E    8  
 
 
  	          
-  o  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (0       Ԁ              !       Ԁ               p  p  <                     E L   8  
+  o  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         0       Ԁ              !       Ԁ               p  p  <                     E L   8  
 
 
  	          
@@ -89,15 +88,15 @@
 
 
  	     z    
-                    Ԁ               X   X   <                     E  4   ?  
+                    Ԁ               X   X   <                     E  4   ?  
 
 
  	     z    
-             +       Ԁ              E (  (  <                     E    8  
+             O       Ԁ              i (  (  <                     E    8  
 
 
  	          
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             U       Ԁ              i       Ԁ               p  p  <                    E L   8  
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             y       Ԁ              i       Ԁ               p  p  <                    E L   8  
 
 
  	          
@@ -105,19 +104,19 @@
 
 
  	     	z    
-  g  _                Ԁ               X   X   <                     E  4   ?  
+  g  _                Ԁ              # X   X   <                     E  4   ?  
 
 
  	     	z    
-  g  _          X   X   <                     E  4   ?  
+  g  _          X   X   <                     E  4   ?  
 
 
  	     	z    
-  g  _                Ԁ               (  (  <                0    E    8  
+  g  _                Ԁ               (  (  <                0    E    8  
 
 
  	  	        
-  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ                     Ԁ              + p  p  <                @    E L   8  
+  _                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ                     Ԁ              + p  p  <                @    E L   8  
 
 
  	          
@@ -125,35 +124,27 @@
 
 
  	     рz    
-             V       Ԁ              # X   X   <                P    E  4   ?  
-
-
- 	     рz    
-             V X   X   <                P    E  4   ?  
-
-
- 	     рz    
-             4 X   X   <                P    E  4   ?  
+             V       Ԁ              > X   X   <                P    E  4   ?  
 
 
  	     рz    
-              X   X   <                P    E  4   ?  
+             z X   X   <                P    E  4   ?  
 
 
  	     рz    
-             " X   X   <                P    E  4   ?  
+              X   X   <                P    E  4   ?  
 
 
  	     рz    
-              X   X   <                P    E  4   ?  
+              X   X   <                P    E  4   ?  
 
 
  	     рz    
-                    Ԁ              - (  (  <                `    E  	  8  
+                    Ԁ               (  (  <                `    E  	  8  
 
 
  	          
-    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         =       Ԁ              	       Ԁ              s	 p  p  <                p    E L 
+    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              	       Ԁ              s	 p  p  <                p    E L 
   8  
 
 
@@ -162,15 +153,15 @@
 
 
  	     z    
-  a  Y         	       Ԁ              	 X   X   <                    E  4   ?  
+  a  Y         	       Ԁ              Y	 X   X   <                    E  4   ?  
 
 
  	     z    
-  a  Y         	       Ԁ              7	 (  (  <                    E    8  
+  a  Y         	       Ԁ              	 (  (  <                    E    8  
 
 
  	          
-  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           G	       Ԁ              A       Ԁ               p  p  <                    E L   8  
+  Y                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           	       Ԁ              A       Ԁ               p  p  <                    E L   8  
 
 
  	          
@@ -178,23 +169,19 @@
 
 
  	     z    
-                    Ԁ               X   X   <                    E  4   ?  
-
-
- 	     z    
-             I X   X   <                    E  4   ?  
+                    Ԁ               X   X   <                    E  4   ?  
 
 
  	     z    
-             O X   X   <                    E  4   ?  
+              X   X   <                    E  4   ?  
 
 
  	     z    
-                    Ԁ              Ʀ (  (  <                    E    8  
+             "       Ԁ              < (  (  <                    E    8  
 
 
  	          
-    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ֦       Ԁ              w       Ԁ              { p  p  <                    E L   8  
+    a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         L       Ԁ              w       Ԁ              { p  p  <                    E L   8  
 
 
  	  q        
@@ -202,23 +189,27 @@
 
 
  	     z    
-  [  S         .|       Ԁ              U} X   X   <                    E  4   ?  
+  [  S         .|       Ԁ              } X   X   <                    E  4   ?  
+
+
+ 	     z    
+  [  S         ~ X   X   <                    E  4   ?  
 
 
  	     z    
-  [  S         ~ X   X   <                    E  4   ?  
+  [  S         5 X   X   <                    E  4   ?  
 
 
  	     z    
-  [  S          X   X   <                    E  4   ?  
+  [  S          X   X   <                    E  4   ?  
 
 
  	     z    
-  [  S                Ԁ               (  (  <                    E    8  
+  [  S         A       Ԁ              [ (  (  <                    E    8  
 
 
  	          
-  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ                      Ԁ              !  p  p  <                     E L   8  
+  S                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           k       Ԁ                      Ԁ              !  p  p  <                     E L   8  
 
 
  	  Y        
@@ -226,121 +217,146 @@
 
 
  	     qz    
-             6"        Ԁ              '#  X   X   <                    E  4   ?  
+             6"        Ԁ              "  X   X   <                    E  4   ?  
+
+
+ 	     qz    
+             ?$  X   X   <                    E  4   ?  
+
+
+ 	     qz    
+             '  X   X   <                    E  4   ?  
+
+
+ 	     qz    
+              *  X   X   <                    E  4   ?  
 
 
  	     qz    
-             $  X   X   <                    E  4   ?  
+             $0  X   X   <                    E  4   ?  
 
 
  	     qz    
-             -        Ԁ              0  (  (  <                     E    8  
+             8        Ԁ              ;  (  (  <                     E    8  
 
 
  	  q        
-    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         +0        Ԁ              y  T   T               0    E  0     
-	
-      
-	    
-	         p  T   T                    E  0     
+    [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ;        Ԁ              >  T   T                    E  0     
 
 
       
 
     
 
-         V @   @   <                @           
+         L T   T               0    E  0     
+	
+      
+	    
+	         R @   @   <                @           
+	     
+       S @   @   <                @           
+	     
+       V @   @   <                @           
 	     
-       Z       Ԁ              ^       Ԁ              n @   @               P           
+       WZ       Ԁ              :a       Ԁ              u @   @               P           
 	
 
-       n @   @   <                            
+       v @   @   <                            
 
      
-	       o       Ԁ              Ns p  p  <                `    E L   8  
+	       v       Ԁ              ,z p  p  <                `    E L   8  
 
 
  	  A        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ^s       Ԁ              ,w (  (  <                p    E    8  
+  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   <z       Ԁ              } (  (  <                p    E    8  
 
 
  	  !Y        
-  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           <w       Ԁ              { @   @                           
+  M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           }       Ԁ               @   @                           
 
 
-	       !| @   @   <                           
+	        @   @   <                           
 	     
 
-       1|       Ԁ              | X   X   <                     E  4 	  @  
+              Ԁ              r X   X   <                     E  4 	  @  
 
 
  	     !Yz    
-  p  M         y}       Ԁ              ՠ @   @                          
+  r  M         ?       Ԁ               @   @                          
 	
-              Ԁ               X   X   <                    E  4 	  ?  
+       ʜ       Ԁ               X   X   <                    E  4 	  ?  
 
 
  	     !Yz    
-  p  M         !       Ԁ               p  p  <                    E L   8  
+  r  M         !       Ԁ               p  p  <                    E L   8  
 
 
  	  #)        
-    p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ               X   X   <                    E  4 
+    r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ               X   X   <                    E  4 
   @  
 
 
  	     %Az    
-                    Ԁ               X   X   <                    E  4 
+                    Ԁ               X   X   <                    E  4 
   ?  
 
 
  	     %Az    
-             2 X   X   <                    E  4 
+              X   X   <                    E  4 
   ?  
 
 
  	     %Az    
-                    Ԁ                (  (  <                    E    8  
-
-
- 	  %A        
-    p                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ԁ              i       Ԁ               p  p  <                    E L   8  
-
+             | X   X   <                    E  4 
+  ?  
 
- 	  '        
-  	G                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              A X   X   <                     E  4   @  
+
+ 	     %Az    
+             { X   X   <                    E  4 
+  ?  
 
 
- 	     ))z    
-  	O  	G                Ԁ              # X   X   <                    E  4   ?  
+ 	     %Az    
+             E X   X   <                    E  4 
+  ?  
 
 
- 	     ))z    
-  	O  	G          X   X   <                    E  4   ?  
+ 	     %Az    
+             
+       Ԁ               X   X   <                    E  4 
+  ?  
 
 
- 	     ))z    
-  	O  	G          X   X   <                    E  4   ?  
+ 	     %Az    
+              (  (  <                    E    8  
+
+
+ 	  %A        
+    r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ԁ              i       Ԁ               p  p  <                    E L   8  
+
+
+ 	  '        
+  	G                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ԁ              A X   X   <                     E  4   @  
 
 
  	     ))z    
-  	O  	G          X   X   <                    E  4   ?  
+  	O  	G                Ԁ              5 X   X   <                    E  4   ?  
 
 
  	     ))z    
-  	O  	G          X   X   <                    E  4   ?  
+  	O  	G          X   X   <                    E  4   ?  
 
 
  	     ))z    
-  	O  	G          X   X   <                    E  4   ?  
+  	O  	G          X   X   <                    E  4   ?  
 
 
  	     ))z    
-  	O  	G                Ԁ              0 (  (  <                     E    8  
+  	O  	G                Ԁ               (  (  <                     E    8  
 
 
  	  ))        
-  	G                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           @       Ԁ                     Ԁ              + p  p  <                    E L   8  
+  	G                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Ԁ                     Ԁ              + p  p  <                    E L   8  
 
 
  	  *        
@@ -352,19 +368,19 @@
 
 
  	     -z    
-  	  	          X   X   <                     E  4   ?  
+  	  	          X   X   <                     E  4   ?  
 
 
  	     -z    
-  	  	          X   X   <                     E  4   ?  
+  	  	         " X   X   <                     E  4   ?  
 
 
  	     -z    
-  	  	                Ԁ               (  (  <                0    E    8  
+  	  	         M       Ԁ              g (  (  <                0    E    8  
 
 
  	  -        
-  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              	       Ԁ              s	 p  p  <                @    E L   8  
+  	  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         w       Ԁ              	       Ԁ              s	 p  p  <                @    E L   8  
 
 
  	  .        
@@ -375,30 +391,42 @@
  	     0z    
   
 I  
-A         	       Ԁ              b	 X   X   <                P    E  4   ?  
+A         	       Ԁ              	 X   X   <                P    E  4   ?  
 
 
  	     0z    
   
 I  
-A         	 X   X   <                P    E  4   ?  
+A         I	 X   X   <                P    E  4   ?  
 
 
  	     0z    
   
 I  
-A         	 X   X   <                P    E  4   ?  
+A         	 X   X   <                P    E  4   ?  
 
 
  	     0z    
   
 I  
-A         R	       Ԁ              l	 (  (  <                `    E    8  
+A         3	 X   X   <                P    E  4   ?  
+
+
+ 	     0z    
+  
+I  
+A         1	 X   X   <                P    E  4   ?  
+
+
+ 	     0z    
+  
+I  
+A         Ͽ	       Ԁ              	 (  (  <                `    E    8  
 
 
  	  0        
   
-A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |	       Ԁ              A       Ԁ               p  p  <                p    E L   8  
+A  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	       Ԁ              A       Ԁ               p  p  <                p    E L   8  
 
 
  	  2        
@@ -410,19 +438,37 @@
  	     4z    
   
   
-                Ԁ               X   X   <                    E  4   ?  
+                Ԁ               X   X   <                    E  4   ?  
+
+
+ 	     4z    
+  
+  
+          X   X   <                    E  4   ?  
+
+
+ 	     4z    
+  
+  
+         T X   X   <                    E  4   ?  
+
+
+ 	     4z    
+  
+  
+          X   X   <                    E  4   ?  
 
 
  	     4z    
   
   
-                Ԁ              Ϫ (  (  <                    E    8  
+         n       Ԁ               (  (  <                    E    8  
 
 
  	  4        
   
   
-I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ߪ       Ԁ              w       Ԁ              { p  p  <                    E L   8  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ              w       Ԁ              { p  p  <                    E L   8  
 
 
  	  6        
@@ -431,13 +477,13 @@
 
 
  	     8ɀz    
-  C  ;         .|       Ԁ              } X   X   <                    E  4   ?  
+  C  ;         .|       Ԁ              } X   X   <                    E  4   ?  
 
 
  	     8ɀz    
-  C  ;         a       Ԁ              { (  (  <                    E    8  
+  C  ;                Ԁ              ъ (  (  <                    E    8  
 
 
  	  8        
   ;  
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ           
\ No newline at end of file
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ԁ           
\ No newline at end of file
diff -Naur ns-3.21/src/aodv/test/udp-chain-test-0-0.pcap ns-3.22/src/aodv/test/udp-chain-test-0-0.pcap
--- ns-3.21/src/aodv/test/udp-chain-test-0-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/udp-chain-test-0-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,24 +1,24 @@
-ò            i       ( T   T          	     	      E  0      
-
-      
-    
-           d T   T          
+ò            i       87  T   T          
      
       E  0      
 
       
     
-         h< T   T          	     	     E  0     
+          Hq  T   T          	     	      E  0      
 
       
     
-          T   T          
+         H^  T   T          
      
      E  0     
 
       
     
-          X   X          	     	      E  4     
+         Є  T   T          	     	     E  0     
+
+      
+    
+          X   X          	     	      E  4     
 
     (     
 
@@ -30,55 +30,55 @@
     (    
 
     
-          63 @   @   <           
+          n @   @   <           
      
 0            
 
      
-       4       Ԁ              8 @   @          
+       o       Ԁ              ݒ @   @          
      
 @            
 
 
-       8 @   @   <      
+        @   @   <      
      	     	0            	
      
 
-       9       Ԁ       	       }: T   T   <      	     
+              Ԁ       	        T   T   <      	     
      
 P     E  0      
 
      
 
     
-  (       :       Ԁ       
-       e> @   @          	     	@            	
+                Ԁ       
+        @   @          	     	@            	
 
-       h? @   @   <      	     
+        @   @   <      	     
      
 `            
 
      	
-       x?       Ԁ       
-       ? (  (  <      
+              Ԁ       
+       _ (  (  <      
      	     	P     E     @  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 E       Ԁ       	       i @   @          
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 @       Ԁ       	        (  (  <      
+     	     	`     E    @  
+
+
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 p       Ԁ       	        @   @          
      
 p            
 
 
-       i       Ԁ              o (  (  <           
+       k       Ԁ              C (  (  <           
      
      E     ?  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  (  (  <      
-     	     	`     E    @  
-
-
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 p       Ԁ       	       6 (  (  <           
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | (  (  <           
      
      E    ?  
 
@@ -156,25 +156,24 @@
 
       
     
-           @   @          	     	            	
+         x @   @          	     	            	
 
-        @   @   <      	     
+       z @   @   <      	     
      
             
 
      	
-              Ԁ       
-        (  (  <      
+              Ԁ       
+       D (  (  <      
      	     	     E  	  @  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ       	       i @   @          
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 %       Ԁ       	        @   @          
      
 0           
 
 
-       8       Ԁ              F
- (  (  <           
+              Ԁ               (  (  <           
      
 @    E  	  ?  
 
diff -Naur ns-3.21/src/aodv/test/udp-chain-test-9-0.pcap ns-3.22/src/aodv/test/udp-chain-test-9-0.pcap
--- ns-3.21/src/aodv/test/udp-chain-test-9-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/test/udp-chain-test-9-0.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,53 +1,53 @@
-ò            i       u  T   T                     E  0      
-	
-      
-	    
-	            T   T                     E  0      
+ò            i       Y  T   T                     E  0      
 
 
       
 
     
 
-         xV  T   T                    E  0     
+           T   T                     E  0      
 	
       
 	    
-	         `m  T   T                    E  0     
+	         :  T   T                    E  0     
 
 
       
 
     
 
-         C @   @                            
+         @ T   T                    E  0     
+	
+      
+	    
+	         Ӥ @   @                            
+	
+              Ԁ               T   T   <                0     E  0      
+	
+   @ 
+
+    
+         s @   @               @            
 	
 
-       e @   @   <                             
+        @   @   <                             
 
      
-	              Ԁ               T   T   <                0     E  0      
+	       B       Ԁ               T   T   <                P     E  0      
 	
 
      
    
 
-  _       &       Ԁ              + @   @               @            
-	
-              Ԁ               T   T   <                P     E  0      
-	
-   @ 
-
-    
-  (        @   @   <                `            
+  _              Ԁ               @   @   <                `            
 	     
-              Ԁ                     Ԁ               (  (  <                p     E     8  
+              Ԁ                     Ԁ              Ë (  (  <                p     E     8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ                      Ԁ              G (  (  <                     E    8  
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ӌ       Ԁ              q       Ԁ              7 (  (  <                     E    8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 W       Ԁ                     Ԁ               (  (  <                     E    8  
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 G       Ԁ                     Ԁ               (  (  <                     E    8  
 
 
  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ                     Ԁ               (  (  <                     E    8  
@@ -65,36 +65,36 @@
  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              /        Ԁ              5  (  (  <                     E    8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 5        Ԁ              e  T   T               0     E  0     
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 5        Ԁ              6  T   T               0     E  0     
 
 
       
 
     
 
-         q  T   T                    E  0     
+          T   T                    E  0     
 	
       
 	    
 	         9       Ԁ               (  (  <                     E    8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              | @   @   <                           
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              g> @   @   <                           
 	     
-       ͯ       Ԁ              ) @   @                           
+       D       Ԁ              T @   @                           
 	
 
-       K @   @   <                @            
+       T @   @   <                @            
 
      
-	              Ԁ               (  (  <                0    E  	  8  
+	       uU       Ԁ              q[ (  (  <                0    E  	  8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ                     Ԁ               (  (  <                @    E  
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 [       Ԁ              3       Ԁ              9 (  (  <                @    E  
   8  
 
 
- 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ                     Ԁ               (  (  <                P    E    8  
+ 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 9       Ԁ                     Ԁ               (  (  <                P    E    8  
 
 
  	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ԁ              Y	       Ԁ              	 (  (  <                `    E    8  
diff -Naur ns-3.21/src/aodv/wscript ns-3.22/src/aodv/wscript
--- ns-3.21/src/aodv/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/aodv/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -11,7 +11,7 @@
         'model/aodv-packet.cc',
         'model/aodv-neighbor.cc',
         'model/aodv-routing-protocol.cc',
-	'helper/aodv-helper.cc',
+        'helper/aodv-helper.cc',
         ]
 
     aodv_test = bld.create_ns3_module_test_library('aodv')
diff -Naur ns-3.21/src/applications/bindings/modulegen__gcc_ILP32.py ns-3.22/src/applications/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/applications/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -544,6 +544,9 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndErrorCallback&')
@@ -2641,10 +2644,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -3390,10 +3393,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3847,7 +3850,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3898,6 +3906,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3974,6 +3987,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -4008,6 +4025,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -6986,14 +7005,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -7031,8 +7050,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -7053,10 +7072,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -8405,11 +8424,6 @@
                    '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', 
@@ -8480,6 +8494,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3PacketSink_methods(root_module, cls):
@@ -9860,8 +9879,14 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERTISEMENTS [variable]
+    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERTISEMENTS', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERT_INTERVAL [variable]
+    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERT_INTERVAL', 'uint32_t const', is_const=True)
     ## radvd.h (module 'applications'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
     cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'applications'): ns3::Radvd::MIN_DELAY_BETWEEN_RAS [variable]
+    cls.add_static_attribute('MIN_DELAY_BETWEEN_RAS', 'uint32_t const', is_const=True)
     ## radvd.h (module 'applications'): void ns3::Radvd::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -9920,6 +9945,10 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## radvd-interface.h (module 'applications'): ns3::Time ns3::RadvdInterface::GetLastRaTxTime() [member function]
+    cls.add_method('GetLastRaTxTime', 
+                   'ns3::Time', 
+                   [])
     ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
     cls.add_method('GetLinkMtu', 
                    'uint32_t', 
@@ -9965,6 +9994,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsInitialRtrAdv() [member function]
+    cls.add_method('IsInitialRtrAdv', 
+                   'bool', 
+                   [])
     ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
     cls.add_method('IsIntervalOpt', 
                    'bool', 
@@ -10027,6 +10060,10 @@
     cls.add_method('SetIntervalOpt', 
                    'void', 
                    [param('bool', 'intervalOpt')])
+    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLastRaTxTime(ns3::Time now) [member function]
+    cls.add_method('SetLastRaTxTime', 
+                   'void', 
+                   [param('ns3::Time', 'now')])
     ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
     cls.add_method('SetLinkMtu', 
                    'void', 
diff -Naur ns-3.21/src/applications/bindings/modulegen__gcc_LP64.py ns-3.22/src/applications/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/applications/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -544,6 +544,9 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndErrorCallback&')
@@ -2641,10 +2644,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -3390,10 +3393,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3847,7 +3850,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3898,6 +3906,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3974,6 +3987,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -4008,6 +4025,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -6986,14 +7005,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -7031,8 +7050,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -7053,10 +7072,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -8405,11 +8424,6 @@
                    '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', 
@@ -8480,6 +8494,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3PacketSink_methods(root_module, cls):
@@ -9860,8 +9879,14 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERTISEMENTS [variable]
+    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERTISEMENTS', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERT_INTERVAL [variable]
+    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERT_INTERVAL', 'uint32_t const', is_const=True)
     ## radvd.h (module 'applications'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
     cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'applications'): ns3::Radvd::MIN_DELAY_BETWEEN_RAS [variable]
+    cls.add_static_attribute('MIN_DELAY_BETWEEN_RAS', 'uint32_t const', is_const=True)
     ## radvd.h (module 'applications'): void ns3::Radvd::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -9920,6 +9945,10 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## radvd-interface.h (module 'applications'): ns3::Time ns3::RadvdInterface::GetLastRaTxTime() [member function]
+    cls.add_method('GetLastRaTxTime', 
+                   'ns3::Time', 
+                   [])
     ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
     cls.add_method('GetLinkMtu', 
                    'uint32_t', 
@@ -9965,6 +9994,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsInitialRtrAdv() [member function]
+    cls.add_method('IsInitialRtrAdv', 
+                   'bool', 
+                   [])
     ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
     cls.add_method('IsIntervalOpt', 
                    'bool', 
@@ -10027,6 +10060,10 @@
     cls.add_method('SetIntervalOpt', 
                    'void', 
                    [param('bool', 'intervalOpt')])
+    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLastRaTxTime(ns3::Time now) [member function]
+    cls.add_method('SetLastRaTxTime', 
+                   'void', 
+                   [param('ns3::Time', 'now')])
     ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
     cls.add_method('SetLinkMtu', 
                    'void', 
diff -Naur ns-3.21/src/applications/helper/radvd-helper.cc ns-3.22/src/applications/helper/radvd-helper.cc
--- ns-3.21/src/applications/helper/radvd-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/helper/radvd-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,11 +26,11 @@
 
 #include "radvd-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("RadvdHelper");
-
 namespace ns3
 {
 
+NS_LOG_COMPONENT_DEFINE ("RadvdHelper");
+
 RadvdHelper::RadvdHelper ()
 {
   m_factory.SetTypeId (Radvd::GetTypeId ());
diff -Naur ns-3.21/src/applications/model/application-packet-probe.cc ns-3.22/src/applications/model/application-packet-probe.cc
--- ns-3.21/src/applications/model/application-packet-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/application-packet-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("ApplicationPacketProbe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ApplicationPacketProbe");
+
 NS_OBJECT_ENSURE_REGISTERED (ApplicationPacketProbe);
 
 TypeId
@@ -41,11 +41,14 @@
     .SetParent<Probe> ()
     .AddConstructor<ApplicationPacketProbe> ()
     .AddTraceSource ( "Output",
-                      "The packet plus its socket address that serve as the output for this probe",
-                      MakeTraceSourceAccessor (&ApplicationPacketProbe::m_output))
+                      "The packet plus its socket address that serve "
+                      "as the output for this probe",
+                      MakeTraceSourceAccessor (&ApplicationPacketProbe::m_output),
+                      "ns3::Packet::PacketAddressTracedCallback")
     .AddTraceSource ( "OutputBytes",
                       "The number of bytes in the packet",
-                      MakeTraceSourceAccessor (&ApplicationPacketProbe::m_outputBytes))
+                      MakeTraceSourceAccessor (&ApplicationPacketProbe::m_outputBytes),
+                      "ns3::Packet::PacketSizeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/applications/model/bulk-send-application.cc ns-3.22/src/applications/model/bulk-send-application.cc
--- ns-3.21/src/applications/model/bulk-send-application.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/bulk-send-application.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include "ns3/tcp-socket-factory.h"
 #include "bulk-send-application.h"
 
-NS_LOG_COMPONENT_DEFINE ("BulkSendApplication");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BulkSendApplication");
+
 NS_OBJECT_ENSURE_REGISTERED (BulkSendApplication);
 
 TypeId
@@ -64,7 +64,8 @@
                    MakeTypeIdAccessor (&BulkSendApplication::m_tid),
                    MakeTypeIdChecker ())
     .AddTraceSource ("Tx", "A new packet is created and is sent",
-                     MakeTraceSourceAccessor (&BulkSendApplication::m_txTrace))
+                     MakeTraceSourceAccessor (&BulkSendApplication::m_txTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/applications/model/onoff-application.cc ns-3.22/src/applications/model/onoff-application.cc
--- ns-3.21/src/applications/model/onoff-application.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/onoff-application.cc	2015-02-05 15:46:22.000000000 -0800
@@ -42,10 +42,10 @@
 #include "ns3/string.h"
 #include "ns3/pointer.h"
 
-NS_LOG_COMPONENT_DEFINE ("OnOffApplication");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("OnOffApplication");
+
 NS_OBJECT_ENSURE_REGISTERED (OnOffApplication);
 
 TypeId
@@ -86,7 +86,8 @@
                    MakeTypeIdAccessor (&OnOffApplication::m_tid),
                    MakeTypeIdChecker ())
     .AddTraceSource ("Tx", "A new packet is created and is sent",
-                     MakeTraceSourceAccessor (&OnOffApplication::m_txTrace))
+                     MakeTraceSourceAccessor (&OnOffApplication::m_txTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/applications/model/packet-loss-counter.cc ns-3.22/src/applications/model/packet-loss-counter.cc
--- ns-3.21/src/applications/model/packet-loss-counter.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/packet-loss-counter.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,7 +28,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("PacketLossCounter");
 
-
 PacketLossCounter::PacketLossCounter (uint8_t bitmapSize)
   : m_lost (0),
     m_bitMapSize (0),
diff -Naur ns-3.21/src/applications/model/packet-sink.cc ns-3.22/src/applications/model/packet-sink.cc
--- ns-3.21/src/applications/model/packet-sink.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/packet-sink.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("PacketSink");
+
 NS_OBJECT_ENSURE_REGISTERED (PacketSink);
 
 TypeId 
@@ -43,16 +44,20 @@
   static TypeId tid = TypeId ("ns3::PacketSink")
     .SetParent<Application> ()
     .AddConstructor<PacketSink> ()
-    .AddAttribute ("Local", "The Address on which to Bind the rx socket.",
+    .AddAttribute ("Local",
+                   "The Address on which to Bind the rx socket.",
                    AddressValue (),
                    MakeAddressAccessor (&PacketSink::m_local),
                    MakeAddressChecker ())
-    .AddAttribute ("Protocol", "The type id of the protocol to use for the rx socket.",
+    .AddAttribute ("Protocol",
+                   "The type id of the protocol to use for the rx socket.",
                    TypeIdValue (UdpSocketFactory::GetTypeId ()),
                    MakeTypeIdAccessor (&PacketSink::m_tid),
                    MakeTypeIdChecker ())
-    .AddTraceSource ("Rx", "A packet has been received",
-                     MakeTraceSourceAccessor (&PacketSink::m_rxTrace))
+    .AddTraceSource ("Rx",
+                     "A packet has been received",
+                     MakeTraceSourceAccessor (&PacketSink::m_rxTrace),
+                     "ns3::Packet::PacketAddressTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/applications/model/radvd.cc ns-3.22/src/applications/model/radvd.cc
--- ns-3.21/src/applications/model/radvd.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/radvd.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,6 +21,7 @@
  */
 
 #include "ns3/log.h"
+#include "ns3/abort.h"
 #include "ns3/ipv6-address.h"
 #include "ns3/nstime.h"
 #include "ns3/simulator.h"
@@ -29,7 +30,10 @@
 #include "ns3/uinteger.h"
 #include "ns3/inet6-socket-address.h"
 #include "ns3/ipv6.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/ipv6-interface.h"
 #include "ns3/ipv6-raw-socket-factory.h"
+#include "ns3/ipv6-packet-info-tag.h"
 #include "ns3/ipv6-header.h"
 #include "ns3/icmpv6-header.h"
 #include "ns3/string.h"
@@ -71,12 +75,22 @@
       *it = 0;
     }
   m_configurations.clear ();
-  m_socket = 0;
+  m_recvSocket = 0;
 }
 
 void Radvd::DoDispose ()
 {
   NS_LOG_FUNCTION (this);
+
+  m_recvSocket->Close ();
+  m_recvSocket = 0;
+
+  for (SocketMapI it = m_sendSockets.begin (); it != m_sendSockets.end (); ++it)
+    {
+      it->second->Close ();
+      it->second = 0;
+    }
+
   Application::DoDispose ();
 }
 
@@ -84,23 +98,39 @@
 {
   NS_LOG_FUNCTION (this);
 
-  if (!m_socket)
+  TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
+
+  if (!m_recvSocket)
     {
-      TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
-      m_socket = Socket::CreateSocket (GetNode (), tid);
+      m_recvSocket = Socket::CreateSocket (GetNode (), tid);
 
-      NS_ASSERT (m_socket);
+      NS_ASSERT (m_recvSocket);
 
-      /*    m_socket->Bind (Inet6SocketAddress (m_localAddress, 0)); */
-      /*    m_socket->Connect (Inet6SocketAddress (Ipv6Address::GetAllNodesMulticast (), 0)); */
-      m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
-      m_socket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
+      m_recvSocket->Bind (Inet6SocketAddress (Ipv6Address::GetAllRoutersMulticast (), 0));
+      m_recvSocket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
+      m_recvSocket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
+      m_recvSocket->ShutdownSend ();
+      m_recvSocket->SetRecvPktInfo (true);
     }
 
   for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
     {
-      m_eventIds[(*it)->GetInterface ()] = EventId ();
-      ScheduleTransmit (Seconds (0.), (*it), m_eventIds[(*it)->GetInterface ()], Ipv6Address::GetAllNodesMulticast (), true); 
+      if ((*it)->IsSendAdvert ())
+        {
+          m_unsolicitedEventIds[(*it)->GetInterface ()] = Simulator::Schedule (Seconds (0.), &Radvd::Send,
+                                                                               this, (*it), Ipv6Address::GetAllNodesMulticast (), true);
+        }
+
+      if (m_sendSockets.find ((*it)->GetInterface ()) == m_sendSockets.end ())
+        {
+          Ptr<Ipv6L3Protocol> ipv6 = GetNode ()->GetObject<Ipv6L3Protocol> ();
+          Ptr<Ipv6Interface> iFace = ipv6->GetInterface ((*it)->GetInterface ());
+
+          m_sendSockets[(*it)->GetInterface ()] = Socket::CreateSocket (GetNode (), tid);
+          m_sendSockets[(*it)->GetInterface ()]->Bind (Inet6SocketAddress (iFace->GetLinkLocalAddress ().GetAddress (), 0));
+          m_sendSockets[(*it)->GetInterface ()]->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
+          m_sendSockets[(*it)->GetInterface ()]->ShutdownRecv ();
+        }
     }
 }
 
@@ -108,16 +138,22 @@
 {
   NS_LOG_FUNCTION (this);
 
-  if (m_socket)
+  if (m_recvSocket)
+    {
+      m_recvSocket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
+    }
+
+  for (EventIdMapI it = m_unsolicitedEventIds.begin (); it != m_unsolicitedEventIds.end (); ++it)
     {
-      m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
+      Simulator::Cancel ((*it).second);
     }
+  m_unsolicitedEventIds.clear ();
 
-  for (EventIdMapI it = m_eventIds.begin (); it != m_eventIds.end (); ++it)
+  for (EventIdMapI it = m_solicitedEventIds.begin (); it != m_solicitedEventIds.end (); ++it)
     {
       Simulator::Cancel ((*it).second);
     }
-  m_eventIds.clear ();
+  m_solicitedEventIds.clear ();
 }
 
 void Radvd::AddConfiguration (Ptr<RadvdInterface> routerInterface)
@@ -134,26 +170,20 @@
   return 1;
 }
 
-void Radvd::ScheduleTransmit (Time dt, Ptr<RadvdInterface> config, EventId& eventId, Ipv6Address dst, bool reschedule)
-{
-  NS_LOG_FUNCTION (this << dt << config << &eventId << dst << reschedule);
-  eventId = Simulator::Schedule (dt, &Radvd::Send, this, config, dst, reschedule);
-}
-
 void Radvd::Send (Ptr<RadvdInterface> config, Ipv6Address dst, bool reschedule)
 {
   NS_LOG_FUNCTION (this << dst << reschedule);
-  NS_ASSERT (m_eventIds[config->GetInterface ()].IsExpired ());
+
+  if (reschedule == true)
+    {
+      config->SetLastRaTxTime (Simulator::Now ());
+    }
+
   Icmpv6RA raHdr;
   Icmpv6OptionLinkLayerAddress llaHdr;
   Icmpv6OptionMtu mtuHdr;
   Icmpv6OptionPrefixInformation prefixHdr;
 
-  if (m_eventIds.size () == 0)
-    {
-      return;
-    }
-
   std::list<Ptr<RadvdPrefix> > prefixes = config->GetPrefixes ();
   Ptr<Packet> p = Create<Packet> ();
   Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
@@ -212,9 +242,9 @@
       p->AddHeader (prefixHdr);
     }
 
-  Ipv6Address src = ipv6->GetAddress (config->GetInterface (), 0).GetAddress ();
-  m_socket->Bind (Inet6SocketAddress (src, 0));
-  m_socket->Connect (Inet6SocketAddress (dst, 0));
+  Address sockAddr;
+  m_sendSockets[config->GetInterface ()]->GetSockName (sockAddr);
+  Ipv6Address src = Inet6SocketAddress::ConvertFrom (sockAddr).GetIpv6 ();
 
   /* as we know interface index that will be used to send RA and 
    * we always send RA with router's link-local address, we can 
@@ -231,15 +261,21 @@
   p->AddPacketTag (ttl);
 
   /* send RA */
-  NS_LOG_LOGIC ("Send RA");
-  m_socket->Send (p, 0);
+  NS_LOG_LOGIC ("Send RA to " << dst);
+  m_sendSockets[config->GetInterface ()]->SendTo (p, 0, Inet6SocketAddress (dst, 0));
 
   if (reschedule)
     {
       uint64_t delay = static_cast<uint64_t> (m_jitter->GetValue (config->GetMinRtrAdvInterval (), config->GetMaxRtrAdvInterval ()) + 0.5);
-      NS_LOG_INFO ("Reschedule in " << delay);
+      if (config->IsInitialRtrAdv ())
+        {
+          if (delay > MAX_INITIAL_RTR_ADVERT_INTERVAL)
+            delay = MAX_INITIAL_RTR_ADVERT_INTERVAL;
+        }
+
+      NS_LOG_INFO ("Reschedule in " << delay << " milliseconds");
       Time t = MilliSeconds (delay);
-      ScheduleTransmit (t, config, m_eventIds[config->GetInterface ()], Ipv6Address::GetAllNodesMulticast (), reschedule);
+      m_unsolicitedEventIds[config->GetInterface ()] = Simulator::Schedule (t, &Radvd::Send, this, config, Ipv6Address::GetAllNodesMulticast (), true);
     }
 }
 
@@ -253,9 +289,18 @@
     {
       if (Inet6SocketAddress::IsMatchingType (from))
         {
+          Ipv6PacketInfoTag interfaceInfo;
+          if (!packet->RemovePacketTag (interfaceInfo))
+            {
+              NS_ABORT_MSG ("No incoming interface on RADVD message, aborting.");
+            }
+          uint32_t incomingIf = interfaceInfo.GetRecvIf ();
+          Ptr<NetDevice> dev = GetNode ()->GetDevice (incomingIf);
+          Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
+          uint32_t ipInterfaceIndex = ipv6->GetInterfaceForDevice (dev);
+
           Ipv6Header hdr;
           Icmpv6RS rsHdr;
-          Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
           uint64_t delay = 0;
           Time t;
 
@@ -269,20 +314,44 @@
               packet->RemoveHeader (rsHdr);
               NS_LOG_INFO ("Received ICMPv6 Router Solicitation from " << hdr.GetSourceAddress () << " code = " << (uint32_t)rsHdr.GetCode ());
 
-              /* XXX advertise just prefix(es) for the interface not all */
               for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
                 {
-                  /* calculate minimum delay between RA */
-                  delay = static_cast<uint64_t> (m_jitter->GetValue (0, MAX_RA_DELAY_TIME) + 0.5); 
-                  t = Simulator::Now () + MilliSeconds (delay); /* absolute time of solicited RA */
-
-                  /* if our solicited RA is before the next periodic RA, we schedule it */
-                  if (t.GetTimeStep () < static_cast<int64_t> (m_eventIds[(*it)->GetInterface ()].GetTs ()))
+                  if (ipInterfaceIndex == (*it)->GetInterface ())
                     {
-                      NS_LOG_INFO ("schedule new RA");
-                      EventId ei;
-
-                      ScheduleTransmit (MilliSeconds (delay), (*it), ei, address.GetIpv6 (), false);
+                      /* calculate minimum delay between RA */
+                      delay = static_cast<uint64_t> (m_jitter->GetValue (0, MAX_RA_DELAY_TIME) + 0.5);
+                      t = Simulator::Now () + MilliSeconds (delay); /* absolute time of solicited RA */
+
+                      if (Simulator::Now () < (*it)->GetLastRaTxTime () + MilliSeconds (MIN_DELAY_BETWEEN_RAS) )
+                        {
+                          t += MilliSeconds (MIN_DELAY_BETWEEN_RAS);
+                        }
+
+                      /* if our solicited RA is before the next periodic RA, we schedule it */
+                      bool scheduleSingle = true;
+
+                      if (m_solicitedEventIds.find ((*it)->GetInterface ()) != m_solicitedEventIds.end ())
+                        {
+                          if (m_solicitedEventIds[(*it)->GetInterface ()].IsRunning ())
+                            {
+                              scheduleSingle = false;
+                            }
+                        }
+
+                      if (m_unsolicitedEventIds.find ((*it)->GetInterface ()) != m_unsolicitedEventIds.end ())
+                        {
+                          if (t.GetTimeStep () > static_cast<int64_t> (m_unsolicitedEventIds[(*it)->GetInterface ()].GetTs ()))
+                            {
+                              scheduleSingle = false;
+                            }
+                        }
+
+                      if (scheduleSingle)
+                        {
+                          NS_LOG_INFO ("schedule new RA");
+                          m_solicitedEventIds[(*it)->GetInterface ()] = Simulator::Schedule (MilliSeconds (delay), &Radvd::Send,
+                                                                                             this, (*it), Ipv6Address::GetAllNodesMulticast (), false);
+                        }
                     }
                 }
               break;
diff -Naur ns-3.21/src/applications/model/radvd.h ns-3.22/src/applications/model/radvd.h
--- ns-3.21/src/applications/model/radvd.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/radvd.h	2015-02-05 15:46:22.000000000 -0800
@@ -67,6 +67,18 @@
    * \brief Default value for maximum delay of RA (ms)
    */
   static const uint32_t MAX_RA_DELAY_TIME = 500;
+  /**
+   * \brief Default value for maximum initial RA advertisements
+   */
+  static const uint32_t MAX_INITIAL_RTR_ADVERTISEMENTS = 3;
+  /**
+   * \brief Default value for maximum initial RA advertisements interval (ms)
+   */
+  static const uint32_t MAX_INITIAL_RTR_ADVERT_INTERVAL = 16000;
+  /**
+   * \brief Default value for minimum delay between RA advertisements (ms)
+   */
+  static const uint32_t MIN_DELAY_BETWEEN_RAS = 3000;
 
   /**
    * \brief Add configuration for an interface;
@@ -105,6 +117,13 @@
   /// Container Const Iterator: interface number, EventId
   typedef std::map<uint32_t, EventId>::const_iterator EventIdMapCI;
 
+  /// Container: interface number, Socket
+  typedef std::map<uint32_t, Ptr<Socket> > SocketMap;
+  /// Container Iterator: interface number, Socket
+  typedef std::map<uint32_t, Ptr<Socket> >::iterator SocketMapI;
+  /// Container Const Iterator: interface number, Socket
+  typedef std::map<uint32_t, Ptr<Socket> >::const_iterator SocketMapCI;
+
   /**
    * \brief Start the application.
    */
@@ -116,16 +135,6 @@
   virtual void StopApplication ();
 
   /**
-   * \brief Schedule sending a packet.
-   * \param dt interval between packet
-   * \param config interface configuration
-   * \param eventId event ID associated
-   * \param dst IPv6 destination address
-   * \param reschedule if true another send will be reschedule (periodic)
-   */
-  void ScheduleTransmit (Time dt, Ptr<RadvdInterface> config, EventId& eventId, Ipv6Address dst = Ipv6Address::GetAllNodesMulticast (), bool reschedule = false);
-
-  /**
    * \brief Send a packet.
    * \param config interface configuration
    * \param dst destination address (default ff02::1)
@@ -140,9 +149,14 @@
   void HandleRead (Ptr<Socket> socket);
 
   /**
+   * \brief Raw socket to receive RS.
+   */
+  Ptr<Socket> m_recvSocket;
+
+  /**
    * \brief Raw socket to send RA.
    */
-  Ptr<Socket> m_socket;
+  SocketMap m_sendSockets;
 
   /**
    * \brief List of configuration for interface.
@@ -150,9 +164,14 @@
   RadvdInterfaceList m_configurations;
 
   /**
-   * \brief Event ID map.
+   * \brief Event ID map for unsolicited RAs.
+   */
+  EventIdMap m_unsolicitedEventIds;
+
+  /**
+   * \brief Event ID map for solicited RAs.
    */
-  EventIdMap m_eventIds;
+  EventIdMap m_solicitedEventIds;
 
   /**
    * \brief Variable to provide jitter in advertisement interval
diff -Naur ns-3.21/src/applications/model/radvd-interface.cc ns-3.22/src/applications/model/radvd-interface.cc
--- ns-3.21/src/applications/model/radvd-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/radvd-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -50,6 +50,7 @@
   m_homeAgentPreference = 0;
   m_mobRtrSupportFlag = false;
   m_intervalOpt = false;
+  m_initialRtrAdvertisementsLeft = 3;
 }
 
 RadvdInterface::RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval)
@@ -76,6 +77,7 @@
   m_homeAgentPreference = 0;
   m_mobRtrSupportFlag = false;
   m_intervalOpt = false;
+  m_initialRtrAdvertisementsLeft = 3;
 }
 
 RadvdInterface::~RadvdInterface ()
@@ -335,5 +337,25 @@
   NS_LOG_FUNCTION (this << intervalOpt);
   m_intervalOpt = intervalOpt;
 }
+
+Time RadvdInterface::GetLastRaTxTime ()
+{
+  return m_lastSendTime;
+}
+
+void RadvdInterface::SetLastRaTxTime (Time now)
+{
+  m_lastSendTime = now;
+  if (m_initialRtrAdvertisementsLeft)
+    {
+      m_initialRtrAdvertisementsLeft --;
+    }
+}
+
+bool RadvdInterface::IsInitialRtrAdv ()
+{
+  return m_initialRtrAdvertisementsLeft;
+}
+
 } /* namespace ns3 */
 
diff -Naur ns-3.21/src/applications/model/radvd-interface.h ns-3.22/src/applications/model/radvd-interface.h
--- ns-3.21/src/applications/model/radvd-interface.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/radvd-interface.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,6 +23,7 @@
 
 #include <list>
 #include "ns3/simple-ref-count.h"
+#include "ns3/nstime.h"
 #include "radvd-prefix.h"
 
 namespace ns3
@@ -308,6 +309,24 @@
    */
   void SetIntervalOpt (bool intervalOpt);
 
+  /**
+   * \brief Get the last time a RA has been sent.
+   * \returns the last RA send time
+   */
+  Time GetLastRaTxTime ();
+
+  /**
+   * \brief Set the last RA send time. It also decrements the initial Rtr Advertisements counter.
+   * \param the last RA send time
+   */
+  void SetLastRaTxTime (Time now);
+
+  /**
+   * \brief Checks if the interface is subject to the initial Rtr Advertisements rule.
+   * \returns true if the initial Rtr Advertisements counter is greater than zero.
+   */
+  bool IsInitialRtrAdv ();
+
 private:
 
   /**
@@ -418,6 +437,17 @@
    * \brief Flag to add Advertisement Interval option in RA.
    */
   bool m_intervalOpt;
+
+  /**
+   * \brief Last RA send time.
+   */
+  Time m_lastSendTime;
+
+  /**
+   * \brief Number of fast announcement to do
+   */
+  uint8_t m_initialRtrAdvertisementsLeft;
+
 };
 
 } /* namespace ns3 */
diff -Naur ns-3.21/src/applications/model/seq-ts-header.cc ns-3.22/src/applications/model/seq-ts-header.cc
--- ns-3.21/src/applications/model/seq-ts-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/seq-ts-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/simulator.h"
 #include "seq-ts-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("SeqTsHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SeqTsHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (SeqTsHeader);
 
 SeqTsHeader::SeqTsHeader ()
diff -Naur ns-3.21/src/applications/model/udp-client.cc ns-3.22/src/applications/model/udp-client.cc
--- ns-3.21/src/applications/model/udp-client.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/udp-client.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,6 +36,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("UdpClient");
+
 NS_OBJECT_ENSURE_REGISTERED (UdpClient);
 
 TypeId
diff -Naur ns-3.21/src/applications/model/udp-echo-client.cc ns-3.22/src/applications/model/udp-echo-client.cc
--- ns-3.21/src/applications/model/udp-echo-client.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/udp-echo-client.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,6 +32,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("UdpEchoClientApplication");
+
 NS_OBJECT_ENSURE_REGISTERED (UdpEchoClient);
 
 TypeId
@@ -66,7 +67,8 @@
                                          &UdpEchoClient::GetDataSize),
                    MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("Tx", "A new packet is created and is sent",
-                     MakeTraceSourceAccessor (&UdpEchoClient::m_txTrace))
+                     MakeTraceSourceAccessor (&UdpEchoClient::m_txTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/applications/model/udp-echo-server.cc ns-3.22/src/applications/model/udp-echo-server.cc
--- ns-3.21/src/applications/model/udp-echo-server.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/udp-echo-server.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("UdpEchoServerApplication");
+
 NS_OBJECT_ENSURE_REGISTERED (UdpEchoServer);
 
 TypeId
diff -Naur ns-3.21/src/applications/model/udp-server.cc ns-3.22/src/applications/model/udp-server.cc
--- ns-3.21/src/applications/model/udp-server.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/udp-server.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,6 +37,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("UdpServer");
+
 NS_OBJECT_ENSURE_REGISTERED (UdpServer);
 
 
diff -Naur ns-3.21/src/applications/model/udp-trace-client.cc ns-3.22/src/applications/model/udp-trace-client.cc
--- ns-3.21/src/applications/model/udp-trace-client.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/udp-trace-client.cc	2015-02-05 15:46:22.000000000 -0800
@@ -38,6 +38,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("UdpTraceClient");
+
 NS_OBJECT_ENSURE_REGISTERED (UdpTraceClient);
 
 /**
diff -Naur ns-3.21/src/applications/model/v4ping.cc ns-3.22/src/applications/model/v4ping.cc
--- ns-3.21/src/applications/model/v4ping.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/applications/model/v4ping.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,6 +29,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("V4Ping");
+
 NS_OBJECT_ENSURE_REGISTERED (V4Ping);
 
 TypeId 
@@ -57,7 +58,8 @@
                    MakeUintegerChecker<uint32_t> (16))
     .AddTraceSource ("Rtt",
                      "The rtt calculated by the ping.",
-                     MakeTraceSourceAccessor (&V4Ping::m_traceRtt));
+                     MakeTraceSourceAccessor (&V4Ping::m_traceRtt),
+                     "ns3::Time::TracedCallback");
   ;
   return tid;
 }
diff -Naur ns-3.21/src/bridge/bindings/modulegen__gcc_ILP32.py ns-3.22/src/bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/bridge/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/bridge/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1008,10 +1008,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1212,7 +1212,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1263,6 +1268,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1339,6 +1349,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1373,6 +1387,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
diff -Naur ns-3.21/src/bridge/bindings/modulegen__gcc_LP64.py ns-3.22/src/bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/bridge/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/bridge/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1008,10 +1008,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1212,7 +1212,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1263,6 +1268,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1339,6 +1349,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1373,6 +1387,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
diff -Naur ns-3.21/src/bridge/helper/bridge-helper.cc ns-3.22/src/bridge/helper/bridge-helper.cc
--- ns-3.21/src/bridge/helper/bridge-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/bridge/helper/bridge-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/node.h"
 #include "ns3/names.h"
 
-NS_LOG_COMPONENT_DEFINE ("BridgeHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BridgeHelper");
+
 BridgeHelper::BridgeHelper ()
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.21/src/bridge/helper/bridge-helper.h ns-3.22/src/bridge/helper/bridge-helper.h
--- ns-3.21/src/bridge/helper/bridge-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/bridge/helper/bridge-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -71,7 +71,7 @@
    */
   NetDeviceContainer Install (std::string nodeName, NetDeviceContainer c);
 private:
-  ObjectFactory m_deviceFactory;
+  ObjectFactory m_deviceFactory; //!< Object factory
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/bridge/model/bridge-channel.cc ns-3.22/src/bridge/model/bridge-channel.cc
--- ns-3.21/src/bridge/model/bridge-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/bridge/model/bridge-channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -19,10 +19,10 @@
 #include "ns3/log.h"
 #include "bridge-channel.h"
 
-NS_LOG_COMPONENT_DEFINE ("BridgeChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BridgeChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (BridgeChannel);
 
 TypeId 
diff -Naur ns-3.21/src/bridge/model/bridge-net-device.cc ns-3.22/src/bridge/model/bridge-net-device.cc
--- ns-3.21/src/bridge/model/bridge-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/bridge/model/bridge-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/simulator.h"
 #include "ns3/uinteger.h"
 
-NS_LOG_COMPONENT_DEFINE ("BridgeNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BridgeNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (BridgeNetDevice);
 
 
diff -Naur ns-3.21/src/brite/helper/brite-topology-helper.cc ns-3.22/src/brite/helper/brite-topology-helper.cc
--- ns-3.21/src/brite/helper/brite-topology-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/brite/helper/brite-topology-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include <iostream>
 #include <fstream>
 
-NS_LOG_COMPONENT_DEFINE ("BriteTopologyHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BriteTopologyHelper");
+
 BriteTopologyHelper::BriteTopologyHelper (std::string confFile,
                                           std::string seedFile,
                                           std::string newseedFile)
diff -Naur ns-3.21/src/brite/helper/brite-topology-helper.h ns-3.22/src/brite/helper/brite-topology-helper.h
--- ns-3.21/src/brite/helper/brite-topology-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/brite/helper/brite-topology-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -231,24 +231,9 @@
   //stores all of the nodes used in the BRITE generated topology
   NodeContainer m_nodes;
 
-  /**
-    * \internal
-    */
   void BuildBriteNodeInfoList (void);
-
-  /**
-    * \internal
-    */
   void BuildBriteEdgeInfoList (void);
-
-  /**
-    * \internal
-    */
   void ConstructTopology (void);
-
-  /**
-    * \internal
-    */
   void GenerateBriteTopology (void);
 
   /// brite configuration file to use
diff -Naur ns-3.21/src/brite/wscript ns-3.22/src/brite/wscript
--- ns-3.21/src/brite/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/brite/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -20,6 +20,7 @@
         brite_dir = Options.options.with_brite
         if os.path.exists(os.path.join(brite_dir, lib_to_check)):
             conf.env['WITH_BRITE'] = os.path.abspath(Options.options.with_brite)
+            conf.env['ENABLE_BRITE'] = True
         else:
             conf.report_optional_feature("brite", "BRITE Integration", False,
                                  "BRITE not found at requested location")
@@ -29,13 +30,14 @@
             return
     else:
         # No user specified '--with-brite' option, try to guess
-        # bake.py uses ../../build, while ns-3-dev uses ../click
+        # bake.py uses ../../build, while ns-3-dev uses ../BRITE
         brite_dir = os.path.join('..','BRITE')
         brite_bake_build_dir = os.path.join('..', '..', 'build') 
         brite_bake_lib_dir = os.path.join(brite_bake_build_dir, 'lib')
         if os.path.exists(os.path.join(brite_dir, lib_to_check)):
             conf.msg("Checking for BRITE location", ("%s (guessed)" % brite_dir))
             conf.env['WITH_BRITE'] = os.path.abspath(brite_dir)
+            conf.env['ENABLE_BRITE'] = True
 # Below is not yet ready (bake does not install BRITE yet, just builds it)
 #        elif os.path.exists(os.path.join(brite_bake_lib_dir, lib_to_check)):
 #            conf.msg("Checking for BRITE location", ("%s (guessed)" % brite_bake_lib_dir))
@@ -57,30 +59,26 @@
 }
 '''
 
-    conf.env['DL'] = conf.check(mandatory=True, lib='dl', define_name='DL', uselib='DL')
+    conf.env['DL'] = conf.check(mandatory=True, lib='dl', define_name='DL', uselib_store='DL')
 
-    conf.env.append_value('NS3_MODULE_PATH',os.path.abspath(os.path.join(conf.env['WITH_BRITE'], '.')))
-
-    conf.env['INCLUDES_BRITE'] = os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'.'))
+    conf.env['LIBPATH_BRITE'] = [os.path.abspath(os.path.join(conf.env['WITH_BRITE'], '.'))]
 
-    conf.env['CPPPATH_BRITE'] = [
+    conf.env['INCLUDES_BRITE'] = [
             os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'.')),
             os.path.abspath(os.path.join(conf.env['WITH_BRITE'],'Models'))
             ]
-    conf.env['LIBPATH_BRITE'] = [os.path.abspath(os.path.join(conf.env['WITH_BRITE'], '.'))]
 
-    conf.env.append_value('CXXDEFINES', 'NS3_BRITE')
-    conf.env.append_value('CPPPATH', conf.env['CPPPATH_BRITE'])
+    conf.env['DEFINES_BRITE'] = ['NS3_BRITE']
+
+    conf.env['BRITE'] = conf.check(fragment=test_code, lib='brite', libpath=conf.env['LIBPATH_BRITE'], uselib='BRITE')
+
+    # This statement will get LD_LIBRARY_PATH set correctly when waf needs
+    # to load the brite shared library.
+    conf.env.append_value('NS3_MODULE_PATH',os.path.abspath(os.path.join(conf.env['WITH_BRITE'], '.')))
 
-    conf.env['BRITE'] = conf.check(fragment=test_code, lib='brite', libpath=conf.env['LIBPATH_BRITE'], use='BRITE DL')
     conf.report_optional_feature("brite", "BRITE Integration",
                                           conf.env['BRITE'], "BRITE library not found")
 
-    if conf.env['BRITE']:
-        conf.env['ENABLE_BRITE'] = True
-        conf.env.append_value('CXXDEFINES', 'NS3_BRITE')
-        conf.env.append_value('CPPPATH', conf.env['CPPPATH_BRITE'])
-
 def build(bld):
     # Don't do anything for this module if brite's not enabled.
     if 'brite' in bld.env['MODULES_NOT_BUILT']:
@@ -95,7 +93,8 @@
         ]
 
     if bld.env['BRITE'] and bld.env['DL']:
-        module.uselib = 'BRITE DL'
+        module.use.extend(['BRITE', 'DL'])
+        module_test.use.extend(['BRITE', 'DL'])
 
     headers = bld(features='ns3header')
     headers.module = 'brite'
@@ -108,4 +107,4 @@
         module_test.source.append('test/brite-test-topology.cc')
 
     if bld.env['ENABLE_EXAMPLES'] and bld.env['ENABLE_BRITE']:
-      bld.recurse('examples')
+        bld.recurse('examples')
diff -Naur ns-3.21/src/buildings/bindings/modulegen__gcc_ILP32.py ns-3.22/src/buildings/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/buildings/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1311,10 +1311,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1515,7 +1515,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1566,6 +1571,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1642,6 +1652,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1676,6 +1690,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3869,10 +3885,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
diff -Naur ns-3.21/src/buildings/bindings/modulegen__gcc_LP64.py ns-3.22/src/buildings/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/buildings/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1311,10 +1311,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1515,7 +1515,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1566,6 +1571,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1642,6 +1652,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1676,6 +1690,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3869,10 +3885,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
diff -Naur ns-3.21/src/buildings/helper/building-allocator.cc ns-3.22/src/buildings/helper/building-allocator.cc
--- ns-3.21/src/buildings/helper/building-allocator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/helper/building-allocator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/log.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("BuildingAllocator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BuildingAllocator");
+
 NS_OBJECT_ENSURE_REGISTERED (GridBuildingAllocator);
 
 GridBuildingAllocator::GridBuildingAllocator ()
diff -Naur ns-3.21/src/buildings/helper/building-position-allocator.cc ns-3.22/src/buildings/helper/building-position-allocator.cc
--- ns-3.21/src/buildings/helper/building-position-allocator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/helper/building-position-allocator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,9 +33,9 @@
 
 #include "ns3/building-list.h"
 
-NS_LOG_COMPONENT_DEFINE ("BuildingPositionAllocator");
+namespace ns3 {
 
-using namespace ns3;
+NS_LOG_COMPONENT_DEFINE ("BuildingPositionAllocator");
 
 NS_OBJECT_ENSURE_REGISTERED (RandomBuildingPositionAllocator);
 
@@ -344,3 +344,5 @@
   m_rand->SetStream (stream);
   return 1;
 }
+
+}  // namespace ns3
diff -Naur ns-3.21/src/buildings/helper/buildings-helper.cc ns-3.22/src/buildings/helper/buildings-helper.cc
--- ns-3.21/src/buildings/helper/buildings-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/helper/buildings-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,9 @@
 #include <ns3/log.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("BuildingsHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BuildingsHelper");
 
 void
 BuildingsHelper::Install (NodeContainer c)
diff -Naur ns-3.21/src/buildings/model/building.cc ns-3.22/src/buildings/model/building.cc
--- ns-3.21/src/buildings/model/building.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/model/building.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,9 @@
 #include <ns3/assert.h>
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("Building");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Building");
 
 NS_OBJECT_ENSURE_REGISTERED (Building);
 
diff -Naur ns-3.21/src/buildings/model/buildings-propagation-loss-model.cc ns-3.22/src/buildings/model/buildings-propagation-loss-model.cc
--- ns-3.21/src/buildings/model/buildings-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/model/buildings-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include "ns3/enum.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("BuildingsPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BuildingsPropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (BuildingsPropagationLossModel);
 
 BuildingsPropagationLossModel::ShadowingLoss::ShadowingLoss ()
diff -Naur ns-3.21/src/buildings/model/hybrid-buildings-propagation-loss-model.cc ns-3.22/src/buildings/model/hybrid-buildings-propagation-loss-model.cc
--- ns-3.21/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,10 +37,10 @@
 #include "hybrid-buildings-propagation-loss-model.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("HybridBuildingsPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("HybridBuildingsPropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (HybridBuildingsPropagationLossModel);
 
 
diff -Naur ns-3.21/src/buildings/model/itu-r-1238-propagation-loss-model.cc ns-3.22/src/buildings/model/itu-r-1238-propagation-loss-model.cc
--- ns-3.21/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "itu-r-1238-propagation-loss-model.h"
 #include <ns3/mobility-building-info.h>
 
-NS_LOG_COMPONENT_DEFINE ("ItuR1238PropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ItuR1238PropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (ItuR1238PropagationLossModel);
 
 
diff -Naur ns-3.21/src/buildings/model/mobility-building-info.cc ns-3.22/src/buildings/model/mobility-building-info.cc
--- ns-3.21/src/buildings/model/mobility-building-info.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/model/mobility-building-info.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include <ns3/log.h>
 #include <ns3/assert.h>
 
-NS_LOG_COMPONENT_DEFINE ("MobilityBuildingInfo");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MobilityBuildingInfo");
+
 NS_OBJECT_ENSURE_REGISTERED (MobilityBuildingInfo);
 
 TypeId
diff -Naur ns-3.21/src/buildings/model/oh-buildings-propagation-loss-model.cc ns-3.22/src/buildings/model/oh-buildings-propagation-loss-model.cc
--- ns-3.21/src/buildings/model/oh-buildings-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/model/oh-buildings-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include "ns3/enum.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("OhBuildingsPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("OhBuildingsPropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (OhBuildingsPropagationLossModel);
 
 
diff -Naur ns-3.21/src/buildings/test/building-position-allocator-test.cc ns-3.22/src/buildings/test/building-position-allocator-test.cc
--- ns-3.21/src/buildings/test/building-position-allocator-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/test/building-position-allocator-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,9 @@
 #include <ns3/simulator.h>
 #include <map>
 
-NS_LOG_COMPONENT_DEFINE ("BuildingPositionAllocatorTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("BuildingPositionAllocatorTest");
 
 struct Room
 {
diff -Naur ns-3.21/src/buildings/test/buildings-helper-test.cc ns-3.22/src/buildings/test/buildings-helper-test.cc
--- ns-3.21/src/buildings/test/buildings-helper-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/test/buildings-helper-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,9 @@
 #include <ns3/mobility-helper.h>
 #include <ns3/simulator.h>
 
-NS_LOG_COMPONENT_DEFINE ("BuildingsHelperTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("BuildingsHelperTest");
 
 struct PositionInBuilding
 {
diff -Naur ns-3.21/src/buildings/test/buildings-pathloss-test.cc ns-3.22/src/buildings/test/buildings-pathloss-test.cc
--- ns-3.21/src/buildings/test/buildings-pathloss-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/test/buildings-pathloss-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,9 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("BuildingsPathlossTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("BuildingsPathlossTest");
 
 /**
  * Test 1.1 BuildingsPathlossModel Pathloss compound test
diff -Naur ns-3.21/src/buildings/test/buildings-shadowing-test.cc ns-3.22/src/buildings/test/buildings-shadowing-test.cc
--- ns-3.21/src/buildings/test/buildings-shadowing-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/buildings/test/buildings-shadowing-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,11 +33,9 @@
 
 #include "buildings-shadowing-test.h"
 
-NS_LOG_COMPONENT_DEFINE ("BuildingsShadowingTest");
-
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("BuildingsShadowingTest");
 
 
 /**
diff -Naur ns-3.21/src/click/helper/click-internet-stack-helper.cc ns-3.22/src/click/helper/click-internet-stack-helper.cc
--- ns-3.21/src/click/helper/click-internet-stack-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/click/helper/click-internet-stack-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -43,10 +43,10 @@
 #include <limits>
 #include <map>
 
-NS_LOG_COMPONENT_DEFINE ("ClickInternetStackHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ClickInternetStackHelper");
+
 #define INTERFACE_CONTEXT
 
 typedef std::pair<Ptr<Ipv4>, uint32_t> InterfacePairIpv4;
diff -Naur ns-3.21/src/click/helper/click-internet-stack-helper.h ns-3.22/src/click/helper/click-internet-stack-helper.h
--- ns-3.21/src/click/helper/click-internet-stack-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/click/helper/click-internet-stack-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -172,7 +172,6 @@
 private:
   /**
    * @brief Enable pcap output the indicated Ipv4 and interface pair.
-   * @internal
    *
    * @param prefix Filename prefix to use for pcap files.
    * @param ipv4 Ptr to the Ipv4 interface on which you want to enable tracing.
@@ -185,7 +184,6 @@
 
   /**
    * @brief Enable ascii trace output on the indicated Ipv4 and interface pair.
-   * @internal
    *
    * @param stream An OutputStreamWrapper representing an existing file to use
    *               when writing trace data.
@@ -202,24 +200,12 @@
   void Initialize (void);
   ObjectFactory m_tcpFactory;
 
-  /**
-   * \internal
-   */
   static void CreateAndAggregateObjectFromTypeId (Ptr<Node> node, const std::string typeId);
 
-  /**
-   * \internal
-   */
   static void Cleanup (void);
 
-  /**
-   * \internal
-   */
   bool PcapHooked (Ptr<Ipv4> ipv4);
 
-  /**
-   * \internal
-   */
   bool AsciiHooked (Ptr<Ipv4> ipv4);
 
   /**
diff -Naur ns-3.21/src/click/model/ipv4-click-routing.cc ns-3.22/src/click/model/ipv4-click-routing.cc
--- ns-3.21/src/click/model/ipv4-click-routing.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/click/model/ipv4-click-routing.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,10 @@
 #include <cstdlib>
 #include <cstdarg>
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4ClickRouting");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4ClickRouting");
+
 // Values from nsclick ExtRouter implementation
 #define INTERFACE_ID_KERNELTAP 0
 #define INTERFACE_ID_FIRST 1
@@ -569,6 +569,8 @@
 
 } // namespace ns3
 
+using ns3::g_log;
+
 static int simstrlcpy (char *buf, int len, const std::string &s)
 {
   if (len)
diff -Naur ns-3.21/src/click/model/ipv4-l3-click-protocol.cc ns-3.22/src/click/model/ipv4-l3-click-protocol.cc
--- ns-3.21/src/click/model/ipv4-l3-click-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/click/model/ipv4-l3-click-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,10 +37,10 @@
 #include "ns3/icmpv4-l4-protocol.h"
 #include "ns3/loopback-net-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4L3ClickProtocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4L3ClickProtocol");
+
 const uint16_t Ipv4L3ClickProtocol::PROT_NUMBER = 0x0800;
 
 
diff -Naur ns-3.21/src/config-store/bindings/modulegen__gcc_ILP32.py ns-3.22/src/config-store/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/config-store/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/config-store/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -290,10 +290,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -363,7 +363,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -414,6 +419,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -490,6 +500,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -524,6 +538,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
diff -Naur ns-3.21/src/config-store/bindings/modulegen__gcc_LP64.py ns-3.22/src/config-store/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/config-store/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/config-store/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -290,10 +290,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -363,7 +363,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -414,6 +419,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -490,6 +500,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -524,6 +538,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
diff -Naur ns-3.21/src/config-store/model/attribute-iterator.cc ns-3.22/src/config-store/model/attribute-iterator.cc
--- ns-3.21/src/config-store/model/attribute-iterator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/config-store/model/attribute-iterator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,9 @@
 #include <fstream>
 
 
-NS_LOG_COMPONENT_DEFINE ("AttributeIterator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AttributeIterator");
 
 AttributeIterator::AttributeIterator ()
 {
diff -Naur ns-3.21/src/config-store/model/config-store.cc ns-3.22/src/config-store/model/config-store.cc
--- ns-3.21/src/config-store/model/config-store.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/config-store/model/config-store.cc	2015-02-05 15:46:22.000000000 -0800
@@ -18,10 +18,9 @@
 #include <cstdlib>
 
 
-NS_LOG_COMPONENT_DEFINE ("ConfigStore");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ConfigStore");
 
 NS_OBJECT_ENSURE_REGISTERED (ConfigStore);
 
diff -Naur ns-3.21/src/config-store/model/gtk-config-store.cc ns-3.22/src/config-store/model/gtk-config-store.cc
--- ns-3.21/src/config-store/model/gtk-config-store.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/config-store/model/gtk-config-store.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,7 +28,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("GtkconfigStore");
 
-
 GtkConfigStore::GtkConfigStore ()
 {
 }
diff -Naur ns-3.21/src/config-store/model/raw-text-config.cc ns-3.22/src/config-store/model/raw-text-config.cc
--- ns-3.21/src/config-store/model/raw-text-config.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/config-store/model/raw-text-config.cc	2015-02-05 15:46:22.000000000 -0800
@@ -6,10 +6,10 @@
 #include "ns3/log.h"
 #include "ns3/config.h"
 
-NS_LOG_COMPONENT_DEFINE ("RawTextConfig");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RawTextConfig");
+
 RawTextConfigSave::RawTextConfigSave ()
   : m_os (0)
 {
diff -Naur ns-3.21/src/config-store/model/xml-config.cc ns-3.22/src/config-store/model/xml-config.cc
--- ns-3.21/src/config-store/model/xml-config.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/config-store/model/xml-config.cc	2015-02-05 15:46:22.000000000 -0800
@@ -9,10 +9,10 @@
 #include <libxml/encoding.h>
 #include <libxml/xmlwriter.h>
 
-NS_LOG_COMPONENT_DEFINE ("XmlConfig");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("XmlConfig");
+
 XmlConfigSave::XmlConfigSave ()
   : m_writer (0)
 {
diff -Naur ns-3.21/src/core/bindings/modulegen__gcc_ILP32.py ns-3.22/src/core/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/core/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -80,16 +80,12 @@
     module.add_class('ObjectFactory')
     ## log.h (module 'core'): ns3::ParameterLogger [class]
     module.add_class('ParameterLogger')
-    ## 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]
     module.add_class('RngStream')
-    ## random-variable.h (module 'core'): ns3::SequentialVariable [class]
-    module.add_class('SequentialVariable', parent=root_module['ns3::RandomVariable'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, 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]
@@ -110,8 +106,6 @@
     module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'])
     ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
     module.add_class('TimerImpl', allow_subclassing=True)
-    ## random-variable.h (module 'core'): ns3::TriangularVariable [class]
-    module.add_class('TriangularVariable', parent=root_module['ns3::RandomVariable'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -120,50 +114,22 @@
     module.add_class('AttributeInformation', outer_class=root_module['ns3::TypeId'])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
     module.add_class('TraceSourceInformation', outer_class=root_module['ns3::TypeId'])
-    ## random-variable.h (module 'core'): ns3::UniformVariable [class]
-    module.add_class('UniformVariable', parent=root_module['ns3::RandomVariable'])
     ## vector.h (module 'core'): ns3::Vector2D [class]
     module.add_class('Vector2D')
     ## vector.h (module 'core'): ns3::Vector3D [class]
     module.add_class('Vector3D')
     ## watchdog.h (module 'core'): ns3::Watchdog [class]
     module.add_class('Watchdog')
-    ## random-variable.h (module 'core'): ns3::WeibullVariable [class]
-    module.add_class('WeibullVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::ZetaVariable [class]
-    module.add_class('ZetaVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::ZipfVariable [class]
-    module.add_class('ZipfVariable', parent=root_module['ns3::RandomVariable'])
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
     module.add_class('int64x64_t')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'])
-    ## random-variable.h (module 'core'): ns3::ConstantVariable [class]
-    module.add_class('ConstantVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::DeterministicVariable [class]
-    module.add_class('DeterministicVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::EmpiricalVariable [class]
-    module.add_class('EmpiricalVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::ErlangVariable [class]
-    module.add_class('ErlangVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable [class]
-    module.add_class('ExponentialVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::GammaVariable [class]
-    module.add_class('GammaVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::IntEmpiricalVariable [class]
-    module.add_class('IntEmpiricalVariable', parent=root_module['ns3::EmpiricalVariable'])
-    ## random-variable.h (module 'core'): ns3::LogNormalVariable [class]
-    module.add_class('LogNormalVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::NormalVariable [class]
-    module.add_class('NormalVariable', parent=root_module['ns3::RandomVariable'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
     module.add_class('AggregateIterator', outer_class=root_module['ns3::Object'])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable [class]
-    module.add_class('ParetoVariable', parent=root_module['ns3::RandomVariable'])
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', parent=root_module['ns3::Object'])
     ## scheduler.h (module 'core'): ns3::Scheduler [class]
@@ -292,10 +258,6 @@
     module.add_class('PointerChecker', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
     module.add_class('PointerValue', parent=root_module['ns3::AttributeValue'])
-    ## random-variable.h (module 'core'): ns3::RandomVariableChecker [class]
-    module.add_class('RandomVariableChecker', parent=root_module['ns3::AttributeChecker'])
-    ## random-variable.h (module 'core'): ns3::RandomVariableValue [class]
-    module.add_class('RandomVariableValue', parent=root_module['ns3::AttributeValue'])
     ## realtime-simulator-impl.h (module 'core'): ns3::RealtimeSimulatorImpl [class]
     module.add_class('RealtimeSimulatorImpl', parent=root_module['ns3::SimulatorImpl'])
     ## realtime-simulator-impl.h (module 'core'): ns3::RealtimeSimulatorImpl::SynchronizationMode [enumeration]
@@ -322,6 +284,7 @@
     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'])
+    module.add_container('std::map< std::string, ns3::LogComponent * >', ('std::string', 'ns3::LogComponent *'), container_type=u'map')
     typehandlers.add_type_alias(u'ns3::RngSeedManager', u'ns3::SeedManager')
     typehandlers.add_type_alias(u'ns3::RngSeedManager*', u'ns3::SeedManager*')
     typehandlers.add_type_alias(u'ns3::RngSeedManager&', u'ns3::SeedManager&')
@@ -467,11 +430,9 @@
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
     register_Ns3ParameterLogger_methods(root_module, root_module['ns3::ParameterLogger'])
-    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'])
     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_Ns3SystemCondition_methods(root_module, root_module['ns3::SystemCondition'])
@@ -480,31 +441,16 @@
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
-    register_Ns3TriangularVariable_methods(root_module, root_module['ns3::TriangularVariable'])
     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_Ns3UniformVariable_methods(root_module, root_module['ns3::UniformVariable'])
     register_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
     register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3Watchdog_methods(root_module, root_module['ns3::Watchdog'])
-    register_Ns3WeibullVariable_methods(root_module, root_module['ns3::WeibullVariable'])
-    register_Ns3ZetaVariable_methods(root_module, root_module['ns3::ZetaVariable'])
-    register_Ns3ZipfVariable_methods(root_module, root_module['ns3::ZipfVariable'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
-    register_Ns3ConstantVariable_methods(root_module, root_module['ns3::ConstantVariable'])
-    register_Ns3DeterministicVariable_methods(root_module, root_module['ns3::DeterministicVariable'])
-    register_Ns3EmpiricalVariable_methods(root_module, root_module['ns3::EmpiricalVariable'])
-    register_Ns3ErlangVariable_methods(root_module, root_module['ns3::ErlangVariable'])
-    register_Ns3ExponentialVariable_methods(root_module, root_module['ns3::ExponentialVariable'])
-    register_Ns3GammaVariable_methods(root_module, root_module['ns3::GammaVariable'])
-    register_Ns3IntEmpiricalVariable_methods(root_module, root_module['ns3::IntEmpiricalVariable'])
-    register_Ns3LogNormalVariable_methods(root_module, root_module['ns3::LogNormalVariable'])
-    register_Ns3NormalVariable_methods(root_module, root_module['ns3::NormalVariable'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
-    register_Ns3ParetoVariable_methods(root_module, root_module['ns3::ParetoVariable'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3Scheduler_methods(root_module, root_module['ns3::Scheduler'])
     register_Ns3SchedulerEvent_methods(root_module, root_module['ns3::Scheduler::Event'])
@@ -567,8 +513,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_Ns3RandomVariableChecker_methods(root_module, root_module['ns3::RandomVariableChecker'])
-    register_Ns3RandomVariableValue_methods(root_module, root_module['ns3::RandomVariableValue'])
     register_Ns3RealtimeSimulatorImpl_methods(root_module, root_module['ns3::RealtimeSimulatorImpl'])
     register_Ns3RefCountBase_methods(root_module, root_module['ns3::RefCountBase'])
     register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
@@ -891,8 +835,8 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
-    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, std::string const & file, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('std::string const &', 'file'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
     ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
@@ -901,6 +845,16 @@
     cls.add_method('Enable', 
                    'void', 
                    [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): std::string ns3::LogComponent::File() const [member function]
+    cls.add_method('File', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## log.h (module 'core'): static std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,ns3::LogComponent*,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ns3::LogComponent*> > > * ns3::LogComponent::GetComponentList() [member function]
+    cls.add_method('GetComponentList', 
+                   'std::map< std::string, ns3::LogComponent * > *', 
+                   [], 
+                   is_static=True)
     ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
@@ -989,10 +943,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1095,24 +1049,6 @@
     cls.add_constructor([param('std::ostream &', 'os')])
     return
 
-def register_Ns3RandomVariable_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable(ns3::RandomVariable const & o) [copy constructor]
-    cls.add_constructor([param('ns3::RandomVariable const &', 'o')])
-    ## random-variable.h (module 'core'): uint32_t ns3::RandomVariable::GetInteger() const [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): double ns3::RandomVariable::GetValue() const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   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([])
@@ -1168,15 +1104,6 @@
                    [])
     return
 
-def register_Ns3SequentialVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::SequentialVariable::SequentialVariable(ns3::SequentialVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SequentialVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::SequentialVariable::SequentialVariable(double f, double l, double i=1, uint32_t c=1) [constructor]
-    cls.add_constructor([param('double', 'f'), param('double', 'l'), param('double', 'i', default_value='1'), param('uint32_t', 'c', default_value='1')])
-    ## random-variable.h (module 'core'): ns3::SequentialVariable::SequentialVariable(double f, double l, ns3::RandomVariable const & i, uint32_t c=1) [constructor]
-    cls.add_constructor([param('double', 'f'), param('double', 'l'), param('ns3::RandomVariable const &', 'i'), param('uint32_t', 'c', default_value='1')])
-    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([])
@@ -1437,15 +1364,6 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3TriangularVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::TriangularVariable::TriangularVariable(ns3::TriangularVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TriangularVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::TriangularVariable::TriangularVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::TriangularVariable::TriangularVariable(double s, double l, double mean) [constructor]
-    cls.add_constructor([param('double', 's'), param('double', 'l'), param('double', 'mean')])
-    return
-
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1468,7 +1386,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1519,6 +1442,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1595,6 +1523,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1629,34 +1561,14 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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_Ns3UniformVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::UniformVariable::UniformVariable(ns3::UniformVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::UniformVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::UniformVariable::UniformVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::UniformVariable::UniformVariable(double s, double l) [constructor]
-    cls.add_constructor([param('double', 's'), param('double', 'l')])
-    ## random-variable.h (module 'core'): uint32_t ns3::UniformVariable::GetInteger(uint32_t s, uint32_t l) [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
-                   [param('uint32_t', 's'), param('uint32_t', 'l')])
-    ## random-variable.h (module 'core'): double ns3::UniformVariable::GetValue() const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): double ns3::UniformVariable::GetValue(double s, double l) [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [param('double', 's'), param('double', 'l')])
-    return
-
 def register_Ns3Vector2D_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
@@ -1698,37 +1610,6 @@
                    [param('ns3::Time', 'delay')])
     return
 
-def register_Ns3WeibullVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(ns3::WeibullVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WeibullVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(double m) [constructor]
-    cls.add_constructor([param('double', 'm')])
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(double m, double s) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 's')])
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(double m, double s, double b) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 's'), param('double', 'b')])
-    return
-
-def register_Ns3ZetaVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ZetaVariable::ZetaVariable(ns3::ZetaVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ZetaVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ZetaVariable::ZetaVariable(double alpha) [constructor]
-    cls.add_constructor([param('double', 'alpha')])
-    ## random-variable.h (module 'core'): ns3::ZetaVariable::ZetaVariable() [constructor]
-    cls.add_constructor([])
-    return
-
-def register_Ns3ZipfVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ZipfVariable::ZipfVariable(ns3::ZipfVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ZipfVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ZipfVariable::ZipfVariable(long int N, double alpha) [constructor]
-    cls.add_constructor([param('long int', 'N'), param('double', 'alpha')])
-    ## random-variable.h (module 'core'): ns3::ZipfVariable::ZipfVariable() [constructor]
-    cls.add_constructor([])
-    return
-
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -1803,111 +1684,6 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
-def register_Ns3ConstantVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ConstantVariable::ConstantVariable(ns3::ConstantVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ConstantVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ConstantVariable::ConstantVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::ConstantVariable::ConstantVariable(double c) [constructor]
-    cls.add_constructor([param('double', 'c')])
-    ## random-variable.h (module 'core'): void ns3::ConstantVariable::SetConstant(double c) [member function]
-    cls.add_method('SetConstant', 
-                   'void', 
-                   [param('double', 'c')])
-    return
-
-def register_Ns3DeterministicVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::DeterministicVariable::DeterministicVariable(ns3::DeterministicVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DeterministicVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::DeterministicVariable::DeterministicVariable(double * d, uint32_t c) [constructor]
-    cls.add_constructor([param('double *', 'd'), param('uint32_t', 'c')])
-    return
-
-def register_Ns3EmpiricalVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::EmpiricalVariable::EmpiricalVariable(ns3::EmpiricalVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EmpiricalVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::EmpiricalVariable::EmpiricalVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): void ns3::EmpiricalVariable::CDF(double v, double c) [member function]
-    cls.add_method('CDF', 
-                   'void', 
-                   [param('double', 'v'), param('double', 'c')])
-    return
-
-def register_Ns3ErlangVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ErlangVariable::ErlangVariable(ns3::ErlangVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ErlangVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ErlangVariable::ErlangVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::ErlangVariable::ErlangVariable(unsigned int k, double lambda) [constructor]
-    cls.add_constructor([param('unsigned int', 'k'), param('double', 'lambda')])
-    ## random-variable.h (module 'core'): double ns3::ErlangVariable::GetValue() const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): double ns3::ErlangVariable::GetValue(unsigned int k, double lambda) const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [param('unsigned int', 'k'), param('double', 'lambda')], 
-                   is_const=True)
-    return
-
-def register_Ns3ExponentialVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable::ExponentialVariable(ns3::ExponentialVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ExponentialVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable::ExponentialVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable::ExponentialVariable(double m) [constructor]
-    cls.add_constructor([param('double', 'm')])
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable::ExponentialVariable(double m, double b) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 'b')])
-    return
-
-def register_Ns3GammaVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::GammaVariable::GammaVariable(ns3::GammaVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::GammaVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::GammaVariable::GammaVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::GammaVariable::GammaVariable(double alpha, double beta) [constructor]
-    cls.add_constructor([param('double', 'alpha'), param('double', 'beta')])
-    ## random-variable.h (module 'core'): double ns3::GammaVariable::GetValue() const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): double ns3::GammaVariable::GetValue(double alpha, double beta) const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [param('double', 'alpha'), param('double', 'beta')], 
-                   is_const=True)
-    return
-
-def register_Ns3IntEmpiricalVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::IntEmpiricalVariable::IntEmpiricalVariable(ns3::IntEmpiricalVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntEmpiricalVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::IntEmpiricalVariable::IntEmpiricalVariable() [constructor]
-    cls.add_constructor([])
-    return
-
-def register_Ns3LogNormalVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::LogNormalVariable::LogNormalVariable(ns3::LogNormalVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::LogNormalVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::LogNormalVariable::LogNormalVariable(double mu, double sigma) [constructor]
-    cls.add_constructor([param('double', 'mu'), param('double', 'sigma')])
-    return
-
-def register_Ns3NormalVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::NormalVariable::NormalVariable(ns3::NormalVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NormalVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::NormalVariable::NormalVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::NormalVariable::NormalVariable(double m, double v) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 'v')])
-    ## random-variable.h (module 'core'): ns3::NormalVariable::NormalVariable(double m, double v, double b) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 'v'), param('double', 'b')])
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -1979,23 +1755,6 @@
                    [])
     return
 
-def register_Ns3ParetoVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(ns3::ParetoVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ParetoVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(double m) [constructor]
-    cls.add_constructor([param('double', 'm')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(double m, double s) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 's')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(double m, double s, double b) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 's'), param('double', 'b')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(std::pair<double,double> params) [constructor]
-    cls.add_constructor([param('std::pair< double, double >', 'params')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(std::pair<double,double> params, double b) [constructor]
-    cls.add_constructor([param('std::pair< double, double >', 'params'), param('double', 'b')])
-    return
-
 def register_Ns3RandomVariableStream_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -2269,10 +2028,10 @@
     cls.add_constructor([])
     ## simulator-impl.h (module 'core'): ns3::SimulatorImpl::SimulatorImpl(ns3::SimulatorImpl const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SimulatorImpl const &', 'arg0')])
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Cancel(ns3::EventId const & ev) [member function]
+    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Cancel(ns3::EventId const & id) [member function]
     cls.add_method('Cancel', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Destroy() [member function]
     cls.add_method('Destroy', 
@@ -2304,10 +2063,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## simulator-impl.h (module 'core'): bool ns3::SimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
+    ## simulator-impl.h (module 'core'): bool ns3::SimulatorImpl::IsExpired(ns3::EventId const & id) const [member function]
     cls.add_method('IsExpired', 
                    'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): bool ns3::SimulatorImpl::IsFinished() const [member function]
     cls.add_method('IsFinished', 
@@ -2319,10 +2078,10 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Remove(ns3::EventId const & ev) [member function]
+    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Remove(ns3::EventId const & id) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Run() [member function]
     cls.add_method('Run', 
@@ -2799,6 +2558,11 @@
     cls.add_constructor([param('ns3::WallClockSynchronizer const &', 'arg0')])
     ## wall-clock-synchronizer.h (module 'core'): ns3::WallClockSynchronizer::WallClockSynchronizer() [constructor]
     cls.add_constructor([])
+    ## wall-clock-synchronizer.h (module 'core'): static ns3::TypeId ns3::WallClockSynchronizer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## wall-clock-synchronizer.h (module 'core'): ns3::WallClockSynchronizer::NS_PER_SEC [variable]
     cls.add_static_attribute('NS_PER_SEC', 'uint64_t const', is_const=True)
     ## wall-clock-synchronizer.h (module 'core'): ns3::WallClockSynchronizer::US_PER_NS [variable]
@@ -2870,15 +2634,15 @@
                    'void', 
                    [param('int64_t', 'ns'), param('timeval *', 'tv')], 
                    visibility='protected')
-    ## wall-clock-synchronizer.h (module 'core'): bool ns3::WallClockSynchronizer::SleepWait(uint64_t arg0) [member function]
+    ## wall-clock-synchronizer.h (module 'core'): bool ns3::WallClockSynchronizer::SleepWait(uint64_t ns) [member function]
     cls.add_method('SleepWait', 
                    'bool', 
-                   [param('uint64_t', 'arg0')], 
+                   [param('uint64_t', 'ns')], 
                    visibility='protected')
-    ## wall-clock-synchronizer.h (module 'core'): bool ns3::WallClockSynchronizer::SpinWait(uint64_t arg0) [member function]
+    ## wall-clock-synchronizer.h (module 'core'): bool ns3::WallClockSynchronizer::SpinWait(uint64_t ns) [member function]
     cls.add_method('SpinWait', 
                    'bool', 
-                   [param('uint64_t', 'arg0')], 
+                   [param('uint64_t', 'ns')], 
                    visibility='protected')
     ## wall-clock-synchronizer.h (module 'core'): void ns3::WallClockSynchronizer::TimevalAdd(timeval * tv1, timeval * tv2, timeval * result) [member function]
     cls.add_method('TimevalAdd', 
@@ -3260,10 +3024,10 @@
     cls.add_constructor([param('ns3::DefaultSimulatorImpl const &', 'arg0')])
     ## default-simulator-impl.h (module 'core'): ns3::DefaultSimulatorImpl::DefaultSimulatorImpl() [constructor]
     cls.add_constructor([])
-    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Cancel(ns3::EventId const & ev) [member function]
+    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Cancel(ns3::EventId const & id) [member function]
     cls.add_method('Cancel', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Destroy() [member function]
     cls.add_method('Destroy', 
@@ -3295,10 +3059,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## default-simulator-impl.h (module 'core'): bool ns3::DefaultSimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
+    ## default-simulator-impl.h (module 'core'): bool ns3::DefaultSimulatorImpl::IsExpired(ns3::EventId const & id) const [member function]
     cls.add_method('IsExpired', 
                    'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_const=True, is_virtual=True)
     ## default-simulator-impl.h (module 'core'): bool ns3::DefaultSimulatorImpl::IsFinished() const [member function]
     cls.add_method('IsFinished', 
@@ -3310,10 +3074,10 @@
                    'ns3::Time', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Remove(ns3::EventId const & ev) [member function]
+    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Remove(ns3::EventId const & id) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Run() [member function]
     cls.add_method('Run', 
@@ -3480,14 +3244,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -3525,8 +3289,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -3547,10 +3311,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -4157,55 +3921,15 @@
                    [param('ns3::Ptr< ns3::Object >', 'object')])
     return
 
-def register_Ns3RandomVariableChecker_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::RandomVariableChecker::RandomVariableChecker() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::RandomVariableChecker::RandomVariableChecker(ns3::RandomVariableChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RandomVariableChecker const &', 'arg0')])
-    return
-
-def register_Ns3RandomVariableValue_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::RandomVariableValue::RandomVariableValue() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::RandomVariableValue::RandomVariableValue(ns3::RandomVariableValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RandomVariableValue const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::RandomVariableValue::RandomVariableValue(ns3::RandomVariable const & value) [constructor]
-    cls.add_constructor([param('ns3::RandomVariable const &', 'value')])
-    ## random-variable.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::RandomVariableValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## random-variable.h (module 'core'): bool ns3::RandomVariableValue::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)
-    ## random-variable.h (module 'core'): ns3::RandomVariable ns3::RandomVariableValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::RandomVariable', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): std::string ns3::RandomVariableValue::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)
-    ## random-variable.h (module 'core'): void ns3::RandomVariableValue::Set(ns3::RandomVariable const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::RandomVariable const &', 'value')])
-    return
-
 def register_Ns3RealtimeSimulatorImpl_methods(root_module, cls):
     ## realtime-simulator-impl.h (module 'core'): ns3::RealtimeSimulatorImpl::RealtimeSimulatorImpl(ns3::RealtimeSimulatorImpl const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RealtimeSimulatorImpl const &', 'arg0')])
     ## realtime-simulator-impl.h (module 'core'): ns3::RealtimeSimulatorImpl::RealtimeSimulatorImpl() [constructor]
     cls.add_constructor([])
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Cancel(ns3::EventId const & ev) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Cancel(ns3::EventId const & id) [member function]
     cls.add_method('Cancel', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Destroy() [member function]
     cls.add_method('Destroy', 
@@ -4247,10 +3971,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## realtime-simulator-impl.h (module 'core'): bool ns3::RealtimeSimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
+    ## realtime-simulator-impl.h (module 'core'): bool ns3::RealtimeSimulatorImpl::IsExpired(ns3::EventId const & id) const [member function]
     cls.add_method('IsExpired', 
                    'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_const=True, is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): bool ns3::RealtimeSimulatorImpl::IsFinished() const [member function]
     cls.add_method('IsFinished', 
@@ -4267,10 +3991,10 @@
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Remove(ns3::EventId const & ev) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Remove(ns3::EventId const & id) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Run() [member function]
     cls.add_method('Run', 
@@ -4840,14 +4564,14 @@
     module.add_function('LogGetTimePrinter', 
                         'ns3::LogTimePrinter', 
                         [])
-    ## log.h (module 'core'): extern void ns3::LogSetNodePrinter(ns3::LogNodePrinter arg0) [free function]
+    ## log.h (module 'core'): extern void ns3::LogSetNodePrinter(ns3::LogNodePrinter np) [free function]
     module.add_function('LogSetNodePrinter', 
                         'void', 
-                        [param('ns3::LogNodePrinter', 'arg0')])
-    ## log.h (module 'core'): extern void ns3::LogSetTimePrinter(ns3::LogTimePrinter arg0) [free function]
+                        [param('ns3::LogNodePrinter', 'np')])
+    ## log.h (module 'core'): extern void ns3::LogSetTimePrinter(ns3::LogTimePrinter lp) [free function]
     module.add_function('LogSetTimePrinter', 
                         'void', 
-                        [param('ns3::LogTimePrinter', 'arg0')])
+                        [param('ns3::LogTimePrinter', 'lp')])
     ## boolean.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeBooleanChecker() [free function]
     module.add_function('MakeBooleanChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
@@ -4868,10 +4592,6 @@
     module.add_function('MakeObjectFactoryChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
-    ## random-variable.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeRandomVariableChecker() [free function]
-    module.add_function('MakeRandomVariableChecker', 
-                        'ns3::Ptr< ns3::AttributeChecker const >', 
-                        [])
     ## string.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeStringChecker() [free function]
     module.add_function('MakeStringChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
@@ -4994,42 +4714,42 @@
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['long'])
+                        template_parameters=['unsigned long long'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['int'])
+                        template_parameters=['unsigned int'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['short'])
+                        template_parameters=['unsigned short'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['signed char'])
+                        template_parameters=['unsigned char'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['unsigned long long'])
+                        template_parameters=['long'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['unsigned int'])
+                        template_parameters=['int'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['unsigned short'])
+                        template_parameters=['short'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['unsigned char'])
+                        template_parameters=['signed char'])
     ## nstime.h (module 'core'): ns3::Time ns3::Years(ns3::int64x64_t value) [free function]
     module.add_function('Years', 
                         'ns3::Time', 
diff -Naur ns-3.21/src/core/bindings/modulegen__gcc_LP64.py ns-3.22/src/core/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/core/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -80,16 +80,12 @@
     module.add_class('ObjectFactory')
     ## log.h (module 'core'): ns3::ParameterLogger [class]
     module.add_class('ParameterLogger')
-    ## 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]
     module.add_class('RngStream')
-    ## random-variable.h (module 'core'): ns3::SequentialVariable [class]
-    module.add_class('SequentialVariable', parent=root_module['ns3::RandomVariable'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, 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]
@@ -110,8 +106,6 @@
     module.add_enum('State', ['RUNNING', 'EXPIRED', 'SUSPENDED'], outer_class=root_module['ns3::Timer'])
     ## timer-impl.h (module 'core'): ns3::TimerImpl [class]
     module.add_class('TimerImpl', allow_subclassing=True)
-    ## random-variable.h (module 'core'): ns3::TriangularVariable [class]
-    module.add_class('TriangularVariable', parent=root_module['ns3::RandomVariable'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -120,50 +114,22 @@
     module.add_class('AttributeInformation', outer_class=root_module['ns3::TypeId'])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
     module.add_class('TraceSourceInformation', outer_class=root_module['ns3::TypeId'])
-    ## random-variable.h (module 'core'): ns3::UniformVariable [class]
-    module.add_class('UniformVariable', parent=root_module['ns3::RandomVariable'])
     ## vector.h (module 'core'): ns3::Vector2D [class]
     module.add_class('Vector2D')
     ## vector.h (module 'core'): ns3::Vector3D [class]
     module.add_class('Vector3D')
     ## watchdog.h (module 'core'): ns3::Watchdog [class]
     module.add_class('Watchdog')
-    ## random-variable.h (module 'core'): ns3::WeibullVariable [class]
-    module.add_class('WeibullVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::ZetaVariable [class]
-    module.add_class('ZetaVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::ZipfVariable [class]
-    module.add_class('ZipfVariable', parent=root_module['ns3::RandomVariable'])
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
     module.add_class('int64x64_t')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'])
-    ## random-variable.h (module 'core'): ns3::ConstantVariable [class]
-    module.add_class('ConstantVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::DeterministicVariable [class]
-    module.add_class('DeterministicVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::EmpiricalVariable [class]
-    module.add_class('EmpiricalVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::ErlangVariable [class]
-    module.add_class('ErlangVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable [class]
-    module.add_class('ExponentialVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::GammaVariable [class]
-    module.add_class('GammaVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::IntEmpiricalVariable [class]
-    module.add_class('IntEmpiricalVariable', parent=root_module['ns3::EmpiricalVariable'])
-    ## random-variable.h (module 'core'): ns3::LogNormalVariable [class]
-    module.add_class('LogNormalVariable', parent=root_module['ns3::RandomVariable'])
-    ## random-variable.h (module 'core'): ns3::NormalVariable [class]
-    module.add_class('NormalVariable', parent=root_module['ns3::RandomVariable'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
     module.add_class('AggregateIterator', outer_class=root_module['ns3::Object'])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable [class]
-    module.add_class('ParetoVariable', parent=root_module['ns3::RandomVariable'])
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', parent=root_module['ns3::Object'])
     ## scheduler.h (module 'core'): ns3::Scheduler [class]
@@ -292,10 +258,6 @@
     module.add_class('PointerChecker', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
     module.add_class('PointerValue', parent=root_module['ns3::AttributeValue'])
-    ## random-variable.h (module 'core'): ns3::RandomVariableChecker [class]
-    module.add_class('RandomVariableChecker', parent=root_module['ns3::AttributeChecker'])
-    ## random-variable.h (module 'core'): ns3::RandomVariableValue [class]
-    module.add_class('RandomVariableValue', parent=root_module['ns3::AttributeValue'])
     ## realtime-simulator-impl.h (module 'core'): ns3::RealtimeSimulatorImpl [class]
     module.add_class('RealtimeSimulatorImpl', parent=root_module['ns3::SimulatorImpl'])
     ## realtime-simulator-impl.h (module 'core'): ns3::RealtimeSimulatorImpl::SynchronizationMode [enumeration]
@@ -322,6 +284,7 @@
     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'])
+    module.add_container('std::map< std::string, ns3::LogComponent * >', ('std::string', 'ns3::LogComponent *'), container_type=u'map')
     typehandlers.add_type_alias(u'ns3::RngSeedManager', u'ns3::SeedManager')
     typehandlers.add_type_alias(u'ns3::RngSeedManager*', u'ns3::SeedManager*')
     typehandlers.add_type_alias(u'ns3::RngSeedManager&', u'ns3::SeedManager&')
@@ -467,11 +430,9 @@
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
     register_Ns3ParameterLogger_methods(root_module, root_module['ns3::ParameterLogger'])
-    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'])
     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_Ns3SystemCondition_methods(root_module, root_module['ns3::SystemCondition'])
@@ -480,31 +441,16 @@
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3Timer_methods(root_module, root_module['ns3::Timer'])
     register_Ns3TimerImpl_methods(root_module, root_module['ns3::TimerImpl'])
-    register_Ns3TriangularVariable_methods(root_module, root_module['ns3::TriangularVariable'])
     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_Ns3UniformVariable_methods(root_module, root_module['ns3::UniformVariable'])
     register_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
     register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3Watchdog_methods(root_module, root_module['ns3::Watchdog'])
-    register_Ns3WeibullVariable_methods(root_module, root_module['ns3::WeibullVariable'])
-    register_Ns3ZetaVariable_methods(root_module, root_module['ns3::ZetaVariable'])
-    register_Ns3ZipfVariable_methods(root_module, root_module['ns3::ZipfVariable'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
-    register_Ns3ConstantVariable_methods(root_module, root_module['ns3::ConstantVariable'])
-    register_Ns3DeterministicVariable_methods(root_module, root_module['ns3::DeterministicVariable'])
-    register_Ns3EmpiricalVariable_methods(root_module, root_module['ns3::EmpiricalVariable'])
-    register_Ns3ErlangVariable_methods(root_module, root_module['ns3::ErlangVariable'])
-    register_Ns3ExponentialVariable_methods(root_module, root_module['ns3::ExponentialVariable'])
-    register_Ns3GammaVariable_methods(root_module, root_module['ns3::GammaVariable'])
-    register_Ns3IntEmpiricalVariable_methods(root_module, root_module['ns3::IntEmpiricalVariable'])
-    register_Ns3LogNormalVariable_methods(root_module, root_module['ns3::LogNormalVariable'])
-    register_Ns3NormalVariable_methods(root_module, root_module['ns3::NormalVariable'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
-    register_Ns3ParetoVariable_methods(root_module, root_module['ns3::ParetoVariable'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3Scheduler_methods(root_module, root_module['ns3::Scheduler'])
     register_Ns3SchedulerEvent_methods(root_module, root_module['ns3::Scheduler::Event'])
@@ -567,8 +513,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_Ns3RandomVariableChecker_methods(root_module, root_module['ns3::RandomVariableChecker'])
-    register_Ns3RandomVariableValue_methods(root_module, root_module['ns3::RandomVariableValue'])
     register_Ns3RealtimeSimulatorImpl_methods(root_module, root_module['ns3::RealtimeSimulatorImpl'])
     register_Ns3RefCountBase_methods(root_module, root_module['ns3::RefCountBase'])
     register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
@@ -891,8 +835,8 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
-    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, std::string const & file, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('std::string const &', 'file'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
     ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
@@ -901,6 +845,16 @@
     cls.add_method('Enable', 
                    'void', 
                    [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): std::string ns3::LogComponent::File() const [member function]
+    cls.add_method('File', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## log.h (module 'core'): static std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,ns3::LogComponent*,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ns3::LogComponent*> > > * ns3::LogComponent::GetComponentList() [member function]
+    cls.add_method('GetComponentList', 
+                   'std::map< std::string, ns3::LogComponent * > *', 
+                   [], 
+                   is_static=True)
     ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
@@ -989,10 +943,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1095,24 +1049,6 @@
     cls.add_constructor([param('std::ostream &', 'os')])
     return
 
-def register_Ns3RandomVariable_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::RandomVariable::RandomVariable(ns3::RandomVariable const & o) [copy constructor]
-    cls.add_constructor([param('ns3::RandomVariable const &', 'o')])
-    ## random-variable.h (module 'core'): uint32_t ns3::RandomVariable::GetInteger() const [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): double ns3::RandomVariable::GetValue() const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   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([])
@@ -1168,15 +1104,6 @@
                    [])
     return
 
-def register_Ns3SequentialVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::SequentialVariable::SequentialVariable(ns3::SequentialVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SequentialVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::SequentialVariable::SequentialVariable(double f, double l, double i=1, uint32_t c=1) [constructor]
-    cls.add_constructor([param('double', 'f'), param('double', 'l'), param('double', 'i', default_value='1'), param('uint32_t', 'c', default_value='1')])
-    ## random-variable.h (module 'core'): ns3::SequentialVariable::SequentialVariable(double f, double l, ns3::RandomVariable const & i, uint32_t c=1) [constructor]
-    cls.add_constructor([param('double', 'f'), param('double', 'l'), param('ns3::RandomVariable const &', 'i'), param('uint32_t', 'c', default_value='1')])
-    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([])
@@ -1437,15 +1364,6 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3TriangularVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::TriangularVariable::TriangularVariable(ns3::TriangularVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TriangularVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::TriangularVariable::TriangularVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::TriangularVariable::TriangularVariable(double s, double l, double mean) [constructor]
-    cls.add_constructor([param('double', 's'), param('double', 'l'), param('double', 'mean')])
-    return
-
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -1468,7 +1386,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1519,6 +1442,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1595,6 +1523,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1629,34 +1561,14 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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_Ns3UniformVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::UniformVariable::UniformVariable(ns3::UniformVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::UniformVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::UniformVariable::UniformVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::UniformVariable::UniformVariable(double s, double l) [constructor]
-    cls.add_constructor([param('double', 's'), param('double', 'l')])
-    ## random-variable.h (module 'core'): uint32_t ns3::UniformVariable::GetInteger(uint32_t s, uint32_t l) [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
-                   [param('uint32_t', 's'), param('uint32_t', 'l')])
-    ## random-variable.h (module 'core'): double ns3::UniformVariable::GetValue() const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): double ns3::UniformVariable::GetValue(double s, double l) [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [param('double', 's'), param('double', 'l')])
-    return
-
 def register_Ns3Vector2D_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
@@ -1698,37 +1610,6 @@
                    [param('ns3::Time', 'delay')])
     return
 
-def register_Ns3WeibullVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(ns3::WeibullVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WeibullVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(double m) [constructor]
-    cls.add_constructor([param('double', 'm')])
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(double m, double s) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 's')])
-    ## random-variable.h (module 'core'): ns3::WeibullVariable::WeibullVariable(double m, double s, double b) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 's'), param('double', 'b')])
-    return
-
-def register_Ns3ZetaVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ZetaVariable::ZetaVariable(ns3::ZetaVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ZetaVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ZetaVariable::ZetaVariable(double alpha) [constructor]
-    cls.add_constructor([param('double', 'alpha')])
-    ## random-variable.h (module 'core'): ns3::ZetaVariable::ZetaVariable() [constructor]
-    cls.add_constructor([])
-    return
-
-def register_Ns3ZipfVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ZipfVariable::ZipfVariable(ns3::ZipfVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ZipfVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ZipfVariable::ZipfVariable(long int N, double alpha) [constructor]
-    cls.add_constructor([param('long int', 'N'), param('double', 'alpha')])
-    ## random-variable.h (module 'core'): ns3::ZipfVariable::ZipfVariable() [constructor]
-    cls.add_constructor([])
-    return
-
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -1803,111 +1684,6 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
-def register_Ns3ConstantVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ConstantVariable::ConstantVariable(ns3::ConstantVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ConstantVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ConstantVariable::ConstantVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::ConstantVariable::ConstantVariable(double c) [constructor]
-    cls.add_constructor([param('double', 'c')])
-    ## random-variable.h (module 'core'): void ns3::ConstantVariable::SetConstant(double c) [member function]
-    cls.add_method('SetConstant', 
-                   'void', 
-                   [param('double', 'c')])
-    return
-
-def register_Ns3DeterministicVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::DeterministicVariable::DeterministicVariable(ns3::DeterministicVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DeterministicVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::DeterministicVariable::DeterministicVariable(double * d, uint32_t c) [constructor]
-    cls.add_constructor([param('double *', 'd'), param('uint32_t', 'c')])
-    return
-
-def register_Ns3EmpiricalVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::EmpiricalVariable::EmpiricalVariable(ns3::EmpiricalVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EmpiricalVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::EmpiricalVariable::EmpiricalVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): void ns3::EmpiricalVariable::CDF(double v, double c) [member function]
-    cls.add_method('CDF', 
-                   'void', 
-                   [param('double', 'v'), param('double', 'c')])
-    return
-
-def register_Ns3ErlangVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ErlangVariable::ErlangVariable(ns3::ErlangVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ErlangVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ErlangVariable::ErlangVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::ErlangVariable::ErlangVariable(unsigned int k, double lambda) [constructor]
-    cls.add_constructor([param('unsigned int', 'k'), param('double', 'lambda')])
-    ## random-variable.h (module 'core'): double ns3::ErlangVariable::GetValue() const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): double ns3::ErlangVariable::GetValue(unsigned int k, double lambda) const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [param('unsigned int', 'k'), param('double', 'lambda')], 
-                   is_const=True)
-    return
-
-def register_Ns3ExponentialVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable::ExponentialVariable(ns3::ExponentialVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ExponentialVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable::ExponentialVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable::ExponentialVariable(double m) [constructor]
-    cls.add_constructor([param('double', 'm')])
-    ## random-variable.h (module 'core'): ns3::ExponentialVariable::ExponentialVariable(double m, double b) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 'b')])
-    return
-
-def register_Ns3GammaVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::GammaVariable::GammaVariable(ns3::GammaVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::GammaVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::GammaVariable::GammaVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::GammaVariable::GammaVariable(double alpha, double beta) [constructor]
-    cls.add_constructor([param('double', 'alpha'), param('double', 'beta')])
-    ## random-variable.h (module 'core'): double ns3::GammaVariable::GetValue() const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): double ns3::GammaVariable::GetValue(double alpha, double beta) const [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [param('double', 'alpha'), param('double', 'beta')], 
-                   is_const=True)
-    return
-
-def register_Ns3IntEmpiricalVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::IntEmpiricalVariable::IntEmpiricalVariable(ns3::IntEmpiricalVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::IntEmpiricalVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::IntEmpiricalVariable::IntEmpiricalVariable() [constructor]
-    cls.add_constructor([])
-    return
-
-def register_Ns3LogNormalVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::LogNormalVariable::LogNormalVariable(ns3::LogNormalVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::LogNormalVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::LogNormalVariable::LogNormalVariable(double mu, double sigma) [constructor]
-    cls.add_constructor([param('double', 'mu'), param('double', 'sigma')])
-    return
-
-def register_Ns3NormalVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::NormalVariable::NormalVariable(ns3::NormalVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NormalVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::NormalVariable::NormalVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::NormalVariable::NormalVariable(double m, double v) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 'v')])
-    ## random-variable.h (module 'core'): ns3::NormalVariable::NormalVariable(double m, double v, double b) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 'v'), param('double', 'b')])
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -1979,23 +1755,6 @@
                    [])
     return
 
-def register_Ns3ParetoVariable_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(ns3::ParetoVariable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ParetoVariable const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(double m) [constructor]
-    cls.add_constructor([param('double', 'm')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(double m, double s) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 's')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(double m, double s, double b) [constructor]
-    cls.add_constructor([param('double', 'm'), param('double', 's'), param('double', 'b')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(std::pair<double,double> params) [constructor]
-    cls.add_constructor([param('std::pair< double, double >', 'params')])
-    ## random-variable.h (module 'core'): ns3::ParetoVariable::ParetoVariable(std::pair<double,double> params, double b) [constructor]
-    cls.add_constructor([param('std::pair< double, double >', 'params'), param('double', 'b')])
-    return
-
 def register_Ns3RandomVariableStream_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -2269,10 +2028,10 @@
     cls.add_constructor([])
     ## simulator-impl.h (module 'core'): ns3::SimulatorImpl::SimulatorImpl(ns3::SimulatorImpl const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SimulatorImpl const &', 'arg0')])
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Cancel(ns3::EventId const & ev) [member function]
+    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Cancel(ns3::EventId const & id) [member function]
     cls.add_method('Cancel', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Destroy() [member function]
     cls.add_method('Destroy', 
@@ -2304,10 +2063,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## simulator-impl.h (module 'core'): bool ns3::SimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
+    ## simulator-impl.h (module 'core'): bool ns3::SimulatorImpl::IsExpired(ns3::EventId const & id) const [member function]
     cls.add_method('IsExpired', 
                    'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): bool ns3::SimulatorImpl::IsFinished() const [member function]
     cls.add_method('IsFinished', 
@@ -2319,10 +2078,10 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Remove(ns3::EventId const & ev) [member function]
+    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Remove(ns3::EventId const & id) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Run() [member function]
     cls.add_method('Run', 
@@ -2799,6 +2558,11 @@
     cls.add_constructor([param('ns3::WallClockSynchronizer const &', 'arg0')])
     ## wall-clock-synchronizer.h (module 'core'): ns3::WallClockSynchronizer::WallClockSynchronizer() [constructor]
     cls.add_constructor([])
+    ## wall-clock-synchronizer.h (module 'core'): static ns3::TypeId ns3::WallClockSynchronizer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## wall-clock-synchronizer.h (module 'core'): ns3::WallClockSynchronizer::NS_PER_SEC [variable]
     cls.add_static_attribute('NS_PER_SEC', 'uint64_t const', is_const=True)
     ## wall-clock-synchronizer.h (module 'core'): ns3::WallClockSynchronizer::US_PER_NS [variable]
@@ -2870,15 +2634,15 @@
                    'void', 
                    [param('int64_t', 'ns'), param('timeval *', 'tv')], 
                    visibility='protected')
-    ## wall-clock-synchronizer.h (module 'core'): bool ns3::WallClockSynchronizer::SleepWait(uint64_t arg0) [member function]
+    ## wall-clock-synchronizer.h (module 'core'): bool ns3::WallClockSynchronizer::SleepWait(uint64_t ns) [member function]
     cls.add_method('SleepWait', 
                    'bool', 
-                   [param('uint64_t', 'arg0')], 
+                   [param('uint64_t', 'ns')], 
                    visibility='protected')
-    ## wall-clock-synchronizer.h (module 'core'): bool ns3::WallClockSynchronizer::SpinWait(uint64_t arg0) [member function]
+    ## wall-clock-synchronizer.h (module 'core'): bool ns3::WallClockSynchronizer::SpinWait(uint64_t ns) [member function]
     cls.add_method('SpinWait', 
                    'bool', 
-                   [param('uint64_t', 'arg0')], 
+                   [param('uint64_t', 'ns')], 
                    visibility='protected')
     ## wall-clock-synchronizer.h (module 'core'): void ns3::WallClockSynchronizer::TimevalAdd(timeval * tv1, timeval * tv2, timeval * result) [member function]
     cls.add_method('TimevalAdd', 
@@ -3260,10 +3024,10 @@
     cls.add_constructor([param('ns3::DefaultSimulatorImpl const &', 'arg0')])
     ## default-simulator-impl.h (module 'core'): ns3::DefaultSimulatorImpl::DefaultSimulatorImpl() [constructor]
     cls.add_constructor([])
-    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Cancel(ns3::EventId const & ev) [member function]
+    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Cancel(ns3::EventId const & id) [member function]
     cls.add_method('Cancel', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Destroy() [member function]
     cls.add_method('Destroy', 
@@ -3295,10 +3059,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## default-simulator-impl.h (module 'core'): bool ns3::DefaultSimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
+    ## default-simulator-impl.h (module 'core'): bool ns3::DefaultSimulatorImpl::IsExpired(ns3::EventId const & id) const [member function]
     cls.add_method('IsExpired', 
                    'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_const=True, is_virtual=True)
     ## default-simulator-impl.h (module 'core'): bool ns3::DefaultSimulatorImpl::IsFinished() const [member function]
     cls.add_method('IsFinished', 
@@ -3310,10 +3074,10 @@
                    'ns3::Time', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Remove(ns3::EventId const & ev) [member function]
+    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Remove(ns3::EventId const & id) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Run() [member function]
     cls.add_method('Run', 
@@ -3480,14 +3244,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -3525,8 +3289,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -3547,10 +3311,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -4157,55 +3921,15 @@
                    [param('ns3::Ptr< ns3::Object >', 'object')])
     return
 
-def register_Ns3RandomVariableChecker_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::RandomVariableChecker::RandomVariableChecker() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::RandomVariableChecker::RandomVariableChecker(ns3::RandomVariableChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RandomVariableChecker const &', 'arg0')])
-    return
-
-def register_Ns3RandomVariableValue_methods(root_module, cls):
-    ## random-variable.h (module 'core'): ns3::RandomVariableValue::RandomVariableValue() [constructor]
-    cls.add_constructor([])
-    ## random-variable.h (module 'core'): ns3::RandomVariableValue::RandomVariableValue(ns3::RandomVariableValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RandomVariableValue const &', 'arg0')])
-    ## random-variable.h (module 'core'): ns3::RandomVariableValue::RandomVariableValue(ns3::RandomVariable const & value) [constructor]
-    cls.add_constructor([param('ns3::RandomVariable const &', 'value')])
-    ## random-variable.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::RandomVariableValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## random-variable.h (module 'core'): bool ns3::RandomVariableValue::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)
-    ## random-variable.h (module 'core'): ns3::RandomVariable ns3::RandomVariableValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::RandomVariable', 
-                   [], 
-                   is_const=True)
-    ## random-variable.h (module 'core'): std::string ns3::RandomVariableValue::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)
-    ## random-variable.h (module 'core'): void ns3::RandomVariableValue::Set(ns3::RandomVariable const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::RandomVariable const &', 'value')])
-    return
-
 def register_Ns3RealtimeSimulatorImpl_methods(root_module, cls):
     ## realtime-simulator-impl.h (module 'core'): ns3::RealtimeSimulatorImpl::RealtimeSimulatorImpl(ns3::RealtimeSimulatorImpl const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RealtimeSimulatorImpl const &', 'arg0')])
     ## realtime-simulator-impl.h (module 'core'): ns3::RealtimeSimulatorImpl::RealtimeSimulatorImpl() [constructor]
     cls.add_constructor([])
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Cancel(ns3::EventId const & ev) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Cancel(ns3::EventId const & id) [member function]
     cls.add_method('Cancel', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Destroy() [member function]
     cls.add_method('Destroy', 
@@ -4247,10 +3971,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## realtime-simulator-impl.h (module 'core'): bool ns3::RealtimeSimulatorImpl::IsExpired(ns3::EventId const & ev) const [member function]
+    ## realtime-simulator-impl.h (module 'core'): bool ns3::RealtimeSimulatorImpl::IsExpired(ns3::EventId const & id) const [member function]
     cls.add_method('IsExpired', 
                    'bool', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_const=True, is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): bool ns3::RealtimeSimulatorImpl::IsFinished() const [member function]
     cls.add_method('IsFinished', 
@@ -4267,10 +3991,10 @@
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Remove(ns3::EventId const & ev) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Remove(ns3::EventId const & id) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::EventId const &', 'ev')], 
+                   [param('ns3::EventId const &', 'id')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Run() [member function]
     cls.add_method('Run', 
@@ -4840,14 +4564,14 @@
     module.add_function('LogGetTimePrinter', 
                         'ns3::LogTimePrinter', 
                         [])
-    ## log.h (module 'core'): extern void ns3::LogSetNodePrinter(ns3::LogNodePrinter arg0) [free function]
+    ## log.h (module 'core'): extern void ns3::LogSetNodePrinter(ns3::LogNodePrinter np) [free function]
     module.add_function('LogSetNodePrinter', 
                         'void', 
-                        [param('ns3::LogNodePrinter', 'arg0')])
-    ## log.h (module 'core'): extern void ns3::LogSetTimePrinter(ns3::LogTimePrinter arg0) [free function]
+                        [param('ns3::LogNodePrinter', 'np')])
+    ## log.h (module 'core'): extern void ns3::LogSetTimePrinter(ns3::LogTimePrinter lp) [free function]
     module.add_function('LogSetTimePrinter', 
                         'void', 
-                        [param('ns3::LogTimePrinter', 'arg0')])
+                        [param('ns3::LogTimePrinter', 'lp')])
     ## boolean.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeBooleanChecker() [free function]
     module.add_function('MakeBooleanChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
@@ -4868,10 +4592,6 @@
     module.add_function('MakeObjectFactoryChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
-    ## random-variable.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeRandomVariableChecker() [free function]
-    module.add_function('MakeRandomVariableChecker', 
-                        'ns3::Ptr< ns3::AttributeChecker const >', 
-                        [])
     ## string.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeStringChecker() [free function]
     module.add_function('MakeStringChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
@@ -4994,42 +4714,42 @@
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['long'])
+                        template_parameters=['unsigned long'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['int'])
+                        template_parameters=['unsigned int'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['short'])
+                        template_parameters=['unsigned short'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['signed char'])
+                        template_parameters=['unsigned char'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['unsigned long'])
+                        template_parameters=['long'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['unsigned int'])
+                        template_parameters=['int'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['unsigned short'])
+                        template_parameters=['short'])
     ## type-name.h (module 'core'): extern std::string ns3::TypeNameGet() [free function]
     module.add_function('TypeNameGet', 
                         'std::string', 
                         [], 
-                        template_parameters=['unsigned char'])
+                        template_parameters=['signed char'])
     ## nstime.h (module 'core'): ns3::Time ns3::Years(ns3::int64x64_t value) [free function]
     module.add_function('Years', 
                         'ns3::Time', 
diff -Naur ns-3.21/src/core/examples/command-line-example.cc ns-3.22/src/core/examples/command-line-example.cc
--- ns-3.21/src/core/examples/command-line-example.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/examples/command-line-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,12 +24,28 @@
 
 #include "ns3/core-module.h"
 
+/**
+ * \file
+ * \ingroup commandline
+ * Example program illustrating use of ns3::CommandLine.
+ */
 
 using namespace ns3;
 
 
+/**
+ * Global variable to illustrate command line arguments handled by a
+ * Callback function.
+ */
 std::string g_cbArg = "cbArg default";
 
+/**
+ * Function to illustrate command line arguments handled by a
+ * Callback function.
+ *
+ * \param [in] val New value for \p g_cbArg.
+ * \returns \c true.
+ */
 bool SetCbArg (std::string val)
 {
   g_cbArg = val;
diff -Naur ns-3.21/src/core/examples/hash-example.cc ns-3.22/src/core/examples/hash-example.cc
--- ns-3.21/src/core/examples/hash-example.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/examples/hash-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,16 +25,92 @@
 #include "ns3/core-module.h"
 #include "ns3/hash.h"
 
-NS_LOG_COMPONENT_DEFINE ("Hasher");
+/**
+ * \file
+ * Example usage of ns3::Hash.
+ *
+ * This example reads words from a list of files, creates a dictionary
+ * mapping words to hash values, reports collisions, and measures the
+ * execution time of the hash function implementations.
+ *
+ * See \ref hash
+ *
+ *  Example Output:
+ *  \verbatim
+
+./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
+
+   \endverbatim
+ */
 
 namespace ns3
 {
+
+NS_LOG_COMPONENT_DEFINE ("Hasher");
+
 namespace Hash
 {
 
 /**
  * \ingroup hash
- *  Namespace for hasher-example
+ *  Namespace for hasher-example.
 */
 namespace Example
 {
@@ -45,20 +121,21 @@
 class Collider {
 
 public:
-  std::string m_name;                   /**< Name of this hash */
-  Hasher      m_hash;                   /**< The hash */
+  std::string m_name;                   /**< Name of this hash. */
+  Hasher      m_hash;                   /**< The hash. */
 
+  /** The size of hash function being tested. */
   enum Bits {
-    Bits32,                             /**< Use 32-bit hash function */
-    Bits64                              /**< Use 64-bit hash function */
+    Bits32,                             /**< Use 32-bit hash function. */
+    Bits64                              /**< Use 64-bit hash function. */
   };
 
   /**
-   * Constructor
+   * Constructor.
    *
-   * \param [in] name Hash function name
-   * \param [in] hash Hash function
-   * \param [in] bits Which hash length to use
+   * \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),
@@ -67,10 +144,10 @@
   {  }
 
   /**
-   * Add a string to the Collider
+   * Add a string to the Collider.
    *
-   * \param [in] phrase the string to add
-   * \return true if this was a new string
+   * \param [in] phrase The string to add.
+   * \return true If this was a new string.
    */
   bool Add (const std::string phrase)
   {
@@ -107,7 +184,7 @@
   }  // Add ()
 
   /**
-   * \return The hash name, including the length
+   * \return The hash name, including the length.
    */
   std::string GetName () const
   {
@@ -122,7 +199,7 @@
     return name;
   }
 
-  /** Print the collisions found */
+  /** Print the collisions found. */
   void Report () const
   {
     std::cout << std::endl;
@@ -149,10 +226,10 @@
 private:
 
   /**
-   * Get the appropriate hash value
+   * 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
+   * \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)
     {
@@ -170,46 +247,50 @@
       return h;
     }
 
-  /** Hash function */
+  /** Hash function. */
   enum Bits m_bits;
   
-  /** Hashed dictionary of first instance of each hash */
+  /** Hashed dictionary of first instance of each hash. */
   typedef std::map <uint64_t, std::string> hashdict_t;
 
-  /** The dictionary map, indexed by hash */
+  /** The dictionary map, indexed by hash. */
   hashdict_t  m_dict;
 
-  /** Collision map of subsequent instances */
+  /** Collision map of subsequent instances. */
   typedef std::vector < std::pair<uint64_t, std::string> > collision_t;
 
-  /** The list of collisions */
+  /** The list of collisions. */
   collision_t m_coll;            
 
 };  // class Collider
 
   
 /**
- * Word list and hashers to test
+ * Word list and hashers to test.
  */
 class Dictionary {
 public:
-  /** Constructor */
+  /** Constructor. */
   Dictionary ()
     : m_nphrases (0)
   {
     m_words.reserve (320000);
   }
 
-  /** Add a Collider containing a hash function */
+  /**
+   * Add a Collider containing a hash function.
+   *
+   * \param [in] c The Collider to add.
+   */
   void Add (Collider c)
   {
     m_hashes.push_back (c);
   }
 
   /**
-   * Add a string to the dictionary
+   * Add a string to the dictionary.
    *
-   * \param [in] phrase the string to add
+   * \param [in] phrase The string to add.
    */
   void Add (const std::string phrase)
   {
@@ -234,7 +315,7 @@
   }  // Add ()
 
   /**
-   * Report the expected number of collisions
+   * Report the expected number of collisions.
    *
    * See, e.g.,
    * http://www.math.dartmouth.edu/archive/m19w03/public_html/Section6-5.pdf
@@ -292,7 +373,7 @@
   }  // ReportExpectedCollisions
   
     
-  /** Print the collisions for each Collider */
+  /** Print the collisions for each Collider. */
   void Report () const
   {
     ReportExpectedCollisions ();
@@ -306,9 +387,9 @@
   }  // Report ()
 
   /**
-   * Time and report the execution of one hash across the entire Dictionary
+   * Time and report the execution of one hash across the entire Dictionary.
    *
-   * \param [in] hindex index of the hash Collider to use
+   * \param [in] hindex Index of the hash Collider to use.
    */
   void TimeOne (const int hindex)
   {
@@ -340,7 +421,7 @@
     
   }  // TimeOne ()
 
-  /** Report the execution time of each hash across the entire Dictionary */
+  /** Report the execution time of each hash across the entire Dictionary. */
   void Time ()
   {
     std::cout << "" << std::endl;
@@ -360,15 +441,15 @@
   }  // 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 */
+  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
+ * Source word list files.
  */
 class DictFiles
 {
@@ -376,10 +457,10 @@
 public:
   
   /**
-   * CommandLine callback function to add a file argument to the list
+   * 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
+   * \param [in] file The word file to add.
+   * \return true Tf the file is new to the list.
    */
   bool Add (const std::string file)
   {
@@ -392,9 +473,9 @@
   }
 
   /**
-   * Add phrases from the files into the dict
+   * Add phrases from the files into the dict.
    *
-   * \param [in,out] dict the Dictionary to add words to
+   * \param [in,out] dict The Dictionary to add words to.
    */
   void ReadInto (Dictionary & dict)
   {
@@ -441,7 +522,7 @@
   }  // ReadInto
 
 private:
-  std::vector <std::string> m_files;    /**< List of word files to use */
+  std::vector <std::string> m_files;    /**< List of word files to use. */
 
 };  // class DictFiles
 
@@ -498,67 +579,3 @@
 
 
 }  // 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.21/src/core/examples/main-callback.cc ns-3.22/src/core/examples/main-callback.cc
--- ns-3.21/src/core/examples/main-callback.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/examples/main-callback.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,19 +1,59 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2006 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
+ *
+ */
+
 #include "ns3/callback.h"
 #include "ns3/assert.h"
 #include <iostream>
 
+/**
+ * \file
+ * \ingroup callback
+ * Example program illustrating use of callback functions and methods.
+ *
+ * See \ref callback
+ */
+
 using namespace ns3;
 
-static double 
+/**
+ * Example Callback function.
+ *
+ * \param [in] a The first argument.
+ * \param [in] b The second argument.
+ * \returns The first argument.
+ */
+static double
 CbOne (double a, double b)
 {
   std::cout << "invoke cbOne a=" << a << ", b=" << b << std::endl;
   return a;
 }
 
+/** Example Callback class. */
 class MyCb {
 public:
+  /**
+   * Example Callback class method.
+   *
+   * \param [in] a The argument.
+   * \returns -5
+   */
   int CbTwo (double a) {
     std::cout << "invoke cbTwo a=" << a << std::endl;
     return -5;
diff -Naur ns-3.21/src/core/examples/main-ptr.cc ns-3.22/src/core/examples/main-ptr.cc
--- ns-3.21/src/core/examples/main-ptr.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/examples/main-ptr.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,15 +1,45 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2006 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
+ *
+ */
+
 #include "ns3/ptr.h"
 #include "ns3/object.h"
 #include <iostream>
 
+/**
+ * \ingroup ptr
+ * \file
+ * Example program illustrating use of the ns3::Ptr smart pointer.
+ */
+
 using namespace ns3;
 
+/**
+ * Example class illustrating use of Ptr.
+ */
 class PtrExample : public Object
 {
 public:
+  /** Constructor. */
   PtrExample ();
+  /** Destructor. */
   ~PtrExample ();
+  /** Example class method. */
   void Method (void);
 };
 PtrExample::PtrExample ()
@@ -26,8 +56,20 @@
   std::cout << "PtrExample method" << std::endl;
 }
 
+
+/**
+ *  Example Ptr global variable.
+ */
 static Ptr<PtrExample> g_ptr = 0;
 
+/**
+ * Example Ptr manipulations.
+ *
+ * This function stores it's argument in the global variable \c g_ptr
+ * and returns the old value of \c g_ptr.
+ * \param [in] p A Ptr.
+ * \returns The prior value of \c g_ptr.
+ */
 static Ptr<PtrExample>
 StorePtr (Ptr<PtrExample> p)
 {
@@ -36,6 +78,9 @@
   return prev;
 }
 
+/**
+ *  Set \c g_ptr to NULL.
+ */
 static void
 ClearPtr (void)
 {
diff -Naur ns-3.21/src/core/examples/main-test-sync.cc ns-3.22/src/core/examples/main-test-sync.cc
--- ns-3.21/src/core/examples/main-test-sync.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/examples/main-test-sync.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,4 +1,20 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 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/simulator.h"
 #include "ns3/realtime-simulator-impl.h"
@@ -13,12 +29,23 @@
 #include <unistd.h>
 #include <sys/time.h>
 
+/**
+ * \file
+ * \ingroup scheduler
+ * An example of scheduling events in a background thread.
+ *
+ * See \ref ns3::SystemThread,
+ * \ref ns3::SimulatorImpl::ScheduleWithContext
+ */
+
 using namespace ns3;
 
 NS_LOG_COMPONENT_DEFINE ("TestSync");
 
+/** Check that the event functions run in the intended order. */
 bool gFirstRun = false;
 
+/** An event method called many times from the background thread. */
 void 
 inserted_function (void)
 {
@@ -27,6 +54,7 @@
                  Simulator::Now ().GetSeconds () << " s");
 }
 
+/** An event method called many times from the main thread. */
 void 
 background_function (void)
 {
@@ -35,6 +63,7 @@
                  Simulator::Now ().GetSeconds () << " s");
 }
 
+/** An event method called once from the main thread. */
 void 
 first_function (void)
 {
@@ -43,10 +72,13 @@
   gFirstRun = true;
 }
 
+/** Example class with a method for the background task. */
 class FakeNetDevice
 {
 public:
+  /** Constructor. */
   FakeNetDevice ();
+  /** The thread entry point. */
   void Doit3 (void);
 };
 
@@ -70,7 +102,15 @@
     }
 }
 
-
+/**
+ * Example use of ns3::SystemThread.
+ *
+ * This example is a complete simulation.
+ * It schedules \c first_function and many executions of \c background_function
+ * to execute in the main (foreground) thread.  It also launches a background
+ * thread with an instance of FakeNetDevice, which schedules many instances of
+ * \c inserted_function.
+ */
 void 
 test (void)
 {
diff -Naur ns-3.21/src/core/examples/sample-random-variable.cc ns-3.22/src/core/examples/sample-random-variable.cc
--- ns-3.21/src/core/examples/sample-random-variable.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/examples/sample-random-variable.cc	2015-02-05 15:46:22.000000000 -0800
@@ -16,7 +16,7 @@
 #include "ns3/simulator.h"
 #include "ns3/nstime.h"
 #include "ns3/command-line.h"
-#include "ns3/random-variable.h"
+#include "ns3/random-variable-stream.h"
 #include <iostream>
 
 using namespace ns3;
@@ -55,8 +55,8 @@
 
   // SeedManager::SetRun (3);
 
-  UniformVariable uv;
+  Ptr<UniformRandomVariable> uv = CreateObject<UniformRandomVariable> ();
 
-  std::cout << uv.GetValue () << std::endl;
+  std::cout << uv->GetValue () << std::endl;
 
 }
diff -Naur ns-3.21/src/core/examples/sample-simulator.cc ns-3.22/src/core/examples/sample-simulator.cc
--- ns-3.21/src/core/examples/sample-simulator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/examples/sample-simulator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,6 +25,12 @@
 #include "ns3/double.h"
 #include "ns3/random-variable-stream.h"
 
+/**
+ * \file
+ * \ingroup simulator
+ * Example program demonstrating use of various Schedule functions.
+ */
+
 using namespace ns3;
 
 class MyModel
diff -Naur ns-3.21/src/core/helper/event-garbage-collector.h ns-3.22/src/core/helper/event-garbage-collector.h
--- ns-3.21/src/core/helper/event-garbage-collector.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/helper/event-garbage-collector.h	2015-02-05 15:46:22.000000000 -0800
@@ -49,22 +49,39 @@
   ~EventGarbageCollector ();
 
 private:
-
+ 
+  /**
+   * \brief comparison operator for std::multiset
+   */
   struct EventIdLessThanTs
   {
+    /**
+     * \brief comparison operator for std::multiset
+     */
     bool operator () (const EventId &a, const EventId &b) const
     {
       return (a.GetTs () < b.GetTs ());
     }
   };
 
+  /** Event list container */
   typedef std::multiset<EventId, EventIdLessThanTs> EventList;
 
-  EventList::size_type m_nextCleanupSize;
-  EventList m_events;
+  EventList::size_type m_nextCleanupSize;      //!< batch size for cleanup
+  EventList m_events;                          //!< the tracked event list 
 
+  /**
+   * \brief called when a new event was added and the cleanup limit was
+   * exceeded in consequence.
+   */
   void Cleanup ();
+  /**
+   * \brief grow the cleanup limit
+   */
   void Grow ();
+  /**
+   * \brief shrink the cleanup limit
+   */
   void Shrink ();
 };
 
diff -Naur ns-3.21/src/core/helper/random-variable-stream-helper.cc ns-3.22/src/core/helper/random-variable-stream-helper.cc
--- ns-3.21/src/core/helper/random-variable-stream-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/helper/random-variable-stream-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/assert.h"
 #include "random-variable-stream-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("RandomVariableStreamHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RandomVariableStreamHelper");
+
 int64_t RandomVariableStreamHelper::AssignStreams (std::string path, int64_t stream)
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.21/src/core/model/abort.h ns-3.22/src/core/model/abort.h
--- ns-3.21/src/core/model/abort.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/abort.h	2015-02-05 15:46:22.000000000 -0800
@@ -24,116 +24,124 @@
 #include "fatal-error.h"
 
 /**
+ * \file
+ * \ingroup fatal
+ * \brief \c NS_ABORT_x macro definitions.
+ */
+
+/**
  * \ingroup fatal
  *
- * \brief Abnormal program termination
+ * \brief Unconditional abnormal program termination with a message.
  *
- * \param msg message to output when this macro is hit.
+ * \param msg The message to output when this macro is hit.
  *
  * This macro is essentially equivalent to NS_FATAL_ERROR,
  * excepts it prepends the error message with the string
  * "aborted. ". When this macro is hit a runtime, the
- * program will be halted using std::terminate, which
- * triggers clean up code regestered by std::set_terminate.
+ * program will be halted using \c std::terminate, which
+ * triggers clean up code registered by \c std::set_terminate.
  *
- * This macro is enable unconditionally in all builds,
+ * This macro is enabled unconditionally in all builds,
  * including debug and optimized builds.
  *
  * \see NS_FATAL_ERROR
  */
-#define NS_ABORT_MSG(msg)                                       \
-  do {                                                          \
-      std::cerr << "aborted. ";                                   \
-      NS_FATAL_ERROR (msg);                                       \
-    } while (false)
+#define NS_ABORT_MSG(msg)                                              \
+  do {                                                                 \
+      std::cerr << "aborted. ";                                        \
+      NS_FATAL_ERROR (msg);                                            \
+  } while (false)
 
 
 /**
  * \ingroup fatal
  *
- * \brief Abnormal program termination if cond is true.
+ * \brief Abnormal program termination if a condition is \c true.
  *
- * \param cond condition to be evaluated.
+ * \param cond The condition to be evaluated.
  *
- * This is similar to NS_ASSERT(!(cond)), except this check
- * is enabled in all builds. If cond is evaluated to true,
- * the espression evaluating to true is printed to stderr,
+ * This is similar to \c NS_ASSERT(!(cond)), except this check
+ * is enabled in all builds. If \c cond is evaluated to \c true,
+ * the expression for \c cond is printed to \c stderr,
  * followed by a call to the NS_FATAL_ERROR_NO_MSG() macro
  * which prints the details of filename and line number to
- * stderr. The program will be halted by calling
- * std::terminate(), triggering any clean up code registered
- * by std::set_terminate (NS3 default is a stream-flushing
- * code, but may be overridden).
+ * \c stderr. The program will be halted by calling
+ * \c std::terminate(), triggering any clean up code registered
+ * by \c std::set_terminate.  The ns-3 default is a stream-flushing
+ * code, but may be overridden.
  *
- * This macro is enable unconditionally in all builds,
+ * This macro is enabled unconditionally in all builds,
  * including debug and optimized builds.
  */
-#define NS_ABORT_IF(cond)                                               \
-  do {                                                                  \
-      if (cond)                                                           \
-        {                                                                 \
-          std::cerr << "aborted. cond=\"" << # cond << ", ";               \
-          NS_FATAL_ERROR_NO_MSG ();                                       \
-        }                                                                 \
+#define NS_ABORT_IF(cond)                                              \
+  do {                                                                 \
+    if (cond)                                                          \
+      {                                                                \
+        std::cerr << "aborted. cond=\"" << # cond << ", ";             \
+        NS_FATAL_ERROR_NO_MSG ();                                      \
+      }                                                                \
     } while (false)
 
 /**
  * \ingroup fatal
  *
- * \brief Abnormal program termination if cond is true.
+ * \brief Abnormal program termination if a condition is \c true,
+ * with a message.
  *
- * \param cond condition to be evaluated.
- * \param msg message to output when cond is true.
+ * \param cond The ondition to be evaluated.
+ * \param msg The message to output when cond is \c true.
  *
  * This is similar to NS_ASSERT_MSG(!(cond)), except this
- * check is enabled in all builds. If cond is evaluated to
- * true, the espression evaluating to true is printed to
- * stderr, followed by a call to the NS_FATAL_ERROR() macro
+ * check is enabled in all builds. If \c cond is evaluated to
+ * \c true, the expression for \c cond is printed to
+ * \c stderr, followed by a call to the NS_FATAL_ERROR() macro
  * which prints the user-specified error message, and details
- * of filename and line number to stderr. The program will
- * be halted by calling std::terminate(), triggering any
- * clean up code registered by std::set_terminate (NS3
- * default is a stream-flushing code, but may be overridden).
+ * of filename and line number to \c stderr. The program will
+ * be halted by calling \c std::terminate(), triggering any
+ * clean up code registered by \c std::set_terminate. The ns-3
+ * default is a stream-flushing code, but may be overridden.
  *
- * This macro is enable unconditionally in all builds,
+ * This macro is enabled unconditionally in all builds,
  * including debug and optimized builds.
  */
-#define NS_ABORT_MSG_IF(cond, msg)                                      \
-  do {                                                                  \
-      if (cond)                                                           \
-        {                                                                 \
-          std::cerr << "aborted. cond=\"" << # cond << "\", ";             \
-          NS_FATAL_ERROR (msg);                                           \
-        }                                                                 \
-    } while (false)
+#define NS_ABORT_MSG_IF(cond, msg)                                     \
+  do {                                                                 \
+    if (cond)                                                          \
+      {                                                                \
+        std::cerr << "aborted. cond=\"" << # cond << "\", ";           \
+        NS_FATAL_ERROR (msg);                                          \
+      }                                                                \
+  } while (false)
 
 /**
  * \ingroup fatal
  *
- * \brief Abnormal program termination if cond is false.
+ * \brief Abnormal program termination if a condition is \c false.
  *
- * \param cond condition to be evaluated.
+ * \param cond The condition to be evaluated.
  *
  * This is an alias for NS_ABORT_IF(!(cond))
  *
  * \see NS_ABORT_IF
  */
-#define NS_ABORT_UNLESS(cond)                                                       \
+#define NS_ABORT_UNLESS(cond)                                          \
   NS_ABORT_IF (!(cond))
 
 /**
  * \ingroup fatal
  *
- * \brief Abnormal program termination if cond is false.
+ * \brief Abnormal program termination if a condition is \c false,
+ * with a message.
  *
- * \param cond condition to be evaluated.
- * \param msg message to output if cond is false.
+ * \param cond Thecondition to be evaluated.
+ * \param msg The message to output if cond is false.
  *
  * This is an alias for NS_ABORT_MSG_IF(!(cond))
  *
  * \see NS_ABORT_MSG_IF
  */
-#define NS_ABORT_MSG_UNLESS(cond, msg)                                      \
+#define NS_ABORT_MSG_UNLESS(cond, msg)                                 \
   NS_ABORT_MSG_IF (!(cond),msg)
 
 #endif /* NS3_ABORT_H */
diff -Naur ns-3.21/src/core/model/attribute-accessor-helper.h ns-3.22/src/core/model/attribute-accessor-helper.h
--- ns-3.21/src/core/model/attribute-accessor-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/attribute-accessor-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -22,46 +22,157 @@
 
 #include "attribute.h"
 
+/**
+ * \file
+ * \ingroup attributeimpl
+ * ns3::MakeAccessorHelper declarations and template implementations.
+ */
+
 namespace ns3 {
 
+  
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributeimpl
+ *
+ * Create an AttributeAccessor for a class data member,
+ * or a lone class get functor or set method.
+ *
+ * The get functor method should have a signature like
+ * \code
+ *   typedef U (T::*getter)(void) const
+ * \endcode
+ * where \p T is the class and \p U is the type of
+ * the return value.
+ *
+ * The set method should have one of these signatures:
+ * \code
+ *   typedef void (T::*setter)(U)
+ *   typedef bool (T::*setter)(U)
+ * \endcode
+ * where \p T is the class and \p U is the type of the value to set
+ * the attribute to, which should be compatible with the
+ * specific AttributeValue type \p V which holds the value
+ * (or the type implied by the name \c Make<V>Accessor of this function.)
+ * In the case of a \p setter returning \p bool, the return value
+ * should be \c true if the value could be set successfully.
+ *
+ * \tparam V  (If present) The specific AttributeValue type to use to represent
+ *            the Attribute.  (If not present, the type \p V is implicit
+ *            in the name of this function as "Make<V>Accessor"
+ * \tparam T1 The type of the class data member,
+ *            or the type of the class get functor or set method.
+ * \param  a1 The address of the data member,
+ *            or the get or set method.
+ * \returns   The AttributeAccessor
  */
 template <typename V, typename T1>
 inline
 Ptr<const AttributeAccessor>
 MakeAccessorHelper (T1 a1);
 
+  
 /**
- * \ingroup AttributeHelper
+ * \ingroup attributeimpl
+ *
+ * Create an AttributeAccessor using a pair of get functor
+ * and set methods from a class.
+ *
+ * The get functor method should have a signature like
+ * \code
+ *   typedef U (T::*getter)(void) const
+ * \endcode
+ * where \p T is the class and \p U is the type of
+ * the return value.
+ *
+ * The set method should have one of these signatures:
+ * \code
+ *   typedef void (T::*setter)(U)
+ *   typedef bool (T::*setter)(U)
+ * \endcode
+ * where \p T is the class and \p U is the type of the value to set
+ * the attribute to, which should be compatible with the
+ * specific AttributeValue type \p V which holds the value
+ * (or the type implied by the name \c Make<V>Accessor of this function.)
+ * In the case of a \p setter returning \p bool, the return value
+ * should be true if the value could be set successfully.
+ *
+ * In practice the setter and getter arguments can appear in either order,
+ * but setter first is preferred.
+ *
+ * \tparam V  (If present) The specific AttributeValue type to use to represent
+ *            the Attribute.  (If not present, the type \p V is implicit
+ *            in the name of this function as "Make<V>Accessor"
+ * \tparam T1 The type of the class data member,
+ *            or the type of the class get functor or set method.
+ *
+ * \tparam T2 The type of the getter class functor method.
+ * \param  a2 The address of the class method to set the attribute.
+ * \param  a1 The address of the data member,
+ *            or the get or set method.
+ * \returns   The AttributeAccessor
  */
 template <typename V, typename T1, typename T2>
 inline
 Ptr<const AttributeAccessor>
 MakeAccessorHelper (T1 a1, T2 a2);
 
+  
 } // namespace ns3
 
+
 /***************************************************************
- *        The implementation of the above functions.
+ *  Implementation of the templates declared above.
  ***************************************************************/
 
 #include "type-traits.h"
 
 namespace ns3 {
 
+  
+/**
+ * \ingroup attributeimpl
+ *
+ * The non-const and non-reference type equivalent to \p T.
+ *
+ * \tparam T The original (possibly qualified) type.
+ */
 template <typename T>
 struct AccessorTrait
 {
+  /** The non-const, non reference type. */
   typedef typename TypeTraits<typename TypeTraits<T>::ReferencedType>::NonConstType Result;
 };
 
+  
+/**
+ * \ingroup attributeimpl
+ *
+ * Basic functionality for accessing class attributes via
+ * class data members, or get functor/set methods.
+ *
+ * \tparam T Class of object holding the attribute.
+ * \tparam U AttributeValue type for the underlying class member
+ *           which is an attribute.
+ */
 template <typename T, typename U>
 class AccessorHelper : public AttributeAccessor
 {
 public:
+  /** Constructor */
   AccessorHelper () {}
 
+  /**
+   * Set the underlying member to the argument AttributeValue.
+   *
+   * Handle dynamic casting from generic ObjectBase and AttributeValue
+   * up to desired object class and specific AttributeValue.
+   *
+   * Forwards to DoSet method.
+   *
+   * \param object Generic object pointer, to upcast to \p T.
+   * \param val Generic AttributeValue, to upcast to \p U.
+   * \returns true if the member was set successfully.
+   */
   virtual bool Set (ObjectBase * object, const AttributeValue & val) const {
     const U *value = dynamic_cast<const U *> (&val);
     if (value == 0)
@@ -76,6 +187,18 @@
     return DoSet (obj, value);
   }
 
+  /**
+   * Get the value of the underlying member into the AttributeValue.
+   *
+   * Handle dynamic casting from generic ObjectBase and AttributeValue
+   * up to desired object class and specific AttributeValue.
+   *
+   * Forwards to DoGet method.
+   *
+   * \param object Generic object pointer, to upcast to \p T.
+   * \param val Generic AttributeValue, to upcast to \p U.
+   * \returns true if the member value could be retrieved successfully
+   */
   virtual bool Get (const ObjectBase * object, AttributeValue &val) const {
     U *value = dynamic_cast<U *> (&val);
     if (value == 0)
@@ -91,18 +214,53 @@
   }
 
 private:
+  /**
+   * Setter implementation.
+   *
+   * \see Set()
+   * \param object The parent object holding the attribute.
+   * \param v The specific AttributeValue to set.
+   * \returns true if the member was set successfully.
+   */
   virtual bool DoSet (T *object, const U *v) const = 0;
+  /**
+   * Getter implementation.
+   *
+   * \see Get()
+   * \param object The parent object holding the attribute.
+   * \param v The specific AttributeValue to set.
+   * \returns true if the member value could be retrieved successfully
+   */
   virtual bool DoGet (const T *object, U *v) const = 0;
-};
 
+};  // class AccessorHelper
+
+  
+/**
+ * \ingroup attributeimpl
+ *
+ * MakeAccessorHelper implementation for a class data member.
+ *
+ * \tparam V  The specific AttributeValue type to use to represent
+ *            the Attribute.
+ * \tparam T  The class holding the data member.
+ * \tparam U  The type of the data member.
+ * \param  memberVariable  The address of the data member.
+ * \returns The AttributeAccessor.
+ */
 template <typename V, typename T, typename U>
 inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperOne (U T::*memberVariable)
 {
+  /* AttributeAcessor implementation for a class member variable. */
   class MemberVariable : public AccessorHelper<T,V>
   {
 public:
+    /*
+     * Construct from a class data member address.
+     * \param memberVariable The class data member address.
+     */
     MemberVariable (U T::*memberVariable)
       : AccessorHelper<T,V> (),
         m_memberVariable (memberVariable)
@@ -129,19 +287,37 @@
       return true;
     }
 
-    U T::*m_memberVariable;
+    U T::*m_memberVariable;  // Address of the class data member.
   };
   return Ptr<const AttributeAccessor> (new MemberVariable (memberVariable), false);
 }
 
+  
+/**
+ * \ingroup attributeimpl
+ *
+ * MakeAccessorHelper implementation for a class get functor method.
+ *
+ * \tparam V  The specific AttributeValue type to use to represent
+ *            the Attribute.
+ * \tparam T  The class holding the get functor method.
+ * \tparam U  The return type of the get functor method.
+ * \param  getter  The address of the class get functor method.
+ * \returns The AttributeAccessor.
+ */
 template <typename V, typename T, typename U>
 inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperOne (U (T::*getter)(void) const)
 {
+  /* AttributeAccessor implementation with a class get functor method. */
   class MemberMethod : public AccessorHelper<T,V>
   {
 public:
+    /*
+     * Construct from a class get functor method.
+     * \param getter The class get functor method pointer.
+     */
     MemberMethod (U (T::*getter)(void) const)
       : AccessorHelper<T,V> (),
         m_getter (getter)
@@ -160,20 +336,38 @@
     virtual bool HasSetter (void) const {
       return false;
     }
-    U (T::*m_getter)(void) const;
+    U (T::*m_getter)(void) const;  // The class get functor method pointer.
   };
   return Ptr<const AttributeAccessor> (new MemberMethod (getter), false);
 }
 
 
+/**
+ * \ingroup attributeimpl
+ *
+ * MakeAccessorHelper implementation for a class set method
+ * returning void.
+ *
+ * \tparam V  The specific AttributeValue type to use to represent
+ *            the Attribute.
+ * \tparam T  The class holding the set method.
+ * \tparam U  The argument type of the set method.
+ * \param  setter  The address of the class set method, returning void.
+ * \returns The AttributeAccessor.
+ */
 template <typename V, typename T, typename U>
 inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperOne (void (T::*setter)(U))
 {
+  /* AttributeAccessor implemenation with a class set method returning void. */
   class MemberMethod : public AccessorHelper<T,V>
   {
 public:
+    /*
+     * Construct from a class set method.
+     * \param setter The class set method pointer.
+     */
     MemberMethod (void (T::*setter)(U))
       : AccessorHelper<T,V> (),
         m_setter (setter)
@@ -198,20 +392,47 @@
     virtual bool HasSetter (void) const {
       return true;
     }
-    void (T::*m_setter)(U);
+    void (T::*m_setter)(U);  // The class set method pointer, returning void.
   };
   return Ptr<const AttributeAccessor> (new MemberMethod (setter), false);
 }
 
+  
+/**
+ * \ingroup attributeimpl
+ *
+ * MakeAccessorHelper implementation with a class get functor method
+ * and a class set method returning \p void.
+ *
+ * The two versions of this function differ only in argument order.
+ *
+ * \tparam W  The specific AttributeValue type to use to represent
+ *            the Attribute.
+ * \tparam T  The class holding the functor methods.
+ * \tparam U  The argument type of the set method.
+ * \tparam V  The return type of the get functor method.
+ * \param  setter  The address of the class set method, returning void.
+ * \param  getter  The address of the class get functor method.
+ * \returns The AttributeAccessor.
+ */
 template <typename W, typename T, typename U, typename V>
 inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperTwo (void (T::*setter)(U),
                          V (T::*getter)(void) const)
 {
+  /*
+   * AttributeAccessor implemenation with class get functor and set method,
+   * returning void.
+   */
   class MemberMethod : public AccessorHelper<T,W>
   {
 public:
+    /*
+     * Construct from class get functor and set methods.
+     * \param setter The class set method pointer, returning void.
+     * \param getter The class get functor method pointer.
+     */
     MemberMethod (void (T::*setter)(U),
                   V (T::*getter)(void) const)
       : AccessorHelper<T,W> (),
@@ -239,12 +460,17 @@
     virtual bool HasSetter (void) const {
       return true;
     }
-    void (T::*m_setter)(U);
-    V (T::*m_getter)(void) const;
+    void (T::*m_setter)(U);        // The class set method pointer, returning void.
+    V (T::*m_getter)(void) const;  // The class get functor method pointer.
   };
   return Ptr<const AttributeAccessor> (new MemberMethod (setter, getter), false);
 }
 
+  
+/**
+ * \ingroup attributeimpl
+ * \copydoc DoMakeAccessorHelperTwo(void(T::*)(U),V(T::*)(void)const)
+ */
 template <typename W, typename T, typename U, typename V>
 inline
 Ptr<const AttributeAccessor>
@@ -254,15 +480,42 @@
   return DoMakeAccessorHelperTwo<W> (setter, getter);
 }
 
+  
+/**
+ * \ingroup attributeimpl
+ *
+ * MakeAccessorHelper implementation with a class get functor method
+ * and a class set method returning \p bool.
+ *
+ * The two versions of this function differ only in argument order.
+ *
+ * \tparam W  The specific AttributeValue type to use to represent
+ *            the Attribute.
+ * \tparam T  The class holding the functor methods.
+ * \tparam U  The argument type of the set method.
+ * \tparam V  The return type of the get functor method.
+ * \param  setter  The address of the class set method, returning bool.
+ * \param  getter  The address of the class get functor method.
+ * \returns The AttributeAccessor.
+ */
 template <typename W, typename T, typename U, typename V>
 inline
 Ptr<const AttributeAccessor>
 DoMakeAccessorHelperTwo (bool (T::*setter)(U),
                          V (T::*getter)(void) const)
 {
+  /*
+   * AttributeAccessor implemenation with class get functor and
+   * set method, returning bool.
+   */
   class MemberMethod : public AccessorHelper<T,W>
   {
 public:
+    /*
+     * Construct from class get functor and set method, returning bool.
+     * \param setter The class set method pointer, returning bool.
+     * \param getter The class get functor method pointer.
+     */
     MemberMethod (bool (T::*setter)(U),
                   V (T::*getter)(void) const)
       : AccessorHelper<T,W> (),
@@ -290,21 +543,27 @@
     virtual bool HasSetter (void) const {
       return true;
     }
-    bool (T::*m_setter)(U);
-    V (T::*m_getter)(void) const;
+    bool (T::*m_setter)(U);        // The class set method pointer, returning bool.
+    V (T::*m_getter)(void) const;  // The class get functor method pointer.
   };
   return Ptr<const AttributeAccessor> (new MemberMethod (setter, getter), false);
 }
 
+  
+/**
+ * \ingroup attributeimpl
+ * \copydoc ns3::DoMakeAccessorHelperTwo(bool(T::*)(U),V(T::*)(void)const)
+ */
 template <typename W, typename T, typename U, typename V>
 inline
 Ptr<const AttributeAccessor>
-DoMakeAccessorHelperTwo (bool (T::*getter)(void) const,
-                         void (T::*setter)(U))
+DoMakeAccessorHelperTwo (V (T::*getter)(void) const,
+                         bool (T::*setter)(U))
 {
   return DoMakeAccessorHelperTwo<W> (setter, getter);
 }
 
+
 template <typename V, typename T1>
 inline
 Ptr<const AttributeAccessor>
diff -Naur ns-3.21/src/core/model/attribute.cc ns-3.22/src/core/model/attribute.cc
--- ns-3.21/src/core/model/attribute.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/attribute.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,17 @@
 #include "string.h"
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("AttributeValue");
+/**
+ * \file
+ * \ingroup attribute
+ * ns3::AttributeValue, ns3::AttributeAccessor and
+ * ns3::AttributeChecker implementations.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AttributeValue");
+
 AttributeValue::AttributeValue ()
 {
 }
diff -Naur ns-3.21/src/core/model/attribute-construction-list.cc ns-3.22/src/core/model/attribute-construction-list.cc
--- ns-3.21/src/core/model/attribute-construction-list.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/attribute-construction-list.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,6 +20,12 @@
 #include "attribute-construction-list.h"
 #include "log.h"
 
+/**
+ * \file
+ * \ingroup object
+ * ns3::AttributeConstructionList implementation.
+ */
+
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE("AttributeConstructionList");
diff -Naur ns-3.21/src/core/model/attribute-construction-list.h ns-3.22/src/core/model/attribute-construction-list.h
--- ns-3.21/src/core/model/attribute-construction-list.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/attribute-construction-list.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,25 +23,65 @@
 #include "attribute.h"
 #include <list>
 
+/**
+ * \file
+ * \ingroup object
+ * ns3::AttributeConstructionList declaration.
+ */
+
 namespace ns3 {
 
+/**
+ * \ingroup object
+ * List of Attribute name, value and checker triples used
+ * to construct Objects.
+ */
 class AttributeConstructionList
 {
 public:
+  /** A single Attribute triple */
   struct Item 
   {
+    /** Checker used to validate serialized values. */
     Ptr<const AttributeChecker> checker;
+    /** The value of the Attribute. */
     Ptr<AttributeValue> value;
+    /** The name of the Attribute. */
     std::string name;
   };
+  /** Iterator type. */
   typedef std::list<struct Item>::const_iterator CIterator;
 
+  /** Constructor */
   AttributeConstructionList ();
-  void Add (std::string name, Ptr<const AttributeChecker> checker, Ptr<AttributeValue> value);
+
+  /**
+   * Add an Attribute to the list.
+   *
+   * \param [in] name The Attribute name.
+   * \param [in] checker The checker to use for this Attribute.
+   * \param [in] value The AttributeValue to add.
+   */
+  void Add (std::string name, Ptr<const AttributeChecker> checker,
+            Ptr<AttributeValue> value);
+
+  /**
+   * Find an Attribute in the list from its AttributeChecker.
+   *
+   * \param [in] checker The AttributeChecker to find.  Typically this is the
+   *             AttributeChecker from TypeId::AttributeInformation.
+   * \returns The AttributeValue.
+   */
   Ptr<AttributeValue> Find (Ptr<const AttributeChecker> checker) const;
+
+  /** \returns The first item in the list */
   CIterator Begin (void) const;
+  /** \returns The end of the list (iterator to one past the last). */
   CIterator End (void) const;
+  
 private:
+
+  /** The list of Items */
   std::list<struct Item> m_list;
 };
 
diff -Naur ns-3.21/src/core/model/attribute.h ns-3.22/src/core/model/attribute.h
--- ns-3.21/src/core/model/attribute.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/attribute.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,6 +25,13 @@
 #include "ptr.h"
 #include "simple-ref-count.h"
 
+/**
+ * \file
+ * \ingroup attribute
+ * ns3::AttributeValue, ns3::AttributeAccessor and
+ * ns3::AttributeChecker declarations.
+ */
+
 namespace ns3 {
 
 class AttributeAccessor;
@@ -39,8 +46,13 @@
  *
  * 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.
+ * component models.
+ *
+ * Attributes also enable the tracing and statistics gathering
+ * in the simulator.
+ *
+ * See \ref attributehelper for macros to ease the declaration
+ * and definition of Attributes.
  */
 
 /**
@@ -215,17 +227,35 @@
 };
 
 /**
- * \brief A class for an empty attribute value
+ * \brief A class for an empty attribute value.
  *
  * \ingroup attribute
  */
 class EmptyAttributeValue : public AttributeValue
 {
 public:
+  /** Default constructor. */
   EmptyAttributeValue ();
 private:
+  /**
+   * \returns a deep copy of this class, wrapped into an Attribute object.
+   */
   virtual Ptr<AttributeValue> Copy (void) const;
+  /**
+   * \param checker the checker associated to the attribute
+   * \returns a string representation of this value.
+   *
+   * In the EmptyAttributeValue case, the string returned will be simply ""
+   */
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
+  /**
+   * \param value a string representation of the value
+   * \param checker a pointer to the checker associated to the attribute.
+   * \returns true if the input string was correctly-formatted and could be
+   *          successfully deserialized, false otherwise.
+   *
+   * In the trivial case of EmptyAttributeValue, this should always return true
+   */
   virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
 };
 
diff -Naur ns-3.21/src/core/model/attribute-helper.h ns-3.22/src/core/model/attribute-helper.h
--- ns-3.21/src/core/model/attribute-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/attribute-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,6 +25,12 @@
 #include <sstream>
 #include "fatal-error.h"
 
+/**
+ * \file
+ * \ingroup attributehelper
+ * Declaration of Attribute helper macros.
+ */
+
 namespace ns3 {
 
 /**
@@ -44,21 +50,54 @@
  *
  * The simple macros are implemented in terms of the complex
  * macros and should generally be preferred over the complex macros.
+ *
+ * \note
+ * Because these macros generate class and function definitions, it's
+ * difficult to document the results directly.  Instead, we use a
+ * set of functions in print-introspected-doxygen.cc to generate
+ * most of the APi documentation.  When using these macros,
+ * please add the required function calls to print-introspected-doxygen.cc
+ * so your new API is documented.
  */
-  
+
 /**
  * \ingroup attributehelper
+ * \defgroup attributeimpl Attribute Implementation
+ *
+ * These are the internal implementation functions for the Attribute
+ * system.
+ *
+ * Module code shouldn't need to call these directly.  Instead,
+ * see \ref attributehelper.
+ *
+ * There are three versions of DoMakeAccessorHelperOne:
+ *  - With a member variable: DoMakeAccessorHelperOne(U T::*)
+ *  - With a class get functor: DoMakeAccessorHelperOne(U(T::*)(void) const)
+ *  - With a class set method:  DoMakeAccessorHelperOne(void(T::*)(U))
+ *
+ * There are two pairs of DoMakeAccessorHelperTwo (four total):
+ *  - Taking two arguments, a set method and get functor, in either order,
+ *  - With set methods returning \c void or \c bool.
+ */
+
+/**
+ * \ingroup attributeimpl
  *
  * A simple string-based attribute checker
  *
- * \param name value type of the attribute
- * \param underlying underlying type name
- * \return Ptr to AttributeChecker
+ * \tparam T    The specific AttributeValue type used to represent
+ *              the Attribute.
+ * \tparam BASE The AttributeChecker type corresponding to \p T.
+ * \param name  The name of the AttributeValue type, essentially the
+ *              string form of \p T.
+ * \param underlying Underlying type name.
+ * \return Ptr to AttributeChecker.
  */
 template <typename T, typename BASE>
 Ptr<AttributeChecker>
 MakeSimpleAttributeChecker (std::string name, std::string underlying)
 {
+  /* String-based AttributeChecker implementation. */
   struct SimpleAttributeChecker : public BASE
   {
     virtual bool Check (const AttributeValue &value) const {
@@ -86,8 +125,8 @@
       *dst = *src;
       return true;
     }
-    std::string m_type;
-    std::string m_underlying;
+    std::string m_type;        // The name of the AttributeValue type.
+    std::string m_underlying;  // The underlying attribute type name.
   } *checker = new SimpleAttributeChecker ();
   checker->m_type = name;
   checker->m_underlying = underlying;
@@ -100,7 +139,7 @@
  * \ingroup attributehelper
  *
  * Define the attribute accessor functions \c MakeTypeAccessor
- * for class \pname{type}.
+ * for class \p type.
  *
  * \param type the name of the class
  *
@@ -125,8 +164,8 @@
 /**
  * \ingroup attributehelper
  *
- * Declare the attribute value class \pname{name}Value
- * for underlying class \pname{type}.
+ * Declare the attribute value class \p \<name>Value
+ * for underlying class \p type.
  *
  * \param type The underlying type name
  * \param name The token to use in defining the accessor name.
@@ -165,8 +204,8 @@
 /**
  * \ingroup attributehelper
  *
- * Declare the attribute value class \pname{Name}Value
- * for the class \pname{Name}
+ * Declare the attribute value class \p \<Name>Value
+ * for the class \p Name
  *
  * \param Name the name of the class.
  *
@@ -180,7 +219,7 @@
 /**
  * \ingroup attributehelper
  *
- * Define the conversion operators class \pname{type} and
+ * Define the conversion operators class \p type and
  * Attribute instances.
  *
  * \param type the name of the class
@@ -197,15 +236,15 @@
 /**
  * \ingroup attributehelper
  *
- * Declare the AttributeChecker class \pname{type}Checker
- * and the \c MakeTypeChecker function for class \pname{type}.
+ * Declare the AttributeChecker class \p \<type>Checker
+ * and the \c MakeTypeChecker function for class \p type.
  *
  * \param type the name of the class
  *
- * This macro declares the \pname{type}Checker class and the associated
+ * This macro declares the \p \<type>Checker class and the associated
  * \c MakeTypeChecker function.
  *
- * (Note that the \pname{type}Checker class needs no implementation
+ * (Note that the \p \<type>Checker class needs no implementation
  * since it just inherits all its implementation from AttributeChecker.)
  *
  * Typically invoked in the class header file.
@@ -219,15 +258,15 @@
  * \ingroup attributehelper
  *
  * Define the class methods belonging to
- * the attribute value class \pname{name}Value 
- * of the underlying class \pname{type}.
+ * the attribute value class \p \<name>Value 
+ * of the underlying class \p type.
  *
  * \param type The underlying type name
  * \param name The token to use in defining the accessor name.
  *
- * This macro implements the \pname{type}Value class methods
- * (including the \pname{type}Value::SerializeToString
- * and \pname{type}Value::DeserializeFromString methods).
+ * This macro implements the \p \<type>Value class methods
+ * (including the \p \<type>Value::SerializeToString
+ * and \p \<type>Value::DeserializeFromString methods).
  *
  * Typically invoked in the source file.
  */
@@ -264,13 +303,13 @@
  * \ingroup attributehelper
  *
  * Define the class methods belonging to
- * attribute value class \pname{type}Value for class \pname{type}.
+ * attribute value class \p \<type>Value for class \p type.
  *
  * \param type the name of the class.
  *
- * This macro implements the \pname{type}Value class methods
- * (including the \pname{type}Value::SerializeToString
- * and \pname{type}Value::DeserializeFromString methods).
+ * This macro implements the \p \<type>Value class methods
+ * (including the \p \<type>Value::SerializeToString
+ * and \p \<type>Value::DeserializeFromString methods).
  *
  * Typically invoked in the source file.
  */
@@ -281,7 +320,7 @@
 /**
  * \ingroup attributehelper
  *
- * Define the \c MakeTypeChecker function for class \pname{type}.
+ * Define the \c MakeTypeChecker function for class \p type.
  *
  * \param type the name of the class
  *
@@ -298,13 +337,13 @@
 /**
  * \ingroup attributehelper
  *
- * Define the \c MakeTypeChecker function for class \pname{type}.
+ * Define the \c MakeTypeChecker function for class \p type.
  *
  * \param type the name of the class.
  * \param name the string name of the underlying type.
  *
  * This macro implements the \c MakeTypeChecker function
- * for class \pname{type}.
+ * for class \p type.
  *
  * Typically invoked in the source file..
  */
@@ -317,20 +356,20 @@
 /**
  * \ingroup attributehelper
  *
- * Declare the attribute value, accessor and checkers for class \pname{type}
+ * Declare the attribute value, accessor and checkers for class \p type
  *
  * \param type the name of the class
  *
  * This macro declares:
  *
- *   - The attribute value class \pname{type}Value,
+ *   - The attribute value class \p \<type>Value,
  *
  *   - The attribute accessor functions \c MakeTypeAccessor,
  *
- *   - The AttributeChecker class \pname{type}Checker
+ *   - The AttributeChecker class \p \<type>Checker
  *     and the \c MakeTypeChecker function,
  *
- * for class \pname{type}.
+ * for class \p type.
  *
  * This macro should be invoked outside of the class
  * declaration in its public header.
@@ -343,17 +382,17 @@
 /**
  * \ingroup attributehelper
  *
- * Define the attribute value, accessor and checkers for class \pname{type}
+ * Define the attribute value, accessor and checkers for class \p type
  *
  * \param type the name of the class
  *
  * This macro implements
  *
- *   - The \pname{type}Value class methods,
+ *   - The \p \<type>Value class methods,
  *
  *   - The \c MakeTypeChecker function,
  *
- * for class \pname{type}.
+ * for class \p type.
  *
  * This macro should be invoked from the class implementation file.
  */
diff -Naur ns-3.21/src/core/model/boolean.cc ns-3.22/src/core/model/boolean.cc
--- ns-3.21/src/core/model/boolean.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/boolean.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,16 @@
 #include "fatal-error.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Boolean");
+/**
+ * \file
+ * \ingroup attribute_Boolean
+ * Boolean attribute value implementaations.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Boolean");
+
 BooleanValue::BooleanValue ()
   : m_value (false)
 {
diff -Naur ns-3.21/src/core/model/boolean.h ns-3.22/src/core/model/boolean.h
--- ns-3.21/src/core/model/boolean.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/boolean.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,28 +23,33 @@
 #include "attribute.h"
 #include "attribute-helper.h"
 
-namespace ns3 {
-
 /**
- * \ingroup attribute
- *
- * \brief Hold a bool native type
- *
- * \anchor bool
- *
- * This class can be used to hold bool variables
- * which must go through the Attribute system.
+ * \file
+ * \ingroup attribute_Boolean
+ * Boolean attribute value declarations.
  */
+
+namespace ns3 {
+
 class BooleanValue : public AttributeValue
 {
 public:
   BooleanValue ();
+  /**
+   * Construct from an explicit value.
+   *
+   * \param [in] value The boolean value to begin with.
+   */
   BooleanValue (bool value);
   void Set (bool value);
   bool Get (void) const;
   template <typename T>
   bool GetAccessor (T &v) const;
 
+  /**
+   * Functor returning the value.
+   * \returns The value.
+   */
   operator bool () const;
 
   virtual Ptr<AttributeValue> Copy (void) const;
@@ -61,6 +66,15 @@
   return true;
 }
 
+/**
+ * Output streamer.
+ *
+ * The value is printed as "true" or "false".
+ *
+ * \param [in,out] os The stream.
+ * \param [in] value The BooleanValue to print.
+ * \returns The stream.
+ */
 std::ostream & operator << (std::ostream &os, const BooleanValue &value);
 
 ATTRIBUTE_CHECKER_DEFINE (Boolean);
diff -Naur ns-3.21/src/core/model/breakpoint.cc ns-3.22/src/core/model/breakpoint.cc
--- ns-3.21/src/core/model/breakpoint.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/breakpoint.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 # include <signal.h>
 #endif
 
-NS_LOG_COMPONENT_DEFINE ("Breakpoint");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Breakpoint");
+
 #if defined (HAVE_SIGNAL_H) && defined (SIGTRAP)
 
 void
diff -Naur ns-3.21/src/core/model/callback.cc ns-3.22/src/core/model/callback.cc
--- ns-3.21/src/core/model/callback.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/callback.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,10 +1,36 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2005,2006 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
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
 #include "callback.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Callback");
+/**
+ * \file
+ * \ingroup callback
+ * ns3::CallbackValue implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Callback");
+
 CallbackValue::CallbackValue ()
   : m_value ()
 {
@@ -46,7 +72,6 @@
   return false;
 }
 
-/** Attribute checker */
 ATTRIBUTE_CHECKER_IMPLEMENT (Callback);
 
 } // namespace ns3
diff -Naur ns-3.21/src/core/model/callback.h ns-3.22/src/core/model/callback.h
--- ns-3.21/src/core/model/callback.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/callback.h	2015-02-05 15:46:22.000000000 -0800
@@ -102,11 +102,16 @@
  *
  * Trait class to convert a pointer into a reference,
  * used by MemPtrCallBackImpl
- * @{
  */
 template <typename T>
 struct CallbackTraits;
 
+/**
+ * \ingroup makecallbackmemptr
+ *
+ * Trait class to convert a pointer into a reference,
+ * used by MemPtrCallBackImpl
+ */
 template <typename T>
 struct CallbackTraits<T *>
 {
@@ -119,7 +124,6 @@
     return *p;
   }
 };
-/**@}*/
 
 /**
  * \ingroup callbackimpl
@@ -962,6 +966,8 @@
  * Of course, it also does not use copy-destruction semantics
  * and relies on a reference list rather than autoPtr to hold
  * the pointer.
+ *
+ * \see attribute_Callback
  */
 template<typename R, 
          typename T1 = empty, typename T2 = empty, 
@@ -1240,9 +1246,10 @@
   void DoAssign (Ptr<const CallbackImplBase> other) {
     if (!DoCheckType (other))
       {
+        Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > expected;
         NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\" if needed)" << std::endl <<
                         "got=" << Demangle ( typeid (*other).name () ) << std::endl <<
-                        "expected=" << Demangle ( typeid (CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *).name () ));
+                        "expected=" << Demangle ( typeid (*expected).name () ));
       }
     m_impl = const_cast<CallbackImplBase *> (PeekPointer (other));
   }
@@ -1671,10 +1678,6 @@
 
 namespace ns3 {
 
-/**
- * \ingroup callback
- * AttributeValue form of a Callback
- */
 class CallbackValue : public AttributeValue
 {
 public:
@@ -1687,7 +1690,7 @@
   CallbackValue (const CallbackBase &base);
   /** Destructor */
   virtual ~CallbackValue ();
-  /** \param base the Callbackbase to use */
+  /** \param base The CallbackBase to use */
   void Set (CallbackBase base);
   /**
    * Give value my callback, if type compatible
diff -Naur ns-3.21/src/core/model/command-line.cc ns-3.22/src/core/model/command-line.cc
--- ns-3.21/src/core/model/command-line.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/command-line.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,16 @@
 #include "string.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("CommandLine");
+/**
+ * \file
+ * \ingroup commandline
+ * CommandLine class implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CommandLine");
+
 CommandLine::CommandLine ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/core/model/command-line.h ns-3.22/src/core/model/command-line.h
--- ns-3.21/src/core/model/command-line.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/command-line.h	2015-02-05 15:46:22.000000000 -0800
@@ -26,6 +26,12 @@
 
 #include "callback.h"
 
+/**
+ * \file
+ * \ingroup commandline
+ * CommandLine class declaration.
+ */
+
 namespace ns3 {
 
 /**
@@ -100,8 +106,7 @@
  * to make it easy to set the \c Application::StartTime using
  * the argument \c --start, and have its help string show as part
  * of the help message.  This can be done using the
- * \link AddValue(const std::string, const std::string)
- * AddValue (name, attributePath) \endlink
+ * \link AddValue(const std::string&, const std::string&) AddValue (name, attributePath) \endlink
  * method.
  *
  * CommandLine can also set the value of every GlobalValue
@@ -295,6 +300,8 @@
    *
    *       std::cerr << cmd;
    * @endcode
+   *
+   * \param [in,out] os The output stream to print on.
    */
   void PrintHelp (std::ostream &os) const;
 
@@ -400,9 +407,17 @@
    * \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. */
+  /**
+   * Handler for \c \-\-PrintTypeIds:  print all TypeId names.
+   *
+   * \param os the output stream.
+   */
   void PrintTypeIds (std::ostream &os) const;
-  /** Handler for \c \-\-PrintGroups:  print all TypeId group names */
+  /**
+   * Handler for \c \-\-PrintGroups:  print all TypeId group names
+   *
+   * \param os the output stream.
+   */
   void PrintGroups (std::ostream &os) const;
   /**
    * Copy constructor
@@ -421,7 +436,7 @@
 
 
 /** \ingroup commandline
- *  \defgroup commandlinehelper Helpers to specialize on bool
+ *  \defgroup commandlinehelper Helpers to Specialize on bool
  */
 /**
  * \ingroup commandlinehelper
@@ -431,7 +446,7 @@
 
   /**
    * \ingroup commandlinehelper
-   * \brief Helper to specialize UserItem::Parse on bool
+   * \brief Helpers to specialize CommandLine::UserItem::Parse() on bool
    *
    * \param value the argument name
    * \param val the argument location
@@ -446,7 +461,7 @@
 
   /**
    * \ingroup commandlinehelper
-   * \brief Helper to specialize UserItem::GetDefault on bool
+   * \brief Helper to specialize CommandLine::UserItem::GetDefault() on bool
    *
    * \param val the argument value
    * \return the string representation of value
@@ -464,6 +479,11 @@
   
 } // namespace ns3
 
+
+/********************************************************************
+ *  Implementation of the templates declared above.
+ ********************************************************************/
+
 namespace ns3 {
 
 template <typename T>
@@ -540,6 +560,10 @@
  *    
  *    std::cerr << cmd;
  * \endcode
+ *
+ * \param [in,out] os The stream to print on.
+ * \param [in] cmd The CommandLine describing the program.
+ * \returns The stream.
  */
 std::ostream & operator << (std::ostream & os, const CommandLine & cmd);
 
diff -Naur ns-3.21/src/core/model/config.cc ns-3.22/src/core/model/config.cc
--- ns-3.21/src/core/model/config.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/config.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("Config");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Config");
+
 namespace Config {
 
 MatchContainer::MatchContainer ()
diff -Naur ns-3.21/src/core/model/default-deleter.h ns-3.22/src/core/model/default-deleter.h
--- ns-3.21/src/core/model/default-deleter.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/default-deleter.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,19 +1,54 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 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
+ *
+ */
+
 #ifndef DEFAULT_DELETER_H
 #define DEFAULT_DELETER_H
 
+/**
+ * \file
+ * \ingroup ptr
+ * Default deletion implementation for reference-counted smart pointers.
+ */
+
 namespace ns3 {
 
 /**
- * \brief a template used to delete objects
- *        by the *RefCount<> templates when the
+ * \ingroup ptr
+ * \brief A template used to delete objects
+ *        by the ns3::SimpleRefCount templates when the
  *        last reference to an object they manage
  *        disappears.
  *
+ * \tparam T The object type being deleted.
  * \sa ns3::SimpleRefCount
  */
 template <typename T>
 struct DefaultDeleter
 {
+  /**
+   * The default deleter implementation, which just does a normal
+   * \code
+   *   delete object;
+   * \endcode
+   * \tparam T The object type being deleted.
+   * \param [in] object The object to delete.
+   */
   inline static void Delete (T *object) {
     delete object;
   }
diff -Naur ns-3.21/src/core/model/default-simulator-impl.cc ns-3.22/src/core/model/default-simulator-impl.cc
--- ns-3.21/src/core/model/default-simulator-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/default-simulator-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,14 +30,14 @@
 
 #include <cmath>
 
+
+namespace ns3 {
+
 // Note:  Logging in this file is largely avoided due to the
 // number of calls that are made to these functions and the possibility
 // of causing recursions leading to stack overflow
-
 NS_LOG_COMPONENT_DEFINE ("DefaultSimulatorImpl");
 
-namespace ns3 {
-
 NS_OBJECT_ENSURE_REGISTERED (DefaultSimulatorImpl);
 
 TypeId
@@ -357,30 +357,30 @@
 }
 
 bool
-DefaultSimulatorImpl::IsExpired (const EventId &ev) const
+DefaultSimulatorImpl::IsExpired (const EventId &id) const
 {
-  if (ev.GetUid () == 2)
+  if (id.GetUid () == 2)
     {
-      if (ev.PeekEventImpl () == 0 ||
-          ev.PeekEventImpl ()->IsCancelled ())
+      if (id.PeekEventImpl () == 0 ||
+          id.PeekEventImpl ()->IsCancelled ())
         {
           return true;
         }
       // destroy events.
       for (DestroyEvents::const_iterator i = m_destroyEvents.begin (); i != m_destroyEvents.end (); i++)
         {
-          if (*i == ev)
+          if (*i == id)
             {
               return false;
             }
         }
       return true;
     }
-  if (ev.PeekEventImpl () == 0 ||
-      ev.GetTs () < m_currentTs ||
-      (ev.GetTs () == m_currentTs &&
-       ev.GetUid () <= m_currentUid) ||
-      ev.PeekEventImpl ()->IsCancelled ()) 
+  if (id.PeekEventImpl () == 0 ||
+      id.GetTs () < m_currentTs ||
+      (id.GetTs () == m_currentTs &&
+       id.GetUid () <= m_currentUid) ||
+      id.PeekEventImpl ()->IsCancelled ()) 
     {
       return true;
     }
diff -Naur ns-3.21/src/core/model/default-simulator-impl.h ns-3.22/src/core/model/default-simulator-impl.h
--- ns-3.21/src/core/model/default-simulator-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/default-simulator-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,8 @@
 
 /**
  * \ingroup simulator
+ *
+ * The default single process simulator implementation.
  */
 class DefaultSimulatorImpl : public SimulatorImpl
 {
@@ -52,9 +54,9 @@
   virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
-  virtual void Remove (const EventId &ev);
-  virtual void Cancel (const EventId &ev);
-  virtual bool IsExpired (const EventId &ev) const;
+  virtual void Remove (const EventId &id);
+  virtual void Cancel (const EventId &id);
+  virtual bool IsExpired (const EventId &id) const;
   virtual void Run (void);
   virtual Time Now (void) const;
   virtual Time GetDelayLeft (const EventId &id) const;
diff -Naur ns-3.21/src/core/model/double.cc ns-3.22/src/core/model/double.cc
--- ns-3.21/src/core/model/double.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/double.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,14 +22,30 @@
 #include "log.h"
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("Double");
+/**
+ * \file
+ * \ingroup attribute_Double
+ * Double attribute value implementations.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Double");
+
 ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME (double, Double);
 
+/** Namespace for implementation details. */
 namespace internal {
 
+/**
+ * \ingroup attribute_Double
+ * Make a Double attribute checker with embedded numeric type name.
+ *
+ * \param min The minimum allowed value.
+ * \param max The maximum allowed value.
+ * \param name The original type name ("float", "double").
+ * \returns The AttributeChecker.
+ */
 Ptr<const AttributeChecker> MakeDoubleChecker (double min, double max, std::string name)
 {
   NS_LOG_FUNCTION (min << max << name);
diff -Naur ns-3.21/src/core/model/double.h ns-3.22/src/core/model/double.h
--- ns-3.21/src/core/model/double.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/double.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,34 +25,58 @@
 #include <stdint.h>
 #include <limits>
 
+/**
+ * \file
+ * \ingroup attribute_Double
+ * Double attribute value declarations and template implementations.
+ */
+
 namespace ns3 {
 
+//  Additional docs for class DoubleValue:
 /**
- * \ingroup attribute 
- *
- * \class ns3::DoubleValue
- * \brief Hold a floating point type
- *
- * \anchor double
  * This class can be used to hold variables of floating point type
  * such as 'double' or 'float'. The internal format is 'double'.
  */
-
 ATTRIBUTE_VALUE_DEFINE_WITH_NAME (double, Double);
 ATTRIBUTE_ACCESSOR_DEFINE (Double);
 
 template <typename T>
 Ptr<const AttributeChecker> MakeDoubleChecker (void);
 
+/**
+ * Make a checker with a minimum value.
+ *
+ * The minimum value is included in the allowed range.
+ *
+ * \param [in] min The minimum value.
+ * \returns The AttributeChecker.
+ * \see AttributeChecker
+ */
 template <typename T>
 Ptr<const AttributeChecker> MakeDoubleChecker (double min);
 
+/**
+ * Make a checker with a minimum and a maximum value.
+ *
+ * The minimum and maximum values are included in the allowed range.
+ *
+ * \param [in] min The minimum value.
+ * \param [in] max The maximum value.
+ * \returns The AttributeChecker.
+ * \see AttributeChecker
+ */
 template <typename T>
 Ptr<const AttributeChecker> MakeDoubleChecker (double min, double max);
 
 
 } // namespace ns3
 
+
+/***************************************************************
+ *  Implementation of the templates declared above.
+ ***************************************************************/
+
 #include "type-name.h"
 
 namespace ns3 {
diff -Naur ns-3.21/src/core/model/empty.h ns-3.22/src/core/model/empty.h
--- ns-3.21/src/core/model/empty.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/empty.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- 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
+ *
+ */
+
 #ifndef EMPTY_H
 #define EMPTY_H
 
diff -Naur ns-3.21/src/core/model/enum.cc ns-3.22/src/core/model/enum.cc
--- ns-3.21/src/core/model/enum.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/enum.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,31 +22,37 @@
 #include "log.h"
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("Enum");
+/**
+ * \file
+ * \ingroup attribute_Enum
+ * Enum attribute value implementations.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Enum");
+
 EnumValue::EnumValue ()
-  : m_v ()
+  : m_value ()
 {
   NS_LOG_FUNCTION (this);
 }
-EnumValue::EnumValue (int v)
-  : m_v (v)
+EnumValue::EnumValue (int value)
+  : m_value (value)
 {
-  NS_LOG_FUNCTION (this << v);
+  NS_LOG_FUNCTION (this << value);
 }
 void
-EnumValue::Set (int v)
+EnumValue::Set (int value)
 {
-  NS_LOG_FUNCTION (this << v);
-  m_v = v;
+  NS_LOG_FUNCTION (this << value);
+  m_value = value;
 }
 int
 EnumValue::Get (void) const
 {
   NS_LOG_FUNCTION (this);
-  return m_v;
+  return m_value;
 }
 Ptr<AttributeValue>
 EnumValue::Copy (void) const
@@ -62,7 +68,7 @@
   NS_ASSERT (p != 0);
   for (EnumChecker::ValueSet::const_iterator i = p->m_valueSet.begin (); i != p->m_valueSet.end (); i++)
     {
-      if (i->first == m_v)
+      if (i->first == m_value)
         {
           return i->second;
         }
@@ -82,7 +88,7 @@
     {
       if (i->second == value)
         {
-          m_v = i->first;
+          m_value = i->first;
           return true;
         }
     }
@@ -95,16 +101,16 @@
 }
 
 void
-EnumChecker::AddDefault (int v, std::string name)
+EnumChecker::AddDefault (int value, std::string name)
 {
-  NS_LOG_FUNCTION (this << v << name);
-  m_valueSet.push_front (std::make_pair (v, name));
+  NS_LOG_FUNCTION (this << value << name);
+  m_valueSet.push_front (std::make_pair (value, name));
 }
 void
-EnumChecker::Add (int v, std::string name)
+EnumChecker::Add (int value, std::string name)
 {
-  NS_LOG_FUNCTION (this << v << name);
-  m_valueSet.push_back (std::make_pair (v, name));
+  NS_LOG_FUNCTION (this << value << name);
+  m_valueSet.push_back (std::make_pair (value, name));
 }
 bool
 EnumChecker::Check (const AttributeValue &value) const
diff -Naur ns-3.21/src/core/model/enum.h ns-3.22/src/core/model/enum.h
--- ns-3.21/src/core/model/enum.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/enum.h	2015-02-05 15:46:22.000000000 -0800
@@ -24,38 +24,61 @@
 #include "attribute-accessor-helper.h"
 #include <list>
 
+/**
+ * \file
+ * \ingroup attribute_Enum
+ * Enum attribute value declarations.
+ */
+
 namespace ns3 {
 
+//  Additional docs for class EnumValue:
 /**
- * \ingroup attribute
- *
- * \brief hold variables of type 'enum'
+ * Hold variables of type \c enum
  *
  * This class can be used to hold variables of any kind
  * of enum.
+ *
+ * This is often used with ObjectFactory and Config to bind
+ * the value of a particular enum to an Attribute or Config name.
+ * For example,
+ * \code
+ *   Ptr<RateErrorModel> model = CreateObjectWithAttributes<RateErrorModel> (
+ *     "ErrorRate", DoubleValue (0.05),
+ *     "ErrorUnit", EnumValue (RateErrorModel::ERROR_UNIT_PACKET));
+ *
+ *   Config::SetDefault ("ns3::RipNg::SplitHorizon",
+ *                       EnumValue (RipNg::NO_SPLIT_HORIZON));
+ * \endcode
  */
 class EnumValue : public AttributeValue
 {
 public:
   EnumValue ();
-  EnumValue (int v);
-  void Set (int v);
+  /**
+   * Construct from an explicit value.
+   *
+   * \param [in] value The value to begin with.
+   */
+  EnumValue (int value);
+  void Set (int  value);
   int Get (void) const;
   template <typename T>
-  bool GetAccessor (T &v) const;
+  bool GetAccessor (T & value) const;
 
   virtual Ptr<AttributeValue> Copy (void) const;
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
   virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
 
 private:
-  int m_v;
+  int m_value;  //!< The stored integer value.
 };
 
 template <typename T>
-bool EnumValue::GetAccessor (T &v) const
+bool
+EnumValue::GetAccessor (T &value) const
 {
-  v = T (m_v);
+  value = T (m_value);
   return true;
 }
 
@@ -64,8 +87,18 @@
 public:
   EnumChecker ();
 
-  void AddDefault (int v, std::string name);
-  void Add (int v, std::string name);
+  /**
+   * Add a default value.
+   * \param [in] value The value.
+   * \param [in] name Then enum symbol name.
+   */
+  void AddDefault (int value, std::string name);
+  /**
+   * Add a new value.
+   * \param [in] value The value.
+   * \param [in] name Then enum symbol name.
+   */
+  void Add (int value, std::string name);
 
   virtual bool Check (const AttributeValue &value) const;
   virtual std::string GetValueTypeName (void) const;
@@ -76,7 +109,9 @@
 
 private:
   friend class EnumValue;
+  /** Type of container for storing Enum values and symbol names. */
   typedef std::list<std::pair<int,std::string> > ValueSet;
+  /** The stored Enum values and symbol names. */
   ValueSet m_valueSet;
 };
 
@@ -86,6 +121,62 @@
 template <typename T1, typename T2>
 Ptr<const AttributeAccessor> MakeEnumAccessor (T1 a1, T2 a2);
 
+/**
+ * Make an EnumChecker pre-configured with a set of allowed
+ * values by name.
+ *
+ * Values are normally given as fully qualified enum symbols
+ * with matching names.  For example,
+ * \c MakeEnumChecker (RipNg::SPLIT_HORIZON, "ns3::RipNg::SplitHorizon");
+ *
+ * \see AttributeChecker
+ *
+ * \returns The AttributeChecker
+ * \param [in] v1  An enum value
+ * \param [in] n1  The corresponding name.
+ * \param [in] v2  A enum value
+ * \param [in] n2  The corresponding name.
+ * \param [in] v3  A enum value
+ * \param [in] n3  The corresponding name.
+ * \param [in] v4  A enum value
+ * \param [in] n4  The corresponding name.
+ * \param [in] v5  A enum value
+ * \param [in] n5  The corresponding name.
+ * \param [in] v6  A enum value
+ * \param [in] n6  The corresponding name.
+ * \param [in] v7  A enum value
+ * \param [in] n7  The corresponding name.
+ * \param [in] v8  A enum value
+ * \param [in] n8  The corresponding name.
+ * \param [in] v9  A enum value
+ * \param [in] n9  The corresponding name.
+ * \param [in] v10 An enum value
+ * \param [in] n10 The enum name.
+ * \param [in] v11 An enum value
+ * \param [in] n11 The corresponding name.
+ * \param [in] v12 A enum value
+ * \param [in] n12 The corresponding name.
+ * \param [in] v13 A enum value
+ * \param [in] n13 The corresponding name.
+ * \param [in] v14 A enum value
+ * \param [in] n14 The corresponding name.
+ * \param [in] v15 A enum value
+ * \param [in] n15 The corresponding name.
+ * \param [in] v16 A enum value
+ * \param [in] n16 The corresponding name.
+ * \param [in] v17 A enum value
+ * \param [in] n17 The corresponding name.
+ * \param [in] v18 A enum value
+ * \param [in] n18 The corresponding name.
+ * \param [in] v19 A enum value
+ * \param [in] n19 The corresponding name.
+ * \param [in] v20 An enum value
+ * \param [in] n20 The enum name.
+ * \param [in] v21 An enum value
+ * \param [in] n21 The corresponding name.
+ * \param [in] v22 A enum value
+ * \param [in] n22 The corresponding name.
+ */ 
 Ptr<const AttributeChecker> MakeEnumChecker (int v1, std::string n1,
                                              int v2 = 0, std::string n2 = "",
                                              int v3 = 0, std::string n3 = "",
diff -Naur ns-3.21/src/core/model/event-id.cc ns-3.22/src/core/model/event-id.cc
--- ns-3.21/src/core/model/event-id.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/event-id.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,16 @@
 #include "event-impl.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("EventId");
+/**
+ * \file
+ * \ingroup events
+ * ns3::EventId implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EventId");
+
 EventId::EventId ()
   : m_eventImpl (0),
     m_ts (0),
diff -Naur ns-3.21/src/core/model/event-id.h ns-3.22/src/core/model/event-id.h
--- ns-3.21/src/core/model/event-id.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/event-id.h	2015-02-05 15:46:22.000000000 -0800
@@ -24,62 +24,99 @@
 #include "ptr.h"
 #include "event-impl.h"
 
+/**
+ * \file
+ * \ingroup events
+ * ns3::EventId declarations.
+ */
+
 namespace ns3 {
 
 class EventImpl;
 
 /**
  * \ingroup events
- * \brief an identifier for simulation events.
+ * \brief An identifier for simulation events.
  *
  * Each EventId identifies a unique event scheduled with one
- * of the many Simulator::Schedule methods. This EventId can
- * be used to Cancel or Remove events after they are scheduled
- * with Simulator::Cancel or Simulator::Remove.
+ * of the many Simulator::Schedule() methods. This EventId can
+ * be used to cancel or remove events after they are scheduled
+ * with Simulator::Cancel() or Simulator::Remove().
  *
  * The important thing to remember about this class is that
  * every variable of this type is _always_ in a valid state, 
- * even when it has not been assigned an EventId coming from a Schedule
- * method: calling Cancel, IsRunning, IsExpired or passing around
- * instances of this object will not result in crashes or memory leaks.
+ * even when it has not been assigned an EventId coming from a
+ * Simulator::Schedule() method:  calling Simulator::Cancel(), IsRunning(),
+ * IsExpired() or passing around instances of this object
+ * will not result in crashes or memory leaks.
  */
 class EventId {
 public:
+  /** Default constructor. This EventId does nothing. */
   EventId ();
-  // internal.
+  /**
+   * Construct a real event.
+   *
+   * \param [in] impl The implementation of this event.
+   * \param [in] ts The virtual time stamp this event should occur.
+   * \param [in] context The execution context for this event.
+   * \param [in] uid The unique id for this EventId.
+   */
   EventId (const Ptr<EventImpl> &impl, uint64_t ts, uint32_t context, uint32_t uid);
   /**
-   * This method is syntactic sugar for the ns3::Simulator::cancel
+   * This method is syntactic sugar for the ns3::Simulator::Cancel
    * method.
    */
   void Cancel (void);
   /**
-   * This method is syntactic sugar for the ns3::Simulator::isExpired
+   * This method is syntactic sugar for the ns3::Simulator::IsExpired
    * method.
-   * \returns true if the event has expired, false otherwise.
+   * \returns \c true if the event has expired, \c false otherwise.
    */
   bool IsExpired (void) const;
   /**
-   * This method is syntactic sugar for the ns3::Simulator::isExpired
-   * method.
-   * \returns true if the event has not expired, false otherwise.
+   * This method is syntactic sugar for !IsExpired().
+   * 
+   * \returns \c true if the event has not expired, \c false otherwise.
    */
   bool IsRunning (void) const;
 public:
-  /* The following methods are semi-private
-   * they are supposed to be invoked only by
+  /**
+   * \name Scheduler Helpers.
+   * \brief These methods are normally invoked only by
    * subclasses of the Scheduler base class.
    */
+  /**@{*/
+  /** \return The underlying EventImpl pointer. */
   EventImpl *PeekEventImpl (void) const;
+  /** \return The virtual time stamp. */
   uint64_t GetTs (void) const;
+  /** \return The event context. */
   uint32_t GetContext (void) const;
+  /** \return The unique id. */
   uint32_t GetUid (void) const;
+  /**@}*/
+  
 private:
+  /**
+   * Test if two EventId's are equal.
+   * \param a The first EventId.
+   * \param b The second EventId.
+   * \return \c true if the \p a and \p b represent the same event.
+   */
   friend bool operator == (const EventId &a, const EventId &b);
-  Ptr<EventImpl> m_eventImpl;
-  uint64_t m_ts;
-  uint32_t m_context;
-  uint32_t m_uid;
+  /**
+   * Test if two EventId's are not equal.
+   * \param a The first EventId.
+   * \param b The second EventId.
+   * \return \c true if the \p a and \p b are not the same event.
+   */
+  friend bool operator != (const EventId &a, const EventId &b);
+  
+  Ptr<EventImpl> m_eventImpl;  /**< The underlying event implementation. */
+  uint64_t m_ts;               /**< The virtual time stamp. */
+  uint32_t m_context;          /**< The context. */
+  uint32_t m_uid;              /**< The unique id. */
 };
 
 bool operator == (const EventId &a, const EventId &b);
diff -Naur ns-3.21/src/core/model/event-impl.cc ns-3.22/src/core/model/event-impl.cc
--- ns-3.21/src/core/model/event-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/event-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,16 @@
 #include "event-impl.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("EventImpl");
+/**
+ * \file
+ * \ingroup events
+ * ns3::EventImpl definitions.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EventImpl");
+
 EventImpl::~EventImpl ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/core/model/event-impl.h ns-3.22/src/core/model/event-impl.h
--- ns-3.21/src/core/model/event-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/event-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,46 +23,60 @@
 #include <stdint.h>
 #include "simple-ref-count.h"
 
+/**
+ * \file
+ * \ingroup events
+ * ns3::EventImpl declarations.
+ */
+
 namespace ns3 {
 
 /**
  * \ingroup events
- * \brief a simulation event
+ * \brief A simulation event.
  *
  * Each subclass of this base class represents a simulation event. The
- * EventImpl::Invoke method will be invoked by the simulation engine
- * when the time associated to this event expires. This class is
- * obviously (there are Ref and Unref methods) reference-counted and
- * most subclasses are usually created by one of the many Simulator::Schedule
+ * Invoke() method will be called by the simulation engine
+ * when it reaches the time associated to this event. Most subclasses
+ * are usually created by one of the many Simulator::Schedule
  * methods.
  */
 class EventImpl : public SimpleRefCount<EventImpl>
 {
 public:
+  /** Default constructor. */
   EventImpl ();
+  /** Destructor. */
   virtual ~EventImpl () = 0;
   /**
-   * Called by the simulation engine to notify the event that it has expired.
+   * Called by the simulation engine to notify the event that it is time
+   * to execute.
    */
   void Invoke (void);
   /**
-   * Marks the event as 'canceled'. The event will not be removed from
+   * Marks the event as 'canceled'. The event is not removed from
    * the event list but the simulation engine will check its canceled status
-   * before calling Invoke.
+   * before calling Invoke().
    */
   void Cancel (void);
   /**
    * \returns true if the event has been canceled.
    *
-   * Invoked by the simulation engine before calling Invoke.
+   * Checked by the simulation engine before calling Invoke().
    */
   bool IsCancelled (void);
 
 protected:
+  /**
+   * Implementation for Invoke().
+   *
+   * This typically calls a method or function pointer with the
+   * arguments bound by a call to one of the MakeEvent() functions.
+   */
   virtual void Notify (void) = 0;
 
 private:
-  bool m_cancel;
+  bool m_cancel;  /**< Has this event been cancelled. */
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/core/model/fatal-error.h ns-3.22/src/core/model/fatal-error.h
--- ns-3.21/src/core/model/fatal-error.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/fatal-error.h	2015-02-05 15:46:22.000000000 -0800
@@ -28,6 +28,12 @@
 #include "fatal-impl.h"
 
 /**
+ * \file
+ * \ingroup fatal
+ * \brief \c NS_FATAL_x macro definitions.
+ */
+
+/**
  * \ingroup core
  * \defgroup fatal Fatal Error Handlers
  *
@@ -49,9 +55,8 @@
 
 /**
  * \ingroup fatal
- * \private
  *
- * \brief fatal error handling
+ * \brief Fatal error handling
  *
  * When this macro is hit at runtime, details of filename
  * and line number is printed to stderr, and the program
@@ -76,7 +81,7 @@
 /**
  * \ingroup fatal
  *
- * \brief fatal error handling
+ * \brief Fatal error handling
  *
  * \param msg message to output when this macro is hit.
  *
diff -Naur ns-3.21/src/core/model/fatal-impl.cc ns-3.22/src/core/model/fatal-impl.cc
--- ns-3.21/src/core/model/fatal-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/fatal-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,32 +28,59 @@
 
 #include <csignal>
 
-NS_LOG_COMPONENT_DEFINE ("FatalImpl");
+/**
+ * \file
+ * \ingroup fatalimpl
+ * \brief Implementation of RegisterStream(), UnregisterStream(), and FlushStreams(); see Implementation note!
+ *
+ * \note Implementation.
+ *
+ * The singleton pattern we use here is tricky because we have to ensure:
+ *
+ *   - RegisterStream() succeeds, even if called before \c main() enters and 
+ *     before any constructor run in this file.
+ *
+ *   - UnregisterStream() succeeds, whether or not FlushStreams() has
+ *     been called.
+ *
+ *   - All memory allocated with \c new is deleted properly before program exit.
+ *
+ * This is why we go through all the painful hoops below.
+ */
 
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("FatalImpl");
+  
 namespace FatalImpl {
 
 /**
- * Note on implementation: the singleton pattern we use here is tricky because
- * it has to deal with:
- *   - make sure that whoever calls Register (potentially before main enters and 
- *     before any constructor run in this file) succeeds
- *   - make sure that whoever calls Unregister (potentially before FlushStream runs
- *     but also after it runs) succeeds
- *   - make sure that the memory allocated with new is deallocated with delete before
- *     the program exits so that valgrind reports no leaks
- *
- * This is why we go through all the painful hoops below.
+ * \ingroup fatalimpl
+ * Anonymous namespace for fatal streams memory implementation
+ * and signal handler.
  */
-
-/* File-scope */
 namespace {
+
+/**
+ * \ingroup fatalimpl
+ * \brief Static variable pointing to the list of output streams
+ * to be flushed on fatal errors.
+ *
+ * \returns The address of the static pointer.
+ */
 std::list<std::ostream*> **PeekStreamList (void)
 {
   NS_LOG_FUNCTION_NOARGS ();
   static std::list<std::ostream*> *streams = 0;
   return &streams;
 }
+
+/**
+ * \ingroup fatalimpl
+ * \brief Get the stream list, initializing it if necessary.
+ *
+ * \returns The stream list.
+ */
 std::list<std::ostream*> *GetStreamList (void)
 {
   NS_LOG_FUNCTION_NOARGS ();
@@ -64,6 +91,22 @@
     }
   return *pstreams;
 }
+
+/**
+ * \ingroup fatalimpl
+ * \brief Destructor for the list of fatal streams.
+ *
+ * \todo Is this ever called?
+ * Not obvious that it is.  Test with something like
+ * \code
+ *   main (int argc, char ** argv)
+ *   {
+ *     NS_FATAL_MSG ("Aborting.")
+ *   }
+ * \endcode
+ * Then run under valgrind or the debugger.  If this isn't called,
+ * try adding the call to \c sigHandler.
+ */
 struct destructor
 {
   ~destructor ()
@@ -74,7 +117,7 @@
     *pstreams = 0;
   }
 };
-}
+}  // anonymous namespace
 
 void
 RegisterStream (std::ostream* stream)
@@ -100,17 +143,30 @@
     }
 }
 
-
+/**
+ * \ingroup fatalimpl
+ * Anonymous namespace for fatal streams signal hander.
+ *
+ * This is private to the fatal implementation.
+ */
 namespace {
-/* Overrides normal SIGSEGV handler once the
- * HandleTerminate function is run. */
+
+/**
+ * \ingroup fatalimpl
+ * \brief Overrides normal SIGSEGV handler once the HandleTerminate
+ * function is run.
+ *
+ * This is private to the fatal implementation.
+ *
+ * \param sig The signal condition.
+ */
 void sigHandler (int sig)
 {
   NS_LOG_FUNCTION (sig);
   FlushStreams ();
   std::abort ();
 }
-}
+}  // anonymous namespace
 
 void 
 FlushStreams (void)
@@ -157,5 +213,6 @@
   *pl = 0;
 }
 
-} //FatalImpl
-} //ns3
+} // namespace FatalImpl
+  
+} // namespace ns3
diff -Naur ns-3.21/src/core/model/fatal-impl.h ns-3.22/src/core/model/fatal-impl.h
--- ns-3.21/src/core/model/fatal-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/fatal-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,52 +23,70 @@
 
 #include <ostream>
 
+/**
+ * \file
+ * \ingroup fatalimpl
+ * \brief Declaration of RegisterStream(), UnregisterStream(), and FlushStreams().
+ */
+
+/**
+ * \ingroup fatal
+ * \defgroup fatalimpl Fatal Implementation.
+ */
+
 namespace ns3 {
+
+/**
+ * \ingroup fatalimpl
+ * \brief Implementation namespace for fatal error handlers.
+ */
 namespace FatalImpl {
 
 /**
- * \ingroup fatal
- * \param stream The stream to be flushed on abnormal exit.
+ * \ingroup fatalimpl
  *
  * \brief Register a stream to be flushed on abnormal exit.
  *
- * If a std::terminate() call is encountered after the
- * stream had been registered and before it had been
- * unregistered, stream->flush() will be called. Users of
- * this function is to ensure stream remains valid until
+ * If a \c std::terminate() call is encountered after the
+ * stream had been registered and before it has been
+ * unregistered, \c stream->flush() will be called. Users of
+ * this function should ensure the stream remains valid until
  * it had been unregistered.
+ *
+ * \param stream The stream to be flushed on abnormal exit.
  */
 void RegisterStream (std::ostream* stream);
 
 /**
- * \ingroup fatal
- * \param stream The stream to be unregistered.
+ * \ingroup fatalimpl
  *
  * \brief Unregister a stream for flushing on abnormal exit.
  *
- * After a stream had been unregistered, stream->flush()
- * will no longer be called should abnormal termination is
+ * After a stream had been unregistered, \c stream->flush()
+ * will no longer be called should abnormal termination be
  * encountered.
  *
- * If stream is not registered, nothing will happen.
+ * If the stream is not registered, nothing will happen.
+ *
+ * \param stream The stream to be unregistered.
  */
 void UnregisterStream (std::ostream* stream);
 
 /**
- * \ingroup fatal
+ * \ingroup fatalimpl
  *
  * \brief Flush all currently registered streams.
  *
  * This function iterates through each registered stream and
- * unregister them. The default SIGSEGV handler is overridden
+ * unregisters them. The default \c SIGSEGV handler is overridden
  * when this function is being executed, and will be restored
  * when this function returns.
  *
- * If a SIGSEGV is encountered (most likely due to bad ostream*
- * being registered, or a registered osteam* pointing to an
- * ostream that had already been destroyed), this function will
- * skip the bad ostream* and continue to flush the next stram.
- * The function will then terminate raising SIGIOT (aka SIGABRT)
+ * If a \c SIGSEGV is encountered (most likely due to a bad \c ostream*
+ * being registered, or a registered \c osteam* pointing to an
+ * \c ostream that had already been destroyed), this function will
+ * skip the bad \c ostream* and continue to flush the next stream.
+ * The function will then terminate raising \c SIGIOT (aka \c SIGABRT)
  *
  * DO NOT call this function until the program is ready to crash.
  */
diff -Naur ns-3.21/src/core/model/hash.cc ns-3.22/src/core/model/hash.cc
--- ns-3.21/src/core/model/hash.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/hash.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,6 +21,12 @@
 #include "log.h"
 #include "hash.h"
 
+/**
+ * \file
+ * \ingroup hash
+ * \brief ns3::Hasher implementation.
+ */
+
 
 namespace ns3 {
 
diff -Naur ns-3.21/src/core/model/hash-fnv.cc ns-3.22/src/core/model/hash-fnv.cc
--- ns-3.21/src/core/model/hash-fnv.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/hash-fnv.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,7 +26,8 @@
  *   // End <fnv-file>   ---->
  * comments.
  *
- * Changes from the FNV distribution are marked with `//PDB'
+ * Code changes from the FNV distribution are marked with `//PDB'
+ * In addition comment blocks have been converted to Doxygen format.
  */
 
 #include <sys/types.h>
@@ -35,6 +36,12 @@
 #include "log.h"
 #include "hash-fnv.h"
 
+/**
+ * \file
+ * \ingroup hash
+ * \brief ns3::Hash::Function::Fnv1a implementation.
+ */
+
 
 namespace ns3 {
 
@@ -44,12 +51,19 @@
 
 namespace Function {
 
+/** FNV hash implementation details. */  
 namespace Fnv1aImplementation {
 
 /*************************************************
  **  class FnvHashImplementation
  ************************************************/
 
+/**
+ * \ingroup hash
+ * \defgroup hash_fnv FNV Hash Implementation
+ */
+/**@{*/
+  
 extern "C" {
 
 // Changes from FNV distribution are marked with `//PDB'
@@ -133,58 +147,58 @@
  */
 
 #if !defined(__FNV_H__)
+/** Include guard from the original fnv.h. */
 #define __FNV_H__
 
 
 //#include <sys/types.h>  //PDB
 
-#define FNV_VERSION "5.0.2"	/* @(#) FNV Version */
+#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
  */
+// 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.
+ * \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
+ * \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)
+/** \copydoc FNV1_32_INIT */
 #define FNV1_32A_INIT FNV1_32_INIT
 
 
-/*
- * determine how 64 bit unsigned values are represented
+/**
+ * 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)
@@ -196,14 +210,13 @@
 #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
  */
+// 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 */
@@ -212,40 +225,42 @@
 #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.
+ * \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.
+ * \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)
+/** \copydoc FNV1_64_INIT */
 #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)
+/** \copydoc FNV1_64_INIT */
 #define FNV1A_64_INIT (fnv1a_64_init)
 #endif /* HAVE_64BIT_LONG_LONG */
 
 
-/*
- * hash types
+/**
+ * FNV 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 */
+    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
@@ -253,17 +268,22 @@
 /*
  * 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);
+/**
+ * \copydoc fnv_32a_buf()
+ */
+/* extern */ Fnv32_t fnv_32_buf(void *buf, size_t len, Fnv32_t hval);
+/** \copydoc fnv_32a_str() */
+/* extern */ Fnv32_t fnv_32_str(char *str, Fnv32_t hval);
 
 /* 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);
+/** \copydoc fnv_64a_buf() */
+/* extern */ Fnv64_t fnv_64_buf(void *buf, size_t len, Fnv64_t hval);
+/** \copydoc fnv_64a_str() */
+/* extern */ Fnv64_t fnv_64_str(char *str, Fnv64_t hval);
 
 /* hash_64a.c */
 /* extern */ Fnv64_t fnv_64a_buf(void *buf, size_t len, Fnv64_t hashval);
@@ -338,24 +358,23 @@
 //#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
+ * \param	buf	start of buffer to hash
+ * \param	len	length of buffer in octets
+ * \param	hval	previous hash value or 0 if first call
  *
- * returns:
- *	32 bit hash as a static hash type
+ * \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
+ * \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
@@ -385,17 +404,16 @@
 }
 
 
-/*
+/**
  * 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
+ * \param	str	string to hash
+ * \param	hval	previous hash value or 0 if first call
  *
- * returns:
- *	32 bit hash as a static hash type
+ * \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
+ * \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
@@ -488,7 +506,7 @@
 //#include "fnv.h"       //PDB
 
 
-/*
+/**
  * FNV-1a defines the initial basis to be non-zero
  */
 #if !defined(HAVE_64BIT_LONG_LONG)
@@ -496,29 +514,30 @@
 #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
+ * \param	buf	start of buffer to hash
+ * \param	len	length of buffer in octets
+ * \param	hval	previous hash value or 0 if first call
  *
- * returns:
- *	64 bit hash as a static hash type
+ * \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
+ * \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
@@ -614,17 +633,16 @@
 }
 
 
-/*
+/**
  * 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
+ * \param	str	string to hash
+ * \param	hval	previous hash value or 0 if first call
  *
- * returns:
- *	64 bit hash as a static hash type
+ * \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
+ * \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
@@ -725,6 +743,7 @@
 
 //-----------------------------------------------------------------------------
 
+/**@}*/  // \defgroup hash_fnv
 
 }  // namespace Fnv1aImplementation
 
diff -Naur ns-3.21/src/core/model/hash-fnv.h ns-3.22/src/core/model/hash-fnv.h
--- ns-3.21/src/core/model/hash-fnv.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/hash-fnv.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,6 +23,12 @@
 
 #include "hash-function.h"
 
+/**
+ * \file
+ * \ingroup hash
+ * \brief ns3::Hash::Function::Fnv1a declaration.
+ */
+
 namespace ns3 {
 
 namespace Hash {
@@ -92,15 +98,13 @@
    */
   enum seed
   {
-    SEED = 0x8BADF00D  // Ate bad food
+    SEED = 0x8BADF00D  /**< Ate bad food */
   };
-  //@{
-  /**
-   * Cache last hash value, for incremental hashing.
-   */
+  /** Cache last hash value, for incremental hashing. */
+  /**@{*/
   uint32_t m_hash32;
   uint64_t m_hash64;
-  //@}
+  /**@}*/
 
 };  // class Fnv1a
 
diff -Naur ns-3.21/src/core/model/hash-function.cc ns-3.22/src/core/model/hash-function.cc
--- ns-3.21/src/core/model/hash-function.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/hash-function.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,6 +21,12 @@
 #include "log.h"
 #include "hash-function.h"
 
+/**
+ * \file
+ * \ingroup hash
+ * \brief ns3::Hash::Implementation::GetHash64 defaul implementation.
+ */
+
 
 namespace ns3 {
 
diff -Naur ns-3.21/src/core/model/hash-function.h ns-3.22/src/core/model/hash-function.h
--- ns-3.21/src/core/model/hash-function.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/hash-function.h	2015-02-05 15:46:22.000000000 -0800
@@ -24,6 +24,13 @@
 #include <cstring>  // memcpy
 #include "simple-ref-count.h"
 
+/**
+ * \file
+ * \ingroup hash
+ * \brief ns3::Hash::Implementation, ns3::Hash::Function::Hash32 and
+ * ns3::Hash::Function::Hash64 declarations.
+ */
+
 namespace ns3 {
 
 /**
@@ -35,7 +42,7 @@
 /**
  *  \ingroup hash
  *
- *  \brief Hash function implementation base class
+ *  \brief Hash function implementation base class.
  */
 class Implementation : public SimpleRefCount<Implementation>
 {
@@ -43,16 +50,16 @@
   /**
    * Compute 32-bit hash of a byte buffer
    *
-   * Call clear () between calls to GetHash32() to reset the
+   * 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
+   * \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;
   /**
@@ -60,28 +67,28 @@
    *
    * Default implementation returns 32-bit hash, with a warning.
    *
-   * Call clear () between calls to GetHash64() to reset the
+   * 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
+   * \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
+   * Restore initial state.
    */
   virtual void clear (void) = 0;
   /**
-   * Constructor
+   * Constructor.
    */
   Implementation () { };
   /**
-   * Destructor
+   * Destructor.
    */
   virtual ~Implementation () { };
 };  // Hashfunction
@@ -96,9 +103,9 @@
  *
  * \ingroup hash
  *
- * \brief Basic hash function typedefs.
+ * \brief Function pointer signatures for basic hash functions.
  *
- * See Hash32Implementation<> or Hash64Implementation<>
+ * See Hash::Function::Hash32 or Hash::Function::Hash64
  * @{
  */
 typedef uint32_t (*Hash32Function_ptr) (const char *, const size_t);
@@ -107,18 +114,24 @@
 
 /**
  * \ingroup hash
- * Hash functions
+ * Hash functions.
  */
 namespace Function {
 
 /**
  * \ingroup hash
  *
- * \brief Template for Hashfunctions from 32-bit hash functions
+ * \brief Template for creating a Hash::Implementation from
+ * a 32-bit hash function.
  */
 class Hash32 : public Implementation
 {
 public:
+  /**
+   * Constructor from a 32-bit hash function pointer.
+   *
+   * \param [in] hp Function pointer to a 32-bit hash function.
+   */
   Hash32 (Hash32Function_ptr hp) : m_fp (hp) { };
   uint32_t GetHash32 (const char * buffer, const size_t size)
   {
@@ -126,17 +139,23 @@
   }
   void clear () { };
 private:
-  Hash32Function_ptr m_fp;
+  Hash32Function_ptr m_fp;  /**< The hash function. */
 };  // Hash32
 
 /**
  * \ingroup hash
  *
- * \brief Template for Hashfunctions from 64-bit hash functions
+ * \brief Template for creating a Hash::Implemetation from
+ * a 64-bit hash function.
  */
 class Hash64 : public Implementation
 {
 public:
+  /**
+   * Constructor from a 64-bit hash function pointer.
+   *
+   * \param [in] hp Function pointer to a 64-bit hash function.
+   */
   Hash64 (Hash64Function_ptr hp) : m_fp (hp) { };
   uint64_t GetHash64 (const char * buffer, const size_t size)
   {
@@ -152,7 +171,7 @@
   }
   void clear () { };
 private:
-  Hash64Function_ptr m_fp;
+  Hash64Function_ptr m_fp;  /**< The hash function. */
 };  // Hash64<Hash64Function_ptr>
 
 
diff -Naur ns-3.21/src/core/model/hash.h ns-3.22/src/core/model/hash.h
--- ns-3.21/src/core/model/hash.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/hash.h	2015-02-05 15:46:22.000000000 -0800
@@ -30,18 +30,27 @@
 #include "hash-murmur3.h"
 #include "hash-fnv.h"
 
+/**
+ * \file
+ * \ingroup hash
+ * \brief ns3::Hasher, ns3::Hash32() and ns3::Hash64() function declarations.
+ */
+
 namespace ns3 {
 
 /**
  * \ingroup core
  * \defgroup hash Hash Functions
  *
- *  \brief Generic Hash function interface
+ *  \brief Generic Hash function interface.
+ *
+ * See \ref Hasher for main entry point.
+ * See \ref hash-example.cc for example usage.
  */
 /**
  *  \ingroup hash
  *
- *  \brief Generic Hash function interface
+ *  \brief Generic Hash function interface.
  *
  *  This class provides a generic interface for computing hashes
  *  of buffers.  Various getters return hashes of different lengths.
@@ -59,7 +68,7 @@
  *    uint32_t hash = Hasher.GetHash32 (data);
  *    \endcode
  *
- *  The available implementations are documented in group hash.
+ *  The available implementations are documented in \ref hash.
  *  The default implementation is Murmur3.  FNV1a is also available.
  *
  *  In addition to this class interface, global functions are
@@ -79,13 +88,13 @@
 {
 public:
   /**
-   * Constructor using the default implementation
+   * Constructor using the default implementation.
    */
   Hasher ();
   /**
-   * Constructor using the supplied implementation
+   * Constructor using the supplied implementation.
    *
-   * \param [in] hp Ptr<Hash::Implementation> to the desired implementation
+   * \param [in] hp Ptr<Hash::Implementation> to the desired implementation.
    */
   Hasher (Ptr<Hash::Implementation> hp);
   /**
@@ -98,13 +107,13 @@
    * 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
+   * \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
+   * Compute 64-bit hash of a byte buffer.
    *
    * Call clear () between calls to GetHash64() to reset the
    * internal state and hash each buffer separately.
@@ -113,14 +122,14 @@
    * 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
+   * \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
+   * Compute 32-bit hash of a string.
    *
    * Call clear () between calls to GetHash32() to reset the
    * internal state and hash each string separately.
@@ -129,12 +138,12 @@
    * 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
+   * \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
+   * Compute 64-bit hash of a string.
    *
    * Call clear () between calls to GetHash64() to reset the
    * internal state and hash each string separately.
@@ -143,19 +152,28 @@
    * 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
+   * \param [in] s String to hash.
+   * \return 64-bit hash of the string.
    */
   uint64_t  GetHash64  (const std::string s);
   /**
-   * Restore initial state
+   * Restore initial state.
+   *
+   * Returning this Hasher allows code like this:
+   *
+   * \code
+   *   Hasher h;
+   *   h.GetHash32 (...);
+   *   ...
+   *   h.clear ().GetHash64 (...);
+   * \endcode
    *
    * \return this
    */
   Hasher & clear (void);
 
 private:
-  Ptr<Hash::Implementation> m_impl;    /** Hash implementation */
+  Ptr<Hash::Implementation> m_impl;  /**< Hash implementation. */
 };  // Hasher
 
 
@@ -166,40 +184,40 @@
 /**
  * \ingroup hash
  *
- * Compute 32-bit hash of a byte buffer, using the default hash function
+ * 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
+ * \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
+ * 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
+ * \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
+ * 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
+ * \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
+ * 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
+ * \param [in] s String to hash.
+ * \return 64-bit hash of the string.
  */
 uint64_t Hash64 (const std::string s);
 
diff -Naur ns-3.21/src/core/model/hash-murmur3.cc ns-3.22/src/core/model/hash-murmur3.cc
--- ns-3.21/src/core/model/hash-murmur3.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/hash-murmur3.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,6 +27,7 @@
  * comments.
  *
  * Changes from the murmur3 distribution are marked with `//PDB'
+ * In addition comment blocks have been converted to Doxygen format.
  */
 
 #include "log.h"
@@ -34,6 +35,12 @@
 
 #include <iomanip>
 
+/**
+ * \file
+ * \ingroup hash
+ * \brief ns3::Hash::Function::Murmur3 implementation.
+ */
+
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Hash-Murmur3");
@@ -42,8 +49,16 @@
 
 namespace Function {
 
+/** Murmur3 hash implementation details. */
 namespace Murmur3Implementation {
 
+/**
+ * \ingroup hash
+ * \defgroup hash_murmur3 Murmur3 Hash Implementation
+ */
+/**@{*/
+  
+  
 // Changes from Murmur3 distribution are marked with `//PDB'
 //
 
@@ -66,35 +81,61 @@
 // non-native version will be less than optimal.
 
 
+/**
+ * Barrel shift (rotate) left on 32 bits.
+ *
+ * \param x The initial value.
+ * \param r The number of bit positions to rotate.
+ * \return The rotated value.
+ */
 inline uint32_t rotl32 ( uint32_t x, int8_t r )
 {
   return (x << r) | (x >> (32 - r));
 }
 
+/**
+ * Barrel shift (rotate) left on 64 bits.
+ *
+ * \param x The initial value.
+ * \param r The number of bit positions to rotate.
+ * \return The rotated value.
+ */
 inline uint64_t rotl64 ( uint64_t x, int8_t r )
 {
   return (x << r) | (x >> (64 - r));
 }
 
+/** Unsigned long long constants. */
 #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
-
+/**
+ * Block read
+ *
+ * If your platform needs to do endian-swapping or can only
+ * handle aligned reads, do the conversion here.
+ *
+ * \param p Block base address.
+ * \param i Index into the block.
+ * \returns The \c i'th word from the block.
+ */
 inline uint32_t getblock ( const uint32_t * p, int i )
 {
   return p[i];
 }
-
+/** \copydoc getblock(const uint32_t*,int) */
 inline uint64_t getblock ( const uint64_t * p, int i )
 {
   return p[i];
 }
 
 //-----------------------------------------------------------------------------
-// Finalization mix - force all bits of a hash block to avalanche
-
+/**
+ * Finalization mix - force all bits of a hash block to avalanche.
+ *
+ * \param h Final word of the hash block.
+ * \returns Fully mixed final word.
+ */
 inline uint32_t fmix ( uint32_t h )
 {
   h ^= h >> 16;
@@ -107,27 +148,43 @@
 }
 
 //----------
-
-inline uint64_t fmix ( uint64_t k )
+/** \copydoc fmix(uint32_t) */
+inline uint64_t fmix ( uint64_t h )
 {
-  k ^= k >> 33;
-  k *= BIG_CONSTANT(0xff51afd7ed558ccd);
-  k ^= k >> 33;
-  k *= BIG_CONSTANT(0xc4ceb9fe1a85ec53);
-  k ^= k >> 33;
+  h ^= h >> 33;
+  h *= BIG_CONSTANT(0xff51afd7ed558ccd);
+  h ^= h >> 33;
+  h *= BIG_CONSTANT(0xc4ceb9fe1a85ec53);
+  h ^= h >> 33;
 
-  return k;
+  return h;
 }
 
 //-----------------------------------------------------------------------------
 
 //PDB forward
+/**
+ * Initial and incremental hash.
+ *
+ * \param key Data to be hashed.
+ * \param len Number of words in the \c key.
+ * \param seed Initial or current hash state.
+ * \param out Output hash value.
+ */
 void MurmurHash3_x86_32_incr ( const void * key, int len,
                                uint32_t seed, void * out );
+/**
+ * Finalize a hash.
+ *
+ * \param len Total number of words that have gone in to the hash.
+ * \param seed Initial or current hash state.
+ * \param out Output hash value.
+ */
 void MurmurHash3_x86_32_fin ( int len,
                               uint32_t seed, void * out );
 
 //PDB - incremental hashing
+/** \copydoc MurmurHash3_x86_32_incr() */
 void MurmurHash3_x86_32 ( const void * key, int len,
                           uint32_t seed, void * out )
 {
@@ -202,12 +259,35 @@
 //-----------------------------------------------------------------------------
 
 //PDB forward
+/**
+ * Initial and incremental hash.
+ *
+ * \param key Data to be hashed.
+ * \param len Number of words in the \c key.
+ * \param seeds Initial or current hash state.
+ * \param out Output hash value.
+ */
 void MurmurHash3_x86_128_incr ( const void * key, const int len,
                                 uint32_t * seeds, void * out );
+/**
+ * Finalize a hash.
+ *
+ * \param len Total number of words that have gone in to the hash.
+ * \param seeds Initial or current hash state.
+ * \param out Output hash value.
+ */
 void MurmurHash3_x86_128_fin ( const int len,
                                uint32_t * seeds, void * out );
 
 //PDB - incremental hashing
+/**
+ * Initial and incremental hash.
+ *
+ * \param key Data to be hashed.
+ * \param len Number of words in the \c key.
+ * \param seed Initial or current hash state.
+ * \param out Output hash value.
+ */
 void MurmurHash3_x86_128 ( const void * key, const int len,
                            uint32_t seed, void * out )
 {
@@ -337,7 +417,7 @@
 }
 
 //-----------------------------------------------------------------------------
-
+/** \copydoc MurmurHash3_x86_32() */
 void MurmurHash3_x64_128 ( const void * key, const int len,
                            const uint32_t seed, void * out )
 {
@@ -426,6 +506,8 @@
 //-----------------------------------------------------------------------------
 
 
+/**@}*/  // \defgroup hash_murmur3
+
 }  // namespace Murmur3Implementation
 
 
diff -Naur ns-3.21/src/core/model/hash-murmur3.h ns-3.22/src/core/model/hash-murmur3.h
--- ns-3.21/src/core/model/hash-murmur3.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/hash-murmur3.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,6 +23,12 @@
 
 #include "hash-function.h"
 
+/**
+ * \file
+ * \ingroup hash
+ * \brief ns3::Hash::Function::Murmur3 declaration.
+ */
+
 namespace ns3 {
 
 namespace Hash {
@@ -97,17 +103,20 @@
   {
     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
 
diff -Naur ns-3.21/src/core/model/heap-scheduler.cc ns-3.22/src/core/model/heap-scheduler.cc
--- ns-3.21/src/core/model/heap-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/heap-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include "assert.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("HeapScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("HeapScheduler");
+
 NS_OBJECT_ENSURE_REGISTERED (HeapScheduler);
 
 TypeId
diff -Naur ns-3.21/src/core/model/int64x64-128.cc ns-3.22/src/core/model/int64x64-128.cc
--- ns-3.21/src/core/model/int64x64-128.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/int64x64-128.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,16 +1,45 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 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
+ *
+ */
+
 #include "int64x64-128.h"
 #include "abort.h"
 #include "assert.h"
 #include "log.h"
 
+namespace ns3 {
+
 // Note:  Logging in this file is largely avoided due to the
 // number of calls that are made to these functions and the possibility
 // of causing recursions leading to stack overflow
-
 NS_LOG_COMPONENT_DEFINE ("int64x64-128");
 
-namespace ns3 {
-
+/**
+ * \ingroup highprec
+ * Compute the sign of the result of multiplying or dividing
+ * Q64.64 fixed precision operands.
+ *
+ * \param [in]  sa The signed value of the first operand.
+ * \param [in]  sb The signed value of the second operand.
+ * \param [out] ua The unsigned magnitude of the first operand.
+ * \param [out] ub The unsigned magnitude of the second operand.
+ * \returns True if the result will be negative.
+ */
 static inline  
 bool
 output_sign (const int128_t sa,
diff -Naur ns-3.21/src/core/model/int64x64-128.h ns-3.22/src/core/model/int64x64-128.h
--- ns-3.21/src/core/model/int64x64-128.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/int64x64-128.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,4 +1,24 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 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
+ *
+ */
+
 #include "ns3/core-config.h"
+
 #if !defined(INT64X64_128_H) && defined (INT64X64_USE_128) && !defined(PYTHON_SCAN)
 #define INT64X64_128_H
 
@@ -10,7 +30,6 @@
 typedef __int128_t int128_t;
 #endif
 
-
 namespace ns3 {
 
 /**
@@ -19,19 +38,20 @@
  */
 class int64x64_t
 {
-  /// uint128_t high bit (sign bit)
+  /// uint128_t high bit (sign bit).
   static const uint128_t   HP128_MASK_HI_BIT = (((int128_t)1)<<127);
-  /// Mask for fraction part
+  /// Mask for fraction part.
   static const uint64_t    HP_MASK_LO = 0xffffffffffffffffULL;
-  /// Mask for sign + integer part
+  /// Mask for sign + integer part.
   static const uint64_t    HP_MASK_HI = ~HP_MASK_LO;
   /**
-   * Floating point value of HP_MASK_LO + 1
+   * Floating point value of HP_MASK_LO + 1.
    * We really want:
    * \code
    *   static const long double HP_MAX_64 = std:pow (2.0L, 64);
    * \endcode
-   * but we can't call functions in const definitions,
+   * but we can't call functions in const definitions.
+   *
    * We could make this a static and initialize in int64x64-128.cc or
    * int64x64.cc, but this requires handling static initialization order
    * when most of the implementation is inline.  Instead, we resort to
@@ -48,23 +68,23 @@
    * we expose the underlying implementation type here.
    */
   enum impl_type {
-    int128_impl,  //!< Native int128_t implementation.
-    cairo_impl,   //!< cairo wideint implementation
-    ld_impl,      //!< long double implementation
+    int128_impl,  //!< Native \c int128_t implementation.
+    cairo_impl,   //!< Cairo wideint implementation.
+    ld_impl,      //!< `long double` implementation.
   };
 
   /// Type tag for this implementation.
   static const enum impl_type implementation = int128_impl;
 
-  /// Default constructor
+  /// Default constructor.
   inline int64x64_t ()
     : _v (0)  {}
-  /**@{*/
   /**
-   * Construct from a floating point value.
+   * \name Construct from a floating point value.
    *
-   * \param [in] value floating value to represent
+   * \param [in] value Floating value to represent.
    */
+  /**@{*/
   inline int64x64_t (const double value)
   {
     const int64x64_t tmp ((long double)value);
@@ -100,12 +120,12 @@
   }
   /**@}*/
 
-  /**@{*/
   /**
-   * Construct from an integral type.
+   * \name Construct from an integral type.
    *
-   * \param [in] v integer value to represent
+   * \param [in] v Integer value to represent.
    */
+  /**@{*/
   inline int64x64_t (const int v)
     : _v (v)
   {
@@ -137,6 +157,7 @@
     _v <<= 64;
   }
   /**@}*/
+  
   /**
    * Construct from explicit high and low values.
    *
@@ -160,6 +181,7 @@
    * Assignment.
    *
    * \param [in] o Value to assign to this int64x64_t.
+   * \returns This int64x64_t.
    */
   inline int64x64_t & operator = (const int64x64_t & o)
   {
@@ -210,7 +232,7 @@
    *
    * \param [in] o The inverse operand.
    *
-   * \see Invert
+   * \see Invert()
    */
   void MulByInvert (const int64x64_t & o);
 
@@ -230,6 +252,7 @@
   static int64x64_t Invert (const uint64_t v);
 
 private:
+
   friend bool         operator == (const int64x64_t & lhs, const int64x64_t & rhs);
 
   friend bool         operator <  (const int64x64_t & lhs, const int64x64_t & rhs);
@@ -285,7 +308,7 @@
    *
    * \param [in] a Numerator.
    * \param [in] b Denominator.
-   * \return The Q64.64 representation of `a / b`
+   * \return The Q64.64 representation of `a / b`.
    */
   static uint128_t Udiv         (const uint128_t a, const uint128_t b);
   /**
@@ -293,16 +316,16 @@
    *
    * \param [in] a The numerator, a Q64.64 value.
    * \param [in] b The inverse of the denominator, a Q0.128 value
-   * \return The product `a * b`, representing the ration `a / b^-1`
+   * \return The product `a * b`, representing the ration `a / b^-1`.
    *
-   * \see Invert
+   * \see Invert()
    */
   static uint128_t UmulByInvert (const uint128_t a, const uint128_t b);
 
   /**
    * Construct from an integral type.
    *
-   * \param [in] v integer value to represent
+   * \param [in] v Integer value to represent.
    */
   inline int64x64_t (const int128_t v)
     : _v (v) {}
@@ -322,7 +345,7 @@
 }
 /**
  * \ingroup highprec
- * Less than operator
+ * Less than operator.
  */
 inline bool operator < (const int64x64_t & lhs, const int64x64_t & rhs)
 {
@@ -330,7 +353,7 @@
 }
 /**
  * \ingroup highprec
- * Greater operator
+ * Greater operator.
  */
 inline bool operator > (const int64x64_t & lhs, const int64x64_t & rhs)
 {
@@ -339,7 +362,7 @@
 
 /**
  * \ingroup highprec
- * Compound addition operator
+ * Compound addition operator.
  */
 inline int64x64_t & operator += (int64x64_t & lhs, const int64x64_t & rhs)
 {
@@ -348,7 +371,7 @@
 }
 /**
  * \ingroup highprec
- * Compound subtraction operator
+ * Compound subtraction operator.
  */
 inline int64x64_t & operator -= (int64x64_t & lhs, const int64x64_t & rhs)
 {
@@ -357,7 +380,7 @@
 }
 /**
  * \ingroup highprec
- * Compound multiplication operator
+ * Compound multiplication operator.
  */
 inline int64x64_t & operator *= (int64x64_t & lhs, const int64x64_t & rhs)
 {
@@ -366,7 +389,7 @@
 }
 /**
  * \ingroup highprec
- * Compound division operator
+ * Compound division operator.
  */
 inline int64x64_t & operator /= (int64x64_t & lhs, const int64x64_t & rhs)
 {
@@ -376,7 +399,7 @@
 
 /**
  * \ingroup highprec
- * Unary plus operator
+ * Unary plus operator.
  */
 inline int64x64_t operator + (const int64x64_t & lhs)
 {
@@ -384,7 +407,7 @@
 }
 /**
  * \ingroup highprec
- * Unary negation operator (change sign operator)
+ * Unary negation operator (change sign operator).
  */
 inline int64x64_t operator - (const int64x64_t & lhs)
 {
@@ -392,7 +415,7 @@
 }
 /**
  * \ingroup highprec
- * Logical not operator
+ * Logical not operator.
  */
 inline int64x64_t operator ! (const int64x64_t & lhs)
 {
diff -Naur ns-3.21/src/core/model/int64x64-cairo.cc ns-3.22/src/core/model/int64x64-cairo.cc
--- ns-3.21/src/core/model/int64x64-cairo.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/int64x64-cairo.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,20 +25,29 @@
 #include <iostream>
 #include "int64x64-cairo.h"
 
-// Note:  Logging in this file is largely avoided due to the
-// number of calls that are made to these functions and the possibility
-// of causing recursions leading to stack overflow
-
-NS_LOG_COMPONENT_DEFINE ("int64x64-cairo");
-
 // Include directly to allow optimizations within this compilation unit.
 extern "C" {
 #include "cairo-wideint.c"
 }
 
-
 namespace ns3 {
 
+// Note:  Logging in this file is largely avoided due to the
+// number of calls that are made to these functions and the possibility
+// of causing recursions leading to stack overflow
+NS_LOG_COMPONENT_DEFINE ("int64x64-cairo");
+
+/**
+ * \ingroup highprec
+ * Compute the sign of the result of multiplying or dividing
+ * Q64.64 fixed precision operands.
+ *
+ * \param [in]  sa The signed value of the first operand.
+ * \param [in]  sb The signed value of the second operand.
+ * \param [out] ua The unsigned magnitude of the first operand.
+ * \param [out] ub The unsigned magnitude of the second operand.
+ * \returns True if the result will be negative.
+ */
 static inline  
 bool
 output_sign (const cairo_int128_t sa,
diff -Naur ns-3.21/src/core/model/int64x64-cairo.h ns-3.22/src/core/model/int64x64-cairo.h
--- ns-3.21/src/core/model/int64x64-cairo.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/int64x64-cairo.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 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
+ *
+ */
+
 #include "ns3/core-config.h"
 #if !defined(INT64X64_CAIRO_H) && defined (INT64X64_USE_CAIRO) && !defined(PYTHON_SCAN)
 #define INT64X64_CAIRO_H
diff -Naur ns-3.21/src/core/model/int64x64.cc ns-3.22/src/core/model/int64x64.cc
--- ns-3.21/src/core/model/int64x64.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/int64x64.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 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
+ *
+ */
+
 #include "int64x64.h"
 #include <stdint.h>
 #include <iostream>
@@ -6,14 +25,14 @@
 #include "assert.h"
 #include "log.h"
 
+
+namespace ns3 {
+
 // Note:  Logging in this file is largely avoided due to the
 // number of calls that are made to these functions and the possibility
 // of causing recursions leading to stack overflow
-
 NS_LOG_COMPONENT_DEFINE ("int64x64");
 
-namespace ns3 {
-
 /**
  * \internal
  * This algorithm is exact to the precision requested, up to the full
@@ -135,6 +154,15 @@
   return os;
 }
 
+/**
+ * \ingroup highprec
+ * Read the integer portion of a number from a string containing
+ * just the integral digits (no decimal point or fractional part).
+ *
+ * \param [in] str The string representation of the integral part
+ *             of a number, with no fractional part or decimal point.
+ * \returns    The integer.
+ */
 static uint64_t ReadHiDigits (std::string str)
 {
   const char *buf = str.c_str ();
@@ -148,6 +176,16 @@
   return retval;
 }
 
+/**
+ * \ingroup highprec
+ * Read the fractional part of a number from a string containing
+ * just the decimal digits of the fractional part (no integral part
+ * or decimal point).
+ *
+ * \param [in] str The string representation of the fractional part
+ *             of a number, without integral part or decimal point.
+ * \returns    The decimal portion of the input number.
+ */
 static uint64_t ReadLoDigits (std::string str)
 {
   int64x64_t low;
diff -Naur ns-3.21/src/core/model/int64x64-double.h ns-3.22/src/core/model/int64x64-double.h
--- ns-3.21/src/core/model/int64x64-double.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/int64x64-double.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 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
+ *
+ */
+
 #include "ns3/core-config.h"
 #if !defined(INT64X64_DOUBLE_H) && (defined (INT64X64_USE_DOUBLE) || defined(PYTHON_SCAN))
 #define INT64X64_DOUBLE_H
diff -Naur ns-3.21/src/core/model/int64x64.h ns-3.22/src/core/model/int64x64.h
--- ns-3.21/src/core/model/int64x64.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/int64x64.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 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
+ *
+ */
+
 #ifndef INT64X64_H
 #define INT64X64_H
 
@@ -24,13 +43,6 @@
  * \defgroup highprec High Precision Q64.64
  *
  * Functions and class for high precision Q64.64 fixed point arithmetic.
- */
-  
-/**
- * \ingroup highprec
- * \class int64x64_t
- * 
- * High precision numerical type, implementing Q64.64 fixed precision.
  *
  * A Q64.64 fixed precision number consists of:
  *
@@ -51,39 +63,12 @@
  *   Comparison  | `==`, `!=`, `<`, `<=`, `>`, `>=`
  *   Unary       | `+`, `-`, `!`
  */
-
-
-/**
- * \ingroup core
- * \defgroup highprec High Precision Q64.64
- *
- * Functions and class for high precision Q64.64 fixed point arithmetic.
- */
   
 /**
  * \ingroup highprec
  * \class int64x64_t
  * 
  * High precision numerical type, implementing Q64.64 fixed precision.
- *
- * A Q64.64 fixed precision number consists of:
- *
- *   Bits | Function
- *   ---- | --------
- *     1  | Sign bit
- *    63  | Integer portion
- *    64  | Fractional portion
- *
- * The `high` word consists of the sign bit and integer value;
- * the `low` word is the fractional part, unscaled.
- *
- * All standard arithmetic operations are supported:
- *
- *   Category    | Operators
- *   ----------- | ---------
- *   Computation | `+`, `+=`, `-`, `-=`, `*`, `*=`, `/`, `/=`
- *   Comparison  | `==`, `!=`, `<`, `<=`, `>`, `>=`
- *   Unary       | `+`, `-`, `!`
  */
 
 
@@ -141,7 +126,7 @@
 }
 /**
  * \ingroup highprec
- * Less or equal operator
+ * Less or equal operator.
  */
 inline bool operator <= (const int64x64_t & lhs, const int64x64_t & rhs)
 {
@@ -149,7 +134,7 @@
 }
 /**
  * \ingroup highprec
- * Greater or equal operator
+ * Greater or equal operator.
  */
 inline bool operator >= (const int64x64_t & lhs, const int64x64_t & rhs)
 {
@@ -157,7 +142,7 @@
 }
 /**
  * \ingroup highprec
- * Output streamer for int64x64_t
+ * Output streamer for int64x64_t.
  *
  * Values are printed with the following format flags
  * (independent of the the stream flags):
@@ -168,17 +153,27 @@
  * `precision` decimal places are printed.  If `floatfield` is not set,
  * all digits of the fractional part are printed, up to the
  * representation limit of 20 digits; trailing zeros are omitted.
+ *
+ * \param [in] os The output stream.
+ * \param [in] value The numerical value to print.
+ * \returns The stream.
  */
-std::ostream &operator << (std::ostream &os, const int64x64_t &val);
+std::ostream &operator << (std::ostream &os, const int64x64_t &value);
 /**
  * \ingroup highprec
- * Input streamer for int64x64_t
+ * Input streamer for int64x64_t.
+ *
+ * \param [in] is The input stream.
+ * \param [out] value The numerical value to set.
+ * \returns The stream.
  */
-std::istream &operator >> (std::istream &is, int64x64_t &val);
+std::istream &operator >> (std::istream &is, int64x64_t &value);
 
 /**
  * \ingroup highprec
  * Absolute value.
+ * \param value The value to operate on.
+ * \return The absolute value of \p value.
  */
 inline int64x64_t Abs (const int64x64_t &value)
 {
@@ -189,6 +184,8 @@
  * \ingroup highprec
  * Minimum.
  *
+ * \param [in] a The first value.
+ * \param [in] b The second value.
  * \return The smaller of the arguments.
  */
 inline int64x64_t Min (const int64x64_t &a, const int64x64_t &b)
@@ -199,6 +196,8 @@
  * \ingroup highprec
  * Maximum.
  *
+ * \param [in] a The first value.
+ * \param [in] b The second value.
  * \return The larger of the arguments.
  */
 inline int64x64_t Max (const int64x64_t &a, const int64x64_t &b)
diff -Naur ns-3.21/src/core/model/integer.cc ns-3.22/src/core/model/integer.cc
--- ns-3.21/src/core/model/integer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/integer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,14 +22,29 @@
 #include "log.h"
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("Integer");
+/**
+ * \file
+ * \ingroup attribute_Integer
+ * Integer attribute value implementations.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Integer");
+
 ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME (int64_t, Integer);
 
 namespace internal {
 
+/**
+ * \ingroup attribute_Integer
+ * Make an Integer attribute checker with embedded numeric type name.
+ *
+ * \param min The minimum allowed value.
+ * \param max The maximum allowed value.
+ * \param name The original type name ("int8_t", "int16_t", _etc_.).
+ * \returns The AttributeChecker.
+ */
 Ptr<const AttributeChecker>
 MakeIntegerChecker (int64_t min, int64_t max, std::string name)
 {
diff -Naur ns-3.21/src/core/model/integer.h ns-3.22/src/core/model/integer.h
--- ns-3.21/src/core/model/integer.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/integer.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,37 +25,60 @@
 #include <stdint.h>
 #include <limits>
 
+/**
+ * \file
+ * \ingroup attribute_Integer
+ * Integer attribute value declarations and template implementations.
+ */
+
 namespace ns3 {
 
+//  Additional docs for class IntegerValue:
 /**
- * \ingroup attribute
- * \class ns3::IntegerValue
- * \brief Hold a signed integer type
- *
- * \anchor int8_t
- * \anchor int16_t
- * \anchor int32_t
- * \anchor int64_t
+ * Hold a signed integer type
  *
  * This class can be used to hold variables of signed integer
  * type such as int8_t, int16_t, int32_t, int64_t, or,
  * int, etc.
  */
-
 ATTRIBUTE_VALUE_DEFINE_WITH_NAME (int64_t, Integer);
 ATTRIBUTE_ACCESSOR_DEFINE (Integer);
 
 template <typename T>
 Ptr<const AttributeChecker> MakeIntegerChecker (void);
 
+/**
+ * Make a checker with a minimum value.
+ *
+ * The minimum value is included in the allowed range.
+ *
+ * \param [in] min The minimum value.
+ * \returns The AttributeChecker.
+ * \see AttributeChecker
+ */
 template <typename T>
 Ptr<const AttributeChecker> MakeIntegerChecker (int64_t min);
 
+/**
+ * Make a checker with a minimum and a maximum value.
+ *
+ * The minimum and maximum values are included in the allowed range.
+ *
+ * \param [in] min The minimum value.
+ * \param [in] max The maximum value.
+ * \returns The AttributeChecker.
+ * \see AttributeChecker
+ */
 template <typename T>
 Ptr<const AttributeChecker> MakeIntegerChecker (int64_t min, int64_t max);
 
 } // namespace ns3
 
+
+/***************************************************************
+ *  Implementation of the templates declared above.
+ ***************************************************************/
+
 #include "type-name.h"
 
 namespace ns3 {
diff -Naur ns-3.21/src/core/model/int-to-type.h ns-3.22/src/core/model/int-to-type.h
--- ns-3.21/src/core/model/int-to-type.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/int-to-type.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,17 +1,51 @@
+/* -*- 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
+ *
+ */
+
 #ifndef INT_TO_TYPE_H
 #define INT_TO_TYPE_H
 
+/**
+ * \file
+ * ns3::IntToType template class.
+ */
+
 namespace ns3 {
 
 /**
+ * Convert an integer into a type.
+ *
  * This trivial template is extremely useful, as explained in
- * "Modern C++ Design", p29, section 2.4, 
- * "Mapping Integral Constants to Types"
+ * "Modern C++ Design", p 29, section 2.4, 
+ * "Mapping Integral Constants to Types".
+ *
+ * For an example, see timer-impl.h
+ *
+ * \tparam v The integral constant value distinguishing this type
+ *           from other values.
  */
 template <int v>
 struct IntToType
 {
-  enum v_e { value = v};
+  /** Enumeration holding the type-specific value. */
+  enum v_e {
+    value = v  /**< The integer value distinguishing this type. */
+  };
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/core/model/list-scheduler.cc ns-3.22/src/core/model/list-scheduler.cc
--- ns-3.21/src/core/model/list-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/list-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,9 @@
 #include <string>
 #include "assert.h"
 
-NS_LOG_COMPONENT_DEFINE ("ListScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ListScheduler");
 
 NS_OBJECT_ENSURE_REGISTERED (ListScheduler);
 
diff -Naur ns-3.21/src/core/model/log.cc ns-3.22/src/core/model/log.cc
--- ns-3.21/src/core/model/log.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/log.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,29 +34,55 @@
 #include <cstdlib>
 #endif
 
+/**
+ * \file
+ * \ingroup logging
+ * Debug message logging implementation.
+ */
+
+
 namespace ns3 {
 
+/**
+ * \ingroup logging
+ * The LogTimePrinter.
+ * This is private to the logging implementation.
+ */
 static LogTimePrinter g_logTimePrinter = 0;
+/**
+ * \ingroup logging
+ * The LogNodePrinter.
+ */
 static LogNodePrinter g_logNodePrinter = 0;
 
-typedef std::map<std::string, LogComponent *> ComponentList;
-typedef std::map<std::string, LogComponent *>::iterator ComponentListI;
-
-static class PrintList
+/**
+ * \ingroup logging
+ * Handler for \c print-list token in NS_LOG
+ * to print the list of log components.
+ * This is private to the logging implementation.
+ */
+class PrintList
 {
 public:
-  PrintList ();
-} g_printList;
+  PrintList ();  //<! Constructor, prints the list and exits.
+};
 
-static 
-ComponentList *GetComponentList (void)
+/**
+ * Invoke handler for \c print-list in NS_LOG environment variable.
+ * This is private to the logging implementation.
+ */
+static PrintList g_printList;
+
+  
+/* static */
+LogComponent::ComponentList *
+LogComponent::GetComponentList (void)
 {
-  static ComponentList components;
+  static LogComponent::ComponentList components;
   return &components;
 }
 
 
-
 PrintList::PrintList ()
 {
 #ifdef HAVE_GETENV
@@ -85,13 +111,14 @@
 
 
 LogComponent::LogComponent (const std::string & name,
+                            const std::string & file,
                             const enum LogLevel mask /* = 0 */)
-  : m_levels (0), m_mask (mask), m_name (name)
+  : m_levels (0), m_mask (mask), m_name (name), m_file (file)
 {
   EnvVarCheck ();
 
-  ComponentList *components = GetComponentList ();
-  for (ComponentListI i = components->begin ();
+  LogComponent::ComponentList *components = GetComponentList ();
+  for (LogComponent::ComponentList::const_iterator i = components->begin ();
        i != components->end ();
        i++)
     {
@@ -278,6 +305,12 @@
   return m_name.c_str ();
 }
 
+std::string
+LogComponent::File (void) const
+{
+  return m_file;
+}
+
 /* static */
 std::string
 LogComponent::GetLevelLabel(const enum LogLevel level)
@@ -317,8 +350,8 @@
 void 
 LogComponentEnable (char const *name, enum LogLevel level)
 {
-  ComponentList *components = GetComponentList ();
-  ComponentListI i;
+  LogComponent::ComponentList *components = LogComponent::GetComponentList ();
+  LogComponent::ComponentList::const_iterator i;
   for (i = components->begin (); 
        i != components->end (); 
        i++)
@@ -341,8 +374,8 @@
 void 
 LogComponentEnableAll (enum LogLevel level)
 {
-  ComponentList *components = GetComponentList ();
-  for (ComponentListI i = components->begin ();
+  LogComponent::ComponentList *components = LogComponent::GetComponentList ();
+  for (LogComponent::ComponentList::const_iterator i = components->begin ();
        i != components->end ();
        i++)
     {
@@ -353,8 +386,8 @@
 void 
 LogComponentDisable (char const *name, enum LogLevel level)
 {
-  ComponentList *components = GetComponentList ();
-  for (ComponentListI i = components->begin ();
+  LogComponent::ComponentList *components = LogComponent::GetComponentList ();
+  for (LogComponent::ComponentList::const_iterator i = components->begin ();
        i != components->end ();
        i++)
     {
@@ -369,8 +402,8 @@
 void 
 LogComponentDisableAll (enum LogLevel level)
 {
-  ComponentList *components = GetComponentList ();
-  for (ComponentListI i = components->begin ();
+  LogComponent::ComponentList *components = LogComponent::GetComponentList ();
+  for (LogComponent::ComponentList::const_iterator i = components->begin ();
        i != components->end ();
        i++)
     {
@@ -381,8 +414,8 @@
 void 
 LogComponentPrintList (void)
 {
-  ComponentList *components = GetComponentList ();
-  for (ComponentListI i = components->begin ();
+  LogComponent::ComponentList *components = LogComponent::GetComponentList ();
+  for (LogComponent::ComponentList::const_iterator i = components->begin ();
        i != components->end ();
        i++)
     {
@@ -450,11 +483,19 @@
     }
 }
 
+/**
+ * \ingroup
+ * Check if a log component exists.
+ * This is private to the logging implementation.
+ *
+ * \param componentName The putative log component name.
+ * \returns \c true if \c componentName exists.
+ */
 static bool ComponentExists(std::string componentName) 
 {
   char const*name=componentName.c_str();
-  ComponentList *components = GetComponentList ();
-  ComponentListI i;
+  LogComponent::ComponentList *components = LogComponent::GetComponentList ();
+  LogComponent::ComponentList::const_iterator i;
   for (i = components->begin ();
        i != components->end ();
        i++)
@@ -469,6 +510,10 @@
   return false;    
 }
 
+/**
+ * Parse the \c NS_LOG environment variable.
+ * This is private to the logging implementation.
+ */
 static void CheckEnvironmentVariables (void)
 {
 #ifdef HAVE_GETENV
diff -Naur ns-3.21/src/core/model/log.h ns-3.22/src/core/model/log.h
--- ns-3.21/src/core/model/log.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/log.h	2015-02-05 15:46:22.000000000 -0800
@@ -29,7 +29,11 @@
 #include "log-macros-enabled.h"
 #include "log-macros-disabled.h"
 
-namespace ns3 {
+/**
+ * \file
+ * \ingroup logging
+ * Debug message logging
+ */
 
 /**
  * \ingroup debugging
@@ -38,124 +42,130 @@
  * \brief Logging functions and macros
  *
  * LOG functionality: macros which allow developers to
- * send information to the std::clog output stream. All logging messages 
- * are disabled by default. To enable selected logging 
+ * send information to the \c std::clog output stream.
+ *
+ * All logging messages are disabled by default. To enable selected logging 
  * messages, use the ns3::LogComponentEnable
  * function or use the NS_LOG environment variable 
  *
  * Use the environment variable NS_LOG to define a ':'-separated list of
- * logging components to enable. For example (using bash syntax), 
- * NS_LOG="OlsrAgent" would enable one component at all log levels. 
- * NS_LOG="OlsrAgent:Ipv4L3Protocol" would enable two components, 
- * at all log levels, etc.
- * NS_LOG="*" will enable all available log components at all levels.
+ * logging components to enable. For example (using bash syntax),
+ * \code
+ *   $ NS_LOG="OlsrAgent" ./waf --run ...
+ * \endcode
+ * would enable one component at all log levels.
+ * \code
+ *   $NS_LOG="OlsrAgent:Ipv4L3Protocol" ./waf --run ...
+ * \endcode
+ * would enable two components, at all log levels, etc.
+ * \c NS_LOG="*" will enable all available log components at all levels.
  *
  * To control more selectively the log levels for each component, use
- * this syntax: NS_LOG='Component1=func|warn:Component2=error|debug'
- * This example would enable the 'func', and 'warn' log
- * levels for 'Component1' and the 'error' and 'debug' log levels
- * for 'Component2'.  The wildcard can be used here as well.  For example
- * NS_LOG='*=level_all|prefix' would enable all log levels and prefix all
+ * this syntax:
+ * \code
+ *   $ NS_LOG='Component1=func|warn:Component2=error|debug'
+ * \endcode
+ * This example would enable the \c func, and \c warn log
+ * levels for 'Component1' and the \c error and \c debug log levels
+ * for 'Component2'.  The wildcard '*' can be used here as well.  For example
+ * \c NS_LOG='*=level_all|prefix' would enable all log levels and prefix all
  * prints with the component and function names.
  *
  * A note on NS_LOG_FUNCTION() and NS_LOG_FUNCTION_NOARGS():
- * generally, use of (at least) NS_LOG_FUNCTION(this) is preferred.
- * Use NS_LOG_FUNCTION_NOARGS() only in static functions.
+ * generally, use of (at least) NS_LOG_FUNCTION(this) is preferred,
+ * with the any function parameters added:
+ * \code
+ *   NS_LOG_FUNCTION (this << arg1 << args);
+ * \endcode
+ * Use NS_LOG_FUNCTION_NOARGS() only in static functions with no arguments.
  */
+/** @{ */
+
+
+namespace ns3 {
 
 /**
- *  \ingroup logging
- *
  *  Logging severity classes and levels.
  */
 enum LogLevel {
-  LOG_NONE           = 0x00000000, //!< no logging
+  LOG_NONE           = 0x00000000, //!< No logging.
 
-  LOG_ERROR          = 0x00000001, //!< serious error messages only
-  LOG_LEVEL_ERROR    = 0x00000001,
+  LOG_ERROR          = 0x00000001, //!< Serious error messages only.
+  LOG_LEVEL_ERROR    = 0x00000001, //!< LOG_ERROR and above.
 
-  LOG_WARN           = 0x00000002, //!< warning messages
-  LOG_LEVEL_WARN     = 0x00000003,
+  LOG_WARN           = 0x00000002, //!< Warning messages.
+  LOG_LEVEL_WARN     = 0x00000003, //!< LOG_WARN and above.
 
-  LOG_DEBUG          = 0x00000004, //!< rare ad-hoc debug messages
-  LOG_LEVEL_DEBUG    = 0x00000007,
+  LOG_DEBUG          = 0x00000004, //!< Rare ad-hoc debug messages.
+  LOG_LEVEL_DEBUG    = 0x00000007, //!< LOG_DEBUG and above.
 
-  LOG_INFO           = 0x00000008, //!< informational messages (e.g., banners)
-  LOG_LEVEL_INFO     = 0x0000000f,
+  LOG_INFO           = 0x00000008, //!< Informational messages (e.g., banners).
+  LOG_LEVEL_INFO     = 0x0000000f, //!< LOG_INFO and above.
 
-  LOG_FUNCTION       = 0x00000010, //!< function tracing
-  LOG_LEVEL_FUNCTION = 0x0000001f, 
+  LOG_FUNCTION       = 0x00000010, //!< Function tracing.
+  LOG_LEVEL_FUNCTION = 0x0000001f, //!< LOG_FUNCTION and above.
 
-  LOG_LOGIC          = 0x00000020, //!< control flow tracing within functions
-  LOG_LEVEL_LOGIC    = 0x0000003f,
+  LOG_LOGIC          = 0x00000020, //!< Control flow tracing within functions.
+  LOG_LEVEL_LOGIC    = 0x0000003f, //!< LOG_LOGIC and above.
 
-  LOG_ALL            = 0x0fffffff, //!< print everything
-  LOG_LEVEL_ALL      = LOG_ALL,
+  LOG_ALL            = 0x0fffffff, //!< Print everything.
+  LOG_LEVEL_ALL      = LOG_ALL,    //!< Print everything.
 
-  LOG_PREFIX_FUNC    = 0x80000000, //!< prefix all trace prints with function
-  LOG_PREFIX_TIME    = 0x40000000, //!< prefix all trace prints with simulation time
-  LOG_PREFIX_NODE    = 0x20000000, //!< prefix all trace prints with simulation node
-  LOG_PREFIX_LEVEL   = 0x10000000, //!< prefix all trace prints with log level (severity)
-  LOG_PREFIX_ALL     = 0xf0000000  //!< all prefixes
+  LOG_PREFIX_FUNC    = 0x80000000, //!< Prefix all trace prints with function.
+  LOG_PREFIX_TIME    = 0x40000000, //!< Prefix all trace prints with simulation time.
+  LOG_PREFIX_NODE    = 0x20000000, //!< Prefix all trace prints with simulation node.
+  LOG_PREFIX_LEVEL   = 0x10000000, //!< Prefix all trace prints with log level (severity).
+  LOG_PREFIX_ALL     = 0xf0000000  //!< All prefixes.
 };
 
 /**
- * \ingroup logging
- *
  * Enable the logging output associated with that log component.
  *
  * The logging output can be later disabled with a call
  * to ns3::LogComponentDisable.
  *
  * Same as running your program with the NS_LOG environment
- * variable set as NS_LOG='name=level'
+ * variable set as NS_LOG='name=level'.
  *
- * \param name a log component name
- * \param level a logging level
+ * \param name The log component name.
+ * \param level The logging level.
  */
 void LogComponentEnable (char const *name, enum LogLevel level);
 
 /**
- * \ingroup logging
- *
  * Enable the logging output for all registered log components.
  *
  * Same as running your program with the NS_LOG environment
  * variable set as NS_LOG='*=level'
  *
- * \param level a logging level
+ * \param level The logging level.
  */
 void LogComponentEnableAll (enum LogLevel level);
 
 
 /**
- * \ingroup logging
- *
  * Disable the logging output associated with that log component.
  *
  * The logging output can be later re-enabled with a call
- * to ns3::LogComponentEnable.
+ * to LogComponentEnable.
  *
- * \param name a log component name
- * \param level a logging level
+ * \param name The log component name.
+ * \param level The logging level.
  */
 void LogComponentDisable (char const *name, enum LogLevel level);
 
 /**
- * \ingroup logging
- *
  * Disable all logging for all components.
  *
- * \param level a logging level
+ * \param level The logging level.
  */
 void LogComponentDisableAll (enum LogLevel level);
 
 
 } // namespace ns3
 
+
 /**
- * \ingroup logging
- *
  * Define a Log component with a specific name.
  *
  * This macro should be used at the top of every file in which you want 
@@ -165,70 +175,79 @@
  * ns3::LogComponentDisable functions or with the NS_LOG
  * environment variable.
  *
- * \param name a string
+ * LogComponent names should be simple string tokens, _i.e._,
+ * "ArfWifiManager", not "ns3::ArfWifiManager".
+ *
+ * This macro should be placed within namespace ns3.  If functions
+ * outside of namespace ns3 require access to logging, the preferred
+ * solution is to add the following 'using' directive at file scope,
+ * outside of namespace ns3, and after the inclusion of
+ * NS_LOG_COMPONENT_DEFINE, such as follows:
+ * \code
+ *   namespace ns3 {
+ *     NS_LOG_COMPONENT_DEFINE ("...");
+ *
+ *     // Definitions within the ns3 namespace
+ *
+ *   } // namespace ns3
+ *
+ *   using ns3::g_log;
+ *
+ *   // Further definitions outside of the ns3 namespace
+ *\endcode
+ *
+ * \param name The log component name.
  */
 #define NS_LOG_COMPONENT_DEFINE(name)                           \
-  static ns3::LogComponent g_log = ns3::LogComponent (name)
+  static ns3::LogComponent g_log = ns3::LogComponent (name, __FILE__)
 
 /**
- * \ingroup logging
- *
  * Define a logging component with a mask.
  *
  * See LogComponent().
  *
- * \param name a string
- * \param mask the default mask
+ * \param name The log component name.
+ * \param mask The default mask.
  */
 #define NS_LOG_COMPONENT_DEFINE_MASK(name, mask)                \
-  static ns3::LogComponent g_log = ns3::LogComponent (name, mask)
+  static ns3::LogComponent g_log = ns3::LogComponent (name, __FILE__, mask)
 
 /**
- * \ingroup logging
- *
  * Use \ref NS_LOG to output a message of level LOG_ERROR.
  *
- * \param msg the message to log
+ * \param msg The message to log.
  */
 #define NS_LOG_ERROR(msg) \
   NS_LOG (ns3::LOG_ERROR, msg)
 
 /**
- * \ingroup logging
- *
  * Use \ref NS_LOG to output a message of level LOG_WARN.
  *
- * \param msg the message to log
+ * \param msg The message to log.
  */
 #define NS_LOG_WARN(msg) \
   NS_LOG (ns3::LOG_WARN, msg)
 
 /**
- * \ingroup logging
- *
  * Use \ref NS_LOG to output a message of level LOG_DEBUG.
  *
- * \param msg the message to log
+ * \param msg The message to log.
  */
 #define NS_LOG_DEBUG(msg) \
   NS_LOG (ns3::LOG_DEBUG, msg)
 
 /**
- * \ingroup logging
- *
  * Use \ref NS_LOG to output a message of level LOG_INFO.
  *
- * \param msg the message to log
+ * \param msg The message to log.
  */
 #define NS_LOG_INFO(msg) \
   NS_LOG (ns3::LOG_INFO, msg)
 
 /**
- * \ingroup logging
- *
  * Use \ref NS_LOG to output a message of level LOG_LOGIC
  *
- * \param msg the message to log
+ * \param msg The message to log.
  */
 #define NS_LOG_LOGIC(msg) \
   NS_LOG (ns3::LOG_LOGIC, msg)
@@ -237,85 +256,145 @@
 namespace ns3 {
 
 /**
- * \ingroup logging
- *
  * Print the list of logging messages available.
  * Same as running your program with the NS_LOG environment
  * variable set as NS_LOG=print-list
  */
 void LogComponentPrintList (void);
 
+/**
+ * Function signature for prepending the simulation time
+ * to a log message.
+ *
+ * \param os The output stream to print on.
+ */
 typedef void (*LogTimePrinter)(std::ostream &os);
+/**
+ * Function signature for prepending the node id
+ * to a log message.
+ *
+ * \param os The output stream to print on.
+ */
 typedef void (*LogNodePrinter)(std::ostream &os);
 
-void LogSetTimePrinter (LogTimePrinter);
+/**
+ * Set the LogTimePrinter function to be used
+ * to prepend log messages with the simulation time.
+ *
+ * \param lp The LogTimePrinter function.
+ */
+void LogSetTimePrinter (LogTimePrinter lp);
+/**
+ * Get the LogTimePrinter function currently in use.
+ * \returns The LogTimePrinter function.
+ */
 LogTimePrinter LogGetTimePrinter (void);
 
-void LogSetNodePrinter (LogNodePrinter);
+/**
+ * Set the LogNodePrinter function to be used
+ * to prepend log messages with the node id.
+ *
+ * \param np The LogNodePrinter function.
+ */
+void LogSetNodePrinter (LogNodePrinter np);
+/**
+ * Get the LogNodePrinter function currently in use.
+ * \returns The LogNodePrinter function.
+ */
 LogNodePrinter LogGetNodePrinter (void);
 
 
 /**
- * \ingroup logging
- *
  * A single log component configuration.
  */
 class LogComponent
 {
 public:
   /**
-   * Constructor
+   * Constructor.
    *
-   * \param [in] name the user-visible name for this component.
+   * \param [in] name The user-visible name for this component.
+   * \param [in] file The source code file which defined this LogComponent.
    * \param [in] mask LogLevels blocked for this LogComponent.  Blocking
    *                  a log level helps prevent recursion by logging in
    *                  functions which help implement the logging facility.
    */
-  LogComponent (const std::string & name, const enum LogLevel mask = LOG_NONE);
+  LogComponent (const std::string & name,
+                const std::string & file,
+                const enum LogLevel mask = LOG_NONE);
   /**
-   * Check if this LogComponent is enabled for \pname{level}
+   * Check if this LogComponent is enabled for \c level
    *
-   * \param [in] level the level to check for.
-   * \return true if \pname{level} is enabled.
+   * \param [in] level The level to check for.
+   * \return \c true if we are enabled at \c level.
    */
   bool IsEnabled (const enum LogLevel level) const;
   /**
    * Check if all levels are disabled.
    *
-   * \return true if all levels are disabled.
+   * \return \c true if all levels are disabled.
    */
   bool IsNoneEnabled (void) const;
   /**
-   * Enable this LogComponent at \pname{level}
+   * Enable this LogComponent at \c level
    *
-   * \param [in] level the LogLevel to enable.
+   * \param [in] level The LogLevel to enable.
    */
   void Enable (const enum LogLevel level);
   /**
-   * Disable logging at \pname{level} for this LogComponent.
+   * Disable logging at \c level for this LogComponent.
    *
-   * \param [in] level the LogLevel to disable.
+   * \param [in] level The LogLevel to disable.
    */
   void Disable (const enum LogLevel level);
   /**
    * Get the name of this LogComponent.
    *
-   * \return the name of this LogComponent.
+   * \return The name of this LogComponent.
    */
   char const *Name (void) const;
   /**
+   * Get the compilation unit defining this LogComponent.
+   * \returns The file name.
+   */
+  std::string File (void) const;
+  /**
    * Get the string label for the given LogLevel.
    *
-   * \param [in] level the LogLevel to get the label for.
-   * \return the string label for \pname{level}
+   * \param [in] level The LogLevel to get the label for.
+   * \return The string label for \c level.
    */
   static std::string GetLevelLabel(const enum LogLevel level);
   /**
    * Prevent the enabling of a specific LogLevel.
    *
-   * \param level the LogLevel to block
+   * \param level The LogLevel to block.
    */
   void SetMask (const enum LogLevel level);
+
+  /**
+   * LogComponent name map.
+   *
+   * \internal
+   * This should really be considered an internal API.
+   * It is exposed here to allow print-introspected-doxygen.cc
+   * to generate a list of all LogComponents.
+   */
+  typedef std::map<std::string, LogComponent *> ComponentList;
+
+  /**
+   * Get the list of LogComponnents.
+   *
+   * \internal
+   * This should really be considered an internal API.
+   * It is exposed here to allow print-introspected-doxygen.cc
+   * to generate a list of all LogComponents.
+   *
+   * \returns The list of LogComponents.
+   */
+  static ComponentList *GetComponentList (void);
+
+  
 private:
   /**
    * Parse the `NS_LOG` environment variable for options relating to this
@@ -323,15 +402,15 @@
    */
   void EnvVarCheck (void);
   
-  int32_t     m_levels;  //!< Enabled LogLevels
-  int32_t     m_mask;    //!< Blocked LogLevels
-  std::string m_name;    //!< LogComponent name
+  int32_t     m_levels;  //!< Enabled LogLevels.
+  int32_t     m_mask;    //!< Blocked LogLevels.
+  std::string m_name;    //!< LogComponent name.
+  std::string m_file;    //!< File defining this LogComponent.
 
 };  // class LogComponent
 
+  
 /**
- * \ingroup logging
- *
  * Insert `, ` when streaming function arguments.
  */
 class ParameterLogger
@@ -348,9 +427,10 @@
 
   /**
    * Write a function parameter on the output stream,
-   * separating paramters after the first by `,` strings.
+   * separating parameters after the first by `,` strings.
    *
-   * \param [in] param the function parameter
+   * \param [in] param The function parameter.
+   * \return This ParameterLogger, so it's chainable.
    */
   template<typename T>
   ParameterLogger& operator<< (T param)
@@ -370,5 +450,6 @@
 
 } // namespace ns3
 
+/**@}*/  // \ingroup logging
 
 #endif /* NS3_LOG_H */
diff -Naur ns-3.21/src/core/model/make-event.cc ns-3.22/src/core/model/make-event.cc
--- ns-3.21/src/core/model/make-event.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/make-event.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,10 +1,36 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 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
+ *
+ */
+
 #include "make-event.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("MakeEvent");
+/**
+ * \file
+ * \ingroup events
+ * ns3::MakeEvent(void(*f)(void)) implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MakeEvent");
+
+// This is the only non-templated version of MakeEvent.
 EventImpl * MakeEvent (void (*f)(void))
 {
   NS_LOG_FUNCTION (f);
diff -Naur ns-3.21/src/core/model/make-event.h ns-3.22/src/core/model/make-event.h
--- ns-3.21/src/core/model/make-event.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/make-event.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,59 +1,264 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 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
+ *
+ */
+
 #ifndef MAKE_EVENT_H
 #define MAKE_EVENT_H
 
+/**
+ * \file
+ * \ingroup events
+ * ns3::MakeEvent function declarations and template implementation.
+ */
+
 namespace ns3 {
 
 class EventImpl;
 
+/**
+ * \ingroup events
+ * \defgroup makeeventmemptr MakeEvent from Member Function Pointer.
+ *
+ * Create EventImpl instances from class member functions which take
+ * varying numbers of arguments.
+ */
+/**
+ * \ingroup makeeventmemptr
+ * @{
+ */
+/**
+ * Make an EventImpl from class method members which take
+ * varying numbers of arguments.
+ *
+ * \tparam MEM The class method function signature.
+ * \tparam OBJ The class type holding the method.
+ * \param mem_ptr Class method member function pointer
+ * \param obj Class instance.
+ * \returns The constructed EventImpl.
+ */
 template <typename MEM, typename OBJ>
 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj);
 
+/**
+ * \copybrief MakeEvent(MEM,OBJ)
+ * \tparam MEM The class method function signature.
+ * \tparam OBJ The class type holding the method.
+ * \tparam T1 Type of the argument to the underlying function.
+ * \param mem_ptr Class method member function pointer
+ * \param obj Class instance.
+ * \param a1 Argument value to be bound to the underlying function.
+ * \returns The constructed EventImpl.
+ */
 template <typename MEM, typename OBJ,
           typename T1>
 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1);
 
+/**
+ * \copybrief MakeEvent(MEM,OBJ)
+ * \tparam MEM The class method function signature.
+ * \tparam OBJ The class type holding the method.
+ * \tparam T1 Type of the first argument to the underlying function.
+ * \tparam T2 Type of the second argument to the underlying function.
+ * \param mem_ptr Class method member function pointer
+ * \param obj Class instance.
+ * \param a1 First argument value to be bound to the underlying function.
+ * \param a2 Second argument value to be bound to the underlying function.
+ * \returns The constructed EventImpl.
+ */
 template <typename MEM, typename OBJ,
           typename T1, typename T2>
 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
 
+/**
+ * \copybrief MakeEvent(MEM,OBJ)
+ * \tparam MEM The class method function signature.
+ * \tparam OBJ The class type holding the method.
+ * \tparam T1 Type of the first argument to the underlying function.
+ * \tparam T2 Type of the second argument to the underlying function.
+ * \tparam T3 Type of the third argument to the underlying function.
+ * \param mem_ptr Class method member function pointer
+ * \param obj Class instance.
+ * \param a1 First argument value to be bound to the underlying function.
+ * \param a2 Second argument value to be bound to the underlying function.
+ * \param a3 Third argument value to be bound to the underlying function.
+ * \returns The constructed EventImpl.
+ */
 template <typename MEM, typename OBJ,
           typename T1, typename T2, typename T3>
 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
 
+/**
+ * \copybrief MakeEvent(MEM,OBJ)
+ * \tparam MEM The class method function signature.
+ * \tparam OBJ The class type holding the method.
+ * \tparam T1 Type of the first argument to the underlying function.
+ * \tparam T2 Type of the second argument to the underlying function.
+ * \tparam T3 Type of the third argument to the underlying function.
+ * \tparam T4 Type of the fourth argument to the underlying function.
+ * \param mem_ptr Class method member function pointer
+ * \param obj Class instance.
+ * \param a1 First argument value to be bound to the underlying function.
+ * \param a2 Second argument value to be bound to the underlying function.
+ * \param a3 Third argument value to be bound to the underlying function.
+ * \param a4 Fourth argument value to be bound to the underlying function.
+ * \returns The constructed EventImpl.
+ */
 template <typename MEM, typename OBJ,
           typename T1, typename T2, typename T3, typename T4>
 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
 
+/**
+ * \copybrief MakeEvent(MEM,OBJ)
+ * \tparam MEM The class method function signature.
+ * \tparam OBJ The class type holding the method.
+ * \tparam T1 Type of the first argument to the underlying function.
+ * \tparam T2 Type of the second argument to the underlying function.
+ * \tparam T3 Type of the third argument to the underlying function.
+ * \tparam T4 Type of the fourth argument to the underlying function.
+ * \tparam T5 Type of the fifth argument to the underlying function.
+ * \param mem_ptr Class method member function pointer
+ * \param obj Class instance.
+ * \param a1 First argument value to be bound to the underlying function.
+ * \param a2 Second argument value to be bound to the underlying function.
+ * \param a3 Third argument value to be bound to the underlying function.
+ * \param a4 Fourth argument value to be bound to the underlying function.
+ * \param a5 Fifh argument value to be bound to the underlying function.
+ * \returns The constructed EventImpl.
+ */
 template <typename MEM, typename OBJ,
           typename T1, typename T2, typename T3, typename T4, typename T5>
 EventImpl * MakeEvent (MEM mem_ptr, OBJ obj,
                        T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
-
+/**@}*/
+  
+/**
+ * \ingroup events
+ * \defgroup makeeventfnptr MakeEvent from Function Pointers.
+ *
+ * Create EventImpl instances from function pointers which take
+ * varying numbers of arguments.
+ *
+ * @{
+ */
+/**
+ * Make an EventImpl from a function pointer taking varying numbers
+ * of arguments.
+ *
+ * \param f The function pointer.
+ * \returns The constructed EventImpl.
+ */
 EventImpl * MakeEvent (void (*f)(void));
+
+/**
+ * \copybrief MakeEvent(void(*f)(void))
+ * \tparam U1 Formal type of the argument to the function.
+ * \tparam T1 Actual type of the argument to the function.
+ * \param f The function pointer.
+ * \param a1 Argument to be bound to the function.
+ * \returns The constructed EventImpl.
+ */
 template <typename U1,
           typename T1>
 EventImpl * MakeEvent (void (*f)(U1), T1 a1);
 
+/**
+ * \copybrief MakeEvent(void(*f)(void))
+ * \tparam U1 Formal type of the first argument to the function.
+ * \tparam U2 Formal type of the second argument to the function.
+ * \tparam T1 Actual type of the first argument to the function.
+ * \tparam T2 Actual type of the second argument to the function.
+ * \param f The function pointer.
+ * \param a1 First argument to be bound to the function.
+ * \param a2 Second argument to be bound to the function.
+ * \returns The constructed EventImpl.
+ */
 template <typename U1, typename U2,
           typename T1, typename T2>
 EventImpl * MakeEvent (void (*f)(U1,U2), T1 a1, T2 a2);
 
+/**
+ * \copybrief MakeEvent(void(*f)(void))
+ * \tparam U1 Formal type of the first argument to the function.
+ * \tparam U2 Formal type of the second argument to the function.
+ * \tparam U3 Formal type of the third argument to the function.
+ * \tparam T1 Actual type of the first argument to the function.
+ * \tparam T2 Actual type of the second argument to the function.
+ * \tparam T3 Actual type of the third argument to the function.
+ * \param f The function pointer.
+ * \param a1 First argument to be bound to the function.
+ * \param a2 Second argument to be bound to the function.
+ * \param a3 Third argument to be bound to the function.
+ * \returns The constructed EventImpl.
+ */
 template <typename U1, typename U2, typename U3,
           typename T1, typename T2, typename T3>
 EventImpl * MakeEvent (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
 
+/**
+ * \copybrief MakeEvent(void(*f)(void))
+ * \tparam U1 Formal type of the first argument to the function.
+ * \tparam U2 Formal type of the second argument to the function.
+ * \tparam U3 Formal type of the third argument to the function.
+ * \tparam U4 Formal type of the fourth argument to the function.
+ * \tparam T1 Actual type of the first argument to the function.
+ * \tparam T2 Actual type of the second argument to the function.
+ * \tparam T3 Actual type of the third argument to the function.
+ * \tparam T4 Actual type of the fourth argument to the function.
+ * \param f The function pointer.
+ * \param a1 First argument to be bound to the function.
+ * \param a2 Second argument to be bound to the function.
+ * \param a3 Third argument to be bound to the function.
+ * \param a4 Fourth argument to be bound to the function.
+ * \returns The constructed EventImpl.
+ */
 template <typename U1, typename U2, typename U3, typename U4,
           typename T1, typename T2, typename T3, typename T4>
 EventImpl * MakeEvent (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
 
+/**
+ * \copybrief MakeEvent(void(*f)(void))
+ * \tparam U1 Formal type of the first argument to the function.
+ * \tparam U2 Formal type of the second argument to the function.
+ * \tparam U3 Formal type of the third argument to the function.
+ * \tparam U4 Formal type of the fourth argument to the function.
+ * \tparam U5 Formal type of the fifth argument to the function.
+ * \tparam T1 Actual type of the first argument to the function.
+ * \tparam T2 Actual type of the second argument to the function.
+ * \tparam T3 Actual type of the third argument to the function.
+ * \tparam T4 Actual type of the fourth argument to the function.
+ * \tparam T5 Actual type of the fifth argument to the function.
+ * \param f The function pointer.
+ * \param a1 First argument to be bound to the function.
+ * \param a2 Second argument to be bound to the function.
+ * \param a3 Third argument to be bound to the function.
+ * \param a4 Fourth argument to be bound to the function.
+ * \param a5 Fifth argument to be bound to the function.
+ * \returns The constructed EventImpl.
+ */
 template <typename U1, typename U2, typename U3, typename U4, typename U5,
           typename T1, typename T2, typename T3, typename T4, typename T5>
 EventImpl * MakeEvent (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
+/**@}*/
 
 } // namespace ns3
 
 /********************************************************************
-   Implementation of templates defined above
+ *  Implementation of the templates declared above.
  ********************************************************************/
 
 #include "event-impl.h"
@@ -61,12 +266,36 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup makeeventmemptr
+ * Helper for the MakeEvent functions which take a class method.
+ *
+ * This helper converts a pointer to a reference.
+ *
+ * This is the generic template declaration (with empty body).
+ *
+ * \tparam T The class type.
+ */
 template <typename T>
 struct EventMemberImplObjTraits;
 
+/**
+ * \ingroup makeeventmemptr
+ * Helper for the MakeEvent functions which take a class method.
+ *
+ * This helper converts a pointer to a reference.
+ *
+ * This is the specialization for pointer types.
+ *
+ * \tparam T The class type.
+ */
 template <typename T>
 struct EventMemberImplObjTraits<T *>
 {
+  /**
+   * \param p Object pointer.
+   * \return A reference to the object pointed to by p.
+   */
   static T &GetReference (T *p)
   {
     return *p;
diff -Naur ns-3.21/src/core/model/map-scheduler.cc ns-3.22/src/core/model/map-scheduler.cc
--- ns-3.21/src/core/model/map-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/map-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include "log.h"
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("MapScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MapScheduler");
+
 NS_OBJECT_ENSURE_REGISTERED (MapScheduler);
 
 TypeId
diff -Naur ns-3.21/src/core/model/math.h ns-3.22/src/core/model/math.h
--- ns-3.21/src/core/model/math.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/math.h	2015-02-05 15:46:22.000000000 -0800
@@ -18,6 +18,9 @@
  * Christoph Moench-Tegeder <cmt@burggraben.net>
  */
 
+// It is recommended to include this header instead of <math.h> or 
+// <cmath> whenever the log2(x) function is needed.  See bug 1467.
+
 #ifndef MATH_H
 #define MATH_H
 
diff -Naur ns-3.21/src/core/model/names.h ns-3.22/src/core/model/names.h
--- ns-3.21/src/core/model/names.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/names.h	2015-02-05 15:46:22.000000000 -0800
@@ -366,8 +366,6 @@
 
 private:
   /**
-   * \internal
-   *
    * \brief Non-templated internal version of Names::Find
    *
    * \param path A string containing the path of the object to look for.
@@ -377,8 +375,6 @@
   static Ptr<Object> FindInternal (std::string path);
 
   /**
-   * \internal
-   *
    * \brief Non-templated internal version of Names::Find
    *
    * \param path A string containing the path to search for the object in.
@@ -389,8 +385,6 @@
   static Ptr<Object> FindInternal (std::string path, std::string name);
 
   /**
-   * \internal
-   *
    * \brief Non-templated internal version of Names::Find
    *
    * \param context A smart pointer to an object under which you want to look 
diff -Naur ns-3.21/src/core/model/nstime.h ns-3.22/src/core/model/nstime.h
--- ns-3.21/src/core/model/nstime.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/nstime.h	2015-02-05 15:46:22.000000000 -0800
@@ -146,8 +146,12 @@
       }
   }
   /**
+   * \name Numeric constructors.
+   *  Construct from a numeric value.
+   * @{
+   */
+  /**
    *  Construct from a numeric value.
-   *
    *  The current time resolution will be assumed as the unit.
    *  \param [in] v The value.
    *  @{
@@ -217,6 +221,7 @@
       }
   }
   /**@}*/
+  /**@}*/
   
   /**
    * \brief Construct Time object from common time expressions like "1ms"
@@ -496,6 +501,15 @@
    */
   TimeWithUnit As (const enum Unit unit) const;
 
+  /**
+   * TracedValue callback signature for Time
+   *
+   * \param [in] oldValue original value of the traced variable
+   * \param [in] newValue new value of the traced variable
+   */
+  typedef void (* TracedValueCallback)(const Time oldValue,
+                                       const Time newValue);
+  
 private:
   /** How to convert between other units and the current unit. */
   struct Information
@@ -794,7 +808,7 @@
 
 /**
  * \ingroup time
- * \defgroup timecivil Standard time units.
+ * \defgroup timecivil Standard Time Units.
  * \brief Convenience constructors in standard units.
  *
  * For example:
@@ -904,19 +918,8 @@
   return Time (ts);
 }
 
-/**
- * \ingroup time
- * \class ns3::TimeValue
- * \brief Attribute for objects of type ns3::Time
- */
 ATTRIBUTE_VALUE_DEFINE (Time);
-
-/**
- *  Attribute accessor function for Time
- *  @{
- */
 ATTRIBUTE_ACCESSOR_DEFINE (Time);
-/**@}*/
 
 /**
  *  \ingroup time
diff -Naur ns-3.21/src/core/model/object-base.cc ns-3.22/src/core/model/object-base.cc
--- ns-3.21/src/core/model/object-base.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object-base.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,12 +27,26 @@
 #include <cstdlib>
 #endif
 
-NS_LOG_COMPONENT_DEFINE ("ObjectBase");
+/**
+ * \file
+ * \ingroup object
+ * ns3::ObjectBase class implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ObjectBase");
+
 NS_OBJECT_ENSURE_REGISTERED (ObjectBase);
 
+/**
+ * Ensure the TypeId for ObjectBase gets fully configured
+ * to anchor the inheritance tree properly.
+ *
+ * \relates ns3::ObjectBase
+ *
+ * \return The TypeId for ObjectBase.
+ */
 static TypeId
 GetObjectIid (void)
 {
diff -Naur ns-3.21/src/core/model/object-base.h ns-3.22/src/core/model/object-base.h
--- ns-3.21/src/core/model/object-base.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object-base.h	2015-02-05 15:46:22.000000000 -0800
@@ -26,8 +26,14 @@
 #include <list>
 
 /**
+ * \file
  * \ingroup object
- * \brief Register the class in the ns-3 factory.
+ * ns3::ObjectBase class declaration and NS_OBJECT_ENSURE_REGISTERED() definition.
+ */
+
+/**
+ * \ingroup object
+ * \brief Register an Object subclass with the TypeId system.
  *
  * This macro should be invoked once for every class which
  * defines a new GetTypeId method.
@@ -35,14 +41,15 @@
  * If the class is in a namespace, then the macro call should also be
  * in the namespace.
  */
-#define NS_OBJECT_ENSURE_REGISTERED(type)       \
-  static struct X ## type ## RegistrationClass      \
-  {                                             \
-    X ## type ## RegistrationClass () {             \
-      ns3::TypeId tid = type::GetTypeId ();     \
-      tid.GetParent ();                         \
-    }                                           \
-  } x_ ## type ## RegistrationVariable
+#define NS_OBJECT_ENSURE_REGISTERED(type)               \
+  static struct Object ## type ## RegistrationClass     \
+  {                                                     \
+    Object ## type ## RegistrationClass () {            \
+      ns3::TypeId tid = type::GetTypeId ();             \
+      tid.SetSize (sizeof (type));                      \
+      tid.GetParent ();                                 \
+    }                                                   \
+  } Object ## type ## RegistrationVariable
 
 namespace ns3 {
 
@@ -51,12 +58,12 @@
 /**
  * \ingroup object
  *
- * \brief implement the ns-3 type and attribute system
+ * \brief Anchor the ns-3 type and attribute system.
  *
  * Every class which wants to integrate in the ns-3 type and attribute
  * system should derive from this base class. This base class provides:
- * - a way to associate an ns3::TypeId to each object instance
- * - a way to set and get the attributes registered in the ns3::TypeId.
+ * - A way to associate an ns3::TypeId to each object instance.
+ * - A way to set and get the attributes registered in the ns3::TypeId.
  */
 class ObjectBase
 {
@@ -67,83 +74,125 @@
   static TypeId GetTypeId (void);
 
   /**
-   * Virtual destructor
+   * Virtual destructor.
    */
   virtual ~ObjectBase ();
 
   /**
-   * \return the TypeId associated to the most-derived type
-   *          of this instance.
+   * Get the most derived TypeId for this Object.
    *
    * This method is typically implemented by ns3::Object::GetInstanceTypeId
    * but some classes which derive from ns3::ObjectBase directly
    * have to implement it themselves.
+   *
+   * \return The TypeId associated to the most-derived type
+   *          of this instance.
    */
   virtual TypeId GetInstanceTypeId (void) const = 0;
 
   /**
-   * \param name the name of the attribute to set
-   * \param value the name of the attribute to set
    *
-   * Set a single attribute. This cannot fail: if the input is invalid,
-   * it will crash immediately.
+   * Set a single attribute, raising fatal errors if unsuccessful.
+   *
+   * This will either succeed at setting the attribute
+   * or it will raise NS_FATAL_ERROR() on these conditions:
+   *
+   *   - The attribute doesn't exist in this Object.
+   *   - The attribute can't be set (no Setter).
+   *   - The attribute couldn't be deserialized from the AttributeValue.
+   * 
+   * \param [in] name The name of the attribute to set.
+   * \param [in] value The name of the attribute to set.
    */
   void SetAttribute (std::string name, const AttributeValue &value);
   /**
-   * \param name the name of the attribute to set
-   * \param value the name of the attribute to set
-   * \return true if the requested attribute exists and could be set, 
-   * false otherwise.
+   * Set a single attribute without raising errors.
+   *
+   * If the atttribute could not be set this will return \c false,
+   * but not raise any errors.
+   *
+   * \param [in] name The name of the attribute to set.
+   * \param [in] value The value to set it to.
+   * \return \c true if the requested attribute exists and could be set, 
+   *         \c false otherwise.
    */
   bool SetAttributeFailSafe (std::string name, const AttributeValue &value);
   /**
-   * \param name the name of the attribute to read
-   * \param value a reference to the value where the result should be stored.
-   * \return the attribute read.
+   * Get the value of an attribute, raising fatal errors if unsuccessful.
+   *
+   * This will either succeed at setting the attribute
+   * or it will raise NS_FATAL_ERROR() on these conditions:
+   *
+   *   - The attribute doesn't exist in this Object.
+   *   - The attribute can't be read (no Getter).
+   *   - The attribute doesn't support string formatting.
+   *   - The attribute couldn't be serialized into the AttributeValue.
    *
-   * If the input attribute name does not exist, this method crashes.
+   * \param [in]  name The name of the attribute to read.
+   * \param [out] value Where the result should be stored.
    */
   void GetAttribute (std::string name, AttributeValue &value) const;
   /**
-   * \param name the name of the attribute to read
-   * \param attribute the attribute where the result value should be stored
-   * \return true if the requested attribute was found, false otherwise.
+   * Get the value of an attribute without raising erros.
+   *
+   * If the atttribute could not be read this will return \c false,
+   * but not raise any errors.
+   *
+   * \param [in]  name The name of the attribute to read.
+   * \param [out] value Where the result value should be stored.
+   * \return \c true if the requested attribute was found, \c false otherwise.
    */
-  bool GetAttributeFailSafe (std::string name, AttributeValue &attribute) const;
+  bool GetAttributeFailSafe (std::string name, AttributeValue &value) const;
 
   /**
-   * \param name the name of the targetted trace source
-   * \param context the trace context associated to the callback
-   * \param cb the callback to connect to the trace source.
+   * Connect a TraceSource to a Callback with a context.
    *
-   * The targetted trace source should be registered with TypeId::AddTraceSource.
+   * The target trace source should be registered with TypeId::AddTraceSource.
+   *
+   * \param name The name of the target trace source.
+   * \param context The trace context associated to the callback.
+   * \param cb The callback to connect to the trace source.
+   * \returns \c true.
    */
   bool TraceConnect (std::string name, std::string context, const CallbackBase &cb);
   /**
-   * \param name the name of the targetted trace source
-   * \param cb the callback to connect to the trace source.
+   * Connect a TraceSource to a Callback without a context.
+   *
+   * The target trace source should be registered with TypeId::AddTraceSource.
    *
-   * The targetted trace source should be registered with TypeId::AddTraceSource.
+   * \param name The name of the target trace source.
+   * \param cb The callback to connect to the trace source.
+   * \returns \c true.
    */
   bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb);
   /**
-   * \param name the name of the targetted trace source
-   * \param context the trace context associated to the callback
-   * \param cb the callback to disconnect from the trace source.
+   * Disconnect from a TraceSource a Callback previously connected
+   * with a context.
    *
-   * The targetted trace source should be registered with TypeId::AddTraceSource.
+   * The target trace source should be registered with TypeId::AddTraceSource.
+   *
+   * \param name The name of the target trace source.
+   * \param context The trace context associated to the callback.
+   * \param cb The callback to disconnect from the trace source.
+   * \returns \c true.
    */
   bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb);
   /**
-   * \param name the name of the targetted trace source
-   * \param cb the callback to disconnect from the trace source.
+   * Disconnect from a TraceSource a Callback previously connected
+   * without a context.
+   *
+   * The target trace source should be registered with TypeId::AddTraceSource.
    *
-   * The targetted trace source should be registered with TypeId::AddTraceSource.
+   * \param name The name of the target trace source.
+   * \param cb The callback to disconnect from the trace source.
+   * \returns \c true.
    */
   bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb);
 
 protected:
   /**
+   * Notifier called once the ObjectBase is fully constructed.
+   *
    * This method is invoked once all member attributes have been 
    * initialized. Subclasses can override this method to be notified
    * of this event but if they do this, they must chain up to their
@@ -151,8 +200,7 @@
    */
   virtual void NotifyConstructionCompleted (void);
   /**
-   * \param attributes the attribute values used to initialize 
-   *        the member variables of this object's instance.
+   * Complete construction of ObjectBase; invoked by derived classes. 
    *
    * Invoked from subclasses to initialize all of their 
    * attribute members. This method will typically be invoked
@@ -160,10 +208,23 @@
    * from ns3::Object. If you derive from ns3::ObjectBase directly,
    * you should make sure that you invoke this method from
    * your most-derived constructor.
+   *
+   * \param attributes The attribute values used to initialize 
+   *        the member variables of this object's instance.
    */
   void ConstructSelf (const AttributeConstructionList &attributes);
 
 private:
+  /**
+   * Attempt to set the value referenced by the accessor \p spec
+   * to a valid value according to the \c checker, based on \p value.
+   *
+   * \param [in] spec The accessor for the storage location.
+   * \param [in] checker The checker to use in validating the value.
+   * \param [in] value The value to attempt to store.
+   * \returns \c true if the \c value could be validated by the \p checker
+   *          and written to the storage location.
+   */
   bool DoSet (Ptr<const AttributeAccessor> spec,
               Ptr<const AttributeChecker> checker, 
               const AttributeValue &value);
diff -Naur ns-3.21/src/core/model/object.cc ns-3.22/src/core/model/object.cc
--- ns-3.21/src/core/model/object.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,7 +22,6 @@
 #include "object.h"
 #include "object-factory.h"
 #include "assert.h"
-#include "singleton.h"
 #include "attribute.h"
 #include "log.h"
 #include "string.h"
@@ -31,12 +30,16 @@
 #include <cstdlib>
 #include <cstring>
 
+/**
+ * \file
+ * \ingroup object
+ * ns3::Object class implementation.
+ */
 
+namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Object");
 
-namespace ns3 {
-
 /*********************************************************************
  *         The Object implementation
  *********************************************************************/
@@ -368,6 +371,7 @@
   for (uint32_t i = 0; i < n; i++)
     {
       Object *current = m_aggregates->buffer[i];
+      /// \todo Shortcircuit this loop.
       refcount += current->GetReferenceCount ();
     }
   return (refcount > 0);
diff -Naur ns-3.21/src/core/model/object-factory.h ns-3.22/src/core/model/object-factory.h
--- ns-3.21/src/core/model/object-factory.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object-factory.h	2015-02-05 15:46:22.000000000 -0800
@@ -24,6 +24,12 @@
 #include "object.h"
 #include "type-id.h"
 
+/**
+ * \file
+ * \ingroup object
+ * ns3::ObjectFactory class declaration.
+ */
+
 namespace ns3 {
 
 class AttributeValue;
@@ -31,61 +37,105 @@
 /**
  * \ingroup object
  *
- * \brief instantiate subclasses of ns3::Object.
+ * \brief Instantiate subclasses of ns3::Object.
  *
  * This class can also hold a set of attributes to set
  * automatically during the object construction.
+ *
+ * \see attribute_ObjectFactory
  */
 class ObjectFactory
 {
 public:
+  /**
+   * Default constructor.
+   *
+   * This factory is not capable of constructing a real Object
+   * until it has at least a TypeId.
+   */
   ObjectFactory ();
+  /**
+   * Construct a factory for a specific TypeId by name.
+   *
+   * \param typeId The name of the TypeId this factory should create.
+   */
   ObjectFactory (std::string typeId);
 
+  /**@{*/
   /**
-   * \param tid the TypeId of the object to instantiate.
+   * Set the TypeId of the Objects to be created by this factory.
+   *
+   * \param tid The TypeId of the object to instantiate.
    */
   void SetTypeId (TypeId tid);
-  /**
-   * \param tid the TypeId of the object to instantiate.
-   */
   void SetTypeId (const char *tid);
-  /**
-   * \param tid the TypeId of the object to instantiate.
-   */
   void SetTypeId (std::string tid);
+  /**@}*/
+  
   /**
-   * \param name the name of the attribute to set during object construction
-   * \param value the value of the attribute to set during object construction
+   * Set an attribute to be set during construction.
+   *
+   * \param name The name of the attribute to set.
+   * \param value The value of the attribute to set.
    */
   void Set (std::string name, const AttributeValue &value);
 
   /**
-   * \returns the currently-selected TypeId to use to create an object
-   *          instance.
+   * Get the TypeId which will be created by this ObjectFactory.
+   * \returns The currently-selected TypeId.
    */
   TypeId GetTypeId (void) const;
 
   /**
-   * \returns a new object instance.
+   * Create an Object instance of the configured TypeId.
+   *
+   * \returns A new object instance.
    */
   Ptr<Object> Create (void) const;
   /**
-   * \returns a new object instance.
+   * Create an Object instance of the requested type.
    *
    * This method performs an extra call to ns3::Object::GetObject before
    * returning a pointer of the requested type to the user. This method
    * is really syntactical sugar.
+   *
+   * \tparam T The requested Object type.
+   * \returns A new object instance.
    */
   template <typename T>
   Ptr<T> Create (void) const;
 
 private:
+  /**
+   * Print the factory configuration on an output stream.
+   *
+   * The configuration will be printed as a string with the form
+   * "<TypeId-name>[<attribute-name>=<attribute-value>|...]"
+   *
+   * \param [in] os The stream.
+   * \param [in] factory The ObjectFactory.
+   * \returns The stream.
+   */
   friend std::ostream & operator << (std::ostream &os, const ObjectFactory &factory);
+  /**
+   * Read a factory configuration from an input stream.
+   *
+   * The configuration should be in the form
+   * "<TypeId-name>[<attribute-name>=<attribute-value>|...]"
+   *
+   * \param [in] is The input stream.
+   * \param [out] factory The factory to configure as described by the stream.
+   * \return The stream.
+   */
   friend std::istream & operator >> (std::istream &is, ObjectFactory &factory);
 
+  /** The TypeId this factory will create. */
   TypeId m_tid;
-  AttributeConstructionList m_parameters;
+  /**
+   * The list of attributes and values to be used in constructing
+   * objects by this factory.
+   */
+  AttributeConstructionList m_parameters;  
 };
 
 std::ostream & operator << (std::ostream &os, const ObjectFactory &factory);
@@ -93,28 +143,29 @@
 
 
 /**
- * \param n1 name of attribute
- * \param v1 value of attribute
- * \param n2 name of attribute
- * \param v2 value of attribute
- * \param n3 name of attribute
- * \param v3 value of attribute
- * \param n4 name of attribute
- * \param v4 value of attribute
- * \param n5 name of attribute
- * \param v5 value of attribute
- * \param n6 name of attribute
- * \param v6 value of attribute
- * \param n7 name of attribute
- * \param v7 value of attribute
- * \param n8 name of attribute
- * \param v8 value of attribute
- * \param n9 name of attribute
- * \param v9 value of attribute
- * \returns a pointer to a newly allocated object.
+ * \ingroup object
+ * Allocate an Object on the heap and initialize with a set of attributes.
  *
- * This allocates an object on the heap and initializes
- * it with a set of attributes.
+ * \tparam T The requested Object type.
+ * \param n1 Name of attribute
+ * \param v1 Value of attribute
+ * \param n2 Name of attribute
+ * \param v2 Value of attribute
+ * \param n3 Name of attribute
+ * \param v3 Value of attribute
+ * \param n4 Name of attribute
+ * \param v4 Value of attribute
+ * \param n5 Name of attribute
+ * \param v5 Value of attribute
+ * \param n6 Name of attribute
+ * \param v6 Value of attribute
+ * \param n7 Name of attribute
+ * \param v7 Value of attribute
+ * \param n8 Name of attribute
+ * \param v8 Value of attribute
+ * \param n9 Name of attribute
+ * \param v9 Value of attribute
+ * \returns A pointer to a newly allocated object.
  */
 template <typename T>
 Ptr<T> 
@@ -129,17 +180,15 @@
                             std::string n9 = "", const AttributeValue & v9 = EmptyAttributeValue ());
 
 
-
-
-/**
- * \class ns3::ObjectFactoryValue
- * \brief hold objects of type ns3::ObjectFactory
- */
-
 ATTRIBUTE_HELPER_HEADER (ObjectFactory);
 
 } // namespace ns3
 
+
+/***************************************************************
+ *  Implementation of the templates declared above.
+ ***************************************************************/
+
 namespace ns3 {
 
 template <typename T>
diff -Naur ns-3.21/src/core/model/object.h ns-3.22/src/core/model/object.h
--- ns-3.21/src/core/model/object.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object.h	2015-02-05 15:46:22.000000000 -0800
@@ -30,6 +30,12 @@
 #include "attribute-construction-list.h"
 #include "simple-ref-count.h"
 
+/**
+ * \file
+ * \ingroup object
+ * ns3::Object class declaration, which is the root of the Object hierarchy
+ * and Aggregation.
+ */
 
 namespace ns3 {
 
@@ -38,192 +44,271 @@
 class AttributeValue;
 class TraceSourceAccessor;
 
+/**
+ * \ingroup core
+ * \defgroup object Object
+ * \brief Base classes which provide memory management and object aggregation.
+ */
+  
+/**
+ * \ingroup object
+ * \ingroup ptr
+ * Standard Object deleter, used by SimpleRefCount
+ * to delete an Object when the reference count drops to zero.
+ */
 struct ObjectDeleter
 {
+  /**
+   * Smart pointer deleter implementation for Object.
+   *
+   * Delete implementation, forwards to the Object::DoDelete()
+   * method.
+   *
+   * \param [in] object The Object to delete.
+   */
   inline static void Delete (Object *object);
 };
 
 /**
- * \ingroup core
- * \defgroup object Object
- * \brief Base classes which provides memory management and object aggregation.
- */
-/**
  * \ingroup object
- * \brief a base class which provides memory management and object aggregation
+ * \brief A base class which provides memory management and object aggregation
  *
- * The memory management scheme is based on reference-counting with dispose-like
- * functionality to break the reference cycles. The reference count is increamented
- * and decremented with the methods Object::Ref and Object::Unref. If a reference cycle is
- * present, the user is responsible for breaking it by calling Object::Dispose in
- * a single location. This will eventually trigger the invocation of Object::DoDispose 
- * on itself and all its aggregates. The Object::DoDispose method is always automatically
- * invoked from the Object::Unref method before destroying the object, even if the user 
- * did not call Object::Dispose directly.
+ * The memory management scheme is based on reference-counting with
+ * dispose-like functionality to break the reference cycles.
+ * The reference count is incremented and decremented with
+ * the methods Ref() and Unref(). If a reference cycle is
+ * present, the user is responsible for breaking it
+ * by calling Dispose() in a single location. This will
+ * eventually trigger the invocation of DoDispose() on itself and
+ * all its aggregates. The DoDispose() method is always automatically
+ * invoked from the Unref() method before destroying the Object,
+ * even if the user did not call Dispose() directly.
  */
-class Object : public SimpleRefCount<Object,ObjectBase,ObjectDeleter>
+class Object : public SimpleRefCount<Object, ObjectBase, ObjectDeleter>
 {
 public:
   /**
    * \brief Register this type.
-   * \return The object TypeId.
+   * \return The Object TypeId.
    */
   static TypeId GetTypeId (void);
 
   /**
-   * \brief Iterate over the objects aggregated to an ns3::Object.
+   * \brief Iterate over the Objects aggregated to an ns3::Object.
    *
-   * This iterator does not allow you to iterate over the initial
-   * object used to call Object::GetAggregateIterator. 
+   * This iterator does not allow you to iterate over the parent
+   * Object used to call Object::GetAggregateIterator. 
    *
-   * Note: this is a java-style iterator.
+   * \note This is a java-style iterator.
    */
   class AggregateIterator
   {
 public:
+    /** Default constructor, which has no Object. */
     AggregateIterator ();
 
     /**
-     * \returns true if HasNext can be called and return a non-null
-     *          pointer, false otherwise.
+     * Check if there are more Aggregates to iterate over.
+     *
+     * \returns \c true if Next() can be called and return a non-null
+     *          pointer, \c false otherwise.
      */
     bool HasNext (void) const;
 
     /**
-     * \returns the next aggregated object.
+     * Get the next Aggregated Object.
+     *
+     * \returns The next aggregated Object.
      */
     Ptr<const Object> Next (void);
 private:
     friend class Object;
-    AggregateIterator (Ptr<const Object> object);  //!< Constructor
-    Ptr<const Object> m_object;                    //!< Parent Object
-    uint32_t m_current;                            //!< Current position in parent's aggegrates
+    /**
+     * Construct from an Object.
+     *
+     * This is private, with Object as friend, so only Objects can create
+     * useful AggregateIterators.
+     *
+     * \param [in] object The Object whose Aggregates should be iterated over.
+     */
+    AggregateIterator (Ptr<const Object> object);
+    Ptr<const Object> m_object;                    //!< Parent Object.
+    uint32_t m_current;                            //!< Current position in parent's aggegrates.
   };
 
+  /** Constructor. */
   Object ();
+  /** Destructor. */
   virtual ~Object ();
 
-  /*
+  /**
    * Implement the GetInstanceTypeId method defined in ObjectBase.
    */
   virtual TypeId GetInstanceTypeId (void) const;
 
   /**
-   * \returns a pointer to the requested interface or zero if it could not be found.
+   * Get a pointer to the requested aggregated Object.
+   *
+   * \returns A pointer to the requested Object, or zero
+   *          if it could not be found.
    */
   template <typename T>
   inline Ptr<T> GetObject (void) const;
   /**
-   * \param tid the interface id of the requested interface
-   * \returns a pointer to the requested interface or zero if it could not be found.
+   * Get a pointer to the requested aggregated Object.
+   * 
+   * \param tid The TypeId of the requested Object.
+   * \returns A pointer to the requested Object, or zero
+   *          if it could not be found.
    */
   template <typename T>
   Ptr<T> GetObject (TypeId tid) const;
   /**
-   * Run the DoDispose methods of this object and all the
-   * objects aggregated to it.
-   * After calling this method, the object is expected to be
-   * totally unusable except for the Ref and Unref methods.
-   *
-   * Note that you can call Dispose many times on the same object or
-   * different objects aggregated together, and DoDispose will be
-   * called only once for each aggregated object.
+   * Dispose of this Object.
+   *
+   * Run the DoDispose() methods of this Object and all the
+   * Objects aggregated to it.  
+   * After calling this method, this Object is expected to be
+   * totally unusable except for the Ref() and Unref() methods.
+   *
+   * \note You can call Dispose() many times on the same Object or
+   * different Objects aggregated together, and DoDispose() will be
+   * called only once for each aggregated Object.
    *
    * This method is typically used to break reference cycles.
    */
   void Dispose (void);
   /**
-   * \param other another object pointer
+   * Aggregate two Objects together.
    *
-   * This method aggregates the two objects together: after this
-   * method returns, it becomes possible to call GetObject
+   * \param other The other Object pointer
+   *
+   * This method aggregates the two Objects together: after this
+   * method returns, it becomes possible to call GetObject()
    * on one to get the other, and vice-versa. 
    *
-   * This method calls the virtual method NotifyNewAggregates to
-   * notify all aggregated objects that they have been aggregated
+   * This method calls the virtual method NotifyNewAggregates() to
+   * notify all aggregated Objects that they have been aggregated
    * together.
    *
-   * \sa NotifyNewAggregate
+   * \sa NotifyNewAggregate()
    */
   void AggregateObject (Ptr<Object> other);
 
   /**
-   * \returns an iterator to the first object aggregated to this
-   *          object.
+   * Get an iterator to the Objects aggregated to this one.
+   *
+   * \returns An iterator to the first Object aggregated to this
+   *          Object.
    *
-   * If no objects are aggregated to this object, then, the returned
-   * iterator will be empty and AggregateIterator::HasNext will
-   * always return false.
+   * If no Objects are aggregated to this Object, then, the returned
+   * iterator will be empty and AggregateIterator::HasNext() will
+   * always return \c false.
    */
   AggregateIterator GetAggregateIterator (void) const;
 
   /**
-   * This method calls the virtual DoInitialize method on all the objects
-   * aggregated to this object. DoInitialize will be called only once over
-   * the lifetime of an object, just like DoDispose is called only
+   * Invoke DoInitialize on all Objects aggregated to this one.
+   *
+   * This method calls the virtual DoInitialize() method on all the Objects
+   * aggregated to this Object. DoInitialize() will be called only once over
+   * the lifetime of an Object, just like DoDispose() is called only
    * once.
    *
-   * \sa DoInitialize
+   * \sa DoInitialize()
    */
   void Initialize (void);
 
 protected:
   /**
-   * This method is invoked whenever two sets of objects are aggregated together.
-   * It is invoked exactly once for each object in both sets.
-   * This method can be overriden by subclasses who wish to be notified of aggregation
-   * events. These subclasses must chain up to their base class NotifyNewAggregate method.
-   * It is safe to call GetObject and AggregateObject from within this method.
+   * Notify all Objects aggregated to this one of a new Object being
+   * aggregated.
+   *
+   * This method is invoked whenever two sets of Objects are aggregated
+   * together.  It is invoked exactly once for each Object in both sets.
+   * This method can be overriden by subclasses who wish to be notified
+   * of aggregation events. These subclasses must chain up to their
+   * base class NotifyNewAggregate() method.
+   *
+   * It is safe to call GetObject() and AggregateObject() from within
+   * this method.
    */
   virtual void NotifyNewAggregate (void);
   /**
-   * This method is called only once by Object::Initialize. If the user
-   * calls Object::Initialize multiple times, DoInitialize is called only the
+   * Initialize() implementation.
+   *
+   * This method is called only once by Initialize(). If the user
+   * calls Initialize() multiple times, DoInitialize() is called only the
    * first time.
    *
-   * Subclasses are expected to override this method and _chain up_
+   * Subclasses are expected to override this method and chain up
    * to their parent's implementation once they are done. It is
-   * safe to call GetObject and AggregateObject from within this method.
+   * safe to call GetObject() and AggregateObject() from within this method.
    */
   virtual void DoInitialize (void);
   /**
-   * This method is called by Object::Dispose or by the object's 
+   * Destructor implementation.
+   *
+   * This method is called by Dispose() or by the Object's 
    * destructor, whichever comes first.
    *
    * Subclasses are expected to implement their real destruction
    * code in an overriden version of this method and chain
    * up to their parent's implementation once they are done.
-   * i.e., for simplicity, the destructor of every subclass should
+   * _i.e_, for simplicity, the destructor of every subclass should
    * be empty and its content should be moved to the associated
-   * DoDispose method.
+   * DoDispose() method.
    *
-   * It is safe to call GetObject from within this method.
+   * It is safe to call GetObject() from within this method.
    */
   virtual void DoDispose (void);
   /**
-   * \param o the object to copy.
+   * Copy an Object.
+   *
+   * \param o the Object to copy.
    *
    * Allow subclasses to implement a copy constructor.
+   *
    * While it is technically possible to implement a copy
    * constructor in a subclass, we strongly discourage you
-   * to do so. If you really want to do it anyway, you have
+   * from doing so. If you really want to do it anyway, you have
    * to understand that this copy constructor will _not_
-   * copy aggregated objects. i.e., if your object instance
-   * is already aggregated to another object and if you invoke
-   * this copy constructor, the new object instance will be
-   * a pristine standalone object instance not aggregated to
-   * any other object. It is thus _your_ responsability
+   * copy aggregated Objects, _i.e_, if your Object instance
+   * is already aggregated to another Object and if you invoke
+   * this copy constructor, the new )bject instance will be
+   * a pristine standalone Object instance not aggregated to
+   * any other )bject. It is thus _your_ responsability
    * as a caller of this method to do what needs to be done
-   * (if it is needed) to ensure that the object stays in a
+   * (if it is needed) to ensure that the Object stays in a
    * valid state.
    */
   Object (const Object &o);
+  
 private:
 
+  /**
+   * Copy an Object.
+   *
+   * \param object A pointer to the object to copy.
+   * \returns A copy of the input object.
+   *
+   * This method invoke the copy constructor of the input object
+   * and returns the new instance.
+   */
+  /**@{*/
   template <typename T>
   friend Ptr<T> CopyObject (Ptr<T> object);
   template <typename T>
   friend Ptr<T> CopyObject (Ptr<const T> object);
+  /**@}*/
+  
+  /**
+   * Set the TypeId and construct all Attributes of an Object.
+   *
+   * \tparam T The type of the derived object we are constructing.
+   * \param [in] object The uninitialized object pointer.
+   * \return The derived object.
+   */
   template <typename T>
   friend Ptr<T> CompleteConstruct (T *object);
 
@@ -232,6 +317,8 @@
   friend struct ObjectDeleter;
 
   /**
+   * The list of Objects aggregated to this one.
+   *
    * This data structure uses a classic C-style trick to 
    * hold an array of variable size without performing
    * two memory allocations: the declaration of the structure
@@ -239,105 +326,110 @@
    * memory for this struct, we effectively allocate a larger
    * chunk of memory than the struct to allow space for a larger
    * variable sized buffer whose size is indicated by the element
-   * 'n'
+   * \c n
    */
   struct Aggregates {
+    /** The number of entries in \c buffer. */
     uint32_t n;
+    /** The array of Objects. */
     Object *buffer[1];
   };
 
   /**
-   * Find an object of TypeId tid in the aggregates of this Object.
+   * 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
+   * \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
+   * Verify that this Object is still live, by checking it's reference count.
+   * \return \c true if the reference count is non zero.
    */
   bool Check (void) const;
   /**
-   * \return Do any of our aggregates have non zero reference count?
+   * Check if any aggregated Objects have non-zero reference counts.
+   *
+   * \return \c true if 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
+   * Object, and if no one owns a reference directly to this Object, the
+   * Object is alive, has a refcount of zero and the method run 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
+   * Set the TypeId of this Object.
+   
+   * \param tid The TypeId value to set.
    *
    * Invoked from ns3::CreateObject only.
-   * Initialize the m_tid member variable to
-   * keep track of the type of this object instance.
+   * Initialize the \c m_tid member variable to
+   * keep track of the type of this Object instance.
    */
   void SetTypeId (TypeId tid);
   /**
-  * \param attributes the attribute values used to initialize
-  *        the member variables of this object's instance.
-  *
-  * Invoked from ns3::ObjectFactory::Create and ns3::CreateObject only.
-  * Initialize all the member variables which were
-  * registered with the associated TypeId.
+   * Initialize all member variables registered as Attributes of this TypeId.
+   *
+   * \param attributes The attribute values used to initialize
+   *        the member variables of this Object's instance.
+   *
+   * Invoked from ns3::ObjectFactory::Create and ns3::CreateObject only.
+   * Initialize all the member variables which were
+   * registered with the associated TypeId.
   */
   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
+   * \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
-   * over all aggregated objects to check if they all 
-   * have a zero refcount. If yes, the object and all
+   * Attempt to delete this Object.
+   *
+   * This method iterates over all aggregated Objects to check if they all 
+   * have a zero refcount. If yes, the Object and all
    * its aggregates are deleted. If not, nothing is done.
    */
   void DoDelete (void);
 
   /**
-   * Identifies the type of this object instance.
+   * Identifies the type of this Object instance.
    */
   TypeId m_tid;
   /**
-   * Set to true when the DoDispose method of the object
-   * has run, false otherwise.
+   * Set to \c true when the DoDispose() method of the Object has run,
+   * \c false otherwise.
    */
   bool m_disposed;
   /**
-   * Set to true once the DoInitialize method has run,
-   * false otherwise
+   * Set to \c true once the DoInitialize() method has run,
+   * \c false otherwise
    */
   bool m_initialized;
   /**
-   * a pointer to an array of 'aggregates'. i.e., a pointer to
-   * each object aggregated to this object is stored in this 
-   * array. The array is shared by all aggregated objects
+   * A pointer to an array of 'aggregates'.
+   *
+   * A pointer to each Object aggregated to this Object is stored in this 
+   * array.  The array is shared by all aggregated Objects
    * so the size of the array is indirectly a reference count.
    */
   struct Aggregates * m_aggregates;
   /**
-   * Indicates the number of times the object was accessed with a
-   * call to GetObject. This integer is used to implement a
-   * heuristic to sort the array of aggregates to put at the start
-   * of the array the most-frequently accessed elements.
+   * The number of times the Object was accessed with a
+   * call to GetObject().
+   *
+   * This integer is used to implement a heuristic to sort
+   * the array of aggregates in most-frequently accessed order.
    */
   uint32_t m_getObjectCount;
 };
 
-/**
- * \param object a pointer to the object to copy.
- * \returns a copy of the input object.
- *
- * This method invoke the copy constructor of the input object
- * and returns the new instance.
- */
 template <typename T>
 Ptr<T> CopyObject (Ptr<const T> object);
 template <typename T>
@@ -347,16 +439,17 @@
 
 namespace ns3 {
 
+
+/*************************************************************************
+ *   The Object implementation which depends on templates
+ *************************************************************************/
+
 void 
 ObjectDeleter::Delete (Object *object)
 {
   object->DoDelete ();
 }
 
-/*************************************************************************
- *   The Object implementation which depends on templates
- *************************************************************************/
-
 template <typename T>
 Ptr<T> 
 Object::GetObject () const
@@ -410,61 +503,161 @@
 }
 
 template <typename T>
-Ptr<T> CompleteConstruct (T *p)
+Ptr<T> CompleteConstruct (T *object)
 {
-  p->SetTypeId (T::GetTypeId ());
-  p->Object::Construct (AttributeConstructionList ());
-  return Ptr<T> (p, false);
+  object->SetTypeId (T::GetTypeId ());
+  object->Object::Construct (AttributeConstructionList ());
+  return Ptr<T> (object, false);
 }
 
+/** 
+ * \ingroup object
+ * @{
+ */
+/**
+ * Create an object by type, with varying number of constructor parameters.
+ *
+ * \tparam T The type of the derived object to construct.
+ * \return The derived object.
+ */
 template <typename T>
 Ptr<T> CreateObject (void)
 {
   return CompleteConstruct (new T ());
 }
-
+/**
+ * \copybrief CreateObject()
+ * \tparam T The type of the derived object to construct.
+ * \tparam T1 The type of the constructor argument.
+ * \param a1 The constructor argument
+ * \return The derived object.
+ */
 template <typename T, typename T1>
 Ptr<T> CreateObject (T1 a1)
 {
   return CompleteConstruct (new T (a1));
 }
 
+/**
+ * \copybrief CreateObject()
+ * \tparam T The type of the derived object to construct.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \param a1 The constructor first argument
+ * \param a2 The constructor second argument
+ * \return The derived object.
+ */
 template <typename T, typename T1, typename T2>
 Ptr<T> CreateObject (T1 a1, T2 a2)
 {
   return CompleteConstruct (new T (a1,a2));
 }
 
+/**
+ * \copybrief CreateObject()
+ * \tparam T The type of the derived object to construct.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \param a1 The constructor first argument
+ * \param a2 The constructor second argument
+ * \param a3 The constructor third argument
+ * \return The derived object.
+ */
 template <typename T, typename T1, typename T2, typename T3>
 Ptr<T> CreateObject (T1 a1, T2 a2, T3 a3)
 {
   return CompleteConstruct (new T (a1,a2,a3));
 }
 
+/**
+ * \copybrief CreateObject()
+ * \tparam T The type of the derived object to construct.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \tparam T4 The type of the fourth constructor argument.
+ * \param a1 The constructor first argument
+ * \param a2 The constructor second argument
+ * \param a3 The constructor third argument
+ * \param a4 The constructor fourth argument
+ * \return The derived object.
+ */
 template <typename T, typename T1, typename T2, typename T3, typename T4>
 Ptr<T> CreateObject (T1 a1, T2 a2, T3 a3, T4 a4)
 {
   return CompleteConstruct (new T (a1,a2,a3,a4));
 }
 
+/**
+ * \copybrief CreateObject()
+ * \tparam T The type of the derived object to construct.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \tparam T4 The type of the fourth constructor argument.
+ * \tparam T5 The type of the fifth constructor argument.
+ * \param a1 The constructor first argument
+ * \param a2 The constructor second argument
+ * \param a3 The constructor third argument
+ * \param a4 The constructor fourth argument
+ * \param a5 The constructor fifth argument
+ * \return The derived object.
+ */
 template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
 Ptr<T> CreateObject (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
 {
   return CompleteConstruct (new T (a1,a2,a3,a4,a5));
 }
 
+/**
+ * \copybrief CreateObject()
+ * \tparam T The type of the derived object to construct.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \tparam T4 The type of the fourth constructor argument.
+ * \tparam T5 The type of the fifth constructor argument.
+ * \tparam T6 The type of the sixth constructor argument.
+ * \param a1 The constructor first argument
+ * \param a2 The constructor second argument
+ * \param a3 The constructor third argument
+ * \param a4 The constructor fourth argument
+ * \param a5 The constructor fifth argument
+ * \param a6 The constructor sixth argument
+ * \return The derived object.
+ */
 template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
 Ptr<T> CreateObject (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
 {
   return CompleteConstruct (new T (a1,a2,a3,a4,a5,a6));
 }
 
+/**
+ * \copybrief CreateObject()
+ * \tparam T The type of the derived object to construct.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \tparam T4 The type of the fourth constructor argument.
+ * \tparam T5 The type of the fifth constructor argument.
+ * \tparam T6 The type of the sixth constructor argument.
+ * \tparam T7 The type of the seventh constructor argument.
+ * \param a1 The constructor first argument
+ * \param a2 The constructor second argument
+ * \param a3 The constructor third argument
+ * \param a4 The constructor fourth argument
+ * \param a5 The constructor fifth argument
+ * \param a6 The constructor sixth argument
+ * \param a7 The constructor seventh argument
+ * \return The derived object.
+ */
 template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
 Ptr<T> CreateObject (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7)
 {
   return CompleteConstruct (new T (a1,a2,a3,a4,a5,a6,a7));
 }
-
+/**@}*/
 
 } // namespace ns3
 
diff -Naur ns-3.21/src/core/model/object-map.h ns-3.22/src/core/model/object-map.h
--- ns-3.21/src/core/model/object-map.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object-map.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,27 +25,56 @@
 #include "attribute.h"
 #include "object-ptr-container.h"
 
+/**
+ * \file
+ * \ingroup attribute_ObjectMap
+ * ObjectMap attribute value declarations and template implementations.
+ */
+
 namespace ns3 {
 
+/**
+ * \ingroup attribute_ObjectMap
+ * ObjectVectorMap is an alias for ObjectPtrContainerValue
+ */
 typedef ObjectPtrContainerValue ObjectMapValue;
 
+/**
+ * \ingroup attribute_ObjectMap
+ * MakeAccessorHelper implementation for ObjectVector.
+ * \copydetails ns3::DoMakeAccessorHelperOne(U T::*)
+ */
 template <typename T, typename U>
 Ptr<const AttributeAccessor>
-MakeObjectMapAccessor (U T::*memberContainer);
+MakeObjectMapAccessor (U T::*memberVariable);
 
+// Documentation generated by print-introspected-doxygen.cc
 template <typename T>
 Ptr<const AttributeChecker> MakeObjectMapChecker (void);
 
+/**
+ * \ingroup attribute_ObjectMap
+ * \copydoc ns3::MakeObjectPtrContainerAccessor()
+ */
 template <typename T, typename U, typename INDEX>
 Ptr<const AttributeAccessor>
 MakeObjectMapAccessor (Ptr<U> (T::*get)(INDEX) const,
                           INDEX (T::*getN)(void) const);
 
+/**
+ * \ingroup attribute_ObjectMap
+ * \copydoc ns3::MakeObjectPtrContainerAccessor()
+ */
 template <typename T, typename U, typename INDEX>
 Ptr<const AttributeAccessor>
 MakeObjectMapAccessor (INDEX (T::*getN)(void) const,
                        Ptr<U> (T::*get)(INDEX) const);
 
+
+/***************************************************************
+ *  Implementation of the templates declared above.
+ ***************************************************************/
+
 template <typename T, typename U>
 Ptr<const AttributeAccessor>
 MakeObjectMapAccessor (U T::*memberVector)
diff -Naur ns-3.21/src/core/model/object-ptr-container.cc ns-3.22/src/core/model/object-ptr-container.cc
--- ns-3.21/src/core/model/object-ptr-container.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object-ptr-container.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,10 +20,16 @@
 #include "object-ptr-container.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("ObjectPtrContainer");
+/**
+ * \file
+ * \ingroup attribute_ObjectPtrContainer
+ * ObjectPtrContainer attribute value implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ObjectPtrContainer");
+
 ObjectPtrContainerValue::ObjectPtrContainerValue ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/core/model/object-ptr-container.h ns-3.22/src/core/model/object-ptr-container.h
--- ns-3.21/src/core/model/object-ptr-container.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object-ptr-container.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,12 +25,19 @@
 #include "ptr.h"
 #include "attribute.h"
 
+/**
+ * \file
+ * \ingroup attribute_ObjectPtrContainer
+ * ObjectPtrContainer attribute value declarations and template implementations.
+ */
+
+
 namespace ns3 {
 
 /**
- * \ingroup object
+ * \ingroup attribute_ObjectPtrContainer
  * 
- * \brief contain a set of ns3::Object pointers.
+ * \brief Container for a set of ns3::Object pointers.
  *
  * This class it used to get attribute access to an array of
  * ns3::Object pointers.
@@ -38,43 +45,103 @@
 class ObjectPtrContainerValue : public AttributeValue
 {
 public:
+  /** Iterator type for traversing this container. */
   typedef std::map<uint32_t, Ptr<Object> >::const_iterator Iterator;
 
+  /** Default constructor. */
   ObjectPtrContainerValue ();
 
   /**
-   * \returns an iterator to the first object contained in this set
+   * Get an iterator to the first Object.
+   *
+   * \returns An iterator to the first Object.
    */
   Iterator Begin (void) const;
   /**
-   * \returns an iterator to the last object contained in this set
+   * Get an iterator to the _past-the-end_ Object.
+   *
+   * \returns An iterator to the _past-the-end_ Object.
    */
   Iterator End (void) const;
   /**
-   * \returns the number of objects contained in this set.
+   * Get the number of Objects.
+   *
+   * \returns The number of objects.
    */
   uint32_t GetN (void) const;
   /**
-   * \param i the index of the requested object.
-   * \returns the requested object
+   * Get a specific Object.
+   *
+   * \param i The index of the requested object.
+   * \returns The requested object
    */
   Ptr<Object> Get (uint32_t i) const;
 
+  /**
+   * Get a copy of this container.
+   *
+   * \returns A copy of this container.
+   */
   virtual Ptr<AttributeValue> Copy (void) const;
+  /**
+   * Serialize each of the Object pointers to a string.
+   *
+   * Note this serializes the Ptr values, not the Objects themselves.
+   *
+   * \param checker The checker to use (currently not used.)
+   * \returns The string form of the Objects.
+   */
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
+  /**
+   * Deserialize from a string. (Not implemented; raises a fatal error.)
+   *
+   * \param value The serialized string form.
+   * \param checker The checker to use.
+   * \returns \c true.
+   */
   virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
 
 private:
   friend class ObjectPtrContainerAccessor;
+  /** The container implementation. */
   std::map<uint32_t, Ptr<Object> > m_objects;
 };
 
-
+/**
+ * \ingroup attribute_ObjectPtrContainer
+ * Create an AttributeAccessor using a container class indexed get method.
+ *
+ * The two versions of this function differ only in argument order.
+ *
+ * \tparam T The container class type.
+ * \tparam U The type of object the get method returns.
+ * \tparam INDEX The type of the index variable.
+ * \param [in] get The class method to get a specific instance
+ *             from the container.
+ * \param [in] getN The class method to return the number of objects
+ *             in the container.
+ * \return The AttributeAccessor.
+ */
 template <typename T, typename U, typename INDEX>
 Ptr<const AttributeAccessor>
 MakeObjectPtrContainerAccessor (Ptr<U> (T::*get)(INDEX) const,
 				INDEX (T::*getN)(void) const);
 
+/**
+ * \ingroup attribute_ObjectPtrContainer
+ * Create an AttributeAccessor using a container class indexed get method.
+ *
+ * The two versions of this function differ only in argument order.
+ *
+ * \tparam T The container class type.
+ * \tparam U The type of object the get method returns.
+ * \tparam INDEX The type of the index variable.
+ * \param [in] get The class method to get a specific instance
+ *             from the container.
+ * \param [in] getN The class method to return the number of objects
+ *             in the container.
+ * \return The AttributeAccessor.
+ */
 template <typename T, typename U, typename INDEX>
 Ptr<const AttributeAccessor>
 MakeObjectPtrContainerAccessor (INDEX (T::*getN)(void) const,
@@ -83,6 +150,10 @@
 class ObjectPtrContainerChecker : public AttributeChecker
 {
 public:
+  /**
+   * Get the TypeId of the container class type.
+   * \returns The class TypeId.
+   */
   virtual TypeId GetItemTypeId (void) const = 0;
 };
 
@@ -91,12 +162,18 @@
 
 } // namespace ns3
 
+
+/***************************************************************
+ *        The implementation of the above functions.
+ ***************************************************************/
+
 namespace ns3 {
 
 namespace internal {
 
+/** ObjectPtrContainerChecker implementation class. */
 template <typename T>
-class AnObjectPtrContainerChecker : public ObjectPtrContainerChecker
+class ObjectPtrContainerChecker : public ns3::ObjectPtrContainerChecker
 {
 public:
   virtual TypeId GetItemTypeId (void) const {
@@ -131,7 +208,11 @@
 
 } // namespace internal
 
-
+  
+/**
+ * \ingroup attribute_ObjectPtrContainer
+ * AttributeAccessor implementation for ObjectPtrContainerValue.
+ */
 class ObjectPtrContainerAccessor : public AttributeAccessor
 {
 public:
@@ -140,7 +221,22 @@
   virtual bool HasGetter (void) const;
   virtual bool HasSetter (void) const;
 private:
+  /**
+   * Get the number of instances in the container.
+   *
+   * \param [in] object The container object.
+   * \param [out] n The number of instances in the container.
+   * \returns true if the value could be obtained successfully.
+   */
   virtual bool DoGetN (const ObjectBase *object, uint32_t *n) const = 0;
+  /**
+   * Get an instance from the container, identified by index.
+   *
+   * \param [in] object The container object.
+   * \param [in] i The desired instance index.
+   * \param [out] index The index retrieved.
+   * \returns The index requested.
+   */
   virtual Ptr<Object> DoGet (const ObjectBase *object, uint32_t i, uint32_t *index) const = 0;
 };
 
@@ -184,7 +280,7 @@
 template <typename T>
 Ptr<const AttributeChecker> MakeObjectPtrContainerChecker (void)
 {
-  return Create<internal::AnObjectPtrContainerChecker<T> > ();
+  return Create<internal::ObjectPtrContainerChecker<T> > ();
 }
 
 
diff -Naur ns-3.21/src/core/model/object-vector.h ns-3.22/src/core/model/object-vector.h
--- ns-3.21/src/core/model/object-vector.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/object-vector.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,27 +25,57 @@
 #include "attribute.h"
 #include "object-ptr-container.h"
 
+/**
+ * \file
+ * \ingroup attribute_ObjectVector
+ * ObjectVector attribute value declarations and template implementations.
+ */
+
 namespace ns3 {
 
+/**
+ * \ingroup attribute_ObjectVector
+ * ObjectVectorValue is an alias for ObjectPtrContainerValue
+ */
 typedef ObjectPtrContainerValue ObjectVectorValue;
 
+/**
+ * \ingroup attribute_ObjectVector
+ * MakeAccessorHelper implementation for ObjectVector.
+ * \copydetails ns3::DoMakeAccessorHelperOne(U T::*)
+ */
 template <typename T, typename U>
 Ptr<const AttributeAccessor>
-MakeObjectVectorAccessor (U T::*memberContainer);
+MakeObjectVectorAccessor (U T::*memberVariable);
 
+// Documentation generated by print-introspected-doxygen.cc
 template <typename T>
-Ptr<const AttributeChecker> MakeObjectVectorChecker (void);
+Ptr<const AttributeChecker>
+MakeObjectVectorChecker (void);
 
+/**
+ * \ingroup attribute_ObjectVector
+ * \copydoc ns3::MakeObjectPtrContainerAccessor()
+ */
 template <typename T, typename U, typename INDEX>
 Ptr<const AttributeAccessor>
 MakeObjectVectorAccessor (Ptr<U> (T::*get)(INDEX) const,
                           INDEX (T::*getN)(void) const);
 
+/**
+ * \ingroup attribute_ObjectVector
+ * \copydoc ns3::MakeObjectPtrContainerAccessor()
+ */
 template <typename T, typename U, typename INDEX>
 Ptr<const AttributeAccessor>
 MakeObjectVectorAccessor (INDEX (T::*getN)(void) const,
                           Ptr<U> (T::*get)(INDEX) const);
 
+
+/***************************************************************
+ *  Implementation of the templates declared above.
+ ***************************************************************/
+
 template <typename T, typename U>
 Ptr<const AttributeAccessor>
 MakeObjectVectorAccessor (U T::*memberVector)
diff -Naur ns-3.21/src/core/model/pointer.cc ns-3.22/src/core/model/pointer.cc
--- ns-3.21/src/core/model/pointer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/pointer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,16 @@
 #include "log.h"
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("Pointer");
+/**
+ * \file
+ * \ingroup attribute_Pointer
+ * Pointer attribute value implementations.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Pointer");
+
 PointerValue::PointerValue ()
   : m_value ()
 {
diff -Naur ns-3.21/src/core/model/pointer.h ns-3.22/src/core/model/pointer.h
--- ns-3.21/src/core/model/pointer.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/pointer.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,38 +23,63 @@
 #include "attribute.h"
 #include "object.h"
 
-namespace ns3 {
-
 /**
- * \ingroup attribute
- *
- * \brief hold objects of type Ptr<T>
+ * \file
+ * \ingroup attribute_Pointer
+ * Pointer attribute value declarations and template implementations.
  */
+
+namespace ns3 {
+
+//  Additional docs for class PointerValue:
+/** Hold objects of type Ptr<T>. */
 class PointerValue : public AttributeValue
 {
 public:
   PointerValue ();
-
+  
+  /**
+   * Construct this PointerValue by referencing an explicit Object.
+   *
+   * \param [in] object The object to begin with.
+   */
   PointerValue (Ptr<Object> object);
 
+  /**
+   * Set the value from by reference an Object.
+   *
+   * \param [in] object The object to reference.
+   */
   void SetObject (Ptr<Object> object);
 
+  /**
+   * Get the Object referenced by the PointerValue.
+   * \returns The Object.
+   */
   Ptr<Object> GetObject (void) const;
 
+  /**
+   * Construct this PointerValue by referencing an explicit Object.
+   *
+   * \tparam T (implicit) The type of the object.
+   * \param [in] object The object to begin with.
+   */
   template <typename T>
-  PointerValue (const Ptr<T> &object);
+  PointerValue (const Ptr<T> & object);
 
+  /** Cast to an Object of type \c T. */ 
   template <typename T>
-  void Set (const Ptr<T> &object);
+  operator Ptr<T> () const;
 
+  // Documentation generated by print-introspected-doxygen.cc
   template <typename T>
-  Ptr<T> Get (void) const;
+  void Set (const Ptr<T> & value);
 
   template <typename T>
-  bool GetAccessor (Ptr<T> &v) const;
+  Ptr<T> Get (void) const;
 
   template <typename T>
-  operator Ptr<T> () const;
+  bool GetAccessor (Ptr<T> &value) const;
 
   virtual Ptr<AttributeValue> Copy (void) const;
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
@@ -68,6 +93,11 @@
 class PointerChecker : public AttributeChecker 
 {
 public:
+
+  /**
+   * Get the TypeId of the base type.
+   * \returns The base TypeId.
+   */
   virtual TypeId GetPointeeTypeId (void) const = 0;
 };
 template <typename T>
@@ -75,13 +105,19 @@
 
 } // namespace ns3
 
-namespace ns3 {
 
 
+/***************************************************************
+ *  Implementation of the templates declared above.
+ ***************************************************************/
+
+namespace ns3 {
+
 namespace internal {
 
+/** PointerChecker implementation. */
 template <typename T>
-class APointerChecker : public PointerChecker
+class PointerChecker : public ns3::PointerChecker
 {
   virtual bool Check (const AttributeValue &val) const {
     const PointerValue *value = dynamic_cast<const PointerValue *> (&val);
@@ -177,7 +213,7 @@
 Ptr<AttributeChecker>
 MakePointerChecker (void)
 {
-  return Create<internal::APointerChecker<T> > ();
+  return Create<internal::PointerChecker<T> > ();
 }
 
 
diff -Naur ns-3.21/src/core/model/ptr.h ns-3.22/src/core/model/ptr.h
--- ns-3.21/src/core/model/ptr.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/ptr.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,193 +25,475 @@
 #include <stdint.h>
 #include "assert.h"
 
+/**
+ * \file
+ * \ingroup ptr
+ * Smart pointer implementation.
+ */
+
 namespace ns3 {
 
 /**
  * \ingroup core
  * \defgroup ptr Smart Pointer
  * \brief Heap memory management.
+ *
+ * See \ref ns3::Ptr for implementation details.
+ *
+ * See \ref main-ptr.cc for example usage.
  */
 /**
  * \ingroup ptr
  *
- * \brief smart pointer class similar to boost::intrusive_ptr
+ * \brief Smart pointer class similar to \c boost::intrusive_ptr.
  *
  * This smart-pointer class assumes that the underlying
- * type provides a pair of Ref and Unref methods which are
- * expected to increment and decrement the internal refcount
- * of the object instance.
+ * type provides a pair of \c Ref and \c Unref methods which are
+ * expected to increment and decrement the internal reference count
+ * of the object instance.  You can add \c Ref and \c Unref
+ * to a class simply by inheriting from ns3::SimpleRefCount.
  *
  * This implementation allows you to manipulate the smart pointer
  * as if it was a normal pointer: you can compare it with zero,
  * compare it against other pointers, assign zero to it, etc.
  *
  * It is possible to extract the raw pointer from this
- * smart pointer with the GetPointer and PeekPointer methods.
+ * smart pointer with the GetPointer() and PeekPointer() methods.
  *
- * If you want to store a newed object into a smart pointer,
- * we recommend you to use the Create template functions
+ * If you want to store a \c new object into a smart pointer,
+ * we recommend you to use the Create() template functions
  * to create the object and store it in a smart pointer to avoid
  * memory leaks. These functions are really small convenience
  * functions and their goal is just is save you a small
  * bit of typing.
+ *
+ * \tparam T The underlying type.
  */
 template <typename T>
 class Ptr 
 {
 private:
+
+  /** The pointer. */
   T *m_ptr;
+
+  /** Helper to test for null pointer. */
   class Tester {
-private:
+  private:
+    /** Disable delete (by virtue that this is unimplemented). */
     void operator delete (void *);
   };
+  
+  /** Interoperate with const instances. */
   friend class Ptr<const T>;
+  
+  /**
+   * Get a permanent pointer to the underlying object.
+   *
+   * The underlying refcount is incremented prior
+   * to returning to the caller so the caller is
+   * responsible for calling Unref himself.
+   *
+   * \param p smart pointer
+   * \return the pointer managed by this smart pointer.
+   */
   template <typename U>
   friend U *GetPointer (const Ptr<U> &p);
+  /**
+   * Get a temporary pointer to the underlying object.
+   *
+   * The underlying refcount is not incremented prior
+   * to returning to the caller so the caller is not
+   * responsible for calling Unref himself.
+   *
+   * \param p smart pointer
+   * \return the pointer managed by this smart pointer.
+   */
   template <typename U>
   friend U *PeekPointer (const Ptr<U> &p);
 
+  /** Mark this as a a reference by incrementing the reference count. */
   inline void Acquire (void) const;
+  
 public:
-  /**
-   * Create an empty smart pointer
-   */
+  /** Create an empty smart pointer */
   Ptr ();
   /**
-   * \param ptr raw pointer to manage
-   *
    * Create a smart pointer which points to the object pointed to by
    * the input raw pointer ptr. This method creates its own reference
    * to the pointed object. The caller is responsible for Unref()'ing
    * its own reference, and the smart pointer will eventually do the
    * same, so that object is deleted if no more references to it
    * remain.
+   *
+   * \param ptr raw pointer to manage
    */
   Ptr (T *ptr);
   /**
+   * Create a smart pointer which points to the object pointed to by
+   * the input raw pointer ptr.
+   *
    * \param ptr raw pointer to manage
    * \param ref if set to true, this method calls Ref, otherwise,
    *        it does not call Ref.
-   *
-   * Create a smart pointer which points to the object pointed to by
-   * the input raw pointer ptr.
    */
   Ptr (T *ptr, bool ref);
+  /**
+   * Copy by referencing the same underlying object.
+   *
+   * \param [in] o The other Ptr instance.
+   */
   Ptr (Ptr const&o);
-  // allow conversions from T to T const.
+  /**
+   * Copy, removing \c const qualifier.
+   *
+   * \tparam U The underlying type of the \c const object.
+   * \param [in] o The Ptr to copy.
+   */
   template <typename U>
-  Ptr (Ptr<U> const &o);
+  Ptr (Ptr<U> const &o); 
+  /** Destructor. */
   ~Ptr ();
+  /**
+   * Assignment operator by referencing the same underlying object.
+   *
+   * \param [in] o The other Ptr instance.
+   * \return A reference to self.
+   */
   Ptr<T> &operator = (Ptr const& o);
-
+  /**
+   * An rvalue member access.
+   * \returns A pointer to the underlying object.
+   */
   T *operator -> () const;
+  /**
+   * An lvalue member access.
+   * \returns A pointer to the underlying object.
+   */
   T *operator -> ();
+  /**
+   * A \c const dereference.
+   * \returns A pointer to the underlying object.
+   */
   const T &operator * () const;
+  /**
+   * A  dereference.
+   * \returns A pointer to the underlying object.
+   */
   T &operator * ();
-  // allow if (!sp)
+  /**
+   * Test for NULL pointer.
+   *
+   * This enables simple NULL pointer checks like
+   * \code
+   *   Ptr<..> p = ...;
+   *   if (!p) ...
+   * \endcode
+   * \returns true if the underlying pointer is NULL.
+   */
   bool operator! ();
-  // allow if (sp)
-  // disable delete sp
+  /**
+   * Test for non-NULL pointer.
+   *
+   * This enables simple pointer checks like
+   * \code
+   *   Ptr<...> p = ...;
+   *   if (p) ...
+   * \endcode
+   * This also disables deleting a Ptr
+   */
   operator Tester * () const;
 };
 
+/**
+ * \ingroup ptr
+ * Create class instances by constructors with varying numbers
+ * of arguments and return them by Ptr.
+ *
+ * These methods work for any class \c T.
+ *
+ * \see CreateObject for methods to create derivatives of ns3::Object
+ */
+/** @{ */
+/**
+ * \tparam T  The type of class object to create.
+ * \return A Ptr to the newly created \c T.
+ */
 template <typename T>
 Ptr<T> Create (void);
 
-template <typename T, typename T1>
+/**
+ * \tparam T  The type of class object to create.
+ * \tparam T1 The type of the first constructor argument.
+ * \param  a1 The first constructor argument.
+ * \return A Ptr to the newly created \c T.
+ */
+template <typename T,
+          typename T1>
 Ptr<T> Create (T1 a1);
 
-template <typename T, typename T1, typename T2>
+/**
+ * \tparam T  The type of class object to create.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \param  a1 The first constructor argument.
+ * \param  a2 The second constructor argument.
+ * \return A Ptr to the newly created \c T.
+ */
+template <typename T,
+          typename T1, typename T2>
 Ptr<T> Create (T1 a1, T2 a2);
 
-template <typename T, typename T1, typename T2, typename T3>
+/**
+ * \tparam T  The type of class object to create.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \param  a1 The first constructor argument.
+ * \param  a2 The second constructor argument.
+ * \param  a3 The third constructor argument.
+ * \return A Ptr to the newly created \c T.
+ */
+template <typename T,
+          typename T1, typename T2,
+          typename T3>
 Ptr<T> Create (T1 a1, T2 a2, T3 a3);
 
-template <typename T, typename T1, typename T2, typename T3, typename T4>
+/**
+ * \tparam T  The type of class object to create.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \tparam T4 The type of the fourth constructor argument.
+ * \param  a1 The first constructor argument.
+ * \param  a2 The second constructor argument.
+ * \param  a3 The third constructor argument.
+ * \param  a4 The fourth constructor argument.
+ * \return A Ptr to the newly created \c T.
+ */
+template <typename T,
+          typename T1, typename T2,
+          typename T3, typename T4>
 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4);
 
-template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
+/**
+ * \tparam T  The type of class object to create.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \tparam T4 The type of the fourth constructor argument.
+ * \tparam T5 The type of the fifth constructor argument.
+ * \param  a1 The first constructor argument.
+ * \param  a2 The second constructor argument.
+ * \param  a3 The third constructor argument.
+ * \param  a4 The fourth constructor argument.
+ * \param  a5 The fifth constructor argument.
+ * \return A Ptr to the newly created \c T.
+ */
+template <typename T,
+          typename T1, typename T2,
+          typename T3, typename T4,
+          typename T5>
 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
 
-template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
+/**
+ * \tparam T  The type of class object to create.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \tparam T4 The type of the fourth constructor argument.
+ * \tparam T5 The type of the fifth constructor argument.
+ * \tparam T6 The type of the sixth constructor argument.
+ * \param  a1 The first constructor argument.
+ * \param  a2 The second constructor argument.
+ * \param  a3 The third constructor argument.
+ * \param  a4 The fourth constructor argument.
+ * \param  a5 The fifth constructor argument.
+ * \param  a6 The sixth constructor argument.
+ * \return A Ptr to the newly created \c T.
+ */
+template <typename T,
+          typename T1, typename T2,
+          typename T3, typename T4,
+          typename T5, typename T6>
 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
 
-template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
+/**
+ * \tparam T  The type of class object to create.
+ * \tparam T1 The type of the first constructor argument.
+ * \tparam T2 The type of the second constructor argument.
+ * \tparam T3 The type of the third constructor argument.
+ * \tparam T4 The type of the fourth constructor argument.
+ * \tparam T5 The type of the fifth constructor argument.
+ * \tparam T6 The type of the sixth constructor argument.
+ * \tparam T7 The type of the seventh constructor argument.
+ * \param  a1 The first constructor argument.
+ * \param  a2 The second constructor argument.
+ * \param  a3 The third constructor argument.
+ * \param  a4 The fourth constructor argument.
+ * \param  a5 The fifth constructor argument.
+ * \param  a6 The sixth constructor argument.
+ * \param  a7 The seventh constructor argument.
+ * \return A Ptr to the newly created \c T.
+ */
+template <typename T,
+          typename T1, typename T2,
+          typename T3, typename T4,
+          typename T5, typename T6,
+          typename T7>
 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7);
+/** @}*/
 
 /**
- * \relates Ptr
- * \param p smart pointer
- * \return the pointer managed by this smart pointer.
- *
- * The underlying refcount is not incremented prior
- * to returning to the caller so the caller is not
- * responsible for calling Unref himself.
+ * \ingroup ptr
+ * Output streamer.
+ * \param [in] os The output stream.
+ * \param [in] p The Ptr.
+ * \returns The stream.
  */
 template <typename T>
-T * PeekPointer (const Ptr<T> &p);
+std::ostream &operator << (std::ostream &os, const Ptr<T> &p);
 
 /**
- * \relates Ptr
- * \param p smart pointer
- * \return the pointer managed by this smart pointer.
+ * \ingroup ptr
+ * Equality operator.
+ *
+ * This enables code such as
+ * \code
+ *   Ptr<...> p = ...;
+ *   Ptr<...> q = ...;
+ *   if (p == q) ...
+ * \endcode
+ *
+ * Note that either \c p or \c q could also be ordinary pointers
+ * to the underlying object.
  *
- * The underlying refcount is incremented prior
- * to returning to the caller so the caller is
- * responsible for calling Unref himself.
+ * \tparam T1 Type of the object on the lhs.
+ * \tparam T2 Type of the object on the rhs.
+ * \param [in] lhs The left operand.
+ * \param [in] rhs The right operand.
+ * \return true if the operands point to the same underlying object.
  */
-template <typename T>
-T * GetPointer (const Ptr<T> &p);
-
-template <typename T>
-std::ostream &operator << (std::ostream &, const Ptr<T> &p);
-
-
-// allow if (sp == 0)
+/** @{ */
 template <typename T1, typename T2>
 bool operator == (Ptr<T1> const &lhs, T2 const *rhs);
 
-// allow if (0 == sp)
 template <typename T1, typename T2>
 bool operator == (T1 const *lhs, Ptr<T2> &rhs);
 
-// allow if (sp != 0)
 template <typename T1, typename T2>
-bool operator != (Ptr<T1> const &lhs, T2 const *rhs);
+bool operator == (Ptr<T1> const &lhs, Ptr<T2> const &rhs);
+/**@}*/
 
-// allow if (0 != sp)
+/**
+ * \ingroup ptr
+ * Inequality operator.
+ *
+ * This enables code such as
+ * \code
+ *   Ptr<...> p = ...;
+ *   Ptr<...> q = ...;
+ *   if (p != q) ...
+ * \endcode
+ *
+ * Note that either \c p or \c q could also be ordinary pointers
+ * to the underlying object.
+ *
+ * \tparam T1 Type of the object on the lhs.
+ * \tparam T2 Type of the object on the rhs.
+ * \param [in] lhs The left operand.
+ * \param [in] rhs The right operand.
+ * \return true if the operands point to the same underlying object.
+ */
+/** @{ */
 template <typename T1, typename T2>
-bool operator != (T1 const *lhs, Ptr<T2> &rhs);
+bool operator != (Ptr<T1> const &lhs, T2 const *rhs);
 
-// allow if (sp0 == sp1)
 template <typename T1, typename T2>
-bool operator == (Ptr<T1> const &lhs, Ptr<T2> const &rhs);
+bool operator != (T1 const *lhs, Ptr<T2> &rhs);
 
-// allow if (sp0 != sp1)
 template <typename T1, typename T2>
 bool operator != (Ptr<T1> const &lhs, Ptr<T2> const &rhs);
+/**@}*/
 
+
+/**
+ * \ingroup ptr
+ * Comparison operator applied to the underlying pointers.
+ *
+ * \param [in] lhs The left operand.
+ * \param [in] rhs The right operand.
+ * \return The comparison on the underlying pointers.
+ */
+/** @{ */
+template <typename T>
+bool operator < (const Ptr<T> &lhs, const Ptr<T> &rhs);
+template <typename T>
+bool operator <= (const Ptr<T> &lhs, const Ptr<T> &rhs);
+template <typename T>
+bool operator > (const Ptr<T> &lhs, const Ptr<T> &rhs);
+template <typename T>
+bool operator >= (const Ptr<T> &lhs, const Ptr<T> &rhs);
+/** @} */
+  
+/**
+ * Return a copy of \c p with its stored pointer const casted from
+ * \c T2 to \c T1.
+ *
+ * \tparam T1 The type to return in a Ptr.
+ * \tparam T2 The type of the underlying object.
+ * \param p The original \c const Ptr.
+ * \return A non-const Ptr.
+ */
 template <typename T1, typename T2>
 Ptr<T1> const_pointer_cast (Ptr<T2> const&p);
 
+// Duplicate of struct CallbackTraits<T> as defined in callback.h  
 template <typename T>
 struct CallbackTraits;
 
+/**
+ * \ingroup callbackimpl
+ *
+ * Trait class to convert a pointer into a reference,
+ * used by MemPtrCallBackImpl.
+ *
+ * This is the specialization for Ptr types.
+ *
+ * \tparam T The base object type.
+ */
 template <typename T>
 struct CallbackTraits<Ptr<T> >
 {
+  /**
+   * \param p object pointer
+   * \return a reference to the object pointed to by p
+   */
   static T & GetReference (Ptr<T> const p)
   {
     return *PeekPointer (p);
   }
 };
 
+// Duplicate of struct EventMemberImplObjTraits<T> as defined in make-event.h
 template <typename T>
 struct EventMemberImplObjTraits;
 
+/**
+ * \ingroup makeeventmemptr
+ * Helper for the MakeEvent functions which take a class method.
+ *
+ * This is the specialization for Ptr types.
+ *
+ * \tparam T The class type.
+ */
 template <typename T>
 struct EventMemberImplObjTraits<Ptr<T> >
 {
+  /**
+   * \param p object pointer
+   * \return a reference to the object pointed to by p
+   */
   static T &GetReference (Ptr<T> p) {
     return *PeekPointer (p);
   }
@@ -276,14 +558,14 @@
   return Ptr<T> (new T (a1, a2, a3, a4, a5, a6, a7), false);
 }
 
-template <typename T>
-T * PeekPointer (const Ptr<T> &p)
+template <typename U>
+U * PeekPointer (const Ptr<U> &p)
 {
   return p.m_ptr;
 }
 
-template <typename T>
-T * GetPointer (const Ptr<T> &p)
+template <typename U>
+U * GetPointer (const Ptr<U> &p)
 {
   p.Acquire ();
   return p.m_ptr;
@@ -362,6 +644,15 @@
   return PeekPointer<T> (lhs) >= PeekPointer<T> (rhs);
 }
 
+/**
+ * Cast a Ptr.
+ *
+ * \tparam T1 The desired type to cast to.
+ * \tparam T2 The type of the original Ptr.
+ * \param p The original Ptr.
+ * \return The result of the cast.
+ */
+/** @{ */
 template <typename T1, typename T2>
 Ptr<T1>
 ConstCast (Ptr<T2> const&p)
@@ -382,8 +673,15 @@
 {
   return Ptr<T1> (static_cast<T1 *> (PeekPointer (p)));
 }
+/** @} */
 
-
+/**
+ * Return a deep copy of a Ptr.
+ *
+ * \param object The object Ptr to copy.
+ * \returns The copy.
+ */
+/** @{ */
 template <typename T>
 Ptr<T> Copy (Ptr<T> object)
 {
@@ -397,6 +695,7 @@
   Ptr<T> p = Ptr<T> (new T (*PeekPointer (object)), false);
   return p;
 }
+/** @} */
 
 /****************************************************
  *      Member method implementations.
diff -Naur ns-3.21/src/core/model/random-variable.cc ns-3.22/src/core/model/random-variable.cc
--- ns-3.21/src/core/model/random-variable.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/random-variable.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,2150 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-//
-// Copyright (c) 2006 Georgia Tech Research Corporation
-//
-// 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: Rajib Bhattacharjea<raj.b@gatech.edu>
-// Author: Hadi Arbabi<marbabi@cs.odu.edu>
-//
-
-#include <iostream>
-#include <cmath>
-#include <cstdlib>
-#include <sys/time.h>                   // for gettimeofday
-#include <unistd.h>
-#include <iostream>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sstream>
-#include <vector>
-
-#include "assert.h"
-#include "random-variable.h"
-#include "rng-seed-manager.h"
-#include "rng-stream.h"
-#include "fatal-error.h"
-#include "log.h"
-
-namespace ns3 {
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// RandomVariableBase methods
-
-NS_LOG_COMPONENT_DEFINE ("RandomVariable");
-
-/** \ingroup legacyrandom */
-class RandomVariableBase
-{
-public:
-  RandomVariableBase ();
-  RandomVariableBase (const RandomVariableBase &o);
-  virtual ~RandomVariableBase ();
-  virtual double  GetValue () = 0;
-  virtual uint32_t GetInteger ();
-  virtual RandomVariableBase*   Copy (void) const = 0;
-  RngStream *GetStream(void);
-private:
-  RngStream* m_generator;  // underlying generator being wrapped
-};
-
-RandomVariableBase::RandomVariableBase ()
-  : m_generator (0)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-RandomVariableBase::RandomVariableBase (const RandomVariableBase& r)
-  : m_generator (0)
-{
-  NS_LOG_FUNCTION (this << &r);
-  if (r.m_generator != 0)
-    {
-      m_generator = new RngStream (RngSeedManager::GetSeed (),
-                                   RngSeedManager::GetNextStreamIndex (),
-                                   RngSeedManager::GetRun ());
-    }
-}
-
-RandomVariableBase::~RandomVariableBase ()
-{
-  NS_LOG_FUNCTION (this);
-  delete m_generator;
-}
-
-uint32_t RandomVariableBase::GetInteger ()
-{
-  NS_LOG_FUNCTION (this);
-  return (uint32_t)GetValue ();
-}
-
-RngStream *
-RandomVariableBase::GetStream (void)
-{
-  NS_LOG_FUNCTION (this);
-  if (m_generator == 0)
-    {
-      m_generator = new RngStream (RngSeedManager::GetSeed (),
-                                   RngSeedManager::GetNextStreamIndex (),
-                                   RngSeedManager::GetRun ());
-    }
-  return m_generator;
-}
-
-// -------------------------------------------------------
-
-RandomVariable::RandomVariable ()
-  : m_variable (0)
-{
-  NS_LOG_FUNCTION (this);
-}
-RandomVariable::RandomVariable (const RandomVariable&o)
-  : m_variable (o.m_variable->Copy ())
-{
-}
-RandomVariable::RandomVariable (const RandomVariableBase &variable)
-  : m_variable (variable.Copy ())
-{
-}
-RandomVariable &
-RandomVariable::operator = (const RandomVariable &o)
-{
-  if (&o == this)
-    {
-      return *this;
-    }
-  delete m_variable;
-  m_variable = o.m_variable->Copy ();
-  return *this;
-}
-RandomVariable::~RandomVariable ()
-{
-  NS_LOG_FUNCTION (this);
-  delete m_variable;
-}
-double
-RandomVariable::GetValue (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_variable->GetValue ();
-}
-
-uint32_t
-RandomVariable::GetInteger (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_variable->GetInteger ();
-}
-
-RandomVariableBase *
-RandomVariable::Peek (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_variable;
-}
-
-
-ATTRIBUTE_VALUE_IMPLEMENT (RandomVariable);
-ATTRIBUTE_CHECKER_IMPLEMENT (RandomVariable);
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// UniformVariableImpl
-
-/** \ingroup legacyrandom */
-class UniformVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * Creates a uniform random number generator in the
-   * range [0.0 .. 1.0).
-   */
-  UniformVariableImpl ();
-
-  /**
-   * Creates a uniform random number generator with the specified range
-   * \param s Low end of the range
-   * \param l High end of the range
-   */
-  UniformVariableImpl (double s, double l);
-
-  UniformVariableImpl (const UniformVariableImpl& c);
-
-  double GetMin (void) const;
-  double GetMax (void) const;
-
-  /**
-   * \return A value between low and high values specified by the constructor
-   */
-  virtual double GetValue ();
-
-  /**
-   * \return A value between low and high values specified by parameters
-   */
-  virtual double GetValue (double s, double l);
-
-  virtual RandomVariableBase*  Copy (void) const;
-
-private:
-  double m_min;
-  double m_max;
-};
-
-UniformVariableImpl::UniformVariableImpl ()
-  : m_min (0),
-    m_max (1.0)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-UniformVariableImpl::UniformVariableImpl (double s, double l)
-  : m_min (s),
-    m_max (l)
-{
-  NS_LOG_FUNCTION (this << s << l);
-}
-
-UniformVariableImpl::UniformVariableImpl (const UniformVariableImpl& c)
-  : RandomVariableBase (c),
-    m_min (c.m_min),
-    m_max (c.m_max)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-double
-UniformVariableImpl::GetMin (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_min;
-}
-double
-UniformVariableImpl::GetMax (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_max;
-}
-
-
-double UniformVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-  return m_min + generator->RandU01 () * (m_max - m_min);
-}
-
-double UniformVariableImpl::GetValue (double s, double l)
-{
-  NS_LOG_FUNCTION (this << s << l);
-  RngStream *generator = GetStream ();
-  return s + generator->RandU01 () * (l - s);
-}
-
-RandomVariableBase* UniformVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new UniformVariableImpl (*this);
-}
-
-UniformVariable::UniformVariable ()
-  : RandomVariable (UniformVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-UniformVariable::UniformVariable (double s, double l)
-  : RandomVariable (UniformVariableImpl (s, l))
-{
-  NS_LOG_FUNCTION (this << s << l);
-}
-
-double UniformVariable::GetValue (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return this->RandomVariable::GetValue ();
-}
-
-double UniformVariable::GetValue (double s, double l)
-{
-  NS_LOG_FUNCTION (this << s << l);
-  return ((UniformVariableImpl*)Peek ())->GetValue (s,l);
-}
-
-uint32_t UniformVariable::GetInteger (uint32_t s, uint32_t l)
-{
-  NS_LOG_FUNCTION (this << s << l);
-  NS_ASSERT (s <= l);
-  return static_cast<uint32_t> ( GetValue (s, l + 1) );
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// ConstantVariableImpl methods
-
-/** \ingroup legacyrandom */
-class ConstantVariableImpl : public RandomVariableBase
-{
-
-public:
-  /**
-   * Construct a ConstantVariableImpl RNG that returns zero every sample
-   */
-  ConstantVariableImpl ();
-
-  /**
-   * Construct a ConstantVariableImpl RNG that returns the specified value
-   * every sample.
-   * \param c Unchanging value for this RNG.
-   */
-  ConstantVariableImpl (double c);
-
-
-  ConstantVariableImpl (const ConstantVariableImpl& c);
-
-  /**
-   * \brief Specify a new constant RNG for this generator.
-   * \param c New constant value for this RNG.
-   */
-  void    NewConstant (double c);
-
-  /**
-   * \return The constant value specified
-   */
-  virtual double  GetValue ();
-  virtual uint32_t GetInteger ();
-  virtual RandomVariableBase*   Copy (void) const;
-private:
-  double m_const;
-};
-
-ConstantVariableImpl::ConstantVariableImpl ()
-  : m_const (0)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-ConstantVariableImpl::ConstantVariableImpl (double c)
-  : m_const (c)
-{
-  NS_LOG_FUNCTION (this << c);
-}
-
-ConstantVariableImpl::ConstantVariableImpl (const ConstantVariableImpl& c)
-  : RandomVariableBase (c),
-    m_const (c.m_const)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-void ConstantVariableImpl::NewConstant (double c)
-{
-  NS_LOG_FUNCTION (this << c);
-  m_const = c;
-}
-
-double ConstantVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  return m_const;
-}
-
-uint32_t ConstantVariableImpl::GetInteger ()
-{
-  NS_LOG_FUNCTION (this);
-  return (uint32_t)m_const;
-}
-
-RandomVariableBase* ConstantVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new ConstantVariableImpl (*this);
-}
-
-ConstantVariable::ConstantVariable ()
-  : RandomVariable (ConstantVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-ConstantVariable::ConstantVariable (double c)
-  : RandomVariable (ConstantVariableImpl (c))
-{
-  NS_LOG_FUNCTION (this << c);
-}
-void
-ConstantVariable::SetConstant (double c)
-{
-  NS_LOG_FUNCTION (this << c);
-  *this = ConstantVariable (c);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// SequentialVariableImpl methods
-
-
-/** \ingroup legacyrandom */
-class SequentialVariableImpl : public RandomVariableBase
-{
-
-public:
-  /**
-   * \brief Constructor for the SequentialVariableImpl RNG.
-   *
-   * The four parameters define the sequence.  For example
-   * SequentialVariableImpl(0,5,1,2) creates a RNG that has the sequence
-   * 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 0 ...
-   * \param f First value of the sequence.
-   * \param l One more than the last value of the sequence.
-   * \param i Increment between sequence values
-   * \param c Number of times each member of the sequence is repeated
-   */
-  SequentialVariableImpl (double f, double l, double i = 1, uint32_t c = 1);
-
-  /**
-   * \brief Constructor for the SequentialVariableImpl RNG.
-   *
-   * Differs from the first only in that the increment parameter is a
-   * random variable
-   * \param f First value of the sequence.
-   * \param l One more than the last value of the sequence.
-   * \param i Reference to a RandomVariableBase for the sequence increment
-   * \param c Number of times each member of the sequence is repeated
-   */
-  SequentialVariableImpl (double f, double l, const RandomVariable& i, uint32_t c = 1);
-
-  SequentialVariableImpl (const SequentialVariableImpl& c);
-
-  ~SequentialVariableImpl ();
-  /**
-   * \return The next value in the Sequence
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase*  Copy (void) const;
-private:
-  double m_min;
-  double m_max;
-  RandomVariable  m_increment;
-  uint32_t  m_consecutive;
-  double m_current;
-  uint32_t  m_currentConsecutive;
-};
-
-SequentialVariableImpl::SequentialVariableImpl (double f, double l, double i, uint32_t c)
-  : m_min (f),
-    m_max (l),
-    m_increment (ConstantVariable (i)),
-    m_consecutive (c),
-    m_current (f),
-    m_currentConsecutive (0)
-{
-  NS_LOG_FUNCTION (this << f << l << i << c);
-}
-
-SequentialVariableImpl::SequentialVariableImpl (double f, double l, const RandomVariable& i, uint32_t c)
-  : m_min (f),
-    m_max (l),
-    m_increment (i),
-    m_consecutive (c),
-    m_current (f),
-    m_currentConsecutive (0)
-{
-  NS_LOG_FUNCTION (this << f << l << i << c);
-}
-
-SequentialVariableImpl::SequentialVariableImpl (const SequentialVariableImpl& c)
-  : RandomVariableBase (c),
-    m_min (c.m_min),
-    m_max (c.m_max),
-    m_increment (c.m_increment),
-    m_consecutive (c.m_consecutive),
-    m_current (c.m_current),
-    m_currentConsecutive (c.m_currentConsecutive)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-SequentialVariableImpl::~SequentialVariableImpl ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-double SequentialVariableImpl::GetValue ()
-{ // Return a sequential series of values
-  NS_LOG_FUNCTION (this);
-  double r = m_current;
-  if (++m_currentConsecutive == m_consecutive)
-    { // Time to advance to next
-      m_currentConsecutive = 0;
-      m_current += m_increment.GetValue ();
-      if (m_current >= m_max)
-        {
-          m_current = m_min + (m_current - m_max);
-        }
-    }
-  return r;
-}
-
-RandomVariableBase* SequentialVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new SequentialVariableImpl (*this);
-}
-
-SequentialVariable::SequentialVariable (double f, double l, double i, uint32_t c)
-  : RandomVariable (SequentialVariableImpl (f, l, i, c))
-{
-  NS_LOG_FUNCTION (this << f << l << i << c);
-}
-SequentialVariable::SequentialVariable (double f, double l, const RandomVariable& i, uint32_t c)
-  : RandomVariable (SequentialVariableImpl (f, l, i, c))
-{
-  NS_LOG_FUNCTION (this << f << l << i << c);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// ExponentialVariableImpl methods
-
-/** \ingroup legacyrandom */
-class ExponentialVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * Constructs an exponential random variable  with a mean
-   * value of 1.0.
-   */
-  ExponentialVariableImpl ();
-
-  /**
-   * \brief Constructs an exponential random variable with a specified mean
-   *
-   * \param m Mean value for the random variable
-   */
-  explicit ExponentialVariableImpl (double m);
-
-  /**
-   * \brief Constructs an exponential random variable with specified
-   * mean and upper limit.
-   *
-   * Since exponential distributions can theoretically return unbounded values,
-   * it is sometimes useful to specify a fixed upper limit.  Note however when
-   * the upper limit is specified, the true mean of the distribution is
-   * slightly smaller than the mean value specified: \f$ m - b/(e^{b/m}-1) \f$.
-   * \param m Mean value of the random variable
-   * \param b Upper bound on returned values
-   */
-  ExponentialVariableImpl (double m, double b);
-
-  ExponentialVariableImpl (const ExponentialVariableImpl& c);
-
-  /**
-   * \return A random value from this exponential distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy (void) const;
-
-private:
-  double m_mean;  // Mean value of RV
-  double m_bound; // Upper bound on value (if non-zero)
-};
-
-ExponentialVariableImpl::ExponentialVariableImpl ()
-  : m_mean (1.0),
-    m_bound (0)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-ExponentialVariableImpl::ExponentialVariableImpl (double m)
-  : m_mean (m),
-    m_bound (0)
-{
-  NS_LOG_FUNCTION (this << m);
-}
-
-ExponentialVariableImpl::ExponentialVariableImpl (double m, double b)
-  : m_mean (m),
-    m_bound (b)
-{
-  NS_LOG_FUNCTION (this << m << b);
-}
-
-ExponentialVariableImpl::ExponentialVariableImpl (const ExponentialVariableImpl& c)
-  : RandomVariableBase (c),
-    m_mean (c.m_mean),
-    m_bound (c.m_bound)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-double ExponentialVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-  while (1)
-    {
-      double r = -m_mean*std::log (generator->RandU01 ());
-      if (m_bound == 0 || r <= m_bound)
-        {
-          return r;
-        }
-      // otherwise, try again
-    }
-}
-
-RandomVariableBase* ExponentialVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new ExponentialVariableImpl (*this);
-}
-
-ExponentialVariable::ExponentialVariable ()
-  : RandomVariable (ExponentialVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-ExponentialVariable::ExponentialVariable (double m)
-  : RandomVariable (ExponentialVariableImpl (m))
-{
-  NS_LOG_FUNCTION (this << m);
-}
-ExponentialVariable::ExponentialVariable (double m, double b)
-  : RandomVariable (ExponentialVariableImpl (m, b))
-{
-  NS_LOG_FUNCTION (this << m << b);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// ParetoVariableImpl methods
-/** \ingroup legacyrandom */
-class ParetoVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * Constructs a pareto random variable with a mean of 1 and a shape
-   * parameter of 1.5
-   */
-  ParetoVariableImpl ();
-
-  /**
-   * \brief Constructs a pareto random variable with specified mean and shape
-   * parameter of 1.5
-   *
-   * \param m Mean value of the distribution
-   */
-  explicit ParetoVariableImpl (double m);
-
-  /**
-   * \brief Constructs a pareto random variable with the specified mean
-   * value and shape parameter. Beware, s must be strictly greater than 1.
-   *
-   * \param m Mean value of the distribution
-   * \param s Shape parameter for the distribution
-   */
-  ParetoVariableImpl (double m, double s);
-
-  /**
-   * \brief Constructs a pareto random variable with the specified mean
-   * value, shape (alpha), and upper bound. Beware, s must be strictly greater than 1.
-   *
-   * Since pareto distributions can theoretically return unbounded values,
-   * it is sometimes useful to specify a fixed upper limit.  Note however
-   * when the upper limit is specified, the true mean of the distribution
-   * is slightly smaller than the mean value specified.
-   * \param m Mean value
-   * \param s Shape parameter
-   * \param b Upper limit on returned values
-   */
-  ParetoVariableImpl (double m, double s, double b);
-
-  /**
-   * \brief Constructs a pareto random variable with the specified scale and shape
-   * parameters.
-   *
-   * \param params the two parameters, respectively scale and shape, of the distribution
-   */
-  ParetoVariableImpl (std::pair<double, double> params);
-
-  /**
-   * \brief Constructs a pareto random variable with the specified
-   * scale, shape (alpha), and upper bound.
-   *
-   * Since pareto distributions can theoretically return unbounded values,
-   * it is sometimes useful to specify a fixed upper limit.  Note however
-   * when the upper limit is specified, the true mean of the distribution
-   * is slightly smaller than the mean value specified.
-   *
-   * \param params the two parameters, respectively scale and shape, of the distribution
-   * \param b Upper limit on returned values
-   */
-  ParetoVariableImpl (std::pair<double, double> params, double b);
-
-  ParetoVariableImpl (const ParetoVariableImpl& c);
-
-  /**
-   * \return A random value from this Pareto distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy () const;
-
-private:
-  double m_scale; // Scale value of RV
-  double m_shape; // Shape parameter
-  double m_bound; // Upper bound on value (if non-zero)
-};
-
-ParetoVariableImpl::ParetoVariableImpl ()
-  : m_scale (0.5 / 1.5),
-    m_shape (1.5),
-    m_bound (0)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-ParetoVariableImpl::ParetoVariableImpl (double m)
-  : m_scale (m * 0.5 / 1.5),
-    m_shape (1.5),
-    m_bound (0)
-{
-  NS_LOG_FUNCTION (this << m);
-}
-
-ParetoVariableImpl::ParetoVariableImpl (double m, double s)
-  : m_scale (m * (s - 1.0) / s),
-    m_shape (s),
-    m_bound (0)
-{
-  NS_LOG_FUNCTION (this << m << s);
-}
-
-ParetoVariableImpl::ParetoVariableImpl (double m, double s, double b)
-  : m_scale (m * (s - 1.0) / s),
-    m_shape (s),
-    m_bound (b)
-{
-  NS_LOG_FUNCTION (this << m << s << b);
-}
-
-ParetoVariableImpl::ParetoVariableImpl (std::pair<double, double> params)
-  : m_scale (params.first),
-    m_shape (params.second),
-    m_bound (0)
-{
-  NS_LOG_FUNCTION (this << &params);
-}
-
-ParetoVariableImpl::ParetoVariableImpl (std::pair<double, double> params, double b)
-  : m_scale (params.first),
-    m_shape (params.second),
-    m_bound (b)
-{
-  NS_LOG_FUNCTION (this << &params << b);
-}
-
-ParetoVariableImpl::ParetoVariableImpl (const ParetoVariableImpl& c)
-  : RandomVariableBase (c),
-    m_scale (c.m_scale),
-    m_shape (c.m_shape),
-    m_bound (c.m_bound)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-double ParetoVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-  while (1)
-    {
-      double r = (m_scale * ( 1.0 / std::pow (generator->RandU01 (), 1.0 / m_shape)));
-      if (m_bound == 0 || r <= m_bound)
-        {
-          return r;
-        }
-      // otherwise, try again
-    }
-}
-
-RandomVariableBase* ParetoVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new ParetoVariableImpl (*this);
-}
-
-ParetoVariable::ParetoVariable ()
-  : RandomVariable (ParetoVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-ParetoVariable::ParetoVariable (double m)
-  : RandomVariable (ParetoVariableImpl (m))
-{
-  NS_LOG_FUNCTION (this << m);
-}
-ParetoVariable::ParetoVariable (double m, double s)
-  : RandomVariable (ParetoVariableImpl (m, s))
-{
-  NS_LOG_FUNCTION (this << m << s);
-}
-ParetoVariable::ParetoVariable (double m, double s, double b)
-  : RandomVariable (ParetoVariableImpl (m, s, b))
-{
-  NS_LOG_FUNCTION (this << m << s << b);
-}
-ParetoVariable::ParetoVariable (std::pair<double, double> params)
-  : RandomVariable (ParetoVariableImpl (params))
-{
-  NS_LOG_FUNCTION (this << &params);
-}
-ParetoVariable::ParetoVariable (std::pair<double, double> params, double b)
-  : RandomVariable (ParetoVariableImpl (params, b))
-{
-  NS_LOG_FUNCTION (this << &params << b);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// WeibullVariableImpl methods
-
-/** \ingroup legacyrandom */
-class WeibullVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * Constructs a weibull random variable  with a mean
-   * value of 1.0 and a shape (alpha) parameter of 1
-   */
-  WeibullVariableImpl ();
-
-
-  /**
-   * Constructs a weibull random variable with the specified mean
-   * value and a shape (alpha) parameter of 1.5.
-   * \param m mean value of the distribution
-   */
-  WeibullVariableImpl (double m);
-
-  /**
-   * Constructs a weibull random variable with the specified mean
-   * value and a shape (alpha).
-   * \param m Mean value for the distribution.
-   * \param s Shape (alpha) parameter for the distribution.
-   */
-  WeibullVariableImpl (double m, double s);
-
-  /**
-  * \brief Constructs a weibull random variable with the specified mean
-  * \brief value, shape (alpha), and upper bound.
-  * Since WeibullVariableImpl distributions can theoretically return unbounded values,
-  * it is sometimes usefull to specify a fixed upper limit.  Note however
-  * that when the upper limit is specified, the true mean of the distribution
-  * is slightly smaller than the mean value specified.
-  * \param m Mean value for the distribution.
-  * \param s Shape (alpha) parameter for the distribution.
-  * \param b Upper limit on returned values
-  */
-  WeibullVariableImpl (double m, double s, double b);
-
-  WeibullVariableImpl (const WeibullVariableImpl& c);
-
-  /**
-   * \return A random value from this Weibull distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy (void) const;
-
-private:
-  double m_mean;  // Mean value of RV
-  double m_alpha; // Shape parameter
-  double m_bound; // Upper bound on value (if non-zero)
-};
-
-WeibullVariableImpl::WeibullVariableImpl () : m_mean (1.0),
-                                              m_alpha (1),
-                                              m_bound (0)
-{
-  NS_LOG_FUNCTION (this);
-}
-WeibullVariableImpl::WeibullVariableImpl (double m)
-  : m_mean (m),
-    m_alpha (1),
-    m_bound (0)
-{
-  NS_LOG_FUNCTION (this << m);
-}
-WeibullVariableImpl::WeibullVariableImpl (double m, double s)
-  : m_mean (m),
-    m_alpha (s),
-    m_bound (0)
-{
-  NS_LOG_FUNCTION (this << m << s);
-}
-WeibullVariableImpl::WeibullVariableImpl (double m, double s, double b)
-  : m_mean (m),
-    m_alpha (s),
-    m_bound (b)
-{
-  NS_LOG_FUNCTION (this << m << s << b);
-}
-WeibullVariableImpl::WeibullVariableImpl (const WeibullVariableImpl& c)
-  : RandomVariableBase (c),
-    m_mean (c.m_mean),
-    m_alpha (c.m_alpha),
-    m_bound (c.m_bound)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-double WeibullVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-  double exponent = 1.0 / m_alpha;
-  while (1)
-    {
-      double r = m_mean * std::pow ( -std::log (generator->RandU01 ()), exponent);
-      if (m_bound == 0 || r <= m_bound)
-        {
-          return r;
-        }
-      // otherwise, try again
-    }
-}
-
-RandomVariableBase* WeibullVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new WeibullVariableImpl (*this);
-}
-
-WeibullVariable::WeibullVariable ()
-  : RandomVariable (WeibullVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-WeibullVariable::WeibullVariable (double m)
-  : RandomVariable (WeibullVariableImpl (m))
-{
-  NS_LOG_FUNCTION (this << m);
-}
-WeibullVariable::WeibullVariable (double m, double s)
-  : RandomVariable (WeibullVariableImpl (m, s))
-{
-  NS_LOG_FUNCTION (this << m << s);
-}
-WeibullVariable::WeibullVariable (double m, double s, double b)
-  : RandomVariable (WeibullVariableImpl (m, s, b))
-{
-  NS_LOG_FUNCTION (this << m << s << b);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// NormalVariableImpl methods
-
-/** \ingroup legacyrandom */
-class NormalVariableImpl : public RandomVariableBase   // Normally Distributed random var
-
-{
-public:
-  static const double INFINITE_VALUE;
-  /**
-   * Constructs an normal random variable  with a mean
-   * value of 0 and variance of 1.
-   */
-  NormalVariableImpl ();
-
-  /**
-   * \brief Construct a normal random variable with specified mean and variance
-   * \param m Mean value
-   * \param v Variance
-   * \param b Bound.  The NormalVariableImpl is bounded within +-bound of the mean.
-   */
-  NormalVariableImpl (double m, double v, double b = INFINITE_VALUE);
-
-  NormalVariableImpl (const NormalVariableImpl& c);
-
-  /**
-   * \return A value from this normal distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy (void) const;
-
-  double GetMean (void) const;
-  double GetVariance (void) const;
-  double GetBound (void) const;
-
-private:
-  double m_mean;      // Mean value of RV
-  double m_variance;  // Mean value of RV
-  double m_bound;     // Bound on value's difference from the mean (absolute value)
-  bool   m_nextValid; // True if next valid
-  double m_next;      // The algorithm produces two values at a time
-};
-
-const double NormalVariableImpl::INFINITE_VALUE = 1e307;
-
-NormalVariableImpl::NormalVariableImpl ()
-  : m_mean (0.0),
-    m_variance (1.0),
-    m_bound (INFINITE_VALUE),
-    m_nextValid (false)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-NormalVariableImpl::NormalVariableImpl (double m, double v, double b)
-  : m_mean (m),
-    m_variance (v),
-    m_bound (b),
-    m_nextValid (false)
-{
-  NS_LOG_FUNCTION (this << m << v << b);
-}
-
-NormalVariableImpl::NormalVariableImpl (const NormalVariableImpl& c)
-  : RandomVariableBase (c),
-    m_mean (c.m_mean),
-    m_variance (c.m_variance),
-    m_bound (c.m_bound),
-    m_nextValid (false)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-double NormalVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-  if (m_nextValid)
-    { // use previously generated
-      m_nextValid = false;
-      return m_next;
-    }
-  while (1)
-    { // See Simulation Modeling and Analysis p. 466 (Averill Law)
-      // for algorithm; basically a Box-Muller transform:
-      // http://en.wikipedia.org/wiki/Box-Muller_transform
-      double u1 = generator->RandU01 ();
-      double u2 = generator->RandU01 ();
-      double v1 = 2 * u1 - 1;
-      double v2 = 2 * u2 - 1;
-      double w = v1 * v1 + v2 * v2;
-      if (w <= 1.0)
-        { // Got good pair
-          double y = std::sqrt ((-2 * std::log (w)) / w);
-          m_next = m_mean + v2 * y * std::sqrt (m_variance);
-          // if next is in bounds, it is valid
-          m_nextValid = std::fabs (m_next - m_mean) <= m_bound;
-          double x1 = m_mean + v1 * y * std::sqrt (m_variance);
-          // if x1 is in bounds, return it
-          if (std::fabs (x1 - m_mean) <= m_bound)
-            {
-              return x1;
-            }
-          // otherwise try and return m_next if it is valid
-          else if (m_nextValid)
-            {
-              m_nextValid = false;
-              return m_next;
-            }
-          // otherwise, just run this loop again
-        }
-    }
-}
-
-RandomVariableBase* NormalVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new NormalVariableImpl (*this);
-}
-
-double
-NormalVariableImpl::GetMean (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_mean;
-}
-
-double
-NormalVariableImpl::GetVariance (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_variance;
-}
-
-double
-NormalVariableImpl::GetBound (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_bound;
-}
-
-NormalVariable::NormalVariable ()
-  : RandomVariable (NormalVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-NormalVariable::NormalVariable (double m, double v)
-  : RandomVariable (NormalVariableImpl (m, v))
-{
-  NS_LOG_FUNCTION (this << m << v);
-}
-NormalVariable::NormalVariable (double m, double v, double b)
-  : RandomVariable (NormalVariableImpl (m, v, b))
-{
-  NS_LOG_FUNCTION (this << m << v << b);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-/** \ingroup legacyrandom */
-class EmpiricalVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * Constructor for the EmpiricalVariableImpl random variables.
-   */
-  explicit EmpiricalVariableImpl ();
-
-  virtual ~EmpiricalVariableImpl ();
-  EmpiricalVariableImpl (const EmpiricalVariableImpl& c);
-  /**
-   * \return A value from this empirical distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy (void) const;
-  /**
-   * \brief Specifies a point in the empirical distribution
-   * \param v The function value for this point
-   * \param c Probability that the function is less than or equal to v
-   */
-  virtual void CDF (double v, double c);  // Value, prob <= Value
-
-private:
-  class ValueCDF
-  {
-public:
-    ValueCDF ();
-    ValueCDF (double v, double c);
-    ValueCDF (const ValueCDF& c);
-    double value;
-    double    cdf;
-  };
-  virtual void Validate ();  // Insure non-decreasing emiprical values
-  virtual double Interpolate (double, double, double, double, double);
-  bool validated; // True if non-decreasing validated
-  std::vector<ValueCDF> emp;       // Empicical CDF
-};
-
-
-// ValueCDF methods
-EmpiricalVariableImpl::ValueCDF::ValueCDF ()
-  : value (0.0),
-    cdf (0.0)
-{
-  NS_LOG_FUNCTION (this);
-}
-EmpiricalVariableImpl::ValueCDF::ValueCDF (double v, double c)
-  : value (v),
-    cdf (c)
-{
-  NS_LOG_FUNCTION (this << v << c);
-}
-EmpiricalVariableImpl::ValueCDF::ValueCDF (const ValueCDF& c)
-  : value (c.value),
-    cdf (c.cdf)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// EmpiricalVariableImpl methods
-EmpiricalVariableImpl::EmpiricalVariableImpl ()
-  : validated (false)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-EmpiricalVariableImpl::EmpiricalVariableImpl (const EmpiricalVariableImpl& c)
-  : RandomVariableBase (c),
-    validated (c.validated),
-    emp (c.emp)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-EmpiricalVariableImpl::~EmpiricalVariableImpl ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-double EmpiricalVariableImpl::GetValue ()
-{ // Return a value from the empirical distribution
-  // This code based (loosely) on code by Bruce Mah (Thanks Bruce!)
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-  if (emp.size () == 0)
-    {
-      return 0.0; // HuH? No empirical data
-    }
-  if (!validated)
-    {
-      Validate ();      // Insure in non-decreasing
-    }
-  double r = generator->RandU01 ();
-  if (r <= emp.front ().cdf)
-    {
-      return emp.front ().value; // Less than first
-    }
-  if (r >= emp.back ().cdf)
-    {
-      return emp.back ().value;  // Greater than last
-    }
-  // Binary search
-  std::vector<ValueCDF>::size_type bottom = 0;
-  std::vector<ValueCDF>::size_type top = emp.size () - 1;
-  while (1)
-    {
-      std::vector<ValueCDF>::size_type c = (top + bottom) / 2;
-      if (r >= emp[c].cdf && r < emp[c + 1].cdf)
-        { // Found it
-          return Interpolate (emp[c].cdf, emp[c + 1].cdf,
-                              emp[c].value, emp[c + 1].value,
-                              r);
-        }
-      // Not here, adjust bounds
-      if (r < emp[c].cdf)
-        {
-          top    = c - 1;
-        }
-      else
-        {
-          bottom = c + 1;
-        }
-    }
-}
-
-RandomVariableBase* EmpiricalVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new EmpiricalVariableImpl (*this);
-}
-
-void EmpiricalVariableImpl::CDF (double v, double c)
-{ // Add a new empirical datapoint to the empirical cdf
-  // NOTE.   These MUST be inserted in non-decreasing order
-  NS_LOG_FUNCTION (this << v << c);
-  emp.push_back (ValueCDF (v, c));
-}
-
-void EmpiricalVariableImpl::Validate ()
-{
-  NS_LOG_FUNCTION (this);
-  ValueCDF prior;
-  for (std::vector<ValueCDF>::size_type i = 0; i < emp.size (); ++i)
-    {
-      ValueCDF& current = emp[i];
-      if (current.value < prior.value || current.cdf < prior.cdf)
-        { // Error
-          std::cerr << "Empirical Dist error,"
-                    << " current value " << current.value
-                    << " prior value "   << prior.value
-                    << " current cdf "   << current.cdf
-                    << " prior cdf "     << prior.cdf << std::endl;
-          NS_FATAL_ERROR ("Empirical Dist error");
-        }
-      prior = current;
-    }
-  validated = true;
-}
-
-double EmpiricalVariableImpl::Interpolate (double c1, double c2,
-                                           double v1, double v2, double r)
-{ // Interpolate random value in range [v1..v2) based on [c1 .. r .. c2)
-  NS_LOG_FUNCTION (this << c1 << c2 << v1 << v2 << r);
-  return (v1 + ((v2 - v1) / (c2 - c1)) * (r - c1));
-}
-
-EmpiricalVariable::EmpiricalVariable ()
-  : RandomVariable (EmpiricalVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-EmpiricalVariable::EmpiricalVariable (const RandomVariableBase &variable)
-  : RandomVariable (variable)
-{
-  NS_LOG_FUNCTION (this << &variable);
-}
-void
-EmpiricalVariable::CDF (double v, double c)
-{
-  NS_LOG_FUNCTION (this << v << c);
-  EmpiricalVariableImpl *impl = dynamic_cast<EmpiricalVariableImpl *> (Peek ());
-  NS_ASSERT (impl);
-  impl->CDF (v, c);
-}
-
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// IntegerValue EmpiricalVariableImpl methods
-/** \ingroup legacyrandom */
-class IntEmpiricalVariableImpl : public EmpiricalVariableImpl
-{
-public:
-  IntEmpiricalVariableImpl ();
-
-  virtual RandomVariableBase* Copy (void) const;
-  /**
-   * \return An integer value from this empirical distribution
-   */
-  virtual uint32_t GetInteger ();
-private:
-  virtual double Interpolate (double, double, double, double, double);
-};
-
-
-IntEmpiricalVariableImpl::IntEmpiricalVariableImpl ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-uint32_t IntEmpiricalVariableImpl::GetInteger ()
-{
-  NS_LOG_FUNCTION (this);
-  return (uint32_t)GetValue ();
-}
-
-RandomVariableBase* IntEmpiricalVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new IntEmpiricalVariableImpl (*this);
-}
-
-double IntEmpiricalVariableImpl::Interpolate (double c1, double c2,
-                                              double v1, double v2, double r)
-{ // Interpolate random value in range [v1..v2) based on [c1 .. r .. c2)
-  NS_LOG_FUNCTION (this << c1 << c2 << v1 << v2 << r);
-  return std::ceil (v1 + ((v2 - v1) / (c2 - c1)) * (r - c1));
-}
-
-IntEmpiricalVariable::IntEmpiricalVariable ()
-  : EmpiricalVariable (IntEmpiricalVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// DeterministicVariableImpl
-/** \ingroup legacyrandom */
-class DeterministicVariableImpl : public RandomVariableBase
-{
-
-public:
-  /**
-   * \brief Constructor
-   *
-   * Creates a generator that returns successive elements of the d array
-   * on successive calls to GetValue().  Note that the d pointer is copied
-   * for use by the generator (shallow-copy), not its contents, so the
-   * contents of the array d points to have to remain unchanged for the use
-   * of DeterministicVariableImpl to be meaningful.
-   * \param d Pointer to array of random values to return in sequence
-   * \param c Number of values in the array
-   */
-  explicit DeterministicVariableImpl (double* d, uint32_t c);
-
-  virtual ~DeterministicVariableImpl ();
-  /**
-   * \return The next value in the deterministic sequence
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy (void) const;
-private:
-  uint32_t   count;
-  uint32_t   next;
-  double* data;
-};
-
-DeterministicVariableImpl::DeterministicVariableImpl (double* d, uint32_t c)
-  : count (c),
-    next (c),
-    data (d)
-{ // Nothing else needed
-  NS_LOG_FUNCTION (this << d << c);
-}
-
-DeterministicVariableImpl::~DeterministicVariableImpl ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-double DeterministicVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  if (next == count)
-    {
-      next = 0;
-    }
-  return data[next++];
-}
-
-RandomVariableBase* DeterministicVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new DeterministicVariableImpl (*this);
-}
-
-DeterministicVariable::DeterministicVariable (double* d, uint32_t c)
-  : RandomVariable (DeterministicVariableImpl (d, c))
-{
-  NS_LOG_FUNCTION (this << d << c);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// LogNormalVariableImpl
-/** \ingroup legacyrandom */
-class LogNormalVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * \param mu mu parameter of the lognormal distribution
-   * \param sigma sigma parameter of the lognormal distribution
-   */
-  LogNormalVariableImpl (double mu, double sigma);
-
-  /**
-   * \return A random value from this distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy (void) const;
-
-private:
-  double m_mu;
-  double m_sigma;
-};
-
-
-RandomVariableBase* LogNormalVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new LogNormalVariableImpl (*this);
-}
-
-LogNormalVariableImpl::LogNormalVariableImpl (double mu, double sigma)
-  : m_mu (mu),
-    m_sigma (sigma)
-{
-  NS_LOG_FUNCTION (this << mu << sigma);
-}
-
-// The code from this function was adapted from the GNU Scientific
-// Library 1.8:
-/* randist/lognormal.c
- *
- * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-/* The lognormal distribution has the form
-
-   p(x) dx = 1/(x * sqrt(2 pi sigma^2)) exp(-(ln(x) - zeta)^2/2 sigma^2) dx
-
-   for x > 0. Lognormal random numbers are the exponentials of
-   gaussian random numbers */
-double
-LogNormalVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-  double u, v, r2, normal, z;
-
-  do
-    {
-      /* choose x,y in uniform square (-1,-1) to (+1,+1) */
-
-      u = -1 + 2 * generator->RandU01 ();
-      v = -1 + 2 * generator->RandU01 ();
-
-      /* see if it is in the unit circle */
-      r2 = u * u + v * v;
-    }
-  while (r2 > 1.0 || r2 == 0);
-
-  normal = u * std::sqrt (-2.0 * std::log (r2) / r2);
-
-  z = std::exp (m_sigma * normal + m_mu);
-
-  return z;
-}
-
-LogNormalVariable::LogNormalVariable (double mu, double sigma)
-  : RandomVariable (LogNormalVariableImpl (mu, sigma))
-{
-  NS_LOG_FUNCTION (this << mu << sigma);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// GammaVariableImpl
-/** \ingroup legacyrandom */
-class GammaVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * \param alpha alpha parameter of the gamma distribution
-   * \param beta beta parameter of the gamma distribution
-   */
-  GammaVariableImpl (double alpha, double beta);
-
-  /**
-   * \return A random value from this distribution
-   */
-  virtual double GetValue ();
-
-  /**
-   * \return A random value from the gamma distribution with parameters alpha
-   * and beta
-   */
-  double GetValue (double alpha, double beta);
-
-  virtual RandomVariableBase* Copy (void) const;
-
-private:
-  double m_alpha;
-  double m_beta;
-  NormalVariable m_normal;
-};
-
-
-RandomVariableBase* GammaVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new GammaVariableImpl (m_alpha, m_beta);
-}
-
-GammaVariableImpl::GammaVariableImpl (double alpha, double beta)
-  : m_alpha (alpha),
-    m_beta (beta)
-{
-  NS_LOG_FUNCTION (this << alpha << beta);
-}
-
-double
-GammaVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  return GetValue (m_alpha, m_beta);
-}
-
-/*
-  The code for the following generator functions was adapted from ns-2
-  tools/ranvar.cc
-
-  Originally the algorithm was devised by Marsaglia in 2000:
-  G. Marsaglia, W. W. Tsang: A simple method for gereating Gamma variables
-  ACM Transactions on mathematical software, Vol. 26, No. 3, Sept. 2000
-
-  The Gamma distribution density function has the form
-
-                             x^(alpha-1) * exp(-x/beta)
-        p(x; alpha, beta) = ----------------------------
-                             beta^alpha * Gamma(alpha)
-
-  for x > 0.
-*/
-double
-GammaVariableImpl::GetValue (double alpha, double beta)
-{
-  NS_LOG_FUNCTION (this << alpha << beta);
-  RngStream *generator = GetStream ();
-
-  if (alpha < 1)
-    {
-      double u = generator->RandU01 ();
-      return GetValue (1.0 + alpha, beta) * std::pow (u, 1.0 / alpha);
-    }
-
-  double x, v, u;
-  double d = alpha - 1.0 / 3.0;
-  double c = (1.0 / 3.0) / std::sqrt (d);
-
-  while (1)
-    {
-      do
-        {
-          x = m_normal.GetValue ();
-          v = 1.0 + c * x;
-        }
-      while (v <= 0);
-
-      v = v * v * v;
-      u = generator->RandU01 ();
-      if (u < 1 - 0.0331 * x * x * x * x)
-        {
-          break;
-        }
-      if (std::log (u) < 0.5 * x * x + d * (1 - v + std::log (v)))
-        {
-          break;
-        }
-    }
-
-  return beta * d * v;
-}
-
-GammaVariable::GammaVariable ()
-  : RandomVariable (GammaVariableImpl (1.0, 1.0))
-{
-  NS_LOG_FUNCTION (this);
-}
-
-GammaVariable::GammaVariable (double alpha, double beta)
-  : RandomVariable (GammaVariableImpl (alpha, beta))
-{
-  NS_LOG_FUNCTION (this << alpha << beta);
-}
-
-double GammaVariable::GetValue (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return this->RandomVariable::GetValue ();
-}
-
-double GammaVariable::GetValue (double alpha, double beta) const
-{
-  NS_LOG_FUNCTION (this << alpha << beta);
-  return ((GammaVariableImpl*)Peek ())->GetValue (alpha, beta);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// ErlangVariableImpl
-
-/** \ingroup legacyrandom */
-class ErlangVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * \param k k parameter of the Erlang distribution
-   * \param lambda lambda parameter of the Erlang distribution
-   */
-  ErlangVariableImpl (unsigned int k, double lambda);
-
-  /**
-   * \return A random value from this distribution
-   */
-  virtual double GetValue ();
-
-  /**
-   * \return A random value from the Erlang distribution with parameters k and
-   * lambda.
-   */
-  double GetValue (unsigned int k, double lambda);
-
-  virtual RandomVariableBase* Copy (void) const;
-
-private:
-  unsigned int m_k;
-  double m_lambda;
-};
-
-
-RandomVariableBase* ErlangVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new ErlangVariableImpl (m_k, m_lambda);
-}
-
-ErlangVariableImpl::ErlangVariableImpl (unsigned int k, double lambda)
-  : m_k (k),
-    m_lambda (lambda)
-{
-  NS_LOG_FUNCTION (this << k << lambda);
-}
-
-double
-ErlangVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  return GetValue (m_k, m_lambda);
-}
-
-/*
-  The code for the following generator functions was adapted from ns-2
-  tools/ranvar.cc
-
-  The Erlang distribution density function has the form
-
-                           x^(k-1) * exp(-x/lambda)
-        p(x; k, lambda) = ---------------------------
-                             lambda^k * (k-1)!
-
-  for x > 0.
-*/
-double
-ErlangVariableImpl::GetValue (unsigned int k, double lambda)
-{
-  /// \todo do not create a new 
-  /// RNG stream every time the function is called !
-  NS_LOG_FUNCTION (this << k << lambda);
-  ExponentialVariable exponential (lambda);
-
-  double result = 0;
-  for (unsigned int i = 0; i < k; ++i)
-    {
-      result += exponential.GetValue ();
-    }
-
-  return result;
-}
-
-ErlangVariable::ErlangVariable ()
-  : RandomVariable (ErlangVariableImpl (1, 1.0))
-{
-  NS_LOG_FUNCTION (this);
-}
-
-ErlangVariable::ErlangVariable (unsigned int k, double lambda)
-  : RandomVariable (ErlangVariableImpl (k, lambda))
-{
-  NS_LOG_FUNCTION (this << k << lambda);
-}
-
-double ErlangVariable::GetValue (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return this->RandomVariable::GetValue ();
-}
-
-double ErlangVariable::GetValue (unsigned int k, double lambda) const
-{
-  NS_LOG_FUNCTION (this << k << lambda);
-  return ((ErlangVariableImpl*)Peek ())->GetValue (k, lambda);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// TriangularVariableImpl methods
-/** \ingroup legacyrandom */
-class TriangularVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * Creates a triangle distribution random number generator in the
-   * range [0.0 .. 1.0), with mean of 0.5
-   */
-  TriangularVariableImpl ();
-
-  /**
-   * Creates a triangle distribution random number generator with the specified
-   * range
-   * \param s Low end of the range
-   * \param l High end of the range
-   * \param mean mean of the distribution
-   */
-  TriangularVariableImpl (double s, double l, double mean);
-
-  TriangularVariableImpl (const TriangularVariableImpl& c);
-
-  /**
-   * \return A value from this distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase*  Copy (void) const;
-
-private:
-  double m_min;
-  double m_max;
-  double m_mode;  // easier to work with the mode internally instead of the mean
-                  // they are related by the simple: mean = (min+max+mode)/3
-};
-
-TriangularVariableImpl::TriangularVariableImpl ()
-  : m_min (0),
-    m_max (1),
-    m_mode (0.5)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-TriangularVariableImpl::TriangularVariableImpl (double s, double l, double mean)
-  : m_min (s),
-    m_max (l),
-    m_mode (3.0 * mean - s - l)
-{
-  NS_LOG_FUNCTION (this << s << l << mean);
-}
-
-TriangularVariableImpl::TriangularVariableImpl (const TriangularVariableImpl& c)
-  : RandomVariableBase (c),
-    m_min (c.m_min),
-    m_max (c.m_max),
-    m_mode (c.m_mode)
-{
-  NS_LOG_FUNCTION (this << &c);
-}
-
-double TriangularVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-  double u = generator->RandU01 ();
-  if (u <= (m_mode - m_min) / (m_max - m_min) )
-    {
-      return m_min + std::sqrt (u * (m_max - m_min) * (m_mode - m_min) );
-    }
-  else
-    {
-      return m_max - std::sqrt ( (1 - u) * (m_max - m_min) * (m_max - m_mode) );
-    }
-}
-
-RandomVariableBase* TriangularVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new TriangularVariableImpl (*this);
-}
-
-TriangularVariable::TriangularVariable ()
-  : RandomVariable (TriangularVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-TriangularVariable::TriangularVariable (double s, double l, double mean)
-  : RandomVariable (TriangularVariableImpl (s,l,mean))
-{
-  NS_LOG_FUNCTION (this << s << l << mean);
-}
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// ZipfVariableImpl
-/** \ingroup legacyrandom */
-class ZipfVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * \param n the number of possible items
-   * \param alpha the alpha parameter
-   */
-  ZipfVariableImpl (long n, double alpha);
-
-  /**
-   * A zipf variable with N=1 and alpha=0
-   */
-  ZipfVariableImpl ();
-
-  /**
-   * \return A random value from this distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy (void) const;
-
-private:
-  long m_n;
-  double m_alpha;
-  double m_c; // the normalization constant
-};
-
-
-RandomVariableBase* ZipfVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new ZipfVariableImpl (m_n, m_alpha);
-}
-
-ZipfVariableImpl::ZipfVariableImpl ()
-  : m_n (1),
-    m_alpha (0),
-    m_c (1)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-
-ZipfVariableImpl::ZipfVariableImpl (long n, double alpha)
-  : m_n (n),
-    m_alpha (alpha),
-    m_c (0)
-{
-  // calculate the normalization constant c
-  NS_LOG_FUNCTION (this << n << alpha);
-  for (int i = 1; i <= n; i++)
-    {
-      m_c += (1.0 / std::pow ((double)i, alpha));
-    }
-  m_c = 1.0 / m_c;
-}
-
-double
-ZipfVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-
-  double u = generator->RandU01 ();
-  double sum_prob = 0,zipf_value = 0;
-  for (int i = 1; i <= m_n; i++)
-    {
-      sum_prob += m_c / std::pow ((double)i, m_alpha);
-      if (sum_prob > u)
-        {
-          zipf_value = i;
-          break;
-        }
-    }
-  return zipf_value;
-}
-
-ZipfVariable::ZipfVariable ()
-  : RandomVariable (ZipfVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-
-ZipfVariable::ZipfVariable (long n, double alpha)
-  : RandomVariable (ZipfVariableImpl (n, alpha))
-{
-  NS_LOG_FUNCTION (this << n << alpha);
-}
-
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// ZetaVariableImpl
-/** \ingroup legacyrandom */
-class ZetaVariableImpl : public RandomVariableBase
-{
-public:
-  /**
-   * \param alpha the alpha parameter
-   */
-  ZetaVariableImpl (double alpha);
-
-  /**
-   * A zipf variable with alpha=1.1
-   */
-  ZetaVariableImpl ();
-
-  /**
-   * \return A random value from this distribution
-   */
-  virtual double GetValue ();
-  virtual RandomVariableBase* Copy (void) const;
-
-private:
-  double m_alpha;
-  double m_b; // just for calculus simplifications
-};
-
-
-RandomVariableBase* ZetaVariableImpl::Copy () const
-{
-  NS_LOG_FUNCTION (this);
-  return new ZetaVariableImpl (m_alpha);
-}
-
-ZetaVariableImpl::ZetaVariableImpl ()
-  : m_alpha (3.14),
-    m_b (std::pow (2.0, 2.14))
-{
-  NS_LOG_FUNCTION (this);
-}
-
-
-ZetaVariableImpl::ZetaVariableImpl (double alpha)
-  : m_alpha (alpha),
-    m_b (std::pow (2.0, alpha - 1.0))
-{
-  NS_LOG_FUNCTION (this << alpha);
-}
-
-/*
- The code for the following generator functions is borrowed from:
- L. Devroye: Non-Uniform Random Variate Generation, Springer-Verlag, New York, 1986.
- page 551
- */
-double
-ZetaVariableImpl::GetValue ()
-{
-  NS_LOG_FUNCTION (this);
-  RngStream *generator = GetStream ();
-
-  double u, v;
-  double X, T;
-  double test;
-
-  do
-    {
-      u = generator->RandU01 ();
-      v = generator->RandU01 ();
-      X = floor (std::pow (u, -1.0 / (m_alpha - 1.0)));
-      T = std::pow (1.0 + 1.0 / X, m_alpha - 1.0);
-      test = v * X * (T - 1.0) / (m_b - 1.0);
-    }
-  while ( test > (T / m_b) );
-
-  return X;
-}
-
-ZetaVariable::ZetaVariable ()
-  : RandomVariable (ZetaVariableImpl ())
-{
-  NS_LOG_FUNCTION (this);
-}
-
-ZetaVariable::ZetaVariable (double alpha)
-  : RandomVariable (ZetaVariableImpl (alpha))
-{
-  NS_LOG_FUNCTION (this << alpha);
-}
-
-
-std::ostream & operator << (std::ostream &os, const RandomVariable &var)
-{
-  RandomVariableBase *base = var.Peek ();
-  ConstantVariableImpl *constant = dynamic_cast<ConstantVariableImpl *> (base);
-  if (constant != 0)
-    {
-      os << "Constant:" << constant->GetValue ();
-      return os;
-    }
-  UniformVariableImpl *uniform = dynamic_cast<UniformVariableImpl *> (base);
-  if (uniform != 0)
-    {
-      os << "Uniform:" << uniform->GetMin () << ":" << uniform->GetMax ();
-      return os;
-    }
-  NormalVariableImpl *normal = dynamic_cast<NormalVariableImpl *> (base);
-  if (normal != 0)
-    {
-      os << "Normal:" << normal->GetMean () << ":" << normal->GetVariance ();
-      double bound = normal->GetBound ();
-      if (bound != NormalVariableImpl::INFINITE_VALUE)
-        {
-          os << ":" << bound;
-        }
-      return os;
-    }
-  /// \todo support other distributions
-  os.setstate (std::ios_base::badbit);
-  return os;
-}
-std::istream & operator >> (std::istream &is, RandomVariable &var)
-{
-  std::string value;
-  is >> value;
-  std::string::size_type tmp;
-  tmp = value.find (":");
-  if (tmp == std::string::npos)
-    {
-      is.setstate (std::ios_base::badbit);
-      return is;
-    }
-  std::string type = value.substr (0, tmp);
-  value = value.substr (tmp + 1, value.npos);
-  if (type == "Constant")
-    {
-      std::istringstream iss (value);
-      double constant;
-      iss >> constant;
-      var = ConstantVariable (constant);
-    }
-  else if (type == "Uniform")
-    {
-      if (value.size () == 0)
-        {
-          var = UniformVariable ();
-        }
-      else
-        {
-          tmp = value.find (":");
-          if (tmp == value.npos)
-            {
-              NS_FATAL_ERROR ("bad Uniform value: " << value);
-            }
-          std::istringstream issA (value.substr (0, tmp));
-          std::istringstream issB (value.substr (tmp + 1, value.npos));
-          double a, b;
-          issA >> a;
-          issB >> b;
-          var = UniformVariable (a, b);
-        }
-    }
-  else if (type == "Normal")
-    {
-      if (value.size () == 0)
-        {
-          var = NormalVariable ();
-        }
-      else
-        {
-          tmp = value.find (":");
-          if (tmp == value.npos)
-            {
-              NS_FATAL_ERROR ("bad Normal value: " << value);
-            }
-          std::string::size_type tmp2;
-          std::string sub = value.substr (tmp + 1, value.npos);
-          tmp2 = sub.find (":");
-          if (tmp2 == value.npos)
-            {
-              std::istringstream issA (value.substr (0, tmp));
-              std::istringstream issB (sub);
-              double a, b;
-              issA >> a;
-              issB >> b;
-              var = NormalVariable (a, b);
-            }
-          else
-            {
-              std::istringstream issA (value.substr (0, tmp));
-              std::istringstream issB (sub.substr (0, tmp2));
-              std::istringstream issC (sub.substr (tmp2 + 1, value.npos));
-              double a, b, c;
-              issA >> a;
-              issB >> b;
-              issC >> c;
-              var = NormalVariable (a, b, c);
-            }
-        }
-    }
-  else
-    {
-      NS_FATAL_ERROR ("RandomVariable deserialization not implemented for " << type);
-      /// \todo support other distributions.
-    }
-  return is;
-}
-
-} // namespace ns3
diff -Naur ns-3.21/src/core/model/random-variable.h ns-3.22/src/core/model/random-variable.h
--- ns-3.21/src/core/model/random-variable.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/random-variable.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,755 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-//
-// Copyright (c) 2006 Georgia Tech Research Corporation
-//
-// 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: Rajib Bhattacharjea<raj.b@gatech.edu>
-// Author: Hadi Arbabi<marbabi@cs.odu.edu>
-//
-
-#ifndef NS3_RANDOM_VARIABLE_H
-#define NS3_RANDOM_VARIABLE_H
-
-#include <vector>
-#include <algorithm>
-#include <stdint.h>
-#include <istream>
-#include <ostream>
-#include "attribute.h"
-#include "attribute-helper.h"
-#include "rng-seed-manager.h"
-
-/**
- * \ingroup randomvariable
- * \defgroup legacyrandom Legacy Random Variables
- */
-
-namespace ns3 {
-
-/**
- * \ingroup legacyrandom
- */
-class RandomVariableBase;
-
-/**
- * \brief The basic RNG for NS-3.
- * \ingroup legacyrandom
- *
- * Note: The underlying random number generation method used
- * by NS-3 is the RngStream code by Pierre L'Ecuyer at
- * the University of Montreal.
- *
- * NS-3 has a rich set of  random number generators.
- * Class RandomVariable defines the base class functionalty
- * required for all random number generators.  By default, the underlying
- * generator is seeded all the time with the same seed value and run number
- * coming from the ns3::GlobalValue \ref GlobalValueRngSeed "RngSeed" and \ref GlobalValueRngRun "RngRun".
- */
-class RandomVariable
-{
-public:
-  RandomVariable ();
-  RandomVariable (const RandomVariable&o);
-  RandomVariable &operator = (const RandomVariable &o);
-  ~RandomVariable ();
-
-  /**
-   * \brief Returns a random double from the underlying distribution
-   * \return A floating point random value
-   */
-  double GetValue (void) const;
-
-  /**
-   * \brief Returns a random integer integer from the underlying distribution
-   * \return  Integer cast of RandomVariable::GetValue
-   */
-  uint32_t GetInteger (void) const;
-
-private:
-  friend std::ostream & operator << (std::ostream &os, const RandomVariable &var);
-  friend std::istream & operator >> (std::istream &os, RandomVariable &var);
-
-  RandomVariableBase *m_variable;
-protected:
-  RandomVariable (const RandomVariableBase &variable);
-  RandomVariableBase * Peek (void) const;
-};
-
-/**
- * \brief The uniform distribution RNG for NS-3.
- * \ingroup legacyrandom
- *
- * This class supports the creation of objects that return random numbers
- * from a fixed uniform distribution.  It also supports the generation of
- * single random numbers from various uniform distributions.
- *
- * The low end of the range is always included and the high end
- * of the range is always excluded.
- * \code
- * UniformVariable x (0,10);
- * x.GetValue ();  //will always return numbers [0,10)
- * \endcode
- */
-class UniformVariable : public RandomVariable
-{
-public:
-  /**
-   * Creates a uniform random number generator in the
-   * range [0.0 .. 1.0).
-   */
-  UniformVariable ();
-
-  /**
-   * Creates a uniform random number generator with the specified range
-   * \param s Low end of the range
-   * \param l High end of the range
-   */
-  UniformVariable (double s, double l);
-
-  /**
-  * \brief call RandomVariable::GetValue
-  * \return A floating point random value
-  *
-  * Note: we have to re-implement this method here because the method is
-  * overloaded below for the two-argument variant and the c++ name resolution
-  * rules don't work well with overloads split between parent and child
-  * classes.
-  */
-  double GetValue (void) const;
-
-  /**
-  * \brief Returns a random double with the specified range
-  * \param s Low end of the range
-  * \param l High end of the range
-  * \return A floating point random value
-  */
-  double GetValue (double s, double l);
-
-  /**
-   * \brief Returns a random unsigned integer from the interval [s,l] including both ends.
-   * \param s Low end of the range
-   * \param l High end of the range
-   * \return A random unsigned integer value.
-   */
-  uint32_t GetInteger (uint32_t s, uint32_t l);
-};
-
-/**
- * \brief A random variable that returns a constant
- * \ingroup legacyrandom
- *
- * Class ConstantVariable defines a random number generator that
- * returns the same value every sample.
- */
-class ConstantVariable : public RandomVariable
-{
-
-public:
-  /**
-   * Construct a ConstantVariable RNG that returns zero every sample
-   */
-  ConstantVariable ();
-
-  /**
-   * Construct a ConstantVariable RNG that returns the specified value
-   * every sample.
-   * \param c Unchanging value for this RNG.
-   */
-  ConstantVariable (double c);
-
-  /**
-   * \brief Specify a new constant RNG for this generator.
-   * \param c New constant value for this RNG.
-   */
-  void SetConstant (double c);
-
-};
-
-/**
- * \brief Return a sequential list of values
- * \ingroup legacyrandom
- *
- * Class SequentialVariable defines a random number generator that
- * returns a sequential sequence.  The sequence monotonically
- * increases for a period, then wraps around to the low value
- * and begins monotonically increasing again.
- */
-class SequentialVariable : public RandomVariable
-{
-public:
-  /**
-   * \brief Constructor for the SequentialVariable RNG.
-   *
-   * The four parameters define the sequence.  For example
-   * SequentialVariable(0,5,1,2) creates a RNG that has the sequence
-   * 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 0 ...
-   * \param f First value of the sequence.
-   * \param l One more than the last value of the sequence.
-   * \param i Increment between sequence values
-   * \param c Number of times each member of the sequence is repeated
-   */
-  SequentialVariable (double f, double l, double i = 1, uint32_t c = 1);
-
-  /**
-   * \brief Constructor for the SequentialVariable RNG.
-   *
-   * Differs from the first only in that the increment parameter is a
-   * random variable
-   * \param f First value of the sequence.
-   * \param l One more than the last value of the sequence.
-   * \param i Reference to a RandomVariable for the sequence increment
-   * \param c Number of times each member of the sequence is repeated
-   */
-  SequentialVariable (double f, double l, const RandomVariable& i, uint32_t c = 1);
-
-};
-
-/**
- * \brief Exponentially Distributed random var
- * \ingroup legacyrandom
- *
- * This class supports the creation of objects that return random numbers
- * from a fixed exponential distribution.  It also supports the generation of
- * single random numbers from various exponential distributions.
- *
- * The probability density function of an exponential variable
- * is defined over the interval [0, +inf) as:
- * \f$ \alpha  e^{-\alpha x} \f$
- * where \f$ \alpha = \frac{1}{mean} \f$
- *
- * The bounded version is defined over the interval [0,b] as:
- * \f$ \alpha  e^{-\alpha x} \quad x \in [0,b] \f$.
- * Note that in this case the true mean is \f$ 1/\alpha - b/(e^{\alpha \, b}-1) \f$
- *
- * \code
- * ExponentialVariable x(3.14);
- * x.GetValue ();  //will always return with mean 3.14
- * \endcode
- *
- */
-class ExponentialVariable : public RandomVariable
-{
-public:
-  /**
-   * Constructs an exponential random variable  with a mean
-   * value of 1.0.
-   */
-  ExponentialVariable ();
-
-  /**
-   * \brief Constructs an exponential random variable with a specified mean
-   * \param m Mean value for the random variable
-   */
-  explicit ExponentialVariable (double m);
-
-  /**
-   * \brief Constructs an exponential random variable with specified
-   * mean and upper limit.
-   *
-   * Since exponential distributions can theoretically return unbounded values,
-   * it is sometimes useful to specify a fixed upper limit.  Note however when
-   * the upper limit is specified, the true mean of the distribution is
-   * slightly smaller than the mean value specified: \f$ m - b/(e^{b/m}-1) \f$.
-   * \param m Mean value of the random variable
-   * \param b Upper bound on returned values
-   */
-  ExponentialVariable (double m, double b);
-
-};
-
-/**
- * \brief ParetoVariable distributed random var
- * \ingroup legacyrandom
- *
- * This class supports the creation of objects that return random numbers
- * from a fixed pareto distribution.  It also supports the generation of
- * single random numbers from various pareto distributions.
- *
- * The probability density function is defined over the range [\f$x_m\f$,+inf) as:
- * \f$ k \frac{x_m^k}{x^{k+1}}\f$ where \f$x_m > 0\f$ is called the location
- * parameter and \f$ k > 0\f$ is called the pareto index or shape.
- *
- * The parameter \f$ x_m \f$ can be infered from the mean and the parameter \f$ k \f$
- * with the equation \f$ x_m = mean \frac{k-1}{k},  k > 1\f$.
- *
- * \code
- * ParetoVariable x (3.14);
- * x.GetValue ();  //will always return with mean 3.14
- * \endcode
- */
-class ParetoVariable : public RandomVariable
-{
-public:
-  /**
-   * \brief Constructs a pareto random variable with a mean of 1 and a shape
-   * parameter of 1.5
-   */
-  ParetoVariable ();
-
-  /**
-   * \brief Constructs a pareto random variable with specified mean and shape
-   * parameter of 1.5
-   *
-   * \param m Mean value of the distribution
-   */
-  explicit ParetoVariable (double m);
-
-  /**
-   * \brief Constructs a pareto random variable with the specified mean
-   * value and shape parameter. Beware, s must be strictly greater than 1.
-   *
-   * \param m Mean value of the distribution
-   * \param s Shape parameter for the distribution
-   */
-  ParetoVariable (double m, double s);
-
-  /**
-   * \brief Constructs a pareto random variable with the specified mean
-   * value, shape (alpha), and upper bound. Beware, s must be strictly greater than 1.
-   *
-   * Since pareto distributions can theoretically return unbounded values,
-   * it is sometimes useful to specify a fixed upper limit.  Note however
-   * when the upper limit is specified, the true mean of the distribution
-   * is slightly smaller than the mean value specified.
-   * \param m Mean value
-   * \param s Shape parameter
-   * \param b Upper limit on returned values
-   */
-  ParetoVariable (double m, double s, double b);
-
-  /**
-   * \brief Constructs a pareto random variable with the specified scale and shape
-   * parameters.
-   *
-   * \param params the two parameters, respectively scale and shape, of the distribution
-   */
-  ParetoVariable (std::pair<double, double> params);
-
-  /**
-   * \brief Constructs a pareto random variable with the specified
-   * scale, shape (alpha), and upper bound.
-   *
-   * Since pareto distributions can theoretically return unbounded values,
-   * it is sometimes useful to specify a fixed upper limit.  Note however
-   * when the upper limit is specified, the true mean of the distribution
-   * is slightly smaller than the mean value specified.
-   *
-   * \param params the two parameters, respectively scale and shape, of the distribution
-   * \param b Upper limit on returned values
-   */
-  ParetoVariable (std::pair<double, double> params, double b);
-
-};
-
-/**
- * \brief WeibullVariable distributed random var
- * \ingroup legacyrandom
- *
- * This class supports the creation of objects that return random numbers
- * from a fixed weibull distribution.  It also supports the generation of
- * single random numbers from various weibull distributions.
- *
- * The probability density function is defined over the interval [0, +inf]
- * as: \f$ \frac{k}{\lambda}\left(\frac{x}{\lambda}\right)^{k-1}e^{-\left(\frac{x}{\lambda}\right)^k} \f$
- * where \f$ k > 0\f$ is the shape parameter and \f$ \lambda > 0\f$  is the scale parameter. The
- * specified mean is related to the scale and shape parameters by the following relation:
- * \f$ mean = \lambda\Gamma\left(1+\frac{1}{k}\right) \f$ where \f$ \Gamma \f$ is the Gamma function.
- */
-class WeibullVariable : public RandomVariable
-{
-public:
-  /**
-   * Constructs a weibull random variable  with a mean
-   * value of 1.0 and a shape (alpha) parameter of 1
-   */
-  WeibullVariable ();
-
-
-  /**
-   * Constructs a weibull random variable with the specified mean
-   * value and a shape (alpha) parameter of 1.5.
-   * \param m mean value of the distribution
-   */
-  WeibullVariable (double m);
-
-  /**
-   * Constructs a weibull random variable with the specified mean
-   * value and a shape (alpha).
-   * \param m Mean value for the distribution.
-   * \param s Shape (alpha) parameter for the distribution.
-   */
-  WeibullVariable (double m, double s);
-
-  /**
-  * \brief Constructs a weibull random variable with the specified mean
-  * \brief value, shape (alpha), and upper bound.
-  * Since WeibullVariable distributions can theoretically return unbounded values,
-  * it is sometimes usefull to specify a fixed upper limit.  Note however
-  * that when the upper limit is specified, the true mean of the distribution
-  * is slightly smaller than the mean value specified.
-  * \param m Mean value for the distribution.
-  * \param s Shape (alpha) parameter for the distribution.
-  * \param b Upper limit on returned values
-  */
-  WeibullVariable (double m, double s, double b);
-
-};
-
-/**
- * \brief Class NormalVariable defines a random variable with a
- * normal (Gaussian) distribution.
- * \ingroup legacyrandom
- *
- * This class supports the creation of objects that return random numbers
- * from a fixed normal distribution.  It also supports the generation of
- * single random numbers from various normal distributions.
- *
- * The density probability function is defined over the interval (-inf,+inf)
- * as: \f$ \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{s\sigma^2}}\f$
- * where \f$ mean = \mu \f$ and \f$ variance = \sigma^2 \f$
- *
- */
-class NormalVariable : public RandomVariable
-{
-public:
-  /**
-   * Constructs an normal random variable  with a mean
-   * value of 0 and variance of 1.
-   */
-  NormalVariable ();
-
-  /**
-   * \brief Construct a normal random variable with specified mean and variance.
-   * \param m Mean value
-   * \param v Variance
-   */
-  NormalVariable (double m, double v);
-
-  /**
-   * \brief Construct a normal random variable with specified mean and variance
-   * \param m Mean value
-   * \param v Variance
-   * \param b Bound.  The NormalVariable is bounded symmetrically about the mean
-   * [mean-bound,mean+bound]
-   */
-  NormalVariable (double m, double v, double b);
-};
-
-/**
- * \brief EmpiricalVariable distribution random var
- * \ingroup legacyrandom
- *
- * Defines a random variable  that has a specified, empirical
- * distribution.  The distribution is specified by a
- * series of calls to the CDF member function, specifying a
- * value and the probability that the function value is less than
- * the specified value.  When values are requested,
- * a uniform random variable is used to select a probability,
- * and the return value is interpreted linearly between the
- * two appropriate points in the CDF.  The method is known
- * as inverse transform sampling:
- * (http://en.wikipedia.org/wiki/Inverse_transform_sampling).
- */
-class EmpiricalVariable : public RandomVariable
-{
-public:
-  /**
-   * Constructor for the EmpiricalVariable random variables.
-   */
-  explicit EmpiricalVariable ();
-
-  /**
-   * \brief Specifies a point in the empirical distribution
-   * \param v The function value for this point
-   * \param c Probability that the function is less than or equal to v
-   */
-  void CDF (double v, double c);  // Value, prob <= Value
-protected:
-  EmpiricalVariable (const RandomVariableBase &variable);
-};
-
-/**
- * \brief Integer-based empirical distribution
- * \ingroup legacyrandom
- *
- * Defines an empirical distribution where all values are integers.
- * Indentical to EmpiricalVariable, except that the inverse transform
- * sampling interpolation described in the EmpiricalVariable documentation
- * is modified to only return integers.
- */
-class IntEmpiricalVariable : public EmpiricalVariable
-{
-public:
-  IntEmpiricalVariable ();
-};
-
-/**
- * \brief a non-random variable
- * \ingroup legacyrandom
- *
- * Defines a random variable  that has a specified, predetermined
- * sequence.  This would be useful when trying to force
- * the RNG to return a known sequence, perhaps to
- * compare NS-3 to some other simulator
- */
-class DeterministicVariable : public RandomVariable
-{
-public:
-  /**
-   * \brief Constructor
-   *
-   * Creates a generator that returns successive elements of the d array
-   * on successive calls to RandomVariable::GetValue.  Note that the d pointer is copied
-   * for use by the generator (shallow-copy), not its contents, so the
-   * contents of the array d points to have to remain unchanged for the use
-   * of DeterministicVariable to be meaningful.
-   * \param d Pointer to array of random values to return in sequence
-   * \param c Number of values in the array
-   */
-  explicit DeterministicVariable (double* d, uint32_t c);
-};
-
-/**
- * \brief Log-normal Distributed random var
- * \ingroup legacyrandom
- *
- * LogNormalVariable defines a random variable with log-normal
- * distribution.  If one takes the natural logarithm of random
- * variable following the log-normal distribution, the obtained values
- * follow a normal distribution.
- *  This class supports the creation of objects that return random numbers
- * from a fixed lognormal distribution.  It also supports the generation of
- * single random numbers from various lognormal distributions.
- *
- * The probability density function is defined over the interval [0,+inf) as:
- * \f$ \frac{1}{x\sigma\sqrt{2\pi}} e^{-\frac{(ln(x) - \mu)^2}{2\sigma^2}}\f$
- * where \f$ mean = e^{\mu+\frac{\sigma^2}{2}} \f$ and
- * \f$ variance = (e^{\sigma^2}-1)e^{2\mu+\sigma^2}\f$
- *
- * The \f$ \mu \f$ and \f$ \sigma \f$ parameters can be calculated if instead
- * the mean and variance are known with the following equations:
- * \f$ \mu = ln(mean) - \frac{1}{2}ln\left(1+\frac{variance}{mean^2}\right)\f$, and,
- * \f$ \sigma = \sqrt{ln\left(1+\frac{variance}{mean^2}\right)}\f$
- */
-class LogNormalVariable : public RandomVariable
-{
-public:
-  /**
-   * \param mu mu parameter of the lognormal distribution
-   * \param sigma sigma parameter of the lognormal distribution
-   */
-  LogNormalVariable (double mu, double sigma);
-};
-
-/**
- * \brief Gamma Distributed Random Variable
- * \ingroup legacyrandom
- *
- * GammaVariable defines a random variable with gamma distribution.
- *
- * This class supports the creation of objects that return random numbers
- * from a fixed gamma distribution. It also supports the generation of
- * single random numbers from various gamma distributions.
- *
- * The probability density function is defined over the interval [0,+inf) as:
- * \f$ x^{\alpha-1} \frac{e^{-\frac{x}{\beta}}}{\beta^\alpha \Gamma(\alpha)}\f$
- * where \f$ mean = \alpha\beta \f$ and
- * \f$ variance = \alpha \beta^2\f$
- */
-class GammaVariable : public RandomVariable
-{
-public:
-  /**
-   * Constructs a gamma random variable with alpha = 1.0 and beta = 1.0
-   */
-  GammaVariable ();
-
-  /**
-   * \param alpha alpha parameter of the gamma distribution
-   * \param beta beta parameter of the gamma distribution
-   */
-  GammaVariable (double alpha, double beta);
-
-  /**
-   * \brief call RandomVariable::GetValue
-   * \return A floating point random value
-   *
-   * Note: we have to re-implement this method here because the method is
-   * overloaded below for the two-argument variant and the c++ name resolution
-   * rules don't work well with overloads split between parent and child
-   * classes.
-   */
-  double GetValue (void) const;
-
-  /**
-   * \brief Returns a gamma random distributed double with parameters alpha and beta.
-   * \param alpha alpha parameter of the gamma distribution
-   * \param beta beta parameter of the gamma distribution
-   * \return A floating point random value
-   */
-  double GetValue (double alpha, double beta) const;
-};
-
-/**
- * \brief Erlang Distributed Random Variable
- * \ingroup legacyrandom
- *
- * ErlangVariable defines a random variable with Erlang distribution.
- *
- * The Erlang distribution is a special case of the Gamma distribution where k
- * (= alpha) is a non-negative integer. Erlang distributed variables can be
- * generated using a much faster algorithm than gamma variables.
- *
- * This class supports the creation of objects that return random numbers from
- * a fixed Erlang distribution. It also supports the generation of single
- * random numbers from various Erlang distributions.
- *
- * The probability density function is defined over the interval [0,+inf) as:
- * \f$ \frac{x^{k-1} e^{-\frac{x}{\lambda}}}{\lambda^k (k-1)!}\f$
- * where \f$ mean = k \lambda \f$ and
- * \f$ variance = k \lambda^2\f$
- */
-class ErlangVariable : public RandomVariable
-{
-public:
-  /**
-   * Constructs an Erlang random variable with k = 1 and lambda = 1.0
-   */
-  ErlangVariable ();
-
-  /**
-   * \param k k parameter of the Erlang distribution. Must be a non-negative integer.
-   * \param lambda lambda parameter of the Erlang distribution
-   */
-  ErlangVariable (unsigned int k, double lambda);
-
-  /**
-   * \brief call RandomVariable::GetValue
-   * \return A floating point random value
-   *
-   * Note: we have to re-implement this method here because the method is
-   * overloaded below for the two-argument variant and the c++ name resolution
-   * rules don't work well with overloads split between parent and child
-   * classes.
-   */
-  double GetValue (void) const;
-
-  /**
-   * \brief Returns an Erlang random distributed double with parameters k and lambda.
-   * \param k k parameter of the Erlang distribution. Must be a non-negative integer.
-   * \param lambda lambda parameter of the Erlang distribution
-   * \return A floating point random value
-   */
-  double GetValue (unsigned int k, double lambda) const;
-};
-
-/**
- * \brief Zipf Distributed Random Variable
- * \ingroup legacyrandom
- *
- * ZipfVariable defines a discrete random variable with Zipf distribution.
- *
- * The Zipf's law states that given some corpus of natural language
- * utterances, the frequency of any word is inversely proportional
- * to its rank in the frequency table.
- *
- * Zipf's distribution have two parameters, alpha and N, where:
- * \f$ \alpha > 0 \f$ (real) and \f$ N \in \{1,2,3 \dots\}\f$ (integer).
- * Probability Mass Function is \f$ f(k; \alpha, N) = k^{-\alpha}/ H_{N,\alpha} \f$
- * where \f$ H_{N,\alpha} = \sum_{n=1}^N n^{-\alpha} \f$
- */
-class ZipfVariable : public RandomVariable
-{
-public:
-  /**
-   * \brief Returns a Zipf random variable with parameters N and alpha.
-   * \param N the number of possible items. Must be a positive integer.
-   * \param alpha the alpha parameter. Must be a strictly positive real.
-   */
-  ZipfVariable (long N, double alpha);
-  /**
-   * Constructs a Zipf random variable with N=1 and alpha=0.
-   */
-  ZipfVariable ();
-};
-
-/**
- * \brief Zeta Distributed Distributed Random Variable
- * \ingroup legacyrandom
- *
- * ZetaVariable defines a discrete random variable with Zeta distribution.
- *
- * The Zeta distribution is closely related to Zipf distribution when N goes to infinity.
- *
- * Zeta distribution has one parameter, alpha, \f$ \alpha > 1 \f$ (real).
- * Probability Mass Function is \f$ f(k; \alpha) = k^{-\alpha}/\zeta(\alpha) \f$
- * where \f$ \zeta(\alpha) \f$ is the Riemann zeta function ( \f$ \sum_{n=1}^\infty n^{-\alpha} ) \f$
- */
-class ZetaVariable : public RandomVariable
-{
-public:
-  /**
-   * \brief Returns a Zeta random variable with parameter alpha.
-   * \param alpha the alpha parameter. Must be a strictly greater than 1, real.
-   */
-  ZetaVariable (double alpha);
-  /**
-   * Constructs a Zeta random variable with alpha=3.14
-   */
-  ZetaVariable ();
-};
-
-/**
- * \brief Triangularly Distributed random var
- * \ingroup legacyrandom
- *
- * This distribution is a triangular distribution.  The probability density
- * is in the shape of a triangle.
- */
-class TriangularVariable : public RandomVariable
-{
-public:
-  /**
-   * Creates a triangle distribution random number generator in the
-   * range [0.0 .. 1.0), with mean of 0.5
-   */
-  TriangularVariable ();
-
-  /**
-   * Creates a triangle distribution random number generator with the specified
-   * range
-   * \param s Low end of the range
-   * \param l High end of the range
-   * \param mean mean of the distribution
-   */
-  TriangularVariable (double s, double l, double mean);
-
-};
-
-std::ostream & operator << (std::ostream &os, const RandomVariable &var);
-std::istream & operator >> (std::istream &os, RandomVariable &var);
-
-/**
- * \class ns3::RandomVariableValue
- * \brief hold objects of type ns3::RandomVariable
- */
-
-ATTRIBUTE_VALUE_DEFINE (RandomVariable);
-ATTRIBUTE_CHECKER_DEFINE (RandomVariable);
-ATTRIBUTE_ACCESSOR_DEFINE (RandomVariable);
-
-} // namespace ns3
-
-#endif /* NS3_RANDOM_VARIABLE_H */
diff -Naur ns-3.21/src/core/model/random-variable-stream.cc ns-3.22/src/core/model/random-variable-stream.cc
--- ns-3.21/src/core/model/random-variable-stream.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/random-variable-stream.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,10 @@
 #include <cmath>
 #include <iostream>
 
-NS_LOG_COMPONENT_DEFINE ("RandomVariableStream");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RandomVariableStream");
+
 NS_OBJECT_ENSURE_REGISTERED (RandomVariableStream);
 
 TypeId 
@@ -450,7 +450,7 @@
 		  DoubleValue(2.0),
 		  MakeDoubleAccessor(&ParetoRandomVariable::m_shape),
 		  MakeDoubleChecker<double>())
-    .AddAttribute("Bound", "The upper bound on the values returned by this RNG stream.",
+    .AddAttribute("Bound", "The upper bound on the values returned by this RNG stream (if non-zero).",
 		  DoubleValue(0.0),
 		  MakeDoubleAccessor(&ParetoRandomVariable::m_bound),
 		  MakeDoubleChecker<double>())
diff -Naur ns-3.21/src/core/model/random-variable-stream.h ns-3.22/src/core/model/random-variable-stream.h
--- ns-3.21/src/core/model/random-variable-stream.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/random-variable-stream.h	2015-02-05 15:46:22.000000000 -0800
@@ -87,6 +87,10 @@
 class RandomVariableStream : public Object
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   RandomVariableStream ();
   virtual ~RandomVariableStream();
diff -Naur ns-3.21/src/core/model/realtime-simulator-impl.cc ns-3.22/src/core/model/realtime-simulator-impl.cc
--- ns-3.21/src/core/model/realtime-simulator-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/realtime-simulator-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,14 +35,20 @@
 
 #include <cmath>
 
+
+/**
+ * \file
+ * \ingroup realtime
+ * ns3::RealTimeSimulatorImpl implementation.
+ */
+
+namespace ns3 {
+
 // Note:  Logging in this file is largely avoided due to the
 // number of calls that are made to these functions and the possibility
 // of causing recursions leading to stack overflow
-
 NS_LOG_COMPONENT_DEFINE ("RealtimeSimulatorImpl");
 
-namespace ns3 {
-
 NS_OBJECT_ENSURE_REGISTERED (RealtimeSimulatorImpl);
 
 TypeId
@@ -750,12 +756,12 @@
 }
 
 bool
-RealtimeSimulatorImpl::IsExpired (const EventId &ev) const
+RealtimeSimulatorImpl::IsExpired (const EventId &id) const
 {
-  if (ev.GetUid () == 2)
+  if (id.GetUid () == 2)
     {
-      if (ev.PeekEventImpl () == 0 ||
-          ev.PeekEventImpl ()->IsCancelled ())
+      if (id.PeekEventImpl () == 0 ||
+          id.PeekEventImpl ()->IsCancelled ())
         {
           return true;
         }
@@ -763,7 +769,7 @@
       for (DestroyEvents::const_iterator i = m_destroyEvents.begin (); 
            i != m_destroyEvents.end (); i++)
         {
-          if (*i == ev)
+          if (*i == id)
             {
               return false;
             }
@@ -779,10 +785,10 @@
   //
   // The same is true for the next line involving the m_currentUid.
   //
-  if (ev.PeekEventImpl () == 0 ||
-      ev.GetTs () < m_currentTs ||
-      (ev.GetTs () == m_currentTs && ev.GetUid () <= m_currentUid) ||
-      ev.PeekEventImpl ()->IsCancelled ()) 
+  if (id.PeekEventImpl () == 0 ||
+      id.GetTs () < m_currentTs ||
+      (id.GetTs () == m_currentTs && id.GetUid () <= m_currentUid) ||
+      id.PeekEventImpl ()->IsCancelled ()) 
     {
       return true;
     }
diff -Naur ns-3.21/src/core/model/realtime-simulator-impl.h ns-3.22/src/core/model/realtime-simulator-impl.h
--- ns-3.21/src/core/model/realtime-simulator-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/realtime-simulator-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -63,9 +63,9 @@
   virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
-  virtual void Remove (const EventId &ev);
-  virtual void Cancel (const EventId &ev);
-  virtual bool IsExpired (const EventId &ev) const;
+  virtual void Remove (const EventId &id);
+  virtual void Cancel (const EventId &id);
+  virtual bool IsExpired (const EventId &id) const;
   virtual void Run (void);
   virtual Time Now (void) const;
   virtual Time GetDelayLeft (const EventId &id) const;
diff -Naur ns-3.21/src/core/model/ref-count-base.cc ns-3.22/src/core/model/ref-count-base.cc
--- ns-3.21/src/core/model/ref-count-base.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/ref-count-base.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,10 +1,33 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 Georgia Tech Research Corporation
+ *
+ * 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:  George Riley <riley@ece.gatech.edu>
+ * Adapted from original code in object.h by:
+ * Authors: Gustavo Carneiro <gjcarneiro@gmail.com>,
+ *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
 #include "ref-count-base.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("RefCountBase");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RefCountBase");
+
 RefCountBase::~RefCountBase ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/core/model/rng-seed-manager.cc ns-3.22/src/core/model/rng-seed-manager.cc
--- ns-3.21/src/core/model/rng-seed-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/rng-seed-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Mathieu Lacage
+ *
+ * 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 "rng-seed-manager.h"
 #include "global-value.h"
 #include "attribute-helper.h"
@@ -5,15 +24,32 @@
 #include "config.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("RngSeedManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RngSeedManager");
+
+/**
+ * \relates RngSeedManager
+ * The next random number generator stream number to use
+ * for automatic assignment.
+ */
 static uint64_t g_nextStreamIndex = 0;
+/**
+ * \relates RngSeedManager
+ * The random number generator seed number global value.
+ *
+ * This is accessible as "--RngSeed" from CommandLine.
+ */
 static ns3::GlobalValue g_rngSeed ("RngSeed", 
                                    "The global seed of all rng streams",
                                    ns3::IntegerValue(1),
                                    ns3::MakeIntegerChecker<uint32_t> ());
+/**
+ * \relates RngSeedManager
+ * The random number generator run number global value.
+ *
+ * This is accessible as "--RngRun" from CommandLine.
+ */
 static ns3::GlobalValue g_rngRun ("RngRun", 
                                   "The run number used to modify the global seed",
                                   ns3::IntegerValue (1),
diff -Naur ns-3.21/src/core/model/rng-seed-manager.h ns-3.22/src/core/model/rng-seed-manager.h
--- ns-3.21/src/core/model/rng-seed-manager.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/rng-seed-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Mathieu Lacage
+ *
+ * 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 RNG_SEED_MANAGER_H
 #define RNG_SEED_MANAGER_H
 
diff -Naur ns-3.21/src/core/model/rng-stream.cc ns-3.22/src/core/model/rng-stream.cc
--- ns-3.21/src/core/model/rng-stream.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/rng-stream.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,12 +26,16 @@
 #include "fatal-error.h"
 #include "log.h"
 
+namespace ns3 {
+  
 // Note:  Logging in this file is largely avoided due to the
 // number of calls that are made to these functions and the possibility
 // of causing recursions leading to stack overflow
-
 NS_LOG_COMPONENT_DEFINE ("RngStream");
 
+} // namespace ns3
+
+
 namespace
 {
 typedef double Matrix[3][3];
diff -Naur ns-3.21/src/core/model/scheduler.cc ns-3.22/src/core/model/scheduler.cc
--- ns-3.21/src/core/model/scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,16 @@
 #include "assert.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Scheduler");
+/**
+ * \file
+ * \ingroup scheduler
+ * ns3::Scheduler implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Scheduler");
+
 NS_OBJECT_ENSURE_REGISTERED (Scheduler);
 
 Scheduler::~Scheduler ()
diff -Naur ns-3.21/src/core/model/scheduler.h ns-3.22/src/core/model/scheduler.h
--- ns-3.21/src/core/model/scheduler.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/scheduler.h	2015-02-05 15:46:22.000000000 -0800
@@ -24,6 +24,14 @@
 #include <stdint.h>
 #include "object.h"
 
+/**
+ * \file
+ * \ingroup scheduler
+ * \ingroup events
+ * ns3::Scheduler abstract base class, ns3::Scheduler::Event and
+ * ns3::Scheduler::EventKey declarations.
+ */
+
 namespace ns3 {
 
 class EventImpl;
@@ -60,18 +68,27 @@
 public:
   static TypeId GetTypeId (void);
 
-  /** \ingroup events */
+  /**
+   * \ingroup events
+   * Structure for sorting and comparing Events.
+   */
   struct EventKey
   {
-    uint64_t m_ts;
-    uint32_t m_uid;
-    uint32_t m_context;
+    uint64_t m_ts;         /**< Event time stamp. */
+    uint32_t m_uid;        /**< Event unique id. */
+    uint32_t m_context;    /**< Event context. */
   };
-  /** \ingroup events */
+  /**
+   * \ingroup events
+   * Scheduler event.
+   *
+   * An Event consists of an EventKey, used for maintaining the schedule,
+   * and an EventImpl which is the actual implementation.
+   */
   struct Event
   {
-    EventImpl *impl;
-    EventKey key;
+    EventImpl *impl;       /**< Pointer to the event implementation. */
+    EventKey key;          /**< Key for sorting and ordering Events. */
   };
 
   virtual ~Scheduler () = 0;
diff -Naur ns-3.21/src/core/model/simple-ref-count.h ns-3.22/src/core/model/simple-ref-count.h
--- ns-3.21/src/core/model/simple-ref-count.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/simple-ref-count.h	2015-02-05 15:46:22.000000000 -0800
@@ -28,6 +28,12 @@
 #include <stdint.h>
 #include <limits>
 
+/**
+ * \file
+ * \ingroup ptr
+ * Reference counting for smart pointers.
+ */
+
 namespace ns3 {
 
 /**
@@ -36,7 +42,7 @@
  *
  * This template can be used to give reference-counting powers
  * to a class. This template does not require this class to
- * have a virtual destructor or no parent class.
+ * have a virtual destructor or a specific (or any) parent class.
  * 
  * Note: if you are moving to this template from the RefCountBase class,
  * you need to be careful to mark appropriately your destructor virtual
@@ -46,14 +52,15 @@
  *
  * This template takes 3 arguments but only the first argument is
  * mandatory:
- *    - T: the typename of the subclass which derives from this template
+ *
+ * \tparam T The typename of the subclass which derives from this template
  *      class. Yes, this is weird but it's a common C++ template pattern
  *      whose name is CRTP (Curiously Recursive Template Pattern)
- *    - PARENT: the typename of the parent of this template. By default,
+ * \tparam PARENT: the typename of the parent of this template. By default,
  *      this typename is "'ns3::empty'" which is an empty class: compilers
  *      which implement the RBCO optimization (empty base class optimization)
  *      will make this a no-op
- *    - DELETER: the typename of a class which implements a public static 
+ * \tparam DELETER: the typename of a class which implements a public static 
  *      method named 'Delete'. This method will be called whenever the
  *      SimpleRefCount template detects that no references to the object
  *      it manages exist anymore.
@@ -112,6 +119,8 @@
   /**
    * Get the reference count of the object.
    * Normally not needed; for language bindings.
+   *
+   * \return The reference count.
    */
   inline uint32_t GetReferenceCount (void) const
   {
@@ -123,8 +132,13 @@
    */
   static void Cleanup (void) {}
 private:
-  // Note we make this mutable so that the const methods can still
-  // change it.
+  /**
+   * The reference count.
+   *
+   * \internal
+   * Note we make this mutable so that the const methods can still
+   * change it.
+   */
   mutable uint32_t m_count;
 };
 
diff -Naur ns-3.21/src/core/model/simulation-singleton.h ns-3.22/src/core/model/simulation-singleton.h
--- ns-3.21/src/core/model/simulation-singleton.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/simulation-singleton.h	2015-02-05 15:46:22.000000000 -0800
@@ -20,34 +20,84 @@
 #ifndef SIMULATION_SINGLETON_H
 #define SIMULATION_SINGLETON_H
 
+/**
+ * \file
+ * \ingroup core
+ * ns3::SimulationSingleton declaration and template implementation.
+ */
+
 namespace ns3 {
 
 /**
+ * \ingroup core
  * This singleton class template ensures that the type
  * for which we want a singleton has a lifetime bounded
- * by the simulation lifetime. That it, the underlying
- * type will be automatically deleted upon a users' call
+ * by the simulation run lifetime. That it, the underlying
+ * type will be automatically deleted upon a call
  * to Simulator::Destroy.
+ *
+ * For a singleton with a lifetime bounded by the process,
+ * not the simulation run, see Singleton.
  */
 template <typename T>
 class SimulationSingleton
 {
 public:
   /**
-   * \returns the instance underlying this singleton.
+   * Get a pointer to the singleton instance.
    *
    * This instance will be automatically deleted when the
-   * user calls ns3::Simulator::Destroy.
+   * simulation is destroyed by a call to Simulator::Destroy.
+   *
+   * \returns A pointer to the singleton instance.
    */
   static T *Get (void);
+  
 private:
+  
+  /**
+   * Get the singleton object, creating a new one if it doesn't exist yet.
+   *
+   * \internal
+   * When a new object is created, this method schedules it's own
+   * destruction using Simulator::ScheduleDestroy().
+   *
+   * \returns The address of the pointer holding the static instance.
+   */
   static T **GetObject (void);
+  
+  /** Delete the static instance. */
   static void DeleteObject (void);
+
+  /**
+   * \name %Singleton pattern
+   * Private constructor, copy and assignment operator.
+   *
+   *  Note these do not have to be implemented, since they are
+   *  never called.
+   */
+  /**@{*/
+  /** Default constructor */
+  SimulationSingleton<T> (void);
+  
+  /** Copy constructor. */
+  SimulationSingleton<T> (const SimulationSingleton<T> &);
+  /**
+   * Assignment.
+   * \returns The Singleton.
+   */
+  SimulationSingleton<T> operator = (const SimulationSingleton<T> &);
+  /**@}*/
+
 };
 
 } // namespace ns3
 
 
+/********************************************************************
+ *  Implementation of the templates declared above.
+ ********************************************************************/
+
 #include "simulator.h"
 
 namespace ns3 {
diff -Naur ns-3.21/src/core/model/simulator.cc ns-3.22/src/core/model/simulator.cc
--- ns-3.21/src/core/model/simulator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/simulator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,30 +37,62 @@
 #include <vector>
 #include <iostream>
 
+/**
+ * \file
+ * \ingroup simulator
+ * ns3::Simulator implementation, as well as implementation pointer,
+ * global scheduler implementation, and default ns3::NodePrinter
+ * and ns3::TimePrinter.
+ */
+
+namespace ns3 {
+
 // Note:  Logging in this file is largely avoided due to the
 // number of calls that are made to these functions and the possibility
 // of causing recursions leading to stack overflow
-
 NS_LOG_COMPONENT_DEFINE ("Simulator");
 
-namespace ns3 {
-
-static GlobalValue g_simTypeImpl = GlobalValue ("SimulatorImplementationType",
-                                                "The object class to use as the simulator implementation",
-                                                StringValue ("ns3::DefaultSimulatorImpl"),
-                                                MakeStringChecker ());
-
+/**
+ * \ingroup simulator
+ * The specific simulator implementation to use.
+ *
+ * Must be derived from SimulatorImpl.
+ */
+static GlobalValue g_simTypeImpl = GlobalValue
+  ("SimulatorImplementationType",
+   "The object class to use as the simulator implementation",
+   StringValue ("ns3::DefaultSimulatorImpl"),
+   MakeStringChecker ());
+
+/**
+ * \ingroup scheduler
+ * The specific event scheduler implementation to use.
+ *
+ * Must be derived from Scheduler.
+ */
 static GlobalValue g_schedTypeImpl = GlobalValue ("SchedulerType",
                                                   "The object class to use as the scheduler implementation",
                                                   TypeIdValue (MapScheduler::GetTypeId ()),
                                                   MakeTypeIdChecker ());
 
+/**
+ * \ingroup logging
+ * Default TimePrinter implementation.
+ *
+ * \param [in] os The output stream to print the time on.
+ */
 static void
 TimePrinter (std::ostream &os)
 {
   os << Simulator::Now ().GetSeconds () << "s";
 }
 
+/**
+ * \ingroup logging
+ * Default node id printer implementation.
+ * 
+ * \param [in] os The output stream to print the node id on.
+ */
 static void
 NodePrinter (std::ostream &os)
 {
@@ -74,12 +106,23 @@
     }
 }
 
+/**
+ * \ingroup simulator
+ * \brief Get the static SimulatorImpl instance.
+ * \return The SimulatorImpl instance pointer.
+ */
 static SimulatorImpl **PeekImpl (void)
 {
   static SimulatorImpl *impl = 0;
   return &impl;
 }
 
+/**
+ * \ingroup simulator
+ * \brief Get the SimulatorImpl singleton.
+ * \return The singleton pointer.
+ * \see Simulator::GetImplementation()
+ */
 static SimulatorImpl * GetImpl (void)
 {
   SimulatorImpl **pimpl = PeekImpl ();
@@ -255,23 +298,23 @@
 }
 
 void
-Simulator::Remove (const EventId &ev)
+Simulator::Remove (const EventId &id)
 {
   if (*PeekImpl () == 0)
     {
       return;
     }
-  return GetImpl ()->Remove (ev);
+  return GetImpl ()->Remove (id);
 }
 
 void
-Simulator::Cancel (const EventId &ev)
+Simulator::Cancel (const EventId &id)
 {
   if (*PeekImpl () == 0)
     {
       return;
     }
-  return GetImpl ()->Cancel (ev);
+  return GetImpl ()->Cancel (id);
 }
 
 bool 
@@ -342,6 +385,7 @@
   LogSetTimePrinter (&TimePrinter);
   LogSetNodePrinter (&NodePrinter);
 }
+
 Ptr<SimulatorImpl>
 Simulator::GetImplementation (void)
 {
diff -Naur ns-3.21/src/core/model/simulator.h ns-3.22/src/core/model/simulator.h
--- ns-3.21/src/core/model/simulator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/simulator.h	2015-02-05 15:46:22.000000000 -0800
@@ -26,12 +26,17 @@
 #include "make-event.h"
 #include "nstime.h"
 
-#include "deprecated.h"
 #include "object-factory.h"
 
 #include <stdint.h>
 #include <string>
 
+/**
+ * \file
+ * \ingroup simulator
+ * ns3::Simulator declaration.
+ */
+
 namespace ns3 {
 
 class SimulatorImpl;
@@ -49,7 +54,7 @@
  *
  * The internal simulation clock is maintained
  * as a 64-bit integer in a unit specified by the user
- * through the TimeStepPrecision::Set function. This means that it is
+ * through the Time::SetResolution function. This means that it is
  * not possible to specify event expiration times with anything better
  * than this user-specified accuracy. Events whose expiration time is
  * the same modulo this accuracy are scheduled in FIFO order: the 
@@ -57,14 +62,16 @@
  * expire first.
  * 
  * A simple example of how to use the Simulator class to schedule events
- * is shown below:
+ * is shown in sample-simulator.cc ::
  * \include src/core/examples/sample-simulator.cc
+ *
+ * \todo Define what the simulation or event context means.
  */
 class Simulator 
 {
 public:
   /**
-   * \param impl a new simulator implementation
+   * \param impl A new simulator implementation.
    *
    * The simulator provides a mechanism to swap out different implementations.
    * For example, the default implementation is a single-threaded simulator
@@ -77,6 +84,23 @@
    */
   static void SetImplementation (Ptr<SimulatorImpl> impl);
 
+  /**
+   * \brief Get the SimulatorImpl singleton.
+   *
+   * \internal
+   * If the SimulatorImpl singleton hasn't been created yet,
+   * this function does so.  At the same time it also creates
+   * the Scheduler.  Both of these respect the global values
+   * which may have been set from the command line or through
+   * the Config system.
+   *
+   * As a side effect we also call LogSetTimePrinter() and
+   * LogSetNodePrinter() with the default implementations
+   * since we can't really do any logging until we have
+   * a SimulatorImpl and Scheduler.
+   
+   * \return The SimulatorImpl singleton.
+   */
   static Ptr<SimulatorImpl> GetImplementation (void);
 
   /**
@@ -88,52 +112,26 @@
    */
   static void SetScheduler (ObjectFactory schedulerFactory);
 
-  /**
-   * Every event scheduled by the Simulator::insertAtDestroy method is
-   * invoked. Then, we ensure that any memory allocated by the 
-   * Simulator is freed.
-   * This method is typically invoked at the end of a simulation
-   * to avoid false-positive reports by a leak checker.
-   * After this method has been invoked, it is actually possible
-   * to restart a new simulation with a set of calls to Simulator::run
-   * and Simulator::insert_*.
-   */
+  /**  \copydoc SimulatorImpl::Destroy   */
   static void Destroy (void);
 
-  /**
-   * If there are no more events lefts to be scheduled, or if simulation
-   * time has already reached the "stop time" (see Simulator::Stop()),
-   * return true. Return false otherwise.
-   */
+  /** \copydoc SimulatorImpl::IsFinished */
   static bool IsFinished (void);
 
-  /**
-   * Run the simulation until one of:
-   *   - no events are present anymore
-   *   - the user called Simulator::Stop()
-   *   - the user called Simulator::Stop(Time const &time) and the
-   *     expiration time of the next event to be processed
-   *     is greater than or equal to the stop time.
-   */
+  /** \copydoc SimulatorImpl::Run */
   static void Run (void);
 
-  /**
-   * If an event invokes this method, it will be the last
-   * event scheduled by the Simulator::run method before
-   * returning to the caller.
-   */
+  /** \copydoc SimulatorImpl::Stop(void) */
   static void Stop (void);
 
-  /**
-   * Force the Simulator::run method to return to the caller when the
-   * expiration time of the next event to be processed is greater than
-   * or equal to the stop time.  The stop time is relative to the
-   * current simulation time.
-   * @param time the stop time, relative to the current time.
-   */
+  /** \copydoc SimulatorImpl::Stop(Time const &) */
   static void Stop (Time const &time);
 
   /**
+   * \name Schedule events (in the same context) to run at a future time.
+   */
+  /** @{ */
+  /**
    * Schedule an event to expire at the relative time "time"
    * is reached.  This can be thought of as scheduling an event
    * for the current simulation time plus the Time passed as a
@@ -277,6 +275,14 @@
             typename T1, typename T2, typename T3, typename T4, typename T5>
   static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
 
+  /** @} */
+
+  /**
+   * \name Schedule events (in a different context) to run at a particular time.
+   *
+   * See \ref main-test-sync.cc for example usage.
+   */
+  /** @{ */
   /**
    * Schedule an event with the given context.
    * A context of 0xffffffff means no context is specified.
@@ -439,6 +445,12 @@
             typename T1, typename T2, typename T3, typename T4, typename T5>
   static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
 
+  /** @} */
+  
+  /**
+   * \name Schedule events (in the same context) to run now.
+   */
+  /** @{ */
   /**
    * Schedule an event to expire Now. All events scheduled to
    * to expire "Now" are scheduled FIFO, after all normal events
@@ -446,6 +458,7 @@
    *
    * @param mem_ptr member method pointer to invoke
    * @param obj the object on which to invoke the member method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ>
   static EventId ScheduleNow (MEM mem_ptr, OBJ obj);
@@ -454,6 +467,7 @@
    * @param mem_ptr member method pointer to invoke
    * @param obj the object on which to invoke the member method
    * @param a1 the first argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1>
@@ -464,6 +478,7 @@
    * @param obj the object on which to invoke the member method
    * @param a1 the first argument to pass to the invoked method
    * @param a2 the second argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2>
@@ -475,6 +490,7 @@
    * @param a1 the first argument to pass to the invoked method
    * @param a2 the second argument to pass to the invoked method
    * @param a3 the third argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3>
@@ -487,6 +503,7 @@
    * @param a2 the second argument to pass to the invoked method
    * @param a3 the third argument to pass to the invoked method
    * @param a4 the fourth argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3, typename T4>
@@ -500,6 +517,7 @@
    * @param a3 the third argument to pass to the invoked method
    * @param a4 the fourth argument to pass to the invoked method
    * @param a5 the fifth argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3, typename T4, typename T5>
@@ -507,12 +525,14 @@
                               T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
    * @param f the function to invoke
+   * @return The EventId of the scheduled event.
    */
   static EventId ScheduleNow (void (*f)(void));
 
   /**
    * @param f the function to invoke
    * @param a1 the first argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1,
             typename T1>
@@ -522,6 +542,7 @@
    * @param f the function to invoke
    * @param a1 the first argument to pass to the function to invoke
    * @param a2 the second argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2,
             typename T1, typename T2>
@@ -532,6 +553,7 @@
    * @param a1 the first argument to pass to the function to invoke
    * @param a2 the second argument to pass to the function to invoke
    * @param a3 the third argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3,
             typename T1, typename T2, typename T3>
@@ -543,6 +565,7 @@
    * @param a2 the second argument to pass to the function to invoke
    * @param a3 the third argument to pass to the function to invoke
    * @param a4 the fourth argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4,
             typename T1, typename T2, typename T3, typename T4>
@@ -555,11 +578,18 @@
    * @param a3 the third argument to pass to the function to invoke
    * @param a4 the fourth argument to pass to the function to invoke
    * @param a5 the fifth argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4, typename U5,
             typename T1, typename T2, typename T3, typename T4, typename T5>
   static EventId ScheduleNow (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
 
+  /** @} */
+
+  /**
+   * \name Schedule events to run at the end of the simulation.
+   */
+  /** @{ */
   /**
    * Schedule an event to expire at Destroy time. All events 
    * scheduled to expire at "Destroy" time are scheduled FIFO, 
@@ -568,6 +598,7 @@
    *
    * @param mem_ptr member method pointer to invoke
    * @param obj the object on which to invoke the member method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ>
   static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj);
@@ -576,6 +607,7 @@
    * @param mem_ptr member method pointer to invoke
    * @param obj the object on which to invoke the member method
    * @param a1 the first argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1>
@@ -586,6 +618,7 @@
    * @param obj the object on which to invoke the member method
    * @param a1 the first argument to pass to the invoked method
    * @param a2 the second argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ,
             typename T1, typename T2>
@@ -597,6 +630,7 @@
    * @param a1 the first argument to pass to the invoked method
    * @param a2 the second argument to pass to the invoked method
    * @param a3 the third argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3>
@@ -609,6 +643,7 @@
    * @param a2 the second argument to pass to the invoked method
    * @param a3 the third argument to pass to the invoked method
    * @param a4 the fourth argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3, typename T4>
@@ -622,6 +657,7 @@
    * @param a3 the third argument to pass to the invoked method
    * @param a4 the fourth argument to pass to the invoked method
    * @param a5 the fifth argument to pass to the invoked method
+   * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3, typename T4, typename T5>
@@ -629,12 +665,14 @@
                                   T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
    * @param f the function to invoke
+   * @return The EventId of the scheduled event.
    */
   static EventId ScheduleDestroy (void (*f)(void));
 
   /**
    * @param f the function to invoke
    * @param a1 the first argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1,
             typename T1>
@@ -644,6 +682,7 @@
    * @param f the function to invoke
    * @param a1 the first argument to pass to the function to invoke
    * @param a2 the second argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2,
             typename T1, typename T2>
@@ -654,6 +693,7 @@
    * @param a1 the first argument to pass to the function to invoke
    * @param a2 the second argument to pass to the function to invoke
    * @param a3 the third argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3,
             typename T1, typename T2, typename T3>
@@ -665,6 +705,7 @@
    * @param a2 the second argument to pass to the function to invoke
    * @param a3 the third argument to pass to the function to invoke
    * @param a4 the fourth argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4,
             typename T1, typename T2, typename T3, typename T4>
@@ -677,134 +718,81 @@
    * @param a3 the third argument to pass to the function to invoke
    * @param a4 the fourth argument to pass to the function to invoke
    * @param a5 the fifth argument to pass to the function to invoke
+   * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4, typename U5,
             typename T1, typename T2, typename T3, typename T4, typename T5>
   static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
 
-  /**
-   * Remove an event from the event list. 
-   * This method has the same visible effect as the 
-   * ns3::EventId::Cancel method
-   * but its algorithmic complexity is much higher: it has often 
-   * O(log(n)) complexity, sometimes O(n), sometimes worse.
-   * Note that it is not possible to remove events which were scheduled
-   * for the "destroy" time. Doing so will result in a program error (crash).
-   *
-   * @param id the event to remove from the list of scheduled events.
-   */
+  /** @} */
+
+  /** \copydoc SimulatorImpl::Remove */
   static void Remove (const EventId &id);
 
-  /**
-   * Set the cancel bit on this event: the event's associated function
-   * will not be invoked when it expires. 
-   * This method has the same visible effect as the 
-   * ns3::Simulator::remove method but its algorithmic complexity is 
-   * much lower: it has O(1) complexity.
-   * This method has the exact same semantics as ns3::EventId::cancel.
-   * Note that it is not possible to cancel events which were scheduled
-   * for the "destroy" time. Doing so will result in a program error (crash).
-   * 
-   * @param id the event to cancel
-   */
+  /** \copydoc SimulatorImpl::Cancel */
   static void Cancel (const EventId &id);
 
-  /**
-   * This method has O(1) complexity.
-   * Note that it is not possible to test for the expiration of
-   * events which were scheduled for the "destroy" time. Doing so
-   * will result in a program error (crash).
-   * An event is said to "expire" when it starts being scheduled
-   * which means that if the code executed by the event calls
-   * this function, it will get true.
-   *
-   * @param id the event to test for expiration
-   * @returns true if the event has expired, false otherwise.
-   */
+  /** \copydoc SimulatorImpl::IsExpired */
   static bool IsExpired (const EventId &id);
 
-  /**
-   * Return the "current simulation time".
-   */
+  /** \copydoc SimulatorImpl::Now */
   static Time Now (void);
 
-  /**
-   * \param id the event id to analyse
-   * \returns the delay left until the input event id expires.
-   *          if the event is not running, this method returns
-   *          zero.
-   */
+  /** \copydoc SimulatorImpl::GetDelayLeft */
   static Time GetDelayLeft (const EventId &id);
 
-  /**
-   * \returns the maximum simulation time at which an event 
-   *          can be scheduled.
-   *
-   * The returned value will always be bigger than or equal to Simulator::Now.
-   */
+  /** \copydoc SimulatorImpl::GetMaximumSimulationTime */
   static Time GetMaximumSimulationTime (void);
 
-  /**
-   * \returns the current simulation context
-   */
+  /** \copydoc SimulatorImpl::GetContext */
   static uint32_t GetContext (void);
 
-  /**
-   * \param time delay until the event expires
-   * \param event the event to schedule
-   * \returns a unique identifier for the newly-scheduled event.
-   *
-   * This method will be typically used by language bindings
-   * to delegate events to their own subclass of the EventImpl base class.
-   */
+  /** \copydoc SimulatorImpl::Schedule */
   static EventId Schedule (Time const &time, const Ptr<EventImpl> &event);
 
-  /**
+  /** \copydoc SimulatorImpl::ScheduleWithContext
    * This method is thread-safe: it can be called from any thread.
-   *
-   * \param time delay until the event expires
-   * \param context event context
-   * \param event the event to schedule
-   * \returns a unique identifier for the newly-scheduled event.
-   *
-   * This method will be typically used by language bindings
-   * to delegate events to their own subclass of the EventImpl base class.
    */
   static void ScheduleWithContext (uint32_t context, const Time &time, EventImpl *event);
 
-  /**
-   * \param event the event to schedule
-   * \returns a unique identifier for the newly-scheduled event.
-   *
-   * This method will be typically used by language bindings
-   * to delegate events to their own subclass of the EventImpl base class.
-   */
+  /** \copydoc SimulatorImpl::ScheduleDestroy */
   static EventId ScheduleDestroy (const Ptr<EventImpl> &event);
 
-  /**
-   * \param event the event to schedule
-   * \returns a unique identifier for the newly-scheduled event.
-   *
-   * This method will be typically used by language bindings
-   * to delegate events to their own subclass of the EventImpl base class.
-   */
+  /** \copydoc SimulatorImpl::ScheduleNow */
   static EventId ScheduleNow (const Ptr<EventImpl> &event);
 
-  /**
-   * \returns the system id for this simulator; used for 
-   *          MPI or other distributed simulations
-   */
+  /** \copydoc SimulatorImpl::GetSystemId */
   static uint32_t GetSystemId (void);
+  
 private:
+  /** Default constructor. */
   Simulator ();
+  /** Destructor. */
   ~Simulator ();
 
+  /**
+   * Implementation of the various Schedule methods.
+   * \param [in] time Delay until the event should execute.
+   * \param [in] event The event to execute.
+   * \return The EventId.
+   */
   static EventId DoSchedule (Time const &time, EventImpl *event);
+  /**
+   * Implementation of the various ScheduleNow methods.
+   * \param [in] event The event to execute.
+   * \return The EventId.
+   */
   static EventId DoScheduleNow (EventImpl *event);
+  /**
+   * Implementation of the various ScheduleDestroy methods.
+   * \param [in] event The event to execute.
+   * \return The EventId.
+   */
   static EventId DoScheduleDestroy (EventImpl *event);
 };
 
 /**
+ * \ingroup simulator
  * \brief create an ns3::Time instance which contains the
  *        current simulation time.
  *
@@ -812,13 +800,19 @@
  * It is typically used as shown below to schedule an event
  * which expires at the absolute time "2 seconds":
  * \code
- * Simulator::Schedule (Seconds (2.0) - Now (), &my_function);
+ *   Simulator::Schedule (Seconds (2.0) - Now (), &my_function);
  * \endcode
+ * \return The current simulation time.
  */
 Time Now (void);
 
 } // namespace ns3
 
+
+/********************************************************************
+ *  Implementation of the templates declared above.
+ ********************************************************************/
+
 namespace ns3 {
 
 template <typename MEM, typename OBJ>
diff -Naur ns-3.21/src/core/model/simulator-impl.cc ns-3.22/src/core/model/simulator-impl.cc
--- ns-3.21/src/core/model/simulator-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/simulator-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,10 +1,31 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 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
+ *
+ */
+
 #include "simulator-impl.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("SimulatorImpl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SimulatorImpl");
+
+NS_OBJECT_ENSURE_REGISTERED (SimulatorImpl);
+  
 TypeId 
 SimulatorImpl::GetTypeId (void)
 {
diff -Naur ns-3.21/src/core/model/simulator-impl.h ns-3.22/src/core/model/simulator-impl.h
--- ns-3.21/src/core/model/simulator-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/simulator-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -32,12 +32,26 @@
 
 class Scheduler;
 
+/**
+ * \ingroup simulator
+ *
+ * The SimulatorImpl base class.
+ *
+ * \todo Define what the simulation or event context means.
+ */
 class SimulatorImpl : public Object
 {
 public:
+  
+  /**
+   * Get the registered TypeId for this class.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
+   * Execute the events scheduled with ScheduleDestroy().
+   *
    * This method is typically invoked at the end of a simulation
    * to avoid false-positive reports by a leak checker.
    * After this method has been invoked, it is actually possible
@@ -46,62 +60,69 @@
    */
   virtual void Destroy () = 0;
   /**
-   * If there are no more events lefts to be scheduled, or if simulation
-   * time has already reached the "stop time" (see Simulator::Stop()),
-   * return true. Return false otherwise.
+   * Check if the simulation should finish.
+   *
+   * Reasons to finish are because there are
+   * no more events lefts to be scheduled, or if simulation
+   * time has already reached the "stop time" (see Simulator::Stop()).
+   *
+   * \return \c true if no more events or stop time reached.
    */
   virtual bool IsFinished (void) const = 0;
   /**
-   * If an event invokes this method, it will be the last
-   * event scheduled by the Simulator::Run method before
+   * Tell the Simulator the calling event should be the last one
+   * executed.
+   *
+   * If a running event invokes this method, it will be the last
+   * event executed by the Simulator::Run method before
    * returning to the caller.
    */
   virtual void Stop (void) = 0;
   /**
+   * Schedule the time delay until the Simulator should stop.
+   *
    * Force the Simulator::Run method to return to the caller when the
    * expiration time of the next event to be processed is greater than
    * or equal to the stop time.  The stop time is relative to the
    * current simulation time.
-   * @param time the stop time, relative to the current time.
+   * \param time The stop time, relative to the current time.
    */
   virtual void Stop (Time const &time) = 0;
   /**
-   * \param time delay until the event expires
-   * \param event the event to schedule
-   * \returns a unique identifier for the newly-scheduled event.
+   * Schedule a future event execution (in the same context).
    *
-   * This method will be typically used by language bindings
-   * to delegate events to their own subclass of the EventImpl base class.
+   * \param time Delay until the event expires.
+   * \param event The event to schedule.
+   * \returns A unique identifier for the newly-scheduled event.
    */
   virtual EventId Schedule (Time const &time, EventImpl *event) = 0;
   /**
-   * \param time delay until the event expires
-   * \param context event context
-   * \param event the event to schedule
-   * \returns a unique identifier for the newly-scheduled event.
+   * Schedule a future event execution (in a different context).
    *
-   * This method will be typically used by language bindings
-   * to delegate events to their own subclass of the EventImpl base class.
+   * \param time Delay until the event expires.
+   * \param context Event context.
+   * \param event The event to schedule.
+   * \returns A unique identifier for the newly-scheduled event.
    */
   virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event) = 0;
   /**
-   * \param event the event to schedule
-   * \returns a unique identifier for the newly-scheduled event.
+   * Schedule an event to run at the current virtual time.
    *
-   * This method will be typically used by language bindings
-   * to delegate events to their own subclass of the EventImpl base class.
+   * \param event The event to schedule.
+   * \returns A unique identifier for the newly-scheduled event.
    */
   virtual EventId ScheduleNow (EventImpl *event) = 0;
   /**
-   * \param event the event to schedule
-   * \returns a unique identifier for the newly-scheduled event.
+   * Schedule an event to run at the end of the simulation, after
+   * the Stop() time or condition has been reached.
    *
-   * This method will be typically used by language bindings
-   * to delegate events to their own subclass of the EventImpl base class.
+   * \param event The event to schedule.
+   * \returns A unique identifier for the newly-scheduled event.
    */
   virtual EventId ScheduleDestroy (EventImpl *event) = 0;
   /**
    * Remove an event from the event list. 
+   * 
    * This method has the same visible effect as the 
    * ns3::EventId::Cancel method
    * but its algorithmic complexity is much higher: it has often 
@@ -109,12 +130,13 @@
    * Note that it is not possible to remove events which were scheduled
    * for the "destroy" time. Doing so will result in a program error (crash).
    *
-   * @param ev the event to remove from the list of scheduled events.
+   * \param id The event to remove from the list of scheduled events.
    */
-  virtual void Remove (const EventId &ev) = 0;
+  virtual void Remove (const EventId &id) = 0;
   /**
    * Set the cancel bit on this event: the event's associated function
-   * will not be invoked when it expires. 
+   * will not be invoked when it expires.
+   *
    * This method has the same visible effect as the 
    * ns3::Simulator::Remove method but its algorithmic complexity is 
    * much lower: it has O(1) complexity.
@@ -122,10 +144,12 @@
    * Note that it is not possible to cancel events which were scheduled
    * for the "destroy" time. Doing so will result in a program error (crash).
    * 
-   * @param ev the event to cancel
+   * \param id the event to cancel
    */
-  virtual void Cancel (const EventId &ev) = 0;
+  virtual void Cancel (const EventId &id) = 0;
   /**
+   * Check if an event has already run or been cancelled.
+   *
    * This method has O(1) complexity.
    * Note that it is not possible to test for the expiration of
    * events which were scheduled for the "destroy" time. Doing so
@@ -134,39 +158,49 @@
    * which means that if the code executed by the event calls
    * this function, it will get true.
    *
-   * @param ev the event to test for expiration
-   * @returns true if the event has expired, false otherwise.
+   * \param id The event to test for expiration.
+   * \returns \c true if the event has expired, false otherwise.
    */
-  virtual bool IsExpired (const EventId &ev) const = 0;
+  virtual bool IsExpired (const EventId &id) const = 0;
   /**
-   * Run the simulation until one of:
-   *   - no events are present anymore
-   *   - the user called Simulator::Stop
-   *   - the user called Simulator::Stop with stop time and the
+   * Run the simulation.
+   *
+   * The simulation will run until one of:
+   *   - No events are present anymore
+   *   - The user called Simulator::Stop
+   *   - The user called Simulator::Stop with a stop time and the
    *     expiration time of the next event to be processed
    *     is greater than or equal to the stop time.
    */
   virtual void Run (void) = 0;
   /**
-   * Return the "current simulation time".
+   * Return the current simulation virtual time.
+   *
+   * \returns The current virtual time.
    */
   virtual Time Now (void) const = 0;
   /**
-   * \param id the event id to analyse
-   * \return the delay left until the input event id expires.
+   * Get the remaining time until this event will execute.
+   *
+   * \param id The event id to analyse.
+   * \return The delay left until the input event id expires.
    *          if the event is not running, this method returns
    *          zero.
    */
   virtual Time GetDelayLeft (const EventId &id) const = 0;
   /**
-   * \return the maximum simulation time at which an event 
+   * Get the maximum representable simulation time.
+   *
+   * \return The maximum simulation time at which an event 
    *          can be scheduled.
    *
    * The returned value will always be bigger than or equal to Simulator::Now.
    */
   virtual Time GetMaximumSimulationTime (void) const = 0;
   /**
-   * \param schedulerFactory a new event scheduler factory
+   * Set the Scheduler to be used to manage the event list.
+   *
+   * \param schedulerFactory A new event scheduler factory.
    *
    * The event scheduler can be set at any time: the events scheduled
    * in the previous scheduler will be transfered to the new scheduler
@@ -174,12 +208,17 @@
    */
   virtual void SetScheduler (ObjectFactory schedulerFactory) = 0;
   /**
-   * \return the system id for this simulator; used for 
-   *          MPI or other distributed simulations
+   * Get the system id of this simulator.
+   *
+   * The system id is the identifier for this simulator instance
+   * in a distributed simulation.  For MPI this is the MPI rank.
+   * \return The system id for this simulator.
    */
   virtual uint32_t GetSystemId () const = 0; 
   /**
-   * \return the current simulation context
+   * Get the current simulation context.
+   *
+   * \return The current simulation context
    */
   virtual uint32_t GetContext (void) const = 0;
 };
diff -Naur ns-3.21/src/core/model/singleton.h ns-3.22/src/core/model/singleton.h
--- ns-3.21/src/core/model/singleton.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/singleton.h	2015-02-05 15:46:22.000000000 -0800
@@ -20,29 +20,76 @@
 #ifndef SINGLETON_H
 #define SINGLETON_H
 
+/**
+ * \file
+ * \ingroup core
+ * ns3::Singleton declaration and template implementation.
+ */
+
 namespace ns3 {
 
 /**
- * \brief a template singleton
+ * \ingroup core
+ * \brief A template singleton
  *
  * This template class can be used to implement the singleton pattern.
  * The underlying object will be destroyed automatically when the process
- * exits. Note that, if you call Singleton::Get again after the object has
+ * exits.
+ *
+ * For a singleton whose lifetime is bounded by the simulation run,
+ * not the process, see SimulationSingleton.
+ *
+ * \note If you call Get() again after the object has
  * been destroyed, the object will be re-created which will result in a
  * memory leak as reported by most memory leak checkers. It is up to the
- * user to ensure that Singleton::Get is never called from a static variable
+ * user to ensure that Get() is never called from a static variable
  * finalizer.
  */
 template <typename T>
 class Singleton
 {
 public:
+  /**
+   * Get a pointer to the singleton instance.
+   *
+   * The instance will be automatically deleted when
+   * the process exits.
+   *
+   * \return A pointer to the singleton instance.
+   */
   static T *Get (void);
 
+private:
+
+  /**
+   * \name %Singleton pattern
+   * Private constructor, copy and assignment operator.
+   *
+   *  Note these do not have to be implemented, since they are
+   *  never called.
+   */
+  /**@{*/
+  /** Default constructor */
+  Singleton<T> (void);
+  
+  /** Copy constructor. */
+  Singleton<T> (const Singleton<T> &);
+  /**
+   * Assignment.
+   * \returns The Singleton.
+   */
+  Singleton<T> operator = (const Singleton<T> &);
+  /**@}*/
+
 };
 
 } // namespace ns3
 
+
+/********************************************************************
+ *  Implementation of the templates declared above.
+ ********************************************************************/
+
 namespace ns3 {
 
 template <typename T>
diff -Naur ns-3.21/src/core/model/string.cc ns-3.22/src/core/model/string.cc
--- ns-3.21/src/core/model/string.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/string.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,5 +1,30 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 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
+ *
+ */
+
 #include "string.h"
 
+/**
+ * \file
+ * \ingroup attribute_String
+ * String attribute value implementations.
+ */
+
 namespace ns3 {
 
 ATTRIBUTE_CHECKER_IMPLEMENT_WITH_NAME (String, "std::string");
diff -Naur ns-3.21/src/core/model/string.h ns-3.22/src/core/model/string.h
--- ns-3.21/src/core/model/string.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/string.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,16 +1,39 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 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
+ *
+ */
+
 #ifndef NS3_STRING_H
 #define NS3_STRING_H
 
 #include <string>
 #include "attribute-helper.h"
 
+/**
+ * \file
+ * \ingroup attribute_String
+ * String attribute value declarations.
+ */
+
 namespace ns3 {
 
+//  Additional docs for class StringValue:
 /**
- * \ingroup attribute
- *
- * \class ns3::StringValue
- * \brief hold variables of type string
+ * Hold variables of type string
  *
  * This class can be used to hold variables of type string,
  * that is, either char * or std::string.
diff -Naur ns-3.21/src/core/model/synchronizer.cc ns-3.22/src/core/model/synchronizer.cc
--- ns-3.21/src/core/model/synchronizer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/synchronizer.cc	2015-02-05 15:46:23.000000000 -0800
@@ -19,10 +19,16 @@
 #include "synchronizer.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Synchronizer");
+/**
+ * \file
+ * \ingroup realtime
+ * ns3::Synchronizer implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Synchronizer");
+
 NS_OBJECT_ENSURE_REGISTERED (Synchronizer);
 
 TypeId 
@@ -35,7 +41,8 @@
 }
 
 Synchronizer::Synchronizer ()
-  : m_realtimeOriginNano (0), m_simOriginNano (0)
+  : m_realtimeOriginNano (0),
+    m_simOriginNano (0)
 {
   NS_LOG_FUNCTION (this);
 }
diff -Naur ns-3.21/src/core/model/synchronizer.h ns-3.22/src/core/model/synchronizer.h
--- ns-3.21/src/core/model/synchronizer.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/synchronizer.h	2015-02-05 15:46:23.000000000 -0800
@@ -23,14 +23,21 @@
 #include "nstime.h"
 #include "object.h"
 
+/**
+ * \file
+ * \ingroup realtime
+ * ns3::Synchronizer declaration.
+ */
+
 namespace ns3 {
 
 /**
+ * @ingroup realtime
  * @brief Base class used for synchronizing the simulation events to some
  * real time "wall clock."
  *
  * The simulation clock is maintained as a 64-bit integer in a unit specified
- * by the user through the TimeStepPrecision::Set function. This means that
+ * by the user through the Time::SetResolution function. This means that
  * it is not possible to specify event expiration times with anything better
  * than this user-specified accuracy.  We use this clock for the simulation
  * time.
@@ -44,288 +51,287 @@
 class Synchronizer : public Object 
 {
 public:
+  /**
+   * Get the registered TypeId for this class.
+   * \returns The TypeId.
+   */
   static TypeId GetTypeId (void);
 
+  /** Constructor. */
   Synchronizer ();
+  /** Destructor. */
   virtual ~Synchronizer ();
 
-/**
- * @brief Return true if this synchronizer is actually synchronizing to a
- * realtime clock.  The simulator sometimes needs to know this.
- * @returns True if locked with realtime, false if not.
- */
+  /**
+   * @brief Return true if this synchronizer is actually synchronizing to a
+   * realtime clock.
+   *
+   * The simulator sometimes needs to know this.
+   *
+   * @returns \c true if locked with realtime, \c false if not.
+   */
   bool Realtime (void);
 
-/**
- * @brief Retrieve the value of the origin of the underlying normalized wall
- * clock time in simulator timestep units.
- *
- * @returns The normalized wall clock time (in simulator timestep units).
- * @see TimeStepPrecision::Get
- * @see Synchronizer::SetOrigin
- */
+  /**
+   * @brief Retrieve the value of the origin of the underlying normalized wall
+   * clock time in simulator timestep units.
+   *
+   * @returns The normalized wall clock time (in Time resolution units).
+   * @see SetOrigin
+   */
   uint64_t GetCurrentRealtime (void);
 
-/**
- * @brief Establish a correspondence between a simulation time and the
- * synchronizer real time.
- *
- * This method is expected to be called at the "instant" before simulation
- * begins.  At this point, simulation time = 0, and a 
- * set = 0 in this method.  We then associate this time with the current
- * value of the real time clock that will be used to actually perform the
- * synchronization.
- *
- * Subclasses are expected to implement the corresponding DoSetOrigin pure
- * virtual method to do the actual real-time-clock-specific work of making the 
- * correspondence mentioned above.
- *
- * @param ts The simulation time we should use as the origin (in simulator
- * timestep units).
- * @see TimeStepPrecision::Get
- * @see TimeStepPrecision::DoSetOrigin
- */
+  /**
+   * @brief Establish a correspondence between a simulation time and the
+   * synchronizer real time.
+   *
+   * This method is expected to be called at the "instant" before simulation
+   * begins.  At this point, simulation time = 0, and a 
+   * set = 0 in this method.  We then associate this time with the current
+   * value of the real time clock that will be used to actually perform the
+   * synchronization.
+   *
+   * Subclasses are expected to implement the corresponding DoSetOrigin pure
+   * virtual method to do the actual real-time-clock-specific work
+   * of making the correspondence mentioned above.
+   *
+   * @param ts The simulation time we should use as the origin (in
+   *     Time resolution units).
+   * @see DoSetOrigin
+   */
   void SetOrigin (uint64_t ts);
 
-/**
- * @brief Retrieve the value of the origin of the simulation time in 
- * simulator timestep units.
- *
- * @returns The simulation time used as the origin (in simulator timestep
- * units).
- * @see TimeStepPrecision::Get
- * @see Synchronizer::SetOrigin
- */
+  /**
+   * @brief Retrieve the value of the origin of the simulation time in 
+   * Time.resolution units.
+   *
+   * @returns The simulation time used as the origin (in Time resolution units).
+   * @see SetOrigin
+   */
   uint64_t GetOrigin (void);
 
-/**
- * @brief Retrieve the difference between the real time clock used to 
- * synchronize the simulation and the simulation time (in simulator timestep
- * units).
- *
- * @param ts Simulation timestep from the simulator interpreted as current time
- * in the simulator.
- * @returns Simulation timestep (in simulator timestep units) minus origin 
- * time (stored internally in nanosecond units).
- * @see TimeStepPrecision::Get
- * @see Synchronizer::SetOrigin
- * @see Synchronizer::DoGetDrift
- */
+  /**
+   * @brief Retrieve the difference between the real time clock used to 
+   * synchronize the simulation and the simulation time (in
+   * Time resolution units).
+   *
+   * @param ts Simulation time in Time resolution units.
+   * @returns Simulation Time (in Time resolution units)
+   *     minus the origin time (stored internally in nanosecond units).
+   * @see SetOrigin
+   * @see DoGetDrift
+   */
   int64_t GetDrift (uint64_t ts);
 
-/**
- * @brief Wait until the real time is in sync with the specified simulation
- * time or until the synchronizer is Sigalled.
- *
- * This is where the real work of synchronization is done.  The Time passed
- * in as a parameter is the simulation time.  The job of Synchronize is to
- * translate from simulation time to synchronizer time (in a perfect world
- * this is the same time) and then figure out how long in real-time it needs
- * to wait until that synchronizer / simulation time comes around.
- *
- * Subclasses are expected to implement the corresponding DoSynchronize pure
- * virtual method to do the actual real-time-clock-specific work of waiting 
- * (either busy-waiting or sleeping, or some combination thereof) until the
- * requested simulation time.
- *
- * @param tsCurrent The current simulation time (in simulator timestep units).
- * @param tsDelay The simulation time we need to wait for (in simulator
- * timestep units).
- * @returns True if the function ran to completion, false if it was interrupted
- * by a Signal.
- * @see TimeStepPrecision::Get
- * @see Synchronizer::DoSynchronize
- * @see Synchronizer::Signal
- */
+  /**
+   * @brief Wait until the real time is in sync with the specified simulation
+   * time or until the synchronizer is Sigalled.
+   *
+   * This is where the real work of synchronization is done.  The \c tsCurrent
+   * argument is the simulation time.  The job of Synchronize is to
+   * translate from simulation time to synchronizer time (in a perfect world
+   * this is the same time) and then figure out how long in real-time it needs
+   * to wait until that synchronizer / simulation time comes around.
+   *
+   * Subclasses are expected to implement the corresponding DoSynchronize pure
+   * virtual method to do the actual real-time-clock-specific work of waiting 
+   * (either busy-waiting or sleeping, or some combination thereof) until the
+   * requested simulation time.
+   *
+   * @param tsCurrent The current simulation time (in Time resolution units).
+   * @param tsDelay The simulation time we need to wait for (in Time
+   *     resolution units).
+   * @returns \c true if the function ran to completion,
+   *          \c false if it was interrupted by a Signal.
+   * @see DoSynchronize
+   * @see Signal
+   */
   bool Synchronize (uint64_t tsCurrent, uint64_t tsDelay);
 
-/**
- * @brief Tell a possible simulator thread waiting in the Synchronize method
- * that an event has happened which demands a reevaluation of the wait time.
- * This will cause the thread to wake and return to the simulator proper
- * where it can get its bearings.
- *
- * @see Synchronizer::Synchronize
- * @see Synchronizer::DoSignal
- */
+  /**
+   * @brief Tell a possible simulator thread waiting in the Synchronize method
+   * that an event has happened which demands a reevaluation of the wait time.
+   *
+   * This will cause the thread to wake and return to the simulator proper
+   * where it can get its bearings.
+   *
+   * @see Synchronize
+   * @see DoSignal
+   */
   void Signal (void);
 
-/**
- * @brief Set the condition variable that tells a possible simulator thread 
- * waiting in the Synchronize method that an event has happened which demands
- * a reevaluation of the wait time.
- *
- * @see Synchronizer::Signal
- */
+  /**
+   * @brief Set the condition variable that tells a possible simulator thread 
+   * waiting in the Synchronize method that an event has happened which demands
+   * a reevaluation of the wait time.
+   *
+   * @see Signal
+   */
   void SetCondition (bool);
 
-/**
- * @brief Ask the synchronizer to remember what time it is.  Typically used
- * with EventEnd to determine the real execution time of a simulation event.
- *
- * @see Synchronizer::EventEnd
- * @see TimeStepPrecision::Get
- */
+  /**
+   * @brief Ask the synchronizer to remember what time it is.
+   *
+   * Typically used with EventEnd to determine the real execution time
+   * of a simulation event.
+   *
+   * @see EventEnd
+   */
   void EventStart (void);
 
-/**
- * @brief Ask the synchronizer to return the time step between the instant
- * remembered during EventStart and now.  Used in conjunction with EventStart
- * to determine the real execution time of a simulation event.
- *
- * @see Synchronizer::EventStart
- * @see TimeStepPrecision::Get
- */
+  /**
+   * @brief Ask the synchronizer to return the time step between the instant
+   * remembered during EventStart and now.
+   *
+   * Used in conjunction with EventStart to determine the real execution time
+   * of a simulation event.
+   *
+   * @returns The elapsed real time, in ns.
+   * @see EventStart
+   */
   uint64_t EventEnd (void);
 
 protected:
-/**
- * @brief Establish a correspondence between a simulation time and a 
- * wall-clock (real) time.
- *
- * @internal
- *
- * There are three timelines involved here:  the simulation time, the 
- * (absolute) wall-clock time and the (relative) synchronizer real time.
- * Calling this method makes a correspondence between the origin of the
- * synchronizer time and the current wall-clock time.
- *
- * This method is expected to be called at the "instant" before simulation
- * begins.  At this point, simulation time = 0, and synchronizer time is
- * set = 0 in this method.  We then associate this time with the current
- * value of the real time clock that will be used to actually perform the
- * synchronization.
- *
- * Subclasses are expected to implement this method to do the actual 
- * real-time-clock-specific work of making the correspondence mentioned above.
- * for example, this is where the differences between Time parameters and
- * parameters to clock_nanosleep would be dealt with. 
- *
- * @param ns The simulation time we need to use as the origin (normalized to
- * nanosecond units).
- * @see Synchronizer::SetOrigin
- * @see TimeStepPrecision::Get
- */
+  /**
+   * @brief Establish a correspondence between a simulation time and a 
+   * wall-clock (real) time.
+   *
+   * There are three timelines involved here:  the simulation (virtual) time,
+   * the (absolute) wall-clock time and the (relative) synchronizer real time.
+   * Calling this method makes a correspondence between the origin of the
+   * synchronizer time and the current wall-clock time.
+   *
+   * This method is expected to be called at the "instant" before simulation
+   * begins.  At this point, simulation time = 0, and synchronizer time is
+   * set = 0 in this method.  We then associate this time with the current
+   * value of the real time clock that will be used to actually perform the
+   * synchronization.
+   *
+   * Subclasses are expected to implement this method to do the actual 
+   * real-time-clock-specific work of making the correspondence mentioned above.
+   * for example, this is where the differences between Time parameters and
+   * parameters to clock_nanosleep would be dealt with. 
+   *
+   * @param ns The simulation time we need to use as the origin (normalized to
+   *    nanosecond units).
+   * @see SetOrigin
+   */
   virtual void DoSetOrigin (uint64_t ns) = 0;
 
-/**
- * @brief Return true if this synchronizer is actually synchronizing to a
- * realtime clock.  The simulator sometimes needs to know this.
- *
- * @internal
- *
- * Subclasses are expected to implement this method to tell the outside world
- * whether or not they are synchronizing to a realtime clock.
- *
- * @returns True if locked with realtime, false if not.
- */
+  /**
+   * @brief Return \c true if this synchronizer is actually synchronizing to a
+   * realtime clock.
+   *
+   * The simulator sometimes needs to know this.
+   *
+   * Subclasses are expected to implement this method to tell the outside world
+   * whether or not they are synchronizing to a realtime clock.
+   *
+   * @returns \c true if locked with realtime, \c false if not.
+   */
   virtual bool DoRealtime (void) = 0;
 
-/**
- * @brief Retrieve the value of the origin of the underlying normalized wall
- * clock time in simulator timestep units.
- *
- * @internal
- *
- * Subclasses are expected to implement this method to do the actual
- * real-time-clock-specific work of getting the current time.
- *
- * @returns The normalized wall clock time (in nanosecond units).
- * @see TimeStepPrecision::Get
- * @see Synchronizer::SetOrigin
- */
+  /**
+   * @brief Retrieve the value of the origin of the underlying normalized wall
+   * clock time in Time resolution units.
+   *
+   * Subclasses are expected to implement this method to do the actual
+   * real-time-clock-specific work of getting the current time.
+   *
+   * @returns The normalized wall clock time (in nanosecond units).
+   * @see SetOrigin
+   */
   virtual uint64_t DoGetCurrentRealtime (void) = 0;
 
-/**
- * @brief Wait until the real time is in sync with the specified simulation
- * time.
- *
- * @internal
- *
- * This is where the real work of synchronization is done.  The Time passed
- * in as a parameter is the simulation time.  The job of Synchronize is to
- * translate from simulation time to synchronizer time (in a perfect world
- * this is the same time) and then figure out how long in real-time it needs
- * to wait until that synchronizer / simulation time comes around.
- *
- * Subclasses are expected to implement this method to do the actual
- * real-time-clock-specific work of waiting (either busy-waiting or sleeping,
- * or some combination) until the requested simulation time.
- *
- * @param nsCurrent The current simulation time (normalized to nanosecond
- * units).
- * @param nsDelay The simulation time we need to wait for (normalized to 
- * nanosecond units).
- * @returns True if the function ran to completion, false if it was interrupted
- * by a Signal.
- * @see Synchronizer::Synchronize
- * @see TimeStepPrecision::Get
- * @see Synchronizer::Signal
- */
+  /**
+   * @brief Wait until the real time is in sync with the specified simulation
+   * time.
+   *
+   * This is where the real work of synchronization is done.  The
+   * \c nsCurrent argument is the simulation time (in ns).  The job of
+   * DoSynchronize is to translate from simulation time to synchronizer time
+   * (in a perfect world these are the same time) and then figure out
+   * how long in real-time it needs to wait until that
+   * synchronizer / simulation time comes around.
+   *
+   * Subclasses are expected to implement this method to do the actual
+   * real-time-clock-specific work of waiting (either busy-waiting or sleeping,
+   * or some combination) until the requested simulation time.
+   *
+   * @param nsCurrent The current simulation time (in nanosecond units).
+   * @param nsDelay The simulation time we need to wait for (normalized to 
+   * nanosecond units).
+   * @returns \c true if the function ran to completion,
+   *          \c false if it was interrupted by a Signal.
+   * @see Synchronize
+   * @see Signal
+   */
   virtual bool DoSynchronize (uint64_t nsCurrent, uint64_t nsDelay) = 0;
 
-/**
- * @brief Declaration of the method used to tell a possible simulator thread 
- * waiting in the DoSynchronize method that an event has happened which
- * demands a reevaluation of the wait time.
- *
- * @see Synchronizer::Signal
- */
+  /**
+   * @brief Tell a possible simulator thread waiting in the
+   * DoSynchronize method that an event has happened which
+   * demands a reevaluation of the wait time.
+   *
+   * @see Signal
+   */
   virtual void DoSignal (void) = 0;
 
-/**
- * @brief Declaration of the method used to set the condition variable that 
- * tells a possible simulator thread waiting in the Synchronize method that an
- * event has happened which demands a reevaluation of the wait time.
- *
- * @see Synchronizer::SetCondition
- */
+  /**
+   * @brief Set the condition variable to tell a possible simulator thread
+   * waiting in the Synchronize method that an event has happened which
+   * demands a reevaluation of the wait time.
+   *
+   * @see SetCondition
+   */
   virtual void DoSetCondition (bool) = 0;
 
-/**
- * @brief Declaration of method used to retrieve drift between the real time
- * clock used to synchronize the simulation and the current simulation time.
- *
- * @internal
- *
- * @param ns Simulation timestep from the simulator normalized to nanosecond 
- * steps.
- * @returns Drift in nanosecond units.
- * @see TimeStepPrecision::Get
- * @see Synchronizer::SetOrigin
- * @see Synchronizer::GetDrift
- */
+  /**
+   * @brief Get the drift between the real time clock used to synchronize
+   * the simulation and the current simulation time.
+   *
+   * @param ns Simulation time in ns.
+   * @returns Drift in ns units.
+   * @see SetOrigin
+   * @see GetDrift
+   */
   virtual int64_t DoGetDrift (uint64_t ns) = 0;
 
+  /**
+   * @brief Record the normalized real time at which the current
+   * event is starting execution.
+   */
   virtual void DoEventStart (void) = 0;
+  /**
+   * @brief Return the amount of real time elapsed since the last call
+   * to EventStart.
+   *
+   * @returns The elapsed real time, in ns.
+   */
   virtual uint64_t DoEventEnd (void) = 0;
 
+  /** The real time, in ns, when SetOrigin was called. */
   uint64_t m_realtimeOriginNano;
+  /** The simulation time, in ns, when SetOrigin was called. */
   uint64_t m_simOriginNano;
 
 private:
-/**
- * @brief Convert a simulator time step (which can be steps of time in a 
- * user-specified unit) to a normalized time step in nanosecond units.
- *
- * @internal
- *
- * @param ts The simulation time step to be normalized.
- * @returns The simulation time step normalized to nanosecond units.
- * @see TimeStepPrecision::Get
- */
+  /**
+   * @brief Convert a simulator time step (in Time resolution units)
+   * to a normalized time step in nanosecond units.
+   *
+   * @param ts The simulation time step to be normalized.
+   * @returns The simulation time step normalized to nanosecond units.
+   */
   uint64_t TimeStepToNanosecond (uint64_t ts);
 
-/**
- * @brief Convert a normalized nanosecond count into a simulator time step
- * (which can be steps of time in a user-specified unit).
- *
- * @internal
- *
- * @param ns The nanosecond count step to be converted
- * @returns The simulation time step to be interpreted in appropriate units.
- * @see TimeStepPrecision::Get
- */
+  /**
+   * @brief Convert a normalized nanosecond time step into a
+   * simulator time step (in Time resolution units).
+   *
+   * @param ns The nanosecond count step to be converted
+   * @returns The simulation time step to be interpreted in appropriate units.
+   */
   uint64_t NanosecondToTimeStep (uint64_t ns);
 };
 
diff -Naur ns-3.21/src/core/model/system-condition.h ns-3.22/src/core/model/system-condition.h
--- ns-3.21/src/core/model/system-condition.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/system-condition.h	2015-02-05 15:46:23.000000000 -0800
@@ -21,11 +21,25 @@
 
 #include "ptr.h"
 
-namespace ns3 { 
+/**
+ * @file
+ * @ingroup thread
+ * System-independent thread conditional wait.
+ */
+
+namespace ns3 {
+
+/**
+ * @ingroup system
+ * @defgroup thread Threading and Signaling.
+ *
+ * System-independent interfaces to threads, signal conditions, and mutex.
+ */
 	
 class SystemConditionPrivate;
 
 /**
+ * @ingroup thread
  * @brief A class which provides a relatively platform-independent 
  * conditional-wait thread synchronization primitive.
  *
@@ -61,7 +75,7 @@
 
   /**
    * Set the value of the underlying condition.
-   * \param condition value
+   * @param condition value
    */
   void SetCondition (bool condition);
 
@@ -92,12 +106,14 @@
   /**
    * Wait a maximum of ns nanoseconds for the condition to be true.  If the
    * wait times out, return true else return false.
-   * \param ns maximum of nanoseconds to wait
+   * @param ns maximum of nanoseconds to wait
+   * @returns true if the timer expired, otherwise return false.
    */
   bool TimedWait (uint64_t ns);
 	
 
 private:
+  /** The (system-dependent) implementation. */
   SystemConditionPrivate * m_priv;
 };
 
diff -Naur ns-3.21/src/core/model/system-mutex.h ns-3.22/src/core/model/system-mutex.h
--- ns-3.21/src/core/model/system-mutex.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/system-mutex.h	2015-02-05 15:46:23.000000000 -0800
@@ -23,11 +23,19 @@
 
 #include "ptr.h"
 
+/**
+ * @file
+ * @ingroup thread
+ * System-independent mutex primitive, ns3::SystemMutex,
+ * and ns3::CriticalSection.
+ */
+
 namespace ns3 { 
 	
 class SystemMutexPrivate;
 
 /**
+ * @ingroup thread
  * @brief A class which provides a relatively platform-independent Mutual
  * Exclusion thread synchronization primitive.
  *
@@ -64,6 +72,7 @@
   void Unlock ();
 	
 private:
+  /** The (system-dependent) implementation. */
   SystemMutexPrivate * m_priv;
 };
 
@@ -73,32 +82,32 @@
  * When more than one SystemThread needs to access a shared resource, we
  * control access by acquiring a SystemMutex.  The CriticalSection class uses
  * the C++ scoping rules to automatically perform the required Lock and Unlock
- * operations to implement a Critical Section.
+ * operations on the shared SystemMutex to implement a Critical Section.
  *
  * If one wants to treat an entire method call as a critical section, one would
  * do something like,
- *
- * Class::Method ()
- * {
- *   CriticalSection cs (mutex);
- *   ...
- * }
- *
+ * @code
+ *   Class::Method ()
+ *   {
+ *     CriticalSection cs (mutex);
+ *     ...
+ *   }
+ * @endcode
  * In this case, the critical section is entered when the CriticalSection 
  * object is created, and the critical section is exited when the 
  * CriticalSection object goes out of scope at the end of the method.
  *
  * Finer granularity is achieved by using local scope blocks.
- *
- * Class::Method ()
- * {
- *   ...
+ * @code
+ *   Class::Method ()
  *   {
- *     CriticalSection cs (mutex);
+ *     ...
+ *     {
+ *       CriticalSection cs (mutex);
+ *     }
+ *     ...
  *   }
- *   ...
- * }
- *
+ * @endcode
  * Here, the critical section is entered partway through the method when the
  * CriticalSection object is created in the local scope block (the braces).
  * The critical section is exited when the CriticalSection object goes out of
@@ -109,10 +118,16 @@
 class CriticalSection
 {
 public:
+  /**
+   * Construct with the required SystemMutex.
+   *
+   * @param [in] mutex The mutex.
+   */
   CriticalSection (SystemMutex &mutex);
+  /** Destructor */
   ~CriticalSection ();
 private:
-  SystemMutex &m_mutex;
+  SystemMutex &m_mutex;  /**< The mutex. */
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/core/model/system-path.cc ns-3.22/src/core/model/system-path.cc
--- ns-3.21/src/core/model/system-path.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/system-path.cc	2015-02-05 15:46:23.000000000 -0800
@@ -25,12 +25,16 @@
 #include <cstdlib>
 #include <cerrno>
 #include <cstring>
+
+
 #if defined (HAVE_DIRENT_H) and defined (HAVE_SYS_TYPES_H)
+/** Do we have an \c opendir function? */
 #define HAVE_OPENDIR
 #include <sys/types.h>
 #include <dirent.h>
 #endif
 #if defined (HAVE_SYS_STAT_H) and defined (HAVE_SYS_TYPES_H)
+/** Do we have a \c makedir function? */
 #define HAVE_MKDIR_H
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -49,18 +53,38 @@
 #include <unistd.h>
 #endif
 
+/**
+ * \def SYSTEM_PATH_SEP
+ * System-specific path separator used between directory names.
+ */
 #if defined (__win32__)
 #define SYSTEM_PATH_SEP "\\"
 #else
 #define SYSTEM_PATH_SEP "/"
 #endif
 
-NS_LOG_COMPONENT_DEFINE ("SystemPath");
+/**
+ * \file
+ * \ingroup systempath
+ * System-independent file and directory functions implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SystemPath");
+
 namespace SystemPath {
 
+/**
+ * \ingroup systempath
+ * \brief Get the directory path for a file.
+ *
+ * This is an internal function (by virtue of not being
+ * declared in a \c .h file); the public API is FindSelfDirectory().
+ * 
+ * \param path The full path to a file.
+ * \returns The full path to the containing directory.
+ */
 std::string Dirname (std::string path)
 {
   NS_LOG_FUNCTION (path);
@@ -303,6 +327,8 @@
 MakeDirectories (std::string path)
 {
   NS_LOG_FUNCTION (path);
+
+  // Make sure all directories on the path exist
   std::list<std::string> elements = Split (path);
   for (std::list<std::string>::const_iterator i = elements.begin (); i != elements.end (); ++i)
     {
@@ -314,11 +340,13 @@
         }
 #endif
     }
+
+  // Make the final directory.  Is this redundant with last iteration above?
 #if defined(HAVE_MKDIR_H)
-      if (mkdir (path.c_str (), S_IRWXU))
-        {
-          NS_LOG_ERROR ("failed creating directory " << path);
-        }
+  if (mkdir (path.c_str (), S_IRWXU))
+    {
+      NS_LOG_ERROR ("failed creating directory " << path);
+    }
 #endif
 
 }
diff -Naur ns-3.21/src/core/model/system-path.h ns-3.22/src/core/model/system-path.h
--- ns-3.21/src/core/model/system-path.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/system-path.h	2015-02-05 15:46:23.000000000 -0800
@@ -23,21 +23,42 @@
 #include <string>
 #include <list>
 
+/**
+ * \file
+ * \ingroup systempath
+ * System-independent file and directory function declarations.
+ */
+
 namespace ns3 {
 
 /**
- * \brief Encapsulate OS-specific functions to manipulate file and directory paths.
+ * \ingroup system
+ * \defgroup systempath Host Filesystem
+ * \brief Encapsulate OS-specific functions to manipulate file
+ * and directory paths.
  *
- * The functions provided here are used mostly to implement the ns-3 test framework.
+ * The functions provided here are used mostly to implement
+ * the ns-3 test framework.
+ */
+
+/**
+ * \ingroup systempath
+ * \brief Namespace for various file and directory path functions.
  */
 namespace SystemPath {
 
   /**
+   * \ingroup systempath
+   * Get the file system path to the current executable.
+   *
    * \return the directory in which the currently-executing binary is located
    */
   std::string FindSelfDirectory (void);
   
   /**
+   * \ingroup systempath
+   * Join two file system path elements.
+   *
    * \param left a path element
    * \param right a path element
    * \return a concatenation of the two input paths
@@ -45,6 +66,12 @@
   std::string Append (std::string left, std::string right);
 
   /**
+   * \ingroup systempath
+   * Split a file system path into directories according to
+   * the local path separator.
+   *
+   * This is the inverse of Join.
+   *
    * \param path a path
    * \return a list of path elements that can be joined together again with
    *         the Join function.
@@ -53,6 +80,12 @@
   std::list<std::string> Split (std::string path);
 
   /**
+   * Join a list of file system path directories into a single
+   * file system path.
+   *
+   * This is the inverse of Split.
+   *
+   * \ingroup systempath
    * \param begin iterator to first element to join
    * \param end iterator to last element to join
    * \return a path that is a concatenation of all the input elements.
@@ -61,24 +94,31 @@
 		    std::list<std::string>::const_iterator end);
   
   /**
+   * \ingroup systempath
+   * Get the list of files located in a file system directory.
+   *
    * \param path a path which identifies a directory
    * \return a list of the filenames which are located in the input directory
    */
   std::list<std::string> ReadFiles (std::string path);
 
   /**
-   * \return a path which identifies a temporary directory.
+   * \ingroup systempath
+   * Get the name of a temporary directory.
    *
-   * The returned path identifies a directory which does not exist yet
+   * The returned path identifies a directory which does not exist yet.
    * Call ns3::SystemPath::MakeDirectories to create it. Yes, there is a
    * well-known security race in this API but we don't care in ns-3.
+   *
+   * \return a path which identifies a temporary directory.
    */
   std::string MakeTemporaryDirectoryName (void);
 
   /**
-   * \param path a path to a directory
-   *
+   * \ingroup systempath
    * Create all the directories leading to path.
+   *
+   * \param path a path to a directory
    */
   void MakeDirectories (std::string path);
 
diff -Naur ns-3.21/src/core/model/system-thread.cc ns-3.22/src/core/model/system-thread.cc
--- ns-3.21/src/core/model/system-thread.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/system-thread.cc	2015-02-05 15:46:23.000000000 -0800
@@ -23,10 +23,16 @@
 #include "log.h"
 #include <cstring>
 
-NS_LOG_COMPONENT_DEFINE ("SystemThread");
+/**
+ * @file
+ * @ingroup thread
+ * System-independent thread class ns3::SystemThread definitions.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SystemThread");
+
 #ifdef HAVE_PTHREAD_H
 
 SystemThread::SystemThread (Callback<void> callback)
diff -Naur ns-3.21/src/core/model/system-thread.h ns-3.22/src/core/model/system-thread.h
--- ns-3.21/src/core/model/system-thread.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/system-thread.h	2015-02-05 15:46:23.000000000 -0800
@@ -27,9 +27,16 @@
 #include <pthread.h>
 #endif /* HAVE_PTHREAD_H */
 
+/**
+ * @file
+ * @ingroup thread
+ * System-independent thread class ns3::SystemThread declaration.
+ */
+
 namespace ns3 { 
 
 /**
+ * @ingroup thread
  * @brief A class which provides a relatively platform-independent thread
  * primitive.
  *
@@ -43,12 +50,15 @@
  * execution.
  *
  * Synchronization between threads is provided via the SystemMutex class.
+ *
+ * See @ref main-test-sync.cc for example usage.
  */
 class SystemThread : public SimpleRefCount<SystemThread>
 {
 public:
 
 #ifdef HAVE_PTHREAD_H
+  /** Type alias for the system-dependent thread object. */
   typedef pthread_t ThreadId;
 #endif
 
@@ -67,36 +77,39 @@
    *
    * The most common use is expected to be creating a thread of execution in
    * a method.  In this case you would use code similar to,
-   *
+   * @code
    *   MyClass myObject;
    *   Ptr<SystemThread> st = Create<SystemThread> (
    *     MakeCallback (&MyClass::MyMethod, &myObject));
    *   st->Start ();
+   * @endcode
    *
    * The SystemThread is passed a callback that calls out to the function
-   * MyClass::MyMethod.  When this function is called, it is called as an
-   * object method on the myObject object.  Essentially what you are doing
-   * is asking the SystemThread to call object->MyMethod () in a new thread
+   * @c MyClass::MyMethod.  When this function is called, it is called as an
+   * object method on the @c myObject object.  Essentially what you are doing
+   * is asking the SystemThread to call @c object->MyMethod() in a new thread
    * of execution.
    *
    * If starting a thread in your currently executing object, you can use the
    * "this" pointer:
-   *
+   * @code
    *   Ptr<SystemThread> st = Create<SystemThread> (
    *     MakeCallback (&MyClass::MyMethod, this));
    *   st->Start ();
+   * @endcode
    *
    * Object lifetime is always an issue with threads, so it is common to use
    * smart pointers.  If you are spinning up a thread in an object that is 
    * managed by a smart pointer, you can use that pointer directly:
-   *
+   * @code
    *   Ptr<MyClass> myPtr = Create<MyClass> ();
    *   Ptr<SystemThread> st = Create<SystemThread> (
    *     MakeCallback (&MyClass::MyMethod, myPtr));
    *   st->Start ();
+   * @endcode
    *
    * Just like any thread, you can synchronize with its termination.  The 
-   * method provided to do this is Join (). If you call Join() you will block
+   * method provided to do this is Join(). If you call Join() you will block
    * until the SystemThread run method returns.
    *
    * @param callback entry point of the thread
@@ -136,18 +149,25 @@
   static ThreadId Self(void);
 
   /**
-   * @brief Compares an TharedId with the current ThreadId .
+   * @brief Compares an ThreadId with the current ThreadId .
    *
-   * @returns true if Id matches the current ThreadId.
+   * @param [in] id The ThreadId to compare to.
+   * @returns true if @c id matches the current ThreadId.
    */
   static bool Equals(ThreadId id);
 
 private:
 #ifdef HAVE_PTHREAD_H
+  /**
+   * Invoke the callback in the new thread.
+   *
+   * @param [in] arg This SystemThread instance to communicate to the newly
+   *                 launched thread.
+   */
   static void *DoRun (void *arg);
 
-  Callback<void> m_callback;
-  pthread_t m_thread;
+  Callback<void> m_callback;  /**< The main function for this thread when launched. */
+  pthread_t m_thread;  /**< The thread id of the child thread. */
 #endif 
 };
 
diff -Naur ns-3.21/src/core/model/system-wall-clock-ms.h ns-3.22/src/core/model/system-wall-clock-ms.h
--- ns-3.21/src/core/model/system-wall-clock-ms.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/system-wall-clock-ms.h	2015-02-05 15:46:23.000000000 -0800
@@ -23,11 +23,32 @@
 
 #include <stdint.h>
 
+/**
+ * \file
+ * \ingroup system
+ * System-independent wall clock class ns3::SystemWallClockMs declaration.
+ */
+
 namespace ns3 {
 
 /**
- * \brief measure elapsed time in milliseconds
+ * @ingroup core
+ * @defgroup system System Services
+ *
+ * System-independent interfaces to operating system services:
+ * files system, threading, wall clock time.
  *
+ * Services provided:
+ *
+ *   - File and directory paths.
+ *   - Thread primitives:  threads, conditional waits, mutex, critical sections.
+ *   - Asynchronous input from a file descriptor.
+ *   - Wall clock time.
+ */
+
+/**
+ * \ingroup system
+ * \brief Measure elapsed wall clock time in milliseconds.
  */
 class SystemWallClockMs {
 public:
@@ -41,39 +62,39 @@
   /**
    * \brief Stop measuring the time since Start() was called.
    * \returns the measured elapsed wall clock time (in milliseconds) since 
-   *          ns3::SystemWallClockMs::Start was invoked.
+   *          Start() was invoked.
    *
-   * It is possible to start a new measurement with ns3::SystemWallClockMs::Start
-   * after this method returns.
+   * It is possible to start a new measurement with Start() after
+   * this method returns.
    *
-   * Returns int64_t to avoid dependency on clock_t in ns-3 code.
+   * Returns \c int64_t to avoid dependency on \c clock_t in ns-3 code.
    */
   int64_t End (void);
 
   /**
    * \returns the measured elapsed wall clock time (in milliseconds) since 
-   *          ns3::SystemWallClockMs::Start was invoked.
+   *          Start() was invoked.
    *
-   * Returns int64_t to avoid dependency on clock_t in ns-3 code.
+   * Returns \c int64_t to avoid dependency on \c clock_t in ns-3 code.
    */
   int64_t GetElapsedReal (void) const;
   /**
-   * \returns the measured elapsed 'user' wall clock time (in milliseconds) since 
-   *          ns3::SystemWallClockMs::Start was invoked.
+   * \returns the measured elapsed 'user' wall clock time (in milliseconds)
+   *          since Start() was invoked.
    *
-   * Returns int64_t to avoid dependency on clock_t in ns-3 code.
+   * Returns \c int64_t to avoid dependency on \c clock_t in ns-3 code.
    */
   int64_t GetElapsedUser (void) const;
   /**
-   * \returns the measured elapsed 'system' wall clock time (in milliseconds) since 
-   *          ns3::SystemWallClockMs::Start was invoked.
+   * \returns the measured elapsed 'system' wall clock time (in milliseconds)
+   *          since Start() was invoked.
    *
-   * Returns int64_t to avoid dependency on clock_t in ns-3 code.
+   * Returns \c int64_t to avoid dependency on \c clock_t in ns-3 code.
    */
   int64_t GetElapsedSystem (void) const;
 
 private:
-  class SystemWallClockMsPrivate *m_priv;
+  class SystemWallClockMsPrivate *m_priv;  //!< The implementation.
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/core/model/test.cc ns-3.22/src/core/model/test.cc
--- ns-3.21/src/core/model/test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/test.cc	2015-02-05 15:46:23.000000000 -0800
@@ -181,12 +181,6 @@
 }
 
 void
-TestCase::AddTestCase (TestCase *testCase)
-{
-  AddTestCase (testCase, TestCase::QUICK);
-}
-
-void
 TestCase::AddTestCase (TestCase *testCase, enum TestCase::TestDuration duration)
 {
   // Record this for use later when all test cases are run.
@@ -332,12 +326,6 @@
     }
 }
 bool 
-TestCase::GetErrorStatus (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return IsStatusFailure ();
-}
-bool 
 TestCase::IsStatusFailure (void) const
 {
   NS_LOG_FUNCTION (this);
@@ -949,6 +937,11 @@
 
   // let's run our tests now.
   bool failed = false;
+  if (tests.size () == 0)
+    {
+      std::cerr << "Error:  no tests match the requested string" << std::endl;
+      return 1;
+    }
   for (std::list<TestCase *>::const_iterator i = tests.begin (); i != tests.end (); ++i)
     {
       TestCase *test = *i;
diff -Naur ns-3.21/src/core/model/test.h ns-3.22/src/core/model/test.h
--- ns-3.21/src/core/model/test.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/test.h	2015-02-05 15:46:23.000000000 -0800
@@ -29,12 +29,20 @@
 #include <stdint.h>
 
 #include "system-wall-clock-ms.h"
-#include "deprecated.h"
 
 /**
  * \ingroup core
  * \defgroup testing Testing
  * \brief Tools to define and execute unit tests.
+ *
+ * This module lists the normal Testing API.  Most of these
+ * macros forward to the implementation macros in testingimpl.
+ * You should generally use these macros only.
+ */
+/**
+ * \ingroup testing
+ * \defgroup testingimpl Testing Implementation
+ * \brief Internal implementation of the Testing system.
  */
 
 // 
@@ -50,7 +58,6 @@
 /**
  * \ingroup testing
  * \brief Check if we should assert on errors, and do so
- * \internal
  */
 #define ASSERT_ON_FAILURE                       \
   do {                                          \
@@ -63,7 +70,6 @@
 /**
  * \ingroup testing
  * \brief If we shouldn't continue on errors, return
- * \internal
  */
 #define CONTINUE_ON_FAILURE                                             \
   do {                                                                  \
@@ -76,7 +82,6 @@
 /**
  * \ingroup testing
  * \brief If we shouldn't continue on errors, return test status
- * \internal
  */
 #define CONTINUE_ON_FAILURE_RETURNS_BOOL                                \
   do {                                                                  \
@@ -93,10 +98,9 @@
 // ===========================================================================
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual and expected (limit) value are equal and report
  * and abort if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -149,10 +153,9 @@
   NS_TEST_ASSERT_MSG_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual and expected (limit) value are equal and report
  * and abort if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL_INTERNAL(actual, limit, msg, file, line) \
   do {                                                                  \
@@ -208,13 +211,12 @@
   NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual and expected (limit) value are equal and report
  * if not.
  * 
  * Required to avoid use of return statement which allows use in methods 
  * (esp. callbacks) returning void.
- * \internal
  */
 #define NS_TEST_EXPECT_MSG_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -271,10 +273,9 @@
 // ===========================================================================
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that actual and expected (limit) values are equal to plus
  * or minus some tolerance and report and abort if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_EQ_TOL_INTERNAL(actual, limit, tol, msg, file, line) \
   do {                                                                  \
@@ -356,10 +357,9 @@
   NS_TEST_ASSERT_MSG_EQ_TOL_INTERNAL (actual, limit, tol, msg, __FILE__, __LINE__)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that actual and expected (limit) values are equal to plus
  * or minus some tolerance and report and abort if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL_INTERNAL(actual, limit, tol, msg, file, line) \
   do {                                                                  \
@@ -444,13 +444,12 @@
   NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL_INTERNAL (actual, limit, tol, msg, __FILE__, __LINE__)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that actual and expected (limit) values are equal to plus or minus
  * some tolerance and report if not.
  * 
  * Required to avoid use of return statement which allows use in methods 
  * (esp. callbacks) returning void.
- * \internal
  */
 #define NS_TEST_EXPECT_MSG_EQ_TOL_INTERNAL(actual, limit, tol, msg, file, line) \
   do {                                                                  \
@@ -535,10 +534,9 @@
 // ===========================================================================
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual and expected (limit) value are not equal and 
  * report and abort if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_NE_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -590,10 +588,9 @@
   NS_TEST_ASSERT_MSG_NE_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual and expected (limit) value are not equal and 
  * report and abort if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_NE_RETURNS_BOOL_INTERNAL(actual, limit, msg, file, line) \
   do {                                                                  \
@@ -648,13 +645,12 @@
   NS_TEST_ASSERT_MSG_NE_RETURNS_BOOL_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual and expected (limit) value are not equal and 
  * report if not.
  * 
  * Required to avoid use of return statement which allows use in methods 
  * (callbacks) returning void.
- * \internal
  */
 #define NS_TEST_EXPECT_MSG_NE_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -709,10 +705,9 @@
 // ===========================================================================
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual value is less than a limit and report and abort
  * if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_LT_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -734,10 +729,9 @@
   } while (false)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual value is less than or equal to a limit and report
  * and abort if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_LT_OR_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -799,12 +793,11 @@
   NS_TEST_ASSERT_MSG_LT_OR_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual value is less than a limit and report if not.
  * 
  * Required to avoid use of return statement which allows use in methods 
  * (callbacks) returning void.
- * \internal
  */
 #define NS_TEST_EXPECT_MSG_LT_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -825,13 +818,12 @@
   } while (false)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual value is less than or equal to a limit and report
  * if not.
  *
  * Required to avoid use of return statement which allows use in methods
  * (callbacks) returning void.
- * \internal
  */
 #define NS_TEST_EXPECT_MSG_LT_OR_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -895,10 +887,9 @@
 // ===========================================================================
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual value is greater than a limit and report and abort
  * if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_GT_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -920,10 +911,9 @@
   } while (false)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual value is greater than or equal to a limit and
  * report and abort if not.
- * \internal
  */
 #define NS_TEST_ASSERT_MSG_GT_OR_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -985,12 +975,11 @@
   NS_TEST_ASSERT_MSG_GT_OR_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  * \brief Test that an actual value is greater than a limit and report if not.
  * 
  * Required to avoid use of return statement which allows use in methods 
  * (callbacks) returning void.
- * \internal
  */
 #define NS_TEST_EXPECT_MSG_GT_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -1011,13 +1000,12 @@
   } while (false)
 
 /**
- * \ingroup testing
- * \brief Test that an actual value is greater than a or equal to limit and
+ * \ingroup testingimpl
+ * \brief Test that an actual value is greater than or equal to limit and
  * report if not.
  *
  * Required to avoid use of return statement which allows use in methods
  * (callbacks) returning void.
- * \internal
  */
 #define NS_TEST_EXPECT_MSG_GT_OR_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -1079,6 +1067,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup testing
  * \brief Compare two double precision floating point numbers and declare them
  * equal if they are within some epsilon of each other.
  *
@@ -1140,16 +1129,6 @@
   TestCase (std::string name);
 
   /**
-   * \brief Add an individual child TestCase case to this TestCase.
-   *
-   * \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)  
-   */
-  void AddTestCase (TestCase *testCase) NS_DEPRECATED;
-
-  /**
    * \brief Add an individual child TestCase to this test suite.
    *
    * \param testCase Pointer to the TestCase object to be added.
@@ -1172,11 +1151,6 @@
   void SetDataDir (std::string directory);
 
   /**
-   * \deprecated
-   * This method is deprecated. IsStatusFailure replaces it.
-   */
-  bool GetErrorStatus (void) const NS_DEPRECATED;
-  /**
    * \return true if the tests have failed, false otherwise.
    */
   bool IsStatusFailure (void) const;
@@ -1198,6 +1172,13 @@
    */
   /**
    * Log the failure of this TestCase.
+   *
+   * \param cond The test condition.
+   * \param actual Actual value of the test.
+   * \param limit Expected value of the test.
+   * \param message Message indicating the type of failure.
+   * \param file The file where the test failed.
+   * \param line The line number in \p file where the test failed.
    */
   void ReportTestFailure (std::string cond, std::string actual, 
                       std::string limit, std::string message, 
@@ -1325,7 +1306,7 @@
 };
 
 /**
- * \ingroup testing
+ * \ingroup testingimpl
  *
  * \brief A runner to execute tests.
  */
diff -Naur ns-3.21/src/core/model/time.cc ns-3.22/src/core/model/time.cc
--- ns-3.21/src/core/model/time.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/time.cc	2015-02-05 15:46:23.000000000 -0800
@@ -21,21 +21,16 @@
  */
 #include "nstime.h"
 #include "abort.h"
-#include "global-value.h"
-#include "enum.h"
-#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_MASK ("Time", ns3::LOG_PREFIX_TIME);
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE_MASK ("Time", ns3::LOG_PREFIX_TIME);
+
 // The set of marked times
 // static
 Time::MarkedTimes * Time::g_markingTimes = 0;
diff -Naur ns-3.21/src/core/model/timer.cc ns-3.22/src/core/model/timer.cc
--- ns-3.21/src/core/model/timer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/timer.cc	2015-02-05 15:46:23.000000000 -0800
@@ -22,10 +22,16 @@
 #include "simulation-singleton.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Timer");
+/**
+ * \file
+ * \ingroup timer
+ * ns3::Timer implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Timer");
+
 Timer::Timer ()
   : m_flags (CHECK_ON_DESTROY),
     m_delay (FemtoSeconds (0)),
diff -Naur ns-3.21/src/core/model/timer.h ns-3.22/src/core/model/timer.h
--- ns-3.21/src/core/model/timer.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/timer.h	2015-02-05 15:46:23.000000000 -0800
@@ -25,28 +25,56 @@
 #include "event-id.h"
 #include "int-to-type.h"
 
-namespace ns3 {
+/**
+ * \file
+ * \ingroup timer
+ * ns3::Timer class declaration.
+ */
 
-class TimerImpl;
+namespace ns3 {
 
 /**
  * \ingroup core
+ * \defgroup timer Virtual Time Timer and Watchdog
+ *
+ * The Timer and Watchdog objects both facilitate scheduling functions
+ * to execute a specified virtual time in the future.
  *
- * \brief a simple Timer class
+ * A Watchdog timer cannot be paused or cancelled once it has been started,
+ * however it can be lengthened (delayed).  A Watchdog takes no action
+ * when it is destroyed.
+ *
+ * A Timer can be suspended, resumed, cancelled and queried for time left,
+ * but it can't be extended (except by suspending and resuming).
+ * In addition, it can be configured to take different actions when the
+ * Timer is destroyed.
+ */
+
+class TimerImpl;
+
+/**
+ * \ingroup timer
+ * \brief A simple Timer class
  *
  * A timer is used to hold together a delay, a function to invoke
  * when the delay expires, and a set of arguments to pass to the function
  * when the delay expires.
  *
+ * A Timer can be suspended, resumed, cancelled and queried for the
+ * time left, but it can't be extended (except by suspending and
+ * resuming.)
+ *
  * A timer can also be used to enforce a set of predefined event lifetime
  * management policies. These policies are specified at construction time
  * and cannot be changed after.
+ *
+ * \see Watchdog for a simpler interface for a watchdog timer.
  */
 class Timer
 {
 public:
   /**
-   * The policy to use to manager the internal timer when and
+   * The policy to use to manager the internal timer when an
    * instance of the Timer class is destroyed.
    */
   enum DestroyPolicy
@@ -67,14 +95,15 @@
      */
     CHECK_ON_DESTROY = (1 << 5)
   };
+  /** The possible states of the Timer. */
   enum State
   {
-    RUNNING,
-    EXPIRED,
-    SUSPENDED,
+    RUNNING,    /** Timer is currently running. */
+    EXPIRED,    /** Timer has already expired. */
+    SUSPENDED,  /** Timer is suspended. */
   };
   /**
-   * create a timer with a default event lifetime management policy:
+   * Create a timer with a default event lifetime management policy:
    *  - CHECK_ON_DESTROY
    */
   Timer ();
@@ -230,20 +259,42 @@
   void Resume (void);
 
 private:
-  enum
+  /** Internal bit marking the suspended state. */
+  enum InternalSuspended
   {
-    TIMER_SUSPENDED = (1 << 7)
+    TIMER_SUSPENDED = (1 << 7)  /** Timer suspended. */
   };
 
+  /**
+   * Bitfield for Timer State, DestroyPolicy and InternalSuspended.
+   *
+   * \internal 
+   * The DestroyPolicy, State and InternalSuspended state are stored
+   * in this single bitfield.  The State uses the low-order bits,
+   * so the other users of the bitfield have to be careful in defining
+   * their bits to avoid the State.
+   */
   int m_flags;
+  /** The delay configured for this Timer. */
   Time m_delay;
+  /** The future event scheduled to expire the timer. */
   EventId m_event;
+  /**
+   * The timer implementation, which contains the bound callback
+   * function and arguments.
+   */
   TimerImpl *m_impl;
+  /** The amount of time left on the Timer while it is suspended. */
   Time m_delayLeft;
 };
 
 } // namespace ns3
 
+
+/********************************************************************
+ *  Implementation of the templates declared above.
+ ********************************************************************/
+
 #include "timer-impl.h"
 
 namespace ns3 {
diff -Naur ns-3.21/src/core/model/timer-impl.h ns-3.22/src/core/model/timer-impl.h
--- ns-3.21/src/core/model/timer-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/timer-impl.h	2015-02-05 15:46:23.000000000 -0800
@@ -17,6 +17,7 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
+
 #ifndef TIMER_IMPL_H
 #define TIMER_IMPL_H
 
@@ -25,76 +26,228 @@
 #include "fatal-error.h"
 #include "int-to-type.h"
 
+/**
+ * \file
+ * \ingroup timer
+ * \ingroup timerimpl
+ * ns3::TimerImpl declaration and implementation.
+ */
+
 namespace ns3 {
 
+/**
+ * \ingroup timer
+ * The timer implementation underlying Timer and Watchdog.
+ */
 class TimerImpl
 {
 public:
+  /** Destructor. */
   virtual ~TimerImpl ()
   {
   }
 
+  /**
+   * Set the arguments to be used when invoking the expire function.
+   */
+  /**@{*/
+  /**
+   * \tparam T1 Type of the first argument.
+   * \param a1 The first argument
+   */
   template <typename T1>
   void SetArgs (T1 a1);
+  /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \param a1 the first argument
+   * \param a2 the second argument
+   */
   template <typename T1, typename T2>
   void SetArgs (T1 a1, T2 a2);
+  /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \tparam T3 Type of the third argument.
+   * \param a1 the first argument
+   * \param a2 the second argument
+   * \param a3 the third argument
+   */
   template <typename T1, typename T2, typename T3>
   void SetArgs (T1 a1, T2 a2, T3 a3);
+  /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \tparam T3 Type of the third argument.
+   * \tparam T4 Type of the fourth argument.
+   * \param a1 the first argument
+   * \param a2 the second argument
+   * \param a3 the third argument
+   * \param a4 the fourth argument
+   */
   template <typename T1, typename T2, typename T3,
             typename T4>
   void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4);
+  /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \tparam T3 Type of the third argument.
+   * \tparam T4 Type of the fourth argument.
+   * \tparam T5 Type of the fifth argument.
+   * \param a1 the first argument
+   * \param a2 the second argument
+   * \param a3 the third argument
+   * \param a4 the fourth argument
+   * \param a5 the fifth argument
+   */
   template <typename T1, typename T2, typename T3,
             typename T4, typename T5>
   void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
+  /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \tparam T3 Type of the third argument.
+   * \tparam T4 Type of the fourth argument.
+   * \tparam T5 Type of the fifth argument.
+   * \tparam T6 Type of the sixth argument.
+   * \param a1 the first argument
+   * \param a2 the second argument
+   * \param a3 the third argument
+   * \param a4 the fourth argument
+   * \param a5 the fifth argument
+   * \param a6 the sixth argument
+   */
   template <typename T1, typename T2, typename T3,
             typename T4, typename T5, typename T6>
   void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
+  /**@}*/
 
+  /**
+   * Schedule the callback for a future time.
+   *
+   * \param delay The amount of time until the timer expires.
+   * \returns The scheduled EventId.
+   */
   virtual EventId Schedule (const Time &delay) = 0;
+  /** Invoke the expire function. */
   virtual void Invoke (void) = 0;
 };
 
+} // namespace ns3
+
 
+/********************************************************************
+ *  Implementation of TimerImpl implementation functions.
+ ********************************************************************/
+
+namespace ns3 {
+
+/**
+ * \ingroup timer
+ * \defgroup timerimpl TimerImpl Implementation
+ * @{
+ */
+  
+/** TimerImpl specialization class for varying numbers of arguments. */
 template <typename T1>
 struct TimerImplOne : public TimerImpl
 {
+  /**
+   * Bind the arguments to be used when the callback function is invoked.
+   *
+   * \param a1 The first argument.
+   */
   virtual void SetArguments (T1 a1) = 0;
 };
+/** TimerImpl specialization class for varying numbers of arguments. */
 template <typename T1, typename T2>
 struct TimerImplTwo : public TimerImpl
 {
+  /**
+   * Bind the arguments to be used when the callback function is invoked.
+   *
+   * \param a1 The first argument.
+   * \param a2 The second argument.
+   */
   virtual void SetArguments (T1 a1,T2 a2) = 0;
 };
+/** TimerImpl specialization class for varying numbers of arguments. */
 template <typename T1, typename T2, typename T3>
 struct TimerImplThree : public TimerImpl
 {
+  /**
+   * Bind the arguments to be used when the callback function is invoked.
+   *
+   * \param a1 The first argument.
+   * \param a2 The second argument.
+   * \param a3 The third argument.
+   */
   virtual void SetArguments (T1 a1,T2 a2,T3 a3) = 0;
 };
+/** TimerImpl specialization class for varying numbers of arguments. */
 template <typename T1, typename T2, typename  T3, typename T4>
 struct TimerImplFour : public TimerImpl
 {
+  /**
+   * Bind the arguments to be used when the callback function is invoked.
+   *
+   * \param a1 The first argument.
+   * \param a2 The second argument.
+   * \param a3 The third argument.
+   * \param a4 The fourth argument.
+   */
   virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4) = 0;
 };
+/** TimerImpl specialization class for varying numbers of arguments. */
 template <typename T1, typename T2, typename  T3, typename T4, typename T5>
 struct TimerImplFive : public TimerImpl
 {
+  /**
+   * Bind the arguments to be used when the callback function is invoked.
+   *
+   * \param a1 The first argument.
+   * \param a2 The second argument.
+   * \param a3 The third argument.
+   * \param a4 The fourth argument.
+   * \param a5 The fifth argument.
+   */
   virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4, T5 a5) = 0;
 };
+/** TimerImpl specialization class for varying numbers of arguments. */
 template <typename T1, typename T2, typename  T3, typename T4, typename T5, typename T6>
 struct TimerImplSix : public TimerImpl
 {
+  /**
+   * Bind the arguments to be used when the callback function is invoked.
+   *
+   * \param a1 The first argument.
+   * \param a2 The second argument.
+   * \param a3 The third argument.
+   * \param a4 The fourth argument.
+   * \param a5 The fifth argument.
+   * \param a6 The sixth argument.
+   */
   virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4, T5 a5, T6 a6) = 0;
 };
 
 
-
+/** Type and reference traits for TimerImpl arguments. */
 template <typename T>
 struct TimerTraits
 {
+  /** Storage type for an argument. */
   typedef typename TypeTraits<typename TypeTraits<T>::ReferencedType>::NonConstType StoredType;
+  /** Parameter type for an argument. */
   typedef const StoredType &ParameterType;
 };
 
+/**
+ * Make a TimerImpl from a function pointer taking varying numbers of arguments.
+ *
+ * \tparam FN Function signature type of the callback function.
+ * \param fn The function pointer to invoke when the timer expires.
+ * \returns The TimerImpl.
+ */
 template <typename FN>
 TimerImpl *
 MakeTimerImpl (FN fn)
@@ -103,6 +256,10 @@
   return MakeTimerImpl (IntToType<TypeTraits<FN>::FunctionPointerTraits::nArgs> (), fn);
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking zero arguments.
+ * \copydetails MakeTimerImpl(FN)
+ */
 template <typename FN>
 TimerImpl *
 MakeTimerImpl (IntToType<0>, FN fn)
@@ -126,6 +283,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking one argument.
+ * \copydetails MakeTimerImpl(FN)
+ */
 template <typename FN>
 TimerImpl *
 MakeTimerImpl (IntToType<1>, FN fn)
@@ -158,6 +319,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking two arguments.
+ * \copydetails MakeTimerImpl(FN)
+ */
 template <typename FN>
 TimerImpl *
 MakeTimerImpl (IntToType<2>, FN fn)
@@ -195,6 +360,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking three arguments.
+ * \copydetails MakeTimerImpl(FN)
+ */
 template <typename FN>
 TimerImpl *
 MakeTimerImpl (IntToType<3>, FN fn)
@@ -237,6 +406,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking four arguments.
+ * \copydetails MakeTimerImpl(FN)
+ */
 template <typename FN>
 TimerImpl *
 MakeTimerImpl (IntToType<4>, FN fn)
@@ -284,6 +457,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking five arguments.
+ * \copydetails MakeTimerImpl(FN)
+ */
 template <typename FN>
 TimerImpl *
 MakeTimerImpl (IntToType<5>, FN fn)
@@ -336,6 +513,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking six arguments.
+ * \copydetails MakeTimerImpl(FN)
+ */
 template <typename FN>
 TimerImpl *
 MakeTimerImpl (IntToType<6>, FN fn)
@@ -394,19 +575,53 @@
 }
 
 
+/**
+ * Helper for the MakeTimerImpl functions which take a class method.
+ *
+ * This helper converts a pointer to a reference.
+ *
+ * This is the generic template declaration (with empty body).
+ *
+ * \tparam T The object type.
+ */
 template <typename T>
 struct TimerImplMemberTraits;
 
 
+/**
+ * Helper for the MakeTimerImpl functions which take a class method.
+ *
+ * This helper converts a pointer to a reference.
+ *
+ * This is the specialization for pointer to \c T.
+ *
+ * \tparam T The object type.
+ */
 template <typename T>
 struct TimerImplMemberTraits<T *>
 {
+  /**
+   * Convert a pointer type to a reference.
+   *
+   * \param p The pointer.
+   * \returns A reference to the object pointed to by \c p.
+   */
   static T &GetReference (T *p)
   {
     return *p;
   }
 };
 
+/**
+ * Make a TimerImpl from a class method pointer taking
+ * a varying number of arguments.
+ *
+ * \tparam MEM_PTR Class method function signature type.
+ * \tparam OBJ_PTR Class type.
+ * \param memPtr Class method to invoke when the timer expires.
+ * \param objPtr Object instance pointer.
+ * \returns The TimerImpl.
+ */
 template <typename MEM_PTR, typename OBJ_PTR>
 TimerImpl *
 MakeTimerImpl (MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -415,6 +630,10 @@
   return MakeTimerImpl (IntToType<TypeTraits<MEM_PTR>::PointerToMemberTraits::nArgs> (), memPtr, objPtr);
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking zero arguments.
+ * \copydetails MakeTimerImpl(MEM_PTR,OBJ_PTR)
+ */
 template <typename MEM_PTR, typename OBJ_PTR>
 TimerImpl *
 MakeTimerImpl (IntToType<0>, MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -440,6 +659,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking one argument.
+ * \copydetails MakeTimerImpl(MEM_PTR,OBJ_PTR)
+ */
 template <typename MEM_PTR, typename OBJ_PTR>
 TimerImpl *
 MakeTimerImpl (IntToType<1>, MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -474,6 +697,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking two arguments.
+ * \copydetails MakeTimerImpl(MEM_PTR,OBJ_PTR)
+ */
 template <typename MEM_PTR, typename OBJ_PTR>
 TimerImpl *
 MakeTimerImpl (IntToType<2>, MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -513,6 +740,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking three arguments.
+ * \copydetails MakeTimerImpl(MEM_PTR,OBJ_PTR)
+ */
 template <typename MEM_PTR, typename OBJ_PTR>
 TimerImpl *
 MakeTimerImpl (IntToType<3>, MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -557,6 +788,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking four arguments.
+ * \copydetails MakeTimerImpl(MEM_PTR,OBJ_PTR)
+ */
 template <typename MEM_PTR, typename OBJ_PTR>
 TimerImpl *
 MakeTimerImpl (IntToType<4>, MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -606,6 +841,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking five arguments.
+ * \copydetails MakeTimerImpl(MEM_PTR,OBJ_PTR)
+ */
 template <typename MEM_PTR, typename OBJ_PTR>
 TimerImpl *
 MakeTimerImpl (IntToType<5>, MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -660,6 +899,10 @@
   return function;
 }
 
+/**
+ * Make a TimerImpl from a function pointer taking six arguments.
+ * \copydetails MakeTimerImpl(MEM_PTR,OBJ_PTR)
+ */
 template <typename MEM_PTR, typename OBJ_PTR>
 TimerImpl *
 MakeTimerImpl (IntToType<6>, MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -719,7 +962,13 @@
   return function;
 }
 
+/**@}*/  // \ingroup timer
 
+  
+/********************************************************************
+ *  Implementation of TimerImpl itself.
+ ********************************************************************/
+  
 template <typename T1>
 void
 TimerImpl::SetArgs (T1 a1)
diff -Naur ns-3.21/src/core/model/traced-callback.h ns-3.22/src/core/model/traced-callback.h
--- ns-3.21/src/core/model/traced-callback.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/traced-callback.h	2015-02-05 15:46:23.000000000 -0800
@@ -24,17 +24,36 @@
 #include <list>
 #include "callback.h"
 
+/**
+ * \file
+ * \ingroup tracing
+ * ns3::TracedCallback declaration and template implementation.
+ */
+
 namespace ns3 {
 
 /**
- * \brief forward calls to a chain of Callback
  * \ingroup tracing
+ * \brief Forward calls to a chain of Callback
+ *
+ * An TracedCallback has almost exactly the same API as a normal
+ * Callback but instead of forwarding calls to a single function
+ * (as a Callback normally does), it forwards calls to a chain
+ * of Callback.  Connect adds a Callback at the end of the chain
+ * of callbacks.  Disconnect removes a Callback from the chain of callbacks.
  *
- * 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),
- * it forwards calls to a chain of ns3::Callback. TracedCallback::Connect adds a ns3::Callback
- * at the end of the chain of callbacks. TracedCallback::Disconnect removes a ns3::Callback from
- * the chain of callbacks.
+ * This is a functor: the chain of Callbacks is invoked by
+ * calling one of the \c operator() forms with the appropriate
+ * number of arguments.
+ *
+ * \tparam T1 Type of the first argument to the functor.
+ * \tparam T2 Type of the second argument to the functor.
+ * \tparam T3 Type of the third argument to the functor.
+ * \tparam T4 Type of the fourth argument to the functor.
+ * \tparam T5 Type of the fifth argument to the functor.
+ * \tparam T6 Type of the sixth argument to the functor.
+ * \tparam T7 Type of the seventh argument to the functor.
+ * \tparam T8 Type of the eighth argument to the functor.
  */
 template<typename T1 = empty, typename T2 = empty, 
          typename T3 = empty, typename T4 = empty,
@@ -43,59 +62,189 @@
 class TracedCallback 
 {
 public:
+  /** Constructor. */
   TracedCallback ();
   /**
-   * \param callback callback to add to chain of callbacks
+   * Append a Callback to the chain (without a context).
    *
-   * Append the input callback to the end of the internal list 
-   * of ns3::Callback.
+   * \param callback Callback to add to chain.
    */
   void ConnectWithoutContext (const CallbackBase & callback);
   /**
-   * \param callback callback to add to chain of callbacks
-   * \param path the path to send back to the user callback.
+   * Append a Callback to the chain with a context.
+   *
+   * The context string will be provided as the first argument
+   * to the Callback.
    *
-   * Append the input callback to the end of the internal list 
-   * of ns3::Callback. This method also will make sure that the
-   * input path specified by the user will be give back to the
-   * user's callback as its first argument. 
+   * \param callback Callback to add to chain.
+   * \param path Context string to provide when invoking the Callback.
    */
   void Connect (const CallbackBase & callback, std::string path);
   /**
-   * \param callback callback to remove from the chain of callbacks.
+   * Remove from the chain a Callback which was connected without a context.
    *
-   * Remove the input callback from the internal list 
-   * of ns3::Callback. This method is really the symmetric
-   * of the TracedCallback::ConnectWithoutContext method.
+   * \param callback Callback to remove from the chain.
    */
   void DisconnectWithoutContext (const CallbackBase & callback);
   /**
-   * \param callback callback to remove from the chain of callbacks.
-   * \param path the path which is sent back to the user callback.
+   * Remove from the chain a Callback which was connected with a context.
    *
-   * Remove the input callback which has a matching path as first argument 
-   * from the internal list of ns3::Callback. This method is really the symmetric
-   * of the TracedCallback::Connect method.
+   * \param callback Callback to remove from the chain.
+   * \param path Context path which was used to connect the Callback.
    */
   void Disconnect (const CallbackBase & callback, std::string path);
+  /**
+   * \name Functors taking various numbers of arguments.
+   *
+   * The version selected is determined by the number of arguments
+   * at the point where the Callback is invoked in the class
+   * which fires the Callback.
+   */
+  /**@{*/
+  /** Functor which invokes the chain of Callbacks. */
   void operator() (void) const;
+  /**
+   * \copybrief operator()()
+   * \tparam T1 Type of the first argument to the functor.
+   * \param a1 The first argument to the functor.
+   */
   void operator() (T1 a1) const;
+  /**
+   * \copybrief operator()()
+   * \tparam T1 Type of the first argument to the functor.
+   * \tparam T2 Type of the second argument to the functor.
+   * \param a1 The first argument to the functor.
+   * \param a2 The second argument to the functor.
+   */
   void operator() (T1 a1, T2 a2) const;
+  /**
+   * \copybrief operator()()
+   * \tparam T1 Type of the first argument to the functor.
+   * \tparam T2 Type of the second argument to the functor.
+   * \tparam T3 Type of the third argument to the functor.
+   * \param a1 The first argument to the functor.
+   * \param a2 The second argument to the functor.
+   * \param a3 The third argument to the functor.
+   */
   void operator() (T1 a1, T2 a2, T3 a3) const;
+  /**
+   * \copybrief operator()()
+   * \tparam T1 Type of the first argument to the functor.
+   * \tparam T2 Type of the second argument to the functor.
+   * \tparam T3 Type of the third argument to the functor.
+   * \tparam T4 Type of the fourth argument to the functor.
+   * \param a1 The first argument to the functor.
+   * \param a2 The second argument to the functor.
+   * \param a3 The third argument to the functor.
+   * \param a4 The fourth argument to the functor.
+   */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4) const;
+  /**
+   * \copybrief operator()()
+   * \tparam T1 Type of the first argument to the functor.
+   * \tparam T2 Type of the second argument to the functor.
+   * \tparam T3 Type of the third argument to the functor.
+   * \tparam T4 Type of the fourth argument to the functor.
+   * \tparam T5 Type of the fifth argument to the functor.
+   * \param a1 The first argument to the functor.
+   * \param a2 The second argument to the functor.
+   * \param a3 The third argument to the functor.
+   * \param a4 The fourth argument to the functor.
+   * \param a5 The fifth argument to the functor.
+   */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const;
+  /**
+   * \copybrief operator()()
+   * \tparam T1 Type of the first argument to the functor.
+   * \tparam T2 Type of the second argument to the functor.
+   * \tparam T3 Type of the third argument to the functor.
+   * \tparam T4 Type of the fourth argument to the functor.
+   * \tparam T5 Type of the fifth argument to the functor.
+   * \tparam T6 Type of the sixth argument to the functor.
+   * \param a1 The first argument to the functor.
+   * \param a2 The second argument to the functor.
+   * \param a3 The third argument to the functor.
+   * \param a4 The fourth argument to the functor.
+   * \param a5 The fifth argument to the functor.
+   * \param a6 The sixth argument to the functor.
+   */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const;
+  /**
+   * \copybrief operator()()
+   * \tparam T1 Type of the first argument to the functor.
+   * \tparam T2 Type of the second argument to the functor.
+   * \tparam T3 Type of the third argument to the functor.
+   * \tparam T4 Type of the fourth argument to the functor.
+   * \tparam T5 Type of the fifth argument to the functor.
+   * \tparam T6 Type of the sixth argument to the functor.
+   * \tparam T7 Type of the seventh argument to the functor.
+   * \param a1 The first argument to the functor.
+   * \param a2 The second argument to the functor.
+   * \param a3 The third argument to the functor.
+   * \param a4 The fourth argument to the functor.
+   * \param a5 The fifth argument to the functor.
+   * \param a6 The sixth argument to the functor.
+   * \param a7 The seventh argument to the functor.
+   */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const;
+  /**
+   * \copybrief operator()()
+   * \tparam T1 Type of the first argument to the functor.
+   * \tparam T2 Type of the second argument to the functor.
+   * \tparam T3 Type of the third argument to the functor.
+   * \tparam T4 Type of the fourth argument to the functor.
+   * \tparam T5 Type of the fifth argument to the functor.
+   * \tparam T6 Type of the sixth argument to the functor.
+   * \tparam T7 Type of the seventh argument to the functor.
+   * \tparam T8 Type of the eighth argument to the functor.
+   * \param a1 The first argument to the functor.
+   * \param a2 The second argument to the functor.
+   * \param a3 The third argument to the functor.
+   * \param a4 The fourth argument to the functor.
+   * \param a5 The fifth argument to the functor.
+   * \param a6 The sixth argument to the functor.
+   * \param a7 The seventh argument to the functor.
+   * \param a8 The eighth argument to the functor.
+   */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const;
+  /**@}*/
 
+  /**
+   *  TracedCallback signature for POD.
+   *
+   * \param [in] value Value of the traced variable.
+   * @{
+   */
+  // Uint32Callback appears to be the only one used at the moment.
+  // Feel free to add typedef's for any other POD you need.
+  typedef void (* Uint32Callback)(const uint32_t value);
+  /**@}*/
+
+  
 private:
+  /**
+   * Container type for holding the chain of Callbacks.
+   *
+   * \tparam T1 Type of the first argument to the functor.
+   * \tparam T2 Type of the second argument to the functor.
+   * \tparam T3 Type of the third argument to the functor.
+   * \tparam T4 Type of the fourth argument to the functor.
+   * \tparam T5 Type of the fifth argument to the functor.
+   * \tparam T6 Type of the sixth argument to the functor.
+   * \tparam T7 Type of the seventh argument to the functor.
+   * \tparam T8 Type of the eighth argument to the functor.
+   */
   typedef std::list<Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> > CallbackList;
+  /** The chain of Callbacks. */
   CallbackList m_callbackList;
 };
 
 } // namespace ns3
 
-// implementation below.
+
+/********************************************************************
+ *  Implementation of the templates declared above.
+ ********************************************************************/
 
 namespace ns3 {
 
diff -Naur ns-3.21/src/core/model/traced-value.h ns-3.22/src/core/model/traced-value.h
--- ns-3.21/src/core/model/traced-value.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/traced-value.h	2015-02-05 15:46:23.000000000 -0800
@@ -27,6 +27,24 @@
 #include "double.h"
 #include "enum.h"
 
+/**
+ * \file
+ * \ingroup tracing
+ * ns3::TracedValue declaration and template implementation.
+ */
+
+
+/**
+ * Logging macro for TracedValue.
+ *
+ * No NS_LOG_... here.  When logging is needed use something like
+ * \code
+ *   #define TRACED_VALUE_DEBUG(x)                  \
+ *     std::cout << __FILE__ << ":" << __FUNCTION__    \
+ *               << "(" << __LINE__ << ") "           \
+ *               << x << std::endl
+ * \endcode
+*/
 #define TRACED_VALUE_DEBUG(x)
 
 namespace ns3 {
@@ -36,59 +54,124 @@
  * \defgroup tracing Tracing
  * \brief Publish/subscribe tools to collect and report changes to any
  *        values used by the various model components.
+ *
+ * Additional callback function signatures defined elsewhere:
+ *   - Time::TracedValueCallback
+ *   - ns3::SequenceNumber32TracedValueCallback
  */
 
 /**
  * \ingroup tracing
  *
- * \brief trace classes with value semantics
+ * \brief Trace classes with value semantics
  *
  * If you want to trace the change of value of a class or
  * primitive type which have value semantics (they _must_
  * support operator !=), you can wrap them in an instance of
- * this template: this instance will behave just like
+ * this template.  This instance will behave just like
  * the original class (if it did not export any special method),
  * and will define Connect/DisconnectWithoutContext methods to work
- * with ns3::MakeTraceSourceAccessor.
+ * with MakeTraceSourceAccessor.
+ *
+ * \tparam T The type of the underlying value being traced.
  */
 template <typename T>
 class TracedValue
 {
 public:
+  /** Default constructor. */
   TracedValue ()
     : m_v () {}
+  /**
+   * Copy constructor.
+   * \param o The value to copy.
+   */
   TracedValue (const TracedValue &o)
     : m_v (o.m_v) {}
+  /**
+   * Construct from an explicit variable.
+   * \param v The variable to trace.
+   */
   TracedValue (const T &v)
     : m_v (v) {}
+  /**
+   * Cast to the underlying type.
+   * \returns The underlying value.
+   */
   operator T () const {
     return m_v;
   }
+  /**
+   * Assignment.
+   * \param o The value to assign to this instance.
+   * \return This TracedValue.
+   */
   TracedValue &operator = (const TracedValue &o) {
     TRACED_VALUE_DEBUG ("x=");
     Set (o.m_v);
     return *this;
   }
+  /**
+   * Copy from a TracedValue of a compatable type.
+   * \tparam U The underlying type of the other TracedValue.
+   * \param other The other TracedValuet to copy.
+   */
   template <typename U>
   TracedValue (const TracedValue<U> &other)
     : m_v (other.m_v)
   {}
+  /**
+   * Copy from a variable type compatible with this underlying type.
+   * \tparam U Type of the other variable.
+   * \param other The other variable to copy.
+   */
   template <typename U>
   TracedValue (const U &other)
     : m_v ((T)other)
   {}
+  /**
+   * Connect a Callback (without context.)
+   *
+   * \param cb The callback to connect.
+   */
   void ConnectWithoutContext (const CallbackBase &cb) {
     m_cb.ConnectWithoutContext (cb);
   }
+  /**
+   * Connect a Callback with a context string.
+   *
+   * The context string will be provided as the first argument to the
+   * Callback function.
+   *
+   * \param cb The Callback to connect to the target trace source.
+   * \param path The context to bind to the user callback.
+   */
   void Connect (const CallbackBase &cb, std::string path) {
     m_cb.Connect (cb, path);
   }
+  /**
+   * Disconnect a Callback which was connected without context.
+   *
+   * \param cb The Callback to disconnect.
+   */
   void DisconnectWithoutContext (const CallbackBase &cb) {
     m_cb.DisconnectWithoutContext (cb);
   }
+  /**
+   * Disconnect a Callback which was connected with context.
+   *
+   * \param cb The Callback to disconnect.
+   * \param path The context to bind to the user callback.
+   */
   void Disconnect (const CallbackBase &cb, std::string path) {
     m_cb.Disconnect (cb, path);
   }
+  /**
+   * Set the value of the underlying variable.
+   *
+   * If the new value differs from the old, the Callback will be invoked.
+   * \param v The new value.
+   */
   void Set (const T &v) {
     if (m_v != v)
       {
@@ -96,9 +179,20 @@
         m_v = v;
       }
   }
+  /**
+   * Get the underlying value.
+   * \returns The value.
+   */
   T Get (void) const {
     return m_v;
   }
+  /**
+   * Pre/post- increment/decrement operator.
+   *
+   * This invokes the Callback.
+   * \returns This TracedValue.
+   */
+  /**@{*/
   TracedValue &operator++ () {
     TRACED_VALUE_DEBUG ("++x");
     T tmp = Get ();
@@ -129,29 +223,79 @@
     Set (tmp);
     return old;
   }
+  /**@}*/
+
+  /**
+   *  TracedValue Callback signature for POD.
+   *
+   * \param [in] oldValue original value of the traced variable
+   * \param [in] newValue new value of the traced variable
+   * @{
+   */
+  typedef void (* BoolCallback)  (const bool     oldValue, const bool     newValue);
+  typedef void (* Int8Callback)  (const int8_t   oldValue, const int8_t   newValue);
+  typedef void (* Uint8Callback) (const uint8_t  oldValue, const uint8_t  newValue);
+  typedef void (* Int16Callback) (const int16_t  oldValue, const int16_t  newValue);
+  typedef void (* Uint16Callback)(const uint16_t oldValue, const uint16_t newValue);
+  typedef void (* Int32Callback) (const int32_t  oldValue, const int32_t  newValue);
+  typedef void (* Uint32Callback)(const uint32_t oldValue, const uint32_t newValue);
+  typedef void (* DoubleCallback)(const double   oldValue, const double   newValue);
+  /**@}*/
+
 private:
+  /** The underlying value. */
   T m_v;
+  /** The connected Callback. */
   TracedCallback<T,T> m_cb;
 };
 
+  
+/********************************************************************
+   Operator implementations for TracedValue
+ ********************************************************************/
+
+/**
+ * \ingroup tracing
+ */
+/**@{*/
+/**
+ * Output streamer for TracedValue.
+ *
+ * The underlying value will be written to the stream.
+ *
+ * \tparam T The underlying type of the TracedValue.
+ * \param os The output stream.
+ * \param rhs The TracedValue to stream.
+ * \returns The stream.
+ */
 template <typename T>
 std::ostream& operator << (std::ostream& os, const TracedValue<T>& rhs)
 {
   return os<<rhs.Get ();
 }
 
+/**
+ * Boolean operator for TracedValue.
+ * \tparam T The underlying type held by the left-hand argument.
+ * \tparam U The underlying type held by the right-hand argument.
+ * \param lhs The left-hand argument.
+ * \param rhs The right-hand argument.
+ * \returns The boolean result of comparing the underlying values.
+ */
 template <typename T, typename U>
 bool operator == (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
 {
   TRACED_VALUE_DEBUG ("x==x");
   return lhs.Get () == rhs.Get ();
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator == (const TracedValue<T> &lhs, const U &rhs)
 {
   TRACED_VALUE_DEBUG ("x==");
   return lhs.Get () == rhs;
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator == (const U &lhs, const TracedValue<T> &rhs)
 {
@@ -159,18 +303,21 @@
   return lhs == rhs.Get ();
 }
 
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator != (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
 {
   TRACED_VALUE_DEBUG ("x!=x");
   return lhs.Get () != rhs.Get ();
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator != (const TracedValue<T> &lhs, const U &rhs)
 {
   TRACED_VALUE_DEBUG ("x!=");
   return lhs.Get () != rhs;
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator != (const U &lhs, const TracedValue<T> &rhs)
 {
@@ -178,36 +325,42 @@
   return lhs != rhs.Get ();
 }
 
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator <= (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
 {
   TRACED_VALUE_DEBUG ("x<=x");
   return lhs.Get () <= rhs.Get ();
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator <= (const TracedValue<T> &lhs, const U &rhs)
 {
   TRACED_VALUE_DEBUG ("x<=");
   return lhs.Get () <= rhs;
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator <= (const U &lhs, const TracedValue<T> &rhs)
 {
   TRACED_VALUE_DEBUG ("<=x");
   return lhs <= rhs.Get ();
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator >= (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
 {
   TRACED_VALUE_DEBUG ("x>=x");
   return lhs.Get () >= rhs.Get ();
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator >= (const TracedValue<T> &lhs, const U &rhs)
 {
   TRACED_VALUE_DEBUG ("x>=");
   return lhs.Get () >= rhs;
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator >= (const U &lhs, const TracedValue<T> &rhs)
 {
@@ -215,304 +368,390 @@
   return lhs >= rhs.Get ();
 }
 
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator < (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
 {
   TRACED_VALUE_DEBUG ("x<x");
   return lhs.Get () < rhs.Get ();
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator < (const TracedValue<T> &lhs, const U &rhs)
 {
   TRACED_VALUE_DEBUG ("x<");
   return lhs.Get () < rhs;
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator < (const U &lhs, const TracedValue<T> &rhs)
 {
   TRACED_VALUE_DEBUG ("<x");
   return lhs < rhs.Get ();
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator > (const TracedValue<T> &lhs, const TracedValue<U> &rhs)
 {
   TRACED_VALUE_DEBUG ("x>x");
   return lhs.Get () > rhs.Get ();
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator > (const TracedValue<T> &lhs, const U &rhs)
 {
   TRACED_VALUE_DEBUG ("x>");
   return lhs.Get () > rhs;
 }
+/** \copydoc operator==(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 bool operator > (const U &lhs, const TracedValue<T> &rhs)
 {
   TRACED_VALUE_DEBUG (">x");
   return lhs > rhs.Get ();
 }
-template <typename T, typename U>
-TracedValue<T> &operator += (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x+=");
-  T tmp = lhs.Get ();
-  tmp += rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator -= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x-=");
-  T tmp = lhs.Get ();
-  tmp -= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator *= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x*=");
-  T tmp = lhs.Get ();
-  tmp *= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator /= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x/=");
-  T tmp = lhs.Get ();
-  tmp /= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator %= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x%=");
-  T tmp = lhs.Get ();
-  tmp %= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator <<= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x<<=");
-  T tmp = lhs.Get ();
-  tmp <<= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator >>= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x>>=");
-  T tmp = lhs.Get ();
-  tmp >>= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator &= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x&=");
-  T tmp = lhs.Get ();
-  tmp &= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator |= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x|=");
-  T tmp = lhs.Get ();
-  tmp |= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
-template <typename T, typename U>
-TracedValue<T> &operator ^= (TracedValue<T> &lhs, const U &rhs) {
-  TRACED_VALUE_DEBUG ("x^=");
-  T tmp = lhs.Get ();
-  tmp ^= rhs;
-  lhs.Set (tmp);
-  return lhs;
-}
+
+  
+/**
+ * Infix arithmetic operator for TracedValue.
+ *
+ * This returns the arithmetic result in a new TracedValue,
+ * which has no Callback connected.
+ *
+ * \tparam T The underlying type held by the left-hand argument.
+ * \tparam U The underlying type held by the right-hand argument.
+ * \param lhs The left-hand argument.
+ * \param rhs The right-hand argument.
+ * \returns The result of doing the operator on
+ *     the underlying values.
+ */
 template <typename T, typename U>
 TracedValue<T> operator + (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x+x");
   return TracedValue<T> (lhs.Get () + rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator + (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x+");
   return TracedValue<T> (lhs.Get () + rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator + (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("+x");
   return TracedValue<T> (lhs + rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator - (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x-x");
   return TracedValue<T> (lhs.Get () - rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator - (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x-");
   return TracedValue<T> (lhs.Get () - rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator - (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("-x");
   return TracedValue<T> (lhs - rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator * (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x*x");
   return TracedValue<T> (lhs.Get () * rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator * (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x*");
   return TracedValue<T> (lhs.Get () * rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator * (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("*x");
   return TracedValue<T> (lhs * rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator / (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x/x");
   return TracedValue<T> (lhs.Get () / rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator / (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x/");
   return TracedValue<T> (lhs.Get () / rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator / (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("/x");
   return TracedValue<T> (lhs / rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator % (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x%x");
   return TracedValue<T> (lhs.Get () % rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator % (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x%");
   return TracedValue<T> (lhs.Get () % rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator % (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("%x");
   return TracedValue<T> (lhs % rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator ^ (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x^x");
   return TracedValue<T> (lhs.Get () ^ rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator ^ (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x^");
   return TracedValue<T> (lhs.Get () ^ rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator ^ (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("^x");
   return TracedValue<T> (lhs ^ rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator | (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x|x");
   return TracedValue<T> (lhs.Get () | rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator | (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x|");
   return TracedValue<T> (lhs.Get () | rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator | (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("|x");
   return TracedValue<T> (lhs | rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator & (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x&x");
   return TracedValue<T> (lhs.Get () & rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator & (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x&");
   return TracedValue<T> (lhs.Get () & rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator & (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("&x");
   return TracedValue<T> (lhs & rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator << (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x<<x");
   return TracedValue<T> (lhs.Get () << rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator << (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x<<");
   return TracedValue<T> (lhs.Get () << rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator << (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG ("<<x");
   return TracedValue<T> (lhs << rhs.Get ());
 }
 
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator >> (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
   TRACED_VALUE_DEBUG ("x>>x");
   return TracedValue<T> (lhs.Get () >> rhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator >> (const TracedValue<T> &lhs, const U &rhs) {
   TRACED_VALUE_DEBUG ("x>>");
   return TracedValue<T> (lhs.Get () >> rhs);
 }
+/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
 template <typename T, typename U>
 TracedValue<T> operator >> (const U &lhs, const TracedValue<T> &rhs) {
   TRACED_VALUE_DEBUG (">>x");
   return TracedValue<T> (lhs >> rhs.Get ());
 }
 
+/**
+ * Operator assignment for TracedValue.
+ *
+ * The result of the arithmetic operation on the underlying values
+ * is assigned to the \c lhs TracedValue.  If the new value 
+ * is different, the Callback will be invoked.
+ *
+ * \tparam T The underlying type held by the left-hand argument.
+ * \tparam U The underlying type held by the right-hand argument.
+ * \param lhs The left-hand argument.
+ * \param rhs The right-hand argument.
+ * \returns The result of doing the operator on
+ *     the underlying values.
+ */
+template <typename T, typename U>
+TracedValue<T> &operator += (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x+=");
+  T tmp = lhs.Get ();
+  tmp += rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator -= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x-=");
+  T tmp = lhs.Get ();
+  tmp -= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator *= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x*=");
+  T tmp = lhs.Get ();
+  tmp *= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator /= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x/=");
+  T tmp = lhs.Get ();
+  tmp /= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator %= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x%=");
+  T tmp = lhs.Get ();
+  tmp %= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator <<= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x<<=");
+  T tmp = lhs.Get ();
+  tmp <<= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator >>= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x>>=");
+  T tmp = lhs.Get ();
+  tmp >>= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator &= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x&=");
+  T tmp = lhs.Get ();
+  tmp &= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator |= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x|=");
+  T tmp = lhs.Get ();
+  tmp |= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+/** \copydoc operator+=(TracedValue<T>&lhs,const U&rhs) */
+template <typename T, typename U>
+TracedValue<T> &operator ^= (TracedValue<T> &lhs, const U &rhs) {
+  TRACED_VALUE_DEBUG ("x^=");
+  T tmp = lhs.Get ();
+  tmp ^= rhs;
+  lhs.Set (tmp);
+  return lhs;
+}
+  
 
+/**
+ * Unary arithmetic operator for TracedValue.
+ *
+ * \tparam T The underlying type held by the TracedValue.
+ * \param lhs The TracedValue.
+ * \returns The result of doing the operator on
+ *     the underlying values.
+ */
 template <typename T>
 TracedValue<T> operator + (const TracedValue<T> &lhs) {
   TRACED_VALUE_DEBUG ("(+x)");
   return TracedValue<T> (+lhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs) */
 template <typename T>
 TracedValue<T> operator - (const TracedValue<T> &lhs) {
   TRACED_VALUE_DEBUG ("(-x)");
   return TracedValue<T> (-lhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs) */
 template <typename T>
 TracedValue<T> operator ~ (const TracedValue<T> &lhs) {
   TRACED_VALUE_DEBUG ("(~x)");
   return TracedValue<T> (~lhs.Get ());
 }
+/** \copydoc operator+(const TracedValue<T>&lhs) */
 template <typename T>
 TracedValue<T> operator ! (const TracedValue<T> &lhs) {
   TRACED_VALUE_DEBUG ("(!x)");
   return TracedValue<T> (!lhs.Get ());
 }
 
+/**@}*/  // \ingroup tracing
 
 } // namespace ns3
 
diff -Naur ns-3.21/src/core/model/trace-source-accessor.cc ns-3.22/src/core/model/trace-source-accessor.cc
--- ns-3.21/src/core/model/trace-source-accessor.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/trace-source-accessor.cc	2015-02-05 15:46:23.000000000 -0800
@@ -20,10 +20,16 @@
 #include "trace-source-accessor.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("TraceSourceAccessor");
+/**
+ * \file
+ * \ingroup tracing
+ * ns3::TraceSourceAccessor implementation (constructor and destructor).
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TraceSourceAccessor");
+
 TraceSourceAccessor::TraceSourceAccessor ()
 {
 }
diff -Naur ns-3.21/src/core/model/trace-source-accessor.h ns-3.22/src/core/model/trace-source-accessor.h
--- ns-3.21/src/core/model/trace-source-accessor.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/trace-source-accessor.h	2015-02-05 15:46:23.000000000 -0800
@@ -25,6 +25,12 @@
 #include "ptr.h"
 #include "simple-ref-count.h"
 
+/**
+ * \file
+ * \ingroup tracing
+ * ns3::TraceSourceAccessor and ns3::MakeTraceSourceAccessor declarations.
+ */
+
 namespace ns3 {
 
 class ObjectBase;
@@ -32,7 +38,7 @@
 /**
  * \ingroup tracing
  *
- * \brief control access to objects' trace sources
+ * \brief Control access to objects' trace sources.
  *
  * This class abstracts the kind of trace source to which we want to connect
  * and provides services to Connect and Disconnect a sink to a trace source.
@@ -40,49 +46,93 @@
 class TraceSourceAccessor : public SimpleRefCount<TraceSourceAccessor>
 {
 public:
+  /** Constructor. */
   TraceSourceAccessor ();
+  /** Destructor. */
   virtual ~TraceSourceAccessor ();
 
   /**
-   * \param obj the object instance which contains the target trace source.
-   * \param cb the callback to connect to the target trace source.
+   * Connect a Callback to a TraceSource (without context.)
+   *
+   * \param obj The object instance which contains the target trace source.
+   * \param cb The callback to connect to the target trace source.
+   * \return \c true unless the connection could not be made, typically because
+   *         the \c obj couldn't be cast to the correct type.
    */
   virtual bool ConnectWithoutContext (ObjectBase *obj, const CallbackBase &cb) const = 0;
   /**
-   * \param obj the object instance which contains the target trace source.
-   * \param context the context to bind to the user callback.
-   * \param cb the callback to connect to the target trace source.
+   * Connect a Callback to a TraceSource with a context string.
+   *
+   * The context string will be provided as the first argument to the
+   * Callback function.
+   *
+   * \param obj The object instance which contains the target trace source.
+   * \param context The context to bind to the user callback.
+   * \param cb The callback to connect to the target trace source.
+   * \return \c true unless the connection could not be made, typically because
+   *         the \c obj couldn't be cast to the correct type.
    */
   virtual bool Connect (ObjectBase *obj, std::string context, const CallbackBase &cb) const = 0;
   /**
-   * \param obj the object instance which contains the target trace source.
-   * \param cb the callback to disconnect from the target trace source.
+   * Disconnect a Callback from a TraceSource (without context).
+   *
+   * \param obj The object instance which contains the target trace source.
+   * \param cb The callback to disconnect from the target trace source.
+   * \return \c true unless the connection could not be made, typically because
+   *         the \c obj couldn't be cast to the correct type.
    */
   virtual bool DisconnectWithoutContext (ObjectBase *obj, const CallbackBase &cb) const = 0;
   /**
+   * Disconnect a Callback from a TraceSource with a context string.
+   *
+   * The context string will be provided as the first argument to the
+   * Callback function.
+   *
    * \param obj the object instance which contains the target trace source.
    * \param context the context which was bound to the user callback.
    * \param cb the callback to disconnect from the target trace source.
+   * \return \c true unless the connection could not be made, typically because
+   *         the \c obj couldn't be cast to the correct type.
    */
   virtual bool Disconnect (ObjectBase *obj, std::string context, const CallbackBase &cb) const = 0;
 };
 
 /**
- * \param a the trace source
+ * \ingroup tracing
  *
  * Create a TraceSourceAccessor which will control access to the underlying
- * trace source. This helper template method assumes that the underlying
+ * trace source.
+ *
+ * This helper template method assumes that the underlying
  * type implements a statically-polymorphic set of Connect and Disconnect
  * methods and creates a dynamic-polymorphic class to wrap the underlying
- * static-polymorphic class.
+ * static-polymorphic class.  This functionality is typically provided
+ * by wrapping an object data member in a TracedCallback.
+ *
+ * \param a the trace source
+ * \returns The TraceSourceAccessor
  */
 template <typename T>
 Ptr<const TraceSourceAccessor> MakeTraceSourceAccessor (T a);
 
 } // namespace ns3
 
+
+/********************************************************************
+ *  Implementation of the templates declared above.
+ ********************************************************************/
+
 namespace ns3 {
 
+/**
+ * \ingroup tracing
+ * MakeTraceSourceAccessor() implementation.
+ *
+ * \tparam T Class type of the TracedCallback
+ * \tparam SOURCE Type of the underlying value.
+ * \param a The underlying data value.
+ * \returns The TraceSourceAccessor
+ */
 template <typename T, typename SOURCE>
 Ptr<const TraceSourceAccessor> 
 DoMakeTraceSourceAccessor (SOURCE T::*a)
diff -Naur ns-3.21/src/core/model/type-id.cc ns-3.22/src/core/model/type-id.cc
--- ns-3.21/src/core/model/type-id.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/type-id.cc	2015-02-05 15:46:23.000000000 -0800
@@ -74,6 +74,7 @@
   uint16_t AllocateUid (std::string name);
   void SetParent (uint16_t uid, uint16_t parent);
   void SetGroupName (uint16_t uid, std::string groupName);
+  void SetSize (uint16_t uid, std::size_t size);
   void AddConstructor (uint16_t uid, Callback<ObjectBase *> callback);
   void HideFromDocumentation (uint16_t uid);
   uint16_t GetUid (std::string name) const;
@@ -82,6 +83,7 @@
   TypeId::hash_t GetHash (uint16_t uid) const;
   uint16_t GetParent (uint16_t uid) const;
   std::string GetGroupName (uint16_t uid) const;
+  std::size_t GetSize (uint16_t uid) const;
   Callback<ObjectBase *> GetConstructor (uint16_t uid) const;
   bool HasConstructor (uint16_t uid) const;
   uint32_t GetRegisteredN (void) const;
@@ -101,7 +103,8 @@
   void AddTraceSource (uint16_t uid,
                        std::string name, 
                        std::string help,
-                       Ptr<const TraceSourceAccessor> accessor);
+                       Ptr<const TraceSourceAccessor> accessor,
+                       std::string callback);
   uint32_t GetTraceSourceN (uint16_t uid) const;
   struct TypeId::TraceSourceInformation GetTraceSource(uint16_t uid, uint32_t i) const;
   bool MustHideFromDocumentation (uint16_t uid) const;
@@ -116,6 +119,7 @@
     TypeId::hash_t hash;
     uint16_t parent;
     std::string groupName;
+    std::size_t size;
     bool hasConstructor;
     Callback<ObjectBase *> constructor;
     bool mustHideFromDocumentation;
@@ -211,6 +215,7 @@
   information.hash = hash;
   information.parent = 0;
   information.groupName = "";
+  information.size = (std::size_t)(-1);
   information.hasConstructor = false;
   information.mustHideFromDocumentation = false;
   m_information.push_back (information);
@@ -247,6 +252,13 @@
   information->groupName = groupName;
 }
 void
+IidManager::SetSize (uint16_t uid, std::size_t size)
+{
+  NS_LOG_FUNCTION (this << uid << size);
+  struct IidInformation *information = LookupInformation (uid);
+  information->size = size;
+}
+void
 IidManager::HideFromDocumentation (uint16_t uid)
 {
   NS_LOG_FUNCTION (this << uid);
@@ -322,6 +334,13 @@
   struct IidInformation *information = LookupInformation (uid);
   return information->groupName;
 }
+std::size_t
+IidManager::GetSize (uint16_t uid) const
+{
+  NS_LOG_FUNCTION (this << uid);
+  struct IidInformation *information = LookupInformation (uid);
+  return information->size;
+}
 
 Callback<ObjectBase *> 
 IidManager::GetConstructor (uint16_t uid) const
@@ -471,7 +490,8 @@
 IidManager::AddTraceSource (uint16_t uid,
                             std::string name, 
                             std::string help,
-                            Ptr<const TraceSourceAccessor> accessor)
+                            Ptr<const TraceSourceAccessor> accessor,
+                            std::string callback)
 {
   NS_LOG_FUNCTION (this << uid << name << help << accessor);
   struct IidInformation *information  = LookupInformation (uid);
@@ -484,6 +504,7 @@
   source.name = name;
   source.help = help;
   source.accessor = accessor;
+  source.callback = callback;
   information->traceSources.push_back (source);
 }
 uint32_t 
@@ -621,6 +642,13 @@
   return *this;
 }
 TypeId 
+TypeId::SetSize (std::size_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  Singleton<IidManager>::Get ()->SetSize (m_tid, size);
+  return *this;
+}
+TypeId 
 TypeId::GetParent (void) const
 {
   NS_LOG_FUNCTION (this);
@@ -667,6 +695,13 @@
   hash_t hash = Singleton<IidManager>::Get ()->GetHash (m_tid);
   return hash;
 }
+std::size_t
+TypeId::GetSize (void) const
+{
+  NS_LOG_FUNCTION (this);
+  std::size_t size = Singleton<IidManager>::Get ()->GetSize (m_tid);
+  return size;
+}
 
 bool 
 TypeId::HasConstructor (void) const
@@ -773,8 +808,17 @@
                         std::string help,
                         Ptr<const TraceSourceAccessor> accessor)
 {
+  return AddTraceSource (name, help, accessor, "(not yet documented)");
+}
+
+TypeId 
+TypeId::AddTraceSource (std::string name,
+                        std::string help,
+                        Ptr<const TraceSourceAccessor> accessor,
+                        std::string callback)
+{
   NS_LOG_FUNCTION (this << name << help << accessor);
-  Singleton<IidManager>::Get ()->AddTraceSource (m_tid, name, help, accessor);
+  Singleton<IidManager>::Get ()->AddTraceSource (m_tid, name, help, accessor, callback);
   return *this;
 }
 
diff -Naur ns-3.21/src/core/model/type-id.h ns-3.22/src/core/model/type-id.h
--- ns-3.21/src/core/model/type-id.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/type-id.h	2015-02-05 15:46:23.000000000 -0800
@@ -25,6 +25,7 @@
 #include "trace-source-accessor.h"
 #include "attribute-helper.h"
 #include "callback.h"
+#include "deprecated.h"
 #include "hash.h"
 #include <string>
 #include <stdint.h>
@@ -42,9 +43,10 @@
  *  - the set of accessible constructors in the subclass
  *  - the set of 'attributes' accessible in the subclass
  *
+ * \see attribute_TypeId
+ *
  * \internal
  *  See the discussion in IidManager about hash chaining of TypeId's.
- *
  */
 class TypeId
 {
@@ -70,6 +72,7 @@
   struct TraceSourceInformation {
     std::string name;
     std::string help;
+    std::string callback;
     Ptr<const TraceSourceAccessor> accessor;
   };
 
@@ -168,6 +171,11 @@
   hash_t GetHash (void) const;
 
   /**
+   * \returns the size of this interface.
+   */
+  std::size_t GetSize (void) const;
+
+  /**
    * \returns true if this TypeId has a constructor
    */
   bool HasConstructor (void) const;
@@ -240,6 +248,22 @@
   TypeId SetGroupName (std::string groupName);
 
   /**
+   * Set the size of this type, based on the \p sizeof operator.
+   *
+   * Call this way:
+   * \code
+   *   SetSize (sizeof (<typename>));
+   * \endcode
+   * This is done automatically by NS_LOG_ENSURE_REGISTERED()
+   * A ridiculously large reported size is a symptom that the
+   * type hasn't been registered.
+   *
+   * \param size The size of the object, in bytes.
+   * \returns this TypeId instance.
+   */
+  TypeId SetSize (std::size_t size);
+  
+  /**
    * \returns this TypeId instance
    *
    * Record in this TypeId the fact that the default constructor
@@ -298,11 +322,29 @@
    *        trace source.
    * \param accessor a pointer to a TraceSourceAccessor which can be
    *        used to connect/disconnect sinks to this trace source.
+   * \param callback fully qualified typedef name for the callback signature.
+   *        Generally this should begin with the "ns3::" namespace qualifier.
    * \returns this TypeId instance.
    */
   TypeId AddTraceSource (std::string name,
                          std::string help,
-                         Ptr<const TraceSourceAccessor> accessor);
+                         Ptr<const TraceSourceAccessor> accessor)
+    NS_DEPRECATED;
+  
+  /**
+   * \param name the name of the new trace source
+   * \param help some help text which describes the purpose of this
+   *        trace source.
+   * \param accessor a pointer to a TraceSourceAccessor which can be
+   *        used to connect/disconnect sinks to this trace source.
+   * \param callback fully qualified typedef name for the callback signature.
+   *        Generally this should begin with the "ns3::" namespace qualifier.
+   * \returns this TypeId instance.
+   */
+  TypeId AddTraceSource (std::string name,
+                         std::string help,
+                         Ptr<const TraceSourceAccessor> accessor,
+                         std::string callback);
 
   TypeId HideFromDocumentation (void);
 
@@ -358,19 +400,13 @@
 
   uint16_t m_tid;
 };
-
+  
 std::ostream & operator << (std::ostream &os, TypeId tid);
 std::istream & operator >> (std::istream &is, TypeId &tid);
 inline bool operator == (TypeId a, TypeId b);
 inline bool operator != (TypeId a, TypeId b);
 bool operator <  (TypeId a, TypeId b);
 
-/**
- * \class ns3::TypeIdValue
- * \brief hold objects of type ns3::TypeId
- */
-
-
 ATTRIBUTE_HELPER_HEADER (TypeId);
 
 } // namespace ns3 
diff -Naur ns-3.21/src/core/model/type-name.cc ns-3.22/src/core/model/type-name.cc
--- ns-3.21/src/core/model/type-name.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/type-name.cc	2015-02-05 15:46:23.000000000 -0800
@@ -1,26 +1,41 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 Georgia Tech Research Corporation
+ *
+ * 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 "type-name.h"
 
-namespace ns3 {
-
-#define DEF_TYPE(x)                             \
-  template <>                                   \
-  std::string TypeNameGet<x> (void)             \
-  {                                             \
-    return # x;                                  \
-  }
-
-DEF_TYPE (uint8_t);
-DEF_TYPE (uint16_t);
-DEF_TYPE (uint32_t);
-DEF_TYPE (uint64_t);
-DEF_TYPE (int8_t);
-DEF_TYPE (int16_t);
-DEF_TYPE (int32_t);
-DEF_TYPE (int64_t);
-DEF_TYPE (float);
-DEF_TYPE (double);
+/**
+ * \file
+ * \ingroup attributeimpl
+ * ns3::TypeNameGet() function implementations.
+ */
 
+namespace ns3 {
 
+template <> std::string TypeNameGet< int8_t  > (void) { return "int8_t"  ; }
+template <> std::string TypeNameGet< int16_t > (void) { return "int16_t" ; }
+template <> std::string TypeNameGet< int32_t > (void) { return "int32_t" ; }
+template <> std::string TypeNameGet< int64_t > (void) { return "int64_t" ; }
+template <> std::string TypeNameGet< uint8_t > (void) { return "uint8_t" ; }
+template <> std::string TypeNameGet< uint16_t> (void) { return "uint16_t"; }
+template <> std::string TypeNameGet< uint32_t> (void) { return "uint32_t"; }
+template <> std::string TypeNameGet< uint64_t> (void) { return "uint64_t"; }
+template <> std::string TypeNameGet< float   > (void) { return "float"   ; }
+template <> std::string TypeNameGet< double  > (void) { return "double"  ; }
+  
 } // namespace ns3
diff -Naur ns-3.21/src/core/model/type-name.h ns-3.22/src/core/model/type-name.h
--- ns-3.21/src/core/model/type-name.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/type-name.h	2015-02-05 15:46:23.000000000 -0800
@@ -1,4 +1,21 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 Georgia Tech Research Corporation
+ *
+ * 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 TYPE_NAME_H
 #define TYPE_NAME_H
@@ -6,31 +23,45 @@
 #include <stdint.h>
 #include <string>
 
+/**
+ * \file
+ * \ingroup attributeimpl
+ * ns3::TypeNameGet() function declarations.
+ */
+
 namespace ns3 {
 
+/**
+ * \ingroup attributeimpl
+ * Type name strings for numeric AttributeValue types.
+ *
+ * \tparam T The numeric type.
+ * \returns The numeric type name as a string.
+ */
 template <typename T>
 std::string TypeNameGet (void)
 {
   return "unknown";
 }
 
-#define DEF_TYPE(x)                             \
-  template <>                                   \
-  std::string TypeNameGet<x> (void)
-
-DEF_TYPE (uint8_t);
-DEF_TYPE (uint16_t);
-DEF_TYPE (uint32_t);
-DEF_TYPE (uint64_t);
-DEF_TYPE (int8_t);
-DEF_TYPE (int16_t);
-DEF_TYPE (int32_t);
-DEF_TYPE (int64_t);
-DEF_TYPE (float);
-DEF_TYPE (double);
-
-#undef DEF_TYPE
-
+/**
+ * \ingroup attributeimpl
+ * ns3::TypeNameGet(void) specializaton.
+ * \returns The numeric type name as a string.
+ * @{
+ */
+template <> std::string TypeNameGet< int8_t  > (void);
+template <> std::string TypeNameGet< int16_t > (void);
+template <> std::string TypeNameGet< int32_t > (void);
+template <> std::string TypeNameGet< int64_t > (void);
+template <> std::string TypeNameGet< uint8_t > (void);
+template <> std::string TypeNameGet< uint16_t> (void);
+template <> std::string TypeNameGet< uint32_t> (void);
+template <> std::string TypeNameGet< uint64_t> (void);
+template <> std::string TypeNameGet< float   > (void);
+template <> std::string TypeNameGet< double  > (void);
+/**@}*/
+  
 } // namespace ns3
 
 #endif /* TYPE_NAME_H */
diff -Naur ns-3.21/src/core/model/type-traits.h ns-3.22/src/core/model/type-traits.h
--- ns-3.21/src/core/model/type-traits.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/type-traits.h	2015-02-05 15:46:23.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- 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
+ *
+ */
+
 #ifndef TYPE_TRAITS_H
 #define TYPE_TRAITS_H
 
diff -Naur ns-3.21/src/core/model/uinteger.cc ns-3.22/src/core/model/uinteger.cc
--- ns-3.21/src/core/model/uinteger.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/uinteger.cc	2015-02-05 15:46:23.000000000 -0800
@@ -22,14 +22,29 @@
 #include "log.h"
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("Uinteger");
+/**
+ * \file
+ * \ingroup attribute_Uinteger
+ * Uinteger attribute value implementations.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Uinteger");
+
 ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME (uint64_t,Uinteger);
 
 namespace internal {
 
+/**
+ * \ingroup attribute_Uinteger
+ * Make an Uinteger attribute checker with embedded numeric type name.
+ *
+ * \param min The minimum allowed value.
+ * \param max The maximum allowed value.
+ * \param name The original type name ("uint8_t", "uint16_t", _etc_.).
+ * \returns The AttributeChecker.
+ */
 Ptr<const AttributeChecker> MakeUintegerChecker (uint64_t min, uint64_t max, std::string name)
 {
   NS_LOG_FUNCTION (min << max << name);
diff -Naur ns-3.21/src/core/model/uinteger.h ns-3.22/src/core/model/uinteger.h
--- ns-3.21/src/core/model/uinteger.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/uinteger.h	2015-02-05 15:46:23.000000000 -0800
@@ -25,38 +25,60 @@
 #include <stdint.h>
 #include <limits>
 
+/**
+ * \file
+ * \ingroup attribute_Uinteger
+ * Unsigned integer attribute value declarations and template implementations.
+ */
+
 namespace ns3 {
 
+//  Additional docs for class UintegerValue:
 /**
- * \ingroup attribute
- *
- * \class ns3::UintegerValue
- * \brief Hold an unsigned integer type
- *
- * \anchor uint8_t
- * \anchor uint16_t
- * \anchor uint32_t
- * \anchor uint64_t
+ * Hold an unsigned integer type.
  *
  * This class can be used to hold variables of unsigned integer
  * type such as uint8_t, uint16_t, uint32_t, uint64_t, or,
  * unsigned int, etc.
  */
-
 ATTRIBUTE_VALUE_DEFINE_WITH_NAME (uint64_t, Uinteger);
 ATTRIBUTE_ACCESSOR_DEFINE (Uinteger);
 
 template <typename T>
 Ptr<const AttributeChecker> MakeUintegerChecker (void);
 
+/**
+ * Make a checker with a minimum value.
+ *
+ * The minimum value is included in the allowed range.
+ *
+ * \param [in] min The minimum value.
+ * \returns The AttributeChecker.
+ * \see AttributeChecker
+ */
 template <typename T>
 Ptr<const AttributeChecker> MakeUintegerChecker (uint64_t min);
 
+/**
+ * Make a checker with a minimum and a maximum value.
+ *
+ * The minimum and maximum values are included in the allowed range.
+ *
+ * \param [in] min The minimum value.
+ * \param [in] max The maximum value.
+ * \returns The AttributeChecker.
+ * \see AttributeChecker
+ */
 template <typename T>
 Ptr<const AttributeChecker> MakeUintegerChecker (uint64_t min, uint64_t max);
 
 } // namespace ns3
 
+
+/***************************************************************
+ *  Implementation of the templates declared above.
+ ***************************************************************/
+
 #include "type-name.h"
 
 namespace ns3 {
diff -Naur ns-3.21/src/core/model/unix-fd-reader.cc ns-3.22/src/core/model/unix-fd-reader.cc
--- ns-3.21/src/core/model/unix-fd-reader.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/unix-fd-reader.cc	2015-02-05 15:46:23.000000000 -0800
@@ -21,7 +21,7 @@
 
 #include <cerrno>
 #include <cstring>
-#include <unistd.h>
+#include <unistd.h>  // close()
 #include <fcntl.h>
 
 #include "log.h"
@@ -32,10 +32,16 @@
 
 #include "unix-fd-reader.h"
 
-NS_LOG_COMPONENT_DEFINE ("FdReader");
+/**
+ * \file
+ * \ingroup system
+ * ns3::FdReader implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("FdReader");
+
 FdReader::FdReader ()
   : m_fd (-1), m_readCallback (0), m_readThread (0), m_stop (false),
     m_destroyEvent ()
diff -Naur ns-3.21/src/core/model/unix-fd-reader.h ns-3.22/src/core/model/unix-fd-reader.h
--- ns-3.21/src/core/model/unix-fd-reader.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/unix-fd-reader.h	2015-02-05 15:46:23.000000000 -0800
@@ -27,9 +27,16 @@
 #include "system-thread.h"
 #include "event-id.h"
 
+/**
+ * \file
+ * \ingroup system
+ * ns3::FdReader declaration.
+ */
+
 namespace ns3 {
 
 /**
+ * \ingroup system
  * \brief A class that asynchronously reads from a file descriptor.
  *
  * This class can be used to start a system thread that reads from a
@@ -40,7 +47,9 @@
 class FdReader : public SimpleRefCount<FdReader>
 {
 public:
+  /** Constructor. */
   FdReader();
+  /** Destructor. */
   virtual ~FdReader();
 
   /**
@@ -62,19 +71,26 @@
 protected:
 
   /**
-   * \internal
    * \brief A structure representing data read.
    */
   struct Data
   {
+    /** Default constructor, with null buffer and zero length. */
     Data () : m_buf (0), m_len (0) {}
+    /**
+     * Construct from a buffer of a given length.
+     *
+     * \param buf The buffer.
+     * \param len The size of the buffer, in bytes.
+     */
     Data (uint8_t *buf, ssize_t len) : m_buf (buf), m_len (len) {}
+    /** The read data buffer. */
     uint8_t *m_buf;
+    /** The size of the read data buffer, in bytes. */
     ssize_t m_len;
   };
 
   /**
-   * \internal
    * \brief The read implementation.
    *
    * The value of \p m_len returned controls further processing.  The
@@ -90,20 +106,32 @@
   virtual FdReader::Data DoRead (void) = 0;
 
   /**
-   * \internal
    * \brief The file descriptor to read from.
    */
   int m_fd;
 
 private:
 
+  /** The asynchronous function which performs the read. */
   void Run (void);
+  /** Event handler scheduled for destroy time to halt the thread. */
   void DestroyEvent (void);
 
+  /** The main thread callback function to invoke when we have data. */
   Callback<void, uint8_t *, ssize_t> m_readCallback;
+  
+  /** The thread doing the read, created and launched by Start(). */
   Ptr<SystemThread> m_readThread;
-  int m_evpipe[2];           // pipe used to signal events between threads
-  bool m_stop;               // true means the read thread should stop
+
+  /** Pipe used to signal events between threads. */
+  int m_evpipe[2];
+  /** Signal the read thread to stop. */
+  bool m_stop;
+  
+  /**
+   * The event scheduled for destroy time which will invoke DestroyEvent
+   * and halt the thread.
+   */
   EventId m_destroyEvent;
 };
 
diff -Naur ns-3.21/src/core/model/unix-system-condition.cc ns-3.22/src/core/model/unix-system-condition.cc
--- ns-3.21/src/core/model/unix-system-condition.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/unix-system-condition.cc	2015-02-05 15:46:23.000000000 -0800
@@ -25,28 +25,66 @@
 #include "log.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("SystemCondition");
+/**
+ * \file
+ * \ingroup thread
+ * Thread conditional wait implementation for Unix-like systems.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SystemCondition");
+
+/**
+ * \ingroup thread
+ * Implementation of SystemCondition for Unix-like systems.
+ */
 class SystemConditionPrivate {
 public:
   /// Conversion from ns to s.
   static const uint64_t NS_PER_SEC = (uint64_t)1000000000;
 
+  /** Constructor. */
   SystemConditionPrivate ();
+  /** Destructor. */
   ~SystemConditionPrivate ();
-	
+
+  /**
+   * Set the condition.
+   *
+   * \param condition The new condition value.
+   */
   void SetCondition (bool condition);
+  /**
+   * Get the condition value.
+   *
+   * \returns The condition value.
+   */
   bool GetCondition (void);
+  /** Signal the condition. */
   void Signal (void);
+  /** Broadcast the condition. */
   void Broadcast (void);
+  /**
+   * Unset the condition, then wait for another thread
+   * to set it with SetCondition. */
   void Wait (void);
+  /**
+   * Unset the condition, then wait for a limited amount of wall-clock
+   * time for another thread to set it with SetCondition.
+   *
+   * \param ns Maximum time to wait, in ns.
+   * \returns \c true if the condition timed out; \c false if the other
+   * thread set it.
+   */
   bool TimedWait (uint64_t ns);
 
 private:
+  /** Mutex controlling access to the condition. */
   pthread_mutex_t m_mutex;
+  /** The pthread condition variable. */
   pthread_cond_t  m_cond;
+  /** The condition state. */
   bool m_condition;
 };
 
diff -Naur ns-3.21/src/core/model/unix-system-mutex.cc ns-3.22/src/core/model/unix-system-mutex.cc
--- ns-3.21/src/core/model/unix-system-mutex.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/unix-system-mutex.cc	2015-02-05 15:46:23.000000000 -0800
@@ -27,19 +27,26 @@
 #include "log.h"
 
 
-NS_LOG_COMPONENT_DEFINE_MASK ("SystemMutex", ns3::LOG_PREFIX_TIME);
+/**
+ * @file
+ * @ingroup thread
+ * Mutex critical section primitive definitions for Unix-like systems.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE_MASK ("SystemMutex", ns3::LOG_PREFIX_TIME);
+
+/** System-dependent implementation of SystemMutex. */
 class SystemMutexPrivate {
 public: 
-  SystemMutexPrivate ();
+  SystemMutexPrivate ();    
   ~SystemMutexPrivate ();
 	
-  void Lock (void);
-  void Unlock (void);
+  void Lock (void);         /**< Acquire ownership of the mutex. */
+  void Unlock (void);       /**< Release ownership of the mutex. */
 private:
-  pthread_mutex_t m_mutex;
+  pthread_mutex_t m_mutex;  /**< The mutex. */
 };
 
 SystemMutexPrivate::SystemMutexPrivate ()
diff -Naur ns-3.21/src/core/model/unix-system-wall-clock-ms.cc ns-3.22/src/core/model/unix-system-wall-clock-ms.cc
--- ns-3.21/src/core/model/unix-system-wall-clock-ms.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/unix-system-wall-clock-ms.cc	2015-02-05 15:46:23.000000000 -0800
@@ -24,24 +24,40 @@
 #include <sys/times.h>
 #include <unistd.h>
 
-NS_LOG_COMPONENT_DEFINE ("SystemWallClockMsPrivate");
+/**
+ * \file
+ * \ingroup system
+ * Wall clock class ns3::SystemWallClockMs implementation
+ * for Unix-like systems.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SystemWallClockMsPrivate");
+
+/**
+ * \ingroup system
+ * \brief System-dependent implementation for SystemWallClockMs
+ */
 class SystemWallClockMsPrivate {
 public:
+  /** \copydoc SystemWallClockMs::Start() */
   void Start (void);
+  /** \copydoc SystemWallClockMs::End() */
   int64_t End (void);
+  /** \copydoc SystemWallClockMs::GetElapsedReal() */
   int64_t GetElapsedReal (void) const;
+  /** \copydoc SystemWallClockMs::GetElapsedUser() */
   int64_t GetElapsedUser (void) const;
+  /** \copydoc SystemWallClockMs::GetElapsedSystem() */
   int64_t GetElapsedSystem (void) const;
 
 private:
-  struct tms m_startTimes;
-  clock_t m_startTime;
-  int64_t m_elapsedReal;
-  int64_t m_elapsedUser;
-  int64_t m_elapsedSystem;
+  struct tms m_startTimes;  //!< The native time structure.
+  clock_t m_startTime;      //!< Native real time.
+  int64_t m_elapsedReal;    //!< Elapsed real time, in ms.
+  int64_t m_elapsedUser;    //!< Elapsed user time, in ms.
+  int64_t m_elapsedSystem;  //!< Elapsed system time, in ms.
 };
 
 void 
diff -Naur ns-3.21/src/core/model/vector.cc ns-3.22/src/core/model/vector.cc
--- ns-3.21/src/core/model/vector.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/vector.cc	2015-02-05 15:46:23.000000000 -0800
@@ -23,12 +23,19 @@
 #include <cmath>
 #include <sstream>
 
-NS_LOG_COMPONENT_DEFINE ("Vector");
+/**
+ * \file
+ * \ingroup attribute_Vector
+ * ns3::Vector, ns3::Vector2D and ns3::Vector3D attribute value implementations.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Vector");
+
 ATTRIBUTE_HELPER_CPP (Vector3D);
 ATTRIBUTE_HELPER_CPP (Vector2D);
+  
 // compatibility for mobility code
 Ptr<const AttributeChecker> MakeVectorChecker (void)
 {
diff -Naur ns-3.21/src/core/model/vector.h ns-3.22/src/core/model/vector.h
--- ns-3.21/src/core/model/vector.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/vector.h	2015-02-05 15:46:23.000000000 -0800
@@ -23,10 +23,17 @@
 #include "attribute.h"
 #include "attribute-helper.h"
 
+/**
+ * \file
+ * \ingroup attribute_Vector
+ * ns3::Vector, ns3::Vector2D and ns3::Vector3D attribute value declarations.
+ */
+
 namespace ns3 {
 
 /**
  * \brief a 3d vector
+ * \see attribute_Vector3D
  */
 class Vector3D
 {
@@ -55,10 +62,15 @@
    * z coordinate of vector
    */
   double z;
+  
+  friend double CalculateDistance (const Vector3D &a, const Vector3D &b);
+  friend std::ostream &operator << (std::ostream &os, const Vector3D &vector);
+  friend std::istream &operator >> (std::istream &is, Vector3D &vector);
 };
 
 /**
- * \brief a 3d vector
+ * \brief a 2d vector
+ * \see attribute_Vector2D
  */
 class Vector2D
 {
@@ -82,6 +94,10 @@
    * y coordinate of vector
    */
   double y;
+
+  friend double CalculateDistance (const Vector2D &a, const Vector2D &b);
+  friend std::ostream &operator << (std::ostream &os, const Vector2D &vector);
+  friend std::istream &operator >> (std::istream &is, Vector2D &vector);
 };
 
 /**
@@ -90,7 +106,6 @@
  * \returns the cartesian distance between a and b.
  */
 double CalculateDistance (const Vector3D &a, const Vector3D &b);
-
 /**
  * \param a one point
  * \param b another point
@@ -98,28 +113,91 @@
  */
 double CalculateDistance (const Vector2D &a, const Vector2D &b);
 
+ATTRIBUTE_HELPER_HEADER (Vector3D);
+ATTRIBUTE_HELPER_HEADER (Vector2D);
+
 /**
- * \class ns3::Vector3DValue
- * \brief hold objects of type ns3::Vector3D
+ * Output streamer.
+ *
+ * Vectors are written as "x:y:z".
+ *
+ * \param [in,out] os The stream.
+ * \param [in] vector The vector to stream
+ * \return The stream.
  */
+std::ostream &operator << (std::ostream &os, const Vector3D &vector);
 /**
- * \class ns3::Vector2DValue
- * \brief hold objects of type ns3::Vector2D
+ * Output streamer.
+ *
+ * Vectors are written as "x:y".
+ *
+ * \param [in,out] os The stream.
+ * \param [in] vector The vector to stream
+ * \return The stream.
  */
-ATTRIBUTE_HELPER_HEADER (Vector3D);
-ATTRIBUTE_HELPER_HEADER (Vector2D);
+std::ostream &operator << (std::ostream &os, const Vector2D &vector);
 
-std::ostream &operator << (std::ostream &os, const Vector3D &vector);
+/**
+ * Input streamer.
+ *
+ * Vectors are expected to be in the form "x:y:z".
+ *
+ * \param [in,out] is The stream.
+ * \param [in] vector The vector.
+ * \returns The stream.
+ */
 std::istream &operator >> (std::istream &is, Vector3D &vector);
-std::ostream &operator << (std::ostream &os, const Vector2D &vector);
+/**
+ * Input streamer.
+ *
+ * Vectors are expected to be in the form "x:y".
+ *
+ * \param [in,out] is The stream.
+ * \param [in] vector The vector.
+ * \returns The stream.
+ */
 std::istream &operator >> (std::istream &is, Vector2D &vector);
 
-// for compatibility with mobility models
+
+/**
+ * \relates Vector3D
+ * Vector alias typedef for compatibility with mobility models
+ */
 typedef Vector3D Vector;
+/** 
+ * \ingroup attribute_Vector3D
+ * Vector alias typedef for compatibility with mobility models
+ */
 typedef Vector3DValue VectorValue;
+/** 
+ * \ingroup attribute_Vector3D
+ * Vector alias typedef for compatibility with mobility models
+ */
 typedef Vector3DChecker VectorChecker;
+
+
+// Document these by hand so they go in group attribute_Vector3D  
+/**
+ * \ingroup attribute_Vector3D
+ * \fn ns3::Ptr<const ns3::AttributeAccessor> ns3::MakeVectorAccessor (T1 a1)
+ * \copydoc ns3::MakeAccessorHelper(T1)
+ * \see AttributeAccessor
+ */
+/**
+ * \ingroup attribute_Vector3D
+ * \fn ns3::Ptr<const ns3::AttributeAccessor> ns3::MakeVectorAccessor (T1 a1, T2 a2)
+ * \copydoc ns3::MakeAccessorHelper(T1,T2)
+ * \see AttributeAccessor
+ */
+
 ATTRIBUTE_ACCESSOR_DEFINE (Vector);
-Ptr<const AttributeChecker> MakeVectorChecker (void);
+
+/**
+ * \ingroup attribute_Vector3D
+ * \returns The AttributeChecker.
+ * \see AttributeChecker
+ */
+Ptr<const AttributeChecker> MakeVectorChecker (void);  
 
 } // namespace ns3
 
diff -Naur ns-3.21/src/core/model/wall-clock-synchronizer.cc ns-3.22/src/core/model/wall-clock-synchronizer.cc
--- ns-3.21/src/core/model/wall-clock-synchronizer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/wall-clock-synchronizer.cc	2015-02-05 15:46:23.000000000 -0800
@@ -16,18 +16,37 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#include <ctime> // for clock_getres
-#include <sys/time.h>
+
+#include <ctime>       // clock_t
+#include <sys/time.h>  // gettimeofday
+                       // clock_getres: glibc < 2.17, link with librt
 
 #include "log.h"
 #include "system-condition.h"
 
 #include "wall-clock-synchronizer.h"
 
-NS_LOG_COMPONENT_DEFINE ("WallClockSynchronizer");
+/**
+ * \file
+ * \ingroup realtime
+ * ns3::WallClockSynchronizer implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WallClockSynchronizer");
+
+NS_OBJECT_ENSURE_REGISTERED (WallClockSynchronizer);
+
+TypeId 
+WallClockSynchronizer::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::WallClockSynchronizer")
+    .SetParent<Synchronizer> ()
+  ;
+  return tid;
+}
+
 WallClockSynchronizer::WallClockSynchronizer ()
 {
   NS_LOG_FUNCTION (this);
@@ -295,15 +314,8 @@
 WallClockSynchronizer::SpinWait (uint64_t ns)
 {
   NS_LOG_FUNCTION (this << ns);
-//
-// Do a busy-wait until the normalized realtime equals the value passed in
-// or the condition variable becomes true.  The condition becomes true if
-// an outside entity (a network device receives a packet, sets the condition
-// and signals the scheduler it needs to re-evaluate).
-// 
 // We just sit here and spin, wasting CPU cycles until we get to the right
 // time or are told to leave.
-//
   for (;;) 
     {
       if (GetNormalizedRealtime () >= ns)
@@ -323,25 +335,6 @@
 WallClockSynchronizer::SleepWait (uint64_t ns)
 {
   NS_LOG_FUNCTION (this << ns);
-//
-// Put our process to sleep for some number of nanoseconds.  Typically this
-// will be some time equal to an integral number of jiffies.  We will usually
-// follow a call to SleepWait with a call to SpinWait to get the kind of
-// accuracy we want.
-//
-// We have to have some mechanism to wake up this sleep in case an external
-// event happens that causes a schedule event in the simulator.  This newly
-// scheduled event might be before the time we are waiting until, so we have
-// to break out of both the SleepWait and the following SpinWait to go back
-// and reschedule/resynchronize taking the new event into account.  The 
-// SystemCondition we have saved in m_condition takes care of this for us.
-//
-// This call will return if the timeout expires OR if the condition is 
-// set true by a call to WallClockSynchronizer::SetCondition (true) followed
-// by a call to WallClockSynchronizer::Signal().  In either case, we are done
-// waiting.  If the timeout happened, we TimedWait returns true; if a Signal
-// happened, false.
-//
   return m_condition.TimedWait (ns);
 }
 
diff -Naur ns-3.21/src/core/model/wall-clock-synchronizer.h ns-3.22/src/core/model/wall-clock-synchronizer.h
--- ns-3.21/src/core/model/wall-clock-synchronizer.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/wall-clock-synchronizer.h	2015-02-05 15:46:23.000000000 -0800
@@ -22,174 +22,176 @@
 #include "system-condition.h"
 #include "synchronizer.h"
 
+/**
+ * \file
+ * \ingroup realtime
+ * ns3::WallClockSynchronizer declaration.
+ */
+
 namespace ns3 {
 
 /**
+ * @ingroup realtime
  * @brief Class used for synchronizing the simulation events to a real-time
- * "wall clock" using Posix Clock functions.
+ * "wall clock" using Posix clock functions.
  *
  * Enable this synchronizer using:
  *
+ * \code
  *   DefaultValue::Bind ("Synchronizer", "WallClockSynchronizer");
+ * \endcode
  *
  * before calling any simulator functions.
  *
- * The simulation clock is maintained as a 64-bit integer in a unit specified
- * by the user through the TimeStepPrecision::Set function. This means that
- * it is not possible to specify event expiration times with anything better
- * than this user-specified accuracy.
- *
  * There are a couple of more issues at this level.  Posix clocks provide
  * access to several clocks we could use as a wall clock.  We don't care about
- * time in the sense of 0430 CEST, we care about some piece of hardware that
+ * time in the sense of 04:30 CEST, we care about some piece of hardware that
  * ticks at some regular period.  The most accurate posix clock in this
- * respect is the CLOCK_PROCESS_CPUTIME_ID clock.  This is a high-resolution
+ * respect is the \c CLOCK_PROCESS_CPUTIME_ID clock.  This is a high-resolution
  * register in the CPU.  For example, on Intel machines this corresponds to
  * the timestamp counter (TSC) register.  The resolution of this counter will
  * be on the order of nanoseconds.
  *
  * Now, just because we can measure time in nanoseconds doesn't mean we can
  * put our process to sleep to nanosecond resolution.  We are eventually going
- * to use the function clock_nanosleep () to sleep until a simulation Time
+ * to use the function \c clock_nanosleep() to sleep until a simulation Time
  * specified by the caller. 
  *
- * MORE ON JIFFIES, SLEEP, PROCESSES, etc., as required
+ * \todo Add more on jiffies, sleep, processes, etc.
  *
- * Nanosleep takes a struct timespec as an input so we have to deal with
- * conversion between Time and struct timespec here.  They are both 
- * interpreted as elapsed times.
+ * \internal
+ * Nanosleep takes a <tt>struct timeval</tt> as an input so we have to
+ * deal with conversion between Time and \c timeval here.
+ * They are both interpreted as elapsed times.
  */
 class WallClockSynchronizer : public Synchronizer
 {
 public:
+  /**
+   * Get the registered TypeId for this class.
+   * \returns The TypeId.
+   */
+  static TypeId GetTypeId (void);
+
+  /** Constructor. */
   WallClockSynchronizer ();
+  /** Destructor. */
   virtual ~WallClockSynchronizer ();
 
+  /** Conversion constant between &mu;s and ns. */
   static const uint64_t US_PER_NS = (uint64_t)1000;
+  /** Conversion constant between &mu;s and seconds. */
   static const uint64_t US_PER_SEC = (uint64_t)1000000;
-  /// Conversion from ns to s.
+  /** Conversion constant between ns and s. */
   static const uint64_t NS_PER_SEC = (uint64_t)1000000000;
 
 protected:
-/**
- * @brief Return true if this synchronizer is actually synchronizing to a
- * realtime clock.  The simulator sometimes needs to know this.
- *
- * @internal
- *
- * Subclasses are expected to implement this method to tell the outside world
- * whether or not they are synchronizing to a realtime clock.
- *
- * @returns True if locked with realtime, false if not.
- */
-  virtual bool DoRealtime (void);
+  /**
+   * @brief Do a busy-wait until the normalized realtime equals the argument
+   * or the condition variable becomes \c true.
+  
+   * The condition becomes \c true if an outside entity (a network device
+   * receives a packet), sets the condition and signals the scheduler
+   * it needs to re-evaluate.
+   *
+   * @param ns The target normalized real time we should wait for.
+   * @returns \c true if we reached the target time,
+   *          \c false if we retured because the condition was set.
+   */
+  bool SpinWait (uint64_t ns);
+  /**
+   * Put our process to sleep for some number of nanoseconds.
+   *
+   * Typically this will be some time equal to an integral number of jiffies.
+   * We will usually follow a call to SleepWait with a call to SpinWait
+   * to get the kind of accuracy we want.
+   *
+   * We have to have some mechanism to wake up this sleep in case an external
+   * event happens that causes a Schedule event in the simulator.  This newly
+   * scheduled event might be before the time we are waiting until, so we have
+   * to break out of both the SleepWait and the following SpinWait to go back
+   * and reschedule/resynchronize taking the new event into account.  The 
+   * SystemCondition we have saved in m_condition takes care of this for us.
+   *
+   * This call will return if the timeout expires OR if the condition is 
+   * set \c true by a call to SetCondition (true) followed by a call to
+   * Signal().  In either case, we are done waiting.  If the timeout happened,
+   * we return \c true; if a Signal happened we return \c false.
+   *
+   * @param ns The target normalized real time we should wait for.
+   * @returns \c true if we reached the target time,
+   *          \c false if we retured because the condition was set.
+   */
+  bool SleepWait (uint64_t ns);
 
-/**
- * @brief Retrieve the value of the origin of the underlying normalized wall
- * clock time in nanosecond units.
- *
- * @internal
- *
- * Subclasses are expected to implement this method to do the actual
- * real-time-clock-specific work of getting the current time.
- *
- * @returns The normalized wall clock time (in nanosecond units).
- * @see TimeStepPrecision::Get
- * @see Synchronizer::SetOrigin
- */
-  virtual uint64_t DoGetCurrentRealtime (void);
-
-/**
- * @brief Establish a correspondence between a simulation time and a 
- * wall-clock (real) time.
- *
- * @internal
- *
- * There are three timelines involved here:  the simulation time, the 
- * (absolute) wall-clock time and the (relative) synchronizer real time.
- * Calling this method makes a correspondence between the origin of the
- * synchronizer time and the current wall-clock time.
- *
- * This method is expected to be called at the "instant" before simulation
- * begins.  At this point, simulation time = 0, and synchronizer time is
- * set = 0 in this method.  We then associate this time with the current
- * value of the real time clock that will be used to actually perform the
- * synchronization.
- *
- * Subclasses are expected to implement this method to do the actual 
- * real-time-clock-specific work of making the correspondence mentioned above.
- * for example, this is where the differences between Time parameters and
- * parameters to clock_nanosleep would be dealt with. 
- *
- * @param ns The simulation time we need to use as the origin (normalized to
- * nanosecond units).
- */
+  // Inherited from Synchronizer
   virtual void DoSetOrigin (uint64_t ns);
-
-/**
- * @brief Declaration of method used to retrieve drift between the real time
- * clock used to synchronize the simulation and the current simulation time.
- *
- * @internal
- *
- * @param ns Simulation timestep from the simulator normalized to nanosecond 
- * steps.
- * @returns Drift in nanosecond units.
- * @see TimeStepPrecision::Get
- * @see Synchronizer::SetOrigin
- * @see Synchronizer::GetDrift
- */
-  virtual int64_t DoGetDrift (uint64_t ns);
-
-/**
- * @brief Wait until the real time is in sync with the specified simulation
- * time.
- *
- * @internal
- *
- * This is where the real work of synchronization is done.  The Time passed
- * in as a parameter is the simulation time.  The job of Synchronize is to
- * translate from simulation time to synchronizer time (in a perfect world
- * this is the same time) and then figure out how long in real-time it needs
- * to wait until that synchronizer / simulation time comes around.
- *
- * Subclasses are expected to implement this method to do the actual
- * real-time-clock-specific work of waiting (either busy-waiting or sleeping,
- * or some combination) until the requested simulation time.
- *
- * @param nsCurrent The current simulation time.
- * @param nsDelay The simulation time of the next event (in nanosecond units).
- *
- * @see TimeStepPrecision::Get
- */
+  virtual bool DoRealtime (void);
+  virtual uint64_t DoGetCurrentRealtime (void);
   virtual bool DoSynchronize (uint64_t nsCurrent, uint64_t nsDelay);
   virtual void DoSignal (void);
   virtual void DoSetCondition (bool cond);
-
+  virtual int64_t DoGetDrift (uint64_t ns);
   virtual void DoEventStart (void);
   virtual uint64_t DoEventEnd (void);
 
-  bool SpinWait (uint64_t);
-  bool SleepWait (uint64_t);
-
+  /**
+   * @brief Compute a correction to the nominal delay to account for
+   * realtime drift since the last DoSynchronize.
+   *
+   * @param nsNow The current simulation time (in nanosecond units).
+   * @param nsDelay The simulation time we need to wait for (normalized to 
+   * nanosecond units).
+   * @returns The corrected delay.
+   */
   uint64_t DriftCorrect (uint64_t nsNow, uint64_t nsDelay);
 
+  /**
+   * @brief Get the current absolute real time (in ns since the epoch).
+   *
+   * @returns The current real time, in ns.
+   */
   uint64_t GetRealtime (void);
+  /**
+   * @brief Get the current normalized real time, in ns.
+   *
+   * @returns The current normalized real time, in ns.
+   */
   uint64_t GetNormalizedRealtime (void);
 
+  /**
+   * @brief Convert an absolute time in ns to a \c timeval
+   *
+   * @param ns Absolute time in ns.
+   * @param tv Converted \c timeval.
+   */
   void NsToTimeval (int64_t ns, struct timeval *tv);
+  /**
+   * @brief Convert a \c timeval to absolute time, in ns.
+   *
+   * @param tv The input \c timeval.
+   * @returns The absolute time, in ns.
+   */
   uint64_t TimevalToNs (struct timeval *tv);
 
+  /**
+   * @brief Add two \c timeval.
+   *
+   * @param tv1 The first \c timeval.
+   * @param tv2 The second \c timeval.
+   * @param result The sum of \c tv1 and \c tv2.
+   */
   void TimevalAdd (
     struct timeval *tv1, 
     struct timeval *tv2,
     struct timeval *result);
 
-  uint64_t m_cpuTick;
-  uint64_t m_realtimeTick;
+  /** Size of the system clock tick, as reported by \c clock_getres, in ns. */
   uint64_t m_jiffy;
+  /** Time recorded by DoEventStart. */
   uint64_t m_nsEventStart;
 
+  /** Thread synchronizer. */
   SystemCondition m_condition;
 };
 
diff -Naur ns-3.21/src/core/model/watchdog.cc ns-3.22/src/core/model/watchdog.cc
--- ns-3.21/src/core/model/watchdog.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/watchdog.cc	2015-02-05 15:46:23.000000000 -0800
@@ -20,10 +20,17 @@
 #include "watchdog.h"
 #include "log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Watchdog");
+
+/**
+ * \file
+ * \ingroup timer
+ * ns3::Watchdog timer class implementation.
+ */
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Watchdog");
+
 Watchdog::Watchdog ()
   : m_impl (0),
     m_event (),
diff -Naur ns-3.21/src/core/model/watchdog.h ns-3.22/src/core/model/watchdog.h
--- ns-3.21/src/core/model/watchdog.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/watchdog.h	2015-02-05 15:46:23.000000000 -0800
@@ -23,25 +23,48 @@
 #include "nstime.h"
 #include "event-id.h"
 
+/**
+ * \file
+ * \ingroup timer
+ * ns3::Watchdog timer class declaration.
+ */
+
 namespace ns3 {
 
 class TimerImpl;
 
 /**
- * \ingroup core
- * \brief a very simple watchdog
+ * \ingroup timer
+ * \brief A very simple watchdog operating in virtual time.
+ *
+ * The watchdog timer is started by calling Ping with a delay value.
+ * Once started the timer cannot be suspended, cancelled or shortened.
+ * It _can_ be lengthened (delayed) by calling Ping again:  if the new
+ * expire time (current simulation time plus the new delay)
+ * is greater than the old expire time the timer will be extended
+ * to the new expire time.
+ *
+ * Typical usage would be to periodically Ping the Watchdog, extending
+ * it's execution time.  If the owning process fails to Ping before
+ * the Watchdog expires, the registered function will be invoked.
  *
  * If you don't ping the watchdog sufficiently often, it triggers its
  * listening function.
+ *
+ * \see Timer for a more sophisticated general purpose timer.
  */
 class Watchdog 
 {
 public:
+  /** Constructor. */
   Watchdog ();
+  /** Destructor. */
   ~Watchdog ();
 
   /**
-   * \param delay the watchdog delay
+   * Delay the timer.
+   *
+   * \param delay The watchdog delay
    *
    * After a call to this method, the watchdog will not be triggered
    * until the delay specified has been expired. This operation is
@@ -50,7 +73,9 @@
   void Ping (Time delay);
 
   /**
-   * \param fn the function
+   * Set the function to execute when the timer expires.
+   *
+   * \param fn The function
    *
    * Store this function in this Timer for later use by Timer::Schedule.
    */
@@ -58,8 +83,12 @@
   void SetFunction (FN fn);
 
   /**
-   * \param memPtr the member function pointer
-   * \param objPtr the pointer to object
+   * Set the function to execute when the timer expires.
+   *
+   * \tparam MEM_PTR Class method function type.
+   * \tparam OBJ_PTR Class type containing the function.
+   * \param memPtr The member function pointer
+   * \param objPtr The pointer to object
    *
    * Store this function and object in this Timer for later use by Timer::Schedule.
    */
@@ -68,72 +97,98 @@
 
 
   /**
-   * \param a1 the first argument
-   *
-   * Store this argument in this Timer for later use by Timer::Schedule.
+   * Set the arguments to be used when invoking the expire function.
+   */
+  /**@{*/
+  /**
+   * \tparam T1 Type of the first argument.
+   * \param a1 The first argument
    */
   template <typename T1>
   void SetArguments (T1 a1);
   /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
    * \param a1 the first argument
    * \param a2 the second argument
-   *
-   * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2>
   void SetArguments (T1 a1, T2 a2);
   /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \tparam T3 Type of the third argument.
    * \param a1 the first argument
    * \param a2 the second argument
    * \param a3 the third argument
-   *
-   * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2, typename T3>
   void SetArguments (T1 a1, T2 a2, T3 a3);
   /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \tparam T3 Type of the third argument.
+   * \tparam T4 Type of the fourth argument.
    * \param a1 the first argument
    * \param a2 the second argument
    * \param a3 the third argument
    * \param a4 the fourth argument
-   *
-   * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2, typename T3, typename T4>
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4);
   /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \tparam T3 Type of the third argument.
+   * \tparam T4 Type of the fourth argument.
+   * \tparam T5 Type of the fifth argument.
    * \param a1 the first argument
    * \param a2 the second argument
    * \param a3 the third argument
    * \param a4 the fourth argument
    * \param a5 the fifth argument
-   *
-   * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2, typename T3, typename T4, typename T5>
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
+   * \tparam T1 Type of the first argument.
+   * \tparam T2 Type of the second argument.
+   * \tparam T3 Type of the third argument.
+   * \tparam T4 Type of the fourth argument.
+   * \tparam T5 Type of the fifth argument.
+   * \tparam T6 Type of the sixth argument.
    * \param a1 the first argument
    * \param a2 the second argument
    * \param a3 the third argument
    * \param a4 the fourth argument
    * \param a5 the fifth argument
    * \param a6 the sixth argument
-   *
-   * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
+  /**@}*/
 
 private:
+  /** Internal callback invoked when the timer expires. */
   void Expire (void);
+  /**
+   * The timer implementation, which contains the bound callback
+   * function and arguments.
+   */
   TimerImpl *m_impl;
+  /** The future event scheduled to expire the timer. */
   EventId m_event;
+  /** The absolute time when the timer will expire. */
   Time m_end;
 };
 
 } // namespace ns3
 
+
+/********************************************************************
+ *  Implementation of the templates declared above.
+ ********************************************************************/
+
 #include "timer-impl.h"
 
 namespace ns3 {
diff -Naur ns-3.21/src/core/model/win32-system-wall-clock-ms.cc ns-3.22/src/core/model/win32-system-wall-clock-ms.cc
--- ns-3.21/src/core/model/win32-system-wall-clock-ms.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/model/win32-system-wall-clock-ms.cc	2015-02-05 15:46:23.000000000 -0800
@@ -22,21 +22,37 @@
 
 #include <ctime>
 
+/**
+ * \file
+ * \ingroup system
+ * Wall clock class ns3::SystemWallClockMs implementation
+ * for Windows-32 systems.
+ */
+
 namespace ns3 {
 
+/**
+ * \ingroup system
+ * \brief System-dependent implementation for SystemWallClockMs
+ */
 class SystemWallClockMsPrivate {
 public:
+  /** \copydoc SystemWallClockMs::Start() */
   void Start (void);
+  /** \copydoc SystemWallClockMs::End() */
   int64_t End (void);
+  /** \copydoc SystemWallClockMs::GetElapsedReal() */
   int64_t GetElapsedReal (void) const;
+  /** \copydoc SystemWallClockMs::GetElapsedUser() */
   int64_t GetElapsedUser (void) const;
+  /** \copydoc SystemWallClockMs::GetElapsedSystem() */
   int64_t GetElapsedSystem (void) const;
 
 private:
-  clock_t m_startTime;
-  int64_t m_elapsedReal;
-  int64_t m_elapsedUser;
-  int64_t m_elapsedSystem;
+  clock_t m_startTime;      //!< The wall clock start time.
+  int64_t m_elapsedReal;    //!< Elapsed real time, in ms.  
+  int64_t m_elapsedUser;    //!< Elapsed user time, in ms.  
+  int64_t m_elapsedSystem;  //!< Elapsed system time, in ms.
 };
 
 void 
diff -Naur ns-3.21/src/core/test/attribute-test-suite.cc ns-3.22/src/core/test/attribute-test-suite.cc
--- ns-3.21/src/core/test/attribute-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/test/attribute-test-suite.cc	2015-02-05 15:46:23.000000000 -0800
@@ -37,13 +37,29 @@
 
 using namespace ns3;
 
+/**
+ * Test class for TracedValue callbacks.
+ * \see attribute_ValueClassTest
+ */
 class ValueClassTest 
 {
 public:
   ValueClassTest () {}
+  
+  /**
+   * TracedValue callback signature for ValueClassTest
+   *
+   * \param [in] oldValue original value of the traced variable
+   * \param [in] newValue new value of the traced variable
+   */
+  typedef void (* TracedValueCallback)(const ValueClassTest oldValue,
+                                       const ValueClassTest newValue);
+
 private:
   int m_v;
 };
+
+
 bool operator != (const ValueClassTest &a, const ValueClassTest &b)
 {
   return true;
@@ -56,6 +72,7 @@
 {
   return is;
 }
+
 ATTRIBUTE_HELPER_HEADER (ValueClassTest);
 ATTRIBUTE_HELPER_CPP (ValueClassTest);
 
@@ -170,11 +187,14 @@
                      MakeValueClassTestAccessor (&AttributeObjectTest::m_valueSrc),
                      MakeValueClassTestChecker ())
       .AddTraceSource ("Source1", "help test",
-                       MakeTraceSourceAccessor (&AttributeObjectTest::m_intSrc1))
+                       MakeTraceSourceAccessor (&AttributeObjectTest::m_intSrc1),
+                       "ns3::TracedValue::Int8Callback")
       .AddTraceSource ("Source2", "help text",
-                       MakeTraceSourceAccessor (&AttributeObjectTest::m_cb))
+                       MakeTraceSourceAccessor (&AttributeObjectTest::m_cb),
+                       "ns3::AttributeObjectTest::NumericTracedCallback")
       .AddTraceSource ("ValueSource", "help text",
-                       MakeTraceSourceAccessor (&AttributeObjectTest::m_valueSrc))
+                       MakeTraceSourceAccessor (&AttributeObjectTest::m_valueSrc),
+                       "ns3::ValueClassTest::TracedValueCallback")
       .AddAttribute ("Pointer", "help text",
                      PointerValue (),
                      MakePointerAccessor (&AttributeObjectTest::m_ptr),
@@ -251,6 +271,8 @@
   Callback<void,int8_t> m_cbValue;
   TracedValue<int8_t> m_intSrc1;
   TracedValue<int8_t> m_intSrc2;
+
+  typedef void (* NumericTracedCallback) (const double, const int, const float);
   TracedCallback<double, int, float> m_cb;
   TracedValue<ValueClassTest> m_valueSrc;
   Ptr<Derived> m_ptr;
diff -Naur ns-3.21/src/core/test/config-test-suite.cc ns-3.22/src/core/test/config-test-suite.cc
--- ns-3.21/src/core/test/config-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/test/config-test-suite.cc	2015-02-05 15:46:23.000000000 -0800
@@ -97,7 +97,8 @@
                    MakeIntegerAccessor (&ConfigTestObject::m_trace),
                    MakeIntegerChecker<int16_t> ())
     .AddTraceSource ("Source", "XX",
-                     MakeTraceSourceAccessor (&ConfigTestObject::m_trace))
+                     MakeTraceSourceAccessor (&ConfigTestObject::m_trace),
+                     "ns3::TracedValue::Int16Callback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/core/test/int64x64-test-suite.cc ns-3.22/src/core/test/int64x64-test-suite.cc
--- ns-3.21/src/core/test/int64x64-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/test/int64x64-test-suite.cc	2015-02-05 15:46:23.000000000 -0800
@@ -1,3 +1,22 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 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
+ *
+ */
+
 #include "ns3/int64x64.h"
 #include "ns3/test.h"
 #include "ns3/valgrind.h"  // Bug 1882
@@ -35,9 +54,18 @@
  */
 
 
+/**
+ * Pretty printer for test cases.
+ */
 class Printer
 {
 public:
+  /**
+   * Construct from high and low words of Q64.64 representation.
+   *
+   * \param [in] high The integer portion.
+   * \param [in] low The fractional portion.
+   */
   Printer (const int64_t high, const uint64_t low)
     : m_haveInt (false),
       m_value (0),
@@ -45,6 +73,11 @@
       m_low (low)
   { }
 
+  /**
+   * Construct from an \c int64x64_t Q64.64 value.
+   *
+   * \param [in] value The value.
+   */
   Printer (const int64x64_t value)
     : m_haveInt (true),
       m_value (value),
@@ -53,12 +86,19 @@
   { }
 
 private:
+  /**
+   * Output streamer, the main reason for this class.
+   *
+   * \param [in] os The stream.
+   * \param [in] p The value to print.
+   * \returns The stream.
+   */
   friend std::ostream & operator << (std::ostream & os, const Printer & p);
 
-  bool       m_haveInt;
-  int64x64_t m_value;
-  int64_t    m_high;
-  uint64_t   m_low;
+  bool       m_haveInt;  /**< Do we have a full int64x64_t value? */
+  int64x64_t m_value;    /**< The int64x64_t value. */
+  int64_t    m_high;     /**< The high (integer) word. */
+  uint64_t   m_low;      /**< The low (fractional) word. */
 };
 
 std::ostream & operator << (std::ostream & os, const Printer & p)
@@ -77,7 +117,7 @@
   return os;
 }
 
-	      
+
 class Int64x64HiLoTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/core/test/random-variable-test-suite.cc ns-3.22/src/core/test/random-variable-test-suite.cc
--- ns-3.21/src/core/test/random-variable-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/test/random-variable-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,145 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-//
-// Copyright (c) 2006 Georgia Tech Research Corporation
-//
-// 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: Rajib Bhattacharjea<raj.b@gatech.edu>
-// Author: Hadi Arbabi<marbabi@cs.odu.edu>
-//
-
-#include <iostream>
-#include <cmath>
-#include <vector>
-
-#include "ns3/test.h"
-#include "ns3/assert.h"
-#include "ns3/integer.h"
-#include "ns3/random-variable.h"
-
-using namespace ns3;
-
-class BasicRandomNumberTestCase : public TestCase
-{
-public:
-  BasicRandomNumberTestCase ();
-  virtual ~BasicRandomNumberTestCase ()
-  {
-  }
-
-private:
-  virtual void DoRun (void);
-};
-
-BasicRandomNumberTestCase::BasicRandomNumberTestCase ()
-  : TestCase ("Check basic random number operation")
-{
-}
-
-void
-BasicRandomNumberTestCase::DoRun (void)
-{
-  const double desiredMean = 1.0;
-  const double desiredStdDev = 1.0;
-
-  double tmp = std::log (1 + (desiredStdDev / desiredMean) * (desiredStdDev / desiredMean));
-  double sigma = std::sqrt (tmp);
-  double mu = std::log (desiredMean) - 0.5 * tmp;
-
-  //
-  // Test a custom lognormal instance to see if its moments have any relation
-  // expected reality.
-  //
-  LogNormalVariable lognormal (mu, sigma);
-  std::vector<double> samples;
-  const int NSAMPLES = 10000;
-  double sum = 0;
-
-  //
-  // Get and store a bunch of samples.  As we go along sum them and then find
-  // the mean value of the samples.
-  //
-  for (int n = NSAMPLES; n; --n)
-    {
-      double value = lognormal.GetValue ();
-      sum += value;
-      samples.push_back (value);
-    }
-  double obtainedMean = sum / NSAMPLES;
-  NS_TEST_EXPECT_MSG_EQ_TOL (obtainedMean, desiredMean, 0.1, "Got unexpected mean value from LogNormalVariable");
-
-  //
-  // Wander back through the saved stamples and find their standard deviation
-  //
-  sum = 0;
-  for (std::vector<double>::iterator iter = samples.begin (); iter != samples.end (); iter++)
-    {
-      double tmp = (*iter - obtainedMean);
-      sum += tmp * tmp;
-    }
-  double obtainedStdDev = std::sqrt (sum / (NSAMPLES - 1));
-  NS_TEST_EXPECT_MSG_EQ_TOL (obtainedStdDev, desiredStdDev, 0.1, "Got unexpected standard deviation from LogNormalVariable");
-}
-
-class RandomNumberSerializationTestCase : public TestCase
-{
-public:
-  RandomNumberSerializationTestCase ();
-  virtual ~RandomNumberSerializationTestCase ()
-  {
-  }
-
-private:
-  virtual void DoRun (void);
-};
-
-RandomNumberSerializationTestCase::RandomNumberSerializationTestCase ()
-  : TestCase ("Check basic random number operation")
-{
-}
-
-void
-RandomNumberSerializationTestCase::DoRun (void)
-{
-  RandomVariableValue val;
-  val.DeserializeFromString ("Uniform:0.1:0.2", MakeRandomVariableChecker ());
-  RandomVariable rng = val.Get ();
-  NS_TEST_ASSERT_MSG_EQ (val.SerializeToString (MakeRandomVariableChecker ()), "Uniform:0.1:0.2",
-                         "Deserialize and Serialize \"Uniform:0.1:0.2\" mismatch");
-
-  val.DeserializeFromString ("Normal:0.1:0.2", MakeRandomVariableChecker ());
-  rng = val.Get ();
-  NS_TEST_ASSERT_MSG_EQ (val.SerializeToString (MakeRandomVariableChecker ()), "Normal:0.1:0.2",
-                         "Deserialize and Serialize \"Normal:0.1:0.2\" mismatch");
-
-  val.DeserializeFromString ("Normal:0.1:0.2:0.15", MakeRandomVariableChecker ());
-  rng = val.Get ();
-  NS_TEST_ASSERT_MSG_EQ (val.SerializeToString (MakeRandomVariableChecker ()), "Normal:0.1:0.2:0.15",
-                         "Deserialize and Serialize \"Normal:0.1:0.2:0.15\" mismatch");
-}
-
-class BasicRandomNumberTestSuite : public TestSuite
-{
-public:
-  BasicRandomNumberTestSuite ();
-};
-
-BasicRandomNumberTestSuite::BasicRandomNumberTestSuite ()
-  : TestSuite ("basic-random-number", UNIT)
-{
-  AddTestCase (new BasicRandomNumberTestCase, TestCase::QUICK);
-  AddTestCase (new RandomNumberSerializationTestCase, TestCase::QUICK);
-}
-
-static BasicRandomNumberTestSuite BasicRandomNumberTestSuite;
diff -Naur ns-3.21/src/core/test/rng-test-suite.cc ns-3.22/src/core/test/rng-test-suite.cc
--- ns-3.21/src/core/test/rng-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/test/rng-test-suite.cc	2015-02-05 15:46:23.000000000 -0800
@@ -22,7 +22,9 @@
 #include <fstream>
 
 #include "ns3/test.h"
-#include "ns3/random-variable.h"
+#include "ns3/double.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/rng-seed-manager.h"
 
 using namespace ns3;
 
@@ -52,7 +54,7 @@
   RngUniformTestCase ();
   virtual ~RngUniformTestCase ();
 
-  double ChiSquaredTest (UniformVariable &u);
+  double ChiSquaredTest (Ptr<UniformRandomVariable> u);
 
 private:
   virtual void DoRun (void);
@@ -68,14 +70,14 @@
 }
 
 double
-RngUniformTestCase::ChiSquaredTest (UniformVariable &u)
+RngUniformTestCase::ChiSquaredTest (Ptr<UniformRandomVariable> u)
 {
  gsl_histogram * h = gsl_histogram_alloc (N_BINS);
   gsl_histogram_set_ranges_uniform (h, 0., 1.);
 
   for (uint32_t i = 0; i < N_MEASUREMENTS; ++i)
     {
-      gsl_histogram_increment (h, u.GetValue ());
+      gsl_histogram_increment (h, u->GetValue ());
     }
 
   double tmp[N_BINS];
@@ -105,14 +107,14 @@
 void
 RngUniformTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  RngSeedManager::SetSeed (static_cast<uint32_t> (time (0)));
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
 
   for (uint32_t i = 0; i < N_RUNS; ++i)
     {
-      UniformVariable u;
+      Ptr<UniformRandomVariable> u = CreateObject<UniformRandomVariable> ();
       double result = ChiSquaredTest (u);
       sum += result;
     }
@@ -135,7 +137,7 @@
   RngNormalTestCase ();
   virtual ~RngNormalTestCase ();
 
-  double ChiSquaredTest (NormalVariable &n);
+  double ChiSquaredTest (Ptr<NormalRandomVariable> n);
 
 private:
   virtual void DoRun (void);
@@ -151,7 +153,7 @@
 }
 
 double
-RngNormalTestCase::ChiSquaredTest (NormalVariable &n)
+RngNormalTestCase::ChiSquaredTest (Ptr<NormalRandomVariable> n)
 {
   gsl_histogram * h = gsl_histogram_alloc (N_BINS);
 
@@ -174,7 +176,7 @@
 
   for (uint32_t i = 0; i < N_MEASUREMENTS; ++i)
     {
-      gsl_histogram_increment (h, n.GetValue ());
+      gsl_histogram_increment (h, n->GetValue ());
     }
 
   double tmp[N_BINS];
@@ -202,14 +204,14 @@
 void
 RngNormalTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  RngSeedManager::SetSeed (static_cast<uint32_t> (time (0)));
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
 
   for (uint32_t i = 0; i < N_RUNS; ++i)
     {
-      NormalVariable n;
+      Ptr<NormalRandomVariable> n = CreateObject<NormalRandomVariable> ();
       double result = ChiSquaredTest (n);
       sum += result;
     }
@@ -232,7 +234,7 @@
   RngExponentialTestCase ();
   virtual ~RngExponentialTestCase ();
 
-  double ChiSquaredTest (ExponentialVariable &n);
+  double ChiSquaredTest (Ptr<ExponentialRandomVariable> n);
 
 private:
   virtual void DoRun (void);
@@ -248,7 +250,7 @@
 }
 
 double
-RngExponentialTestCase::ChiSquaredTest (ExponentialVariable &e)
+RngExponentialTestCase::ChiSquaredTest (Ptr<ExponentialRandomVariable> e)
 {
   gsl_histogram * h = gsl_histogram_alloc (N_BINS);
 
@@ -270,7 +272,7 @@
 
   for (uint32_t i = 0; i < N_MEASUREMENTS; ++i)
     {
-      gsl_histogram_increment (h, e.GetValue ());
+      gsl_histogram_increment (h, e->GetValue ());
     }
 
   double tmp[N_BINS];
@@ -298,14 +300,14 @@
 void
 RngExponentialTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  RngSeedManager::SetSeed (static_cast<uint32_t> (time (0)));
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
 
   for (uint32_t i = 0; i < N_RUNS; ++i)
     {
-      ExponentialVariable e;
+      Ptr<ExponentialRandomVariable> e = CreateObject<ExponentialRandomVariable> ();
       double result = ChiSquaredTest (e);
       sum += result;
     }
@@ -328,7 +330,7 @@
   RngParetoTestCase ();
   virtual ~RngParetoTestCase ();
 
-  double ChiSquaredTest (ParetoVariable &p);
+  double ChiSquaredTest (Ptr<ParetoRandomVariable> p);
 
 private:
   virtual void DoRun (void);
@@ -344,7 +346,7 @@
 }
 
 double
-RngParetoTestCase::ChiSquaredTest (ParetoVariable &p)
+RngParetoTestCase::ChiSquaredTest (Ptr<ParetoRandomVariable> p)
 {
   gsl_histogram * h = gsl_histogram_alloc (N_BINS);
 
@@ -359,6 +361,8 @@
   double a = 1.5;
   double b = 0.33333333;
 
+  // mean is 1 with these values
+
   for (uint32_t i = 0; i < N_BINS; ++i)
     {
       expected[i] = gsl_cdf_pareto_P (range[i + 1], a, b) - gsl_cdf_pareto_P (range[i], a, b);
@@ -367,7 +371,7 @@
 
   for (uint32_t i = 0; i < N_MEASUREMENTS; ++i)
     {
-      gsl_histogram_increment (h, p.GetValue ());
+      gsl_histogram_increment (h, p->GetValue ());
     }
 
   double tmp[N_BINS];
@@ -395,14 +399,15 @@
 void
 RngParetoTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  RngSeedManager::SetSeed (static_cast<uint32_t> (time (0)));
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
 
   for (uint32_t i = 0; i < N_RUNS; ++i)
     {
-      ParetoVariable e;
+      Ptr<ParetoRandomVariable> e = CreateObject<ParetoRandomVariable> ();
+      e->SetAttribute ("Shape", DoubleValue (1.5));
       double result = ChiSquaredTest (e);
       sum += result;
     }
diff -Naur ns-3.21/src/core/test/sample-test-suite.cc ns-3.22/src/core/test/sample-test-suite.cc
--- ns-3.21/src/core/test/sample-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/test/sample-test-suite.cc	2015-02-05 15:46:23.000000000 -0800
@@ -1,4 +1,21 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 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
+ *
+ */
 
 // An essential include is test.h
 #include "ns3/test.h"
diff -Naur ns-3.21/src/core/wscript ns-3.22/src/core/wscript
--- ns-3.21/src/core/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/core/wscript	2015-02-05 15:46:23.000000000 -0800
@@ -157,7 +157,6 @@
         'model/ref-count-base.cc',
         'model/object.cc',
         'model/test.cc',
-        'model/random-variable.cc',
         'model/random-variable-stream.cc',
         'model/rng-seed-manager.cc',
         'model/rng-stream.cc',
@@ -201,7 +200,6 @@
         'test/names-test-suite.cc',
         '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',
@@ -254,7 +252,6 @@
         'model/breakpoint.h',
         'model/fatal-error.h',
         'model/test.h',
-        'model/random-variable.h',
         'model/random-variable-stream.h',
         'model/rng-seed-manager.h',
         'model/rng-stream.h',
diff -Naur ns-3.21/src/csma/bindings/modulegen__gcc_ILP32.py ns-3.22/src/csma/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/csma/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:23.000000000 -0800
@@ -1862,10 +1862,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2245,10 +2245,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2512,7 +2512,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2563,6 +2568,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2639,6 +2649,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2673,6 +2687,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5090,11 +5106,6 @@
                    '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', 
@@ -5165,6 +5176,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/csma/bindings/modulegen__gcc_LP64.py ns-3.22/src/csma/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/csma/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:23.000000000 -0800
@@ -1862,10 +1862,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2245,10 +2245,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2512,7 +2512,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2563,6 +2568,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2639,6 +2649,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2673,6 +2687,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5090,11 +5106,6 @@
                    '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', 
@@ -5165,6 +5176,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/csma/helper/csma-helper.cc ns-3.22/src/csma/helper/csma-helper.cc
--- ns-3.21/src/csma/helper/csma-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma/helper/csma-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -34,10 +34,10 @@
 
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("CsmaHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CsmaHelper");
+
 CsmaHelper::CsmaHelper ()
 {
   m_queueFactory.SetTypeId ("ns3::DropTailQueue");
diff -Naur ns-3.21/src/csma/helper/csma-helper.h ns-3.22/src/csma/helper/csma-helper.h
--- ns-3.21/src/csma/helper/csma-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma/helper/csma-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -27,7 +27,6 @@
 #include "ns3/net-device-container.h"
 #include "ns3/node-container.h"
 #include "ns3/csma-channel.h"
-#include "ns3/deprecated.h"
 #include "ns3/trace-helper.h"
 
 namespace ns3 {
@@ -206,14 +205,11 @@
   int64_t AssignStreams (NetDeviceContainer c, int64_t stream);
 
 private:
-  /*
-   * \internal
-   */
+
   Ptr<NetDevice> InstallPriv (Ptr<Node> node, Ptr<CsmaChannel> channel) const;
 
   /**
    * \brief Enable pcap output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
@@ -227,7 +223,6 @@
 
   /**
    * \brief Enable ascii trace output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
diff -Naur ns-3.21/src/csma/model/backoff.cc ns-3.22/src/csma/model/backoff.cc
--- ns-3.21/src/csma/model/backoff.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma/model/backoff.cc	2015-02-05 15:46:23.000000000 -0800
@@ -21,10 +21,10 @@
 #include "backoff.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Backoff");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Backoff");
+
 Backoff::Backoff () 
 {
   m_slotTime = MicroSeconds (1);
diff -Naur ns-3.21/src/csma/model/csma-channel.cc ns-3.22/src/csma/model/csma-channel.cc
--- ns-3.21/src/csma/model/csma-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma/model/csma-channel.cc	2015-02-05 15:46:23.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/simulator.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("CsmaChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CsmaChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (CsmaChannel);
 
 TypeId
diff -Naur ns-3.21/src/csma/model/csma-net-device.cc ns-3.22/src/csma/model/csma-net-device.cc
--- ns-3.21/src/csma/model/csma-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma/model/csma-net-device.cc	2015-02-05 15:46:23.000000000 -0800
@@ -33,10 +33,10 @@
 #include "csma-net-device.h"
 #include "csma-channel.h"
 
-NS_LOG_COMPONENT_DEFINE ("CsmaNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CsmaNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (CsmaNetDevice);
 
 TypeId
@@ -92,62 +92,92 @@
     // to/from higher layers.
     //
     .AddTraceSource ("MacTx", 
-                     "Trace source indicating a packet has arrived for transmission by this device",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macTxTrace))
+                     "Trace source indicating a packet has "
+                     "arrived for transmission by this device",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macTxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTxDrop", 
-                     "Trace source indicating a packet has been dropped by the device before transmission",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macTxDropTrace))
+                     "Trace source indicating a packet has been "
+                     "dropped by the device before transmission",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacPromiscRx", 
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macPromiscRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a promiscuous trace,",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRx", 
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a non-promiscuous trace,",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macRxTrace),
+                     "ns3::Packet::TracedCallback")
 #if 0
     // Not currently implemented in this device
     .AddTraceSource ("MacRxDrop", 
-                     "Trace source indicating a packet was received, but dropped before being forwarded up the stack",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macRxDropTrace))
+                     "Trace source indicating a packet was received, "
+                     "but dropped before being forwarded up the stack",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macRxDropTrace),
+                     "ns3::Packet::TracedCallback")
 #endif
     .AddTraceSource ("MacTxBackoff", 
-                     "Trace source indicating a packet has been delayed by the CSMA backoff process",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macTxBackoffTrace))
+                     "Trace source indicating a packet has been "
+                     "delayed by the CSMA backoff process",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_macTxBackoffTrace),
+                     "ns3::Packet::TracedCallback")
     //
     // Trace souces at the "bottom" of the net device, where packets transition
     // to/from the channel.
     //
     .AddTraceSource ("PhyTxBegin", 
-                     "Trace source indicating a packet has begun transmitting over the channel",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyTxBeginTrace))
+                     "Trace source indicating a packet has "
+                     "begun transmitting over the channel",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyTxBeginTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxEnd", 
-                     "Trace source indicating a packet has been completely transmitted over the channel",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyTxEndTrace))
+                     "Trace source indicating a packet has been "
+                     "completely transmitted over the channel",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyTxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxDrop", 
-                     "Trace source indicating a packet has been dropped by the device during transmission",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyTxDropTrace))
+                     "Trace source indicating a packet has been "
+                     "dropped by the device during transmission",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyTxDropTrace),
+                     "ns3::Packet::TracedCallback")
 #if 0
     // Not currently implemented in this device
     .AddTraceSource ("PhyRxBegin", 
-                     "Trace source indicating a packet has begun being received by the device",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyRxBeginTrace))
+                     "Trace source indicating a packet has "
+                     "begun being received by the device",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyRxBeginTrace),
+                     "ns3::Packet::TracedCallback")
 #endif
     .AddTraceSource ("PhyRxEnd", 
-                     "Trace source indicating a packet has been completely received by the device",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyRxEndTrace))
+                     "Trace source indicating a packet has been "
+                     "completely received by the device",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyRxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxDrop", 
-                     "Trace source indicating a packet has been dropped by the device during reception",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyRxDropTrace))
+                     "Trace source indicating a packet has been "
+                     "dropped by the device during reception",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_phyRxDropTrace),
+                     "ns3::Packet::TracedCallback")
     //
     // Trace sources designed to simulate a packet sniffer facility (tcpdump). 
     //
     .AddTraceSource ("Sniffer", 
-                     "Trace source simulating a non-promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_snifferTrace))
+                     "Trace source simulating a non-promiscuous "
+                     "packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_snifferTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PromiscSniffer", 
-                     "Trace source simulating a promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&CsmaNetDevice::m_promiscSnifferTrace))
+                     "Trace source simulating a promiscuous "
+                     "packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&CsmaNetDevice::m_promiscSnifferTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/csma-layout/bindings/modulegen__gcc_ILP32.py ns-3.22/src/csma-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:23.000000000 -0800
@@ -2099,11 +2099,6 @@
     cls.add_method('NewAddress', 
                    'ns3::Ipv6Address', 
                    [])
-    ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork(ns3::Ipv6Address network, ns3::Ipv6Prefix prefix) [member function]
-    cls.add_method('NewNetwork', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'prefix')], 
-                   deprecated=True)
     ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork() [member function]
     cls.add_method('NewNetwork', 
                    'void', 
@@ -2244,11 +2239,6 @@
     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')], 
-                   deprecated=True)
     return
 
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
@@ -2428,10 +2418,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2811,10 +2801,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3150,7 +3140,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3201,6 +3196,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3277,6 +3277,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3311,6 +3315,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5861,11 +5867,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -6933,11 +6934,6 @@
                    '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', 
@@ -7008,6 +7004,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/csma-layout/bindings/modulegen__gcc_LP64.py ns-3.22/src/csma-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/csma-layout/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma-layout/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:23.000000000 -0800
@@ -2099,11 +2099,6 @@
     cls.add_method('NewAddress', 
                    'ns3::Ipv6Address', 
                    [])
-    ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork(ns3::Ipv6Address network, ns3::Ipv6Prefix prefix) [member function]
-    cls.add_method('NewNetwork', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'prefix')], 
-                   deprecated=True)
     ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork() [member function]
     cls.add_method('NewNetwork', 
                    'void', 
@@ -2244,11 +2239,6 @@
     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')], 
-                   deprecated=True)
     return
 
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
@@ -2428,10 +2418,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2811,10 +2801,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3150,7 +3140,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3201,6 +3196,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3277,6 +3277,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3311,6 +3315,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5861,11 +5867,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -6933,11 +6934,6 @@
                    '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', 
@@ -7008,6 +7004,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/csma-layout/model/csma-star-helper.cc ns-3.22/src/csma-layout/model/csma-star-helper.cc
--- ns-3.21/src/csma-layout/model/csma-star-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/csma-layout/model/csma-star-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/vector.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("CsmaStarHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CsmaStarHelper");
+
 CsmaStarHelper::CsmaStarHelper (uint32_t numSpokes,
                                 CsmaHelper csmaHelper)
 {
diff -Naur ns-3.21/src/dsdv/bindings/modulegen__gcc_ILP32.py ns-3.22/src/dsdv/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/dsdv/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1493,26 +1493,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
@@ -1846,10 +1866,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2437,7 +2457,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2488,6 +2513,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2564,6 +2594,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2598,6 +2632,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5260,11 +5296,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -5976,11 +6007,6 @@
                    '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', 
@@ -6051,6 +6077,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/dsdv/bindings/modulegen__gcc_LP64.py ns-3.22/src/dsdv/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/dsdv/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1493,26 +1493,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
@@ -1846,10 +1866,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2437,7 +2457,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2488,6 +2513,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2564,6 +2594,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2598,6 +2632,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5260,11 +5296,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -5976,11 +6007,6 @@
                    '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', 
@@ -6051,6 +6077,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/dsdv/helper/dsdv-helper.h ns-3.22/src/dsdv/helper/dsdv-helper.h
--- ns-3.21/src/dsdv/helper/dsdv-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/helper/dsdv-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -48,7 +48,6 @@
   DsdvHelper ();
   ~DsdvHelper ();
   /**
-   * \internal
    * \returns pointer to clone of this DsdvHelper
    *
    * This method is mainly for internal use by the other helpers;
@@ -73,7 +72,7 @@
   void Set (std::string name, const AttributeValue &value);
 
 private:
-  ObjectFactory m_agentFactory;
+  ObjectFactory m_agentFactory; //!< Object factory
 };
 
 }
diff -Naur ns-3.21/src/dsdv/model/dsdv-packet-queue.cc ns-3.22/src/dsdv/model/dsdv-packet-queue.cc
--- ns-3.21/src/dsdv/model/dsdv-packet-queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/model/dsdv-packet-queue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,9 +35,10 @@
 #include "ns3/socket.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsdvPacketQueue");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsdvPacketQueue");
+  
 namespace dsdv {
 uint32_t
 PacketQueue::GetSize ()
diff -Naur ns-3.21/src/dsdv/model/dsdv-packet-queue.h ns-3.22/src/dsdv/model/dsdv-packet-queue.h
--- ns-3.21/src/dsdv/model/dsdv-packet-queue.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/model/dsdv-packet-queue.h	2015-02-05 15:46:22.000000000 -0800
@@ -67,8 +67,8 @@
   {
     return ((m_packet == o.m_packet) && (m_header.GetDestination () == o.m_header.GetDestination ()) && (m_expire == o.m_expire));
   }
-  ///\name Fields
-  // \{
+  
+  // Fields
   UnicastForwardCallback GetUnicastForwardCallback () const
   {
     return m_ucb;
@@ -109,7 +109,7 @@
   {
     return m_expire - Simulator::Now ();
   }
-  // \}
+
 private:
   /// Data packet
   Ptr<const Packet> m_packet;
@@ -150,8 +150,8 @@
   GetCountForPacketsWithDst (Ipv4Address dst);
   /// Number of entries
   uint32_t GetSize ();
-  ///\name Fields
-  // \{
+  
+  // Fields
   uint32_t GetMaxQueueLen () const
   {
     return m_maxLen;
@@ -176,7 +176,6 @@
   {
     m_queueTimeout = t;
   }
-  // \}
 
 private:
   std::vector<QueueEntry> m_queue;
diff -Naur ns-3.21/src/dsdv/model/dsdv-routing-protocol.cc ns-3.22/src/dsdv/model/dsdv-routing-protocol.cc
--- ns-3.21/src/dsdv/model/dsdv-routing-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/model/dsdv-routing-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,9 +40,10 @@
 #include "ns3/double.h"
 #include "ns3/uinteger.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsdvRoutingProtocol");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsdvRoutingProtocol");
+  
 namespace dsdv {
   
 NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
diff -Naur ns-3.21/src/dsdv/model/dsdv-routing-protocol.h ns-3.22/src/dsdv/model/dsdv-routing-protocol.h
--- ns-3.21/src/dsdv/model/dsdv-routing-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/model/dsdv-routing-protocol.h	2015-02-05 15:46:22.000000000 -0800
@@ -64,8 +64,7 @@
   virtual void
   DoDispose ();
 
-  ///\name From Ipv4RoutingProtocol
-  // \{
+  // From Ipv4RoutingProtocol
   Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr);
   bool RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev, UnicastForwardCallback ucb,
                    MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb);
@@ -75,16 +74,14 @@
   virtual void NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address);
   virtual void NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address);
   virtual void SetIpv4 (Ptr<Ipv4> ipv4);
-  // \}
-  ///\name Methods to handle protocol parameters
-  // \{
+
+  // Methods to handle protocol parameters
   void SetEnableBufferFlag (bool f);
   bool GetEnableBufferFlag () const;
   void SetWSTFlag (bool f);
   bool GetWSTFlag () const;
   void SetEnableRAFlag (bool f);
   bool GetEnableRAFlag () const;
-  // \}
 
  /**
   * Assign a fixed random variable stream number to the random variables
@@ -97,8 +94,8 @@
   int64_t AssignStreams (int64_t stream);
 
 private:
-  ///\name Protocol parameters.
-  // \{
+  
+  // Protocol parameters.
   /// Holdtimes is the multiplicative factor of PeriodicUpdateInterval for which the node waits since the last update
   /// before flushing a route from the routing table. If PeriodicUpdateInterval is 8s and Holdtimes is 3, the node
   /// waits for 24s since the last update to flush this route from its routing table.
@@ -144,9 +141,9 @@
   UnicastForwardCallback m_scb;
   /// Error callback for own packets
   ErrorCallback m_ecb;
-  // \}
 
 private:
+  
   /// Start protocol operation
   void
   Start ();
@@ -166,12 +163,12 @@
   /// Find socket with local interface address iface
   Ptr<Socket>
   FindSocketWithInterfaceAddress (Ipv4InterfaceAddress iface) const;
-  ///\name Receive dsdv control packets
-  // \{
+  
+  // Receive dsdv control packets
   /// Receive and process dsdv control packet
   void
   RecvDsdv (Ptr<Socket> socket);
-  // \}
+
   void
   Send (Ptr<Ipv4Route>, Ptr<const Packet>, const Ipv4Header &);
   /// Create loopback route for given header
diff -Naur ns-3.21/src/dsdv/model/dsdv-rtable.cc ns-3.22/src/dsdv/model/dsdv-rtable.cc
--- ns-3.21/src/dsdv/model/dsdv-rtable.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/model/dsdv-rtable.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,9 +33,10 @@
 #include <iomanip>
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsdvRoutingTable");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsdvRoutingTable");
+  
 namespace dsdv {
 RoutingTableEntry::RoutingTableEntry (Ptr<NetDevice> dev,
                                       Ipv4Address dst,
diff -Naur ns-3.21/src/dsdv/model/dsdv-rtable.h ns-3.22/src/dsdv/model/dsdv-rtable.h
--- ns-3.21/src/dsdv/model/dsdv-rtable.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsdv/model/dsdv-rtable.h	2015-02-05 15:46:22.000000000 -0800
@@ -180,8 +180,8 @@
   Print (Ptr<OutputStreamWrapper> stream) const;
 
 private:
-  ///\name Fields
-  // \{
+  
+  // Fields
   /// Destination Sequence Number
   uint32_t m_seqNo;
   /// Hop Count (number of hops needed to reach destination)
@@ -209,7 +209,7 @@
   Time m_settlingTime;
   /// Flag to show if any of the routing table entries were changed with the routing update.
   uint32_t m_entriesChanged;
-  //\}
+
 };
 
 /**
@@ -321,8 +321,8 @@
     */
   EventId
   GetEventId (Ipv4Address address);
-  ///\name Handle life time of invalid route
-  // \{
+  
+  // Handle life time of invalid route
   Time Getholddowntime () const
   {
     return m_holddownTime;
@@ -331,18 +331,17 @@
   {
     m_holddownTime = t;
   }
-  // \}
 
 private:
-  ///\name Fields
-  // \{
+  
+  // Fields
   /// an entry in the routing table.
   std::map<Ipv4Address, RoutingTableEntry> m_ipv4AddressEntry;
   /// an entry in the event table.
   std::map<Ipv4Address, EventId> m_ipv4Events;
   ///
   Time m_holddownTime;
-  // \}
+
 };
 }
 }
diff -Naur ns-3.21/src/dsr/bindings/modulegen__gcc_ILP32.py ns-3.22/src/dsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/dsr/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -23,7 +23,7 @@
     ## 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_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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], 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]
@@ -2320,10 +2320,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2941,7 +2941,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2992,6 +2997,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3068,6 +3078,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3102,6 +3116,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3267,6 +3283,8 @@
     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_ness [variable]
+    cls.add_instance_attribute('m_ness', 'uint32_t', 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]
@@ -5446,6 +5464,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiMac::GetWifiPhy() const [member function]
+    cls.add_method('GetWifiPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiRemoteStationManager> ns3::WifiMac::GetWifiRemoteStationManager() const [member function]
+    cls.add_method('GetWifiRemoteStationManager', 
+                   'ns3::Ptr< ns3::WifiRemoteStationManager >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyPromiscRx', 
                    'void', 
@@ -5466,6 +5494,11 @@
     cls.add_method('NotifyTxDrop', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -6014,11 +6047,10 @@
                    '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -6044,6 +6076,11 @@
                    'uint16_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -6464,14 +6501,13 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
@@ -6479,19 +6515,19 @@
                    '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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
                    [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')], 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
@@ -6606,10 +6642,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
     cls.add_method('SetChannelBonding', 
@@ -6671,6 +6707,11 @@
                    'void', 
                    [param('bool', 'stbc')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -6683,6 +6724,10 @@
     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::AddAllSupportedModes(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedModes', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
@@ -6941,6 +6986,11 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -6961,6 +7011,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiRemoteStationManager::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::WifiMac >', 
+                   [], 
+                   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', 
@@ -6976,6 +7031,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNess(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNess', 
+                   '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', 
@@ -6986,6 +7046,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   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', 
@@ -7274,6 +7339,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintArpCache', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -7632,14 +7701,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -7677,8 +7746,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -7699,10 +7768,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -8650,11 +8719,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -8871,6 +8935,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NdiscCache> ns3::Ipv6Interface::GetNdiscCache() const [member function]
+    cls.add_method('GetNdiscCache', 
+                   'ns3::Ptr< ns3::NdiscCache >', 
+                   [], 
+                   is_const=True)
     ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
     cls.add_method('GetReachableTime', 
                    'uint16_t', 
@@ -9551,11 +9620,6 @@
                    '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', 
@@ -9626,6 +9690,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/dsr/bindings/modulegen__gcc_LP64.py ns-3.22/src/dsr/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/dsr/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -23,7 +23,7 @@
     ## 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_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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], 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]
@@ -2320,10 +2320,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2941,7 +2941,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2992,6 +2997,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3068,6 +3078,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3102,6 +3116,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3267,6 +3283,8 @@
     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_ness [variable]
+    cls.add_instance_attribute('m_ness', 'uint32_t', 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]
@@ -5446,6 +5464,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiMac::GetWifiPhy() const [member function]
+    cls.add_method('GetWifiPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiRemoteStationManager> ns3::WifiMac::GetWifiRemoteStationManager() const [member function]
+    cls.add_method('GetWifiRemoteStationManager', 
+                   'ns3::Ptr< ns3::WifiRemoteStationManager >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyPromiscRx', 
                    'void', 
@@ -5466,6 +5494,11 @@
     cls.add_method('NotifyTxDrop', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -6014,11 +6047,10 @@
                    '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -6044,6 +6076,11 @@
                    'uint16_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -6464,14 +6501,13 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
@@ -6479,19 +6515,19 @@
                    '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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
                    [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')], 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
@@ -6606,10 +6642,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
     cls.add_method('SetChannelBonding', 
@@ -6671,6 +6707,11 @@
                    'void', 
                    [param('bool', 'stbc')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -6683,6 +6724,10 @@
     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::AddAllSupportedModes(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedModes', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
@@ -6941,6 +6986,11 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -6961,6 +7011,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiRemoteStationManager::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::WifiMac >', 
+                   [], 
+                   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', 
@@ -6976,6 +7031,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNess(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNess', 
+                   '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', 
@@ -6986,6 +7046,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   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', 
@@ -7274,6 +7339,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintArpCache', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -7632,14 +7701,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -7677,8 +7746,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -7699,10 +7768,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -8650,11 +8719,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -8871,6 +8935,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NdiscCache> ns3::Ipv6Interface::GetNdiscCache() const [member function]
+    cls.add_method('GetNdiscCache', 
+                   'ns3::Ptr< ns3::NdiscCache >', 
+                   [], 
+                   is_const=True)
     ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
     cls.add_method('GetReachableTime', 
                    'uint16_t', 
@@ -9551,11 +9620,6 @@
                    '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', 
@@ -9626,6 +9690,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/dsr/examples/dsr.cc ns-3.22/src/dsr/examples/dsr.cc
--- ns-3.21/src/dsr/examples/dsr.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/examples/dsr.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,6 +40,7 @@
 #include <sstream>
 
 using namespace ns3;
+
 NS_LOG_COMPONENT_DEFINE ("DsrTest");
 
 int
diff -Naur ns-3.21/src/dsr/helper/dsr-helper.cc ns-3.22/src/dsr/helper/dsr-helper.cc
--- ns-3.21/src/dsr/helper/dsr-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/helper/dsr-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -43,10 +43,10 @@
 #include "ns3/node-list.h"
 #include "ns3/names.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsrHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DsrHelper");
+
 DsrHelper::DsrHelper ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/dsr/helper/dsr-helper.h ns-3.22/src/dsr/helper/dsr-helper.h
--- ns-3.21/src/dsr/helper/dsr-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/helper/dsr-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -56,7 +56,6 @@
    */
   DsrHelper (const DsrHelper &);
   /**
-   * \internal
    * \returns pointer to clone of this DsrHelper
    *
    * This method is mainly for internal use by the other helpers;
@@ -71,7 +70,6 @@
   void Set (std::string name, const AttributeValue &value);
 private:
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    */
diff -Naur ns-3.21/src/dsr/helper/dsr-main-helper.cc ns-3.22/src/dsr/helper/dsr-main-helper.cc
--- ns-3.21/src/dsr/helper/dsr-main-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/helper/dsr-main-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,10 +40,10 @@
 #include "ns3/ptr.h"
 #include "ns3/node.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsrMainHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DsrMainHelper");
+
 DsrMainHelper::DsrMainHelper ()
   : m_dsrHelper (0)
 {
diff -Naur ns-3.21/src/dsr/helper/dsr-main-helper.h ns-3.22/src/dsr/helper/dsr-main-helper.h
--- ns-3.21/src/dsr/helper/dsr-main-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/helper/dsr-main-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -62,7 +62,6 @@
 private:
   void Install (Ptr<Node> node);
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    */
diff -Naur ns-3.21/src/dsr/model/dsr-errorbuff.cc ns-3.22/src/dsr/model/dsr-errorbuff.cc
--- ns-3.21/src/dsr/model/dsr-errorbuff.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-errorbuff.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,9 +36,10 @@
 #include "ns3/socket.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsrErrorBuffer");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsrErrorBuffer");
+  
 namespace dsr {
 
 uint32_t
diff -Naur ns-3.21/src/dsr/model/dsr-errorbuff.h ns-3.22/src/dsr/model/dsr-errorbuff.h
--- ns-3.21/src/dsr/model/dsr-errorbuff.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-errorbuff.h	2015-02-05 15:46:22.000000000 -0800
@@ -74,8 +74,8 @@
   {
     return ((m_packet == o.m_packet) && (m_source == o.m_source) && (m_nextHop == o.m_nextHop) && (m_dst == o.m_dst) && (m_expire == o.m_expire));
   }
-  ///\name Fields
-  // \{
+  
+  // Fields
   Ptr<const Packet> GetPacket () const
   {
     return m_packet;
@@ -124,7 +124,7 @@
   {
     return m_protocol;
   }
-  // \}
+
 private:
   /// Data packet
   Ptr<const Packet> m_packet;
@@ -164,8 +164,8 @@
   bool Find (Ipv4Address dst);
   /// Number of entries
   uint32_t GetSize ();
-  ///\name Fields
-  // \{
+
+  // Fields
   uint32_t GetMaxQueueLen () const
   {
     return m_maxLen;
@@ -182,7 +182,6 @@
   {
     m_errorBufferTimeout = t;
   }
-  // \}
 
   std::vector<ErrorBuffEntry> & GetBuffer ()
   {
diff -Naur ns-3.21/src/dsr/model/dsr-fs-header.cc ns-3.22/src/dsr/model/dsr-fs-header.cc
--- ns-3.21/src/dsr/model/dsr-fs-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-fs-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,10 +35,11 @@
 #include "dsr-fs-header.h"
 
 namespace ns3 {
-namespace dsr {
 
 NS_LOG_COMPONENT_DEFINE ("DsrFsHeader");
 
+namespace dsr {
+
 NS_OBJECT_ENSURE_REGISTERED (DsrFsHeader);
 
 TypeId DsrFsHeader::GetTypeId ()
diff -Naur ns-3.21/src/dsr/model/dsr-gratuitous-reply-table.cc ns-3.22/src/dsr/model/dsr-gratuitous-reply-table.cc
--- ns-3.21/src/dsr/model/dsr-gratuitous-reply-table.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-gratuitous-reply-table.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,9 +33,10 @@
 #include "ns3/log.h"
 #include <algorithm>
 
-NS_LOG_COMPONENT_DEFINE ("DsrGraReplyTable");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsrGraReplyTable");
+  
 namespace dsr {
 
 NS_OBJECT_ENSURE_REGISTERED (GraReply);
diff -Naur ns-3.21/src/dsr/model/dsr-maintain-buff.cc ns-3.22/src/dsr/model/dsr-maintain-buff.cc
--- ns-3.21/src/dsr/model/dsr-maintain-buff.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-maintain-buff.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,9 +36,10 @@
 #include "ns3/socket.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsrMaintainBuffer");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsrMaintainBuffer");
+  
 namespace dsr {
 
 uint32_t
diff -Naur ns-3.21/src/dsr/model/dsr-maintain-buff.h ns-3.22/src/dsr/model/dsr-maintain-buff.h
--- ns-3.21/src/dsr/model/dsr-maintain-buff.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-maintain-buff.h	2015-02-05 15:46:22.000000000 -0800
@@ -158,8 +158,7 @@
   {
   }
 
-  ///\name Fields
-  // \{
+  // Fields
   Ptr<const Packet> GetPacket () const
   {
     return m_packet;
@@ -224,7 +223,7 @@
   {
     return m_expire - Simulator::Now ();
   }
-  // \}
+
 private:
   /// Data packet
   Ptr<const Packet> m_packet;
@@ -267,8 +266,8 @@
   bool Find (Ipv4Address nextHop);
   /// Number of entries
   uint32_t GetSize ();
-  ///\name Fields
-  // \{
+
+  // Fields
   uint32_t GetMaxQueueLen () const
   {
     return m_maxLen;
@@ -293,7 +292,6 @@
   bool NetworkEqual (MaintainBuffEntry & entry);
   /// Verify if the maintain buffer entry is the same in every field for promiscuous ack
   bool PromiscEqual (MaintainBuffEntry & entry);
-  // \}
 
 private:
   /// The vector of maintain buffer entries
diff -Naur ns-3.21/src/dsr/model/dsr-network-queue.cc ns-3.22/src/dsr/model/dsr-network-queue.cc
--- ns-3.21/src/dsr/model/dsr-network-queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-network-queue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -38,9 +38,10 @@
 #include "ns3/ipv4-route.h"
 #include "ns3/socket.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsrNetworkQueue");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsrNetworkQueue");
+  
 namespace dsr {
 
 NS_OBJECT_ENSURE_REGISTERED (DsrNetworkQueue);
diff -Naur ns-3.21/src/dsr/model/dsr-network-queue.h ns-3.22/src/dsr/model/dsr-network-queue.h
--- ns-3.21/src/dsr/model/dsr-network-queue.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-network-queue.h	2015-02-05 15:46:22.000000000 -0800
@@ -82,8 +82,7 @@
             && (tstamp == o.tstamp) && (m_ipv4Route == o.m_ipv4Route));
   }
 
-  ///\name Fields
-  //\{
+  // Fields
   Ptr<const Packet> GetPacket () const
   {
     return m_packet;
@@ -124,7 +123,7 @@
   {
     tstamp = time;
   }
-  //\}
+
 private:
   /// Data packet
   Ptr<const Packet> m_packet;
diff -Naur ns-3.21/src/dsr/model/dsr-option-header.cc ns-3.22/src/dsr/model/dsr-option-header.cc
--- ns-3.21/src/dsr/model/dsr-option-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-option-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,9 +39,11 @@
 #include "ns3/enum.h"
 
 namespace ns3 {
-namespace dsr {
+
 NS_LOG_COMPONENT_DEFINE ("DsrOptionHeader");
 
+namespace dsr {
+
 NS_OBJECT_ENSURE_REGISTERED (DsrOptionHeader);
 
 TypeId DsrOptionHeader::GetTypeId ()
diff -Naur ns-3.21/src/dsr/model/dsr-option-header.h ns-3.22/src/dsr/model/dsr-option-header.h
--- ns-3.21/src/dsr/model/dsr-option-header.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-option-header.h	2015-02-05 15:46:22.000000000 -0800
@@ -667,6 +667,13 @@
    */
   virtual Alignment GetAlignment () const;
 
+  /**
+   * TracedCallback signature for DsrOptionSrHeader.
+   *
+   * \param [in] header The DsrOptionsSRHeader
+   */
+  typedef void (* TracedCallback) (const DsrOptionSRHeader & header);
+
 private:
   /**
    * \brief The ip address header deserilize to
diff -Naur ns-3.21/src/dsr/model/dsr-options.cc ns-3.22/src/dsr/model/dsr-options.cc
--- ns-3.21/src/dsr/model/dsr-options.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-options.cc	2015-02-05 15:46:22.000000000 -0800
@@ -60,9 +60,10 @@
 #include "dsr-options.h"
 #include "dsr-rcache.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsrOptions");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsrOptions");
+  
 namespace dsr {
 
 NS_OBJECT_ENSURE_REGISTERED (DsrOptions);
@@ -75,8 +76,14 @@
                    UintegerValue (0),
                    MakeUintegerAccessor (&DsrOptions::GetOptionNumber),
                    MakeUintegerChecker<uint8_t> ())
-    .AddTraceSource ("Rx", "Receive DSR packet.",
-                     MakeTraceSourceAccessor (&DsrOptions::m_rxPacketTrace))
+    .AddTraceSource ("Drop",
+                     "Packet dropped.",
+                     MakeTraceSourceAccessor (&DsrOptions::m_dropTrace),
+                     "ns3::Packet::TracedCallback")
+    .AddTraceSource ("Rx",
+                     "Receive DSR packet.",
+                     MakeTraceSourceAccessor (&DsrOptions::m_rxPacketTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/dsr/model/dsr-passive-buff.cc ns-3.22/src/dsr/model/dsr-passive-buff.cc
--- ns-3.21/src/dsr/model/dsr-passive-buff.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-passive-buff.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,9 +36,10 @@
 #include "ns3/socket.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("PassiveBuffer");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("PassiveBuffer");
+  
 namespace dsr {
 
 NS_OBJECT_ENSURE_REGISTERED (PassiveBuffer);
diff -Naur ns-3.21/src/dsr/model/dsr-passive-buff.h ns-3.22/src/dsr/model/dsr-passive-buff.h
--- ns-3.21/src/dsr/model/dsr-passive-buff.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-passive-buff.h	2015-02-05 15:46:22.000000000 -0800
@@ -80,8 +80,8 @@
   {
     return ((m_packet == o.m_packet) && (m_source == o.m_source) && (m_nextHop == o.m_nextHop) && (m_dst == o.m_dst) && (m_expire == o.m_expire));
   }
-  ///\name Fields
-  // \{
+
+  // Fields
   Ptr<const Packet> GetPacket () const
   {
     return m_packet;
@@ -154,7 +154,7 @@
   {
     return m_protocol;
   }
-  // \}
+
 private:
   /// Data packet
   Ptr<const Packet> m_packet;
@@ -198,8 +198,8 @@
   bool AllEqual (PassiveBuffEntry & entry);
   /// Number of entries
   uint32_t GetSize ();
-  ///\name Fields
-  // \{
+
+  // Fields
   uint32_t GetMaxQueueLen () const
   {
     return m_maxLen;
@@ -216,7 +216,6 @@
   {
     m_passiveBufferTimeout = t;
   }
-  // \}
 
 private:
   /// The send buffer to cache unsent packet
diff -Naur ns-3.21/src/dsr/model/dsr-rcache.cc ns-3.22/src/dsr/model/dsr-rcache.cc
--- ns-3.21/src/dsr/model/dsr-rcache.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-rcache.cc	2015-02-05 15:46:22.000000000 -0800
@@ -47,9 +47,10 @@
 #include "ns3/address-utils.h"
 #include "ns3/packet.h"
 
-NS_LOG_COMPONENT_DEFINE ("RouteCache");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("RouteCache");
+  
 namespace dsr {
 
 bool CompareRoutesBoth (const RouteCacheEntry &a, const RouteCacheEntry &b)
diff -Naur ns-3.21/src/dsr/model/dsr-rcache.h ns-3.22/src/dsr/model/dsr-rcache.h
--- ns-3.21/src/dsr/model/dsr-rcache.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-rcache.h	2015-02-05 15:46:22.000000000 -0800
@@ -182,8 +182,8 @@
 
   /// Mark entry as "down" (i.e. disable it)
   void Invalidate (Time badLinkLifetime);
-  ///\name Fields
-  // \{
+
+  // Fields
   void SetUnidirectional (bool u)
   {
     m_blackListState = u;
@@ -224,7 +224,7 @@
   {
     return m_expire - Simulator::Now ();
   }
-  // \}
+
   /**
    * \brief Print necessary fields
    */
@@ -299,8 +299,8 @@
    * \brief Define the vector of route entries.
    */
   typedef std::list<RouteCacheEntry::IP_VECTOR> routeVector;
-  ///\name Fields
-  // \{
+
+  // Fields
   bool GetSubRoute () const
   {
     return m_subRoute;
@@ -381,7 +381,7 @@
   {
     m_useExtends = useExtends;
   }
-  // \}
+
   /**
    * \brief Update route cache entry if it has been recently used and successfully delivered the data packet
    * \param dst destination address of the route
@@ -520,17 +520,17 @@
   {
     return m_txErrorCallback;
   }
-  ///\name Handle link failure callback
-  // \{
+  
+  /// Handle link failure callback
   void SetCallback (Callback<void, Ipv4Address, uint8_t > cb)
   {
     m_handleLinkFailure = cb;
   }
+  /// Handle link failure callback
   Callback<void, Ipv4Address, uint8_t > GetCallback () const
   {
     return m_handleLinkFailure;
   }
-  // \}
 
 private:
   RouteCache & operator= (RouteCache const &);
diff -Naur ns-3.21/src/dsr/model/dsr-routing.cc ns-3.22/src/dsr/model/dsr-routing.cc
--- ns-3.21/src/dsr/model/dsr-routing.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-routing.cc	2015-02-05 15:46:22.000000000 -0800
@@ -75,9 +75,10 @@
 #include "dsr-fs-header.h"
 #include "dsr-options.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsrRouting");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsrRouting");
+  
 namespace dsr {
 
 NS_OBJECT_ENSURE_REGISTERED (DsrRouting);
@@ -108,181 +109,244 @@
   static TypeId tid = TypeId ("ns3::dsr::DsrRouting")
     .SetParent<IpL4Protocol> ()
     .AddConstructor<DsrRouting> ()
-    .AddAttribute ("RouteCache", "The route cache for saving routes from route discovery process.",
+    .AddAttribute ("RouteCache",
+                   "The route cache for saving routes from "
+                   "route discovery process.",
                    PointerValue (0),
                    MakePointerAccessor (&DsrRouting::SetRouteCache,
                                         &DsrRouting::GetRouteCache),
                    MakePointerChecker<RouteCache> ())
-    .AddAttribute ("RreqTable", "The request table to manage route requests.",
+    .AddAttribute ("RreqTable",
+                   "The request table to manage route requests.",
                    PointerValue (0),
                    MakePointerAccessor (&DsrRouting::SetRequestTable,
                                         &DsrRouting::GetRequestTable),
                    MakePointerChecker<RreqTable> ())
-    .AddAttribute ("PassiveBuffer", "The passive buffer to manage promisucously received passive ack.",
+    .AddAttribute ("PassiveBuffer",
+                   "The passive buffer to manage "
+                   "promisucously received passive ack.",
                    PointerValue (0),
                    MakePointerAccessor (&DsrRouting::SetPassiveBuffer,
                                         &DsrRouting::GetPassiveBuffer),
                    MakePointerChecker<PassiveBuffer> ())
-    .AddAttribute ("MaxSendBuffLen","Maximum number of packets that can be stored in send buffer.",
+    .AddAttribute ("MaxSendBuffLen",
+                   "Maximum number of packets that can be stored "
+                   "in send buffer.",
                    UintegerValue (64),
                    MakeUintegerAccessor (&DsrRouting::m_maxSendBuffLen),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MaxSendBuffTime","Maximum time packets can be queued in the send buffer .",
+    .AddAttribute ("MaxSendBuffTime",
+                   "Maximum time packets can be queued in the send buffer .",
                    TimeValue (Seconds (30)),
                    MakeTimeAccessor (&DsrRouting::m_sendBufferTimeout),
                    MakeTimeChecker ())
-    .AddAttribute ("MaxMaintLen","Maximum number of packets that can be stored in maintenance buffer.",
+    .AddAttribute ("MaxMaintLen",
+                   "Maximum number of packets that can be stored "
+                   "in maintenance buffer.",
                    UintegerValue (50),
                    MakeUintegerAccessor (&DsrRouting::m_maxMaintainLen),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MaxMaintTime","Maximum time packets can be queued in maintenance buffer.",
+    .AddAttribute ("MaxMaintTime",
+                   "Maximum time packets can be queued in maintenance buffer.",
                    TimeValue (Seconds (30)),
                    MakeTimeAccessor (&DsrRouting::m_maxMaintainTime),
                    MakeTimeChecker ())
-    .AddAttribute ("MaxCacheLen","Maximum number of route entries that can be stored in route cache.",
+    .AddAttribute ("MaxCacheLen",
+                   "Maximum number of route entries that can be stored "
+                   "in route cache.",
                    UintegerValue (64),
                    MakeUintegerAccessor (&DsrRouting::m_maxCacheLen),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("RouteCacheTimeout","Maximum time the route cache can be queued in route cache.",
+    .AddAttribute ("RouteCacheTimeout",
+                   "Maximum time the route cache can be queued in "
+                   "route cache.",
                    TimeValue (Seconds (300)),
                    MakeTimeAccessor (&DsrRouting::m_maxCacheTime),
                    MakeTimeChecker ())
-    .AddAttribute ("MaxEntriesEachDst","Maximum number of route entries for a single destination to respond.",
+    .AddAttribute ("MaxEntriesEachDst",
+                   "Maximum number of route entries for a "
+                   "single destination to respond.",
                    UintegerValue (20),
                    MakeUintegerAccessor (&DsrRouting::m_maxEntriesEachDst),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("SendBuffInterval","How often to check send buffer for packet with route.",
+    .AddAttribute ("SendBuffInterval",
+                   "How often to check send buffer for packet with route.",
                    TimeValue (Seconds (500)),
                    MakeTimeAccessor (&DsrRouting::m_sendBuffInterval),
                    MakeTimeChecker ())
-    .AddAttribute ("NodeTraversalTime","The time it takes to traverse two neighboring nodes.",
+    .AddAttribute ("NodeTraversalTime",
+                   "The time it takes to traverse two neighboring nodes.",
                    TimeValue (MilliSeconds (40)),
                    MakeTimeAccessor (&DsrRouting::m_nodeTraversalTime),
                    MakeTimeChecker ())
-    .AddAttribute ("RreqRetries","Maximum number of retransmissions for request discovery of a route.",
+    .AddAttribute ("RreqRetries",
+                   "Maximum number of retransmissions for "
+                   "request discovery of a route.",
                    UintegerValue (16),
                    MakeUintegerAccessor (&DsrRouting::m_rreqRetries),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MaintenanceRetries","Maximum number of retransmissions for data packets from maintenance buffer.",
+    .AddAttribute ("MaintenanceRetries",
+                   "Maximum number of retransmissions for "
+                   "data packets from maintenance buffer.",
                    UintegerValue (2),
                    MakeUintegerAccessor (&DsrRouting::m_maxMaintRexmt),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("RequestTableSize","Maximum number of request entries in the request table, set this as the number of nodes in the simulation.",
+    .AddAttribute ("RequestTableSize",
+                   "Maximum number of request entries in the request table, "
+                   "set this as the number of nodes in the simulation.",
                    UintegerValue (64),
                    MakeUintegerAccessor (&DsrRouting::m_requestTableSize),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("RequestIdSize","Maximum number of request source Ids in the request table.",
+    .AddAttribute ("RequestIdSize",
+                   "Maximum number of request source Ids in "
+                   "the request table.",
                    UintegerValue (16),
                    MakeUintegerAccessor (&DsrRouting::m_requestTableIds),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("UniqueRequestIdSize","Maximum number of request Ids in the request table for a single destination.",
+    .AddAttribute ("UniqueRequestIdSize",
+                   "Maximum number of request Ids in "
+                   "the request table for a single destination.",
                    UintegerValue (256),
                    MakeUintegerAccessor (&DsrRouting::m_maxRreqId),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("NonPropRequestTimeout","The timeout value for non-propagation request.",
+    .AddAttribute ("NonPropRequestTimeout",
+                   "The timeout value for non-propagation request.",
                    TimeValue (MilliSeconds (30)),
                    MakeTimeAccessor (&DsrRouting::m_nonpropRequestTimeout),
                    MakeTimeChecker ())
-    .AddAttribute ("DiscoveryHopLimit","The max discovery hop limit for route requests.",
+    .AddAttribute ("DiscoveryHopLimit",
+                   "The max discovery hop limit for route requests.",
                    UintegerValue (255),
                    MakeUintegerAccessor (&DsrRouting::m_discoveryHopLimit),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MaxSalvageCount","The max salvage count for a single data packet.",
+    .AddAttribute ("MaxSalvageCount",
+                   "The max salvage count for a single data packet.",
                    UintegerValue (15),
                    MakeUintegerAccessor (&DsrRouting::m_maxSalvageCount),
                    MakeUintegerChecker<uint8_t> ())
-    .AddAttribute ("BlacklistTimeout","The time for a neighbor to stay in blacklist.",
+    .AddAttribute ("BlacklistTimeout",
+                   "The time for a neighbor to stay in blacklist.",
                    TimeValue (Seconds (3)),
                    MakeTimeAccessor (&DsrRouting::m_blacklistTimeout),
                    MakeTimeChecker ())
-    .AddAttribute ("GratReplyHoldoff","The time for gratuitous reply entry to expire.",
+    .AddAttribute ("GratReplyHoldoff",
+                   "The time for gratuitous reply entry to expire.",
                    TimeValue (Seconds (1)),
                    MakeTimeAccessor (&DsrRouting::m_gratReplyHoldoff),
                    MakeTimeChecker ())
-    .AddAttribute ("BroadcastJitter","The jitter time to avoid collision for broadcast packets.",
+    .AddAttribute ("BroadcastJitter",
+                   "The jitter time to avoid collision for broadcast packets.",
                    UintegerValue (10),
                    MakeUintegerAccessor (&DsrRouting::m_broadcastJitter),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("LinkAckTimeout","The time a packet in maintenance buffer wait for link acknowledgment.",
+    .AddAttribute ("LinkAckTimeout",
+                   "The time a packet in maintenance buffer wait for "
+                   "link acknowledgment.",
                    TimeValue (MilliSeconds (100)),
                    MakeTimeAccessor (&DsrRouting::m_linkAckTimeout),
                    MakeTimeChecker ())
-    .AddAttribute ("TryLinkAcks","The number of link acknowledgment to use.",
+    .AddAttribute ("TryLinkAcks",
+                   "The number of link acknowledgment to use.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&DsrRouting::m_tryLinkAcks),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("PassiveAckTimeout","The time a packet in maintenance buffer wait for passive acknowledgment.",
+    .AddAttribute ("PassiveAckTimeout",
+                   "The time a packet in maintenance buffer wait for "
+                   "passive acknowledgment.",
                    TimeValue (MilliSeconds (100)),
                    MakeTimeAccessor (&DsrRouting::m_passiveAckTimeout),
                    MakeTimeChecker ())
-    .AddAttribute ("TryPassiveAcks","The number of passive acknowledgment to use.",
+    .AddAttribute ("TryPassiveAcks",
+                   "The number of passive acknowledgment to use.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&DsrRouting::m_tryPassiveAcks),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("RequestPeriod","The base time interval between route requests.",
+    .AddAttribute ("RequestPeriod",
+                   "The base time interval between route requests.",
                    TimeValue (MilliSeconds (500)),
                    MakeTimeAccessor (&DsrRouting::m_requestPeriod),
                    MakeTimeChecker ())
-    .AddAttribute ("MaxRequestPeriod","The max time interval between route requests.",
+    .AddAttribute ("MaxRequestPeriod",
+                   "The max time interval between route requests.",
                    TimeValue (Seconds (10)),
                    MakeTimeAccessor (&DsrRouting::m_maxRequestPeriod),
                    MakeTimeChecker ())
-    .AddAttribute ("GraReplyTableSize","The gratuitous reply table size.",
+    .AddAttribute ("GraReplyTableSize",
+                   "The gratuitous reply table size.",
                    UintegerValue (64),
                    MakeUintegerAccessor (&DsrRouting::m_graReplyTableSize),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("CacheType","Use Link Cache or use Path Cache",
+    .AddAttribute ("CacheType",
+                   "Use Link Cache or use Path Cache",
                    StringValue ("LinkCache"),
                    MakeStringAccessor (&DsrRouting::m_cacheType),
                    MakeStringChecker ())
-    .AddAttribute ("StabilityDecrFactor","The stability decrease factor for link cache",
+    .AddAttribute ("StabilityDecrFactor",
+                   "The stability decrease factor for link cache",
                    UintegerValue (2),
                    MakeUintegerAccessor (&DsrRouting::m_stabilityDecrFactor),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("StabilityIncrFactor","The stability increase factor for link cache",
+    .AddAttribute ("StabilityIncrFactor",
+                   "The stability increase factor for link cache",
                    UintegerValue (4),
                    MakeUintegerAccessor (&DsrRouting::m_stabilityIncrFactor),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("InitStability","The initial stability factor for link cache",
+    .AddAttribute ("InitStability",
+                   "The initial stability factor for link cache",
                    TimeValue (Seconds (25)),
                    MakeTimeAccessor (&DsrRouting::m_initStability),
                    MakeTimeChecker ())
-    .AddAttribute ("MinLifeTime","The minimal life time for link cache",
+    .AddAttribute ("MinLifeTime",
+                   "The minimal life time for link cache",
                    TimeValue (Seconds (1)),
                    MakeTimeAccessor (&DsrRouting::m_minLifeTime),
                    MakeTimeChecker ())
-    .AddAttribute ("UseExtends","The extension time for link cache",
+    .AddAttribute ("UseExtends",
+                   "The extension time for link cache",
                    TimeValue (Seconds (120)),
                    MakeTimeAccessor (&DsrRouting::m_useExtends),
                    MakeTimeChecker ())
-    .AddAttribute ("EnableSubRoute","Enables saving of sub route when receiving route error messages, only available when using path route cache",
+    .AddAttribute ("EnableSubRoute",
+                   "Enables saving of sub route when receiving "
+                   "route error messages, only available when "
+                   "using path route cache",
                    BooleanValue (true),
                    MakeBooleanAccessor (&DsrRouting::m_subRoute),
                    MakeBooleanChecker ())
-    .AddAttribute ("RetransIncr","The increase time for retransmission timer when facing network congestion",
+    .AddAttribute ("RetransIncr",
+                   "The increase time for retransmission timer "
+                   "when facing network congestion",
                    TimeValue (MilliSeconds (20)),
                    MakeTimeAccessor (&DsrRouting::m_retransIncr),
                    MakeTimeChecker ())
-    .AddAttribute ("MaxNetworkQueueSize","The max number of packet to save in the network queue.",
+    .AddAttribute ("MaxNetworkQueueSize",
+                   "The max number of packet to save in the network queue.",
                    UintegerValue (400),
                    MakeUintegerAccessor (&DsrRouting::m_maxNetworkSize),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MaxNetworkQueueDelay","The max time for a packet to stay in the network queue.",
+    .AddAttribute ("MaxNetworkQueueDelay",
+                   "The max time for a packet to stay in the network queue.",
                    TimeValue (Seconds (30.0)),
                    MakeTimeAccessor (&DsrRouting::m_maxNetworkDelay),
                    MakeTimeChecker ())
-    .AddAttribute ("NumPriorityQueues","The max number of packet to save in the network queue.",
+    .AddAttribute ("NumPriorityQueues",
+                   "The max number of packet to save in the network queue.",
                    UintegerValue (2),
                    MakeUintegerAccessor (&DsrRouting::m_numPriorityQueues),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("LinkAcknowledgment","Enable Link layer acknowledgment mechanism",
+    .AddAttribute ("LinkAcknowledgment",
+                   "Enable Link layer acknowledgment mechanism",
                    BooleanValue (true),
                    MakeBooleanAccessor (&DsrRouting::m_linkAck),
                    MakeBooleanChecker ())
-    .AddTraceSource ("Tx", "Send DSR packet.",
-                     MakeTraceSourceAccessor (&DsrRouting::m_txPacketTrace))
-    .AddTraceSource ("Drop", "Drop DSR packet",
-                     MakeTraceSourceAccessor (&DsrRouting::m_dropTrace))
+    .AddTraceSource ("Tx",
+                     "Send DSR packet.",
+                     MakeTraceSourceAccessor (&DsrRouting::m_txPacketTrace),
+                     "ns3::DsrOptionSRHeader::TracedCallback")
+    .AddTraceSource ("Drop",
+                     "Drop DSR packet",
+                     MakeTraceSourceAccessor (&DsrRouting::m_dropTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/dsr/model/dsr-rreq-table.cc ns-3.22/src/dsr/model/dsr-rreq-table.cc
--- ns-3.21/src/dsr/model/dsr-rreq-table.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-rreq-table.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,9 +34,10 @@
 #include <algorithm>
 #include <iostream>
 
-NS_LOG_COMPONENT_DEFINE ("RreqTable");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("RreqTable");
+  
 namespace dsr {
 
 NS_OBJECT_ENSURE_REGISTERED (RreqTable);
diff -Naur ns-3.21/src/dsr/model/dsr-rsendbuff.cc ns-3.22/src/dsr/model/dsr-rsendbuff.cc
--- ns-3.21/src/dsr/model/dsr-rsendbuff.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-rsendbuff.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,9 +36,10 @@
 #include "ns3/socket.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("DsrSendBuffer");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DsrSendBuffer");
+  
 namespace dsr {
 
 uint32_t
diff -Naur ns-3.21/src/dsr/model/dsr-rsendbuff.h ns-3.22/src/dsr/model/dsr-rsendbuff.h
--- ns-3.21/src/dsr/model/dsr-rsendbuff.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/dsr/model/dsr-rsendbuff.h	2015-02-05 15:46:22.000000000 -0800
@@ -70,8 +70,8 @@
   {
     return ((m_packet == o.m_packet) && (m_dst == o.m_dst) && (m_expire == o.m_expire));
   }
-  // /\name Fields
-  // \{
+  
+  // Fields
   Ptr<const Packet> GetPacket () const
   {
     return m_packet;
@@ -104,7 +104,7 @@
   {
     return m_protocol;
   }
-  // \}
+
 private:
   /// Data packet
   Ptr<const Packet> m_packet;
diff -Naur ns-3.21/src/emu/bindings/callbacks_list.py ns-3.22/src/emu/bindings/callbacks_list.py
--- ns-3.21/src/emu/bindings/callbacks_list.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/bindings/callbacks_list.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,6 +0,0 @@
-callback_classes = [
-    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', '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::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.21/src/emu/bindings/modulegen_customizations.py ns-3.22/src/emu/bindings/modulegen_customizations.py
--- ns-3.21/src/emu/bindings/modulegen_customizations.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/bindings/modulegen_customizations.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,10 +0,0 @@
-import os
-
-def post_register_types(root_module):
-    enabled_features = os.environ['NS3_ENABLED_FEATURES'].split(',')
-
-    if 'EmuNetDevice' not in enabled_features:
-        for clsname in ['EmuNetDevice', 'EmuHelper']:
-            root_module.classes.remove(root_module['ns3::%s' % clsname])
-        root_module.enums.remove(root_module['ns3::EmuNetDevice::EncapsulationMode'])
-
diff -Naur ns-3.21/src/emu/bindings/modulegen__gcc_ILP32.py ns-3.22/src/emu/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/emu/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/bindings/modulegen__gcc_ILP32.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,4631 +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.emu', cpp_namespace='::ns3')
-    return root_module
-
-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')
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper [class]
-    module.add_class('AsciiTraceHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice [class]
-    module.add_class('AsciiTraceHelperForDevice', allow_subclassing=True, 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')
-    ## system-mutex.h (module 'core'): ns3::CriticalSection [class]
-    module.add_class('CriticalSection', import_from_module='ns.core')
-    ## data-rate.h (module 'network'): ns3::DataRate [class]
-    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]
-    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'])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
-    module.add_class('NetDeviceContainer', import_from_module='ns.network')
-    ## node-container.h (module 'network'): ns3::NodeContainer [class]
-    module.add_class('NodeContainer', import_from_module='ns.network')
-    ## 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'])
-    ## 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]
-    module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
-    module.add_class('PcapHelperForDevice', allow_subclassing=True, 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]
-    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
-    ## system-mutex.h (module 'core'): ns3::SystemMutex [class]
-    module.add_class('SystemMutex', import_from_module='ns.core')
-    ## 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')
-    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
-    module.add_class('TimeWithUnit', import_from_module='ns.core')
-    ## 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')
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
-    module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::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'])
-    ## emu-helper.h (module 'emu'): ns3::EmuHelper [class]
-    module.add_class('EmuHelper', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
-    ## 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'])
-    ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper [class]
-    module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=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::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]
-    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::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::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SystemThread', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SystemThread>'], parent=root_module['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'))
-    ## system-thread.h (module 'core'): ns3::SystemThread [class]
-    module.add_class('SystemThread', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >'])
-    ## 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', ['Y', 'D', 'H', 'MIN', '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-rate.h (module 'network'): ns3::DataRateChecker [class]
-    module.add_class('DataRateChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## data-rate.h (module 'network'): ns3::DataRateValue [class]
-    module.add_class('DataRateValue', import_from_module='ns.network', 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'])
-    ## 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'])
-    ## 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]
-    module.add_enum('PacketType', ['PACKET_HOST', 'NS3_PACKET_HOST', 'PACKET_BROADCAST', 'NS3_PACKET_BROADCAST', 'PACKET_MULTICAST', 'NS3_PACKET_MULTICAST', 'PACKET_OTHERHOST', 'NS3_PACKET_OTHERHOST'], outer_class=root_module['ns3::NetDevice'], import_from_module='ns.network')
-    ## 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> >'])
-    ## node.h (module 'network'): ns3::Node [class]
-    module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
-    ## 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'])
-    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
-    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::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'])
-    ## emu-net-device.h (module 'emu'): ns3::EmuNetDevice [class]
-    module.add_class('EmuNetDevice', parent=root_module['ns3::NetDevice'])
-    ## emu-net-device.h (module 'emu'): ns3::EmuNetDevice::EncapsulationMode [enumeration]
-    module.add_enum('EncapsulationMode', ['ILLEGAL', 'DIX', 'LLC'], outer_class=root_module['ns3::EmuNetDevice'])
-    
-    ## 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)
-    
-
-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(u'uint32_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash32Function_ptr')
-    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash32Function_ptr*')
-    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *&', u'ns3::Hash::Hash32Function_ptr&')
-    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash64Function_ptr')
-    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash64Function_ptr*')
-    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) *&', u'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'])
-    register_Ns3AsciiTraceHelperForDevice_methods(root_module, root_module['ns3::AsciiTraceHelperForDevice'])
-    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_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'])
-    register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
-    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
-    register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
-    register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
-    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_Ns3PcapFile_methods(root_module, root_module['ns3::PcapFile'])
-    register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
-    register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
-    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_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
-    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
-    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
-    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
-    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_Ns3EmuHelper_methods(root_module, root_module['ns3::EmuHelper'])
-    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_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
-    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__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> >'])
-    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> >'])
-    register_Ns3SystemThread_methods(root_module, root_module['ns3::SystemThread'])
-    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_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
-    register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
-    register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
-    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_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'])
-    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
-    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_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):
-    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)
-    return
-
-def register_Ns3AsciiTraceHelper_methods(root_module, cls):
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper(ns3::AsciiTraceHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AsciiTraceHelper const &', 'arg0')])
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper() [constructor]
-    cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::OutputStreamWrapper> ns3::AsciiTraceHelper::CreateFileStream(std::string filename, std::_Ios_Openmode filemode=std::ios_base::out) [member function]
-    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]
-    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]
-    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]
-    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]
-    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]
-    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]
-    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]
-    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]
-    cls.add_method('DefaultReceiveSinkWithoutContext', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
-                   is_static=True)
-    ## trace-helper.h (module 'network'): std::string ns3::AsciiTraceHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
-    cls.add_method('GetFilenameFromDevice', 
-                   'std::string', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'useObjectNames', default_value='true')])
-    ## trace-helper.h (module 'network'): std::string ns3::AsciiTraceHelper::GetFilenameFromInterfacePair(std::string prefix, ns3::Ptr<ns3::Object> object, uint32_t interface, bool useObjectNames=true) [member function]
-    cls.add_method('GetFilenameFromInterfacePair', 
-                   'std::string', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Object >', 'object'), param('uint32_t', 'interface'), param('bool', 'useObjectNames', default_value='true')])
-    return
-
-def register_Ns3AsciiTraceHelperForDevice_methods(root_module, cls):
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice::AsciiTraceHelperForDevice(ns3::AsciiTraceHelperForDevice const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AsciiTraceHelperForDevice const &', 'arg0')])
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice::AsciiTraceHelperForDevice() [constructor]
-    cls.add_constructor([])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename=false) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ptr<ns3::NetDevice> nd) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ptr< ns3::NetDevice >', 'nd')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, std::string ndName, bool explicitFilename=false) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('std::string', 'ndName'), param('bool', 'explicitFilename', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string ndName) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'ndName')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::NetDeviceContainer d) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::NetDeviceContainer', 'd')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NetDeviceContainer d) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NetDeviceContainer', 'd')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::NodeContainer n) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NodeContainer n) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NodeContainer', 'n')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'explicitFilename')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, uint32_t nodeid, uint32_t deviceid) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiAll(std::string prefix) [member function]
-    cls.add_method('EnableAsciiAll', 
-                   'void', 
-                   [param('std::string', 'prefix')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiAll(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
-    cls.add_method('EnableAsciiAll', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
-    cls.add_method('EnableAsciiInternal', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
-                   is_pure_virtual=True, is_virtual=True)
-    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'): uint8_t ns3::Buffer::Iterator::PeekU8() [member function]
-    cls.add_method('PeekU8', 
-                   'uint8_t', 
-                   [])
-    ## 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'): void ns3::Buffer::Iterator::Read(ns3::Buffer::Iterator start, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), 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_Ns3CriticalSection_methods(root_module, cls):
-    ## system-mutex.h (module 'core'): ns3::CriticalSection::CriticalSection(ns3::CriticalSection const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CriticalSection const &', 'arg0')])
-    ## system-mutex.h (module 'core'): ns3::CriticalSection::CriticalSection(ns3::SystemMutex & mutex) [constructor]
-    cls.add_constructor([param('ns3::SystemMutex &', 'mutex')])
-    return
-
-def register_Ns3DataRate_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('>=')
-    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(ns3::DataRate const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataRate const &', 'arg0')])
-    ## data-rate.h (module 'network'): ns3::DataRate::DataRate() [constructor]
-    cls.add_constructor([])
-    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(uint64_t bps) [constructor]
-    cls.add_constructor([param('uint64_t', 'bps')])
-    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(std::string rate) [constructor]
-    cls.add_constructor([param('std::string', 'rate')])
-    ## data-rate.h (module 'network'): double ns3::DataRate::CalculateTxTime(uint32_t bytes) const [member function]
-    cls.add_method('CalculateTxTime', 
-                   'double', 
-                   [param('uint32_t', 'bytes')], 
-                   is_const=True)
-    ## data-rate.h (module 'network'): uint64_t ns3::DataRate::GetBitRate() const [member function]
-    cls.add_method('GetBitRate', 
-                   'uint64_t', 
-                   [], 
-                   is_const=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_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('!=')
-    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::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', 
-                   [param('ns3::Ipv6Address const &', 'other')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() const [member function]
-    cls.add_method('IsIpv4MappedAddress', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## 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::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', 
-                   [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', 
-                   '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', 
-                   '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', 
-                   'void', 
-                   [param('char const *', 'address')])
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(uint8_t * address) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('uint8_t *', 'address')])
-    return
-
-def register_Ns3Ipv6Prefix_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]
-    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', 
-                   [], 
-                   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)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   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', 
-                   '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', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
-    cls.add_method('IsGroup', 
-                   'bool', 
-                   [], 
-                   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_Ns3NetDeviceContainer_methods(root_module, cls):
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer() [constructor]
-    cls.add_constructor([])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::Ptr<ns3::NetDevice> dev) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev')])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(std::string devName) [constructor]
-    cls.add_constructor([param('std::string', 'devName')])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & a, ns3::NetDeviceContainer const & b) [constructor]
-    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'a'), param('ns3::NetDeviceContainer const &', 'b')])
-    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::NetDeviceContainer other) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::NetDeviceContainer', 'other')])
-    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(std::string deviceName) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('std::string', 'deviceName')])
-    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
-                   [], 
-                   is_const=True)
-    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::End() const [member function]
-    cls.add_method('End', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
-                   [], 
-                   is_const=True)
-    ## net-device-container.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::NetDeviceContainer::Get(uint32_t i) const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## net-device-container.h (module 'network'): uint32_t ns3::NetDeviceContainer::GetN() const [member function]
-    cls.add_method('GetN', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3NodeContainer_methods(root_module, cls):
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'arg0')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer() [constructor]
-    cls.add_constructor([])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::Ptr<ns3::Node> node) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(std::string nodeName) [constructor]
-    cls.add_constructor([param('std::string', 'nodeName')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b) [constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c) [constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c, ns3::NodeContainer const & d) [constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c'), param('ns3::NodeContainer const &', 'd')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c, ns3::NodeContainer const & d, ns3::NodeContainer const & e) [constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c'), param('ns3::NodeContainer const &', 'd'), param('ns3::NodeContainer const &', 'e')])
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(ns3::NodeContainer other) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::NodeContainer', 'other')])
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(std::string nodeName) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('std::string', 'nodeName')])
-    ## node-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Node>*,std::vector<ns3::Ptr<ns3::Node>, std::allocator<ns3::Ptr<ns3::Node> > > > ns3::NodeContainer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Node > const, std::vector< ns3::Ptr< ns3::Node > > >', 
-                   [], 
-                   is_const=True)
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Create(uint32_t n) [member function]
-    cls.add_method('Create', 
-                   'void', 
-                   [param('uint32_t', 'n')])
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Create(uint32_t n, uint32_t systemId) [member function]
-    cls.add_method('Create', 
-                   'void', 
-                   [param('uint32_t', 'n'), param('uint32_t', 'systemId')])
-    ## node-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Node>*,std::vector<ns3::Ptr<ns3::Node>, std::allocator<ns3::Ptr<ns3::Node> > > > ns3::NodeContainer::End() const [member function]
-    cls.add_method('End', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Node > const, std::vector< ns3::Ptr< ns3::Node > > >', 
-                   [], 
-                   is_const=True)
-    ## node-container.h (module 'network'): ns3::Ptr<ns3::Node> ns3::NodeContainer::Get(uint32_t i) const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## node-container.h (module 'network'): static ns3::NodeContainer ns3::NodeContainer::GetGlobal() [member function]
-    cls.add_method('GetGlobal', 
-                   'ns3::NodeContainer', 
-                   [], 
-                   is_static=True)
-    ## node-container.h (module 'network'): uint32_t ns3::NodeContainer::GetN() const [member function]
-    cls.add_method('GetN', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    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', 
-                   [])
-    ## 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):
-    ## 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_Ns3PcapFile_methods(root_module, cls):
-    ## pcap-file.h (module 'network'): ns3::PcapFile::PcapFile() [constructor]
-    cls.add_constructor([])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Clear() [member function]
-    cls.add_method('Clear', 
-                   'void', 
-                   [])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Close() [member function]
-    cls.add_method('Close', 
-                   'void', 
-                   [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
-    cls.add_method('Diff', 
-                   'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
-                   is_static=True)
-    ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
-    cls.add_method('Eof', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## pcap-file.h (module 'network'): bool ns3::PcapFile::Fail() const [member function]
-    cls.add_method('Fail', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetDataLinkType() [member function]
-    cls.add_method('GetDataLinkType', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetMagic() [member function]
-    cls.add_method('GetMagic', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetSigFigs() [member function]
-    cls.add_method('GetSigFigs', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetSnapLen() [member function]
-    cls.add_method('GetSnapLen', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): bool ns3::PcapFile::GetSwapMode() [member function]
-    cls.add_method('GetSwapMode', 
-                   'bool', 
-                   [])
-    ## pcap-file.h (module 'network'): int32_t ns3::PcapFile::GetTimeZoneOffset() [member function]
-    cls.add_method('GetTimeZoneOffset', 
-                   'int32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint16_t ns3::PcapFile::GetVersionMajor() [member function]
-    cls.add_method('GetVersionMajor', 
-                   'uint16_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint16_t ns3::PcapFile::GetVersionMinor() [member function]
-    cls.add_method('GetVersionMinor', 
-                   'uint16_t', 
-                   [])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Init(uint32_t dataLinkType, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT, int32_t timeZoneCorrection=ns3::PcapFile::ZONE_DEFAULT, bool swapMode=false) [member function]
-    cls.add_method('Init', 
-                   'void', 
-                   [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT'), param('int32_t', 'timeZoneCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT'), param('bool', 'swapMode', default_value='false')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
-    cls.add_method('Open', 
-                   'void', 
-                   [param('std::string const &', 'filename'), param('std::_Ios_Openmode', 'mode')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Read(uint8_t * const data, uint32_t maxBytes, uint32_t & tsSec, uint32_t & tsUsec, uint32_t & inclLen, uint32_t & origLen, uint32_t & readLen) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t * const', 'data'), param('uint32_t', 'maxBytes'), param('uint32_t &', 'tsSec'), param('uint32_t &', 'tsUsec'), param('uint32_t &', 'inclLen'), param('uint32_t &', 'origLen'), param('uint32_t &', 'readLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, uint8_t const * const data, uint32_t totalLen) [member function]
-    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]
-    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]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
-    cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
-    ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
-    cls.add_static_attribute('ZONE_DEFAULT', 'int32_t const', is_const=True)
-    return
-
-def register_Ns3PcapHelper_methods(root_module, cls):
-    ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper(ns3::PcapHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
-    ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
-    cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
-    cls.add_method('CreateFile', 
-                   'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
-    ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
-    cls.add_method('GetFilenameFromDevice', 
-                   'std::string', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'useObjectNames', default_value='true')])
-    ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromInterfacePair(std::string prefix, ns3::Ptr<ns3::Object> object, uint32_t interface, bool useObjectNames=true) [member function]
-    cls.add_method('GetFilenameFromInterfacePair', 
-                   'std::string', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Object >', 'object'), param('uint32_t', 'interface'), param('bool', 'useObjectNames', default_value='true')])
-    return
-
-def register_Ns3PcapHelperForDevice_methods(root_module, cls):
-    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice::PcapHelperForDevice(ns3::PcapHelperForDevice const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PcapHelperForDevice const &', 'arg0')])
-    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice::PcapHelperForDevice() [constructor]
-    cls.add_constructor([])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous=false, bool explicitFilename=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous', default_value='false'), param('bool', 'explicitFilename', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, std::string ndName, bool promiscuous=false, bool explicitFilename=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('std::string', 'ndName'), param('bool', 'promiscuous', default_value='false'), param('bool', 'explicitFilename', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::NetDeviceContainer d, bool promiscuous=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::NetDeviceContainer', 'd'), param('bool', 'promiscuous', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::NodeContainer n, bool promiscuous=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n'), param('bool', 'promiscuous', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool promiscuous=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'promiscuous', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcapAll(std::string prefix, bool promiscuous=false) [member function]
-    cls.add_method('EnablePcapAll', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('bool', 'promiscuous', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
-    cls.add_method('EnablePcapInternal', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
-                   is_pure_virtual=True, is_virtual=True)
-    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_Ns3SystemMutex_methods(root_module, cls):
-    ## system-mutex.h (module 'core'): ns3::SystemMutex::SystemMutex(ns3::SystemMutex const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SystemMutex const &', 'arg0')])
-    ## system-mutex.h (module 'core'): ns3::SystemMutex::SystemMutex() [constructor]
-    cls.add_constructor([])
-    ## system-mutex.h (module 'core'): void ns3::SystemMutex::Lock() [member function]
-    cls.add_method('Lock', 
-                   'void', 
-                   [])
-    ## system-mutex.h (module 'core'): void ns3::SystemMutex::Unlock() [member function]
-    cls.add_method('Unlock', 
-                   'void', 
-                   [])
-    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_Ns3TimeWithUnit_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## nstime.h (module 'core'): ns3::TimeWithUnit::TimeWithUnit(ns3::TimeWithUnit const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeWithUnit const &', 'arg0')])
-    ## nstime.h (module 'core'): ns3::TimeWithUnit::TimeWithUnit(ns3::Time const time, ns3::Time::Unit const unit) [constructor]
-    cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
-    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'): 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', 
-                   [], 
-                   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::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', 
-                   [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('ns3::int64x64_t const &', u'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'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 &', u'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 &', u'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'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(long double v) [constructor]
-    cls.add_constructor([param('long 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')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::implementation [variable]
-    cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
-    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_Ns3EmuHelper_methods(root_module, cls):
-    ## emu-helper.h (module 'emu'): ns3::EmuHelper::EmuHelper(ns3::EmuHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EmuHelper const &', 'arg0')])
-    ## emu-helper.h (module 'emu'): ns3::EmuHelper::EmuHelper() [constructor]
-    cls.add_constructor([])
-    ## emu-helper.h (module 'emu'): ns3::NetDeviceContainer ns3::EmuHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
-    cls.add_method('Install', 
-                   'ns3::NetDeviceContainer', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_const=True)
-    ## emu-helper.h (module 'emu'): ns3::NetDeviceContainer ns3::EmuHelper::Install(std::string nodeName) const [member function]
-    cls.add_method('Install', 
-                   'ns3::NetDeviceContainer', 
-                   [param('std::string', 'nodeName')], 
-                   is_const=True)
-    ## emu-helper.h (module 'emu'): ns3::NetDeviceContainer ns3::EmuHelper::Install(ns3::NodeContainer const & c) const [member function]
-    cls.add_method('Install', 
-                   'ns3::NetDeviceContainer', 
-                   [param('ns3::NodeContainer const &', 'c')], 
-                   is_const=True)
-    ## emu-helper.h (module 'emu'): void ns3::EmuHelper::SetAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
-    ## emu-helper.h (module 'emu'): void ns3::EmuHelper::SetQueue(std::string type, std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue()) [member function]
-    cls.add_method('SetQueue', 
-                   'void', 
-                   [param('std::string', 'type'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()')])
-    ## emu-helper.h (module 'emu'): void ns3::EmuHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
-    cls.add_method('EnableAsciiInternal', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
-    ## emu-helper.h (module 'emu'): void ns3::EmuHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
-    cls.add_method('EnablePcapInternal', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
-    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_Ns3PcapFileWrapper_methods(root_module, cls):
-    ## pcap-file-wrapper.h (module 'network'): static ns3::TypeId ns3::PcapFileWrapper::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper::PcapFileWrapper() [constructor]
-    cls.add_constructor([])
-    ## pcap-file-wrapper.h (module 'network'): bool ns3::PcapFileWrapper::Fail() const [member function]
-    cls.add_method('Fail', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## pcap-file-wrapper.h (module 'network'): bool ns3::PcapFileWrapper::Eof() const [member function]
-    cls.add_method('Eof', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Clear() [member function]
-    cls.add_method('Clear', 
-                   'void', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
-    cls.add_method('Open', 
-                   'void', 
-                   [param('std::string const &', 'filename'), param('std::_Ios_Openmode', 'mode')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Close() [member function]
-    cls.add_method('Close', 
-                   'void', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Init(uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=ns3::PcapFile::ZONE_DEFAULT) [member function]
-    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]
-    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]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
-    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
-    cls.add_method('GetMagic', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint16_t ns3::PcapFileWrapper::GetVersionMajor() [member function]
-    cls.add_method('GetVersionMajor', 
-                   'uint16_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint16_t ns3::PcapFileWrapper::GetVersionMinor() [member function]
-    cls.add_method('GetVersionMinor', 
-                   'uint16_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): int32_t ns3::PcapFileWrapper::GetTimeZoneOffset() [member function]
-    cls.add_method('GetTimeZoneOffset', 
-                   'int32_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetSigFigs() [member function]
-    cls.add_method('GetSigFigs', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetSnapLen() [member function]
-    cls.add_method('GetSnapLen', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetDataLinkType() [member function]
-    cls.add_method('GetDataLinkType', 
-                   'uint32_t', 
-                   [])
-    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__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([])
-    ## 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__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([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount(ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter< ns3::OutputStreamWrapper > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::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__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter< ns3::SystemThread > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >::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_Ns3SystemThread_methods(root_module, cls):
-    ## system-thread.h (module 'core'): ns3::SystemThread::SystemThread(ns3::SystemThread const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SystemThread const &', 'arg0')])
-    ## system-thread.h (module 'core'): ns3::SystemThread::SystemThread(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [constructor]
-    cls.add_constructor([param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## system-thread.h (module 'core'): static bool ns3::SystemThread::Equals(pthread_t id) [member function]
-    cls.add_method('Equals', 
-                   'bool', 
-                   [param('pthread_t', 'id')], 
-                   is_static=True)
-    ## system-thread.h (module 'core'): void ns3::SystemThread::Join() [member function]
-    cls.add_method('Join', 
-                   'void', 
-                   [])
-    ## system-thread.h (module 'core'): static pthread_t ns3::SystemThread::Self() [member function]
-    cls.add_method('Self', 
-                   'pthread_t', 
-                   [], 
-                   is_static=True)
-    ## system-thread.h (module 'core'): void ns3::SystemThread::Start() [member function]
-    cls.add_method('Start', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'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 &', u'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'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(ns3::int64x64_t const & v) [constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', '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::TimeWithUnit ns3::Time::As(ns3::Time::Unit const unit) const [member function]
-    cls.add_method('As', 
-                   'ns3::TimeWithUnit', 
-                   [param('ns3::Time::Unit const', 'unit')], 
-                   is_const=True)
-    ## 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 & 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::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
-    cls.add_method('FromDouble', 
-                   'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
-    cls.add_method('FromInteger', 
-                   'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
-    cls.add_method('GetDays', 
-                   'double', 
-                   [], 
-                   is_const=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'): double ns3::Time::GetHours() const [member function]
-    cls.add_method('GetHours', 
-                   'double', 
-                   [], 
-                   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'): double ns3::Time::GetMinutes() const [member function]
-    cls.add_method('GetMinutes', 
-                   'double', 
-                   [], 
-                   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'): double ns3::Time::GetYears() const [member function]
-    cls.add_method('GetYears', 
-                   'double', 
-                   [], 
-                   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 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 unit) const [member function]
-    cls.add_method('To', 
-                   'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
-    cls.add_method('ToDouble', 
-                   'double', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
-    cls.add_method('ToInteger', 
-                   'int64_t', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   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_Ns3DataRateChecker_methods(root_module, cls):
-    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker() [constructor]
-    cls.add_constructor([])
-    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker(ns3::DataRateChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataRateChecker const &', 'arg0')])
-    return
-
-def register_Ns3DataRateValue_methods(root_module, cls):
-    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue() [constructor]
-    cls.add_constructor([])
-    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRateValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataRateValue const &', 'arg0')])
-    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRate const & value) [constructor]
-    cls.add_constructor([param('ns3::DataRate const &', 'value')])
-    ## data-rate.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::DataRateValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## data-rate.h (module 'network'): bool ns3::DataRateValue::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)
-    ## data-rate.h (module 'network'): ns3::DataRate ns3::DataRateValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::DataRate', 
-                   [], 
-                   is_const=True)
-    ## data-rate.h (module 'network'): std::string ns3::DataRateValue::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)
-    ## data-rate.h (module 'network'): void ns3::DataRateValue::Set(ns3::DataRate const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::DataRate 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')])
-    ## 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_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]
-    cls.add_method('Copy', 
-                   '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', 
-                   '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 >', 
-                   [], 
-                   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', 
-                   '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]
-    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]
-    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]
-    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]
-    cls.add_method('Get', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6AddressValue::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]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Ipv6Address const &', 'value')])
-    return
-
-def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [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')])
-    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 >', 
-                   [], 
-                   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_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', 
-                   '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')])
-    return
-
-def register_Ns3Mac48AddressValue_methods(root_module, cls):
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [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]
-    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]
-    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]
-    cls.add_method('Get', 
-                   'ns3::Mac48Address', 
-                   [], 
-                   is_const=True)
-    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::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]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Mac48Address const &', 'value')])
-    return
-
-def register_Ns3NetDevice_methods(root_module, cls):
-    ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
-    cls.add_constructor([])
-    ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('AddLinkChangeCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Address', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetBroadcast() const [member function]
-    cls.add_method('GetBroadcast', 
-                   'ns3::Address', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Ptr<ns3::Channel> ns3::NetDevice::GetChannel() const [member function]
-    cls.add_method('GetChannel', 
-                   'ns3::Ptr< ns3::Channel >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): uint32_t ns3::NetDevice::GetIfIndex() const [member function]
-    cls.add_method('GetIfIndex', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): uint16_t ns3::NetDevice::GetMtu() const [member function]
-    cls.add_method('GetMtu', 
-                   'uint16_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Address', 
-                   [param('ns3::Ipv4Address', 'multicastGroup')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Address', 
-                   [param('ns3::Ipv6Address', 'addr')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Ptr<ns3::Node> ns3::NetDevice::GetNode() const [member function]
-    cls.add_method('GetNode', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDevice::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsBridge() const [member function]
-    cls.add_method('IsBridge', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsBroadcast() const [member function]
-    cls.add_method('IsBroadcast', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsLinkUp() const [member function]
-    cls.add_method('IsLinkUp', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsMulticast() const [member function]
-    cls.add_method('IsMulticast', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsPointToPoint() const [member function]
-    cls.add_method('IsPointToPoint', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::NeedsArp() const [member function]
-    cls.add_method('NeedsArp', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
-    cls.add_method('Send', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
-    cls.add_method('SendFrom', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetAddress(ns3::Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Address', 'address')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetIfIndex(uint32_t const index) [member function]
-    cls.add_method('SetIfIndex', 
-                   'void', 
-                   [param('uint32_t const', 'index')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::SetMtu(uint16_t const mtu) [member function]
-    cls.add_method('SetMtu', 
-                   'bool', 
-                   [param('uint16_t const', 'mtu')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<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> cb) [member function]
-    cls.add_method('SetPromiscReceiveCallback', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<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> cb) [member function]
-    cls.add_method('SetReceiveCallback', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::SupportsSendFrom() const [member function]
-    cls.add_method('SupportsSendFrom', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, 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_Ns3Node_methods(root_module, cls):
-    ## node.h (module 'network'): ns3::Node::Node(ns3::Node const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Node const &', 'arg0')])
-    ## node.h (module 'network'): ns3::Node::Node() [constructor]
-    cls.add_constructor([])
-    ## node.h (module 'network'): ns3::Node::Node(uint32_t systemId) [constructor]
-    cls.add_constructor([param('uint32_t', 'systemId')])
-    ## node.h (module 'network'): uint32_t ns3::Node::AddApplication(ns3::Ptr<ns3::Application> application) [member function]
-    cls.add_method('AddApplication', 
-                   'uint32_t', 
-                   [param('ns3::Ptr< ns3::Application >', 'application')])
-    ## node.h (module 'network'): uint32_t ns3::Node::AddDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('AddDevice', 
-                   'uint32_t', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## node.h (module 'network'): static bool ns3::Node::ChecksumEnabled() [member function]
-    cls.add_method('ChecksumEnabled', 
-                   'bool', 
-                   [], 
-                   is_static=True)
-    ## node.h (module 'network'): ns3::Ptr<ns3::Application> ns3::Node::GetApplication(uint32_t index) const [member function]
-    cls.add_method('GetApplication', 
-                   'ns3::Ptr< ns3::Application >', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## node.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Node::GetDevice(uint32_t index) const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## node.h (module 'network'): uint32_t ns3::Node::GetId() const [member function]
-    cls.add_method('GetId', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
-    cls.add_method('GetNApplications', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## node.h (module 'network'): uint32_t ns3::Node::GetNDevices() const [member function]
-    cls.add_method('GetNDevices', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## node.h (module 'network'): uint32_t ns3::Node::GetSystemId() const [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## node.h (module 'network'): static ns3::TypeId ns3::Node::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## node.h (module 'network'): void ns3::Node::RegisterDeviceAdditionListener(ns3::Callback<void,ns3::Ptr<ns3::NetDevice>,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> listener) [member function]
-    cls.add_method('RegisterDeviceAdditionListener', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'listener')])
-    ## node.h (module 'network'): void ns3::Node::RegisterProtocolHandler(ns3::Callback<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> handler, uint16_t protocolType, ns3::Ptr<ns3::NetDevice> device, bool promiscuous=false) [member function]
-    cls.add_method('RegisterProtocolHandler', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'handler'), param('uint16_t', 'protocolType'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'promiscuous', default_value='false')])
-    ## node.h (module 'network'): void ns3::Node::UnregisterDeviceAdditionListener(ns3::Callback<void,ns3::Ptr<ns3::NetDevice>,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> listener) [member function]
-    cls.add_method('UnregisterDeviceAdditionListener', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'listener')])
-    ## node.h (module 'network'): void ns3::Node::UnregisterProtocolHandler(ns3::Callback<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> handler) [member function]
-    cls.add_method('UnregisterProtocolHandler', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'handler')])
-    ## node.h (module 'network'): void ns3::Node::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## node.h (module 'network'): void ns3::Node::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=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_Ns3OutputStreamWrapper_methods(root_module, cls):
-    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
-    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::string filename, std::_Ios_Openmode filemode) [constructor]
-    cls.add_constructor([param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode')])
-    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::ostream * os) [constructor]
-    cls.add_constructor([param('std::ostream *', 'os')])
-    ## output-stream-wrapper.h (module 'network'): std::ostream * ns3::OutputStreamWrapper::GetStream() [member function]
-    cls.add_method('GetStream', 
-                   'std::ostream *', 
-                   [])
-    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'): 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', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
-    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_Ns3AddressChecker_methods(root_module, cls):
-    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [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')])
-    return
-
-def register_Ns3AddressValue_methods(root_module, cls):
-    ## address.h (module 'network'): ns3::AddressValue::AddressValue() [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]
-    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]
-    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]
-    cls.add_method('Get', 
-                   'ns3::Address', 
-                   [], 
-                   is_const=True)
-    ## address.h (module 'network'): std::string ns3::AddressValue::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]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Address const &', 'value')])
-    return
-
-def register_Ns3EmuNetDevice_methods(root_module, cls):
-    ## emu-net-device.h (module 'emu'): static ns3::TypeId ns3::EmuNetDevice::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## emu-net-device.h (module 'emu'): ns3::EmuNetDevice::EmuNetDevice() [constructor]
-    cls.add_constructor([])
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetDataRate(ns3::DataRate bps) [member function]
-    cls.add_method('SetDataRate', 
-                   'void', 
-                   [param('ns3::DataRate', 'bps')])
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::Start(ns3::Time tStart) [member function]
-    cls.add_method('Start', 
-                   'void', 
-                   [param('ns3::Time', 'tStart')])
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::Stop(ns3::Time tStop) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time', 'tStop')])
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetQueue(ns3::Ptr<ns3::Queue> queue) [member function]
-    cls.add_method('SetQueue', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
-    ## emu-net-device.h (module 'emu'): ns3::Ptr<ns3::Queue> ns3::EmuNetDevice::GetQueue() const [member function]
-    cls.add_method('GetQueue', 
-                   'ns3::Ptr< ns3::Queue >', 
-                   [], 
-                   is_const=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetIfIndex(uint32_t const index) [member function]
-    cls.add_method('SetIfIndex', 
-                   'void', 
-                   [param('uint32_t const', 'index')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): uint32_t ns3::EmuNetDevice::GetIfIndex() const [member function]
-    cls.add_method('GetIfIndex', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Ptr<ns3::Channel> ns3::EmuNetDevice::GetChannel() const [member function]
-    cls.add_method('GetChannel', 
-                   'ns3::Ptr< ns3::Channel >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetAddress(ns3::Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Address', 'address')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Address ns3::EmuNetDevice::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Address', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::SetMtu(uint16_t const mtu) [member function]
-    cls.add_method('SetMtu', 
-                   'bool', 
-                   [param('uint16_t const', 'mtu')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): uint16_t ns3::EmuNetDevice::GetMtu() const [member function]
-    cls.add_method('GetMtu', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsLinkUp() const [member function]
-    cls.add_method('IsLinkUp', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('AddLinkChangeCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsBroadcast() const [member function]
-    cls.add_method('IsBroadcast', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Address ns3::EmuNetDevice::GetBroadcast() const [member function]
-    cls.add_method('GetBroadcast', 
-                   'ns3::Address', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsMulticast() const [member function]
-    cls.add_method('IsMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Address ns3::EmuNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Address', 
-                   [param('ns3::Ipv4Address', 'multicastGroup')], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Address ns3::EmuNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Address', 
-                   [param('ns3::Ipv6Address', 'addr')], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsPointToPoint() const [member function]
-    cls.add_method('IsPointToPoint', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsBridge() const [member function]
-    cls.add_method('IsBridge', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
-    cls.add_method('Send', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
-    cls.add_method('SendFrom', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Ptr<ns3::Node> ns3::EmuNetDevice::GetNode() const [member function]
-    cls.add_method('GetNode', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::NeedsArp() const [member function]
-    cls.add_method('NeedsArp', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetReceiveCallback(ns3::Callback<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> cb) [member function]
-    cls.add_method('SetReceiveCallback', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'cb')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetPromiscReceiveCallback(ns3::Callback<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> cb) [member function]
-    cls.add_method('SetPromiscReceiveCallback', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'cb')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::SupportsSendFrom() const [member function]
-    cls.add_method('SupportsSendFrom', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetEncapsulationMode(ns3::EmuNetDevice::EncapsulationMode mode) [member function]
-    cls.add_method('SetEncapsulationMode', 
-                   'void', 
-                   [param('ns3::EmuNetDevice::EncapsulationMode', 'mode')])
-    ## emu-net-device.h (module 'emu'): ns3::EmuNetDevice::EncapsulationMode ns3::EmuNetDevice::GetEncapsulationMode() const [member function]
-    cls.add_method('GetEncapsulationMode', 
-                   'ns3::EmuNetDevice::EncapsulationMode', 
-                   [], 
-                   is_const=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   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()
-    register_types(root_module)
-    register_methods(root_module)
-    register_functions(root_module)
-    root_module.generate(out)
-
-if __name__ == '__main__':
-    main()
-
diff -Naur ns-3.21/src/emu/bindings/modulegen__gcc_LP64.py ns-3.22/src/emu/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/emu/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/bindings/modulegen__gcc_LP64.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,4631 +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.emu', cpp_namespace='::ns3')
-    return root_module
-
-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')
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper [class]
-    module.add_class('AsciiTraceHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice [class]
-    module.add_class('AsciiTraceHelperForDevice', allow_subclassing=True, 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')
-    ## system-mutex.h (module 'core'): ns3::CriticalSection [class]
-    module.add_class('CriticalSection', import_from_module='ns.core')
-    ## data-rate.h (module 'network'): ns3::DataRate [class]
-    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]
-    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'])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
-    module.add_class('NetDeviceContainer', import_from_module='ns.network')
-    ## node-container.h (module 'network'): ns3::NodeContainer [class]
-    module.add_class('NodeContainer', import_from_module='ns.network')
-    ## 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'])
-    ## 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]
-    module.add_class('PcapHelper', import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
-    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
-    module.add_class('PcapHelperForDevice', allow_subclassing=True, 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]
-    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
-    ## system-mutex.h (module 'core'): ns3::SystemMutex [class]
-    module.add_class('SystemMutex', import_from_module='ns.core')
-    ## 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')
-    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
-    module.add_class('TimeWithUnit', import_from_module='ns.core')
-    ## 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')
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
-    module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::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'])
-    ## emu-helper.h (module 'emu'): ns3::EmuHelper [class]
-    module.add_class('EmuHelper', parent=[root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
-    ## 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'])
-    ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper [class]
-    module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=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::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]
-    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::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::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SystemThread', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SystemThread>'], parent=root_module['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'))
-    ## system-thread.h (module 'core'): ns3::SystemThread [class]
-    module.add_class('SystemThread', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >'])
-    ## 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', ['Y', 'D', 'H', 'MIN', '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-rate.h (module 'network'): ns3::DataRateChecker [class]
-    module.add_class('DataRateChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
-    ## data-rate.h (module 'network'): ns3::DataRateValue [class]
-    module.add_class('DataRateValue', import_from_module='ns.network', 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'])
-    ## 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'])
-    ## 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]
-    module.add_enum('PacketType', ['PACKET_HOST', 'NS3_PACKET_HOST', 'PACKET_BROADCAST', 'NS3_PACKET_BROADCAST', 'PACKET_MULTICAST', 'NS3_PACKET_MULTICAST', 'PACKET_OTHERHOST', 'NS3_PACKET_OTHERHOST'], outer_class=root_module['ns3::NetDevice'], import_from_module='ns.network')
-    ## 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> >'])
-    ## node.h (module 'network'): ns3::Node [class]
-    module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
-    ## 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'])
-    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper [class]
-    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::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'])
-    ## emu-net-device.h (module 'emu'): ns3::EmuNetDevice [class]
-    module.add_class('EmuNetDevice', parent=root_module['ns3::NetDevice'])
-    ## emu-net-device.h (module 'emu'): ns3::EmuNetDevice::EncapsulationMode [enumeration]
-    module.add_enum('EncapsulationMode', ['ILLEGAL', 'DIX', 'LLC'], outer_class=root_module['ns3::EmuNetDevice'])
-    
-    ## 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)
-    
-
-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(u'uint32_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash32Function_ptr')
-    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash32Function_ptr*')
-    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *&', u'ns3::Hash::Hash32Function_ptr&')
-    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash64Function_ptr')
-    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash64Function_ptr*')
-    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) *&', u'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'])
-    register_Ns3AsciiTraceHelperForDevice_methods(root_module, root_module['ns3::AsciiTraceHelperForDevice'])
-    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_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'])
-    register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
-    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
-    register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
-    register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
-    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_Ns3PcapFile_methods(root_module, root_module['ns3::PcapFile'])
-    register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
-    register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
-    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_Ns3SystemMutex_methods(root_module, root_module['ns3::SystemMutex'])
-    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
-    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
-    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
-    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_Ns3EmuHelper_methods(root_module, root_module['ns3::EmuHelper'])
-    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_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
-    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__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> >'])
-    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> >'])
-    register_Ns3SystemThread_methods(root_module, root_module['ns3::SystemThread'])
-    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_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
-    register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
-    register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
-    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_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'])
-    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
-    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_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):
-    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)
-    return
-
-def register_Ns3AsciiTraceHelper_methods(root_module, cls):
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper(ns3::AsciiTraceHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AsciiTraceHelper const &', 'arg0')])
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper() [constructor]
-    cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::OutputStreamWrapper> ns3::AsciiTraceHelper::CreateFileStream(std::string filename, std::_Ios_Openmode filemode=std::ios_base::out) [member function]
-    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]
-    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]
-    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]
-    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]
-    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]
-    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]
-    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]
-    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]
-    cls.add_method('DefaultReceiveSinkWithoutContext', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'file'), param('ns3::Ptr< ns3::Packet const >', 'p')], 
-                   is_static=True)
-    ## trace-helper.h (module 'network'): std::string ns3::AsciiTraceHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
-    cls.add_method('GetFilenameFromDevice', 
-                   'std::string', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'useObjectNames', default_value='true')])
-    ## trace-helper.h (module 'network'): std::string ns3::AsciiTraceHelper::GetFilenameFromInterfacePair(std::string prefix, ns3::Ptr<ns3::Object> object, uint32_t interface, bool useObjectNames=true) [member function]
-    cls.add_method('GetFilenameFromInterfacePair', 
-                   'std::string', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Object >', 'object'), param('uint32_t', 'interface'), param('bool', 'useObjectNames', default_value='true')])
-    return
-
-def register_Ns3AsciiTraceHelperForDevice_methods(root_module, cls):
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice::AsciiTraceHelperForDevice(ns3::AsciiTraceHelperForDevice const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::AsciiTraceHelperForDevice const &', 'arg0')])
-    ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice::AsciiTraceHelperForDevice() [constructor]
-    cls.add_constructor([])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename=false) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ptr<ns3::NetDevice> nd) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ptr< ns3::NetDevice >', 'nd')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, std::string ndName, bool explicitFilename=false) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('std::string', 'ndName'), param('bool', 'explicitFilename', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string ndName) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'ndName')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::NetDeviceContainer d) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::NetDeviceContainer', 'd')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NetDeviceContainer d) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NetDeviceContainer', 'd')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, ns3::NodeContainer n) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NodeContainer n) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NodeContainer', 'n')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'explicitFilename')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAscii(ns3::Ptr<ns3::OutputStreamWrapper> stream, uint32_t nodeid, uint32_t deviceid) [member function]
-    cls.add_method('EnableAscii', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiAll(std::string prefix) [member function]
-    cls.add_method('EnableAsciiAll', 
-                   'void', 
-                   [param('std::string', 'prefix')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiAll(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
-    cls.add_method('EnableAsciiAll', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
-    ## trace-helper.h (module 'network'): void ns3::AsciiTraceHelperForDevice::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
-    cls.add_method('EnableAsciiInternal', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
-                   is_pure_virtual=True, is_virtual=True)
-    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'): uint8_t ns3::Buffer::Iterator::PeekU8() [member function]
-    cls.add_method('PeekU8', 
-                   'uint8_t', 
-                   [])
-    ## 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'): void ns3::Buffer::Iterator::Read(ns3::Buffer::Iterator start, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), 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_Ns3CriticalSection_methods(root_module, cls):
-    ## system-mutex.h (module 'core'): ns3::CriticalSection::CriticalSection(ns3::CriticalSection const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CriticalSection const &', 'arg0')])
-    ## system-mutex.h (module 'core'): ns3::CriticalSection::CriticalSection(ns3::SystemMutex & mutex) [constructor]
-    cls.add_constructor([param('ns3::SystemMutex &', 'mutex')])
-    return
-
-def register_Ns3DataRate_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>')
-    cls.add_binary_comparison_operator('>=')
-    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(ns3::DataRate const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataRate const &', 'arg0')])
-    ## data-rate.h (module 'network'): ns3::DataRate::DataRate() [constructor]
-    cls.add_constructor([])
-    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(uint64_t bps) [constructor]
-    cls.add_constructor([param('uint64_t', 'bps')])
-    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(std::string rate) [constructor]
-    cls.add_constructor([param('std::string', 'rate')])
-    ## data-rate.h (module 'network'): double ns3::DataRate::CalculateTxTime(uint32_t bytes) const [member function]
-    cls.add_method('CalculateTxTime', 
-                   'double', 
-                   [param('uint32_t', 'bytes')], 
-                   is_const=True)
-    ## data-rate.h (module 'network'): uint64_t ns3::DataRate::GetBitRate() const [member function]
-    cls.add_method('GetBitRate', 
-                   'uint64_t', 
-                   [], 
-                   is_const=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_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('!=')
-    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::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', 
-                   [param('ns3::Ipv6Address const &', 'other')], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() const [member function]
-    cls.add_method('IsIpv4MappedAddress', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## 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::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', 
-                   [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', 
-                   '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', 
-                   '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', 
-                   'void', 
-                   [param('char const *', 'address')])
-    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(uint8_t * address) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('uint8_t *', 'address')])
-    return
-
-def register_Ns3Ipv6Prefix_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]
-    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', 
-                   [], 
-                   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)
-    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetZero() [member function]
-    cls.add_method('GetZero', 
-                   'ns3::Ipv6Prefix', 
-                   [], 
-                   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', 
-                   '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', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
-    cls.add_method('IsGroup', 
-                   'bool', 
-                   [], 
-                   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_Ns3NetDeviceContainer_methods(root_module, cls):
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer() [constructor]
-    cls.add_constructor([])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::Ptr<ns3::NetDevice> dev) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev')])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(std::string devName) [constructor]
-    cls.add_constructor([param('std::string', 'devName')])
-    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & a, ns3::NetDeviceContainer const & b) [constructor]
-    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'a'), param('ns3::NetDeviceContainer const &', 'b')])
-    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::NetDeviceContainer other) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::NetDeviceContainer', 'other')])
-    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(std::string deviceName) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('std::string', 'deviceName')])
-    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
-                   [], 
-                   is_const=True)
-    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::End() const [member function]
-    cls.add_method('End', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
-                   [], 
-                   is_const=True)
-    ## net-device-container.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::NetDeviceContainer::Get(uint32_t i) const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## net-device-container.h (module 'network'): uint32_t ns3::NetDeviceContainer::GetN() const [member function]
-    cls.add_method('GetN', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3NodeContainer_methods(root_module, cls):
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'arg0')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer() [constructor]
-    cls.add_constructor([])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::Ptr<ns3::Node> node) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(std::string nodeName) [constructor]
-    cls.add_constructor([param('std::string', 'nodeName')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b) [constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c) [constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c, ns3::NodeContainer const & d) [constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c'), param('ns3::NodeContainer const &', 'd')])
-    ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c, ns3::NodeContainer const & d, ns3::NodeContainer const & e) [constructor]
-    cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b'), param('ns3::NodeContainer const &', 'c'), param('ns3::NodeContainer const &', 'd'), param('ns3::NodeContainer const &', 'e')])
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(ns3::NodeContainer other) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::NodeContainer', 'other')])
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Add(std::string nodeName) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('std::string', 'nodeName')])
-    ## node-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Node>*,std::vector<ns3::Ptr<ns3::Node>, std::allocator<ns3::Ptr<ns3::Node> > > > ns3::NodeContainer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Node > const, std::vector< ns3::Ptr< ns3::Node > > >', 
-                   [], 
-                   is_const=True)
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Create(uint32_t n) [member function]
-    cls.add_method('Create', 
-                   'void', 
-                   [param('uint32_t', 'n')])
-    ## node-container.h (module 'network'): void ns3::NodeContainer::Create(uint32_t n, uint32_t systemId) [member function]
-    cls.add_method('Create', 
-                   'void', 
-                   [param('uint32_t', 'n'), param('uint32_t', 'systemId')])
-    ## node-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Node>*,std::vector<ns3::Ptr<ns3::Node>, std::allocator<ns3::Ptr<ns3::Node> > > > ns3::NodeContainer::End() const [member function]
-    cls.add_method('End', 
-                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Node > const, std::vector< ns3::Ptr< ns3::Node > > >', 
-                   [], 
-                   is_const=True)
-    ## node-container.h (module 'network'): ns3::Ptr<ns3::Node> ns3::NodeContainer::Get(uint32_t i) const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [param('uint32_t', 'i')], 
-                   is_const=True)
-    ## node-container.h (module 'network'): static ns3::NodeContainer ns3::NodeContainer::GetGlobal() [member function]
-    cls.add_method('GetGlobal', 
-                   'ns3::NodeContainer', 
-                   [], 
-                   is_static=True)
-    ## node-container.h (module 'network'): uint32_t ns3::NodeContainer::GetN() const [member function]
-    cls.add_method('GetN', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    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', 
-                   [])
-    ## 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):
-    ## 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_Ns3PcapFile_methods(root_module, cls):
-    ## pcap-file.h (module 'network'): ns3::PcapFile::PcapFile() [constructor]
-    cls.add_constructor([])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Clear() [member function]
-    cls.add_method('Clear', 
-                   'void', 
-                   [])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Close() [member function]
-    cls.add_method('Close', 
-                   'void', 
-                   [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
-    cls.add_method('Diff', 
-                   'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
-                   is_static=True)
-    ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
-    cls.add_method('Eof', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## pcap-file.h (module 'network'): bool ns3::PcapFile::Fail() const [member function]
-    cls.add_method('Fail', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetDataLinkType() [member function]
-    cls.add_method('GetDataLinkType', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetMagic() [member function]
-    cls.add_method('GetMagic', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetSigFigs() [member function]
-    cls.add_method('GetSigFigs', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint32_t ns3::PcapFile::GetSnapLen() [member function]
-    cls.add_method('GetSnapLen', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): bool ns3::PcapFile::GetSwapMode() [member function]
-    cls.add_method('GetSwapMode', 
-                   'bool', 
-                   [])
-    ## pcap-file.h (module 'network'): int32_t ns3::PcapFile::GetTimeZoneOffset() [member function]
-    cls.add_method('GetTimeZoneOffset', 
-                   'int32_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint16_t ns3::PcapFile::GetVersionMajor() [member function]
-    cls.add_method('GetVersionMajor', 
-                   'uint16_t', 
-                   [])
-    ## pcap-file.h (module 'network'): uint16_t ns3::PcapFile::GetVersionMinor() [member function]
-    cls.add_method('GetVersionMinor', 
-                   'uint16_t', 
-                   [])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Init(uint32_t dataLinkType, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT, int32_t timeZoneCorrection=ns3::PcapFile::ZONE_DEFAULT, bool swapMode=false) [member function]
-    cls.add_method('Init', 
-                   'void', 
-                   [param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT'), param('int32_t', 'timeZoneCorrection', default_value='ns3::PcapFile::ZONE_DEFAULT'), param('bool', 'swapMode', default_value='false')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
-    cls.add_method('Open', 
-                   'void', 
-                   [param('std::string const &', 'filename'), param('std::_Ios_Openmode', 'mode')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Read(uint8_t * const data, uint32_t maxBytes, uint32_t & tsSec, uint32_t & tsUsec, uint32_t & inclLen, uint32_t & origLen, uint32_t & readLen) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t * const', 'data'), param('uint32_t', 'maxBytes'), param('uint32_t &', 'tsSec'), param('uint32_t &', 'tsUsec'), param('uint32_t &', 'inclLen'), param('uint32_t &', 'origLen'), param('uint32_t &', 'readLen')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, uint8_t const * const data, uint32_t totalLen) [member function]
-    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]
-    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]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
-    cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
-    ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
-    cls.add_static_attribute('ZONE_DEFAULT', 'int32_t const', is_const=True)
-    return
-
-def register_Ns3PcapHelper_methods(root_module, cls):
-    ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper(ns3::PcapHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
-    ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
-    cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
-    cls.add_method('CreateFile', 
-                   'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
-    ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
-    cls.add_method('GetFilenameFromDevice', 
-                   'std::string', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'useObjectNames', default_value='true')])
-    ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromInterfacePair(std::string prefix, ns3::Ptr<ns3::Object> object, uint32_t interface, bool useObjectNames=true) [member function]
-    cls.add_method('GetFilenameFromInterfacePair', 
-                   'std::string', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Object >', 'object'), param('uint32_t', 'interface'), param('bool', 'useObjectNames', default_value='true')])
-    return
-
-def register_Ns3PcapHelperForDevice_methods(root_module, cls):
-    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice::PcapHelperForDevice(ns3::PcapHelperForDevice const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PcapHelperForDevice const &', 'arg0')])
-    ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice::PcapHelperForDevice() [constructor]
-    cls.add_constructor([])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous=false, bool explicitFilename=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous', default_value='false'), param('bool', 'explicitFilename', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, std::string ndName, bool promiscuous=false, bool explicitFilename=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('std::string', 'ndName'), param('bool', 'promiscuous', default_value='false'), param('bool', 'explicitFilename', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::NetDeviceContainer d, bool promiscuous=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::NetDeviceContainer', 'd'), param('bool', 'promiscuous', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, ns3::NodeContainer n, bool promiscuous=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n'), param('bool', 'promiscuous', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcap(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool promiscuous=false) [member function]
-    cls.add_method('EnablePcap', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'promiscuous', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcapAll(std::string prefix, bool promiscuous=false) [member function]
-    cls.add_method('EnablePcapAll', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('bool', 'promiscuous', default_value='false')])
-    ## trace-helper.h (module 'network'): void ns3::PcapHelperForDevice::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
-    cls.add_method('EnablePcapInternal', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
-                   is_pure_virtual=True, is_virtual=True)
-    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_Ns3SystemMutex_methods(root_module, cls):
-    ## system-mutex.h (module 'core'): ns3::SystemMutex::SystemMutex(ns3::SystemMutex const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SystemMutex const &', 'arg0')])
-    ## system-mutex.h (module 'core'): ns3::SystemMutex::SystemMutex() [constructor]
-    cls.add_constructor([])
-    ## system-mutex.h (module 'core'): void ns3::SystemMutex::Lock() [member function]
-    cls.add_method('Lock', 
-                   'void', 
-                   [])
-    ## system-mutex.h (module 'core'): void ns3::SystemMutex::Unlock() [member function]
-    cls.add_method('Unlock', 
-                   'void', 
-                   [])
-    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_Ns3TimeWithUnit_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## nstime.h (module 'core'): ns3::TimeWithUnit::TimeWithUnit(ns3::TimeWithUnit const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TimeWithUnit const &', 'arg0')])
-    ## nstime.h (module 'core'): ns3::TimeWithUnit::TimeWithUnit(ns3::Time const time, ns3::Time::Unit const unit) [constructor]
-    cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
-    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'): 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', 
-                   [], 
-                   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::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', 
-                   [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('ns3::int64x64_t const &', u'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'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 &', u'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 &', u'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'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(long double v) [constructor]
-    cls.add_constructor([param('long 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')])
-    ## int64x64-double.h (module 'core'): ns3::int64x64_t::implementation [variable]
-    cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
-    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_Ns3EmuHelper_methods(root_module, cls):
-    ## emu-helper.h (module 'emu'): ns3::EmuHelper::EmuHelper(ns3::EmuHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::EmuHelper const &', 'arg0')])
-    ## emu-helper.h (module 'emu'): ns3::EmuHelper::EmuHelper() [constructor]
-    cls.add_constructor([])
-    ## emu-helper.h (module 'emu'): ns3::NetDeviceContainer ns3::EmuHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
-    cls.add_method('Install', 
-                   'ns3::NetDeviceContainer', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_const=True)
-    ## emu-helper.h (module 'emu'): ns3::NetDeviceContainer ns3::EmuHelper::Install(std::string nodeName) const [member function]
-    cls.add_method('Install', 
-                   'ns3::NetDeviceContainer', 
-                   [param('std::string', 'nodeName')], 
-                   is_const=True)
-    ## emu-helper.h (module 'emu'): ns3::NetDeviceContainer ns3::EmuHelper::Install(ns3::NodeContainer const & c) const [member function]
-    cls.add_method('Install', 
-                   'ns3::NetDeviceContainer', 
-                   [param('ns3::NodeContainer const &', 'c')], 
-                   is_const=True)
-    ## emu-helper.h (module 'emu'): void ns3::EmuHelper::SetAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'n1'), param('ns3::AttributeValue const &', 'v1')])
-    ## emu-helper.h (module 'emu'): void ns3::EmuHelper::SetQueue(std::string type, std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue()) [member function]
-    cls.add_method('SetQueue', 
-                   'void', 
-                   [param('std::string', 'type'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()')])
-    ## emu-helper.h (module 'emu'): void ns3::EmuHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
-    cls.add_method('EnableAsciiInternal', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
-    ## emu-helper.h (module 'emu'): void ns3::EmuHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
-    cls.add_method('EnablePcapInternal', 
-                   'void', 
-                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
-                   visibility='private', is_virtual=True)
-    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_Ns3PcapFileWrapper_methods(root_module, cls):
-    ## pcap-file-wrapper.h (module 'network'): static ns3::TypeId ns3::PcapFileWrapper::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper::PcapFileWrapper() [constructor]
-    cls.add_constructor([])
-    ## pcap-file-wrapper.h (module 'network'): bool ns3::PcapFileWrapper::Fail() const [member function]
-    cls.add_method('Fail', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## pcap-file-wrapper.h (module 'network'): bool ns3::PcapFileWrapper::Eof() const [member function]
-    cls.add_method('Eof', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Clear() [member function]
-    cls.add_method('Clear', 
-                   'void', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
-    cls.add_method('Open', 
-                   'void', 
-                   [param('std::string const &', 'filename'), param('std::_Ios_Openmode', 'mode')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Close() [member function]
-    cls.add_method('Close', 
-                   'void', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Init(uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=ns3::PcapFile::ZONE_DEFAULT) [member function]
-    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]
-    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]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
-    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
-    cls.add_method('GetMagic', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint16_t ns3::PcapFileWrapper::GetVersionMajor() [member function]
-    cls.add_method('GetVersionMajor', 
-                   'uint16_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint16_t ns3::PcapFileWrapper::GetVersionMinor() [member function]
-    cls.add_method('GetVersionMinor', 
-                   'uint16_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): int32_t ns3::PcapFileWrapper::GetTimeZoneOffset() [member function]
-    cls.add_method('GetTimeZoneOffset', 
-                   'int32_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetSigFigs() [member function]
-    cls.add_method('GetSigFigs', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetSnapLen() [member function]
-    cls.add_method('GetSnapLen', 
-                   'uint32_t', 
-                   [])
-    ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetDataLinkType() [member function]
-    cls.add_method('GetDataLinkType', 
-                   'uint32_t', 
-                   [])
-    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__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([])
-    ## 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__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([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount(ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter< ns3::OutputStreamWrapper > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::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__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >::SimpleRefCount(ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter< ns3::SystemThread > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >::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_Ns3SystemThread_methods(root_module, cls):
-    ## system-thread.h (module 'core'): ns3::SystemThread::SystemThread(ns3::SystemThread const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SystemThread const &', 'arg0')])
-    ## system-thread.h (module 'core'): ns3::SystemThread::SystemThread(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [constructor]
-    cls.add_constructor([param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## system-thread.h (module 'core'): static bool ns3::SystemThread::Equals(pthread_t id) [member function]
-    cls.add_method('Equals', 
-                   'bool', 
-                   [param('pthread_t', 'id')], 
-                   is_static=True)
-    ## system-thread.h (module 'core'): void ns3::SystemThread::Join() [member function]
-    cls.add_method('Join', 
-                   'void', 
-                   [])
-    ## system-thread.h (module 'core'): static pthread_t ns3::SystemThread::Self() [member function]
-    cls.add_method('Self', 
-                   'pthread_t', 
-                   [], 
-                   is_static=True)
-    ## system-thread.h (module 'core'): void ns3::SystemThread::Start() [member function]
-    cls.add_method('Start', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'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 &', u'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'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(ns3::int64x64_t const & v) [constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', '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::TimeWithUnit ns3::Time::As(ns3::Time::Unit const unit) const [member function]
-    cls.add_method('As', 
-                   'ns3::TimeWithUnit', 
-                   [param('ns3::Time::Unit const', 'unit')], 
-                   is_const=True)
-    ## 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 & 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::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
-    cls.add_method('FromDouble', 
-                   'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
-    cls.add_method('FromInteger', 
-                   'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
-    cls.add_method('GetDays', 
-                   'double', 
-                   [], 
-                   is_const=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'): double ns3::Time::GetHours() const [member function]
-    cls.add_method('GetHours', 
-                   'double', 
-                   [], 
-                   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'): double ns3::Time::GetMinutes() const [member function]
-    cls.add_method('GetMinutes', 
-                   'double', 
-                   [], 
-                   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'): double ns3::Time::GetYears() const [member function]
-    cls.add_method('GetYears', 
-                   'double', 
-                   [], 
-                   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 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 unit) const [member function]
-    cls.add_method('To', 
-                   'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
-    cls.add_method('ToDouble', 
-                   'double', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
-    cls.add_method('ToInteger', 
-                   'int64_t', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   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_Ns3DataRateChecker_methods(root_module, cls):
-    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker() [constructor]
-    cls.add_constructor([])
-    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker(ns3::DataRateChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataRateChecker const &', 'arg0')])
-    return
-
-def register_Ns3DataRateValue_methods(root_module, cls):
-    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue() [constructor]
-    cls.add_constructor([])
-    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRateValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::DataRateValue const &', 'arg0')])
-    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRate const & value) [constructor]
-    cls.add_constructor([param('ns3::DataRate const &', 'value')])
-    ## data-rate.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::DataRateValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## data-rate.h (module 'network'): bool ns3::DataRateValue::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)
-    ## data-rate.h (module 'network'): ns3::DataRate ns3::DataRateValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::DataRate', 
-                   [], 
-                   is_const=True)
-    ## data-rate.h (module 'network'): std::string ns3::DataRateValue::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)
-    ## data-rate.h (module 'network'): void ns3::DataRateValue::Set(ns3::DataRate const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::DataRate 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')])
-    ## 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_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]
-    cls.add_method('Copy', 
-                   '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', 
-                   '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 >', 
-                   [], 
-                   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', 
-                   '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]
-    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]
-    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]
-    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]
-    cls.add_method('Get', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6AddressValue::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]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Ipv6Address const &', 'value')])
-    return
-
-def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [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')])
-    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 >', 
-                   [], 
-                   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_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', 
-                   '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')])
-    return
-
-def register_Ns3Mac48AddressValue_methods(root_module, cls):
-    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [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]
-    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]
-    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]
-    cls.add_method('Get', 
-                   'ns3::Mac48Address', 
-                   [], 
-                   is_const=True)
-    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::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]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Mac48Address const &', 'value')])
-    return
-
-def register_Ns3NetDevice_methods(root_module, cls):
-    ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
-    cls.add_constructor([])
-    ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('AddLinkChangeCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Address', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetBroadcast() const [member function]
-    cls.add_method('GetBroadcast', 
-                   'ns3::Address', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Ptr<ns3::Channel> ns3::NetDevice::GetChannel() const [member function]
-    cls.add_method('GetChannel', 
-                   'ns3::Ptr< ns3::Channel >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): uint32_t ns3::NetDevice::GetIfIndex() const [member function]
-    cls.add_method('GetIfIndex', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): uint16_t ns3::NetDevice::GetMtu() const [member function]
-    cls.add_method('GetMtu', 
-                   'uint16_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Address', 
-                   [param('ns3::Ipv4Address', 'multicastGroup')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Address ns3::NetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Address', 
-                   [param('ns3::Ipv6Address', 'addr')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): ns3::Ptr<ns3::Node> ns3::NetDevice::GetNode() const [member function]
-    cls.add_method('GetNode', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDevice::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsBridge() const [member function]
-    cls.add_method('IsBridge', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsBroadcast() const [member function]
-    cls.add_method('IsBroadcast', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsLinkUp() const [member function]
-    cls.add_method('IsLinkUp', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsMulticast() const [member function]
-    cls.add_method('IsMulticast', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::IsPointToPoint() const [member function]
-    cls.add_method('IsPointToPoint', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::NeedsArp() const [member function]
-    cls.add_method('NeedsArp', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
-    cls.add_method('Send', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
-    cls.add_method('SendFrom', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetAddress(ns3::Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Address', 'address')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetIfIndex(uint32_t const index) [member function]
-    cls.add_method('SetIfIndex', 
-                   'void', 
-                   [param('uint32_t const', 'index')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::SetMtu(uint16_t const mtu) [member function]
-    cls.add_method('SetMtu', 
-                   'bool', 
-                   [param('uint16_t const', 'mtu')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<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> cb) [member function]
-    cls.add_method('SetPromiscReceiveCallback', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<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> cb) [member function]
-    cls.add_method('SetReceiveCallback', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'cb')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): bool ns3::NetDevice::SupportsSendFrom() const [member function]
-    cls.add_method('SupportsSendFrom', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, 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_Ns3Node_methods(root_module, cls):
-    ## node.h (module 'network'): ns3::Node::Node(ns3::Node const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Node const &', 'arg0')])
-    ## node.h (module 'network'): ns3::Node::Node() [constructor]
-    cls.add_constructor([])
-    ## node.h (module 'network'): ns3::Node::Node(uint32_t systemId) [constructor]
-    cls.add_constructor([param('uint32_t', 'systemId')])
-    ## node.h (module 'network'): uint32_t ns3::Node::AddApplication(ns3::Ptr<ns3::Application> application) [member function]
-    cls.add_method('AddApplication', 
-                   'uint32_t', 
-                   [param('ns3::Ptr< ns3::Application >', 'application')])
-    ## node.h (module 'network'): uint32_t ns3::Node::AddDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
-    cls.add_method('AddDevice', 
-                   'uint32_t', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
-    ## node.h (module 'network'): static bool ns3::Node::ChecksumEnabled() [member function]
-    cls.add_method('ChecksumEnabled', 
-                   'bool', 
-                   [], 
-                   is_static=True)
-    ## node.h (module 'network'): ns3::Ptr<ns3::Application> ns3::Node::GetApplication(uint32_t index) const [member function]
-    cls.add_method('GetApplication', 
-                   'ns3::Ptr< ns3::Application >', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## node.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Node::GetDevice(uint32_t index) const [member function]
-    cls.add_method('GetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [param('uint32_t', 'index')], 
-                   is_const=True)
-    ## node.h (module 'network'): uint32_t ns3::Node::GetId() const [member function]
-    cls.add_method('GetId', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
-    cls.add_method('GetNApplications', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## node.h (module 'network'): uint32_t ns3::Node::GetNDevices() const [member function]
-    cls.add_method('GetNDevices', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## node.h (module 'network'): uint32_t ns3::Node::GetSystemId() const [member function]
-    cls.add_method('GetSystemId', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## node.h (module 'network'): static ns3::TypeId ns3::Node::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## node.h (module 'network'): void ns3::Node::RegisterDeviceAdditionListener(ns3::Callback<void,ns3::Ptr<ns3::NetDevice>,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> listener) [member function]
-    cls.add_method('RegisterDeviceAdditionListener', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'listener')])
-    ## node.h (module 'network'): void ns3::Node::RegisterProtocolHandler(ns3::Callback<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> handler, uint16_t protocolType, ns3::Ptr<ns3::NetDevice> device, bool promiscuous=false) [member function]
-    cls.add_method('RegisterProtocolHandler', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'handler'), param('uint16_t', 'protocolType'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('bool', 'promiscuous', default_value='false')])
-    ## node.h (module 'network'): void ns3::Node::UnregisterDeviceAdditionListener(ns3::Callback<void,ns3::Ptr<ns3::NetDevice>,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> listener) [member function]
-    cls.add_method('UnregisterDeviceAdditionListener', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'listener')])
-    ## node.h (module 'network'): void ns3::Node::UnregisterProtocolHandler(ns3::Callback<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> handler) [member function]
-    cls.add_method('UnregisterProtocolHandler', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'handler')])
-    ## node.h (module 'network'): void ns3::Node::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## node.h (module 'network'): void ns3::Node::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=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_Ns3OutputStreamWrapper_methods(root_module, cls):
-    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(ns3::OutputStreamWrapper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::OutputStreamWrapper const &', 'arg0')])
-    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::string filename, std::_Ios_Openmode filemode) [constructor]
-    cls.add_constructor([param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode')])
-    ## output-stream-wrapper.h (module 'network'): ns3::OutputStreamWrapper::OutputStreamWrapper(std::ostream * os) [constructor]
-    cls.add_constructor([param('std::ostream *', 'os')])
-    ## output-stream-wrapper.h (module 'network'): std::ostream * ns3::OutputStreamWrapper::GetStream() [member function]
-    cls.add_method('GetStream', 
-                   'std::ostream *', 
-                   [])
-    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'): 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', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
-    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_Ns3AddressChecker_methods(root_module, cls):
-    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [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')])
-    return
-
-def register_Ns3AddressValue_methods(root_module, cls):
-    ## address.h (module 'network'): ns3::AddressValue::AddressValue() [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]
-    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]
-    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]
-    cls.add_method('Get', 
-                   'ns3::Address', 
-                   [], 
-                   is_const=True)
-    ## address.h (module 'network'): std::string ns3::AddressValue::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]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::Address const &', 'value')])
-    return
-
-def register_Ns3EmuNetDevice_methods(root_module, cls):
-    ## emu-net-device.h (module 'emu'): static ns3::TypeId ns3::EmuNetDevice::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## emu-net-device.h (module 'emu'): ns3::EmuNetDevice::EmuNetDevice() [constructor]
-    cls.add_constructor([])
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetDataRate(ns3::DataRate bps) [member function]
-    cls.add_method('SetDataRate', 
-                   'void', 
-                   [param('ns3::DataRate', 'bps')])
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::Start(ns3::Time tStart) [member function]
-    cls.add_method('Start', 
-                   'void', 
-                   [param('ns3::Time', 'tStart')])
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::Stop(ns3::Time tStop) [member function]
-    cls.add_method('Stop', 
-                   'void', 
-                   [param('ns3::Time', 'tStop')])
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetQueue(ns3::Ptr<ns3::Queue> queue) [member function]
-    cls.add_method('SetQueue', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
-    ## emu-net-device.h (module 'emu'): ns3::Ptr<ns3::Queue> ns3::EmuNetDevice::GetQueue() const [member function]
-    cls.add_method('GetQueue', 
-                   'ns3::Ptr< ns3::Queue >', 
-                   [], 
-                   is_const=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetIfIndex(uint32_t const index) [member function]
-    cls.add_method('SetIfIndex', 
-                   'void', 
-                   [param('uint32_t const', 'index')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): uint32_t ns3::EmuNetDevice::GetIfIndex() const [member function]
-    cls.add_method('GetIfIndex', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Ptr<ns3::Channel> ns3::EmuNetDevice::GetChannel() const [member function]
-    cls.add_method('GetChannel', 
-                   'ns3::Ptr< ns3::Channel >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetAddress(ns3::Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Address', 'address')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Address ns3::EmuNetDevice::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Address', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::SetMtu(uint16_t const mtu) [member function]
-    cls.add_method('SetMtu', 
-                   'bool', 
-                   [param('uint16_t const', 'mtu')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): uint16_t ns3::EmuNetDevice::GetMtu() const [member function]
-    cls.add_method('GetMtu', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsLinkUp() const [member function]
-    cls.add_method('IsLinkUp', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('AddLinkChangeCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsBroadcast() const [member function]
-    cls.add_method('IsBroadcast', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Address ns3::EmuNetDevice::GetBroadcast() const [member function]
-    cls.add_method('GetBroadcast', 
-                   'ns3::Address', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsMulticast() const [member function]
-    cls.add_method('IsMulticast', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Address ns3::EmuNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Address', 
-                   [param('ns3::Ipv4Address', 'multicastGroup')], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Address ns3::EmuNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
-    cls.add_method('GetMulticast', 
-                   'ns3::Address', 
-                   [param('ns3::Ipv6Address', 'addr')], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsPointToPoint() const [member function]
-    cls.add_method('IsPointToPoint', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::IsBridge() const [member function]
-    cls.add_method('IsBridge', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
-    cls.add_method('Send', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
-    cls.add_method('SendFrom', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): ns3::Ptr<ns3::Node> ns3::EmuNetDevice::GetNode() const [member function]
-    cls.add_method('GetNode', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::NeedsArp() const [member function]
-    cls.add_method('NeedsArp', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetReceiveCallback(ns3::Callback<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> cb) [member function]
-    cls.add_method('SetReceiveCallback', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'cb')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetPromiscReceiveCallback(ns3::Callback<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> cb) [member function]
-    cls.add_method('SetPromiscReceiveCallback', 
-                   'void', 
-                   [param('ns3::Callback< 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 >', 'cb')], 
-                   is_virtual=True)
-    ## emu-net-device.h (module 'emu'): bool ns3::EmuNetDevice::SupportsSendFrom() const [member function]
-    cls.add_method('SupportsSendFrom', 
-                   'bool', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::SetEncapsulationMode(ns3::EmuNetDevice::EncapsulationMode mode) [member function]
-    cls.add_method('SetEncapsulationMode', 
-                   'void', 
-                   [param('ns3::EmuNetDevice::EncapsulationMode', 'mode')])
-    ## emu-net-device.h (module 'emu'): ns3::EmuNetDevice::EncapsulationMode ns3::EmuNetDevice::GetEncapsulationMode() const [member function]
-    cls.add_method('GetEncapsulationMode', 
-                   'ns3::EmuNetDevice::EncapsulationMode', 
-                   [], 
-                   is_const=True)
-    ## emu-net-device.h (module 'emu'): void ns3::EmuNetDevice::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   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()
-    register_types(root_module)
-    register_methods(root_module)
-    register_functions(root_module)
-    root_module.generate(out)
-
-if __name__ == '__main__':
-    main()
-
diff -Naur ns-3.21/src/emu/doc/emu.rst ns-3.22/src/emu/doc/emu.rst
--- ns-3.21/src/emu/doc/emu.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/doc/emu.rst	1969-12-31 16:00:00.000000000 -0800
@@ -1,316 +0,0 @@
-.. include:: replace.txt
-.. highlight:: cpp
-
-Emu NetDevice
--------------
-
-**Note:** The ``EmuNetDevice`` is being deprecated as of ns-3.17.  The
-:doc:`fd-net-device` and ``EmuFdNetDeviceHelper`` class replaces this functionality and API entirely.
-
-Behavior
-********
-
-The ``Emu`` net device allows a simulation node to send and receive packets over
-a real network. The emulated net device relies on a specified interface being in
-promiscuous mode. It opens a raw socket and binds to that interface.  We perform
-MAC spoofing to separate simulation network traffic from other 
-network traffic that may be flowing to and from the host.
-
-One can use the ``Emu`` net device in a testbed situation where the host on
-which the simulation is running has a specific interface of interest which
-drives the testbed hardware. You would also need to set this specific interface
-into promiscuous mode and provide an appropriate device name to the |ns3|
-emulated net device. An example of this environment is the ORBIT testbed as
-described above.
-
-The ``Emu`` net device only works if the underlying interface is up and in
-promiscuous mode. Packets will be sent out over the device, but we use MAC
-spoofing. The MAC addresses will be generated (by default) using the
-Organizationally Unique Identifier (OUI) 00:00:00 as a base. This vendor code is
-not assigned to any organization and so should not conflict with any real
-hardware.  
-
-It is always up to the user to determine that using these MAC addresses is okay
-on your network and won't conflict with anything else (including another
-simulation using ``Emu`` devices) on your network. If you are using the emulated
-net device in separate simulations 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
-``SetAddress`` method so you can do this manually. For larger simulations, you
-may want to set the OUI in the MAC address allocation function.
-
-IP addresses corresponding to the emulated net devices are the addresses
-generated in the simulation, which are generated in the usual way via helper
-functions. Since we are using MAC spoofing, there will not be a conflict between
-|ns3| network stacks and any native network stacks.
-
-The emulated net device comes with a helper function as all |ns3| devices do.
-One unique aspect is that there is no channel associated with the underlying
-medium. We really have no idea what this external medium is, and so have not
-made an effort to model it abstractly. The primary thing to be aware of is the
-implication this has for IPv4 global routing. The global router module attempts
-to walk the channels looking for adjacent networks. Since there is no channel,
-the global router will be unable to do this and you must then use a dynamic
-routing protocol such as OLSR to include routing in ``Emu``-based networks.
-
-Usage
-*****
-
-Any mixing of |ns3| objects with real objects will typically require that
-|ns3| compute checksums in its protocols. By default, checksums are not
-computed by |ns3|. To enable checksums (e.g. UDP, TCP, IP), users must set
-the attribute ``ChecksumEnabled`` to true, such as follows::
-
-    GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
-
-The usage of the ``Emu`` net device is straightforward once the network of
-simulations has been configured. Since most of the work involved in working with
-this device is in network configuration before even starting a simulation, you
-may want to take a moment to review a couple of HOWTO pages on the |ns3| wiki
-that describe how to set up a virtual test network using VMware and how to run a
-set of example (client server) simulations that use ``Emu`` net devices.
-
-* `<http://www.nsnam.org/wiki/HOWTO_use_VMware_to_set_up_virtual_networks_(Windows)>`_
-* `<http://www.nsnam.org/wiki/HOWTO_use_ns-3_scripts_to_drive_real_hardware_(experimental)>`_
-
-Once you are over the configuration hurdle, the script changes required to use
-an ``Emu`` device are trivial. The main structural difference is that you will
-need to create an |ns3| simulation script for each node. In the case of the
-HOWTOs above, there is one client script and one server script. The only
-"challenge" is to get the addresses set correctly.
-
-Just as with all other |ns3| net devices, we provide a helper class for the
-``Emu`` net device. The following code snippet illustrates how one would declare
-an EmuHelper and use it to set the "DeviceName" attribute to "eth1" and install
-``Emu`` devices on a group of nodes. You would do this on both the client and
-server side in the case of the HOWTO seen above.::
-
-  EmuHelper emu;
-  emu.SetAttribute ("DeviceName", StringValue ("eth1"));
-  NetDeviceContainer d = emu.Install (n);
-
-The only other change that may be required is to make sure that the address
-spaces (MAC and IP) on the client and server simulations are compatible. First
-the MAC address is set to a unique well-known value in both places (illustrated
-here for one side).::
-
-  //
-  // We've got the devices in place.  Since we're using MAC address 
-  // spoofing under the sheets, we need to make sure that the MAC addresses
-  // we have assigned to our devices are unique.  Ns-3 will happily
-  // automatically assign the same MAC address to the devices in both halves
-  // of our two-script pair, so let's go ahead and just manually change them
-  // to something we ensure is unique.
-  //
-  Ptr<NetDevice> nd = d.Get (0);
-  Ptr<EmuNetDevice> ed = nd->GetObject<EmuNetDevice> ();
-  ed->SetAddress ("00:00:00:00:00:02");
-
-And then the IP address of the client or server is set in the usual way using
-helpers.::
-
-  //
-  // We've got the "hardware" in place.  Now we need to add IP addresses.
-  // This is the server half of a two-script pair.  We need to make sure
-  // that the addressing in both of these applications is consistent, so
-  // we use provide an initial address in both cases.  Here, the client 
-  // will reside on one machine running ns-3 with one node having ns-3
-  // with IP address "10.1.1.2" and talk to a server script running in 
-  // another ns-3 on another computer that has an ns-3 node with IP 
-  // address "10.1.1.3"
-  //
-  Ipv4AddressHelper ipv4;
-  ipv4.SetBase ("10.1.1.0", "255.255.255.0", "0.0.0.2");
-  Ipv4InterfaceContainer i = ipv4.Assign (d);
-
-You will use application helpers to generate traffic exactly as you do in any
-|ns3| simulation script. Note that the server address shown below in a snippet
-from the client, must correspond to the IP address assigned to the server node
-similarly to the snippet above.::
-
-  uint32_t packetSize = 1024;
-  uint32_t maxPacketCount = 2000;
-  Time interPacketInterval = Seconds (0.001);
-  UdpEchoClientHelper client ("10.1.1.3", 9);
-  client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
-  client.SetAttribute ("Interval", TimeValue (interPacketInterval));
-  client.SetAttribute ("PacketSize", UintegerValue (packetSize));
-  ApplicationContainer apps = client.Install (n.Get (0));
-  apps.Start (Seconds (1.0));
-  apps.Stop (Seconds (2.0));
-
-The ``Emu`` net device and helper provide access to ASCII and pcap tracing
-functionality just as other |ns3| net devices to. You enable tracing similarly
-to these other net devices::
-
-  EmuHelper::EnablePcapAll ("emu-udp-echo-client");
-
-For examples that use the ``Emu`` net device, see
-``src/emu/examples/emu-udp-echo.cc`` and ``src/emu/examples/emu-ping.cc``
-in the repository.
-
-Implementation
-**************
-
-Perhaps the most unusual part of the ``Emu`` and ``Tap`` device implementation
-relates to the requirement for executing some of the code with super-user
-permissions. Rather than force the user to execute the entire simulation as
-root, we provide a small "creator" program that runs as root and does any
-required high-permission sockets work.
-
-We do a similar thing for both the ``Emu`` and the ``Tap`` devices.  The
-high-level view is that the ``CreateSocket`` method creates a local interprocess
-(Unix) socket, forks, and executes the small creation program. The small
-program, which runs as suid root, creates a raw socket and sends back the raw
-socket file descriptor over the Unix socket that is passed to it as a parameter.
-The raw socket is passed as a control message (sometimes called ancillary data)
-of type SCM_RIGHTS.
-
-The ``Emu`` net device uses the |ns3| threading and multithreaded real-time
-scheduler extensions. The interesting work in the ``Emu`` device is done when
-the net device is started (``EmuNetDevice::StartDevice ()``). An attribute
-("Start") provides a simulation time at which to spin up the net device. At this
-specified time (which defaults to t=0), the socket creation function is called
-and executes as described above. You may also specify a time at which to stop
-the device using the "Stop" attribute.
-
-Once the (promiscuous mode) socket is created, we bind it to an interface name 
-also provided as an attribute ("DeviceName") that is stored internally as 
-``m_deviceName``::
-
-  struct ifreq ifr;
-  bzero (&ifr, sizeof(ifr));
-  strncpy ((char *)ifr.ifr_name, m_deviceName.c_str (), IFNAMSIZ);
-
-  int32_t rc = ioctl (m_sock, SIOCGIFINDEX, &ifr);
-
-  struct sockaddr_ll ll;
-  bzero (&ll, sizeof(ll));
-
-  ll.sll_family = AF_PACKET;
-  ll.sll_ifindex = m_sll_ifindex;
-  ll.sll_protocol = htons(ETH_P_ALL);
-
-  rc = bind (m_sock, (struct sockaddr *)&ll, sizeof (ll));
-
-After the promiscuous raw socket is set up, a separate thread is spawned to do 
-reads from that socket and the link state is set to ``Up``.::
-
-  m_readThread = Create<SystemThread> (
-    MakeCallback (&EmuNetDevice::ReadThread, this));
-  m_readThread->Start ();
-
-  NotifyLinkUp ();
-
-The ``EmuNetDevice::ReadThread`` function basically just sits in an infinite
-loop reading from the promiscuous mode raw socket and scheduling packet 
-receptions using the real-time simulator extensions.::
-
-  for (;;)
-    {
-      ...
-
-      len = recvfrom (m_sock, buf, bufferSize, 0, (struct sockaddr *)&addr, 
-        &addrSize);
-
-      ...
-
-      DynamicCast<RealtimeSimulatorImpl> (Simulator::GetImplementation ())->
-        ScheduleRealtimeNow (
-          MakeEvent (&EmuNetDevice::ForwardUp, this, buf, len));
-
-      ...
-    }
-
-The line starting with our templated DynamicCast function probably deserves a
-comment. It gains access to the simulator implementation object using the
-``Simulator::GetImplementation`` method and then casts to the real-time
-simulator implementation to use the real-time schedule method
-``ScheduleRealtimeNow``. This function will cause a handler for the  newly
-received packet to be scheduled for execution at the current real time clock
-value. This will, in turn cause the simulation clock to be advanced to that real
-time value when the scheduled event (``EmuNetDevice::ForwardUp``) is fired.
-
-The ``ForwardUp`` function operates as most other similar |ns3| net device
-methods do. The packet is first filtered based on the destination address. In
-the case of the ``Emu`` device, the MAC destination address will be the address
-of the ``Emu`` device and not the hardware address of the real device. Headers
-are then stripped off and the trace hooks are hit. Finally, the packet is passed
-up the |ns3| protocol stack using the receive callback function of the net
-device.
-
-Sending a packet is equally straightforward as shown below. The first thing we
-do is to add the ethernet header and trailer to the |ns3| ``Packet`` we are
-sending. The source address corresponds to the address of the ``Emu`` device and
-not the underlying native device MAC address. This is where the MAC address
-spoofing is done. The trailer is added and we enqueue and dequeue the packet
-from the net device queue to hit the trace hooks.::
-
-  header.SetSource (source);
-  header.SetDestination (destination);
-  header.SetLengthType (packet->GetSize ());
-  packet->AddHeader (header);
-
-  EthernetTrailer trailer;
-  trailer.CalcFcs (packet);
-  packet->AddTrailer (trailer);
-
-  m_queue->Enqueue (packet);
-  packet = m_queue->Dequeue ();
-
-  struct sockaddr_ll ll;
-  bzero (&ll, sizeof (ll));
-
-  ll.sll_family = AF_PACKET;
-  ll.sll_ifindex = m_sll_ifindex;
-  ll.sll_protocol = htons(ETH_P_ALL);
-
-  rc = sendto (m_sock, packet->PeekData (), packet->GetSize (), 0, 
-    reinterpret_cast<struct sockaddr *> (&ll), sizeof (ll));
-
-Finally, we simply send the packet to the raw socket which puts it out on the
-real network.
-
-From the point of view of tracing in the net device, there are several
-interesting points to insert trace hooks.  A convention inherited from other
-simulators is that packets destined for transmission onto attached networks
-pass through a single "transmit queue" in the net device.  We provide trace
-hooks at this point in packet flow, which corresponds (abstractly) only to a
-transition from the network to data link layer, and call them collectively
-the device MAC hooks.
-
-When a packet is sent to the Emu net device for transmission it always
-passes through the transmit queue.  The transmit queue in the EmuNetDevice
-inherits from Queue, and therefore inherits three trace sources:
-
-* An Enqueue operation source (see Queue::m_traceEnqueue);
-* A Dequeue operation source (see Queue::m_traceDequeue);
-* A Drop operation source (see Queue::m_traceDrop).
-
-The upper-level (MAC) trace hooks for the EmuNetDevice are, in fact,
-exactly these three trace sources on the single transmit queue of the device. 
-
-The m_traceEnqueue event is triggered when a packet is placed on the transmit
-queue.  This happens at the time that ns3::EmuNetDevice::Send or
-``ns3::EmuNetDevice::SendFrom`` is called by a higher layer to queue a 
-packet for transmission.
-
-The m_traceDequeue event is triggered when a packet is removed from the
-transmit queue.  Dequeues from the transmit queue happen immediately after
-the packet was enqueued and only indicate that the packet is about to be
-sent to an underlying raw socket.  The actual time at which the packet is
-sent out on the wire is not available.
-
-Similar to the upper level trace hooks, there are trace hooks available at
-the lower levels of the net device.  We call these the PHY hooks.  These
-events fire from the device methods that talk directly to the underlying
-raw socket.
-
-The trace source m_dropTrace is not used in the Emu net device since that
-is really the business of the underlying "real" device driver.
-
-The other low-level trace source fires on reception of an accepted packet
-(see ``ns3::EmuNetDevice::m_rxTrace``).  A packet is accepted if it is destined
-for the broadcast address, a multicast address, or to the MAC address
-assigned to the Emu net device.
-
diff -Naur ns-3.21/src/emu/examples/emu-ping.cc ns-3.22/src/emu/examples/emu-ping.cc
--- ns-3.21/src/emu/examples/emu-ping.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/examples/emu-ping.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,218 +0,0 @@
-/* -*- 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
- */
-
-// Allow ns-3 to ping a real host somewhere, using emulation mode
-//
-//   ------------
-//   |  node n0 |
-//   |          |
-//   |  ---     |
-//   | |   |    |
-//   | |emu|    |
-//   | |   |    |
-//   |  ---     |
-//   |   |      |
-//   ----|-------
-//       |
-//     (device on host system, set to promiscuous mode)
-//       |
-//      --------- (Internet) -------
-//
-// To use this example:
-//  1) You need to decide on a physical device on your real system, and either
-//     overwrite the hard-configured device name below (eth0) or pass this 
-//     device name in as a command-line argument
-//  2) The host device must be set to promiscuous mode 
-//     (e.g. "sudo ifconfig eth0 promisc")
-//  3) Be aware that ns-3 will generate a fake mac address, and that in
-//     some enterprise networks, this may be considered bad form to be
-//     sending packets out of your device with "unauthorized" mac addresses
-//  4) You will need to assign an IP address to the ns-3 simulation node that
-//     is consistent with the subnet that is active on the host device's link.
-//     That is, you will have to assign an IP address to the ns-3 node as if
-//     it were on your real subnet.  Search for "Ipv4Address localIp" and 
-//     replace the string "1.2.3.4" with a valid IP address.
-//  5) You will need to configure a default route in the ns-3 node to tell it
-//     how to get off of your subnet. One thing you could do is a 
-//     'netstat -rn' command and find the IP address of the default gateway
-//     on your host.  Search for "Ipv4Address gateway" and replace the string
-//     "1.2.3.4" string with the gateway IP address.
-
-#include "ns3/abort.h"
-#include "ns3/core-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/network-module.h"
-#include "ns3/emu-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/ipv4-static-routing-helper.h"
-#include "ns3/ipv4-list-routing-helper.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("PingEmulationExample");
-
-static void 
-PingRtt (std::string context, Time rtt)
-{
-  NS_LOG_UNCOND ("Received Response with RTT = " << rtt);
-}
-
-int 
-main (int argc, char *argv[])
-{
-  NS_LOG_INFO ("Ping Emulation Example");
-
-  std::string deviceName ("eth0");
-  std::string remote ("208.77.188.166"); // example.com
-
-  //
-  // Allow the user to override any of the defaults at run-time, via 
-  // command-line arguments
-  //
-  CommandLine cmd;
-  cmd.AddValue ("deviceName", "Device name", deviceName);
-  cmd.AddValue ("remote", "Remote IP address (dotted decimal only please)", remote);
-  cmd.Parse (argc, argv);
-
-  Ipv4Address remoteIp (remote.c_str ());
-  Ipv4Address localIp ("192.168.1.94");
-  NS_ABORT_MSG_IF (localIp == "1.2.3.4", "You must change the local IP address before running this example");
-
-  Ipv4Mask localMask ("255.255.255.0");
-
-  //
-  // Since we are using a real piece of hardware we need to use the realtime
-  // simulator.
-  //
-  GlobalValue::Bind ("SimulatorImplementationType", StringValue ("ns3::RealtimeSimulatorImpl"));
-
-  //
-  // Since we are going to be talking to real-world machines, we need to enable
-  // calculation of checksums in our protocols.
-  //
-  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
-
-  //
-  // In such a simple topology, the use of the helper API can be a hindrance
-  // so we drop down into the low level API and do it manually.
-  //
-  // First we need a single node.
-  //
-  NS_LOG_INFO ("Create Node");
-  Ptr<Node> node = CreateObject<Node> ();
-
-  //
-  // Create an emu device, allocate a MAC address and point the device to the 
-  // Linux device name.  The device needs a transmit queueing discipline so
-  // create a droptail queue and give it to the device.  Finally, "install" 
-  // the device into the node.
-  //
-  // Do understand that the ns-3 allocated MAC address will be sent out over 
-  // your network since the emu net device will spoof it.  By default, this 
-  // address will have an Organizationally Unique Identifier (OUI) of zero.
-  // The Internet Assigned Number Authority IANA
-  // 
-  //  http://www.iana.org/assignments/ethernet-numbers
-  //
-  // reports that this OUI is unassigned, and so should not conflict with
-  // real hardware on your net.  It may raise all kinds of red flags in a
-  // real environment to have packets from a device with an obviously bogus
-  // OUI flying around.  Be aware.
-  // 
-  NS_LOG_INFO ("Create Device");
-  Ptr<EmuNetDevice> device = CreateObject<EmuNetDevice> ();
-  device->SetAttribute ("Address", Mac48AddressValue (Mac48Address::Allocate ()));
-  device->SetAttribute ("DeviceName", StringValue (deviceName));
-
-  Ptr<Queue> queue = CreateObject<DropTailQueue> ();
-  device->SetQueue (queue);
-  node->AddDevice (device);
-
-  //
-  // Add a default internet stack to the node.  This gets us the ns-3 versions
-  // of ARP, IPv4, ICMP, UDP and TCP.
-  //
-  NS_LOG_INFO ("Add Internet Stack");
-  InternetStackHelper internetStackHelper;
-  internetStackHelper.Install (node);
-
-  NS_LOG_INFO ("Create IPv4 Interface");
-  Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
-  uint32_t interface = ipv4->AddInterface (device);
-  Ipv4InterfaceAddress address = Ipv4InterfaceAddress (localIp, localMask);
-  ipv4->AddAddress (interface, address);
-  ipv4->SetMetric (interface, 1);
-  ipv4->SetUp (interface);
-
-  //
-  // When the ping appliation sends its ICMP packet, it will happily send it
-  // down the ns-3 protocol stack.  We set the IP address of the destination
-  // to the address corresponding to example.com above.  This address is off 
-  // our local network so we have got to provide some kind of default route 
-  // to ns-3 to be able to get that ICMP packet forwarded off of our network.
-  //
-  // You have got to provide an IP address of a real host that you can send
-  // real packets to and have them forwarded off of your local network.  One
-  // thing you could do is a 'netstat -rn' command and find the IP address of
-  // the default gateway on your host and add it below, replacing the 
-  // "1.2.3.4" string.
-  //
-  Ipv4Address gateway ("192.168.1.254");
-  NS_ABORT_MSG_IF (gateway == "1.2.3.4", "You must change the gateway IP address before running this example");
-
-  Ipv4StaticRoutingHelper ipv4RoutingHelper;
-  Ptr<Ipv4StaticRouting> staticRouting = ipv4RoutingHelper.GetStaticRouting (ipv4);
-  staticRouting->SetDefaultRoute (gateway, interface);
-
-  //
-  // Create the ping application.  This application knows how to send
-  // ICMP echo requests.  Setting up the packet sink manually is a bit
-  // of a hassle and since there is no law that says we cannot mix the
-  // helper API with the low level API, let's just use the helper.
-  //
-  NS_LOG_INFO ("Create V4Ping Appliation");
-  Ptr<V4Ping> app = CreateObject<V4Ping> ();
-  app->SetAttribute ("Remote", Ipv4AddressValue (remoteIp));
-  node->AddApplication (app);
-  app->SetStartTime (Seconds (1.0));
-  app->SetStopTime (Seconds (5.0));
-
-  //
-  // Give the application a name.  This makes life much easier when constructing
-  // config paths.
-  //
-  Names::Add ("app", app);
-
-  //
-  // Hook a trace to print something when the response comes back.
-  //
-  Config::Connect ("/Names/app/Rtt", MakeCallback (&PingRtt));
-
-  //
-  // Enable a promiscuous pcap trace to see what is coming and going on our device.
-  //
-  EmuHelper emu;
-  emu.EnablePcap ("emu-ping", device, true);
-
-  //
-  // Now, do the actual emulation.
-  //
-  NS_LOG_INFO ("Run Emulation.");
-  Simulator::Stop (Seconds (5.0));
-  Simulator::Run ();
-  Simulator::Destroy ();
-  NS_LOG_INFO ("Done.");
-}
diff -Naur ns-3.21/src/emu/examples/emu-udp-echo.cc ns-3.22/src/emu/examples/emu-udp-echo.cc
--- ns-3.21/src/emu/examples/emu-udp-echo.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/examples/emu-udp-echo.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,162 +0,0 @@
-/* -*- 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
- */
-
-// Network topology
-//
-// Normally, the use case for emulated net devices is in collections of
-// small simulations that connect to the outside world through specific 
-// interfaces.  For example, one could construct a number of virtual
-// machines and connect them via a host-only network.  To use the emulated
-// net device, you would need to set all of the host-only interfaces in
-// promiscuous mode and provide an appropriate device name (search for "eth1"
-// below).  One could also use the emulated net device in a testbed situation
-// where the host on which the simulation is running has a specific interface
-// of interested.  You would also need to set this specific interface into
-// promiscuous mode and provide an appropriate device name.
-//
-// This philosophy carries over to this simple example.
-//
-// We don't assume any special configuration and all of the ns-3 emulated net
-// devices will actually talk to the same underlying OS device.  We rely on 
-// the fact that the OS will deliver copies of our packets to the other ns-3
-// net devices since we operate in promiscuous mode.
-//
-// Packets will be sent out over the device, but we use MAC spoofing.  The
-// MAC addresses will be generated using the Organizationally Unique Identifier
-// (OUI) 00:00:00 as a base.  This vendor code is not assigned to any 
-// organization and so should not conflict with any real hardware.  We'll use 
-// the first n of these addresses, where n is the number of nodes, in this
-// simualtion.  It is up to you to determine that using these MAC addresses is
-// okay on your network and won't conflict with anything else (including another
-// simulation using emu devices) on your network.  Once you have made this 
-// determination, you need to put the interface you chose into promiscuous mode.
-// We don't do it for you since you need to think about it first.
-//
-// This simulation uses the real-time simulator and so will consume ten seconds
-// of real time.
-//
-// By default, we create the following topology
-//
-//       n0    n1   n2   n3
-//       |     |    |    |
-//       -----------------
-//             "eth1"
-//
-// - UDP flows from n0 to n1 and back
-// - DropTail queues 
-// - Tracing of queues and packet receptions to file "udp-echo.tr"
-// - pcap tracing on all devices
-//
-
-#include <fstream>
-#include "ns3/core-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/emu-helper.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("EmulatedUdpEchoExample");
-
-int 
-main (int argc, char *argv[])
-{
-  std::string deviceName ("eth1");
-  std::string encapMode ("Dix");
-  uint32_t nNodes = 4;
-
-  //
-  // Allow the user to override any of the defaults at run-time, via command-line
-  // arguments
-  //
-  CommandLine cmd;
-  cmd.AddValue ("deviceName", "device name", deviceName);
-  cmd.AddValue ("encapsulationMode", "encapsulation mode of emu device (\"Dix\" [default] or \"Llc\")", encapMode);
-  cmd.AddValue ("nNodes", "number of nodes to create (>= 2)", nNodes);
-
-  cmd.Parse (argc, argv);
-
-  GlobalValue::Bind ("SimulatorImplementationType", 
-                     StringValue ("ns3::RealtimeSimulatorImpl"));
-
-  //
-  // need at least two nodes
-  //
-  nNodes = nNodes < 2 ? 2 : nNodes;
-
-  //
-  // Explicitly create the nodes required by the topology (shown above).
-  //
-  NS_LOG_INFO ("Create nodes.");
-  NodeContainer n;
-  n.Create (nNodes);
-
-  InternetStackHelper internet;
-  internet.Install (n);
-
-  //
-  // Explicitly create the channels required by the topology (shown above).
-  //
-  NS_LOG_INFO ("Create channels.");
-  EmuHelper emu;
-  emu.SetAttribute ("DeviceName", StringValue (deviceName));
-  emu.SetAttribute ("EncapsulationMode", StringValue (encapMode));
-
-  NetDeviceContainer d = emu.Install (n);
-
-  //
-  // We've got the "hardware" in place.  Now we need to add IP addresses.
-  //
-  Ipv4AddressHelper ipv4;
-  NS_LOG_INFO ("Assign IP Addresses.");
-  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer i = ipv4.Assign (d);
-
-  //
-  // Create a UdpEchoServer application on node one.
-  //
-  NS_LOG_INFO ("Create Applications.");
-  UdpEchoServerHelper server (9);
-  ApplicationContainer apps = server.Install (n.Get (1));
-  apps.Start (Seconds (1.0));
-  apps.Stop (Seconds (10.0));
-
-  //
-  // Create a UdpEchoClient application to send UDP datagrams from node zero to node one.
-  //
-  uint32_t packetSize = 1024;
-  uint32_t maxPacketCount = 20;
-  Time interPacketInterval = Seconds (0.1);
-  UdpEchoClientHelper client (i.GetAddress (1), 9);
-  client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
-  client.SetAttribute ("Interval", TimeValue (interPacketInterval));
-  client.SetAttribute ("PacketSize", UintegerValue (packetSize));
-  apps = client.Install (n.Get (0));
-  apps.Start (Seconds (2.0));
-  apps.Stop (Seconds (10.0));
-
-  std::ofstream ascii;
-  ascii.open ("emu-udp-echo.tr");
-  emu.EnablePcapAll ("emu-udp-echo", true);
-
-  //
-  // Now, do the actual simulation.
-  //
-  NS_LOG_INFO ("Run Simulation.");
-  Simulator::Run ();
-  Simulator::Destroy ();
-  NS_LOG_INFO ("Done.");
-}
diff -Naur ns-3.21/src/emu/examples/wscript ns-3.22/src/emu/examples/wscript
--- ns-3.21/src/emu/examples/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/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):
-    env = bld.env
-    if env['ENABLE_EMU']:
-        obj = bld.create_ns3_program('emu-udp-echo', ['emu', 'internet', 'applications'])
-        obj.source = 'emu-udp-echo.cc'
-
-        obj = bld.create_ns3_program('emu-ping', ['emu', 'internet', 'applications'])
-        obj.source = 'emu-ping.cc'
diff -Naur ns-3.21/src/emu/helper/emu-helper.cc ns-3.22/src/emu/helper/emu-helper.cc
--- ns-3.21/src/emu/helper/emu-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/helper/emu-helper.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,244 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 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 <string>
-
-#include "ns3/log.h"
-#include "ns3/simulator.h"
-#include "ns3/object-factory.h"
-#include "ns3/names.h"
-#include "ns3/queue.h"
-#include "ns3/emu-net-device.h"
-#include "ns3/config.h"
-#include "ns3/packet.h"
-
-#include "ns3/trace-helper.h"
-#include "emu-helper.h"
-
-NS_LOG_COMPONENT_DEFINE ("EmuHelper");
-
-namespace ns3 {
-
-EmuHelper::EmuHelper ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  m_queueFactory.SetTypeId ("ns3::DropTailQueue");
-  m_deviceFactory.SetTypeId ("ns3::EmuNetDevice");
-}
-
-void 
-EmuHelper::SetQueue (
-  std::string type,
-  std::string n1, const AttributeValue &v1,
-  std::string n2, const AttributeValue &v2,
-  std::string n3, const AttributeValue &v3,
-  std::string n4, const AttributeValue &v4)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  m_queueFactory.SetTypeId (type);
-  m_queueFactory.Set (n1, v1);
-  m_queueFactory.Set (n2, v2);
-  m_queueFactory.Set (n3, v3);
-  m_queueFactory.Set (n4, v4);
-}
-
-void 
-EmuHelper::SetAttribute (std::string n1, const AttributeValue &v1)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  m_deviceFactory.Set (n1, v1);
-}
-
-void 
-EmuHelper::EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename)
-{
-  //
-  // All of the Pcap enable functions vector through here including the ones
-  // that are wandering through all of devices on perhaps all of the nodes in
-  // the system.  We can only deal with devices of type EmuNetDevice.
-  //
-  Ptr<EmuNetDevice> device = nd->GetObject<EmuNetDevice> ();
-  if (device == 0)
-    {
-      NS_LOG_INFO ("EmuHelper::EnablePcapInternal(): Device " << device << " not of type ns3::EmuNetDevice");
-      return;
-    }
-
-  PcapHelper pcapHelper;
-
-  std::string filename;
-  if (explicitFilename)
-    {
-      filename = prefix;
-    }
-  else
-    {
-      filename = pcapHelper.GetFilenameFromDevice (prefix, device);
-    }
-
-  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile (filename, std::ios::out, PcapHelper::DLT_EN10MB);
-  if (promiscuous)
-    {
-      pcapHelper.HookDefaultSink<EmuNetDevice> (device, "PromiscSniffer", file);
-    }
-  else
-    {
-      pcapHelper.HookDefaultSink<EmuNetDevice> (device, "Sniffer", file);
-    }
-}
-
-void 
-EmuHelper::EnableAsciiInternal (
-  Ptr<OutputStreamWrapper> stream, 
-  std::string prefix, 
-  Ptr<NetDevice> nd,
-  bool explicitFilename)
-{
-  //
-  // All of the ascii enable functions vector through here including the ones
-  // that are wandering through all of devices on perhaps all of the nodes in
-  // the system.  We can only deal with devices of type EmuNetDevice.
-  //
-  Ptr<EmuNetDevice> device = nd->GetObject<EmuNetDevice> ();
-  if (device == 0)
-    {
-      NS_LOG_INFO ("EmuHelper::EnableAsciiInternal(): Device " << device << " not of type ns3::EmuNetDevice");
-      return;
-    }
-
-  //
-  // Our default trace sinks are going to use packet printing, so we have to 
-  // make sure that is turned on.
-  //
-  Packet::EnablePrinting ();
-
-  //
-  // If we are not provided an OutputStreamWrapper, we are expected to create 
-  // one using the usual trace filename conventions and do a Hook*WithoutContext
-  // since there will be one file per context and therefore the context would
-  // be redundant.
-  //
-  if (stream == 0)
-    {
-      //
-      // Set up an output stream object to deal with private ofstream copy 
-      // constructor and lifetime issues.  Let the helper decide the actual
-      // name of the file given the prefix.
-      //
-      AsciiTraceHelper asciiTraceHelper;
-
-      std::string filename;
-      if (explicitFilename)
-        {
-          filename = prefix;
-        }
-      else
-        {
-          filename = asciiTraceHelper.GetFilenameFromDevice (prefix, device);
-        }
-
-      Ptr<OutputStreamWrapper> theStream = asciiTraceHelper.CreateFileStream (filename);
-
-      //
-      // The MacRx trace source provides our "r" event.
-      //
-      asciiTraceHelper.HookDefaultReceiveSinkWithoutContext<EmuNetDevice> (device, "MacRx", theStream);
-
-      //
-      // The "+", '-', and 'd' events are driven by trace sources actually in the
-      // transmit queue.
-      //
-      Ptr<Queue> queue = device->GetQueue ();
-      asciiTraceHelper.HookDefaultEnqueueSinkWithoutContext<Queue> (queue, "Enqueue", theStream);
-      asciiTraceHelper.HookDefaultDropSinkWithoutContext<Queue> (queue, "Drop", theStream);
-      asciiTraceHelper.HookDefaultDequeueSinkWithoutContext<Queue> (queue, "Dequeue", theStream);
-
-      return;
-    }
-
-  //
-  // If we are provided an OutputStreamWrapper, we are expected to use it, and
-  // to providd a context.  We are free to come up with our own context if we
-  // want, and use the AsciiTraceHelper Hook*WithContext functions, but for 
-  // compatibility and simplicity, we just use Config::Connect and let it deal
-  // with the context.
-  //
-  // Note that we are going to use the default trace sinks provided by the 
-  // ascii trace helper.  There is actually no AsciiTraceHelper in sight here,
-  // but the default trace sinks are actually publicly available static 
-  // functions that are always there waiting for just such a case.
-  //
-  uint32_t nodeid = nd->GetNode ()->GetId ();
-  uint32_t deviceid = nd->GetIfIndex ();
-  std::ostringstream oss;
-
-  oss << "/NodeList/" << nd->GetNode ()->GetId () << "/DeviceList/" << deviceid << "/$ns3::EmuNetDevice/MacRx";
-  Config::Connect (oss.str (), MakeBoundCallback (&AsciiTraceHelper::DefaultReceiveSinkWithContext, stream));
-
-  oss.str ("");
-  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::EmuNetDevice/TxQueue/Enqueue";
-  Config::Connect (oss.str (), MakeBoundCallback (&AsciiTraceHelper::DefaultEnqueueSinkWithContext, stream));
-
-  oss.str ("");
-  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::EmuNetDevice/TxQueue/Dequeue";
-  Config::Connect (oss.str (), MakeBoundCallback (&AsciiTraceHelper::DefaultDequeueSinkWithContext, stream));
-
-  oss.str ("");
-  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::EmuNetDevice/TxQueue/Drop";
-  Config::Connect (oss.str (), MakeBoundCallback (&AsciiTraceHelper::DefaultDropSinkWithContext, stream));
-}
-
-NetDeviceContainer
-EmuHelper::Install (Ptr<Node> node) const
-{
-  return NetDeviceContainer (InstallPriv (node));
-}
-
-NetDeviceContainer
-EmuHelper::Install (std::string nodeName) const
-{
-  Ptr<Node> node = Names::Find<Node> (nodeName);
-  return NetDeviceContainer (InstallPriv (node));
-}
-
-NetDeviceContainer 
-EmuHelper::Install (const NodeContainer &c) const
-{
-  NetDeviceContainer devs;
-
-  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); i++)
-    {
-      devs.Add (InstallPriv (*i));
-    }
-
-  return devs;
-}
-
-Ptr<NetDevice>
-EmuHelper::InstallPriv (Ptr<Node> node) const
-{
-  Ptr<EmuNetDevice> device = m_deviceFactory.Create<EmuNetDevice> ();
-  device->SetAddress (Mac48Address::Allocate ());
-  node->AddDevice (device);
-  Ptr<Queue> queue = m_queueFactory.Create<Queue> ();
-  device->SetQueue (queue);
-
-  return device;
-}
-
-} // namespace ns3
diff -Naur ns-3.21/src/emu/helper/emu-helper.h ns-3.22/src/emu/helper/emu-helper.h
--- ns-3.21/src/emu/helper/emu-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/helper/emu-helper.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,155 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 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 EMU_HELPER_H
-#define EMU_HELPER_H
-
-#include <string>
-#include <ostream>
-
-#include "ns3/attribute.h"
-#include "ns3/object-factory.h"
-#include "ns3/net-device-container.h"
-#include "ns3/node-container.h"
-#include "ns3/emu-net-device.h"
-
-#include "ns3/trace-helper.h"
-
-namespace ns3 {
-
-class Packet;
-
-/**
- * \brief build a set of EmuNetDevice objects
- *
- * Normally we eschew multiple inheritance, however, the classes 
- * PcapUserHelperForDevice and AsciiTraceUserHelperForDevice are
- * treated as "mixins".  A mixin is a self-contained class that
- * encapsulates a general attribute or a set of functionality that
- * may be of interest to many other classes.
- */
-class EmuHelper : public PcapHelperForDevice, public AsciiTraceHelperForDevice
-{
-public:
-  /*
-   * Construct an EmuHelper() which is used to make installing and configuring 
-   * Emulated Net Devices easier.
-   */
-  EmuHelper ();
-
-  /**
-   * \param type the type of queue
-   * \param n1 the name of the attribute to set on the queue
-   * \param v1 the value of the attribute to set on the queue
-   * \param n2 the name of the attribute to set on the queue
-   * \param v2 the value of the attribute to set on the queue
-   * \param n3 the name of the attribute to set on the queue
-   * \param v3 the value of the attribute to set on the queue
-   * \param n4 the name of the attribute to set on the queue
-   * \param v4 the value of the attribute to set on the queue
-   *
-   * Set the type of queue to create and associated to each
-   * EmuNetDevice created through EmuHelper::Install.
-   */
-  void SetQueue (std::string type,
-                 std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
-                 std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
-                 std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
-                 std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue ());
-
-  /**
-   * \param n1 the name of the attribute to set
-   * \param v1 the value of the attribute to set
-   *
-   * Set these attributes on each ns3::EmuNetDevice created
-   * by EmuHelper::Install
-   */
-  void SetAttribute (std::string n1, const AttributeValue &v1);
-
-  /**
-   * This method creates an ns3::EmuNetDevice with the attributes configured by 
-   * EmuHelper::SetDeviceAttribute and then adds the device to the node.
-   *
-   * \param node The node to install the device in
-   * \returns A container holding the added net device.
-   */
-  NetDeviceContainer Install (Ptr<Node> node) const;
-
-  /**
-   * This method creates an ns3::EmuNetDevice with the attributes configured by 
-   * EmuHelper::SetDeviceAttribute and then adds the device to the node.
-   *
-   * \param nodeName The name of the node to install the device in
-   * \returns A container holding the added net device.
-   */
-  NetDeviceContainer Install (std::string nodeName) const;
-
-  /**
-   * For each Ptr<node> in the provided container this method creates an 
-   * ns3::EmuNetDevice (with the attributes configured by 
-   * EmuHelper::SetDeviceAttribute); adds the device to the node.
-   *
-   * \param c The NodeContainer holding the nodes to be changed.
-   * \returns A container holding the added net devices.
-   */
-  NetDeviceContainer Install (const NodeContainer &c) const;
-
-private:
-  /*
-   * \internal
-   */
-  Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
-
-  /**
-   * \brief Enable pcap output the indicated net device.
-   *
-   * NetDevice-specific implementation mechanism for hooking the trace and
-   * writing to the trace file.
-   *
-   * \param prefix Filename prefix to use for pcap files.
-   * \param nd Net device for which you want to enable tracing.
-   * \param promiscuous If true capture all possible packets available at the device.
-   * \param explicitFilename Treat the prefix as an explicit filename if true
-   */
-  virtual void EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename);
-
-  /**
-   * \brief Enable ascii trace output on the indicated net device.
-   * \internal
-   *
-   * NetDevice-specific implementation mechanism for hooking the trace and
-   * writing to the trace file.
-   *
-   * \param stream The output stream object to use when logging ascii traces.
-   * \param prefix Filename prefix to use for ascii trace files.
-   * \param nd Net device for which you want to enable tracing.
-   * \param explicitFilename Treat the prefix as an explicit filename if true
-   */
-  virtual void EnableAsciiInternal (Ptr<OutputStreamWrapper> stream, 
-                                    std::string prefix, 
-                                    Ptr<NetDevice> nd,
-                                    bool explicitFilename);
-
-  ObjectFactory m_queueFactory;
-  ObjectFactory m_deviceFactory;
-};
-
-
-} // namespace ns3
-
-#endif /* EMU_HELPER_H */
diff -Naur ns-3.21/src/emu/model/emu-encode-decode.cc ns-3.22/src/emu/model/emu-encode-decode.cc
--- ns-3.21/src/emu/model/emu-encode-decode.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/model/emu-encode-decode.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,111 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 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 <string>
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-#include <stdint.h>
-
-namespace ns3 {
-
-/**
- * \brief Convert a byte buffer to a string containing a hex representation
- * of the buffer.  Make the string pretty by adding a colon (':') between
- * the hex.
- *
- * \param buffer The input buffer to be converted.
- * \param len The length of the input buffer.
- * \returns A string containing a hex representation of the data in buffer.
- */
-std::string
-EmuBufferToString (uint8_t *buffer, uint32_t len)
-{
-  std::ostringstream oss;
-  //
-  // Tell the stream to make hex characters, zero-filled
-  //
-  oss.setf (std::ios::hex, std::ios::basefield);
-  oss.fill ('0');
-
-  //
-  // Loop through the buffer, separating the two-digit-wide hex bytes
-  // with a colon.
-  //
-  for (uint8_t i = 0; i < len; i++)
-    {
-      oss << ":" << std::setw (2) << (uint32_t)buffer[i];
-    }
-  return oss.str ();
-}
-
-/**
- * \brief Convert string encoded by the inverse function (EmuBufferToString)
- * back into a byte buffer.
- *
- * \param s The input string.
- * \param buffer The buffer to initialize with the converted bits.
- * \param len The length of the data that is valid in the buffer.
- * \returns True indicates a successful conversion.
- */
-bool
-EmuStringToBuffer (std::string s, uint8_t *buffer, uint32_t *len)
-{
-  //
-  // If the string was made by our inverse function, the string length must
-  // be a multiple of three characters in length.  Use this fact to do a
-  // quick reasonableness test.
-  //
-  if ((s.length () % 3) != 0)
-    {
-      return false;
-    }
-
-  std::istringstream iss;
-  iss.str (s);
-
-  uint8_t n = 0;
-
-  while (iss.good ())
-    {
-      //
-      // The first character in the "triplet" we're working on is always the
-      // the ':' separator.  Read that into a char and make sure we're skipping
-      // what we think we're skipping.
-      //
-      char c;
-      iss.read (&c, 1);
-      if (c != ':')
-        {
-          return false;
-        }
-
-      //
-      // And then read in the real bits and convert them.
-      //
-      uint32_t tmp;
-      iss >> std::hex >> tmp;
-      buffer[n] = tmp;
-      n++;
-    }
-
-  *len = n;
-  return true;
-}
-
-} // namespace ns3
diff -Naur ns-3.21/src/emu/model/emu-encode-decode.h ns-3.22/src/emu/model/emu-encode-decode.h
--- ns-3.21/src/emu/model/emu-encode-decode.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/model/emu-encode-decode.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,33 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 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 EMU_ENCODE_DECODE_H
-#define EMU_ENCODE_DECODE_H
-
-#include <string>
-
-namespace ns3 {
-
-std::string EmuBufferToString (uint8_t *buffer, uint32_t len);
-bool EmuStringToBuffer (std::string s, uint8_t *buffer, uint32_t *len);
-
-
-} // namespace ns3
-
-#endif /* EMU_ENCODE_DECODE_H */
-
diff -Naur ns-3.21/src/emu/model/emu-net-device.cc ns-3.22/src/emu/model/emu-net-device.cc
--- ns-3.21/src/emu/model/emu-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/model/emu-net-device.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,1116 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 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 "emu-net-device.h"
-#include "emu-encode-decode.h"
-
-#include "ns3/log.h"
-#include "ns3/queue.h"
-#include "ns3/simulator.h"
-#include "ns3/ethernet-header.h"
-#include "ns3/ethernet-trailer.h"
-#include "ns3/llc-snap-header.h"
-#include "ns3/boolean.h"
-#include "ns3/uinteger.h"
-#include "ns3/pointer.h"
-#include "ns3/string.h"
-#include "ns3/trace-source-accessor.h"
-#include "ns3/channel.h"
-#include "ns3/system-thread.h"
-#include "ns3/mac48-address.h"
-#include "ns3/enum.h"
-
-#include <sys/wait.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/ioctl.h>
-#include <net/ethernet.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netpacket/packet.h>
-#include <arpa/inet.h>
-#include <cerrno>
-#include <limits>
-#include <cstdlib>
-#include <ctime>
-#include <unistd.h>
-
-NS_LOG_COMPONENT_DEFINE ("EmuNetDevice");
-
-namespace ns3 {
-
-NS_OBJECT_ENSURE_REGISTERED (EmuNetDevice);
-
-#define EMU_MAGIC 65867
-
-TypeId 
-EmuNetDevice::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::EmuNetDevice")
-    .SetParent<NetDevice> ()
-    .AddConstructor<EmuNetDevice> ()
-    .AddAttribute ("Mtu", "The MAC-level Maximum Transmission Unit",
-                   UintegerValue (0), // arbitrary un-used value because no setter
-                   MakeUintegerAccessor (&EmuNetDevice::GetMtu),
-                   MakeUintegerChecker<uint16_t> ())
-    .AddAttribute ("Address", 
-                   "The ns-3 MAC address of this (virtual) device.",
-                   Mac48AddressValue (Mac48Address ("ff:ff:ff:ff:ff:ff")),
-                   MakeMac48AddressAccessor (&EmuNetDevice::m_address),
-                   MakeMac48AddressChecker ())
-    .AddAttribute ("DeviceName", 
-                   "The name of the underlying real device (e.g. eth1).",
-                   StringValue ("eth1"),
-                   MakeStringAccessor (&EmuNetDevice::m_deviceName),
-                   MakeStringChecker ())
-    .AddAttribute ("Start", 
-                   "The simulation time at which to spin up the device thread.",
-                   TimeValue (Seconds (0.)),
-                   MakeTimeAccessor (&EmuNetDevice::m_tStart),
-                   MakeTimeChecker ())
-    .AddAttribute ("Stop", 
-                   "The simulation time at which to tear down the device thread.",
-                   TimeValue (Seconds (0.)),
-                   MakeTimeAccessor (&EmuNetDevice::m_tStop),
-                   MakeTimeChecker ())
-    .AddAttribute ("EncapsulationMode", 
-                   "The link-layer encapsulation type to use.",
-                   EnumValue (DIX),
-                   MakeEnumAccessor (&EmuNetDevice::SetEncapsulationMode),
-                   MakeEnumChecker (DIX, "Dix",
-                                    LLC, "Llc"))
-
-    //
-    // Transmit queueing discipline for the device which includes its own set
-    // of trace hooks.  Note that this is really going to run "on top of" the 
-    // queueing discipline that will most likely be present in the devices of
-    // the underlying operating system.
-    //
-    .AddAttribute ("TxQueue", 
-                   "A queue to use as the transmit queue in the device.",
-                   PointerValue (),
-                   MakePointerAccessor (&EmuNetDevice::m_queue),
-                   MakePointerChecker<Queue> ())
-
-    .AddAttribute ("RxQueueSize", "Maximum size of the read queue.  "
-                   "This value limits number of packets that have been read "
-                   "from the network into a memory buffer but have not yet "
-                   "been processed by the simulator.",
-                   UintegerValue (1000),
-                   MakeUintegerAccessor (&EmuNetDevice::m_maxPendingReads),
-                   MakeUintegerChecker<uint32_t> ())
-
-    //
-    // Trace sources at the "top" of the net device, where packets transition
-    // to/from higher layers.  These points do not really correspond to the 
-    // MAC layer of the underlying operating system, but exist to provide 
-    // a consitent tracing environment.  These trace hooks should really be
-    // interpreted as the points at which a packet leaves the ns-3 environment
-    // destined for the underlying operating system or vice-versa.
-    //
-    .AddTraceSource ("MacTx", 
-                     "Trace source indicating a packet has arrived for transmission by this device",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_macTxTrace))
-    .AddTraceSource ("MacTxDrop", 
-                     "Trace source indicating a packet has been dropped by the device before transmission",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_macTxDropTrace))
-    .AddTraceSource ("MacPromiscRx", 
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_macPromiscRxTrace))
-    .AddTraceSource ("MacRx", 
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_macRxTrace))
-#if 0
-    // Not currently implemented for this device
-    .AddTraceSource ("MacRxDrop", 
-                     "Trace source indicating a packet was dropped before being forwarded up the stack",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_macRxDropTrace))
-#endif
-    //
-    // In normal ns-3 net devices, these trace souces correspond to the "bottom"
-    // of the net device, where packets transition to/from the channel.  In 
-    // the case of the emu device, there is no physical layer access -- all we
-    // do is to send packets to another device that is really at a "real" MAC
-    // level.  Since it could be misleading to call anything here PHY, we do not
-    // implement these trace sources.
-    //
-#if 0
-    .AddTraceSource ("PhyTxBegin", 
-                     "Trace source indicating a packet has begun transmitting over the channel",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_phyTxBeginTrace))
-    .AddTraceSource ("PhyTxEnd", 
-                     "Trace source indicating a packet has been completely transmitted over the channel",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_phyTxEndTrace))
-    .AddTraceSource ("PhyTxDrop", 
-                     "Trace source indicating a packet has been dropped by the device during transmission",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_phyTxDropTrace))
-    .AddTraceSource ("PhyRxBegin", 
-                     "Trace source indicating a packet has begun being received by the device",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_phyRxBeginTrace))
-    .AddTraceSource ("PhyRxEnd", 
-                     "Trace source indicating a packet has been completely received by the device",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_phyRxEndTrace))
-    .AddTraceSource ("PhyRxDrop", 
-                     "Trace source indicating a packet has been dropped by the device during reception",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_phyRxDropTrace))
-#endif
-    //
-    // Trace sources designed to simulate a packet sniffer facility (tcpdump). 
-    //
-    .AddTraceSource ("Sniffer", 
-                     "Trace source simulating a non-promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_snifferTrace))
-    .AddTraceSource ("PromiscSniffer", 
-                     "Trace source simulating a promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&EmuNetDevice::m_promiscSnifferTrace))
-  ;
-  return tid;
-}
-
-EmuNetDevice::EmuNetDevice () 
-  :
-    m_startEvent (),
-    m_stopEvent (),
-    m_sock (-1),
-    m_readThread (0),
-    m_ifIndex (std::numeric_limits<uint32_t>::max ()), // absurdly large value
-    m_sll_ifindex (-1),
-    m_isBroadcast (true),
-    m_isMulticast (false),
-    m_pendingReadCount (0)
-{
-  NS_LOG_FUNCTION (this);
-  m_packetBuffer = new uint8_t[65536];
-  Start (m_tStart);
-}
-
-EmuNetDevice::~EmuNetDevice ()
-{
-  delete [] m_packetBuffer;
-  m_packetBuffer = 0;
-}
-
-void 
-EmuNetDevice::DoDispose ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  if (m_readThread != 0)
-    {
-      StopDevice ();
-    }
-  m_node = 0;
-  NetDevice::DoDispose ();
-}
-
-void 
-EmuNetDevice::SetEncapsulationMode (enum EncapsulationMode mode)
-{
-  NS_LOG_FUNCTION (mode);
-  m_encapMode = mode;
-  NS_LOG_LOGIC ("m_encapMode = " << m_encapMode);
-}
-
-EmuNetDevice::EncapsulationMode
-EmuNetDevice::GetEncapsulationMode (void) const
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  return m_encapMode;
-}
-
-void
-EmuNetDevice::Start (Time tStart)
-{
-  NS_LOG_FUNCTION (tStart);
-
-  //
-  // Cancel any pending start event and schedule a new one at some relative time in the future.
-  //
-  Simulator::Cancel (m_startEvent);
-  m_startEvent = Simulator::Schedule (tStart, &EmuNetDevice::StartDevice, this);
-}
-
-void
-EmuNetDevice::Stop (Time tStop)
-{
-  NS_LOG_FUNCTION (tStop);
-  //
-  // Cancel any pending stop event and schedule a new one at some relative time in the future.
-  //
-  Simulator::Cancel (m_stopEvent);
-  m_startEvent = Simulator::Schedule (tStop, &EmuNetDevice::StopDevice, this);
-}
-
-void
-EmuNetDevice::StartDevice (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  //
-  // Spin up the emu net device and start receiving packets.
-  //
-  if (m_sock != -1)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::StartDevice(): Device is already started");
-    }
-
-  //
-  // A similar story exists for the node ID.  We can't just naively do a
-  // GetNode ()->GetId () since GetNode is going to give us a Ptr<Node> which
-  // is reference counted.  We need to stash away the node ID for use in the
-  // read thread.
-  //
-  m_nodeId = GetNode ()->GetId ();
-
-  NS_LOG_LOGIC ("Creating socket");
-
-  //
-  // Call out to a separate process running as suid root in order to get a raw 
-  // socket.  We do this to avoid having the entire simulation running as root.
-  // If this method returns, we'll have a raw socket waiting for us in m_sock.
-  //
-  CreateSocket ();
-
-  //
-  // Figure out which interface index corresponds to the device name in the corresponding attribute.
-  //
-  struct ifreq ifr;
-  bzero (&ifr, sizeof(ifr));
-  strncpy ((char *)ifr.ifr_name, m_deviceName.c_str (), IFNAMSIZ);
-
-  NS_LOG_LOGIC ("Getting interface index");
-  int32_t rc = ioctl (m_sock, SIOCGIFINDEX, &ifr);
-  if (rc == -1)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::StartDevice(): Can't get interface index");
-    }
-
-  //
-  // Save the real interface index for later calls to sendto
-  //
-  m_sll_ifindex = ifr.ifr_ifindex;
-
-  //
-  // Bind the socket to the interface we just found.
-  //
-  struct sockaddr_ll ll;
-  bzero (&ll, sizeof(ll));
-
-  ll.sll_family = AF_PACKET;
-  ll.sll_ifindex = m_sll_ifindex;
-  ll.sll_protocol = htons (ETH_P_ALL);
-
-  NS_LOG_LOGIC ("Binding socket to interface");
-
-  rc = bind (m_sock, (struct sockaddr *)&ll, sizeof (ll));
-  if (rc == -1)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::StartDevice(): Can't bind to specified interface");
-    }
-
-  rc = ioctl (m_sock, SIOCGIFFLAGS, &ifr);
-  if (rc == -1)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::StartDevice(): Can't get interface flags");
-    }
-
-  //
-  // This device only works if the underlying interface is up in promiscuous 
-  // mode.  We could have turned it on in the socket creator, but the situation
-  // is that we expect these devices to be used in conjunction with virtual 
-  // machines with connected host-only (simulated) networks, or in a testbed.
-  // There is a lot of setup and configuration happening outside of this one 
-  // issue, and we expect that configuration to include choosing a valid
-  // interface (e.g, "ath1"), ensuring that the device supports promiscuous 
-  // mode, and placing it in promiscuous mode.  We just make sure of the
-  // end result.
-  //
-  if ((ifr.ifr_flags & IFF_PROMISC) == 0)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::StartDevice(): " << m_deviceName << " is not in promiscuous mode");
-    }
-  if ((ifr.ifr_flags & IFF_BROADCAST) != IFF_BROADCAST)
-    {
-      // We default m_isBroadcast to true but turn it off here if not
-      // supported, because in the common case, overlying IP code will 
-      // assert during configuration time if this is false, before this
-      // method has a chance to set it during runtime
-      m_isBroadcast = false;
-    }
-  if ((ifr.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST)
-    {
-      // This one is OK to enable at runtime
-      m_isMulticast = true;
-    }
-
-  //
-  // Now spin up a read thread to read packets.
-  //
-  if (m_readThread != 0)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::StartDevice(): Receive thread is already running");
-    }
-
-  NS_LOG_LOGIC ("Spinning up read thread");
-
-  m_readThread = Create<SystemThread> (MakeCallback (&EmuNetDevice::ReadThread, this));
-  m_readThread->Start ();
-
-  NotifyLinkUp ();
-}
-
-void
-EmuNetDevice::CreateSocket (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  //
-  // We want to create a raw socket for our net device.  Unfortunately for us
-  // you have to have root privileges to do that.  Instead of running the 
-  // entire simulation as root, we decided to make a small program who's whole
-  // reason for being is to run as suid root and create a raw socket.  We're
-  // going to fork and exec that program soon, but we need to have a socket
-  // to talk to it with.  So we create a local interprocess (Unix) socket 
-  // for that purpose.
-  //
-  int sock = socket (PF_UNIX, SOCK_DGRAM, 0);
-  if (sock == -1)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::CreateSocket(): Unix socket creation error, errno = " << std::strerror (errno));
-    }
-
-  //
-  // Bind to that socket and let the kernel allocate an endpoint
-  //
-  struct sockaddr_un un;
-  memset (&un, 0, sizeof (un));
-  un.sun_family = AF_UNIX;
-  int status = bind (sock, (struct sockaddr*)&un, sizeof (sa_family_t));
-  if (status == -1)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::CreateSocket(): Could not bind(): errno = " << std::strerror (errno));
-    }
-
-  NS_LOG_INFO ("Created Unix socket");
-  NS_LOG_INFO ("sun_family = " << un.sun_family);
-  NS_LOG_INFO ("sun_path = " << un.sun_path);
-
-  //
-  // We have a socket here, but we want to get it there -- to the program we're
-  // going to exec.  What we'll do is to do a getsockname and then encode the
-  // resulting address information as a string, and then send the string to the
-  // program as an argument.  So we need to get the sock name.
-  //
-  socklen_t len = sizeof (un);
-  status = getsockname (sock, (struct sockaddr*)&un, &len);
-  if (status == -1)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::CreateSocket(): Could not getsockname(): errno = " << std::strerror (errno));
-    }
-
-  //
-  // Now encode that socket name (family and path) as a string of hex digits
-  //
-  std::string path = EmuBufferToString ((uint8_t *)&un, len);
-  NS_LOG_INFO ("Encoded Unix socket as \"" << path << "\"");
-  //
-  // Fork and exec the process to create our socket.  If we're us (the parent)
-  // we wait for the child (the socket creator) to complete and read the 
-  // socket it created using the ancillary data mechanism.
-  //
-  // Tom Goff reports the possiblility of a deadlock when trying to acquire the
-  // python GIL here.  He says that this might be due to trying to access Python
-  // objects after fork() without calling PyOS_AfterFork() to properly reset 
-  // Python state (including the GIL).  There is no code to cause the problem
-  // here in emu, but this was visible in similar code in tap-bridge.
-  //
-  pid_t pid = ::fork ();
-  if (pid == 0)
-    {
-      NS_LOG_DEBUG ("Child process");
-
-      //
-      // build a command line argument from the encoded endpoint string that 
-      // the socket creation process will use to figure out how to respond to
-      // the (now) parent process.
-      //
-      std::ostringstream oss;
-      oss << "-p" << path;
-      NS_LOG_INFO ("Parameters set to \"" << oss.str () << "\"");
-
-      //
-      // Execute the socket creation process image.
-      //
-      status = ::execlp (EMU_SOCK_CREATOR,
-                         EMU_SOCK_CREATOR,                            // argv[0] (filename)
-                         oss.str ().c_str (),                           // argv[1] (-p<path?
-                         (char *)NULL);
-
-      //
-      // If the execlp successfully completes, it never returns.  If it returns it failed or the OS is
-      // broken.  In either case, we bail.
-      //
-      NS_FATAL_ERROR ("EmuNetDevice::CreateSocket(): Back from execlp(), errno = " << std::strerror (errno));
-    }
-  else
-    {
-      NS_LOG_DEBUG ("Parent process");
-      //
-      // We're the process running the emu net device.  We need to wait for the
-      // socket creator process to finish its job.
-      //
-      int st;
-      pid_t waited = waitpid (pid, &st, 0);
-      if (waited == -1)
-        {
-          NS_FATAL_ERROR ("EmuNetDevice::CreateSocket(): waitpid() fails, errno = " << std::strerror (errno));
-        }
-      NS_ASSERT_MSG (pid == waited, "EmuNetDevice::CreateSocket(): pid mismatch");
-
-      //
-      // Check to see if the socket creator exited normally and then take a 
-      // look at the exit code.  If it bailed, so should we.  If it didn't
-      // even exit normally, we bail too.
-      //
-      if (WIFEXITED (st))
-        {
-          int exitStatus = WEXITSTATUS (st);
-          if (exitStatus != 0)
-            {
-              NS_FATAL_ERROR ("EmuNetDevice::CreateSocket(): socket creator exited normally with status " << exitStatus);
-            }
-        }
-      else 
-        {
-          NS_FATAL_ERROR ("EmuNetDevice::CreateSocket(): socket creator exited abnormally");
-        }
-
-      //
-      // At this point, the socket creator has run successfully and should 
-      // have created our raw socket and sent it back to the socket address
-      // we provided.  Our socket should be waiting on the Unix socket.  We've
-      // got to do a bunch of grunto work to get at it, though.
-      //
-      // The struct iovec below is part of a scatter-gather list.  It describes a
-      // buffer.  In this case, it describes a buffer (an integer) that will
-      // get the data that comes back from the socket creator process.  It will
-      // be a magic number that we use as a consistency/sanity check.
-      // 
-      struct iovec iov;
-      uint32_t magic;
-      iov.iov_base = &magic;
-      iov.iov_len = sizeof(magic);
-
-      //
-      // The CMSG macros you'll see below are used to create and access control 
-      // messages (which is another name for ancillary data).  The ancillary 
-      // data is made up of pairs of struct cmsghdr structures and associated
-      // data arrays.
-      //
-      // First, we're going to allocate a buffer on the stack to receive our 
-      // data array (that contains the socket).  Sometimes you'll see this called
-      // an "ancillary element" but the msghdr uses the control message termimology
-      // so we call it "control."
-      //
-      size_t msg_size = sizeof(int);
-      char control[CMSG_SPACE (msg_size)];
-
-      //
-      // There is a msghdr that is used to minimize the number of parameters
-      // passed to recvmsg (which we will use to receive our ancillary data).
-      // This structure uses terminology corresponding to control messages, so
-      // you'll see msg_control, which is the pointer to the ancillary data and 
-      // controllen which is the size of the ancillary data array.
-      //
-      // So, initialize the message header that describes the ancillary/control
-      // data we expect to receive and point it to buffer.
-      //
-      struct msghdr msg;
-      msg.msg_name = 0;
-      msg.msg_namelen = 0;
-      msg.msg_iov = &iov;
-      msg.msg_iovlen = 1;
-      msg.msg_control = control;
-      msg.msg_controllen = sizeof (control);
-      msg.msg_flags = 0;
-
-      //
-      // Now we can actually receive the interesting bits from the socket
-      // creator process.
-      //
-      ssize_t bytesRead = recvmsg (sock, &msg, 0);
-      if (bytesRead != sizeof(int))
-        {
-          NS_FATAL_ERROR ("EmuNetDevice::CreateSocket(): Wrong byte count from socket creator");
-        }
-
-      //
-      // There may be a number of message headers/ancillary data arrays coming in.
-      // Let's look for the one with a type SCM_RIGHTS which indicates it' the
-      // one we're interested in.
-      //
-      struct cmsghdr *cmsg;
-      for (cmsg = CMSG_FIRSTHDR (&msg); cmsg != NULL; cmsg = CMSG_NXTHDR (&msg, cmsg))
-        {
-          if (cmsg->cmsg_level == SOL_SOCKET &&
-              cmsg->cmsg_type == SCM_RIGHTS)
-            {
-              //
-              // This is the type of message we want.  Check to see if the magic 
-              // number is correct and then pull out the socket we care about if
-              // it matches
-              //
-              if (magic == EMU_MAGIC)
-                {
-                  NS_LOG_INFO ("Got SCM_RIGHTS with correct magic " << magic);
-                  int *rawSocket = (int*)CMSG_DATA (cmsg);
-                  NS_LOG_INFO ("Got the socket from the socket creator = " << *rawSocket);
-                  m_sock = *rawSocket;
-                  return;
-                }
-              else
-                {
-                  NS_LOG_INFO ("Got SCM_RIGHTS, but with bad magic " << magic);
-                }
-            }
-        }
-      NS_FATAL_ERROR ("Did not get the raw socket from the socket creator");
-    }
-}
-
-void
-EmuNetDevice::StopDevice (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  close (m_sock);
-  m_sock = -1;
-
-  NS_ASSERT_MSG (m_readThread != 0, "EmuNetDevice::StopDevice(): Receive thread is not running");
-
-  NS_LOG_LOGIC ("Joining read thread");
-  m_readThread->Join ();
-  m_readThread = 0;
-}
-
-void
-EmuNetDevice::ForwardUp (uint8_t *buf, uint32_t len)
-{
-  NS_LOG_FUNCTION (buf << len);
-
-  //
-  // Create a packet out of the buffer we received and free that buffer.
-  //
-  Ptr<Packet> packet = Create<Packet> (reinterpret_cast<const uint8_t *> (buf), len);
-  std::free (buf);
-  buf = 0;
-
-  {
-    CriticalSection cs (m_pendingReadMutex);
-    //std::cerr << std::endl << "EmuNetDevice main thread: m_pendingReadCount is " << m_pendingReadCount << std::endl;
-    --m_pendingReadCount;
-  }
-
-  //
-  // Trace sinks will expect complete packets, not packets without some of the
-  // headers.
-  //
-  Ptr<Packet> originalPacket = packet->Copy ();
-
-  EthernetHeader header (false);
-
-  //
-  // This device could be running in an environment where completely unexpected
-  // kinds of packets are flying around, so we need to harden things a bit and
-  // filter out packets we think are completely bogus, so we always check to see
-  // that the packet is long enough to contain the header we want to remove.
-  //
-  if (packet->GetSize () < header.GetSerializedSize ())
-    {
-      m_phyRxDropTrace (originalPacket);
-      return;
-    }
-
-  packet->RemoveHeader (header);
-
-  NS_LOG_LOGIC ("Pkt source is " << header.GetSource ());
-  NS_LOG_LOGIC ("Pkt destination is " << header.GetDestination ());
-
-  uint16_t protocol;
-
-  switch (m_encapMode)
-    {
-    case LLC:
-      //
-      // If the length/type is less than 1500, it corresponds to a length 
-      // interpretation packet.  In this case, it is an 802.3 packet and 
-      // will also have an 802.2 LLC header.  If greater than 1500, we
-      // find the protocol number (Ethernet type) directly.
-      //
-      if (header.GetLengthType () <= 1500)
-        {
-          LlcSnapHeader llc;
-          //
-          // Check to see that the packet is long enough to possibly contain the
-          // header we want to remove before just naively calling.
-          //
-          if (packet->GetSize () < llc.GetSerializedSize ())
-            {
-              m_phyRxDropTrace (originalPacket);
-              return;
-            }
-
-          packet->RemoveHeader (llc);
-          protocol = llc.GetType ();
-        }
-      else
-        {
-          protocol = header.GetLengthType ();
-        }
-      break;
-
-    case DIX:
-      protocol = header.GetLengthType ();
-      break;
-
-    default:
-      NS_FATAL_ERROR ("invalid encapsulation mode");
-      protocol = 0; /* quiet compiler */
-    }
-
-  PacketType packetType;
-
-  if (header.GetDestination ().IsBroadcast ())
-    {
-      packetType = NS3_PACKET_BROADCAST;
-    }
-  else if (header.GetDestination ().IsGroup ())
-    {
-      packetType = NS3_PACKET_MULTICAST;
-    }
-  else if (header.GetDestination () == m_address)
-    {
-      packetType = NS3_PACKET_HOST;
-    }
-  else
-    {
-      packetType = NS3_PACKET_OTHERHOST;
-    }
-
-  // 
-  // For all kinds of packetType we receive, we hit the promiscuous sniffer
-  // hook and pass a copy up to the promiscuous callback.  Pass a copy to 
-  // make sure that nobody messes with our packet.
-  //
-  m_promiscSnifferTrace (originalPacket);
-
-  if (!m_promiscRxCallback.IsNull ())
-    {
-      m_macPromiscRxTrace (originalPacket);
-      m_promiscRxCallback (this, packet, protocol, header.GetSource (), header.GetDestination (), packetType);
-    }
-
-  //
-  // If this packet is not destined for some other host, it must be for us
-  // as either a broadcast, multicast or unicast.  We need to hit the mac
-  // packet received trace hook and forward the packet up the stack.
-  //
-  if (packetType != NS3_PACKET_OTHERHOST)
-    {
-      m_snifferTrace (originalPacket);
-      m_macRxTrace (originalPacket);
-      m_rxCallback (this, packet, protocol, header.GetSource ());
-    }
-}
-
-void
-EmuNetDevice::ReadThread (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  // It's important to remember that we're in a completely different thread than the simulator is running in.
-  // We are talking about multiple threads here, so it is very, very dangerous to do any kind of reference couning
-  // on a shared object.
-  //
-
-  int32_t len = -1;
-  struct sockaddr_ll addr;
-  socklen_t addrSize = sizeof (addr);
-
-  for (;;) 
-    {
-      //
-      // Too many pending reads at the same time leads to excessive memory allocations.  This counter prevents it.
-      // 
-      bool skip = false;
-
-      {
-        CriticalSection cs (m_pendingReadMutex);
-        //std::cerr << std::endl << "EmuNetDevice read thread: m_pendingReadCount is " << m_pendingReadCount << std::endl;
-        if (m_pendingReadCount >= m_maxPendingReads)
-          {
-            skip = true;
-          }
-        else
-          {
-            ++m_pendingReadCount;
-          }
-      }
-
-      if (skip)
-        {
-          struct timespec time = { 0, 100000000L }; // 100 ms
-          nanosleep (&time, NULL);
-          continue;
-        }
-
-      //
-      // to avoid any issues with a shared reference counted packet, we allocate a buffer on the heap and pass that
-      // buffer into the ns-3 context thread where it will create the packet, copy the buffer and then free it.
-      //
-      uint32_t bufferSize = 65536;
-      uint8_t *buf = (uint8_t *)std::malloc (bufferSize);
-      if (buf == 0)
-        {
-          NS_FATAL_ERROR ("EmuNetDevice::ReadThread(): malloc packet buffer failed");
-        }
-
-      NS_LOG_LOGIC ("Calling recvfrom");
-      len = recvfrom (m_sock, buf, bufferSize, 0, (struct sockaddr *)&addr, &addrSize);
-
-      if (len == -1)
-        {
-          std::free (buf);
-          buf = 0;
-          return;
-        }
-
-      NS_LOG_INFO ("EmuNetDevice::EmuNetDevice(): Received packet on node " << m_nodeId);
-      NS_LOG_INFO ("EmuNetDevice::ReadThread(): Scheduling handler");
-      Simulator::ScheduleWithContext (m_nodeId, Seconds (0.0),
-                                      MakeEvent (&EmuNetDevice::ForwardUp, this, buf, len));
-      buf = 0;
-    }
-}
-
-bool 
-EmuNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
-{
-  NS_LOG_FUNCTION (packet << dest << protocolNumber);
-  //
-  // The immediate questions here are how are we going to encapsulate packets and what do we use as the MAC source and 
-  // destination (hardware) addresses?
-  //
-  // If we return false from EmuNetDevice::NeedsArp, the ArpIpv4Interface will pass the broadcast address as the 
-  // hardware (Ethernet) destination by default.  If we return true from EmuNetDevice::NeedsArp, then the hardware
-  // destination is actually meaningful, but we'll have an ns-3 ARP running on this device.  There can also be an ARP
-  // running on the underlying OS so we have to be very careful, both about multiple ARPs and also about TCP, UDP, etc.
-  //
-  // We are operating in promiscuous mode on the receive side (all ns-3 net devices are required to implement the 
-  // promiscuous callback in a meaningful way), so we have an option regarding the hardware addresses.  We don't actually have
-  // to use the real hardware addresses and IP addresses of the underlying system.  We can completely use MAC-spoofing to
-  // fake out the OS by using the ns-3 assigned MAC address (and also the ns-3 assigned IP addresses).  Ns-3 starts its 
-  // MAC address allocation using the OUI (vendor-code) 00:00:00 which is unassigned to any organization and is a globally
-  // administered address, so there shouldn't be any collisions with real hardware.
-  //
-  // So what we do is we return true from EmuNetDevice::NeedsArp which tells ns-3 to use its own ARP.  We spoof the 
-  // MAC address of the device and use promiscuous mode to receive traffic destined to that address.
-  //
-  return SendFrom (packet, m_address, dest, protocolNumber);
-}
-
-bool 
-EmuNetDevice::SendFrom (Ptr<Packet> packet, const Address &src, const Address &dest, uint16_t protocolNumber)
-{
-  NS_LOG_FUNCTION (packet << src << dest << protocolNumber);
-  NS_LOG_LOGIC ("packet =" << packet);
-  NS_LOG_LOGIC ("UID is " << packet->GetUid () << ")");
-
-  if (IsLinkUp () == false)
-    {
-      m_macTxDropTrace (packet);
-      return false;
-    }
-
-  Mac48Address destination = Mac48Address::ConvertFrom (dest);
-  Mac48Address source = Mac48Address::ConvertFrom (src);
-
-  NS_LOG_LOGIC ("Transmit packet with UID " << packet->GetUid ());
-  NS_LOG_LOGIC ("Transmit packet from " << source);
-  NS_LOG_LOGIC ("Transmit packet to " << destination);
-
-  EthernetHeader header (false);
-  header.SetSource (source);
-  header.SetDestination (destination);
-
-  switch (m_encapMode)
-    {
-    case LLC:
-      {
-        LlcSnapHeader llc;
-        llc.SetType (protocolNumber);
-        packet->AddHeader (llc);
-
-        header.SetLengthType (packet->GetSize ());
-      }
-      break;
-
-    case DIX:
-      header.SetLengthType (protocolNumber);
-      break;
-
-    default:
-      NS_FATAL_ERROR ("invalid encapsulation mode");
-    }
-
-  packet->AddHeader (header);
-
-  //
-  // there's not much meaning associated with the different layers in this
-  // device, so don't be surprised when they're all stacked together in 
-  // essentially one place.  We do this for trace consistency across devices.
-  //
-  m_macTxTrace (packet);
-
-  // 
-  // Enqueue and dequeue the packet to hit the queue tracing hooks.
-  //
-  m_queue->Enqueue (packet);
-  packet = m_queue->Dequeue ();
-  NS_ASSERT_MSG (packet, "EmuNetDevice::SendFrom(): packet zero from queue");
-
-  m_promiscSnifferTrace (packet);
-  m_snifferTrace (packet);
-
-  struct sockaddr_ll ll;
-  bzero (&ll, sizeof (ll));
-
-  ll.sll_family = AF_PACKET;
-  ll.sll_ifindex = m_sll_ifindex;
-  ll.sll_protocol = htons (ETH_P_ALL);
-
-  NS_LOG_LOGIC ("calling sendto");
-
-  NS_ASSERT_MSG (packet->GetSize () <= 65536, "EmuNetDevice::SendFrom(): Packet too big " << packet->GetSize ());
-  packet->CopyData (m_packetBuffer, packet->GetSize ());
-
-  int32_t rc = sendto (m_sock, m_packetBuffer, packet->GetSize (), 0, reinterpret_cast<struct sockaddr *> (&ll), sizeof (ll));
-  NS_LOG_LOGIC ("sendto returns " << rc);
-
-  return rc == -1 ? false : true;
-}
-
-void 
-EmuNetDevice::SetDataRate (DataRate bps)
-{
-  NS_LOG_FUNCTION (this << bps);
-  NS_FATAL_ERROR ("EmuNetDevice::SetDataRate():  Unable."); 
-}
-
-void
-EmuNetDevice::SetQueue (Ptr<Queue> q)
-{
-  NS_LOG_FUNCTION (this << q);
-  m_queue = q;
-}
-
-Ptr<Queue> 
-EmuNetDevice::GetQueue (void) const
-{ 
-  NS_LOG_FUNCTION_NOARGS ();
-  return m_queue;
-}
-
-void
-EmuNetDevice::NotifyLinkUp (void)
-{
-  m_linkUp = true;
-  m_linkChangeCallbacks ();
-}
-
-void 
-EmuNetDevice::SetIfIndex (const uint32_t index)
-{
-  m_ifIndex = index;
-}
-
-uint32_t 
-EmuNetDevice::GetIfIndex (void) const
-{
-  return m_ifIndex;
-}
-
-Ptr<Channel> 
-EmuNetDevice::GetChannel (void) const
-{
-  NS_FATAL_ERROR ("EmuNetDevice::GetChannel():  Unable."); 
-  return 0;
-}
-
-void 
-EmuNetDevice::SetAddress (Address address)
-{
-  NS_LOG_FUNCTION (address);
-  m_address = Mac48Address::ConvertFrom (address);
-}
-
-Address 
-EmuNetDevice::GetAddress (void) const
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  return m_address;
-}
-
-bool 
-EmuNetDevice::SetMtu (const uint16_t mtu)
-{
-  NS_FATAL_ERROR ("EmuNetDevice::SetMtu():  Unable."); 
-  return false;
-}
-
-uint16_t 
-EmuNetDevice::GetMtu (void) const
-{
-  struct ifreq ifr;
-  bzero (&ifr, sizeof (ifr));
-  strcpy (ifr.ifr_name, m_deviceName.c_str ());
-
-  int32_t fd = socket (PF_INET, SOCK_DGRAM, IPPROTO_IP);
-
-
-  int32_t rc = ioctl (fd, SIOCGIFMTU, &ifr);
-  if (rc == -1)
-    {
-      NS_FATAL_ERROR ("EmuNetDevice::GetMtu(): Can't ioctl SIOCGIFMTU");
-    }
-
-  close (fd);
-
-  return ifr.ifr_mtu;
-}
-
-bool 
-EmuNetDevice::IsLinkUp (void) const
-{
-  return m_linkUp;
-}
-
-void 
-EmuNetDevice::AddLinkChangeCallback (Callback<void> callback)
-{
-  m_linkChangeCallbacks.ConnectWithoutContext (callback);
-}
-
-bool 
-EmuNetDevice::IsBroadcast (void) const
-{
-  return m_isBroadcast;
-}
-
-Address
-EmuNetDevice::GetBroadcast (void) const
-{
-  return Mac48Address ("ff:ff:ff:ff:ff:ff");
-}
-
-bool 
-EmuNetDevice::IsMulticast (void) const
-{
-  return m_isMulticast;
-}
-
-Address
-EmuNetDevice::GetMulticast (Ipv4Address multicastGroup) const
-{
-  NS_LOG_FUNCTION (multicastGroup);
-
-  Mac48Address ad = Mac48Address::GetMulticast (multicastGroup);
-
-  //
-  // Implicit conversion (operator Address ()) is defined for Mac48Address, so
-  // use it by just returning the EUI-48 address which is automagically converted
-  // to an Address.
-  //
-  NS_LOG_LOGIC ("multicast address is " << ad);
-
-  return ad;
-}
-
-Address
-EmuNetDevice::GetMulticast (Ipv6Address addr) const
-{
-  NS_LOG_FUNCTION (this << addr);
-
-  Mac48Address ad = Mac48Address::GetMulticast (addr);
-  NS_LOG_LOGIC ("MAC IPv6 multicast address is " << ad);
-
-  return ad;
-}
-
-bool 
-EmuNetDevice::IsPointToPoint (void) const
-{
-  return false;
-}
-
-bool 
-EmuNetDevice::IsBridge (void) const
-{
-  return false;
-}
-
-void
-EmuNetDevice::SetPromiscReceiveCallback (PromiscReceiveCallback cb)
-{
-  m_promiscRxCallback = cb;
-}
-
-bool
-EmuNetDevice::SupportsSendFrom () const
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  return true;
-}
-
-
-Ptr<Node> 
-EmuNetDevice::GetNode (void) const
-{
-  return m_node;
-}
-
-void 
-EmuNetDevice::SetNode (Ptr<Node> node)
-{
-  m_node = node;
-}
-
-bool 
-EmuNetDevice::NeedsArp (void) const
-{
-  return true;
-}
-
-void 
-EmuNetDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb)
-{
-  m_rxCallback = cb;
-}
-
-} // namespace ns3
diff -Naur ns-3.21/src/emu/model/emu-net-device.h ns-3.22/src/emu/model/emu-net-device.h
--- ns-3.21/src/emu/model/emu-net-device.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/model/emu-net-device.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,534 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 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 EMU_NET_DEVICE_H
-#define EMU_NET_DEVICE_H
-
-#include <cstring>
-
-#include "ns3/address.h"
-#include "ns3/net-device.h"
-#include "ns3/node.h"
-#include "ns3/callback.h"
-#include "ns3/packet.h"
-#include "ns3/traced-callback.h"
-#include "ns3/event-id.h"
-#include "ns3/nstime.h"
-#include "ns3/data-rate.h"
-#include "ns3/ptr.h"
-#include "ns3/mac48-address.h"
-#include "ns3/system-thread.h"
-#include "ns3/system-mutex.h"
-
-namespace ns3 {
-
-class Queue;
-
-/**
- * \defgroup emu Emu Network Device
- * This section documents the API of the ns-3 emu module. For a generic functional description, please refer to the ns-3 manual.
- */
-
-/**
- * \ingroup emu
- * \class EmuNetDevice
- * \brief A Device for an Emu Network Link.
- */
-class EmuNetDevice : public NetDevice 
-{
-public:
-  static TypeId GetTypeId (void);
-
-  /**
-   * Enumeration of the types of packets supported in the class.
-   */
-  enum EncapsulationMode {
-    ILLEGAL,     /**< Encapsulation mode not set */
-    DIX,         /**< DIX II / Ethernet II packet */
-    LLC,         /**< 802.2 LLC/SNAP Packet*/
-  };
-
-  /**
-   * Construct a EmuNetDevice
-   *
-   * This is the constructor for the EmuNetDevice.  It takes as a
-   */
-  EmuNetDevice ();
-
-  /**
-   * Destroy a EmuNetDevice
-   *
-   * This is the destructor for the EmuNetDevice.
-   */
-  virtual ~EmuNetDevice ();
-
-  /**
-   * Set the Data Rate used for transmission of packets.
-   *
-   * @see Attach ()
-   * @param bps the data rate at which this object operates
-   */
-  void SetDataRate (DataRate bps);
-
-  /**
-   * Set a start time for the device.
-   *
-   * @param tStart the start time
-   */
-  void Start (Time tStart);
-
-  /**
-   * Set a stop time for the device.
-   *
-   * @param tStop the stop time
-   */
-  void Stop (Time tStop);
-
-  /**
-   * Attach a queue to the EmuNetDevice.
-   *
-   * The EmuNetDevice "owns" a queue that implements a queueing 
-   * method such as DropTail or RED.
-   *
-   * @see Queue
-   * @see DropTailQueue
-   * @param queue Ptr to the new queue.
-   */
-  void SetQueue (Ptr<Queue> queue);
-
-  /**
-   * Get a copy of the attached Queue.
-   *
-   * @returns Ptr to the queue.
-   */
-  Ptr<Queue> GetQueue (void) const;
-
-
-//
-// Pure virtual methods inherited from NetDevice we must implement.
-//
-  virtual void SetIfIndex (const uint32_t index);
-  virtual uint32_t GetIfIndex (void) const;
-
-  virtual Ptr<Channel> GetChannel (void) const;
-
-  virtual void SetAddress (Address address);
-  virtual Address GetAddress (void) const;
-
-  virtual bool SetMtu (const uint16_t mtu);
-  virtual uint16_t GetMtu (void) const;
-
-  virtual bool IsLinkUp (void) const;
-
-  virtual void AddLinkChangeCallback (Callback<void> callback);
-
-  virtual bool IsBroadcast (void) const;
-  virtual Address GetBroadcast (void) const;
-
-  virtual bool IsMulticast (void) const;
-
-  /**
-   * \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 
-   * 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).
-   *
-   * This method performs the multicast address creation function appropriate
-   * to an EUI-48-based CSMA device.  This MAC address is encapsulated in an
-   *  abstract Address to avoid dependencies on the exact address format.
-   *
-   * \param multicastGroup The IP address for the multicast group destination
-   * of the packet.
-   * \return The MAC multicast Address used to send packets to the provided
-   * multicast group.
-   *
-   * \see Ipv4Address
-   * \see Mac48Address
-   * \see Address
-   */
-  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
-
-  /**
-   * \brief Get the MAC multicast address corresponding
-   * to the IPv6 address provided.
-   * \param addr IPv6 address
-   * \return the MAC multicast address
-   * \warning Calling this method is invalid if IsMulticast returns not true.
-   */
-  virtual Address GetMulticast (Ipv6Address addr) const;
-
-  /**
-   * Is this a point to point link?
-   * \returns false.
-   */
-  virtual bool IsPointToPoint (void) const;
-
-  /**
-   * Is this a bridge?
-   * \returns false.
-   */
-  virtual bool IsBridge (void) const;
-
-  virtual bool Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber);
-
-  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
-
-  virtual Ptr<Node> GetNode (void) const;
-  virtual void SetNode (Ptr<Node> node);
-
-  virtual bool NeedsArp (void) const;
-
-  virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
-  virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
-
-  virtual bool SupportsSendFrom (void) const;
-
-  /**
-   * Set the encapsulation mode of this device.
-   *
-   * \param mode The encapsulation mode of this device.
-   *
-   * \see SetFrameSize
-   */
-  void SetEncapsulationMode (EmuNetDevice::EncapsulationMode mode);
-
-  /**
-   * Get the encapsulation mode of this device.
-   *
-   * \returns The encapsulation mode of this device.
-   */
-  EmuNetDevice::EncapsulationMode  GetEncapsulationMode (void) const;
-
-private:
-  EmuNetDevice (const EmuNetDevice &);
-  EmuNetDevice & operator= (const EmuNetDevice &);
-
-  virtual void DoDispose (void);
-
-  /**
-   * Call out to a separate process running as suid root in order to get a raw 
-   * socket.  We do this to avoid having the entire simulation running as root.
-   * If this method returns, we'll have a raw socket waiting for us in m_sock.
-   */
-  void CreateSocket (void);
-
-  /**
-   * Figure out where the raw socket creation process lives on the system.
-   */
-  std::string FindCreator (std::string creatorName);
-
-  /**
-   * Spin up the device
-   */
-  void StartDevice (void);
-
-  /**
-   * Tear down the device
-   */
-  void StopDevice (void);
-
-  /**
-   * Loop to read and process packets
-   */
-  void ReadThread (void);
-
-  /**
-   * Method to handle received packets.  Synchronized with simulator via ScheduleNow from ReadThread.
-   */
-  void ForwardUp (uint8_t *buf, uint32_t len);
-
-  /**
-   * Adds the necessary headers and trailers to a packet of data in order to
-   * respect the protocol implemented by the agent.
-   * \param p packet
-   * \param protocolNumber protocol number
-   */
-  void AddHeader (Ptr<Packet> p, uint16_t protocolNumber);
-
-  /**
-   * Removes, from a packet of data, all headers and trailers that
-   * relate to the protocol implemented by the agent
-   * \param p Packet whose headers need to be processed
-   * \param param An integer parameter that can be set by the function
-   * \return Returns true if the packet should be forwarded up the
-   * protocol stack.
-   */
-  bool ProcessHeader (Ptr<Packet> p, uint16_t& param);
-
-  /**
-   * Start Sending a Packet Down the Wire.
-   * @param p packet to send
-   * @returns true if success, false on failure
-   */
-  bool TransmitStart (Ptr<Packet> p);
-
-  void NotifyLinkUp (void);
-
-  /**
-   * The Queue which this EmuNetDevice uses as a packet source.
-   * Management of this Queue has been delegated to the EmuNetDevice
-   * and it has the responsibility for deletion.
-   * @see class Queue
-   * @see class DropTailQueue
-   */
-  Ptr<Queue> m_queue;
-
-  /**
-   * The trace source fired when packets come into the "top" of the device
-   * at the L3/L2 transition, before being queued for transmission.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_macTxTrace;
-
-  /**
-   * The trace source fired when packets coming into the "top" of the device
-   * at the L3/L2 transition are dropped before being queued for transmission.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_macTxDropTrace;
-
-  /**
-   * The trace source fired for packets successfully received by the device
-   * immediately before being forwarded up to higher layers (at the L2/L3 
-   * transition).  This is a promiscuous trace.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_macPromiscRxTrace;
-
-  /**
-   * The trace source fired for packets successfully received by the device
-   * immediately before being forwarded up to higher layers (at the L2/L3 
-   * transition).  This is a non-promiscuous trace.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_macRxTrace;
-
-  /**
-   * The trace source fired for packets successfully received by the device
-   * but which are dropped before being forwarded up to higher layers (at the 
-   * L2/L3 transition).
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_macRxDropTrace;
-
-  /**
-   * The trace source fired when a packet begins the transmission process on
-   * the medium.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_phyTxBeginTrace;
-
-  /**
-   * The trace source fired when a packet ends the transmission process on
-   * the medium.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;
-
-  /**
-   * The trace source fired when the phy layer drops a packet as it tries
-   * to transmit it.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_phyTxDropTrace;
-
-  /**
-   * The trace source fired when a packet ends the reception process from
-   * the medium.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_phyRxTrace;
-
-  /**
-   * The trace source fired when a packet begins the reception process from
-   * the medium.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_phyRxBeginTrace;
-
-  /**
-   * The trace source fired when a packet begins the reception process from
-   * the medium.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_phyRxEndTrace;
-
-  /**
-   * The trace source fired when the phy layer drops a packet it has received.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
-
-  /**
-   * A trace source that emulates a non-promiscuous protocol sniffer connected 
-   * to the device.  Unlike your average everyday sniffer, this trace source 
-   * will not fire on PACKET_OTHERHOST events.
-   *
-   * On the transmit size, this trace hook will fire after a packet is dequeued
-   * from the device queue for transmission.  In Linux, for example, this would
-   * correspond to the point just before a device hard_start_xmit where 
-   * dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET 
-   * ETH_P_ALL handlers.
-   *
-   * On the receive side, this trace hook will fire when a packet is received,
-   * just before the receive callback is executed.  In Linux, for example, 
-   * this would correspond to the point at which the packet is dispatched to 
-   * packet sniffers in netif_receive_skb.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_snifferTrace;
-
-  /**
-   * A trace source that emulates a promiscuous mode protocol sniffer connected
-   * to the device.  This trace source fire on packets destined for any host
-   * just like your average everyday packet sniffer.
-   *
-   * On the transmit size, this trace hook will fire after a packet is dequeued
-   * from the device queue for transmission.  In Linux, for example, this would
-   * correspond to the point just before a device hard_start_xmit where 
-   * dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET 
-   * ETH_P_ALL handlers.
-   *
-   * On the receive side, this trace hook will fire when a packet is received,
-   * just before the receive callback is executed.  In Linux, for example, 
-   * this would correspond to the point at which the packet is dispatched to 
-   * packet sniffers in netif_receive_skb.
-   *
-   * \see class CallBackTraceSource
-   */
-  TracedCallback<Ptr<const Packet> > m_promiscSnifferTrace;
-
-  /**
-   * Time to start spinning up the device
-   */
-  Time m_tStart;
-
-  /**
-   * Time to start tearing down the device
-   */
-  Time m_tStop;
-
-  EventId m_startEvent;
-  EventId m_stopEvent;
-
-  int32_t m_sock;
-
-  Ptr<SystemThread> m_readThread;
-
-  /**
-   * The Node to which this device is attached.
-   */
-  Ptr<Node> m_node;
-
-  /**
-   * The MAC address which has been assigned to this device.
-   */
-  Mac48Address m_address;
-
-  /**
-   * The callback used to notify higher layers that a packet has been received.
-   */
-  NetDevice::ReceiveCallback m_rxCallback;
-
-  /**
-   * The callback used to notify higher layers that a packet has been received in promiscuous mode.
-   */
-  NetDevice::PromiscReceiveCallback m_promiscRxCallback;
-
-  /**
-   * The ns-3 interface index (in the sense of net device index) that has been assigned to this network device.
-   */
-  uint32_t m_ifIndex;
-
-  /**
-   * The Unix interface index that we got from the system and which corresponds to the interface (e.g., "eth1")
-   * we are using to talk to the network.  Valid when m_sock is valid.
-   */
-  int32_t m_sll_ifindex;
-
-  /**
-   * The type of packet that should be created by the AddHeader
-   * function and that should be processed by the ProcessHeader
-   * function.
-   */
-  EncapsulationMode m_encapMode;
-
-  /**
-   * Flag indicating whether or not the link is up.  In this case,
-   * whether or not the device is connected to a channel.
-   */
-  bool m_linkUp;
-
-  /**
-   * Flag indicating whether or not the underlying net device supports 
-   * broadcast.
-   */
-  bool m_isBroadcast;
-
-  /**
-   * Flag indicating whether or not the underlying net device supports
-   * multicast.
-   */
-  bool m_isMulticast;
-
-  /**
-   * Callbacks to fire if the link changes state (up or down).
-   */
-  TracedCallback<> m_linkChangeCallbacks;
-
-  /**
-   * The unix/linux name of the underlying device (e.g., eth0)
-   */
-  std::string m_deviceName;
-
-  /**
-   * A 64K buffer to hold packet data while it is being sent.
-   */
-  uint8_t *m_packetBuffer;
-
-  /*
-   * a copy of the node id so the read thread doesn't have to GetNode() in
-   * in order to find the node ID.  Thread unsafe reference counting in 
-   * multithreaded apps is not a good thing.
-   */
-  uint32_t m_nodeId;
-
-  uint32_t m_maxPendingReads;
-  uint32_t m_pendingReadCount;
-  SystemMutex m_pendingReadMutex;
-};
-
-} // namespace ns3
-
-#endif /* EMU_NET_DEVICE_H */
diff -Naur ns-3.21/src/emu/model/emu-sock-creator.cc ns-3.22/src/emu/model/emu-sock-creator.cc
--- ns-3.21/src/emu/model/emu-sock-creator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/model/emu-sock-creator.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,247 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 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 <unistd.h>
-#include <string>
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-#include <cstdlib>
-#include <cerrno>
-#include <cstring>
-
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/ioctl.h>
-#include <net/ethernet.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netpacket/packet.h>
-#include <arpa/inet.h>
-
-#include "emu-encode-decode.h"
-
-#define EMU_MAGIC 65867
-
-static int gVerbose = 0;
-
-#define LOG(msg) \
-  if (gVerbose) \
-    { \
-      std::cout << __FUNCTION__ << "(): " << msg << std::endl;   \
-    }
-
-#define ABORT(msg, printErrno) \
-  std::cout << __FILE__ << ": fatal error at line " << __LINE__ << ": " << __FUNCTION__ << "(): " << msg << std::endl; \
-  if (printErrno) \
-    { \
-      std::cout << "    errno = " << errno << " (" << std::strerror (errno) << ")" << std::endl; \
-    } \
-  exit (-1); 
-
-#define ABORT_IF(cond, msg, printErrno) \
-  if (cond) \
-    { \
-      ABORT (msg, printErrno); \
-    }
-
-/**
- * \brief Send the socket file descriptor we created back to the emu device, 
- * which will read it as soon as we're done.
- *
- * \param path The socket address information from the Unix socket we use
- * to send the created socket back to.
- * \param fd The socket we're going to send. 
- */
-static void
-SendSocket (const char *path, int fd)
-{
-  //
-  // Open a Unix (local interprocess) socket to call back to the emu net
-  // device.
-  //
-  LOG ("Create Unix socket");
-  int sock = socket (PF_UNIX, SOCK_DGRAM, 0);
-  ABORT_IF (sock == -1, "Unable to open socket", 1);
-
-  //
-  // We have this string called path, which is really a hex representation
-  // of the endpoint that the net device created.  It used a forward encoding
-  // method (EmuBufferToString) to take the sockaddr_un it made and passed 
-  // the resulting string to us.  So we need to take the inverse method
-  // (EmuStringToBuffer) and build the same sockaddr_un over here.
-  //
-  socklen_t clientAddrLen;
-  struct sockaddr_un clientAddr;
-
-  LOG ("Decode address " << path);
-  bool rc = ns3::EmuStringToBuffer (path, (uint8_t *)&clientAddr, &clientAddrLen);
-  ABORT_IF (rc == false, "Unable to decode path", 0);
-
-  LOG ("Connect");
-  int status = connect (sock, (struct sockaddr*)&clientAddr, clientAddrLen);
-  ABORT_IF (status == -1, "Unable to connect to emu device", 1);
-
-  LOG ("Connected");
-
-  //
-  // This is arcane enough that a few words are worthwhile to explain what's 
-  // going on here.
-  //
-  // The interesting information (the socket FD) is going to go back to the
-  // emu net device as an integer of ancillary data.  Ancillary data is bits 
-  // that are not a part a socket payload (out-of-band data).  We're also 
-  // going to send one integer back.  It's just initialized to a magic number
-  // we use to make sure that the emu device is talking to the emu socket 
-  // creator and not some other creator process.
-  //
-  // The struct iovec below is part of a scatter-gather list.  It describes a
-  // buffer.  In this case, it describes a buffer (an integer) containing the
-  // data that we're going to send back to the emu net device (that magic 
-  // number).
-  // 
-  struct iovec iov;
-  uint32_t magic = EMU_MAGIC;
-  iov.iov_base = &magic;
-  iov.iov_len = sizeof(magic);
-
-  //
-  // The CMSG macros you'll see below are used to create and access control 
-  // messages (which is another name for ancillary data).  The ancillary 
-  // data is made up of pairs of struct cmsghdr structures and associated
-  // data arrays.
-  // 
-  // First, we're going to allocate a buffer on the stack to contain our 
-  // data array (that contains the socket).  Sometimes you'll see this called
-  // an "ancillary element" but the msghdr uses the control message termimology
-  // so we call it "control."
-  //
-  size_t msg_size = sizeof(int);
-  char control[CMSG_SPACE (msg_size)];
-
-  //
-  // There is a msghdr that is used to minimize the number of parameters
-  // passed to sendmsg (which we will use to send our ancillary data).  This
-  // structure uses terminology corresponding to control messages, so you'll
-  // see msg_control, which is the pointer to the ancillary data and controllen
-  // which is the size of the ancillary data array.
-  //
-  // So, initialize the message header that describes our ancillary/control data
-  // and point it to the control message/ancillary data we just allocated space
-  // for.
-  //
-  struct msghdr msg;
-  msg.msg_name = 0;
-  msg.msg_namelen = 0;
-  msg.msg_iov = &iov;
-  msg.msg_iovlen = 1;
-  msg.msg_control = control;
-  msg.msg_controllen = sizeof (control);
-  msg.msg_flags = 0;
-
-  //
-  // A cmsghdr contains a length field that is the length of the header and
-  // the data.  It has a cmsg_level field corresponding to the originating 
-  // protocol.  This takes values which are legal levels for getsockopt and
-  // setsockopt (here SOL_SOCKET).  We're going to use the SCM_RIGHTS type of 
-  // cmsg, that indicates that the ancillary data array contains access rights 
-  // that we are sending back to the emu net device.
-  //
-  // We have to put together the first (and only) cmsghdr that will describe
-  // the whole package we're sending.
-  //
-  struct cmsghdr *cmsg;
-  cmsg = CMSG_FIRSTHDR (&msg);
-  cmsg->cmsg_level = SOL_SOCKET;
-  cmsg->cmsg_type = SCM_RIGHTS;
-  cmsg->cmsg_len = CMSG_LEN (msg_size);
-  //
-  // We also have to update the controllen in case other stuff is actually
-  // in there we may not be aware of (due to macros).
-  //
-  msg.msg_controllen = cmsg->cmsg_len;
-
-  //
-  // Finally, we get a pointer to the start of the ancillary data array and
-  // put our file descriptor in.
-  //
-  int *fdptr = (int*)(CMSG_DATA (cmsg));
-  *fdptr = fd; // 
-
-  //
-  // Actually send the file descriptor back to the emulated net device.
-  //
-  ssize_t len = sendmsg (sock, &msg, 0);
-  ABORT_IF (len == -1, "Could not send socket back to emu net device", 1);
-
-  LOG ("sendmsg complete");
-}
-
-int
-main (int argc, char *argv[])
-{
-  int c;
-  char *path = NULL;
-
-  opterr = 0;
-
-  while ((c = getopt (argc, argv, "vp:")) != -1)
-    {
-      switch (c)
-        {
-        case 'v':
-          gVerbose = true;
-          break;
-        case 'p':
-          path = optarg;
-          break;
-        }
-    }
-
-  //
-  // This program is spawned by an emu net device running in a simulation.  It
-  // wants to create a raw socket as described below.  We are going to do the
-  // work here since we're running suid root.  Once we create the raw socket,
-  // we have to send it back to the emu net device.  We do that over a Unix
-  // (local interprocess) socket.  The emu net device created a socket to 
-  // listen for our response on, and it is expected to have encoded the address
-  // information as a string and to have passed that string as an argument to
-  // us.  We see it here as the "path" string.  We can't do anything useful 
-  // unless we have that string.
-  //
-  ABORT_IF (path == NULL, "path is a required argument", 0);
-  LOG ("Provided path is \"" << path << "\"");
-  //
-  // The whole reason for all of the hoops we went through to call out to this
-  // program will pay off here.  We created this program to run as suid root
-  // in order to keep the main simulation program from having to be run with
-  // root privileges.  We need root privileges to be able to open a raw socket
-  // though.  So all of these hoops are to allow us to exeucte the following
-  // single line of code:
-  //
-  LOG ("Creating raw socket");
-  int sock = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL));
-  ABORT_IF (sock == -1, "CreateSocket(): Unable to open raw socket", 1);
-
-  //
-  // Send the socket back to the emu net device so it can go about its business
-  //
-  SendSocket (path, sock);
-
-  return 0;
-}
diff -Naur ns-3.21/src/emu/test/examples-to-run.py ns-3.22/src/emu/test/examples-to-run.py
--- ns-3.21/src/emu/test/examples-to-run.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/test/examples-to-run.py	1969-12-31 16:00:00.000000000 -0800
@@ -1,21 +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 = [
-    ("emu-ping", "False", "True"),
-    ("emu-udp-echo", "False", "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.21/src/emu/wscript ns-3.22/src/emu/wscript
--- ns-3.21/src/emu/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/emu/wscript	1969-12-31 16:00:00.000000000 -0800
@@ -1,57 +0,0 @@
-## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-
-import os.path
-
-def configure(conf):
-    if conf.env['ENABLE_THREADING']:
-        conf.env['ENABLE_EMU'] = conf.check_nonfatal(header_name='netpacket/packet.h',
-                                            define_name='HAVE_PACKET_H')
-        conf.report_optional_feature("EmuNetDevice", "Emulated Net Device",
-                                     conf.env['ENABLE_EMU'],
-                                     "<netpacket/packet.h> include not detected")
-    else:
-        conf.report_optional_feature("EmuNetDevice", "Emulated Net Device",
-                                     False,
-                                     "needs threading support which is not available")
-
-    if conf.env['ENABLE_EMU']:
-        #blddir = conf.bldnode.abspath()
-        blddir = os.path.abspath(os.path.join(conf.bldnode.abspath(), conf.variant))
-        emucreatordir = os.path.abspath(os.path.join(blddir, "src/emu"))
-        conf.env.append_value('NS3_EXECUTABLE_PATH', emucreatordir)
-    else:
-        # Add this module to the list of modules that won't be built
-        # if they are enabled.
-        conf.env['MODULES_NOT_BUILT'].append('emu')
-
-def build(bld):
-    # Don't do anything for this module if emu's not enabled.
-    if not bld.env['ENABLE_EMU']:
-        return
-
-    module = bld.create_ns3_module('emu', ['network'])
-    module.source = [
-            'model/emu-net-device.cc',
-            'model/emu-encode-decode.cc',
-            'helper/emu-helper.cc',
-        ]
-
-    headers = bld(features='ns3header')
-    headers.module = 'emu'
-    headers.source = [
-            'model/emu-net-device.h',
-            'helper/emu-helper.h',
-        ]
-
-    creator = bld.create_suid_program('emu-sock-creator')
-    creator.source = [
-        'model/emu-sock-creator.cc',
-        'model/emu-encode-decode.cc',
-        ]
-
-    module.env.append_value("DEFINES", "EMU_SOCK_CREATOR=\"%s\"" % (creator.target,))
-
-    if bld.env['ENABLE_EXAMPLES']:
-        bld.recurse('examples')
-
-    bld.ns3_python_bindings()
diff -Naur ns-3.21/src/energy/bindings/modulegen__gcc_ILP32.py ns-3.22/src/energy/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/energy/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -23,7 +23,7 @@
     ## 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', '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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], 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_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
@@ -1787,10 +1787,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2265,7 +2265,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2316,6 +2321,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2392,6 +2402,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2426,6 +2440,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3553,11 +3569,10 @@
                    '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -3583,6 +3598,11 @@
                    'uint16_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -4003,14 +4023,13 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
@@ -4018,19 +4037,19 @@
                    '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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
                    [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')], 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
@@ -4145,10 +4164,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
     cls.add_method('SetChannelBonding', 
@@ -4210,6 +4229,11 @@
                    'void', 
                    [param('bool', 'stbc')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -4951,14 +4975,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -4996,8 +5020,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -5018,10 +5042,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -5963,11 +5987,6 @@
                    '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', 
@@ -6038,6 +6057,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/energy/bindings/modulegen__gcc_LP64.py ns-3.22/src/energy/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/energy/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -23,7 +23,7 @@
     ## 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', '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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], 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_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
@@ -1787,10 +1787,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2265,7 +2265,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2316,6 +2321,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2392,6 +2402,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2426,6 +2440,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3553,11 +3569,10 @@
                    '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -3583,6 +3598,11 @@
                    'uint16_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -4003,14 +4023,13 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
@@ -4018,19 +4037,19 @@
                    '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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
                    [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')], 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
@@ -4145,10 +4164,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
     cls.add_method('SetChannelBonding', 
@@ -4210,6 +4229,11 @@
                    'void', 
                    [param('bool', 'stbc')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -4951,14 +4975,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -4996,8 +5020,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -5018,10 +5042,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -5963,11 +5987,6 @@
                    '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', 
@@ -6038,6 +6057,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/energy/doc/energy.rst ns-3.22/src/energy/doc/energy.rst
--- ns-3.21/src/energy/doc/energy.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/doc/energy.rst	2015-02-05 15:46:22.000000000 -0800
@@ -1,7 +1,16 @@
 Energy Framework
 ----------------
 
-Energy consumption is a key issue for wireless devices, and wireless network researchers often need to investigate the energy consumption at a node or in the overall network while running network simulations in ns-3. This requires ns-3 to support energy consumption modeling. Further, as concepts such as fuel cells and energy scavenging are becoming viable for low power wireless devices, incorporating the effect of these emerging technologies into simulations requires support for modeling diverse energy sources in ns-3. The ns-3 Energy Framework provides the basis for energy consumption, energy source and energy harvesting modeling.
+Energy consumption is a key issue for wireless devices, and wireless
+network researchers often need to investigate the energy consumption
+at a node or in the overall network while running network simulations
+in ns-3. This requires ns-3 to support energy consumption
+modeling. Further, as concepts such as fuel cells and energy
+scavenging are becoming viable for low power wireless devices,
+incorporating the effect of these emerging technologies into
+simulations requires support for modeling diverse energy sources in
+ns-3. The ns-3 Energy Framework provides the basis for energy
+consumption, energy source and energy harvesting modeling.
 
 
 Model Description
@@ -12,76 +21,197 @@
 Design
 ******
 
-The ns-3 Energy Framework is composed of 3 parts: Energy Source, Device Energy Model and Energy Harvester. 
-The framework is implemented into the ``src/energy/models`` folder.
+The ns-3 Energy Framework is composed of 3 parts: Energy Source,
+Device Energy Model and Energy Harvester.  The framework is
+implemented into the ``src/energy/models`` folder.
 
 Energy Source
 #############
 
-The Energy Source represents the power supply on each node. A node can have one or more energy sources, and each energy source can be connected to multiple device energy models. Connecting an energy source to a device energy model implies that the corresponding device draws power from the source. The basic functionality of the Energy Source is to provide energy for devices on the node. When energy is completely drained from the Energy Source, it notifies the devices on node such that each device can react to this event. Further, each node can access the Energy Source Objects for information such as remaining energy or energy fraction (battery level). This enables the implementation of energy aware protocols in ns-3. 
-
-In order to model a wide range of power supplies such as batteries, the Energy Source must be able to capture characteristics of these supplies. There are 2 important characteristics or effects related to practical batteries:
-
-* Rate Capacity Effect: Decrease of battery lifetime when the current draw is higher than the rated value of the battery.
-* Recovery Effect: Increase of battery lifetime when the battery is alternating between discharge and idle states.
-
-In order to incorporate the Rate Capacity Effect, the Energy Source uses current draw from all the devices on the same node to calculate energy consumption. Moreover, multiple Energy Harvesters can be connected to the Energy Source in order to replenish its energy. The Energy Source periodically polls all the devices and energy harvesters on the same node to calculate the total current drain and hence the energy consumption. When a device changes state, its corresponding Device Energy Model will notify the Energy Source of this change and new total current draw will be calculated. Similarly, every Energy Harvester update triggers an update to the connected Energy Source.
-
-The Energy Source base class keeps a list of devices (Device Energy Model objects) and energy harvesters (Energy Harvester objects) that are using the particular Energy Source as power supply. When energy is completely drained, the Energy Source will notify all devices on this list. Each device can then handle this event independently, based on the desired behavior that should be followed in case of power outage.
+The Energy Source represents the power supply on each node. A node can
+have one or more energy sources, and each energy source can be
+connected to multiple device energy models. Connecting an energy
+source to a device energy model implies that the corresponding device
+draws power from the source. The basic functionality of the Energy
+Source is to provide energy for devices on the node. When energy is
+completely drained from the Energy Source, it notifies the devices on
+node such that each device can react to this event. Further, each node
+can access the Energy Source Objects for information such as remaining
+energy or energy fraction (battery level). This enables the
+implementation of energy aware protocols in ns-3.
+
+In order to model a wide range of power supplies such as batteries,
+the Energy Source must be able to capture characteristics of these
+supplies. There are 2 important characteristics or effects related to
+practical batteries:
+
+Rate Capacity Effect
+  Decrease of battery lifetime when the current draw is higher
+  than the rated value of the battery.
+  
+Recovery Effect
+  Increase of battery lifetime when the battery is alternating
+  between discharge and idle states.
+
+In order to incorporate the Rate Capacity Effect, the Energy Source
+uses current draw from all the devices on the same node to calculate
+energy consumption. Moreover, multiple Energy Harvesters can be
+connected to the Energy Source in order to replenish its energy. The
+Energy Source periodically polls all the devices and energy harvesters
+on the same node to calculate the total current drain and hence the
+energy consumption. When a device changes state, its corresponding
+Device Energy Model will notify the Energy Source of this change and
+new total current draw will be calculated. Similarly, every Energy
+Harvester update triggers an update to the connected Energy Source.
+
+The Energy Source base class keeps a list of devices (Device Energy
+Model objects) and energy harvesters (Energy Harvester objects) that
+are using the particular Energy Source as power supply. When energy is
+completely drained, the Energy Source will notify all devices on this
+list. Each device can then handle this event independently, based on
+the desired behavior that should be followed in case of power outage.
 
 
 Device Energy Model
 ###################
 
-The Device Energy Model is the energy consumption model of a device installed on the node. It is designed to be a state based model where each device is assumed to have a number of states, and each state is associated with a power consumption value. Whenever the state of the device changes, the corresponding Device Energy Model will notify the Energy Source of the new current draw of the device. The Energy Source will then calculate the new total current draw and update the remaining energy.
-
-The Device Energy Model can also be used for devices that do not have finite number of states. For example, in an electric vehicle, the current draw of the motor is determined by its speed. Since the vehicle's speed can take continuous values within a certain range, it is infeasible to define a set of discrete states of operation. However, by converting the speed value into current directly, the same set of Device Energy Model APIs can still be used.
+The Device Energy Model is the energy consumption model of a device
+installed on the node. It is designed to be a state based model where
+each device is assumed to have a number of states, and each state is
+associated with a power consumption value. Whenever the state of the
+device changes, the corresponding Device Energy Model will notify the
+Energy Source of the new current draw of the device. The Energy Source
+will then calculate the new total current draw and update the
+remaining energy.
+
+The Device Energy Model can also be used for devices that do not have
+finite number of states. For example, in an electric vehicle, the
+current draw of the motor is determined by its speed. Since the
+vehicle's speed can take continuous values within a certain range, it
+is infeasible to define a set of discrete states of
+operation. However, by converting the speed value into current
+directly, the same set of Device Energy Model APIs can still be used.
 
 Energy Harvester
-#############
+################
 
-The energy harvester represents the elements that harvest energy from the environment and recharge the Energy Source to which it is connected. The energy harvester includes the complete implementation of the actual energy harvesting device (e.g., a solar panel) and the environment (e.g., the solar radiation). This means that in implementing an energy harvester, the energy contribution of the environment and the additional energy requirements of the energy harvesting device such as the conversion efficiency and the internal power consumption of the device needs to be jointly modeled.
+The energy harvester represents the elements that harvest energy from
+the environment and recharge the Energy Source to which it is
+connected. The energy harvester includes the complete implementation
+of the actual energy harvesting device (e.g., a solar panel) and the
+environment (e.g., the solar radiation). This means that in
+implementing an energy harvester, the energy contribution of the
+environment and the additional energy requirements of the energy
+harvesting device such as the conversion efficiency and the internal
+power consumption of the device needs to be jointly modeled.
 
 
 WiFi Radio Energy Model
 #######################
 
-The WiFi Radio Energy Model is the energy consumption model of a Wifi net device. It provides a state for each of the available states of the PHY layer: Idle, CcaBusy, Tx, Rx, ChannelSwitch, Sleep. Each of such states is associated with a value (in Ampere) of the current draw (see below for the corresponding attribute names). A Wifi Radio Energy Model PHY Listener is registered to the Wifi PHY in order to be notified of every Wifi PHY state transition. At every transition, the energy consumed in the previous state is computed and the energy source is notified in order to update its remaining energy.
-
-The Wifi Tx Current Model gives the possibility to compute the current draw in the transmit state as a function of the nominal tx power (in dBm), as observed in several experimental measurements. To this purpose, the Wifi Radio Energy Model PHY Listener is notified of the nominal tx power used to transmit the current frame and passes such a value to the Wifi Tx Current Model which takes care of updating the current draw in the Tx state. Hence, the energy consumption is correctly computed even if the Wifi Remote Station Manager performs per-frame power control. Currently, a Linear Wifi Tx Current Model is implemented which computes the tx current as a linear function (according to parameters that can be specified by the user) of the nominal tx power in dBm.
-
-The Wifi Radio Energy Model offers the possibility to specify a callback that is invoked when the energy source is depleted. If such a callback is not specified when the Wifi Radio Energy Model Helper is used to install the model on a device, a callback is implicitly made so that the Wifi PHY is put in the SLEEP mode (hence no frame is transmitted nor received afterwards) when the energy source is depleted. Likewise, it is possible to specify a callback that is invoked when the energy source is recharged (which might occur in case an energy harvester is connected to the energy source). If such a callback is not specified when the Wifi Radio Energy Model Helper is used to install the model on a device, a callback is implicitly made so that the Wifi PHY is resumed from the SLEEP mode when the energy source is recharged.
+The WiFi Radio Energy Model is the energy consumption model of a Wifi
+net device. It provides a state for each of the available states of
+the PHY layer: Idle, CcaBusy, Tx, Rx, ChannelSwitch, Sleep. Each of
+such states is associated with a value (in Ampere) of the current draw
+(see below for the corresponding attribute names). A Wifi Radio Energy
+Model PHY Listener is registered to the Wifi PHY in order to be
+notified of every Wifi PHY state transition. At every transition, the
+energy consumed in the previous state is computed and the energy
+source is notified in order to update its remaining energy.
+
+The Wifi Tx Current Model gives the possibility to compute the current
+draw in the transmit state as a function of the nominal tx power (in
+dBm), as observed in several experimental measurements. To this
+purpose, the Wifi Radio Energy Model PHY Listener is notified of the
+nominal tx power used to transmit the current frame and passes such a
+value to the Wifi Tx Current Model which takes care of updating the
+current draw in the Tx state. Hence, the energy consumption is
+correctly computed even if the Wifi Remote Station Manager performs
+per-frame power control. Currently, a Linear Wifi Tx Current Model is
+implemented which computes the tx current as a linear function
+(according to parameters that can be specified by the user) of the
+nominal tx power in dBm.
+
+The Wifi Radio Energy Model offers the possibility to specify a
+callback that is invoked when the energy source is depleted. If such a
+callback is not specified when the Wifi Radio Energy Model Helper is
+used to install the model on a device, a callback is implicitly made
+so that the Wifi PHY is put in the SLEEP mode (hence no frame is
+transmitted nor received afterwards) when the energy source is
+depleted. Likewise, it is possible to specify a callback that is
+invoked when the energy source is recharged (which might occur in case
+an energy harvester is connected to the energy source). If such a
+callback is not specified when the Wifi Radio Energy Model Helper is
+used to install the model on a device, a callback is implicitly made
+so that the Wifi PHY is resumed from the SLEEP mode when the energy
+source is recharged.
 
 Future Work
 ***********
 
-For Device Energy Models, we are planning to include support for other PHY layer models provided in ns-3 such as WiMAX, and to model the energy consumptions of other non communicating devices, like a generic sensor and a CPU. For Energy Sources, we are planning to included new types of Energy Sources such as Supercapacitor and NickelMetal Hydride (Ni-MH) battery. For the Energy Harvesters, we are planning to implement an energy harvester that recharges the energy sources according to the power levels defined in a user customizable dataset of real measurements.
+For Device Energy Models, we are planning to include support for other
+PHY layer models provided in ns-3 such as WiMAX, and to model the
+energy consumptions of other non communicating devices, like a generic
+sensor and a CPU. For Energy Sources, we are planning to included new
+types of Energy Sources such as Supercapacitor and Nickel-Metal
+Hydride (Ni-MH) battery. For the Energy Harvesters, we are planning to
+implement an energy harvester that recharges the energy sources
+according to the power levels defined in a user customizable dataset
+of real measurements.
 
 References
 **********
 
-.. [1] ns-2 Energy model: http://www.cubinlab.ee.unimelb.edu.au/~jrid/Docs/Manuel-NS2/node204.html
-.. [2] H. Wu, S. Nabar and R. Poovendran. An Energy Framework for the Network Simulator 3 (ns-3).
-.. [3] M. Handy and D. Timmermann. Simulation of mobile wireless networks with accurate 
-       modelling of non-linear battery effects. In Proc. of Applied simulation and Modeling 
-       (ASM), 2003.
-.. [4] D. N. Rakhmatov and S. B. Vrudhula. An analytical high-level battery model for use in energy 
-       management of portable electronic systems. In Proc. of IEEE/ACM International Conference on 
-       Computer Aided Design (ICCAD'01), pages 488-493, November 2001.
-.. [5] D. N. Rakhmatov, S. B. Vrudhula, and D. A. Wallach. Battery lifetime prediction for 
-       energy-aware computing. In Proc. of the 2002 International Symposium on Low Power 
-       Electronics and Design (ISLPED'02), pages 154-159, 2002.
-.. [6] C. Tapparello, H. Ayatollahi and W. Heinzelman. Extending the Energy Framework for Network 
-       Simulator 3 (ns-3). Workshop on ns-3 (WNS3), Poster Session, Atlanta, GA, USA. May, 2014.
+.. [1] ns-2 Energy model:
+   http://www.cubinlab.ee.unimelb.edu.au/~jrid/Docs/Manuel-NS2/node204.html
 
-Usage
-=====
+.. [2] H. Wu, S. Nabar and R. Poovendran. An Energy Framework for the
+   Network Simulator 3 (ns-3).
 
-The main way that ns-3 users will typically interact with the Energy Framework is through the helper API and through the publicly visible attributes of the framework. The helper API is defined in ``src/energy/helper/*.h``.
+.. [3] M. Handy and D. Timmermann. Simulation of mobile wireless
+   networks with accurate modelling of non-linear battery effects. In
+   Proc. of Applied simulation and Modeling (ASM), 2003.
+       
+.. [4] D. N. Rakhmatov and S. B. Vrudhula. An analytical high-level
+   battery model for use in energy management of portable electronic
+   systems. In Proc. of IEEE/ACM International Conference on Computer
+   Aided Design (ICCAD'01), pages 488-493, November 2001.
+       
+.. [5] D. N. Rakhmatov, S. B. Vrudhula, and D. A. Wallach. Battery
+   lifetime prediction for energy-aware computing. In Proc. of the 2002
+   International Symposium on Low Power Electronics and Design
+   (ISLPED'02), pages 154-159, 2002.
+       
+.. [6] C. Tapparello, H. Ayatollahi and W. Heinzelman. Extending the
+   Energy Framework for Network Simulator 3 (ns-3). Workshop on ns-3
+   (WNS3), Poster Session, Atlanta, GA, USA. May, 2014.
 
-In order to use the energy framework, the user must install an Energy Source for the node of interest, the corresponding Device Energy Model for the network devices and, if necessary, the one or more Energy Harvester. Energy Source (objects) are aggregated onto each node by the Energy Source Helper. In order to allow multiple energy sources per node, we aggregate an Energy Source Container rather than directly aggregating a source object.  
+Usage
+=====
 
-The Energy Source object keeps a list of Device Energy Model and Energy Harvester objects using the source as power supply. Device Energy Model objects are installed onto the Energy Source by the Device Energy Model Helper, while Energy Harvester object are installed by the Energy Harvester Helper. User can access the Device Energy Model objects through the Energy Source object to obtain energy consumption information of individual devices. Moreover, the user can access to the Energy Harvester objects in order to gather information regarding the current harvestable power and the total energy harvested by the harvester. 
+The main way that ns-3 users will typically interact with the Energy
+Framework is through the helper API and through the publicly visible
+attributes of the framework. The helper API is defined in
+``src/energy/helper/*.h``.
+
+In order to use the energy framework, the user must install an Energy
+Source for the node of interest, the corresponding Device Energy Model
+for the network devices and, if necessary, the one or more Energy
+Harvester. Energy Source (objects) are aggregated onto each node by
+the Energy Source Helper. In order to allow multiple energy sources
+per node, we aggregate an Energy Source Container rather than directly
+aggregating a source object.
+
+The Energy Source object keeps a list of Device Energy Model and
+Energy Harvester objects using the source as power supply. Device
+Energy Model objects are installed onto the Energy Source by the
+Device Energy Model Helper, while Energy Harvester object are
+installed by the Energy Harvester Helper. User can access the Device
+Energy Model objects through the Energy Source object to obtain energy
+consumption information of individual devices. Moreover, the user can
+access to the Energy Harvester objects in order to gather information
+regarding the current harvestable power and the total energy harvested
+by the harvester.
 
 
 Examples
@@ -97,35 +227,48 @@
 Energy Source Helper
 ####################
 
-Base helper class for Energy Source objects, this helper Aggregates Energy Source object onto a node. Child implementation of this class creates the actual Energy Source object.
+Base helper class for Energy Source objects, this helper Aggregates
+Energy Source object onto a node. Child implementation of this class
+creates the actual Energy Source object.
 
 Device Energy Model Helper
 ##########################
 
-Base helper class for Device Energy Model objects, this helper attaches Device Energy Model objects onto Energy Source objects. Child implementation of this class creates the actual Device Energy Model object.
+Base helper class for Device Energy Model objects, this helper
+attaches Device Energy Model objects onto Energy Source objects. Child
+implementation of this class creates the actual Device Energy Model
+object.
 
 Energy Harvesting Helper
 ##########################
 
-Base helper class for Energy Harvester objects, this helper attaches Energy Harvester objects onto Energy Source objects. Child implementation of this class creates the actual Energy Harvester object.
+Base helper class for Energy Harvester objects, this helper attaches
+Energy Harvester objects onto Energy Source objects. Child
+implementation of this class creates the actual Energy Harvester
+object.
 
 
 Attributes
 **********
 
-Attributes differ between Energy Sources, Devices Energy Models and Energy Harvesters implementations, please look at the specific child class for details.
+Attributes differ between Energy Sources, Devices Energy Models and
+Energy Harvesters implementations, please look at the specific child
+class for details.
 
 Basic Energy Source
 ###################
 
-* ``BasicEnergySourceInitialEnergyJ``: Initial energy stored in basic energy source.
+* ``BasicEnergySourceInitialEnergyJ``: Initial energy stored in
+  basic energy source.
 * ``BasicEnergySupplyVoltageV``: Initial supply voltage for basic energy source.
-* ``PeriodicEnergyUpdateInterval``: Time between two consecutive periodic energy updates.
+* ``PeriodicEnergyUpdateInterval``: Time between two consecutive periodic
+  energy updates.
 
 RV Battery Model
 ################
 
-* ``RvBatteryModelPeriodicEnergyUpdateInterval``: RV battery model sampling interval.
+* ``RvBatteryModelPeriodicEnergyUpdateInterval``: RV battery model sampling
+  interval.
 * ``RvBatteryModelOpenCircuitVoltage``: RV battery model open circuit voltage.
 * ``RvBatteryModelCutoffVoltage``: RV battery model cutoff voltage.
 * ``RvBatteryModelAlphaValue``: RV battery model alpha value.
@@ -146,13 +289,17 @@
 Basic Energy Harvester
 #######################
 
-* ``PeriodicHarvestedPowerUpdateInterval``: Time between two consecutive periodic updates of the harvested power.
-* ``HarvestablePower``: Random variables that represents the amount of power that is provided by the energy harvester.
+* ``PeriodicHarvestedPowerUpdateInterval``: Time between two consecutive
+  periodic updates of the harvested power.
+* ``HarvestablePower``: Random variables that represents the amount of power
+  that is provided by the energy harvester.
 
 Tracing
 *******
 
-Traced values differ between Energy Sources, Devices Energy Models and Energy Harvesters implementations, please look at the specific child class for details.
+Traced values differ between Energy Sources, Devices Energy Models and
+Energy Harvesters implementations, please look at the specific child
+class for details.
 
 Basic Energy Source
 ###################
@@ -180,4 +327,8 @@
 Validation
 **********
 
-Comparison of the Energy Framework against actual devices have not been performed. Current implementation of the Energy Framework is checked numerically for computation errors. The RV battery model is validated by comparing results with what was presented in the original RV battery model paper.
+Comparison of the Energy Framework against actual devices have not
+been performed. Current implementation of the Energy Framework is
+checked numerically for computation errors. The RV battery model is
+validated by comparing results with what was presented in the original
+RV battery model paper.
diff -Naur ns-3.21/src/energy/helper/energy-harvester-container.cc ns-3.22/src/energy/helper/energy-harvester-container.cc
--- ns-3.21/src/energy/helper/energy-harvester-container.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/helper/energy-harvester-container.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,12 @@
 #include "ns3/names.h"
 #include "ns3/log.h"
 
+namespace ns3 {
+
 NS_LOG_COMPONENT_DEFINE ("EnergyHarvesterContainer");
 
-namespace ns3 {
-    
+NS_OBJECT_ENSURE_REGISTERED (EnergyHarvesterContainer);
+
 TypeId
 EnergyHarvesterContainer::GetTypeId (void)
 {
diff -Naur ns-3.21/src/energy/helper/energy-model-helper.cc ns-3.22/src/energy/helper/energy-model-helper.cc
--- ns-3.21/src/energy/helper/energy-model-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/helper/energy-model-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -49,19 +49,19 @@
        * Check if EnergySourceContainer is already aggregated to target node. If
        * not, create a new EnergySourceContainer and aggregate it to node.
        */
-      Ptr<EnergySourceContainer> EnergySourceContrainerOnNode =
+      Ptr<EnergySourceContainer> EnergySourceContainerOnNode =
         (*i)->GetObject<EnergySourceContainer> ();
-      if (EnergySourceContrainerOnNode == NULL)
+      if (EnergySourceContainerOnNode == NULL)
         {
           ObjectFactory fac;
           fac.SetTypeId ("ns3::EnergySourceContainer");
-          EnergySourceContrainerOnNode = fac.Create<EnergySourceContainer> ();
-          EnergySourceContrainerOnNode->Add (src);
-          (*i)->AggregateObject (EnergySourceContrainerOnNode);
+          EnergySourceContainerOnNode = fac.Create<EnergySourceContainer> ();
+          EnergySourceContainerOnNode->Add (src);
+          (*i)->AggregateObject (EnergySourceContainerOnNode);
         }
       else
         {
-          EnergySourceContrainerOnNode->Add (src);  // append new EnergySource
+          EnergySourceContainerOnNode->Add (src);  // append new EnergySource
         }
     }
   return container;
diff -Naur ns-3.21/src/energy/helper/energy-source-container.cc ns-3.22/src/energy/helper/energy-source-container.cc
--- ns-3.21/src/energy/helper/energy-source-container.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/helper/energy-source-container.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,6 +25,8 @@
 
 namespace ns3 {
 
+NS_OBJECT_ENSURE_REGISTERED (EnergySourceContainer);
+
 TypeId
 EnergySourceContainer::GetTypeId (void)
 {
diff -Naur ns-3.21/src/energy/model/basic-energy-harvester.cc ns-3.22/src/energy/model/basic-energy-harvester.cc
--- ns-3.21/src/energy/model/basic-energy-harvester.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/basic-energy-harvester.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/trace-source-accessor.h"
 #include "ns3/simulator.h"
 
+namespace ns3 {
+
 NS_LOG_COMPONENT_DEFINE ("BasicEnergyHarvester");
 
-namespace ns3 {
-  
 NS_OBJECT_ENSURE_REGISTERED (BasicEnergyHarvester);
 
 TypeId
@@ -53,10 +53,12 @@
                  MakePointerChecker<RandomVariableStream> ())
   .AddTraceSource ("HarvestedPower",
                    "Harvested power by the BasicEnergyHarvester.",
-                   MakeTraceSourceAccessor (&BasicEnergyHarvester::m_harvestedPower))
+                   MakeTraceSourceAccessor (&BasicEnergyHarvester::m_harvestedPower),
+                   "ns3::TracedValue::DoubleCallback")
   .AddTraceSource ("TotalEnergyHarvested",
                    "Total energy harvested by the harvester.",
-                   MakeTraceSourceAccessor (&BasicEnergyHarvester::m_totalEnergyHarvestedJ))
+                   MakeTraceSourceAccessor (&BasicEnergyHarvester::m_totalEnergyHarvestedJ),
+                   "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/energy/model/basic-energy-source.cc ns-3.22/src/energy/model/basic-energy-source.cc
--- ns-3.21/src/energy/model/basic-energy-source.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/basic-energy-source.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include "ns3/trace-source-accessor.h"
 #include "ns3/simulator.h"
 
-NS_LOG_COMPONENT_DEFINE ("BasicEnergySource");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BasicEnergySource");
+
 NS_OBJECT_ENSURE_REGISTERED (BasicEnergySource);
 
 TypeId
@@ -67,7 +67,8 @@
                    MakeTimeChecker ())
     .AddTraceSource ("RemainingEnergy",
                      "Remaining energy at BasicEnergySource.",
-                     MakeTraceSourceAccessor (&BasicEnergySource::m_remainingEnergyJ))
+                     MakeTraceSourceAccessor (&BasicEnergySource::m_remainingEnergyJ),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/energy/model/device-energy-model.cc ns-3.22/src/energy/model/device-energy-model.cc
--- ns-3.21/src/energy/model/device-energy-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/device-energy-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "device-energy-model.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("DeviceEnergyModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DeviceEnergyModel");
+
 NS_OBJECT_ENSURE_REGISTERED (DeviceEnergyModel);
 
 TypeId
diff -Naur ns-3.21/src/energy/model/device-energy-model-container.cc ns-3.22/src/energy/model/device-energy-model-container.cc
--- ns-3.21/src/energy/model/device-energy-model-container.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/device-energy-model-container.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/names.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("DeviceEnergyModelContainer");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DeviceEnergyModelContainer");
+
 DeviceEnergyModelContainer::DeviceEnergyModelContainer ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/energy/model/energy-harvester.cc ns-3.22/src/energy/model/energy-harvester.cc
--- ns-3.21/src/energy/model/energy-harvester.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/energy-harvester.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,9 +22,9 @@
 #include "energy-harvester.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("EnergyHarvester");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("EnergyHarvester");
     
 NS_OBJECT_ENSURE_REGISTERED (EnergyHarvester);
 
diff -Naur ns-3.21/src/energy/model/energy-source.cc ns-3.22/src/energy/model/energy-source.cc
--- ns-3.21/src/energy/model/energy-source.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/energy-source.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "energy-source.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("EnergySource");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EnergySource");
+
 NS_OBJECT_ENSURE_REGISTERED (EnergySource);
 
 TypeId
diff -Naur ns-3.21/src/energy/model/li-ion-energy-source.cc ns-3.22/src/energy/model/li-ion-energy-source.cc
--- ns-3.21/src/energy/model/li-ion-energy-source.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/li-ion-energy-source.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("LiIonEnergySource");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LiIonEnergySource");
+
 NS_OBJECT_ENSURE_REGISTERED (LiIonEnergySource);
 
 TypeId
@@ -104,7 +104,8 @@
                    MakeTimeChecker ())
     .AddTraceSource ("RemainingEnergy",
                      "Remaining energy at BasicEnergySource.",
-                     MakeTraceSourceAccessor (&LiIonEnergySource::m_remainingEnergyJ))
+                     MakeTraceSourceAccessor (&LiIonEnergySource::m_remainingEnergyJ),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/energy/model/rv-battery-model.cc ns-3.22/src/energy/model/rv-battery-model.cc
--- ns-3.21/src/energy/model/rv-battery-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/rv-battery-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/simulator.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("RvBatteryModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RvBatteryModel");
+
 NS_OBJECT_ENSURE_REGISTERED (RvBatteryModel);
 
 TypeId
@@ -81,10 +81,12 @@
                    MakeIntegerChecker<int> ())
     .AddTraceSource ("RvBatteryModelBatteryLevel",
                      "RV battery model battery level.",
-                     MakeTraceSourceAccessor (&RvBatteryModel::m_batteryLevel))
+                     MakeTraceSourceAccessor (&RvBatteryModel::m_batteryLevel),
+                     "ns3::TracedValue::DoubleCallback")
     .AddTraceSource ("RvBatteryModelBatteryLifetime",
                      "RV battery model battery lifetime.",
-                     MakeTraceSourceAccessor (&RvBatteryModel::m_lifetime))
+                     MakeTraceSourceAccessor (&RvBatteryModel::m_lifetime),
+                     "ns3::Time::TracedValueCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/energy/model/simple-device-energy-model.cc ns-3.22/src/energy/model/simple-device-energy-model.cc
--- ns-3.21/src/energy/model/simple-device-energy-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/simple-device-energy-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "simple-device-energy-model.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("SimpleDeviceEnergyModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SimpleDeviceEnergyModel");
+
 NS_OBJECT_ENSURE_REGISTERED (SimpleDeviceEnergyModel);
 
 TypeId
@@ -38,7 +38,8 @@
     .AddConstructor<SimpleDeviceEnergyModel> ()
     .AddTraceSource ("TotalEnergyConsumption",
                      "Total energy consumption of the radio device.",
-                     MakeTraceSourceAccessor (&SimpleDeviceEnergyModel::m_totalEnergyConsumption))
+                     MakeTraceSourceAccessor (&SimpleDeviceEnergyModel::m_totalEnergyConsumption),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/energy/model/wifi-radio-energy-model.cc ns-3.22/src/energy/model/wifi-radio-energy-model.cc
--- ns-3.21/src/energy/model/wifi-radio-energy-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/wifi-radio-energy-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "wifi-radio-energy-model.h"
 #include "wifi-tx-current-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("WifiRadioEnergyModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WifiRadioEnergyModel");
+
 NS_OBJECT_ENSURE_REGISTERED (WifiRadioEnergyModel);
 
 TypeId
@@ -81,7 +81,8 @@
                    MakePointerChecker<WifiTxCurrentModel> ())
     .AddTraceSource ("TotalEnergyConsumption",
                      "Total energy consumption of the radio device.",
-                     MakeTraceSourceAccessor (&WifiRadioEnergyModel::m_totalEnergyConsumption))
+                     MakeTraceSourceAccessor (&WifiRadioEnergyModel::m_totalEnergyConsumption),
+                     "ns3::TracedValue::DoubleCallback")
   ; 
   return tid;
 }
diff -Naur ns-3.21/src/energy/model/wifi-tx-current-model.cc ns-3.22/src/energy/model/wifi-tx-current-model.cc
--- ns-3.21/src/energy/model/wifi-tx-current-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/energy/model/wifi-tx-current-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/pointer.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("WifiTxCurrentModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WifiTxCurrentModel");
+
 // ------------------------------------------------------------------------- //
 
 NS_OBJECT_ENSURE_REGISTERED (WifiTxCurrentModel);
diff -Naur ns-3.21/src/fd-net-device/bindings/modulegen__gcc_ILP32.py ns-3.22/src/fd-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1758,10 +1758,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2141,10 +2141,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2454,7 +2454,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2505,6 +2510,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2581,6 +2591,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2615,6 +2629,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4254,11 +4270,6 @@
                    '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', 
@@ -4329,6 +4340,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TapFdNetDeviceHelper_methods(root_module, cls):
diff -Naur ns-3.21/src/fd-net-device/bindings/modulegen__gcc_LP64.py ns-3.22/src/fd-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1758,10 +1758,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2141,10 +2141,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2454,7 +2454,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2505,6 +2510,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2581,6 +2591,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2615,6 +2629,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4254,11 +4270,6 @@
                    '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', 
@@ -4329,6 +4340,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TapFdNetDeviceHelper_methods(root_module, cls):
diff -Naur ns-3.21/src/fd-net-device/doc/fd-net-device.rst ns-3.22/src/fd-net-device/doc/fd-net-device.rst
--- ns-3.21/src/fd-net-device/doc/fd-net-device.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/doc/fd-net-device.rst	2015-02-05 15:46:22.000000000 -0800
@@ -250,7 +250,7 @@
 
 This helper replaces the functionality of the ``EmuNetDevice`` found in
 |ns3| prior to ns-3.17, by bringing this type of device into the common
-framework of the FdNetDevice.  The ``EmuNetDevice`` will be deprecated
+framework of the FdNetDevice.  The ``EmuNetDevice`` was deprecated
 in favor of this new helper.
 
 The device is configured to perform
@@ -261,7 +261,8 @@
 which the simulation is running has a specific interface of interest which
 drives the testbed hardware. You would also need to set this specific interface
 into promiscuous mode and provide an appropriate device name to the |ns3|
-simulation.
+simulation.  Additionally, hardware offloading of segmentation and checksums 
+should be disabled.  
 
 The helper only works if the underlying interface is up and in
 promiscuous mode. Packets will be sent out over the device, but we use MAC
diff -Naur ns-3.21/src/fd-net-device/examples/fd-emu-udp-echo.cc ns-3.22/src/fd-net-device/examples/fd-emu-udp-echo.cc
--- ns-3.21/src/fd-net-device/examples/fd-emu-udp-echo.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/examples/fd-emu-udp-echo.cc	2015-02-05 15:46:22.000000000 -0800
@@ -62,6 +62,16 @@
 // - Tracing of queues and packet receptions to file "udp-echo.tr"
 // - pcap tracing on all devices
 //
+// Another mode of operation corresponds to the wiki HOWTO
+// 'HOWTO use ns-3 scripts to drive real hardware'
+//
+// If the --client mode is specified, only one ns-3 node is created 
+// on the specified device name, assuming that a server node is
+// on another virtual machine.  The client node will use 10.1.1.2
+//
+// If the --server mode is specified, only one ns-3 node is created 
+// on the specified device name, assuming that a client node is
+// on another virtual machine.  The server node will use 10.1.1.1
 
 #include <fstream>
 #include "ns3/core-module.h"
@@ -78,14 +88,20 @@
 {
   std::string deviceName ("eth1");
   std::string encapMode ("Dix");
-  uint32_t nNodes = 4;
+  bool clientMode = false;
+  bool serverMode = false;
+  double stopTime = 10;
+  uint32_t nNodes = 2;
 
   //
   // Allow the user to override any of the defaults at run-time, via command-line
   // arguments
   //
   CommandLine cmd;
+  cmd.AddValue ("client", "client mode", clientMode);
+  cmd.AddValue ("server", "server mode", serverMode);
   cmd.AddValue ("deviceName", "device name", deviceName);
+  cmd.AddValue ("stopTime", "stop time (seconds)", stopTime);
   cmd.AddValue ("encapsulationMode", "encapsulation mode of emu device (\"Dix\" [default] or \"Llc\")", encapMode);
   cmd.AddValue ("nNodes", "number of nodes to create (>= 2)", nNodes);
 
@@ -95,6 +111,11 @@
                      StringValue ("ns3::RealtimeSimulatorImpl"));
 
   GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
+
+  if (clientMode && serverMode)
+    {
+      NS_FATAL_ERROR("Error, both client and server options cannot be enabled.");
+    }
   //
   // need at least two nodes
   //
@@ -118,48 +139,99 @@
   emu.SetDeviceName (deviceName);
   emu.SetAttribute ("EncapsulationMode", StringValue (encapMode));
 
-  NetDeviceContainer d = emu.Install (n);
-
-  //
-  // We've got the "hardware" in place.  Now we need to add IP addresses.
-  //
+  NetDeviceContainer d;
   Ipv4AddressHelper ipv4;
-  NS_LOG_INFO ("Assign IP Addresses.");
+  Ipv4InterfaceContainer i;
+  ApplicationContainer apps;
+
   ipv4.SetBase ("10.1.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer i = ipv4.Assign (d);
+  if (clientMode)
+    {
+      d = emu.Install (n.Get (0));
+      // Note:  incorrect MAC address assignments are one of the confounding
+      // aspects of network emulation experiments.  Here, we assume that there
+      // will be a server mode taking the first MAC address, so we need to
+      // force the MAC address to be one higher (just like IP address below)
+      Ptr<FdNetDevice> dev = d.Get (0)->GetObject<FdNetDevice> ();
+      dev->SetAddress (Mac48Address ("00:00:00:00:00:02"));
+      NS_LOG_INFO ("Assign IP Addresses.");
+      ipv4.NewAddress ();  // burn the 10.1.1.1 address so that 10.1.1.2 is next
+      i = ipv4.Assign (d);
+    }
+  else if (serverMode)
+    {
+      d = emu.Install (n.Get (0));
+      NS_LOG_INFO ("Assign IP Addresses.");
+      i = ipv4.Assign (d);
+    }
+  else
+    {
+      d = emu.Install (n);
+      NS_LOG_INFO ("Assign IP Addresses.");
+      i = ipv4.Assign (d);
+    }
+    
+  if (serverMode)
+    {
+      //
+      // Create a UdpEchoServer application 
+      //
+      NS_LOG_INFO ("Create Applications.");
+      UdpEchoServerHelper server (9);
+      apps = server.Install (n.Get (0));
+      apps.Start (Seconds (1.0));
+      apps.Stop (Seconds (stopTime));
+    }
+  else if (clientMode)
+    {
+      //
+      // Create a UdpEchoClient application to send UDP datagrams 
+      //
+      uint32_t packetSize = 1024;
+      uint32_t maxPacketCount = 20;
+      Time interPacketInterval = Seconds (0.1);
+      UdpEchoClientHelper client (Ipv4Address ("10.1.1.1"), 9);
+      client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
+      client.SetAttribute ("Interval", TimeValue (interPacketInterval));
+      client.SetAttribute ("PacketSize", UintegerValue (packetSize));
+      apps = client.Install (n.Get (0));
+      apps.Start (Seconds (2.0));
+      apps.Stop (Seconds (stopTime));
+    }
+  else
+    {
+      //
+      // Create a UdpEchoServer application on node one.
+      //
+      NS_LOG_INFO ("Create Applications.");
+      UdpEchoServerHelper server (9);
+      apps = server.Install (n.Get (1));
+      apps.Start (Seconds (1.0));
+      apps.Stop (Seconds (stopTime));
+    
+      //
+      // Create a UdpEchoClient application to send UDP datagrams from node zero to node one.
+      //
+      uint32_t packetSize = 1024;
+      uint32_t maxPacketCount = 20;
+      Time interPacketInterval = Seconds (0.1);
+      UdpEchoClientHelper client (i.GetAddress (1), 9);
+      client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
+      client.SetAttribute ("Interval", TimeValue (interPacketInterval));
+      client.SetAttribute ("PacketSize", UintegerValue (packetSize));
+      apps = client.Install (n.Get (0));
+      apps.Start (Seconds (2.0));
+      apps.Stop (Seconds (stopTime));
+    }
 
-  //
-  // Create a UdpEchoServer application on node one.
-  //
-  NS_LOG_INFO ("Create Applications.");
-  UdpEchoServerHelper server (9);
-  ApplicationContainer apps = server.Install (n.Get (1));
-  apps.Start (Seconds (1.0));
-  apps.Stop (Seconds (10.0));
-
-  //
-  // Create a UdpEchoClient application to send UDP datagrams from node zero to node one.
-  //
-  uint32_t packetSize = 1024;
-  uint32_t maxPacketCount = 20;
-  Time interPacketInterval = Seconds (0.1);
-  UdpEchoClientHelper client (i.GetAddress (1), 9);
-  client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
-  client.SetAttribute ("Interval", TimeValue (interPacketInterval));
-  client.SetAttribute ("PacketSize", UintegerValue (packetSize));
-  apps = client.Install (n.Get (0));
-  apps.Start (Seconds (2.0));
-  apps.Stop (Seconds (10.0));
-
-  std::ofstream ascii;
-  ascii.open ("emu-udp-echo.tr");
-  emu.EnablePcapAll ("emu-udp-echo", true);
+  emu.EnablePcapAll ("fd-emu-udp-echo", true);
+  emu.EnableAsciiAll ("fd-emu-udp-echo.tr");
 
   //
   // Now, do the actual simulation.
   //
   NS_LOG_INFO ("Run Simulation.");
-  Simulator::Stop (Seconds (12.0));
+  Simulator::Stop (Seconds (stopTime + 2));
   Simulator::Run ();
   Simulator::Destroy ();
   NS_LOG_INFO ("Done.");
diff -Naur ns-3.21/src/fd-net-device/helper/emu-fd-net-device-helper.cc ns-3.22/src/fd-net-device/helper/emu-fd-net-device-helper.cc
--- ns-3.21/src/fd-net-device/helper/emu-fd-net-device-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/helper/emu-fd-net-device-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -53,10 +53,10 @@
 
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("EmuFdNetDeviceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EmuFdNetDeviceHelper");
+
 #define EMU_MAGIC 65867
 
 EmuFdNetDeviceHelper::EmuFdNetDeviceHelper ()
diff -Naur ns-3.21/src/fd-net-device/helper/emu-fd-net-device-helper.h ns-3.22/src/fd-net-device/helper/emu-fd-net-device-helper.h
--- ns-3.21/src/fd-net-device/helper/emu-fd-net-device-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/helper/emu-fd-net-device-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -62,9 +62,7 @@
   void SetDeviceName (std::string deviceName);
 
 protected:
-  /*
-   * \internal
-   */
+
   Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
 
   /**
@@ -79,10 +77,8 @@
   virtual int CreateFileDescriptor (void) const;
 
   /**
-  * \internal
-  *
-  * The unix/linux name of the underlying device (e.g., eth0)
-  */
+   * The unix/linux name of the underlying device (e.g., eth0)
+   */
   std::string m_deviceName;
 };
 
diff -Naur ns-3.21/src/fd-net-device/helper/fd-net-device-helper.cc ns-3.22/src/fd-net-device/helper/fd-net-device-helper.cc
--- ns-3.21/src/fd-net-device/helper/fd-net-device-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/helper/fd-net-device-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,10 +33,10 @@
 
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("FdNetDeviceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("FdNetDeviceHelper");
+
 FdNetDeviceHelper::FdNetDeviceHelper ()
 {
   m_deviceFactory.SetTypeId ("ns3::FdNetDevice");
diff -Naur ns-3.21/src/fd-net-device/helper/fd-net-device-helper.h ns-3.22/src/fd-net-device/helper/fd-net-device-helper.h
--- ns-3.21/src/fd-net-device/helper/fd-net-device-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/helper/fd-net-device-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -90,15 +90,12 @@
   virtual NetDeviceContainer Install (const NodeContainer &c) const;
 
 protected:
-  /*
-   * \internal
-   */
+
   virtual Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
 
 private:
   /**
    * \brief Enable pcap output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
@@ -112,7 +109,6 @@
 
   /**
    * \brief Enable ascii trace output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
diff -Naur ns-3.21/src/fd-net-device/helper/planetlab-fd-net-device-helper.cc ns-3.22/src/fd-net-device/helper/planetlab-fd-net-device-helper.cc
--- ns-3.21/src/fd-net-device/helper/planetlab-fd-net-device-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/helper/planetlab-fd-net-device-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -58,10 +58,10 @@
 
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("PlanetLabFdNetDeviceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PlanetLabFdNetDeviceHelper");
+
 #define PLANETLAB_MAGIC 75867
 
 PlanetLabFdNetDeviceHelper::PlanetLabFdNetDeviceHelper ()
diff -Naur ns-3.21/src/fd-net-device/helper/planetlab-fd-net-device-helper.h ns-3.22/src/fd-net-device/helper/planetlab-fd-net-device-helper.h
--- ns-3.21/src/fd-net-device/helper/planetlab-fd-net-device-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/helper/planetlab-fd-net-device-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -66,9 +66,7 @@
   void SetTapMask (Ipv4Mask mask);
 
 protected:
-  /*
-   * \internal
-   */
+
   Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
 
   /**
@@ -83,17 +81,13 @@
   virtual int CreateFileDescriptor (void) const;
 
   /**
-  * \internal
-  *
-  * The IP address for the TAP device.
-  */
+   * The IP address for the TAP device.
+   */
   Ipv4Address m_tapIp;
 
   /**
-  * \internal
-  *
-  * The network mask for the TAP device.
-  */
+   * The network mask for the TAP device.
+   */
   Ipv4Mask m_tapMask;
 
 };
diff -Naur ns-3.21/src/fd-net-device/helper/tap-fd-net-device-helper.cc ns-3.22/src/fd-net-device/helper/tap-fd-net-device-helper.cc
--- ns-3.21/src/fd-net-device/helper/tap-fd-net-device-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/helper/tap-fd-net-device-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -54,10 +54,10 @@
 
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("TapFdNetDeviceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TapFdNetDeviceHelper");
+
 #define TAP_MAGIC 95549
 
 TapFdNetDeviceHelper::TapFdNetDeviceHelper ()
diff -Naur ns-3.21/src/fd-net-device/helper/tap-fd-net-device-helper.h ns-3.22/src/fd-net-device/helper/tap-fd-net-device-helper.h
--- ns-3.21/src/fd-net-device/helper/tap-fd-net-device-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/helper/tap-fd-net-device-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -92,9 +92,7 @@
   void SetTapMacAddress (Mac48Address mac);
 
 protected:
-  /*
-   * \internal
-   */
+
   Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
 
   /**
@@ -109,47 +107,33 @@
   virtual int CreateFileDescriptor (void) const;
 
   /**
-  * \internal
-  *
-  * The TAP device flag IFF_NO_PI.
-  */
+   * The TAP device flag IFF_NO_PI.
+   */
   bool m_modePi;
 
   /**
-  * \internal
-  *
-  * The IPv4 address for the TAP device.
-  */
+   * The IPv4 address for the TAP device.
+   */
   Ipv4Address m_tapIp4;
 
   /**
-  * \internal
-  *
-  * The IPv6 address for the TAP device.
-  */
+   * The IPv6 address for the TAP device.
+   */
   Ipv6Address m_tapIp6;
 
-
   /**
-  * \internal
-  *
-  * The network mask IPv4 for the TAP device.
-  */
+   * The network mask IPv4 for the TAP device.
+   */
   Ipv4Mask m_tapMask4;
 
   /**
-  * \internal
-  *
-  * The network prefix IPv6 for the TAP device.
-  */
+   * The network prefix IPv6 for the TAP device.
+   */
   int m_tapPrefix6;
 
-
   /**
-  * \internal
-  *
-  * The TAP device MAC address.
-  */
+   * The TAP device MAC address.
+   */
   Mac48Address m_tapMac;
 
 };
diff -Naur ns-3.21/src/fd-net-device/model/fd-net-device.cc ns-3.22/src/fd-net-device/model/fd-net-device.cc
--- ns-3.21/src/fd-net-device/model/fd-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/model/fd-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,10 +40,10 @@
 #include <arpa/inet.h>
 #include <net/ethernet.h>
 
-NS_LOG_COMPONENT_DEFINE ("FdNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("FdNetDevice");
+
 FdNetDeviceFdReader::FdNetDeviceFdReader ()
   : m_bufferSize (65536) // Defaults to maximum TCP window size
 {
@@ -88,12 +88,14 @@
                    MakeMac48AddressAccessor (&FdNetDevice::m_address),
                    MakeMac48AddressChecker ())
     .AddAttribute ("Start",
-                   "The simulation time at which to spin up the device thread.",
+                   "The simulation time at which to spin up "
+                   "the device thread.",
                    TimeValue (Seconds (0.)),
                    MakeTimeAccessor (&FdNetDevice::m_tStart),
                    MakeTimeChecker ())
     .AddAttribute ("Stop",
-                   "The simulation time at which to tear down the device thread.",
+                   "The simulation time at which to tear down "
+                   "the device thread.",
                    TimeValue (Seconds (0.)),
                    MakeTimeAccessor (&FdNetDevice::m_tStop),
                    MakeTimeChecker ())
@@ -120,29 +122,43 @@
     // destined for the underlying operating system or vice-versa.
     //
     .AddTraceSource ("MacTx",
-                     "Trace source indicating a packet has arrived for transmission by this device",
-                     MakeTraceSourceAccessor (&FdNetDevice::m_macTxTrace))
+                     "Trace source indicating a packet has "
+                     "arrived for transmission by this device",
+                     MakeTraceSourceAccessor (&FdNetDevice::m_macTxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTxDrop",
-                     "Trace source indicating a packet has been dropped by the device before transmission",
-                     MakeTraceSourceAccessor (&FdNetDevice::m_macTxDropTrace))
+                     "Trace source indicating a packet has "
+                     "been dropped by the device before transmission",
+                     MakeTraceSourceAccessor (&FdNetDevice::m_macTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacPromiscRx",
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&FdNetDevice::m_macPromiscRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a promiscuous trace,",
+                     MakeTraceSourceAccessor (&FdNetDevice::m_macPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRx",
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&FdNetDevice::m_macRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a non-promiscuous trace,",
+                     MakeTraceSourceAccessor (&FdNetDevice::m_macRxTrace),
+                     "ns3::Packet::TracedCallback")
 
     //
     // Trace sources designed to simulate a packet sniffer facility (tcpdump).
     //
     .AddTraceSource ("Sniffer",
-                     "Trace source simulating a non-promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&FdNetDevice::m_snifferTrace))
+                     "Trace source simulating a non-promiscuous "
+                     "packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&FdNetDevice::m_snifferTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PromiscSniffer",
-                     "Trace source simulating a promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&FdNetDevice::m_promiscSnifferTrace))
+                     "Trace source simulating a promiscuous "
+                     "packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&FdNetDevice::m_promiscSnifferTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/fd-net-device/model/fd-net-device.h ns-3.22/src/fd-net-device/model/fd-net-device.h
--- ns-3.21/src/fd-net-device/model/fd-net-device.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/fd-net-device/model/fd-net-device.h	2015-02-05 15:46:22.000000000 -0800
@@ -182,29 +182,21 @@
   FdNetDevice (FdNetDevice const &);
 
   /**
-   * \internal
-   *
    * Spin up the device
    */
   void StartDevice (void);
 
   /**
-   * \internal
-   *
    * Tear down the device
    */
   void StopDevice (void);
 
   /**
-   * \internal
-   *
    * Callback to invoke when a new frame is received
    */
   void ReceiveCallback (uint8_t *buf, ssize_t len);
 
   /**
-   * \internal
-   *
    * Forward the frame to the appropriate callback for processing
    */
   void ForwardUp (uint8_t *buf, ssize_t len);
@@ -219,15 +211,11 @@
   void NotifyLinkUp (void);
 
   /**
-   * \internal
-   *
    * The ns-3 node associated to the net device.
    */
   Ptr<Node> m_node;
 
   /*
-   * \internal
-   *
    * a copy of the node id so the read thread doesn't have to GetNode() in
    * in order to find the node ID.  Thread unsafe reference counting in
    * multithreaded apps is not a good thing.
@@ -235,110 +223,80 @@
   uint32_t m_nodeId;
 
   /**
-   * \internal
-   *
    * The ns-3 interface index (in the sense of net device index) that has been assigned to this network device.
    */
   uint32_t m_ifIndex;
 
   /**
-   * \internal
-   *
    * The MTU associated to the file descriptor technology
    */
   uint16_t m_mtu;
 
   /**
-   * \internal
-   *
    * The file descriptor used for receive/send network traffic.
    */
   int m_fd;
 
   /**
-   * \internal
-   *
    * Reader for the file descriptor.
    */
   Ptr<FdNetDeviceFdReader> m_fdReader;
 
   /**
-   * \internal
-   *
    * The net device mac address.
    */
   Mac48Address m_address;
 
   /**
-   * \internal
-   *
    * The typ of encapsulation of the received/transmited frames.
    */
   EncapsulationMode m_encapMode;
 
   /**
-   * \internal
-   *
    * Flag indicating whether or not the link is up.  In this case,
    * whether or not the device is connected to a channel.
    */
   bool m_linkUp;
 
   /**
-   * \internal
-   *
    * Callbacks to fire if the link changes state (up or down).
    */
   TracedCallback<> m_linkChangeCallbacks;
 
   /**
-   * \internal
-   *
    * Flag indicating whether or not the underlying net device supports
    * broadcast.
    */
   bool m_isBroadcast;
 
   /**
-   * \internal
-   *
    * Flag indicating whether or not the underlying net device supports
    * multicast.
    */
   bool m_isMulticast;
 
   /**
-   * \internal
-   *
    * Number of packets that were received and scheduled for read but not yeat read.
    */
   uint32_t m_pendingReadCount;
   
   /**
-   * \internal
-   *
    * Maximum number of packets that can be received and scheduled for read but not yeat read.
    */
   uint32_t m_maxPendingReads;
   
    
   /**
-   * \internal
-   *
    * Mutex to increase pending read counter.
    */
   SystemMutex m_pendingReadMutex;
 
   /**
-   * \internal
-   *
    * Time to start spinning up the device
    */
   Time m_tStart;
 
   /**
-   * \internal
-   *
    * Time to start tearing down the device
    */
   Time m_tStop;
diff -Naur ns-3.21/src/flow-monitor/bindings/modulegen__gcc_ILP32.py ns-3.22/src/flow-monitor/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1853,10 +1853,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2360,7 +2360,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2411,6 +2416,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2487,6 +2497,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2521,6 +2535,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4239,14 +4255,14 @@
     cls.add_method('CheckForLostPackets', 
                    'void', 
                    [param('ns3::Time', 'maxDelay')])
-    ## flow-monitor.h (module 'flow-monitor'): std::vector<ns3::Ptr<ns3::FlowProbe>, std::allocator<ns3::Ptr<ns3::FlowProbe> > > ns3::FlowMonitor::GetAllProbes() const [member function]
+    ## flow-monitor.h (module 'flow-monitor'): std::vector<ns3::Ptr<ns3::FlowProbe>, std::allocator<ns3::Ptr<ns3::FlowProbe> > > const & ns3::FlowMonitor::GetAllProbes() const [member function]
     cls.add_method('GetAllProbes', 
-                   'std::vector< ns3::Ptr< ns3::FlowProbe > >', 
+                   'std::vector< ns3::Ptr< ns3::FlowProbe > > const &', 
                    [], 
                    is_const=True)
-    ## flow-monitor.h (module 'flow-monitor'): std::map<unsigned int, ns3::FlowMonitor::FlowStats, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, ns3::FlowMonitor::FlowStats> > > ns3::FlowMonitor::GetFlowStats() const [member function]
+    ## flow-monitor.h (module 'flow-monitor'): std::map<unsigned int, ns3::FlowMonitor::FlowStats, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, ns3::FlowMonitor::FlowStats> > > const & ns3::FlowMonitor::GetFlowStats() const [member function]
     cls.add_method('GetFlowStats', 
-                   'std::map< unsigned int, ns3::FlowMonitor::FlowStats >', 
+                   'std::map< unsigned int, ns3::FlowMonitor::FlowStats > const &', 
                    [], 
                    is_const=True)
     ## flow-monitor.h (module 'flow-monitor'): ns3::TypeId ns3::FlowMonitor::GetInstanceTypeId() const [member function]
@@ -4941,11 +4957,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -6061,11 +6072,6 @@
                    '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', 
@@ -6136,6 +6142,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/flow-monitor/bindings/modulegen__gcc_LP64.py ns-3.22/src/flow-monitor/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1853,10 +1853,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2360,7 +2360,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2411,6 +2416,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2487,6 +2497,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2521,6 +2535,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4239,14 +4255,14 @@
     cls.add_method('CheckForLostPackets', 
                    'void', 
                    [param('ns3::Time', 'maxDelay')])
-    ## flow-monitor.h (module 'flow-monitor'): std::vector<ns3::Ptr<ns3::FlowProbe>, std::allocator<ns3::Ptr<ns3::FlowProbe> > > ns3::FlowMonitor::GetAllProbes() const [member function]
+    ## flow-monitor.h (module 'flow-monitor'): std::vector<ns3::Ptr<ns3::FlowProbe>, std::allocator<ns3::Ptr<ns3::FlowProbe> > > const & ns3::FlowMonitor::GetAllProbes() const [member function]
     cls.add_method('GetAllProbes', 
-                   'std::vector< ns3::Ptr< ns3::FlowProbe > >', 
+                   'std::vector< ns3::Ptr< ns3::FlowProbe > > const &', 
                    [], 
                    is_const=True)
-    ## flow-monitor.h (module 'flow-monitor'): std::map<unsigned int, ns3::FlowMonitor::FlowStats, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, ns3::FlowMonitor::FlowStats> > > ns3::FlowMonitor::GetFlowStats() const [member function]
+    ## flow-monitor.h (module 'flow-monitor'): std::map<unsigned int, ns3::FlowMonitor::FlowStats, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, ns3::FlowMonitor::FlowStats> > > const & ns3::FlowMonitor::GetFlowStats() const [member function]
     cls.add_method('GetFlowStats', 
-                   'std::map< unsigned int, ns3::FlowMonitor::FlowStats >', 
+                   'std::map< unsigned int, ns3::FlowMonitor::FlowStats > const &', 
                    [], 
                    is_const=True)
     ## flow-monitor.h (module 'flow-monitor'): ns3::TypeId ns3::FlowMonitor::GetInstanceTypeId() const [member function]
@@ -4941,11 +4957,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -6061,11 +6072,6 @@
                    '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', 
@@ -6136,6 +6142,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/flow-monitor/model/flow-monitor.cc ns-3.22/src/flow-monitor/model/flow-monitor.cc
--- ns-3.21/src/flow-monitor/model/flow-monitor.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/flow-monitor/model/flow-monitor.cc	2015-02-05 15:46:22.000000000 -0800
@@ -107,7 +107,7 @@
 inline FlowMonitor::FlowStats&
 FlowMonitor::GetStatsForFlow (FlowId flowId)
 {
-  std::map<FlowId, FlowStats>::iterator iter;
+  FlowStatsContainerI iter;
   iter = m_flowStats.find (flowId);
   if (iter == m_flowStats.end ())
     {
@@ -282,7 +282,7 @@
     }
 }
 
-std::map<FlowId, FlowMonitor::FlowStats>
+const FlowMonitor::FlowStatsContainer&
 FlowMonitor::GetFlowStats () const
 {
   return m_flowStats;
@@ -300,8 +300,7 @@
       if (now - iter->second.lastSeenTime >= maxDelay)
         {
           // packet is considered lost, add it to the loss statistics
-          std::map<FlowId, FlowStats>::iterator
-            flow = m_flowStats.find (iter->first.first);
+          FlowStatsContainerI flow = m_flowStats.find (iter->first.first);
           NS_ASSERT (flow != m_flowStats.end ());
           flow->second.lostPackets++;
 
@@ -341,7 +340,8 @@
   m_flowProbes.push_back (probe);
 }
 
-std::vector< Ptr<FlowProbe> >
+
+const FlowMonitor::FlowProbeContainer&
 FlowMonitor::GetAllProbes () const
 {
   return m_flowProbes;
@@ -408,7 +408,7 @@
   indent += 2;
   INDENT (indent); os << "<FlowStats>\n";
   indent += 2;
-  for (std::map<FlowId, FlowStats>::const_iterator flowI = m_flowStats.begin ();
+  for (FlowStatsContainerCI flowI = m_flowStats.begin ();
        flowI != m_flowStats.end (); flowI++)
     {
 
diff -Naur ns-3.21/src/flow-monitor/model/flow-monitor.h ns-3.22/src/flow-monitor/model/flow-monitor.h
--- ns-3.21/src/flow-monitor/model/flow-monitor.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/flow-monitor/model/flow-monitor.h	2015-02-05 15:46:22.000000000 -0800
@@ -211,16 +211,30 @@
   void CheckForLostPackets (Time maxDelay);
 
   // --- methods to get the results ---
+
+  /// Container: FlowId, FlowStats
+  typedef std::map<FlowId, FlowStats> FlowStatsContainer;
+  /// Container Iterator: FlowId, FlowStats
+  typedef std::map<FlowId, FlowStats>::iterator FlowStatsContainerI;
+  /// Container Const Iterator: FlowId, FlowStats
+  typedef std::map<FlowId, FlowStats>::const_iterator FlowStatsContainerCI;
+  /// Container: FlowProbe
+  typedef std::vector< Ptr<FlowProbe> > FlowProbeContainer;
+  /// Container Iterator: FlowProbe
+  typedef std::vector< Ptr<FlowProbe> >::iterator FlowProbeContainerI;
+  /// Container Const Iterator: FlowProbe
+  typedef std::vector< Ptr<FlowProbe> >::const_iterator FlowProbeContainerCI;
+
   /// Retrieve all collected the flow statistics.  Note, if the
   /// FlowMonitor has not stopped monitoring yet, you should call
   /// CheckForLostPackets() to make sure all possibly lost packets are
   /// accounted for.
   /// \returns the flows statistics
-  std::map<FlowId, FlowStats> GetFlowStats () const;
+  const FlowStatsContainer& GetFlowStats () const;
 
   /// Get a list of all FlowProbe's associated with this FlowMonitor
   /// \returns a list of all the probes
-  std::vector< Ptr<FlowProbe> > GetAllProbes () const;
+  const FlowProbeContainer& GetAllProbes () const;
 
   /// Serializes the results to an std::ostream in XML format
   /// \param os the output stream
@@ -228,12 +242,14 @@
   /// \param enableHistograms if true, include also the histograms in the output
   /// \param enableProbes if true, include also the per-probe/flow pair statistics in the output
   void SerializeToXmlStream (std::ostream &os, int indent, bool enableHistograms, bool enableProbes);
+
   /// Same as SerializeToXmlStream, but returns the output as a std::string
   /// \param indent number of spaces to use as base indentation level
   /// \param enableHistograms if true, include also the histograms in the output
   /// \param enableProbes if true, include also the per-probe/flow pair statistics in the output
   /// \return the XML output as string
   std::string SerializeToXmlString (int indent, bool enableHistograms, bool enableProbes);
+
   /// Same as SerializeToXmlStream, but writes to a file instead
   /// \param fileName name or path of the output file that will be created
   /// \param enableHistograms if true, include also the histograms in the output
@@ -257,13 +273,13 @@
   };
 
   /// FlowId --> FlowStats
-  std::map<FlowId, FlowStats> m_flowStats;
+  FlowStatsContainer m_flowStats;
 
   /// (FlowId,PacketId) --> TrackedPacket
   typedef std::map< std::pair<FlowId, FlowPacketId>, TrackedPacket> TrackedPacketMap;
   TrackedPacketMap m_trackedPackets; //!< Tracked packets
   Time m_maxPerHopDelay; //!< Minimum per-hop delay
-  std::vector< Ptr<FlowProbe> > m_flowProbes; //!< all the FlowProbes
+  FlowProbeContainer m_flowProbes; //!< all the FlowProbes
 
   // note: this is needed only for serialization
   std::list<Ptr<FlowClassifier> > m_classifiers; //!< the FlowClassifiers
diff -Naur ns-3.21/src/flow-monitor/model/histogram.cc ns-3.22/src/flow-monitor/model/histogram.cc
--- ns-3.21/src/flow-monitor/model/histogram.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/flow-monitor/model/histogram.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,7 +31,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Histogram");
- 
+
 // uint32_t 
 // Histogram::GetSize () const
 // {
diff -Naur ns-3.21/src/flow-monitor/model/ipv4-flow-classifier.h ns-3.22/src/flow-monitor/model/ipv4-flow-classifier.h
--- ns-3.21/src/flow-monitor/model/ipv4-flow-classifier.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/flow-monitor/model/ipv4-flow-classifier.h	2015-02-05 15:46:22.000000000 -0800
@@ -75,6 +75,7 @@
 
   /// Map to Flows Identifiers to FlowIds
   std::map<FiveTuple, FlowId> m_flowMap;
+  /// Map to FlowIds to FlowPacketId
   std::map<FlowId, FlowPacketId> m_flowPktIdMap;
 
 };
diff -Naur ns-3.21/src/flow-monitor/model/ipv6-flow-classifier.h ns-3.22/src/flow-monitor/model/ipv6-flow-classifier.h
--- ns-3.21/src/flow-monitor/model/ipv6-flow-classifier.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/flow-monitor/model/ipv6-flow-classifier.h	2015-02-05 15:46:22.000000000 -0800
@@ -76,6 +76,7 @@
 
   /// Map to Flows Identifiers to FlowIds
   std::map<FiveTuple, FlowId> m_flowMap;
+  /// Map to FlowIds to FlowPacketId
   std::map<FlowId, FlowPacketId> m_flowPktIdMap;
 
 };
diff -Naur ns-3.21/src/flow-monitor/model/ipv6-flow-probe.cc ns-3.22/src/flow-monitor/model/ipv6-flow-probe.cc
--- ns-3.21/src/flow-monitor/model/ipv6-flow-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/flow-monitor/model/ipv6-flow-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,8 +31,7 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6FlowProbe")
-  ;
+NS_LOG_COMPONENT_DEFINE ("Ipv6FlowProbe");
 
 //////////////////////////////////////
 // Ipv6FlowProbeTag class implementation //
diff -Naur ns-3.21/src/internet/bindings/modulegen__gcc_ILP32.py ns-3.22/src/internet/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/internet/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -216,7 +216,7 @@
     module.add_class('RipNgRoutingTableEntry', parent=root_module['ns3::Ipv6RoutingTableEntry'])
     ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::Status_e [enumeration]
     module.add_enum('Status_e', ['RIPNG_VALID', 'RIPNG_INVALID'], outer_class=root_module['ns3::RipNgRoutingTableEntry'])
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory [class]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory [class]
     module.add_class('RttHistory')
     ## global-route-manager-impl.h (module 'internet'): ns3::SPFVertex [class]
     module.add_class('SPFVertex')
@@ -745,9 +745,15 @@
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >', u'ns3::RttHistory_t')
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >*', u'ns3::RttHistory_t*')
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >&', u'ns3::RttHistory_t&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) *', u'ns3::TcpStatesTracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) **', u'ns3::TcpStatesTracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) *&', u'ns3::TcpStatesTracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -2804,26 +2810,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv4RoutingTableEntry_methods(root_module, cls):
@@ -3238,11 +3264,6 @@
     cls.add_method('NewAddress', 
                    'ns3::Ipv6Address', 
                    [])
-    ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork(ns3::Ipv6Address network, ns3::Ipv6Prefix prefix) [member function]
-    cls.add_method('NewNetwork', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'prefix')], 
-                   deprecated=True)
     ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork() [member function]
     cls.add_method('NewNetwork', 
                    'void', 
@@ -3383,11 +3404,6 @@
     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')], 
-                   deprecated=True)
     return
 
 def register_Ns3Ipv6MulticastRoutingTableEntry_methods(root_module, cls):
@@ -3508,26 +3524,46 @@
                    'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv6-routing-helper.h (module 'internet'): void ns3::Ipv6RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv6-routing-helper.h (module 'internet'): void ns3::Ipv6RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv6-routing-helper.h (module 'internet'): void ns3::Ipv6RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv6-routing-helper.h (module 'internet'): void ns3::Ipv6RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6RoutingTableEntry_methods(root_module, cls):
@@ -3853,10 +3889,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -4269,10 +4305,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4477,17 +4513,17 @@
     return
 
 def register_Ns3RttHistory_methods(root_module, cls):
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::SequenceNumber32 s, uint32_t c, ns3::Time t) [constructor]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::SequenceNumber32 s, uint32_t c, ns3::Time t) [constructor]
     cls.add_constructor([param('ns3::SequenceNumber32', 's'), param('uint32_t', 'c'), param('ns3::Time', 't')])
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::RttHistory const & h) [copy constructor]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::RttHistory const & h) [copy constructor]
     cls.add_constructor([param('ns3::RttHistory const &', 'h')])
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::count [variable]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::retx [variable]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::retx [variable]
     cls.add_instance_attribute('retx', 'bool', is_const=False)
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::seq [variable]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::seq [variable]
     cls.add_instance_attribute('seq', 'ns3::SequenceNumber32', is_const=False)
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::time [variable]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::time [variable]
     cls.add_instance_attribute('time', 'ns3::Time', is_const=False)
     return
 
@@ -5101,7 +5137,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -5152,6 +5193,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -5228,6 +5274,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -5262,6 +5312,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -7912,23 +7964,13 @@
     cls.add_constructor([])
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator(ns3::RttEstimator const & r) [copy constructor]
     cls.add_constructor([param('ns3::RttEstimator const &', 'r')])
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::ClearSent() [member function]
-    cls.add_method('ClearSent', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
     ## rtt-estimator.h (module 'internet'): ns3::Ptr<ns3::RttEstimator> ns3::RttEstimator::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::RttEstimator >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::EstimateRttFromSeq(ns3::SequenceNumber32 ackSeq) [member function]
-    cls.add_method('EstimateRttFromSeq', 
-                   'ns3::Time', 
-                   [param('ns3::SequenceNumber32', 'ackSeq')], 
-                   is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::GetCurrentEstimate() const [member function]
-    cls.add_method('GetCurrentEstimate', 
+    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::GetEstimate() const [member function]
+    cls.add_method('GetEstimate', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
@@ -7937,9 +7979,9 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::GetMinRto() const [member function]
-    cls.add_method('GetMinRto', 
-                   'ns3::Time', 
+    ## rtt-estimator.h (module 'internet'): uint32_t ns3::RttEstimator::GetNSamples() const [member function]
+    cls.add_method('GetNSamples', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
     ## rtt-estimator.h (module 'internet'): static ns3::TypeId ns3::RttEstimator::GetTypeId() [member function]
@@ -7947,11 +7989,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::IncreaseMultiplier() [member function]
-    cls.add_method('IncreaseMultiplier', 
-                   'void', 
+    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::GetVariation() const [member function]
+    cls.add_method('GetVariation', 
+                   'ns3::Time', 
                    [], 
-                   is_virtual=True)
+                   is_const=True)
     ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::Measurement(ns3::Time t) [member function]
     cls.add_method('Measurement', 
                    'void', 
@@ -7962,29 +8004,6 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::ResetMultiplier() [member function]
-    cls.add_method('ResetMultiplier', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::RetransmitTimeout() [member function]
-    cls.add_method('RetransmitTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::SentSeq(ns3::SequenceNumber32 seq, uint32_t size) [member function]
-    cls.add_method('SentSeq', 
-                   'void', 
-                   [param('ns3::SequenceNumber32', 'seq'), param('uint32_t', 'size')], 
-                   is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::SetCurrentEstimate(ns3::Time estimate) [member function]
-    cls.add_method('SetCurrentEstimate', 
-                   'void', 
-                   [param('ns3::Time', 'estimate')])
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::SetMinRto(ns3::Time minRto) [member function]
-    cls.add_method('SetMinRto', 
-                   'void', 
-                   [param('ns3::Time', 'minRto')])
     return
 
 def register_Ns3RttMeanDeviation_methods(root_module, cls):
@@ -7997,10 +8016,6 @@
                    'ns3::Ptr< ns3::RttEstimator >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttMeanDeviation::Gain(double g) [member function]
-    cls.add_method('Gain', 
-                   'void', 
-                   [param('double', 'g')])
     ## rtt-estimator.h (module 'internet'): ns3::TypeId ns3::RttMeanDeviation::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -8021,11 +8036,6 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttMeanDeviation::RetransmitTimeout() [member function]
-    cls.add_method('RetransmitTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_virtual=True)
     return
 
 def register_Ns3SequentialRandomVariable_methods(root_module, cls):
@@ -9337,11 +9347,21 @@
                    'int', 
                    [param('ns3::Address const &', 'address')], 
                    is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetClockGranularity() const [member function]
+    cls.add_method('GetClockGranularity', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Socket::SocketErrno ns3::TcpSocketBase::GetErrno() const [member function]
     cls.add_method('GetErrno', 
                    'ns3::Socket::SocketErrno', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetMinRto() const [member function]
+    cls.add_method('GetMinRto', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::Node> ns3::TcpSocketBase::GetNode() const [member function]
     cls.add_method('GetNode', 
                    'ns3::Ptr< ns3::Node >', 
@@ -9352,6 +9372,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::TcpRxBuffer> ns3::TcpSocketBase::GetRxBuffer() const [member function]
+    cls.add_method('GetRxBuffer', 
+                   'ns3::Ptr< ns3::TcpRxBuffer >', 
+                   [], 
+                   is_const=True)
     ## tcp-socket-base.h (module 'internet'): int ns3::TcpSocketBase::GetSockName(ns3::Address & address) const [member function]
     cls.add_method('GetSockName', 
                    'int', 
@@ -9367,6 +9392,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::TcpTxBuffer> ns3::TcpSocketBase::GetTxBuffer() const [member function]
+    cls.add_method('GetTxBuffer', 
+                   'ns3::Ptr< ns3::TcpTxBuffer >', 
+                   [], 
+                   is_const=True)
     ## tcp-socket-base.h (module 'internet'): static ns3::TypeId ns3::TcpSocketBase::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -9397,6 +9427,14 @@
                    'int', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags'), param('ns3::Address const &', 'toAddress')], 
                    is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetClockGranularity(ns3::Time clockGranularity) [member function]
+    cls.add_method('SetClockGranularity', 
+                   'void', 
+                   [param('ns3::Time', 'clockGranularity')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetMinRto(ns3::Time minRto) [member function]
+    cls.add_method('SetMinRto', 
+                   'void', 
+                   [param('ns3::Time', 'minRto')])
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetNode(ns3::Ptr<ns3::Node> node) [member function]
     cls.add_method('SetNode', 
                    'void', 
@@ -10761,6 +10799,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintArpCache', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -11436,14 +11478,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -11481,8 +11523,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -11503,10 +11545,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -12490,11 +12532,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -13640,6 +13677,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NdiscCache> ns3::Ipv6Interface::GetNdiscCache() const [member function]
+    cls.add_method('GetNdiscCache', 
+                   'ns3::Ptr< ns3::NdiscCache >', 
+                   [], 
+                   is_const=True)
     ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
     cls.add_method('GetReachableTime', 
                    'uint16_t', 
@@ -13994,11 +14036,6 @@
                    'ns3::Ipv6Address', 
                    [], 
                    is_const=True)
-    ## ipv6-route.h (module 'internet'): uint32_t ns3::Ipv6MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv6-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv6MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -14483,6 +14520,10 @@
     cls.add_method('Lookup', 
                    'ns3::NdiscCache::Entry *', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::PrintNdiscCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNdiscCache', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Remove(ns3::NdiscCache::Entry * entry) [member function]
     cls.add_method('Remove', 
                    'void', 
@@ -15129,11 +15170,6 @@
                    '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', 
@@ -15204,6 +15240,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/internet/bindings/modulegen__gcc_LP64.py ns-3.22/src/internet/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/internet/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -216,7 +216,7 @@
     module.add_class('RipNgRoutingTableEntry', parent=root_module['ns3::Ipv6RoutingTableEntry'])
     ## ripng.h (module 'internet'): ns3::RipNgRoutingTableEntry::Status_e [enumeration]
     module.add_enum('Status_e', ['RIPNG_VALID', 'RIPNG_INVALID'], outer_class=root_module['ns3::RipNgRoutingTableEntry'])
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory [class]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory [class]
     module.add_class('RttHistory')
     ## global-route-manager-impl.h (module 'internet'): ns3::SPFVertex [class]
     module.add_class('SPFVertex')
@@ -745,9 +745,15 @@
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >', u'ns3::RttHistory_t')
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >*', u'ns3::RttHistory_t*')
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >&', u'ns3::RttHistory_t&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) *', u'ns3::TcpStatesTracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) **', u'ns3::TcpStatesTracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) *&', u'ns3::TcpStatesTracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -2804,26 +2810,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv4RoutingTableEntry_methods(root_module, cls):
@@ -3238,11 +3264,6 @@
     cls.add_method('NewAddress', 
                    'ns3::Ipv6Address', 
                    [])
-    ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork(ns3::Ipv6Address network, ns3::Ipv6Prefix prefix) [member function]
-    cls.add_method('NewNetwork', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'prefix')], 
-                   deprecated=True)
     ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork() [member function]
     cls.add_method('NewNetwork', 
                    'void', 
@@ -3383,11 +3404,6 @@
     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')], 
-                   deprecated=True)
     return
 
 def register_Ns3Ipv6MulticastRoutingTableEntry_methods(root_module, cls):
@@ -3508,26 +3524,46 @@
                    'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv6-routing-helper.h (module 'internet'): void ns3::Ipv6RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv6-routing-helper.h (module 'internet'): void ns3::Ipv6RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv6-routing-helper.h (module 'internet'): void ns3::Ipv6RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv6-routing-helper.h (module 'internet'): void ns3::Ipv6RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv6-routing-helper.h (module 'internet'): static void ns3::Ipv6RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6RoutingTableEntry_methods(root_module, cls):
@@ -3853,10 +3889,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -4269,10 +4305,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4477,17 +4513,17 @@
     return
 
 def register_Ns3RttHistory_methods(root_module, cls):
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::SequenceNumber32 s, uint32_t c, ns3::Time t) [constructor]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::SequenceNumber32 s, uint32_t c, ns3::Time t) [constructor]
     cls.add_constructor([param('ns3::SequenceNumber32', 's'), param('uint32_t', 'c'), param('ns3::Time', 't')])
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::RttHistory const & h) [copy constructor]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::RttHistory(ns3::RttHistory const & h) [copy constructor]
     cls.add_constructor([param('ns3::RttHistory const &', 'h')])
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::count [variable]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::retx [variable]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::retx [variable]
     cls.add_instance_attribute('retx', 'bool', is_const=False)
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::seq [variable]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::seq [variable]
     cls.add_instance_attribute('seq', 'ns3::SequenceNumber32', is_const=False)
-    ## rtt-estimator.h (module 'internet'): ns3::RttHistory::time [variable]
+    ## tcp-socket-base.h (module 'internet'): ns3::RttHistory::time [variable]
     cls.add_instance_attribute('time', 'ns3::Time', is_const=False)
     return
 
@@ -5101,7 +5137,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -5152,6 +5193,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -5228,6 +5274,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -5262,6 +5312,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -7912,23 +7964,13 @@
     cls.add_constructor([])
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator(ns3::RttEstimator const & r) [copy constructor]
     cls.add_constructor([param('ns3::RttEstimator const &', 'r')])
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::ClearSent() [member function]
-    cls.add_method('ClearSent', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
     ## rtt-estimator.h (module 'internet'): ns3::Ptr<ns3::RttEstimator> ns3::RttEstimator::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::RttEstimator >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::EstimateRttFromSeq(ns3::SequenceNumber32 ackSeq) [member function]
-    cls.add_method('EstimateRttFromSeq', 
-                   'ns3::Time', 
-                   [param('ns3::SequenceNumber32', 'ackSeq')], 
-                   is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::GetCurrentEstimate() const [member function]
-    cls.add_method('GetCurrentEstimate', 
+    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::GetEstimate() const [member function]
+    cls.add_method('GetEstimate', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
@@ -7937,9 +7979,9 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::GetMinRto() const [member function]
-    cls.add_method('GetMinRto', 
-                   'ns3::Time', 
+    ## rtt-estimator.h (module 'internet'): uint32_t ns3::RttEstimator::GetNSamples() const [member function]
+    cls.add_method('GetNSamples', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
     ## rtt-estimator.h (module 'internet'): static ns3::TypeId ns3::RttEstimator::GetTypeId() [member function]
@@ -7947,11 +7989,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::IncreaseMultiplier() [member function]
-    cls.add_method('IncreaseMultiplier', 
-                   'void', 
+    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::GetVariation() const [member function]
+    cls.add_method('GetVariation', 
+                   'ns3::Time', 
                    [], 
-                   is_virtual=True)
+                   is_const=True)
     ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::Measurement(ns3::Time t) [member function]
     cls.add_method('Measurement', 
                    'void', 
@@ -7962,29 +8004,6 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::ResetMultiplier() [member function]
-    cls.add_method('ResetMultiplier', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttEstimator::RetransmitTimeout() [member function]
-    cls.add_method('RetransmitTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::SentSeq(ns3::SequenceNumber32 seq, uint32_t size) [member function]
-    cls.add_method('SentSeq', 
-                   'void', 
-                   [param('ns3::SequenceNumber32', 'seq'), param('uint32_t', 'size')], 
-                   is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::SetCurrentEstimate(ns3::Time estimate) [member function]
-    cls.add_method('SetCurrentEstimate', 
-                   'void', 
-                   [param('ns3::Time', 'estimate')])
-    ## rtt-estimator.h (module 'internet'): void ns3::RttEstimator::SetMinRto(ns3::Time minRto) [member function]
-    cls.add_method('SetMinRto', 
-                   'void', 
-                   [param('ns3::Time', 'minRto')])
     return
 
 def register_Ns3RttMeanDeviation_methods(root_module, cls):
@@ -7997,10 +8016,6 @@
                    'ns3::Ptr< ns3::RttEstimator >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): void ns3::RttMeanDeviation::Gain(double g) [member function]
-    cls.add_method('Gain', 
-                   'void', 
-                   [param('double', 'g')])
     ## rtt-estimator.h (module 'internet'): ns3::TypeId ns3::RttMeanDeviation::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -8021,11 +8036,6 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## rtt-estimator.h (module 'internet'): ns3::Time ns3::RttMeanDeviation::RetransmitTimeout() [member function]
-    cls.add_method('RetransmitTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_virtual=True)
     return
 
 def register_Ns3SequentialRandomVariable_methods(root_module, cls):
@@ -9337,11 +9347,21 @@
                    'int', 
                    [param('ns3::Address const &', 'address')], 
                    is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetClockGranularity() const [member function]
+    cls.add_method('GetClockGranularity', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Socket::SocketErrno ns3::TcpSocketBase::GetErrno() const [member function]
     cls.add_method('GetErrno', 
                    'ns3::Socket::SocketErrno', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetMinRto() const [member function]
+    cls.add_method('GetMinRto', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::Node> ns3::TcpSocketBase::GetNode() const [member function]
     cls.add_method('GetNode', 
                    'ns3::Ptr< ns3::Node >', 
@@ -9352,6 +9372,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::TcpRxBuffer> ns3::TcpSocketBase::GetRxBuffer() const [member function]
+    cls.add_method('GetRxBuffer', 
+                   'ns3::Ptr< ns3::TcpRxBuffer >', 
+                   [], 
+                   is_const=True)
     ## tcp-socket-base.h (module 'internet'): int ns3::TcpSocketBase::GetSockName(ns3::Address & address) const [member function]
     cls.add_method('GetSockName', 
                    'int', 
@@ -9367,6 +9392,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::Ptr<ns3::TcpTxBuffer> ns3::TcpSocketBase::GetTxBuffer() const [member function]
+    cls.add_method('GetTxBuffer', 
+                   'ns3::Ptr< ns3::TcpTxBuffer >', 
+                   [], 
+                   is_const=True)
     ## tcp-socket-base.h (module 'internet'): static ns3::TypeId ns3::TcpSocketBase::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -9397,6 +9427,14 @@
                    'int', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags'), param('ns3::Address const &', 'toAddress')], 
                    is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetClockGranularity(ns3::Time clockGranularity) [member function]
+    cls.add_method('SetClockGranularity', 
+                   'void', 
+                   [param('ns3::Time', 'clockGranularity')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetMinRto(ns3::Time minRto) [member function]
+    cls.add_method('SetMinRto', 
+                   'void', 
+                   [param('ns3::Time', 'minRto')])
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetNode(ns3::Ptr<ns3::Node> node) [member function]
     cls.add_method('SetNode', 
                    'void', 
@@ -10761,6 +10799,10 @@
     cls.add_method('Lookup', 
                    'ns3::ArpCache::Entry *', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::PrintArpCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintArpCache', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -11436,14 +11478,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -11481,8 +11523,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -11503,10 +11545,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -12490,11 +12532,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -13640,6 +13677,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## ipv6-interface.h (module 'internet'): ns3::Ptr<ns3::NdiscCache> ns3::Ipv6Interface::GetNdiscCache() const [member function]
+    cls.add_method('GetNdiscCache', 
+                   'ns3::Ptr< ns3::NdiscCache >', 
+                   [], 
+                   is_const=True)
     ## ipv6-interface.h (module 'internet'): uint16_t ns3::Ipv6Interface::GetReachableTime() const [member function]
     cls.add_method('GetReachableTime', 
                    'uint16_t', 
@@ -13994,11 +14036,6 @@
                    'ns3::Ipv6Address', 
                    [], 
                    is_const=True)
-    ## ipv6-route.h (module 'internet'): uint32_t ns3::Ipv6MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv6-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv6MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -14483,6 +14520,10 @@
     cls.add_method('Lookup', 
                    'ns3::NdiscCache::Entry *', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::PrintNdiscCache(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNdiscCache', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Remove(ns3::NdiscCache::Entry * entry) [member function]
     cls.add_method('Remove', 
                    'void', 
@@ -15129,11 +15170,6 @@
                    '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', 
@@ -15204,6 +15240,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/internet/helper/internet-stack-helper.cc ns-3.22/src/internet/helper/internet-stack-helper.cc
--- ns-3.21/src/internet/helper/internet-stack-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/internet-stack-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -179,10 +179,10 @@
 #include <limits>
 #include <map>
 
-NS_LOG_COMPONENT_DEFINE ("InternetStackHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("InternetStackHelper");
+
 //
 // Historically, the only context written to ascii traces was the protocol.
 // Traces from the protocols include the interface, though.  It is not 
diff -Naur ns-3.21/src/internet/helper/internet-stack-helper.h ns-3.22/src/internet/helper/internet-stack-helper.h
--- ns-3.21/src/internet/helper/internet-stack-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/internet-stack-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -214,7 +214,6 @@
 private:
   /**
    * @brief Enable pcap output the indicated Ipv4 and interface pair.
-   * @internal
    *
    * @param prefix Filename prefix to use for pcap files.
    * @param ipv4 Ptr to the Ipv4 interface on which you want to enable tracing.
@@ -228,7 +227,6 @@
 
   /**
    * @brief Enable ascii trace output on the indicated Ipv4 and interface pair.
-   * @internal
    *
    * @param stream An OutputStreamWrapper representing an existing file to use
    *               when writing trace data.
@@ -245,7 +243,6 @@
 
   /**
    * @brief Enable pcap output the indicated Ipv6 and interface pair.
-   * @internal
    *
    * @param prefix Filename prefix to use for pcap files.
    * @param ipv6 Ptr to the Ipv6 interface on which you want to enable tracing.
@@ -259,7 +256,6 @@
 
   /**
    * @brief Enable ascii trace output on the indicated Ipv6 and interface pair.
-   * @internal
    *
    * @param stream An OutputStreamWrapper representing an existing file to use
    *               when writing trace data.
@@ -280,40 +276,30 @@
   void Initialize (void);
 
   /**
-   * \internal
    * \brief TCP objects factory
    */
   ObjectFactory m_tcpFactory;
 
   /**
-   * \internal
    * \brief IPv4 routing helper.
    */
   const Ipv4RoutingHelper *m_routing;
 
   /**
-   * \internal
    * \brief IPv6 routing helper.
    */
   const Ipv6RoutingHelper *m_routingv6;
 
   /**
-   * \internal
-   *
    * \brief create an object from its TypeId and aggregates it to the node
    * \param node the node
    * \param typeId the object TypeId
    */
   static void CreateAndAggregateObjectFromTypeId (Ptr<Node> node, const std::string typeId);
 
-  /**
-   * \internal
-   */
   static void Cleanup (void);
 
   /**
-   * \internal
-   *
    * \brief checks if there is an hook to a Pcap wrapper
    * \param ipv4 pointer to the IPv4 object
    * \returns true if a hook is found
@@ -321,8 +307,6 @@
   bool PcapHooked (Ptr<Ipv4> ipv4);
 
   /**
-   * \internal
-   *
    * \brief checks if there is an hook to an ascii output stream
    * \param ipv4 pointer to the IPv4 object
    * \returns true if a hook is found
@@ -330,8 +314,6 @@
   bool AsciiHooked (Ptr<Ipv4> ipv4);
 
   /**
-   * \internal
-   *
    * \brief checks if there is an hook to a Pcap wrapper
    * \param ipv6 pointer to the IPv6 object
    * \returns true if a hook is found
@@ -339,8 +321,6 @@
   bool PcapHooked (Ptr<Ipv6> ipv6);
 
   /**
-   * \internal
-   *
    * \brief checks if there is an hook to an ascii output stream
    * \param ipv6 pointer to the IPv6 object
    * \returns true if a hook is found
@@ -348,29 +328,21 @@
   bool AsciiHooked (Ptr<Ipv6> ipv6);
 
   /**
-   * \internal
-   *
    * \brief IPv4 install state (enabled/disabled) ?
    */
   bool m_ipv4Enabled;
 
   /**
-   * \internal
-   *
    * \brief IPv6 install state (enabled/disabled) ?
    */
   bool m_ipv6Enabled;
 
   /**
-   * \internal
-   *
    * \brief IPv4 ARP Jitter state (enabled/disabled) ?
    */
   bool m_ipv4ArpJitterEnabled;
 
   /**
-   * \internal
-   *
    * \brief IPv6 IPv6 NS and RS Jitter state (enabled/disabled) ?
    */
   bool m_ipv6NsRsJitterEnabled;
diff -Naur ns-3.21/src/internet/helper/internet-trace-helper.cc ns-3.22/src/internet/helper/internet-trace-helper.cc
--- ns-3.21/src/internet/helper/internet-trace-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/internet-trace-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 
 #include "internet-trace-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("InternetTraceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("InternetTraceHelper");
+
 void 
 PcapHelperForIpv4::EnablePcapIpv4 (std::string prefix, Ptr<Ipv4> ipv4, uint32_t interface, bool explicitFilename)
 {
diff -Naur ns-3.21/src/internet/helper/internet-trace-helper.h ns-3.22/src/internet/helper/internet-trace-helper.h
--- ns-3.21/src/internet/helper/internet-trace-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/internet-trace-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -47,7 +47,6 @@
 
   /**
    * @brief Enable pcap output the indicated Ipv4 and interface pair.
-   * @internal
    *
    * @param prefix Filename prefix to use for pcap files.
    * @param ipv4 Ptr<Ipv4> on which you want to enable tracing.
@@ -139,7 +138,6 @@
 
   /**
    * @brief Enable ascii trace output on the indicated Ipv4 and interface pair.
-   * @internal
    *
    * The implementation is expected to use a provided Ptr<OutputStreamWrapper>
    * if it is non-null.  If the OutputStreamWrapper is null, the implementation
@@ -299,8 +297,6 @@
 
 private:
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv4 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv4 aggregated to a node, the node-id unambiguously
@@ -322,8 +318,6 @@
                             bool explicitFilename);
 
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv4 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv4 aggregated to a node, the node-id unambiguously
@@ -337,8 +331,6 @@
   void EnableAsciiIpv4Impl (Ptr<OutputStreamWrapper> stream, std::string prefix, NodeContainer n);
 
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv4 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv4 aggregated to a node, the node-id unambiguously
@@ -352,8 +344,6 @@
   void EnableAsciiIpv4Impl (Ptr<OutputStreamWrapper> stream, std::string prefix, Ipv4InterfaceContainer c);
 
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv4 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv4 aggregated to a node, the node-id unambiguously
@@ -374,8 +364,6 @@
                             bool explicitFilename);
 
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv4 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv4 aggregated to a node, the node-id unambiguously
@@ -415,7 +403,6 @@
 
   /**
    * @brief Enable pcap output the indicated Ipv6 and interface pair.
-   * @internal
    *
    * @param prefix Filename prefix to use for pcap files.
    * @param ipv6 Ptr<Ipv6> on which you want to enable tracing.
@@ -506,7 +493,6 @@
 
   /**
    * @brief Enable ascii trace output on the indicated Ipv6 and interface pair.
-   * @internal
    *
    * The implementation is expected to use a provided Ptr<OutputStreamWrapper>
    * if it is non-null.  If the OutputStreamWrapper is null, the implementation
@@ -665,8 +651,6 @@
 
 private:
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv6 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv6 aggregated to a node, the node-id unambiguously
@@ -688,8 +672,6 @@
                             bool explicitFilename);
 
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv6 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv6 aggregated to a node, the node-id unambiguously
@@ -703,8 +685,6 @@
   void EnableAsciiIpv6Impl (Ptr<OutputStreamWrapper> stream, std::string prefix, NodeContainer n);
 
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv6 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv6 aggregated to a node, the node-id unambiguously
@@ -718,8 +698,6 @@
   void EnableAsciiIpv6Impl (Ptr<OutputStreamWrapper> stream, std::string prefix, Ipv6InterfaceContainer c);
 
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv6 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv6 aggregated to a node, the node-id unambiguously
@@ -740,8 +718,6 @@
                             bool explicitFilename);
 
   /**
-   * @internal
-   *
    * @brief Enable ascii trace output on the Ipv6 and interface pair specified by a
    * global node-id (of a previously created node) and interface.  Since there
    * can be only one Ipv6 aggregated to a node, the node-id unambiguously
diff -Naur ns-3.21/src/internet/helper/ipv4-address-helper.cc ns-3.22/src/internet/helper/ipv4-address-helper.cc
--- ns-3.21/src/internet/helper/ipv4-address-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-address-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/simulator.h"
 #include "ipv4-address-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4AddressHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4AddressHelper");
+
 Ipv4AddressHelper::Ipv4AddressHelper () 
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.21/src/internet/helper/ipv4-address-helper.h ns-3.22/src/internet/helper/ipv4-address-helper.h
--- ns-3.21/src/internet/helper/ipv4-address-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-address-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -172,7 +172,7 @@
  * @param c The NetDeviceContainer holding the collection of net devices we
  * are asked to assign Ipv4 addresses to.
  *
- * @returns Nothing
+ * @returns A container holding the added NetDevices
  * @see SetBase
  * @see NewNetwork
  */
@@ -180,7 +180,6 @@
 
 private:
   /**
-   * @internal
    * \brief Returns the number of address bits (hostpart) for a given netmask
    * \param maskbits the netmask
    * \returns the number of bits in the hostpart
diff -Naur ns-3.21/src/internet/helper/ipv4-global-routing-helper.cc ns-3.22/src/internet/helper/ipv4-global-routing-helper.cc
--- ns-3.21/src/internet/helper/ipv4-global-routing-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-global-routing-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/ipv4-list-routing.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("GlobalRoutingHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("GlobalRoutingHelper");
+
 Ipv4GlobalRoutingHelper::Ipv4GlobalRoutingHelper ()
 {
 }
diff -Naur ns-3.21/src/internet/helper/ipv4-global-routing-helper.h ns-3.22/src/internet/helper/ipv4-global-routing-helper.h
--- ns-3.21/src/internet/helper/ipv4-global-routing-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-global-routing-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -44,7 +44,6 @@
   Ipv4GlobalRoutingHelper (const Ipv4GlobalRoutingHelper &);
 
   /**
-   * \internal
    * \returns pointer to clone of this Ipv4GlobalRoutingHelper
    *
    * This method is mainly for internal use by the other helpers;
@@ -85,7 +84,6 @@
   static void RecomputeRoutingTables (void);
 private:
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    * \return
diff -Naur ns-3.21/src/internet/helper/ipv4-interface-container.h ns-3.22/src/internet/helper/ipv4-interface-container.h
--- ns-3.21/src/internet/helper/ipv4-interface-container.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-interface-container.h	2015-02-05 15:46:22.000000000 -0800
@@ -180,13 +180,11 @@
 
 private:
   /**
-   * \internal
    * \brief Container for pairs of Ipv4 smart pointer / Interface Index.
    */
   typedef std::vector<std::pair<Ptr<Ipv4>,uint32_t> > InterfaceVector;
 
   /**
-   * \internal
    * \brief List of IPv4 stack and interfaces index.
    */
   InterfaceVector m_interfaces;
diff -Naur ns-3.21/src/internet/helper/ipv4-list-routing-helper.h ns-3.22/src/internet/helper/ipv4-list-routing-helper.h
--- ns-3.21/src/internet/helper/ipv4-list-routing-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-list-routing-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -42,7 +42,6 @@
   Ipv4ListRoutingHelper ();
 
   /*
-   * \internal
    * Destroy an Ipv4ListRoutingHelper.
    */
   virtual ~Ipv4ListRoutingHelper ();
@@ -54,7 +53,6 @@
   Ipv4ListRoutingHelper (const Ipv4ListRoutingHelper &);
 
   /**
-   * \internal
    * \returns pointer to clone of this Ipv4ListRoutingHelper 
    * 
    * This method is mainly for internal use by the other helpers;
@@ -82,7 +80,6 @@
   virtual Ptr<Ipv4RoutingProtocol> Create (Ptr<Node> node) const;
 private:
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    * \return
@@ -90,7 +87,6 @@
   Ipv4ListRoutingHelper &operator = (const Ipv4ListRoutingHelper &);
 
   /**
-   * \internal
    * \brief Container for pairs of Ipv4RoutingHelper pointer / priority.
    */
   std::list<std::pair<const Ipv4RoutingHelper *,int16_t> > m_list;
diff -Naur ns-3.21/src/internet/helper/ipv4-routing-helper.cc ns-3.22/src/internet/helper/ipv4-routing-helper.cc
--- ns-3.21/src/internet/helper/ipv4-routing-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-routing-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,6 +23,10 @@
 #include "ns3/simulator.h"
 #include "ns3/ipv4-routing-protocol.h"
 #include "ns3/ipv4-list-routing.h"
+#include "ns3/ipv4-l3-protocol.h"
+#include "ns3/ipv4-interface.h"
+#include "ns3/arp-cache.h"
+#include "ns3/names.h"
 #include "ipv4-routing-helper.h"
 
 namespace ns3 {
@@ -32,39 +36,39 @@
 }
 
 void
-Ipv4RoutingHelper::PrintRoutingTableAllAt (Time printTime, Ptr<OutputStreamWrapper> stream) const
+Ipv4RoutingHelper::PrintRoutingTableAllAt (Time printTime, Ptr<OutputStreamWrapper> stream)
 {
   for (uint32_t i = 0; i < NodeList::GetNNodes (); i++)
     {
       Ptr<Node> node = NodeList::GetNode (i);
-      Simulator::Schedule (printTime, &Ipv4RoutingHelper::Print, this, node, stream);
+      Simulator::Schedule (printTime, &Ipv4RoutingHelper::Print, node, stream);
     }
 }
 
 void
-Ipv4RoutingHelper::PrintRoutingTableAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream) const
+Ipv4RoutingHelper::PrintRoutingTableAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream)
 {
   for (uint32_t i = 0; i < NodeList::GetNNodes (); i++)
     {
       Ptr<Node> node = NodeList::GetNode (i);
-      Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintEvery, this, printInterval, node, stream);
+      Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintEvery, printInterval, node, stream);
     }
 }
 
 void
-Ipv4RoutingHelper::PrintRoutingTableAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const
+Ipv4RoutingHelper::PrintRoutingTableAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
 {
-  Simulator::Schedule (printTime, &Ipv4RoutingHelper::Print, this, node, stream);
+  Simulator::Schedule (printTime, &Ipv4RoutingHelper::Print, node, stream);
 }
 
 void
-Ipv4RoutingHelper::PrintRoutingTableEvery (Time printInterval,Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const
+Ipv4RoutingHelper::PrintRoutingTableEvery (Time printInterval,Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
 {
-  Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintEvery, this, printInterval, node, stream);
+  Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintEvery, printInterval, node, stream);
 }
 
 void
-Ipv4RoutingHelper::Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const
+Ipv4RoutingHelper::Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
 {
   Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
   Ptr<Ipv4RoutingProtocol> rp = ipv4->GetRoutingProtocol ();
@@ -73,13 +77,102 @@
 }
 
 void
-Ipv4RoutingHelper::PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const
+Ipv4RoutingHelper::PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
 {
   Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
   Ptr<Ipv4RoutingProtocol> rp = ipv4->GetRoutingProtocol ();
   NS_ASSERT (rp);
   rp->PrintRoutingTable (stream);
-  Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintEvery, this, printInterval, node, stream);
+  Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintEvery, printInterval, node, stream);
+}
+
+void
+Ipv4RoutingHelper::PrintNeighborCacheAllAt (Time printTime, Ptr<OutputStreamWrapper> stream)
+{
+  for (uint32_t i = 0; i < NodeList::GetNNodes (); i++)
+    {
+      Ptr<Node> node = NodeList::GetNode (i);
+      Simulator::Schedule (printTime, &Ipv4RoutingHelper::PrintArpCache, node, stream);
+    }
+}
+
+void
+Ipv4RoutingHelper::PrintNeighborCacheAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream)
+{
+  for (uint32_t i = 0; i < NodeList::GetNNodes (); i++)
+    {
+      Ptr<Node> node = NodeList::GetNode (i);
+      Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintArpCacheEvery, printInterval, node, stream);
+    }
+}
+
+void
+Ipv4RoutingHelper::PrintNeighborCacheAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
+{
+  Simulator::Schedule (printTime, &Ipv4RoutingHelper::PrintArpCache, node, stream);
+}
+
+void
+Ipv4RoutingHelper::PrintNeighborCacheEvery (Time printInterval,Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
+{
+  Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintArpCacheEvery, printInterval, node, stream);
+}
+
+void
+Ipv4RoutingHelper::PrintArpCache (Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
+{
+  std::ostream* os = stream->GetStream ();
+
+  *os << "ARP Cache of node ";
+  std::string found = Names::FindName (node);
+  if (Names::FindName (node) != "")
+    {
+      *os << found;
+    }
+  else
+    {
+      *os << static_cast<int> (node->GetId ());
+    }
+  *os << " at time " << Simulator::Now ().GetSeconds () << "\n";
+
+  Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> ();
+  for (uint32_t i=0; i<ipv4->GetNInterfaces(); i++)
+    {
+      Ptr<ArpCache> arpCache = ipv4->GetInterface (i)->GetArpCache ();
+      if (arpCache)
+        {
+          arpCache->PrintArpCache (stream);
+        }
+    }
+}
+
+void
+Ipv4RoutingHelper::PrintArpCacheEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
+{
+  std::ostream* os = stream->GetStream ();
+
+  *os << "ARP Cache of node ";
+  std::string found = Names::FindName (node);
+  if (Names::FindName (node) != "")
+    {
+      *os << found;
+    }
+  else
+    {
+      *os << static_cast<int> (node->GetId ());
+    }
+  *os << " at time " << Simulator::Now ().GetSeconds () << "\n";
+
+  Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> ();
+  for (uint32_t i=0; i<ipv4->GetNInterfaces(); i++)
+    {
+      Ptr<ArpCache> arpCache = ipv4->GetInterface (i)->GetArpCache ();
+      if (arpCache)
+        {
+          arpCache->PrintArpCache (stream);
+        }
+    }
+  Simulator::Schedule (printInterval, &Ipv4RoutingHelper::PrintArpCacheEvery, printInterval, node, stream);
 }
 
 } // namespace ns3
diff -Naur ns-3.21/src/internet/helper/ipv4-routing-helper.h ns-3.22/src/internet/helper/ipv4-routing-helper.h
--- ns-3.21/src/internet/helper/ipv4-routing-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-routing-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -72,7 +72,7 @@
    * Ipv4RoutingProtocol stored in the Ipv4 object, for all nodes at the
    * specified time; the output format is routing protocol-specific.
    */
-  void PrintRoutingTableAllAt (Time printTime, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintRoutingTableAllAt (Time printTime, Ptr<OutputStreamWrapper> stream);
 
   /**
    * \brief prints the routing tables of all nodes at regular intervals specified by user.
@@ -83,7 +83,7 @@
    * Ipv4RoutingProtocol stored in the Ipv4 object, for all nodes at the
    * specified time interval; the output format is routing protocol-specific.
    */
-  void PrintRoutingTableAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintRoutingTableAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream);
 
   /**
    * \brief prints the routing tables of a node at a particular time.
@@ -95,7 +95,7 @@
    * Ipv4RoutingProtocol stored in the Ipv4 object, for the selected node 
    * at the specified time; the output format is routing protocol-specific.
    */
-  void PrintRoutingTableAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintRoutingTableAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
 
   /**
    * \brief prints the routing tables of a node at regular intervals specified by user.
@@ -107,7 +107,69 @@
    * Ipv4RoutingProtocol stored in the Ipv4 object, for the selected node 
    * at the specified interval; the output format is routing protocol-specific.
    */
-  void PrintRoutingTableEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintRoutingTableEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of all nodes at a particular time.
+   * \param printTime the time at which the neighbor cache is supposed to be printed.
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintArpCache() method of the
+   * ArpCache associated with each Ipv4Interface stored in the Ipv4 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     10.1.1.2 dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNeighborCacheAllAt (Time printTime, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of all nodes at regular intervals specified by user.
+   * \param printInterval the time interval for which the neighbor cache is supposed to be printed.
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintArpCache() method of the
+   * ArpCache associated with each Ipv4Interface stored in the Ipv4 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     10.1.1.2 dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNeighborCacheAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of a node at a particular time.
+   * \param printTime the time at which the neighbor cache is supposed to be printed.
+   * \param node The node ptr for which we need the neighbor cache to be printed
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintArpCache() method of the
+   * ArpCache associated with each Ipv4Interface stored in the Ipv4 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     10.1.1.2 dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNeighborCacheAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of a node at regular intervals specified by user.
+   * \param printInterval the time interval for which the neighbor cache is supposed to be printed.
+   * \param node The node ptr for which we need the neighbor cache to be printed
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintArpCache() method of the
+   * ArpCache associated with each Ipv4Interface stored in the Ipv4 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     10.1.1.2 dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNeighborCacheEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
 
   /**
    * \brief Request a specified routing protocol &lt;T&gt; from Ipv4RoutingProtocol protocol
@@ -123,31 +185,58 @@
   
 private:
   /**
-   * \internal
-   *
    * \brief prints the routing tables of a node.
    * \param node The node ptr for which we need the routing table to be printed
    * \param stream The output stream object to use
    *
    * This method calls the PrintRoutingTable() method of the
-   * Ipv6RoutingProtocol stored in the Ipv6 object;
+   * Ipv4RoutingProtocol stored in the Ipv4 object;
    * the output format is routing protocol-specific.
    */
-  void Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+  static void Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
 
   /**
-   * \internal
-   *
    * \brief prints the routing tables of a node at regular intervals specified by user.
    * \param printInterval the time interval for which the routing table is supposed to be printed.
    * \param node The node ptr for which we need the routing table to be printed
    * \param stream The output stream object to use
    *
    * This method calls the PrintRoutingTable() method of the
-   * Ipv6RoutingProtocol stored in the Ipv6 object, for the selected node
+   * Ipv4RoutingProtocol stored in the Ipv4 object, for the selected node
    * at the specified interval; the output format is routing protocol-specific.
    */
-  void PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of a node.
+   * \param node The node ptr for which we need the neighbor cache to be printed
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintArpCache() method of the
+   * ArpCache associated with each Ipv4Interface stored in the Ipv4 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     10.1.1.2 dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintArpCache (Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of a node at regular intervals specified by user.
+   * \param printInterval the time interval for which the neighbor cache is supposed to be printed.
+   * \param node The node ptr for which we need the neighbor cache to be printed
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintArpCache() method of the
+   * ArpCache associated with each Ipv4Interface stored in the Ipv4 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     10.1.1.2 dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintArpCacheEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
 };
 
 
diff -Naur ns-3.21/src/internet/helper/ipv4-static-routing-helper.cc ns-3.22/src/internet/helper/ipv4-static-routing-helper.cc
--- ns-3.21/src/internet/helper/ipv4-static-routing-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-static-routing-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,10 @@
 #include "ns3/ipv4-routing-protocol.h"
 #include "ipv4-static-routing-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4StaticRoutingHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4StaticRoutingHelper");
+
 Ipv4StaticRoutingHelper::Ipv4StaticRoutingHelper()
 {
 }
diff -Naur ns-3.21/src/internet/helper/ipv4-static-routing-helper.h ns-3.22/src/internet/helper/ipv4-static-routing-helper.h
--- ns-3.21/src/internet/helper/ipv4-static-routing-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv4-static-routing-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -53,7 +53,6 @@
   Ipv4StaticRoutingHelper (const Ipv4StaticRoutingHelper &);
 
   /**
-   * \internal
    * \returns pointer to clone of this Ipv4StaticRoutingHelper
    *
    * This method is mainly for internal use by the other helpers;
@@ -158,7 +157,6 @@
   void SetDefaultMulticastRoute (std::string nName, std::string ndName);
 private:
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    * \returns
diff -Naur ns-3.21/src/internet/helper/ipv6-address-helper.cc ns-3.22/src/internet/helper/ipv6-address-helper.cc
--- ns-3.21/src/internet/helper/ipv6-address-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-address-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -104,12 +104,6 @@
   return Ipv6AddressGenerator::NextAddress (Ipv6Prefix (64));
 }
 
-void Ipv6AddressHelper::NewNetwork (Ipv6Address network, Ipv6Prefix prefix)
-{
-  NS_LOG_FUNCTION (this << network << prefix);
-  SetBase (network, Ipv6Prefix (64));
-}
-
 void Ipv6AddressHelper::NewNetwork (void)
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/internet/helper/ipv6-address-helper.h ns-3.22/src/internet/helper/ipv6-address-helper.h
--- ns-3.21/src/internet/helper/ipv6-address-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-address-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -27,7 +27,6 @@
 #include "ns3/ipv6-address.h"
 #include "ns3/net-device-container.h"
 #include "ipv6-interface-container.h"
-#include "ns3/deprecated.h"
 
 namespace ns3 {
 
@@ -108,19 +107,6 @@
 
   /**
    * \brief Allocate a new network.
-   *
-   * This method will reset the network for future
-   * network IDs, and resets the interface ID to the previously used
-   * base.
-   *  
-   * \param network The IPv6 network
-   * \param prefix The prefix
-   * \deprecated
-   */
-  void NewNetwork (Ipv6Address network, Ipv6Prefix prefix) NS_DEPRECATED;
-
-  /**
-   * \brief Allocate a new network.
    *
    * This method will cause the subnet prefix to increment, for future
    * network IDs, and resets the interface ID to the previously used
diff -Naur ns-3.21/src/internet/helper/ipv6-interface-container.cc ns-3.22/src/internet/helper/ipv6-interface-container.cc
--- ns-3.21/src/internet/helper/ipv6-interface-container.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-interface-container.cc	2015-02-05 15:46:22.000000000 -0800
@@ -80,36 +80,6 @@
     }
 }
 
-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);
-
-  if (router)
-    {
-      uint32_t other;
-      /* assume first global address is index 1 (0 is link-local) */
-      Ipv6Address routerAddress = ipv6->GetAddress (m_interfaces[i].second, 0).GetAddress ();
-
-      for (other = 0; other < m_interfaces.size (); other++)
-        {
-          if (other != i)
-            {
-              Ptr<Ipv6StaticRouting> routing = 0;
-              Ipv6StaticRoutingHelper routingHelper;
-
-              ipv6 = m_interfaces[other].first;
-              routing = routingHelper.GetStaticRouting (ipv6);
-              routing->SetDefaultRoute (routerAddress, m_interfaces[other].second);
-            }
-        }
-    }
-}
-
 void Ipv6InterfaceContainer::SetForwarding (uint32_t i, bool router)
 {
   Ptr<Ipv6> ipv6 = m_interfaces[i].first;
diff -Naur ns-3.21/src/internet/helper/ipv6-interface-container.h ns-3.22/src/internet/helper/ipv6-interface-container.h
--- ns-3.21/src/internet/helper/ipv6-interface-container.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-interface-container.h	2015-02-05 15:46:22.000000000 -0800
@@ -29,7 +29,6 @@
 
 #include "ns3/ipv6.h"
 #include "ns3/ipv6-address.h"
-#include "ns3/deprecated.h"
 
 namespace ns3
 {
@@ -167,13 +166,6 @@
   void Add (std::string ipv6Name, uint32_t interface);
 
   /**
-   * \brief Set the state of the stack (act as a router or not) for the specified index.
-   * \param i index
-   * \param router true : is a router, false : is an host
-   */
-  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
@@ -211,13 +203,11 @@
 
 private:
   /**
-   * \internal
    * \brief Container for pairs of Ipv6 smart pointer / Interface Index.
    */
   typedef std::vector<std::pair<Ptr<Ipv6>, uint32_t> > InterfaceVector;
 
   /**
-   * \internal
    * \brief List of IPv6 stack and interfaces index.
    */
   InterfaceVector m_interfaces;
diff -Naur ns-3.21/src/internet/helper/ipv6-list-routing-helper.h ns-3.22/src/internet/helper/ipv6-list-routing-helper.h
--- ns-3.21/src/internet/helper/ipv6-list-routing-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-list-routing-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -44,7 +44,6 @@
   Ipv6ListRoutingHelper ();
 
   /**
-   * \internal
    * \brief Destroy an Ipv6 Ipv6ListRoutingHelper.
    */
   virtual ~Ipv6ListRoutingHelper ();
@@ -83,7 +82,6 @@
   virtual Ptr<Ipv6RoutingProtocol> Create (Ptr<Node> node) const;
 private:
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    * \param o object to copy from
@@ -92,7 +90,6 @@
   Ipv6ListRoutingHelper &operator = (const Ipv6ListRoutingHelper &o);
 
   /**
-   * \internal
    * \brief Container for pairs of Ipv6RoutingHelper pointer / priority.
    */
   std::list<std::pair<const Ipv6RoutingHelper *,int16_t> > m_list;
diff -Naur ns-3.21/src/internet/helper/ipv6-routing-helper.cc ns-3.22/src/internet/helper/ipv6-routing-helper.cc
--- ns-3.21/src/internet/helper/ipv6-routing-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-routing-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,6 +23,10 @@
 #include "ns3/simulator.h"
 #include "ns3/ipv6-routing-protocol.h"
 #include "ns3/ipv6-list-routing.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/ipv6-interface.h"
+#include "ns3/ndisc-cache.h"
+#include "ns3/names.h"
 #include "ipv6-routing-helper.h"
 
 namespace ns3 {
@@ -32,39 +36,39 @@
 }
 
 void
-Ipv6RoutingHelper::PrintRoutingTableAllAt (Time printTime, Ptr<OutputStreamWrapper> stream) const
+Ipv6RoutingHelper::PrintRoutingTableAllAt (Time printTime, Ptr<OutputStreamWrapper> stream)
 {
   for (uint32_t i = 0; i < NodeList::GetNNodes (); i++)
     {
       Ptr<Node> node = NodeList::GetNode (i);
-      Simulator::Schedule (printTime, &Ipv6RoutingHelper::Print, this, node, stream);
+      Simulator::Schedule (printTime, &Ipv6RoutingHelper::Print, node, stream);
     }
 }
 
 void
-Ipv6RoutingHelper::PrintRoutingTableAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream) const
+Ipv6RoutingHelper::PrintRoutingTableAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream)
 {
   for (uint32_t i = 0; i < NodeList::GetNNodes (); i++)
     {
       Ptr<Node> node = NodeList::GetNode (i);
-      Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintEvery, this, printInterval, node, stream);
+      Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintEvery, printInterval, node, stream);
     }
 }
 
 void
-Ipv6RoutingHelper::PrintRoutingTableAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const
+Ipv6RoutingHelper::PrintRoutingTableAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
 {
-  Simulator::Schedule (printTime, &Ipv6RoutingHelper::Print, this, node, stream);
+  Simulator::Schedule (printTime, &Ipv6RoutingHelper::Print, node, stream);
 }
 
 void
-Ipv6RoutingHelper::PrintRoutingTableEvery (Time printInterval,Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const
+Ipv6RoutingHelper::PrintRoutingTableEvery (Time printInterval,Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
 {
-  Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintEvery, this, printInterval, node, stream);
+  Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintEvery, printInterval, node, stream);
 }
 
 void
-Ipv6RoutingHelper::Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const
+Ipv6RoutingHelper::Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
 {
   Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
   Ptr<Ipv6RoutingProtocol> rp = ipv6->GetRoutingProtocol ();
@@ -73,13 +77,102 @@
 }
 
 void
-Ipv6RoutingHelper::PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const
+Ipv6RoutingHelper::PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
 {
   Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
   Ptr<Ipv6RoutingProtocol> rp = ipv6->GetRoutingProtocol ();
   NS_ASSERT (rp);
   rp->PrintRoutingTable (stream);
-  Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintEvery, this, printInterval, node, stream);
+  Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintEvery, printInterval, node, stream);
+}
+
+void
+Ipv6RoutingHelper::PrintNeighborCacheAllAt (Time printTime, Ptr<OutputStreamWrapper> stream)
+{
+  for (uint32_t i = 0; i < NodeList::GetNNodes (); i++)
+    {
+      Ptr<Node> node = NodeList::GetNode (i);
+      Simulator::Schedule (printTime, &Ipv6RoutingHelper::PrintNdiscCache, node, stream);
+    }
+}
+
+void
+Ipv6RoutingHelper::PrintNeighborCacheAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream)
+{
+  for (uint32_t i = 0; i < NodeList::GetNNodes (); i++)
+    {
+      Ptr<Node> node = NodeList::GetNode (i);
+      Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintNdiscCacheEvery, printInterval, node, stream);
+    }
+}
+
+void
+Ipv6RoutingHelper::PrintNeighborCacheAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
+{
+  Simulator::Schedule (printTime, &Ipv6RoutingHelper::PrintNdiscCache, node, stream);
+}
+
+void
+Ipv6RoutingHelper::PrintNeighborCacheEvery (Time printInterval,Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
+{
+  Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintNdiscCacheEvery, printInterval, node, stream);
+}
+
+void
+Ipv6RoutingHelper::PrintNdiscCache (Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
+{
+  std::ostream* os = stream->GetStream ();
+
+  *os << "NDISC Cache of node ";
+  std::string found = Names::FindName (node);
+  if (Names::FindName (node) != "")
+    {
+      *os << found;
+    }
+  else
+    {
+      *os << static_cast<int> (node->GetId ());
+    }
+  *os << " at time " << Simulator::Now ().GetSeconds () << "\n";
+
+  Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol> ();
+  for (uint32_t i=0; i<ipv6->GetNInterfaces(); i++)
+    {
+      Ptr<NdiscCache> ndiscCache = ipv6->GetInterface (i)->GetNdiscCache ();
+      if (ndiscCache)
+        {
+          ndiscCache->PrintNdiscCache (stream);
+        }
+    }
+}
+
+void
+Ipv6RoutingHelper::PrintNdiscCacheEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream)
+{
+  std::ostream* os = stream->GetStream ();
+
+  *os << "NDISC Cache of node ";
+  std::string found = Names::FindName (node);
+  if (Names::FindName (node) != "")
+    {
+      *os << found;
+    }
+  else
+    {
+      *os << static_cast<int> (node->GetId ());
+    }
+  *os << " at time " << Simulator::Now ().GetSeconds () << "\n";
+
+  Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol> ();
+  for (uint32_t i=0; i<ipv6->GetNInterfaces(); i++)
+    {
+      Ptr<NdiscCache> ndiscCache = ipv6->GetInterface (i)->GetNdiscCache ();
+      if (ndiscCache)
+        {
+          ndiscCache->PrintNdiscCache (stream);
+        }
+    }
+  Simulator::Schedule (printInterval, &Ipv6RoutingHelper::PrintNdiscCacheEvery, printInterval, node, stream);
 }
 
 } // namespace ns3
diff -Naur ns-3.21/src/internet/helper/ipv6-routing-helper.h ns-3.22/src/internet/helper/ipv6-routing-helper.h
--- ns-3.21/src/internet/helper/ipv6-routing-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-routing-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -45,7 +45,6 @@
 public:
 
   /**
-   * \internal
    * \brief Destroy an Ipv6 Ipv6RoutingHelper.
    */
   virtual ~Ipv6RoutingHelper ();
@@ -74,7 +73,7 @@
    * Ipv6RoutingProtocol stored in the Ipv6 object, for all nodes at the
    * specified time; the output format is routing protocol-specific.
    */
-  void PrintRoutingTableAllAt (Time printTime, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintRoutingTableAllAt (Time printTime, Ptr<OutputStreamWrapper> stream);;
 
   /**
    * \brief prints the routing tables of all nodes at regular intervals specified by user.
@@ -85,7 +84,7 @@
    * Ipv6RoutingProtocol stored in the Ipv6 object, for all nodes at the
    * specified time interval; the output format is routing protocol-specific.
    */
-  void PrintRoutingTableAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintRoutingTableAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream);
 
   /**
    * \brief prints the routing tables of a node at a particular time.
@@ -97,7 +96,7 @@
    * Ipv6RoutingProtocol stored in the Ipv6 object, for the selected node
    * at the specified time; the output format is routing protocol-specific.
    */
-  void PrintRoutingTableAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintRoutingTableAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
 
   /**
    * \brief prints the routing tables of a node at regular intervals specified by user.
@@ -109,7 +108,69 @@
    * Ipv6RoutingProtocol stored in the Ipv6 object, for the selected node
    * at the specified interval; the output format is routing protocol-specific.
    */
-  void PrintRoutingTableEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintRoutingTableEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of all nodes at a particular time.
+   * \param printTime the time at which the neighbor cache is supposed to be printed.
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintNdiscCache() method of the
+   * NdiscCache associated with each Ipv6Interface stored in the Ipv6 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     2001:db8::f00d:beef:cafe dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNeighborCacheAllAt (Time printTime, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of all nodes at regular intervals specified by user.
+   * \param printInterval the time interval for which the neighbor cache is supposed to be printed.
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintNdiscCache() method of the
+   * NdiscCache associated with each Ipv6Interface stored in the Ipv6 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     2001:db8::f00d:beef:cafe dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNeighborCacheAllEvery (Time printInterval, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of a node at a particular time.
+   * \param printTime the time at which the neighbor cache is supposed to be printed.
+   * \param node The node ptr for which we need the neighbor cache to be printed
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintNdiscCache() method of the
+   * NdiscCache associated with each Ipv6Interface stored in the Ipv6 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     2001:db8::f00d:beef:cafe dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNeighborCacheAt (Time printTime, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of a node at regular intervals specified by user.
+   * \param printInterval the time interval for which the neighbor cache is supposed to be printed.
+   * \param node The node ptr for which we need the neighbor cache to be printed
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintNdiscCache() method of the
+   * NdiscCache associated with each Ipv6Interface stored in the Ipv6 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     2001:db8::f00d:beef:cafe dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNeighborCacheEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
 
   /**
    * \brief Request a specified routing protocol &lt;T&gt; from Ipv6RoutingProtocol protocol
@@ -125,8 +186,6 @@
   
 private:
   /**
-   * \internal
-   *
    * \brief prints the routing tables of a node.
    * \param node The node ptr for which we need the routing table to be printed
    * \param stream The output stream object to use
@@ -135,11 +194,9 @@
    * Ipv6RoutingProtocol stored in the Ipv6 object;
    * the output format is routing protocol-specific.
    */
-  void Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+  static void Print (Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
 
   /**
-   * \internal
-   *
    * \brief prints the routing tables of a node at regular intervals specified by user.
    * \param printInterval the time interval for which the routing table is supposed to be printed.
    * \param node The node ptr for which we need the routing table to be printed
@@ -149,7 +206,38 @@
    * Ipv6RoutingProtocol stored in the Ipv6 object, for the selected node
    * at the specified interval; the output format is routing protocol-specific.
    */
-  void PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream) const;
+  static void PrintEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of a node.
+   * \param node The node ptr for which we need the neighbor cache to be printed
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintNdiscCache() method of the
+   * NdiscCache associated with each Ipv6Interface stored in the Ipv6 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     2001:db8::f00d:beef:cafe dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNdiscCache (Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
+
+  /**
+   * \brief prints the neighbor cache of a node at regular intervals specified by user.
+   * \param printInterval the time interval for which the neighbor cache is supposed to be printed.
+   * \param node The node ptr for which we need the neighbor cache to be printed
+   * \param stream The output stream object to use
+   *
+   * This method calls the PrintNdiscCache() method of the
+   * NdiscCache associated with each Ipv6Interface stored in the Ipv6 object, for all nodes at the
+   * specified time. The output format is similar to:
+   * \verbatim
+     2001:db8::f00d:beef:cafe dev 1 lladdr 00-06-00:00:00:00:00:02 REACHABLE
+     \endverbatim
+   * Note that the MAC address is printed as "type"-"size"-"actual address"
+   */
+  static void PrintNdiscCacheEvery (Time printInterval, Ptr<Node> node, Ptr<OutputStreamWrapper> stream);
 };
 
 /**
diff -Naur ns-3.21/src/internet/helper/ipv6-static-routing-helper.cc ns-3.22/src/internet/helper/ipv6-static-routing-helper.cc
--- ns-3.21/src/internet/helper/ipv6-static-routing-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-static-routing-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 
 #include "ipv6-static-routing-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6StaticRoutingHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6StaticRoutingHelper");
+
 Ipv6StaticRoutingHelper::Ipv6StaticRoutingHelper ()
 {
 }
diff -Naur ns-3.21/src/internet/helper/ipv6-static-routing-helper.h ns-3.22/src/internet/helper/ipv6-static-routing-helper.h
--- ns-3.21/src/internet/helper/ipv6-static-routing-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/helper/ipv6-static-routing-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -53,7 +53,6 @@
   Ipv6StaticRoutingHelper (const Ipv6StaticRoutingHelper &);
 
   /**
-   * \internal
    * \returns pointer to clone of this Ipv6StaticRoutingHelper
    *
    * This method is mainly for internal use by the other helpers;
@@ -118,7 +117,6 @@
 #endif
 private:
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    * \param o object to copy from
diff -Naur ns-3.21/src/internet/model/arp-cache.cc ns-3.22/src/internet/model/arp-cache.cc
--- ns-3.21/src/internet/model/arp-cache.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/arp-cache.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,15 +24,16 @@
 #include "ns3/log.h"
 #include "ns3/node.h"
 #include "ns3/trace-source-accessor.h"
+#include "ns3/names.h"
 
 #include "arp-cache.h"
 #include "arp-header.h"
 #include "ipv4-interface.h"
 
-NS_LOG_COMPONENT_DEFINE ("ArpCache");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ArpCache");
+
 NS_OBJECT_ENSURE_REGISTERED (ArpCache);
 
 TypeId 
@@ -41,22 +42,29 @@
   static TypeId tid = TypeId ("ns3::ArpCache")
     .SetParent<Object> ()
     .AddAttribute ("AliveTimeout",
-                   "When this timeout expires, the matching cache entry needs refreshing",
+                   "When this timeout expires, "
+                   "the matching cache entry needs refreshing",
                    TimeValue (Seconds (120)),
                    MakeTimeAccessor (&ArpCache::m_aliveTimeout),
                    MakeTimeChecker ())
     .AddAttribute ("DeadTimeout",
-                   "When this timeout expires, a new attempt to resolve the matching entry is made",
+                   "When this timeout expires, "
+                   "a new attempt to resolve the matching entry is made",
                    TimeValue (Seconds (100)),
                    MakeTimeAccessor (&ArpCache::m_deadTimeout),
                    MakeTimeChecker ())
     .AddAttribute ("WaitReplyTimeout",
-                   "When this timeout expires, the cache entries will be scanned and entries in WaitReply state will resend ArpRequest unless MaxRetries has been exceeded, in which case the entry is marked dead",
+                   "When this timeout expires, "
+                   "the cache entries will be scanned and "
+                   "entries in WaitReply state will resend ArpRequest "
+                   "unless MaxRetries has been exceeded, "
+                   "in which case the entry is marked dead",
                    TimeValue (Seconds (1)),
                    MakeTimeAccessor (&ArpCache::m_waitReplyTimeout),
                    MakeTimeChecker ())
     .AddAttribute ("MaxRetries",
-                   "Number of retransmissions of ArpRequest before marking dead",
+                   "Number of retransmissions of ArpRequest "
+                   "before marking dead",
                    UintegerValue (3),
                    MakeUintegerAccessor (&ArpCache::m_maxRetries),
                    MakeUintegerChecker<uint32_t> ())
@@ -66,8 +74,10 @@
                    MakeUintegerAccessor (&ArpCache::m_pendingQueueSize),
                    MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("Drop",
-                     "Packet dropped due to ArpCache entry in WaitReply expiring.",
-                     MakeTraceSourceAccessor (&ArpCache::m_dropTrace))
+                     "Packet dropped due to ArpCache entry "
+                     "in WaitReply expiring.",
+                     MakeTraceSourceAccessor (&ArpCache::m_dropTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
@@ -242,6 +252,42 @@
     }
 }
 
+void
+ArpCache::PrintArpCache (Ptr<OutputStreamWrapper> stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  std::ostream* os = stream->GetStream ();
+
+  for (CacheI i = m_arpCache.begin (); i != m_arpCache.end (); i++)
+    {
+      *os << i->first << " dev ";
+      std::string found = Names::FindName (m_device);
+      if (Names::FindName (m_device) != "")
+        {
+          *os << found;
+        }
+      else
+        {
+          *os << static_cast<int> (m_device->GetIfIndex ());
+        }
+
+      *os << " lladdr " << i->second->GetMacAddress ();
+
+      if (i->second->IsAlive ())
+        {
+          *os << " REACHABLE\n";
+        }
+      else if (i->second->IsWaitReply ())
+        {
+          *os << " DELAY\n";
+        }
+      else
+        {
+          *os << " STALE\n";
+        }
+    }
+}
+
 ArpCache::Entry *
 ArpCache::Lookup (Ipv4Address to)
 {
@@ -346,7 +392,6 @@
 ArpCache::Entry::GetMacAddress (void) const
 {
   NS_LOG_FUNCTION (this);
-  NS_ASSERT (m_state == ALIVE);
   return m_macAddress;
 }
 Ipv4Address 
diff -Naur ns-3.21/src/internet/model/arp-cache.h ns-3.22/src/internet/model/arp-cache.h
--- ns-3.21/src/internet/model/arp-cache.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/arp-cache.h	2015-02-05 15:46:22.000000000 -0800
@@ -33,6 +33,7 @@
 #include "ns3/object.h"
 #include "ns3/traced-callback.h"
 #include "ns3/sgi-hashmap.h"
+#include "ns3/output-stream-wrapper.h"
 
 namespace ns3 {
 
@@ -76,8 +77,8 @@
   /**
    * \brief Set the NetDevice and Ipv4Interface associated with the ArpCache
    *
-   * \param device The hardware NetDevice associated with this ARP chache
-   * \param interface the Ipv4Interface associated with this ARP chache
+   * \param device The hardware NetDevice associated with this ARP cache
+   * \param interface the Ipv4Interface associated with this ARP cache
    */
   void SetDevice (Ptr<NetDevice> device, Ptr<Ipv4Interface> interface);
   /**
@@ -155,6 +156,13 @@
   void Flush (void);
 
   /**
+   * \brief Print the ARP cache entries
+   *
+   * \param stream the ostream the ARP cache entries is printed to
+   */
+  void PrintArpCache (Ptr<OutputStreamWrapper> stream);
+
+  /**
    * \brief A record that that holds information about an ArpCache entry
    */
   class Entry {
diff -Naur ns-3.21/src/internet/model/arp-header.cc ns-3.22/src/internet/model/arp-header.cc
--- ns-3.21/src/internet/model/arp-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/arp-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "arp-header.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("ArpHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ArpHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (ArpHeader);
 
 void 
diff -Naur ns-3.21/src/internet/model/arp-l3-protocol.cc ns-3.22/src/internet/model/arp-l3-protocol.cc
--- ns-3.21/src/internet/model/arp-l3-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/arp-l3-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include "arp-cache.h"
 #include "ipv4-interface.h"
 
-NS_LOG_COMPONENT_DEFINE ("ArpL3Protocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ArpL3Protocol");
+
 const uint16_t ArpL3Protocol::PROT_NUMBER = 0x0806;
 
 NS_OBJECT_ENSURE_REGISTERED (ArpL3Protocol);
@@ -51,13 +51,20 @@
                    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",
+    .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))
+                     "Packet dropped because not enough room "
+                     "in pending queue for a specific cache entry.",
+                     MakeTraceSourceAccessor (&ArpL3Protocol::m_dropTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
@@ -187,7 +194,8 @@
       NS_LOG_LOGIC (cache->GetInterface ()->GetAddress (i).GetLocal () << ", ");
     }
 
-  /** \internal
+  /**
+   * \internal
    * Note: we do not update the ARP cache when we receive an ARP request
    *  from an unknown node. See \bugid{107}
    */
diff -Naur ns-3.21/src/internet/model/candidate-queue.cc ns-3.22/src/internet/model/candidate-queue.cc
--- ns-3.21/src/internet/model/candidate-queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/candidate-queue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "candidate-queue.h"
 #include "global-route-manager-impl.h"
 
-NS_LOG_COMPONENT_DEFINE ("CandidateQueue");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CandidateQueue");
+
 /**
  * \brief Stream insertion operator.
  *
diff -Naur ns-3.21/src/internet/model/candidate-queue.h ns-3.22/src/internet/model/candidate-queue.h
--- ns-3.21/src/internet/model/candidate-queue.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/candidate-queue.h	2015-02-05 15:46:22.000000000 -0800
@@ -51,16 +51,14 @@
 public:
 /**
  * @brief Create an empty SPF Candidate Queue.
- * @internal
  *
  * @see SPFVertex
  */
   CandidateQueue ();
 
 /**
- * @internal Destroy an SPF Candidate Queue and release any resources held 
+ * @brief Destroy an SPF Candidate Queue and release any resources held 
  * by the contents.
- * @internal
  *
  * @see SPFVertex
  */
@@ -69,7 +67,6 @@
 /**
  * @brief Empty the Candidate Queue and release all of the resources 
  * associated with the Shortest Path First Vertex pointers in the queue.
- * @internal
  *
  * @see SPFVertex
  */
@@ -78,7 +75,6 @@
 /**
  * @brief Push a Shortest Path First Vertex pointer onto the queue according
  * to the priority scheme.
- * @internal
  * 
  * On completion, the top of the queue will hold the Shortest Path First
  * Vertex pointer that points to a vertex having lowest value of the field
@@ -92,7 +88,6 @@
 
 /**
  * @brief Pop the Shortest Path First Vertex pointer at the top of the queue.
- * @internal
  *
  * The caller is given the responsibility for releasing the resources 
  * associated with the vertex.
@@ -106,7 +101,6 @@
 /**
  * @brief Return the Shortest Path First Vertex pointer at the top of the 
  * queue.
- * @internal
  *
  * This method does not pop the SPFVertex* off of the queue, it simply 
  * returns the pointer.
@@ -119,7 +113,6 @@
 
 /**
  * @brief Test the Candidate Queue to determine if it is empty.
- * @internal
  *
  * @returns True if the queue is empty, false otherwise.
  */
@@ -128,7 +121,6 @@
 /**
  * @brief Return the number of Shortest Path First Vertex pointers presently
  * stored in the Candidate Queue.
- * @internal
  *
  * @see SPFVertex
  * @returns The number of SPFVertex* pointers in the Candidate Queue.
@@ -138,7 +130,6 @@
 /**
  * @brief Searches the Candidate Queue for a Shortest Path First Vertex 
  * pointer that points to a vertex having the given IP address.
- * @internal
  *
  * @see SPFVertex
  * @param addr The IP address to search for.
@@ -148,7 +139,6 @@
 
 /**
  * @brief Reorders the Candidate Queue according to the priority scheme.
- * @internal
  * 
  * On completion, the top of the queue will hold the Shortest Path First
  * Vertex pointer that points to a vertex having lowest value of the field
diff -Naur ns-3.21/src/internet/model/codel-queue.cc ns-3.22/src/internet/model/codel-queue.cc
--- ns-3.21/src/internet/model/codel-queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/codel-queue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,17 @@
 #include "ns3/abort.h"
 #include "codel-queue.h"
 
-NS_LOG_COMPONENT_DEFINE ("CoDelQueue");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CoDelQueue");
+
+/**
+ * Performs a reciprocal divide, similar to the
+ * Linux kernel reciprocal_divide function
+ * \param A numerator
+ * \param R reciprocal of the denominator B
+ * \return the value of A/B
+ */
 /* borrowed from the linux kernel */
 static inline uint32_t ReciprocalDivide (uint32_t A, uint32_t R)
 {
@@ -43,6 +50,10 @@
 
 /* end kernel borrowings */
 
+/**
+ * Returns the current time translated in CoDel time representation
+ * \return the current time
+ */
 static uint32_t CoDelGetTime (void)
 {
   Time time = Simulator::Now ();
@@ -51,10 +62,17 @@
   return ns >> CODEL_SHIFT;
 }
 
+/**
+ * CoDel time stamp, used to carry CoDel time informations.
+ */
 class CoDelTimestampTag : public Tag
 {
 public:
   CoDelTimestampTag ();
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -63,9 +81,13 @@
   virtual void Deserialize (TagBuffer i);
   virtual void Print (std::ostream &os) const;
 
+  /**
+   * Gets the Tag creation time
+   * @return the time object stored in the tag
+   */
   Time GetTxTime (void) const;
 private:
-  uint64_t m_creationTime;
+  uint64_t m_creationTime; //!< Tag creation time
 };
 
 CoDelTimestampTag::CoDelTimestampTag ()
@@ -160,25 +182,32 @@
                    MakeTimeChecker ())
     .AddTraceSource ("Count",
                      "CoDel count",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_count))
+                     MakeTraceSourceAccessor (&CoDelQueue::m_count),
+                     "ns3::TracedValue::Uint32Callback")
     .AddTraceSource ("DropCount",
                      "CoDel drop count",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_dropCount))
+                     MakeTraceSourceAccessor (&CoDelQueue::m_dropCount),
+                     "ns3::TracedValue::Uint32Callback")
     .AddTraceSource ("LastCount",
                      "CoDel lastcount",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_lastCount))
+                     MakeTraceSourceAccessor (&CoDelQueue::m_lastCount),
+                     "ns3::TracedValue::Uint32Callback")
     .AddTraceSource ("DropState",
                      "Dropping state",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_dropping))
+                     MakeTraceSourceAccessor (&CoDelQueue::m_dropping),
+                     "ns3::TracedValue::BoolCallback")
     .AddTraceSource ("BytesInQueue",
                      "Number of bytes in the queue",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_bytesInQueue))
+                     MakeTraceSourceAccessor (&CoDelQueue::m_bytesInQueue),
+                     "ns3::TracedValue::Uint32Callback")
     .AddTraceSource ("Sojourn",
                      "Time in the queue",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_sojourn))
+                     MakeTraceSourceAccessor (&CoDelQueue::m_sojourn),
+                     "ns3::Time::TracedValueCallback")
     .AddTraceSource ("DropNext",
                      "Time until next packet drop",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_dropNext))
+                     MakeTraceSourceAccessor (&CoDelQueue::m_dropNext),
+                     "ns3::TracedValue::Uint32Callback")
   ;
 
   return tid;
@@ -285,7 +314,7 @@
   NS_LOG_FUNCTION (this);
   CoDelTimestampTag tag;
   bool okToDrop;
-  p->FindFirstMatchingByteTag (tag);
+
   bool found = p->RemovePacketTag (tag);
   NS_ASSERT_MSG (found, "found a packet without an input timestamp tag");
   NS_UNUSED (found);    //silence compiler warning
diff -Naur ns-3.21/src/internet/model/codel-queue.h ns-3.22/src/internet/model/codel-queue.h
--- ns-3.21/src/internet/model/codel-queue.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/codel-queue.h	2015-02-05 15:46:22.000000000 -0800
@@ -42,9 +42,13 @@
 
 namespace ns3 {
 
+/**
+ * Number of bits discarded from the time representation.
+ * The time is assumed to be in nanoseconds.
+ */
 static const int  CODEL_SHIFT = 10;
-static const int DEFAULT_CODEL_LIMIT = 1000;
 
+#define DEFAULT_CODEL_LIMIT 1000
 #define REC_INV_SQRT_BITS (8 * sizeof(uint16_t))
 #define REC_INV_SQRT_SHIFT (32 - REC_INV_SQRT_BITS)
 
@@ -59,6 +63,11 @@
 class CoDelQueue : public Queue
 {
 public:
+  /**
+   * Get the type ID.
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -179,9 +188,33 @@
    */
   bool OkToDrop (Ptr<Packet> p, uint32_t now);
 
+  /**
+   * Check if CoDel time a is successive to b
+   * @param a left operand
+   * @param b right operand
+   * @return true if a is greater than b
+   */
   bool CoDelTimeAfter (uint32_t a, uint32_t b);
+  /**
+   * Check if CoDel time a is successive or equal to b
+   * @param a left operand
+   * @param b right operand
+   * @return true if a is greater than or equal to b
+   */
   bool CoDelTimeAfterEq (uint32_t a, uint32_t b);
+  /**
+   * Check if CoDel time a is preceding b
+   * @param a left operand
+   * @param b right operand
+   * @return true if a is less than to b
+   */
   bool CoDelTimeBefore (uint32_t a, uint32_t b);
+  /**
+   * Check if CoDel time a is preceding or equal to b
+   * @param a left operand
+   * @param b right operand
+   * @return true if a is less than or equal to b
+   */
   bool CoDelTimeBeforeEq (uint32_t a, uint32_t b);
 
   /**
@@ -199,7 +232,7 @@
   Time m_target;                          //!< 5 ms target queue delay
   TracedValue<uint32_t> m_count;          //!< Number of packets dropped since entering drop state
   TracedValue<uint32_t> m_dropCount;      //!< Number of dropped packets according CoDel algorithm
-  TracedValue<uint32_t> m_lastCount;      //<! Last number of packets dropped since entering drop state
+  TracedValue<uint32_t> m_lastCount;      //!< Last number of packets dropped since entering drop state
   TracedValue<bool> m_dropping;           //!< True if in dropping state
   uint16_t m_recInvSqrt;                  //!< Reciprocal inverse square root
   uint32_t m_firstAboveTime;              //!< Time to declare sojourn time above target
diff -Naur ns-3.21/src/internet/model/global-route-manager.cc ns-3.22/src/internet/model/global-route-manager.cc
--- ns-3.21/src/internet/model/global-route-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/global-route-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "global-route-manager.h"
 #include "global-route-manager-impl.h"
 
-NS_LOG_COMPONENT_DEFINE ("GlobalRouteManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("GlobalRouteManager");
+
 // ---------------------------------------------------------------------------
 //
 // GlobalRouteManager Implementation
diff -Naur ns-3.21/src/internet/model/global-route-manager.h ns-3.22/src/internet/model/global-route-manager.h
--- ns-3.21/src/internet/model/global-route-manager.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/global-route-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -22,8 +22,6 @@
 #ifndef GLOBAL_ROUTE_MANAGER_H
 #define GLOBAL_ROUTE_MANAGER_H
 
-#include "ns3/deprecated.h"
-
 namespace ns3 {
 
 /**
@@ -55,15 +53,12 @@
 /**
  * @brief Build the routing database by gathering Link State Advertisements
  * from each node exporting a GlobalRouter interface.
- * @internal
- *
  */
   static void BuildGlobalRoutingDatabase ();
 
 /**
  * @brief Compute routes using a Dijkstra SPF computation and populate
  * per-node forwarding tables
- * @internal
  */
   static void InitializeRoutes ();
 
diff -Naur ns-3.21/src/internet/model/global-route-manager-impl.cc ns-3.22/src/internet/model/global-route-manager-impl.cc
--- ns-3.21/src/internet/model/global-route-manager-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/global-route-manager-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,10 +40,10 @@
 #include "candidate-queue.h"
 #include "ipv4-global-routing.h"
 
-NS_LOG_COMPONENT_DEFINE ("GlobalRouteManagerImpl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("GlobalRouteManagerImpl");
+
 /**
  * \brief Stream insertion operator.
  *
diff -Naur ns-3.21/src/internet/model/global-route-manager-impl.h ns-3.22/src/internet/model/global-route-manager-impl.h
--- ns-3.21/src/internet/model/global-route-manager-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/global-route-manager-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -68,7 +68,6 @@
 public:
 /**
  * @brief Enumeration of the possible types of SPFVertex objects.
- * @internal
  *
  * Currently we use VertexRouter to identify objects that represent a router 
  * in the simulation topology, and VertexNetwork to identify objects that 
@@ -83,7 +82,6 @@
 /**
  * @brief Construct an empty ("uninitialized") SPFVertex (Shortest Path First 
  * Vertex).
- * @internal
  *
  * The Vertex Type is set to VertexUnknown, the Vertex ID is set to 
  * 255.255.255.255, and the distance from root is set to infinity 
@@ -98,7 +96,6 @@
 
 /**
  * @brief Construct an initialized SPFVertex (Shortest Path First Vertex).
- * @internal
  *
  * The Vertex Type is initialized to VertexRouter and the Vertex ID is found
  * from the Link State ID of the Link State Advertisement (LSA) passed as a
@@ -116,7 +113,6 @@
 
 /**
  * @brief Destroy an SPFVertex (Shortest Path First Vertex).
- * @internal
  *
  * The children vertices of the SPFVertex are recursively deleted.
  *
@@ -126,7 +122,6 @@
 
 /**
  * @brief Get the Vertex Type field of a SPFVertex object.
- * @internal
  *
  * The Vertex Type describes the kind of simulation object a given SPFVertex
  * represents.
@@ -138,7 +133,6 @@
 
 /**
  * @brief Set the Vertex Type field of a SPFVertex object.
- * @internal
  *
  * The Vertex Type describes the kind of simulation object a given SPFVertex
  * represents.
@@ -150,7 +144,6 @@
 
 /**
  * @brief Get the Vertex ID field of a SPFVertex object.
- * @internal
  *
  * The Vertex ID uniquely identifies the simulation object a given SPFVertex
  * represents.  Typically, this is the Router ID for SPFVertex objects 
@@ -166,7 +159,6 @@
 
 /**
  * @brief Set the Vertex ID field of a SPFVertex object.
- * @internal
  *
  * The Vertex ID uniquely identifies the simulation object a given SPFVertex
  * represents.  Typically, this is the Router ID for SPFVertex objects 
@@ -185,7 +177,6 @@
  * @brief Get the Global Router Link State Advertisement returned by the 
  * Global Router represented by this SPFVertex during the route discovery 
  * process.
- * @internal
  *
  * @see GlobalRouter
  * @see GlobalRoutingLSA
@@ -199,7 +190,6 @@
  * @brief Set the Global Router Link State Advertisement returned by the 
  * Global Router represented by this SPFVertex during the route discovery 
  * process.
- * @internal
  *
  * @see SPFVertex::GetLSA ()
  * @see GlobalRouter
@@ -213,7 +203,6 @@
 
 /**
  * @brief Get the distance from the root vertex to "this" SPFVertex object.
- * @internal
  *
  * Each router in the simulation is associated with an SPFVertex object.  When
  * calculating routes, each of these routers is, in turn, chosen as the "root"
@@ -236,7 +225,6 @@
 
 /**
  * @brief Set the distance from the root vertex to "this" SPFVertex object.
- * @internal
  *
  * Each router in the simulation is associated with an SPFVertex object.  When
  * calculating routes, each of these routers is, in turn, chosen as the "root"
@@ -258,7 +246,6 @@
 /**
  * @brief Set the IP address and outgoing interface index that should be used 
  * to begin forwarding packets from the root SPFVertex to "this" SPFVertex.
- * @internal
  *
  * Each router node in the simulation is associated with an SPFVertex object.
  * When calculating routes, each of these routers is, in turn, chosen as the 
@@ -304,7 +291,6 @@
 /**
  * @brief Set the IP address and outgoing interface index that should be used 
  * to begin forwarding packets from the root SPFVertex to "this" SPFVertex.
- * @internal
  *
  * Each router node in the simulation is associated with an SPFVertex object.
  * When calculating routes, each of these routers is, in turn, chosen as the 
@@ -388,7 +374,6 @@
 /**
  * @brief Get a pointer to the SPFVector that is the parent of "this" 
  * SPFVertex.
- * @internal
  *
  * Each router node in the simulation is associated with an SPFVertex object.
  * When calculating routes, each of these routers is, in turn, chosen as the 
@@ -410,7 +395,6 @@
 /**
  * @brief Set the pointer to the SPFVector that is the parent of "this" 
  * SPFVertex.
- * @internal
  *
  * Each router node in the simulation is associated with an SPFVertex object.
  * When calculating routes, each of these routers is, in turn, chosen as the 
@@ -438,7 +422,6 @@
 
 /**
  * @brief Get the number of children of "this" SPFVertex.
- * @internal
  *
  * Each router node in the simulation is associated with an SPFVertex object.
  * When calculating routes, each of these routers is, in turn, chosen as the 
@@ -461,7 +444,6 @@
 /**
  * @brief Get a borrowed SPFVertex pointer to the specified child of "this" 
  * SPFVertex.
- * @internal
  *
  * Each router node in the simulation is associated with an SPFVertex object.
  * When calculating routes, each of these routers is, in turn, chosen as the 
@@ -490,7 +472,6 @@
 /**
  * @brief Get a borrowed SPFVertex pointer to the specified child of "this" 
  * SPFVertex.
- * @internal
  *
  * Each router node in the simulation is associated with an SPFVertex object.
  * When calculating routes, each of these routers is, in turn, chosen as the 
@@ -599,7 +580,6 @@
 public:
 /**
  * @brief Construct an empty Global Router Manager Link State Database.
- * @internal
  *
  * The database map composing the Link State Database is initialized in
  * this constructor.
@@ -608,7 +588,6 @@
 
 /**
  * @brief Destroy an empty Global Router Manager Link State Database.
- * @internal
  *
  * The database map is walked and all of the Link State Advertisements stored
  * in the database are freed; then the database map itself is clear ()ed to
@@ -619,7 +598,6 @@
 /**
  * @brief Insert an IP address / Link State Advertisement pair into the Link
  * State Database.
- * @internal
  *
  * The IPV4 address and the GlobalRoutingLSA given as parameters are converted
  * to an STL pair and are inserted into the database map.
@@ -635,7 +613,6 @@
 /**
  * @brief Look up the Link State Advertisement associated with the given
  * link state ID (address).
- * @internal
  *
  * The database map is searched for the given IPV4 address and corresponding
  * GlobalRoutingLSA is returned.
@@ -653,7 +630,6 @@
  * link state ID (address).  This is a variation of the GetLSA call
  * to allow the LSA to be found by matching addr with the LinkData field
  * of the TransitNetwork link record.
- * @internal
  *
  * @see GetLSA
  * @param addr The IP address associated with the LSA.  Typically the Router 
@@ -665,7 +641,6 @@
 
 /**
  * @brief Set all LSA flags to an initialized state, for SPF computation
- * @internal
  *
  * This function walks the database and resets the status flags of all of the
  * contained Link State Advertisements to LSA_SPF_NOT_EXPLORED.  This is done
@@ -680,7 +655,6 @@
   /**
    * @brief Look up the External Link State Advertisement associated with the given
    * index.
-   * @internal
    *
    * The external database map is searched for the given index and corresponding
    * GlobalRoutingLSA is returned.
@@ -692,7 +666,6 @@
   GlobalRoutingLSA* GetExtLSA (uint32_t index) const;
   /**
    * @brief Get the number of External Link State Advertisements.
-   * @internal
    *
    * @see GlobalRoutingLSA
    * @returns the number of External Link State Advertisements.
@@ -745,34 +718,28 @@
  *
  * \todo  separate manually assigned static routes from static routes that
  * the global routing code injects, and only delete the latter
- * @internal
- *
  */
   virtual void DeleteGlobalRoutes ();
 
 /**
  * @brief Build the routing database by gathering Link State Advertisements
  * from each node exporting a GlobalRouter interface.
- * @internal
  */
   virtual void BuildGlobalRoutingDatabase ();
 
 /**
  * @brief Compute routes using a Dijkstra SPF computation and populate
  * per-node forwarding tables
- * @internal
  */
   virtual void InitializeRoutes ();
 
 /**
  * @brief Debugging routine; allow client code to supply a pre-built LSDB
- * @internal
  */
   void DebugUseLsdb (GlobalRouteManagerLSDB*);
 
 /**
  * @brief Debugging routine; call the core SPF from the unit tests
- * @internal
  * @param root the root node to start calculations
  */
   void DebugSPFCalculate (Ipv4Address root);
diff -Naur ns-3.21/src/internet/model/global-router-interface.cc ns-3.22/src/internet/model/global-router-interface.cc
--- ns-3.21/src/internet/model/global-router-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/global-router-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include "global-router-interface.h"
 #include <vector>
 
-NS_LOG_COMPONENT_DEFINE ("GlobalRouter");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("GlobalRouter");
+
 // ---------------------------------------------------------------------------
 //
 // GlobalRoutingLinkRecord Implementation
diff -Naur ns-3.21/src/internet/model/icmpv4.cc ns-3.22/src/internet/model/icmpv4.cc
--- ns-3.21/src/internet/model/icmpv4.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/icmpv4.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/packet.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Icmpv4Header");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Icmpv4Header");
+
 /********************************************************
  *        Icmpv4Header
  ********************************************************/
diff -Naur ns-3.21/src/internet/model/icmpv6-header.cc ns-3.22/src/internet/model/icmpv6-header.cc
--- ns-3.21/src/internet/model/icmpv6-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/icmpv6-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,11 +26,11 @@
 
 #include "icmpv6-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("Icmpv6Header");
-
 namespace ns3
 {
 
+NS_LOG_COMPONENT_DEFINE ("Icmpv6Header");
+
 NS_OBJECT_ENSURE_REGISTERED (Icmpv6Header);
 
 TypeId Icmpv6Header::GetTypeId ()
diff -Naur ns-3.21/src/internet/model/icmpv6-l4-protocol.cc ns-3.22/src/internet/model/icmpv6-l4-protocol.cc
--- ns-3.21/src/internet/model/icmpv6-l4-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/icmpv6-l4-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,4 +1,4 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
@@ -39,10 +39,10 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Icmpv6L4Protocol);
-
 NS_LOG_COMPONENT_DEFINE ("Icmpv6L4Protocol");
 
+NS_OBJECT_ENSURE_REGISTERED (Icmpv6L4Protocol);
+
 const uint8_t Icmpv6L4Protocol::PROT_NUMBER = 58;
 
 const uint8_t Icmpv6L4Protocol::MAX_INITIAL_RTR_ADVERT_INTERVAL = 16;
@@ -1003,8 +1003,6 @@
   else
     {
       NS_LOG_LOGIC ("Destination is Multicast, using DelayedSendMessage");
-      std::cout << Simulator::Now ().GetSeconds () << " - " << this << " - " << m_node->GetId () << " - ";
-      std::cout << src << " -> " << dst << " - " << *p << std::endl;
       Simulator::Schedule (Time (MilliSeconds (m_solicitationJitter->GetValue ())), &Icmpv6L4Protocol::DelayedSendMessage, this, p, src, dst, 255);
     }
 }
diff -Naur ns-3.21/src/internet/model/ip-l4-protocol.cc ns-3.22/src/internet/model/ip-l4-protocol.cc
--- ns-3.21/src/internet/model/ip-l4-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ip-l4-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("IpL4Protocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("IpL4Protocol");
+
 NS_OBJECT_ENSURE_REGISTERED (IpL4Protocol);
 
 TypeId 
diff -Naur ns-3.21/src/internet/model/ipv4-address-generator.cc ns-3.22/src/internet/model/ipv4-address-generator.cc
--- ns-3.21/src/internet/model/ipv4-address-generator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-address-generator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,12 +23,11 @@
 #include "ns3/simulation-singleton.h"
 #include "ipv4-address-generator.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4AddressGenerator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4AddressGenerator");
+
 /**
- * \internal
  * \ingroup address
  *
  * \brief Implementation class of Ipv4AddressGenerator
@@ -43,7 +42,6 @@
   virtual ~Ipv4AddressGeneratorImpl ();
 
   /**
-   * \internal
    * \brief Initialise the base network, mask and address for the generator
    *
    * The first call to NextAddress() or GetAddress() will return the
@@ -57,7 +55,6 @@
              const Ipv4Address addr);
 
   /**
-   * \internal
    * \brief Get the current network of the given Ipv4Mask
    *
    * Does not change the internal state; this just peeks at the current
@@ -69,7 +66,6 @@
   Ipv4Address GetNetwork (const Ipv4Mask mask) const;
 
   /**
-   * \internal
    * \brief Get the next network according to the given Ipv4Mask
    *
    * This operation is a pre-increment, meaning that the internal state
@@ -84,7 +80,6 @@
   Ipv4Address NextNetwork (const Ipv4Mask mask);
 
   /**
-   * \internal
    * \brief Set the address for the given mask
    *
    * \param addr The address to set for the current mask
@@ -93,7 +88,6 @@
   void InitAddress (const Ipv4Address addr, const Ipv4Mask mask);
 
   /**
-   * \internal
    * \brief Allocate the next Ipv4Address for the configured network and mask
    *
    * This operation is a post-increment, meaning that the first address
@@ -105,7 +99,6 @@
   Ipv4Address NextAddress (const Ipv4Mask mask);
 
   /**
-   * \internal
    * \brief Get the Ipv4Address that will be allocated upon NextAddress ()
    *
    * Does not change the internal state; just is used to peek the next
@@ -117,13 +110,11 @@
   Ipv4Address GetAddress (const Ipv4Mask mask) const;
 
   /**
-   * \internal
    * \brief Reset the networks and Ipv4Address to zero
    */
   void Reset (void);
 
   /**
-   * \internal
    * \brief Add the Ipv4Address to the list of IPv4 entries
    *
    * Typically, this is used by external address allocators that want
@@ -136,16 +127,14 @@
   bool AddAllocated (const Ipv4Address addr);
 
   /**
-   * \internal
    * \brief Used to turn off fatal errors and assertions, for testing
    */
   void TestMode (void);
 private:
-  static const uint32_t N_BITS = 32;  //!< /internal the number of bits in the address
-  static const uint32_t MOST_SIGNIFICANT_BIT = 0x80000000; //!< /internal MSB set to 1
+  static const uint32_t N_BITS = 32;  //!< the number of bits in the address
+  static const uint32_t MOST_SIGNIFICANT_BIT = 0x80000000; //!< MSB set to 1
 
   /**
-   * \internal
    * \brief Create an index number for the network mask
    * \param mask the mask to index
    * \returns an index
@@ -153,34 +142,32 @@
   uint32_t MaskToIndex (Ipv4Mask mask) const;
 
   /**
-   * \internal
    * \brief This class holds the state for a given network
    */
   class NetworkState
   {
 public:
-    uint32_t mask;      //!< /internal the network mask
-    uint32_t shift;     //!< /internal a shift
-    uint32_t network;   //!< /internal the network
-    uint32_t addr;      //!< /internal the address
-    uint32_t addrMax;   //!< /internal the maximum address
+    uint32_t mask;      //!< the network mask
+    uint32_t shift;     //!< a shift
+    uint32_t network;   //!< the network
+    uint32_t addr;      //!< the address
+    uint32_t addrMax;   //!< the maximum address
   };
 
-  NetworkState m_netTable[N_BITS]; //!< /internal the available networks
+  NetworkState m_netTable[N_BITS]; //!< the available networks
 
   /**
-   * \internal
    * \brief This class holds the allocated addresses
    */
   class Entry
   {
 public:
-    uint32_t addrLow;  //!< /internal the lowest allocated address
-    uint32_t addrHigh; //!< /internal the highest allocated address
+    uint32_t addrLow;  //!< the lowest allocated address
+    uint32_t addrHigh; //!< the highest allocated address
   };
 
-  std::list<Entry> m_entries; //!< /internal contained of allocated addresses
-  bool m_test; //!< /internal test mode (if true)
+  std::list<Entry> m_entries; //!< contained of allocated addresses
+  bool m_test; //!< test mode (if true)
 };
 
 Ipv4AddressGeneratorImpl::Ipv4AddressGeneratorImpl () 
diff -Naur ns-3.21/src/internet/model/ipv4.cc ns-3.22/src/internet/model/ipv4.cc
--- ns-3.21/src/internet/model/ipv4.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ipv4.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4);
 
 TypeId 
diff -Naur ns-3.21/src/internet/model/ipv4-end-point.cc ns-3.22/src/internet/model/ipv4-end-point.cc
--- ns-3.21/src/internet/model/ipv4-end-point.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-end-point.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/log.h"
 #include "ns3/simulator.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4EndPoint");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4EndPoint");
+
 Ipv4EndPoint::Ipv4EndPoint (Ipv4Address address, uint16_t port)
   : m_localAddr (address), 
     m_localPort (port),
diff -Naur ns-3.21/src/internet/model/ipv4-global-routing.cc ns-3.22/src/internet/model/ipv4-global-routing.cc
--- ns-3.21/src/internet/model/ipv4-global-routing.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-global-routing.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ipv4-global-routing.h"
 #include "global-route-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4GlobalRouting");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4GlobalRouting");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4GlobalRouting);
 
 TypeId 
diff -Naur ns-3.21/src/internet/model/ipv4-header.cc ns-3.22/src/internet/model/ipv4-header.cc
--- ns-3.21/src/internet/model/ipv4-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/header.h"
 #include "ipv4-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4Header");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4Header");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4Header);
 
 Ipv4Header::Ipv4Header ()
diff -Naur ns-3.21/src/internet/model/ipv4-interface-address.cc ns-3.22/src/internet/model/ipv4-interface-address.cc
--- ns-3.21/src/internet/model/ipv4-interface-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-interface-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/assert.h"
 #include "ipv4-interface-address.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4InterfaceAddress");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4InterfaceAddress");
+
 Ipv4InterfaceAddress::Ipv4InterfaceAddress ()
   : m_scope (GLOBAL), 
     m_secondary (false)
diff -Naur ns-3.21/src/internet/model/ipv4-interface.cc ns-3.22/src/internet/model/ipv4-interface.cc
--- ns-3.21/src/internet/model/ipv4-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ns3/node.h"
 #include "ns3/pointer.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4Interface");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4Interface");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4Interface);
 
 TypeId 
diff -Naur ns-3.21/src/internet/model/ipv4-interface.h ns-3.22/src/internet/model/ipv4-interface.h
--- ns-3.21/src/internet/model/ipv4-interface.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-interface.h	2015-02-05 15:46:22.000000000 -0800
@@ -78,6 +78,7 @@
    * \returns the underlying NetDevice. This method cannot return zero.
    */
   Ptr<NetDevice> GetDevice (void) const;
+
   /**
    * \return ARP cache used by this interface
    */
diff -Naur ns-3.21/src/internet/model/ipv4-l3-protocol.cc ns-3.22/src/internet/model/ipv4-l3-protocol.cc
--- ns-3.21/src/internet/model/ipv4-l3-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-l3-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,10 +40,10 @@
 #include "ipv4-interface.h"
 #include "ipv4-raw-socket-impl.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4L3Protocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4L3Protocol");
+
 const uint16_t Ipv4L3Protocol::PROT_NUMBER = 0x0800;
 
 NS_OBJECT_ENSURE_REGISTERED (Ipv4L3Protocol);
@@ -54,36 +54,57 @@
   static TypeId tid = TypeId ("ns3::Ipv4L3Protocol")
     .SetParent<Ipv4> ()
     .AddConstructor<Ipv4L3Protocol> ()
-    .AddAttribute ("DefaultTos", "The TOS value set by default on all outgoing packets generated on this node.",
+    .AddAttribute ("DefaultTos",
+                   "The TOS value set by default on "
+                   "all outgoing packets generated on this node.",
                    UintegerValue (0),
                    MakeUintegerAccessor (&Ipv4L3Protocol::m_defaultTos),
                    MakeUintegerChecker<uint8_t> ())
-    .AddAttribute ("DefaultTtl", "The TTL value set by default on all outgoing packets generated on this node.",
+    .AddAttribute ("DefaultTtl",
+                   "The TTL value set by default on "
+                   "all outgoing packets generated on this node.",
                    UintegerValue (64),
                    MakeUintegerAccessor (&Ipv4L3Protocol::m_defaultTtl),
                    MakeUintegerChecker<uint8_t> ())
     .AddAttribute ("FragmentExpirationTimeout",
-                   "When this timeout expires, the fragments will be cleared from the buffer.",
+                   "When this timeout expires, the fragments "
+                   "will be cleared from the buffer.",
                    TimeValue (Seconds (30)),
                    MakeTimeAccessor (&Ipv4L3Protocol::m_fragmentExpirationTimeout),
                    MakeTimeChecker ())
-    .AddTraceSource ("Tx", "Send ipv4 packet to outgoing interface.",
-                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_txTrace))
-    .AddTraceSource ("Rx", "Receive ipv4 packet from incoming interface.",
-                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_rxTrace))
-    .AddTraceSource ("Drop", "Drop ipv4 packet",
-                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_dropTrace))
-    .AddAttribute ("InterfaceList", "The set of Ipv4 interfaces associated to this Ipv4 stack.",
+    .AddTraceSource ("Tx",
+                     "Send ipv4 packet to outgoing interface.",
+                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_txTrace),
+                     "ns3::Ipv4L3Protocol::TxRxTracedCallback")
+    .AddTraceSource ("Rx",
+                     "Receive ipv4 packet from incoming interface.",
+                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_rxTrace),
+                     "ns3::Ipv4L3Protocol::TxRxTracedCallback")
+    .AddTraceSource ("Drop",
+                     "Drop ipv4 packet",
+                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_dropTrace),
+                     "ns3::Ipv4L3Protocol::DropTracedCallback")
+    .AddAttribute ("InterfaceList",
+                   "The set of Ipv4 interfaces associated to this Ipv4 stack.",
                    ObjectVectorValue (),
                    MakeObjectVectorAccessor (&Ipv4L3Protocol::m_interfaces),
                    MakeObjectVectorChecker<Ipv4Interface> ())
 
-    .AddTraceSource ("SendOutgoing", "A newly-generated packet by this node is about to be queued for transmission",
-                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_sendOutgoingTrace))
-    .AddTraceSource ("UnicastForward", "A unicast IPv4 packet was received by this node and is being forwarded to another node",
-                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_unicastForwardTrace))
-    .AddTraceSource ("LocalDeliver", "An IPv4 packet was received by/for this node, and it is being forward up the stack",
-                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_localDeliverTrace))
+    .AddTraceSource ("SendOutgoing",
+                     "A newly-generated packet by this node is "
+                     "about to be queued for transmission",
+                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_sendOutgoingTrace),
+                     "ns3::Ipv4L3Protocol::SentTracedCallback")
+    .AddTraceSource ("UnicastForward",
+                     "A unicast IPv4 packet was received by this node "
+                     "and is being forwarded to another node",
+                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_unicastForwardTrace),
+                     "ns3::Ipv4L3Protocol::SentTracedCallback")
+    .AddTraceSource ("LocalDeliver",
+                     "An IPv4 packet was received by/for this node, "
+                     "and it is being forward up the stack",
+                     MakeTraceSourceAccessor (&Ipv4L3Protocol::m_localDeliverTrace),
+                     "ns3::Ipv4L3Protocol::SentTracedCallback")
 
   ;
   return tid;
diff -Naur ns-3.21/src/internet/model/ipv4-l3-protocol.h ns-3.22/src/internet/model/ipv4-l3-protocol.h
--- ns-3.21/src/internet/model/ipv4-l3-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-l3-protocol.h	2015-02-05 15:46:22.000000000 -0800
@@ -237,6 +237,42 @@
    */
   bool IsUnicast (Ipv4Address ad) const;
 
+  /**
+   * TracedCallback signature for packet send, forward, or local deliver events.
+   *
+   * \param [in] header The Ipv6Header.
+   * \param [in] packet The packet.
+   * \param [in] interface
+   */
+  typedef void (* SentTracedCallback)
+    (const Ipv4Header & header, const Ptr<const Packet> packet,
+     const uint32_t interface);
+   
+  /**
+   * TracedCallback signature for packet transmission or reception events.
+   *
+   * \param [in] packet The packet.
+   * \param [in] ipv4
+   * \param [in] interface
+   */
+  typedef void (* TxRxTracedCallback)
+    (const Ptr<const Packet> packet, const Ptr<const Ipv4> ipv4, 
+     const uint32_t interface);
+
+  /**
+   * TracedCallback signature for packet drop events.
+   *
+   * \param [in] header The Ipv4Header.
+   * \param [in] packet The packet.
+   * \param [in] reason The reason the packet was dropped.
+   * \param [in] ipv4
+   * \param [in] interface
+   */
+  typedef void (* DropTracedCallback)
+    (const Ipv4Header & header, const Ptr<const Packet> packet,
+     const DropReason reason, const Ptr<const Ipv4> ipv4,
+     const uint32_t interface);
+   
 protected:
 
   virtual void DoDispose (void);
@@ -315,7 +351,7 @@
    * \brief Forward a multicast packet.
    * \param mrtentry route
    * \param p packet to forward
-   * \param header IPv6 header to add to the packet
+   * \param header IPv4 header to add to the packet
    */
   void
   IpMulticastForward (Ptr<Ipv4MulticastRoute> mrtentry, 
diff -Naur ns-3.21/src/internet/model/ipv4-list-routing.cc ns-3.22/src/internet/model/ipv4-list-routing.cc
--- ns-3.21/src/internet/model/ipv4-list-routing.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-list-routing.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/ipv4-static-routing.h"
 #include "ipv4-list-routing.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4ListRouting");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4ListRouting");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4ListRouting);
 
 TypeId
diff -Naur ns-3.21/src/internet/model/ipv4-packet-info-tag.cc ns-3.22/src/internet/model/ipv4-packet-info-tag.cc
--- ns-3.21/src/internet/model/ipv4-packet-info-tag.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-packet-info-tag.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ipv4-packet-info-tag.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4PacketInfoTag");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4PacketInfoTag");
+
 Ipv4PacketInfoTag::Ipv4PacketInfoTag ()
   : m_addr (Ipv4Address ()),
     m_spec_dst (Ipv4Address ()),
diff -Naur ns-3.21/src/internet/model/ipv4-packet-probe.cc ns-3.22/src/internet/model/ipv4-packet-probe.cc
--- ns-3.21/src/internet/model/ipv4-packet-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-packet-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4PacketProbe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4PacketProbe");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4PacketProbe);
 
 TypeId
@@ -41,11 +41,14 @@
     .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))
+                      "The packet plus its IPv4 object and interface "
+                      "that serve as the output for this probe",
+                      MakeTraceSourceAccessor (&Ipv4PacketProbe::m_output),
+                      "ns3::Ipv4PacketProbe::TracedCallback")
     .AddTraceSource ( "OutputBytes",
                       "The number of bytes in the packet",
-                      MakeTraceSourceAccessor (&Ipv4PacketProbe::m_outputBytes))
+                      MakeTraceSourceAccessor (&Ipv4PacketProbe::m_outputBytes),
+                      "ns3::Packet::PacketSizeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/internet/model/ipv4-packet-probe.h ns-3.22/src/internet/model/ipv4-packet-probe.h
--- ns-3.21/src/internet/model/ipv4-packet-probe.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-packet-probe.h	2015-02-05 15:46:22.000000000 -0800
@@ -93,6 +93,17 @@
    */
   virtual void ConnectByPath (std::string path);
 
+  /**
+   * TracedCallback signature for PacketProbe events.
+   *
+   * \param [in] packet The packet.
+   * \param [in] ipv4 
+   * \param [in] interface
+   */
+  typedef void (* TracedCallback)
+    (const Ptr<const Packet> packet, const Ptr<const Ipv4> ipv4,
+     const uint32_t interface);
+
 private:
   /**
    * \brief Method to connect to an underlying ns3::TraceSource with
@@ -101,15 +112,13 @@
    * \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);
 
   /// Traced Callback: the packet, the Ipv4 object and the interface.
-  TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_output;
+  ns3::TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_output;
   /// Traced Callback: the previous packet's size and the actual packet's size.
-  TracedCallback<uint32_t, uint32_t> m_outputBytes;
+  ns3::TracedCallback<uint32_t, uint32_t> m_outputBytes;
 
   /// The traced packet.
   Ptr<const Packet> m_packet;
diff -Naur ns-3.21/src/internet/model/ipv4-raw-socket-factory.cc ns-3.22/src/internet/model/ipv4-raw-socket-factory.cc
--- ns-3.21/src/internet/model/ipv4-raw-socket-factory.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-raw-socket-factory.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4RawSocketFactory");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4RawSocketFactory");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketFactory);
 
 TypeId Ipv4RawSocketFactory::GetTypeId (void)
diff -Naur ns-3.21/src/internet/model/ipv4-raw-socket-factory-impl.cc ns-3.22/src/internet/model/ipv4-raw-socket-factory-impl.cc
--- ns-3.21/src/internet/model/ipv4-raw-socket-factory-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-raw-socket-factory-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/socket.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4RawSocketFactoryImpl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4RawSocketFactoryImpl");
+
 Ptr<Socket> 
 Ipv4RawSocketFactoryImpl::CreateSocket (void)
 {
diff -Naur ns-3.21/src/internet/model/ipv4-raw-socket-impl.cc ns-3.22/src/internet/model/ipv4-raw-socket-impl.cc
--- ns-3.21/src/internet/model/ipv4-raw-socket-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-raw-socket-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -13,10 +13,10 @@
 #include "ns3/boolean.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4RawSocketImpl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4RawSocketImpl");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4RawSocketImpl);
 
 TypeId 
diff -Naur ns-3.21/src/internet/model/ipv4-route.cc ns-3.22/src/internet/model/ipv4-route.cc
--- ns-3.21/src/internet/model/ipv4-route.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-route.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/assert.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4Route");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4Route");
+
 Ipv4Route::Ipv4Route ()
 {
   NS_LOG_FUNCTION (this);
@@ -161,17 +161,6 @@
     }
 }
 
-uint32_t
-Ipv4MulticastRoute::GetOutputTtl (uint32_t oif)
-{
-  NS_LOG_FUNCTION (this << oif);
-  // We keep this interface around for compatibility (for now)
-  std::map<uint32_t, uint32_t>::const_iterator iter = m_ttls.find (oif);
-  if (iter == m_ttls.end ())
-    return((uint32_t)MAX_TTL);
-  return(iter->second);
-}
-
 std::map<uint32_t, uint32_t>
 Ipv4MulticastRoute::GetOutputTtlMap () const
 {
diff -Naur ns-3.21/src/internet/model/ipv4-route.h ns-3.22/src/internet/model/ipv4-route.h
--- ns-3.21/src/internet/model/ipv4-route.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-route.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,7 +25,6 @@
 
 #include "ns3/simple-ref-count.h"
 #include "ns3/ipv4-address.h"
-#include "ns3/deprecated.h"
 
 namespace ns3 {
 
@@ -149,12 +148,6 @@
    * \param ttl time-to-live for this route
    */
   void SetOutputTtl (uint32_t oif, uint32_t ttl);
-  /**
-   * \param oif outgoing interface
-   * \return TTL for this route
-   * \deprecated
-   */
-  uint32_t GetOutputTtl (uint32_t oif) NS_DEPRECATED;
 
   /**
    * \return map of output interface Ids and TTLs for this route
diff -Naur ns-3.21/src/internet/model/ipv4-routing-protocol.cc ns-3.22/src/internet/model/ipv4-routing-protocol.cc
--- ns-3.21/src/internet/model/ipv4-routing-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-routing-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "ipv4-routing-protocol.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4RoutingProtocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4RoutingProtocol");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4RoutingProtocol);
 
 TypeId Ipv4RoutingProtocol::GetTypeId (void)
diff -Naur ns-3.21/src/internet/model/ipv4-routing-table-entry.cc ns-3.22/src/internet/model/ipv4-routing-table-entry.cc
--- ns-3.21/src/internet/model/ipv4-routing-table-entry.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-routing-table-entry.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/assert.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4RoutingTableEntry");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4RoutingTableEntry");
+
 /*****************************************************
  *     Network Ipv4RoutingTableEntry
  *****************************************************/
diff -Naur ns-3.21/src/internet/model/ipv4-static-routing.cc ns-3.22/src/internet/model/ipv4-static-routing.cc
--- ns-3.21/src/internet/model/ipv4-static-routing.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv4-static-routing.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,12 +34,12 @@
 #include "ipv4-static-routing.h"
 #include "ipv4-routing-table-entry.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4StaticRouting");
-
 using std::make_pair;
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4StaticRouting");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4StaticRouting);
 
 TypeId
diff -Naur ns-3.21/src/internet/model/ipv6-address-generator.cc ns-3.22/src/internet/model/ipv6-address-generator.cc
--- ns-3.21/src/internet/model/ipv6-address-generator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-address-generator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,12 +24,11 @@
 #include "ns3/simulation-singleton.h"
 #include "ipv6-address-generator.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6AddressGenerator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6AddressGenerator");
+
 /**
- * \internal
  * \ingroup address
  *
  * \brief Implementation class of Ipv6AddressGenerator
@@ -45,7 +44,6 @@
   virtual ~Ipv6AddressGeneratorImpl ();
 
   /**
-   * \internal
    * \brief Initialise the base network and interfaceId for the generator
    *
    * The first call to NextAddress() or GetAddress() will return the
@@ -59,7 +57,6 @@
              const Ipv6Address interfaceId);
 
   /**
-   * \internal
    * \brief Get the next network according to the given Ipv6Prefix
    *
    * This operation is a pre-increment, meaning that the internal state
@@ -74,7 +71,6 @@
   Ipv6Address NextNetwork (const Ipv6Prefix prefix);
 
   /**
-   * \internal
    * \brief Get the current network of the given Ipv6Prefix
    *
    * Does not change the internal state; this just peeks at the current
@@ -86,7 +82,6 @@
   Ipv6Address GetNetwork (const Ipv6Prefix prefix) const;
 
   /**
-   * \internal
    * \brief Set the interfaceId for the given Ipv6Prefix
    *
    * \param interfaceId The interfaceId to set for the current Ipv6Prefix
@@ -95,7 +90,6 @@
   void InitAddress (const Ipv6Address interfaceId, const Ipv6Prefix prefix);
 
   /**
-   * \internal
    * \brief Get the Ipv6Address that will be allocated upon NextAddress ()
    *
    * Does not change the internal state; just is used to peek the next
@@ -107,7 +101,6 @@
   Ipv6Address GetAddress (const Ipv6Prefix prefix) const;
 
   /**
-   * \internal
    * \brief Allocate the next Ipv6Address for the configured network and prefix
    *
    * This operation is a post-increment, meaning that the first address
@@ -119,13 +112,11 @@
   Ipv6Address NextAddress (const Ipv6Prefix prefix);
 
   /**
-   * \internal
    * \brief Reset the networks and Ipv6Address to zero
    */
   void Reset (void);
 
   /**
-   * \internal
    * \brief Add the Ipv6Address to the list of IPv6 entries
    *
    * Typically, this is used by external address allocators that want
@@ -138,17 +129,15 @@
   bool AddAllocated (const Ipv6Address addr);
 
   /**
-   * \internal
    * \brief Used to turn off fatal errors and assertions, for testing
    */
   void TestMode (void);
 
 private:
-  static const uint32_t N_BITS = 128; //!< /internal the number of bits in the address
-  static const uint32_t MOST_SIGNIFICANT_BIT = 0x80; //!< /internal MSB set to 1
+  static const uint32_t N_BITS = 128; //!< the number of bits in the address
+  static const uint32_t MOST_SIGNIFICANT_BIT = 0x80; //!< MSB set to 1
 
   /**
-   * \internal
    * \brief Create an index number for the prefix
    * \param prefix the prefix to index
    * \returns an index
@@ -156,35 +145,33 @@
   uint32_t PrefixToIndex (Ipv6Prefix prefix) const;
 
   /**
-   * \internal
    * \brief This class holds the state for a given network
    */
   class NetworkState
   {
 public:
-    uint8_t prefix[16];  //!< /internal the network prefix
-    uint32_t shift;      //!< /internal a shift
-    uint8_t network[16]; //!< /internal the network
-    uint8_t addr[16];    //!< /internal the address
-    uint8_t addrMax[16]; //!< /internal the maximum address
+    uint8_t prefix[16];  //!< the network prefix
+    uint32_t shift;      //!< a shift
+    uint8_t network[16]; //!< the network
+    uint8_t addr[16];    //!< the address
+    uint8_t addrMax[16]; //!< the maximum address
   };
 
-  NetworkState m_netTable[N_BITS]; //!< /internal the available networks
+  NetworkState m_netTable[N_BITS]; //!< the available networks
 
   /**
-   * \internal
    * \brief This class holds the allocated addresses
    */
   class Entry
   {
 public:
-    uint8_t addrLow[16];  //!< /internal the lowest allocated address
-    uint8_t addrHigh[16]; //!< /internal the highest allocated address
+    uint8_t addrLow[16];  //!< the lowest allocated address
+    uint8_t addrHigh[16]; //!< the highest allocated address
   };
 
-  std::list<Entry> m_entries; //!< /internal contained of allocated addresses
-  Ipv6Address m_base; //!< /internal base address
-  bool m_test; //!< /internal test mode (if true)
+  std::list<Entry> m_entries; //!< contained of allocated addresses
+  Ipv6Address m_base; //!< base address
+  bool m_test; //!< test mode (if true)
 };
 
 Ipv6AddressGeneratorImpl::Ipv6AddressGeneratorImpl ()
diff -Naur ns-3.21/src/internet/model/ipv6-autoconfigured-prefix.cc ns-3.22/src/internet/model/ipv6-autoconfigured-prefix.cc
--- ns-3.21/src/internet/model/ipv6-autoconfigured-prefix.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-autoconfigured-prefix.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,11 +24,11 @@
 #include "ipv6-l3-protocol.h"
 #include "ipv6-autoconfigured-prefix.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6AutoconfiguredPrefix");
-
 namespace ns3
 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6AutoconfiguredPrefix");
+
 uint32_t Ipv6AutoconfiguredPrefix::m_prefixId = 0;
 
 Ipv6AutoconfiguredPrefix::Ipv6AutoconfiguredPrefix (Ptr<Node> node, uint32_t interface, Ipv6Address prefix, Ipv6Prefix mask, uint32_t preferredLifeTime, uint32_t validLifeTime, Ipv6Address router)
diff -Naur ns-3.21/src/internet/model/ipv6-end-point-demux.cc ns-3.22/src/internet/model/ipv6-end-point-demux.cc
--- ns-3.21/src/internet/model/ipv6-end-point-demux.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-end-point-demux.cc	2015-02-05 15:46:22.000000000 -0800
@@ -197,6 +197,10 @@
 
       if (endP->GetBoundNetDevice ())
         {
+          if (!incomingInterface)
+            {
+              continue;
+            }
           if (endP->GetBoundNetDevice () != incomingInterface->GetDevice ())
             {
               NS_LOG_LOGIC ("Skipping endpoint " << &endP
diff -Naur ns-3.21/src/internet/model/ipv6-extension.cc ns-3.22/src/internet/model/ipv6-extension.cc
--- ns-3.21/src/internet/model/ipv6-extension.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-extension.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,10 +40,10 @@
 #include "ipv6-option.h"
 #include "udp-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6Extension");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6Extension");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv6Extension);
 
 TypeId Ipv6Extension::GetTypeId ()
diff -Naur ns-3.21/src/internet/model/ipv6-header.cc ns-3.22/src/internet/model/ipv6-header.cc
--- ns-3.21/src/internet/model/ipv6-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include "ns3/address-utils.h"
 #include "ipv6-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6Header");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6Header");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv6Header);
 
 Ipv6Header::Ipv6Header ()
diff -Naur ns-3.21/src/internet/model/ipv6-interface.cc ns-3.22/src/internet/model/ipv6-interface.cc
--- ns-3.21/src/internet/model/ipv6-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -505,5 +505,11 @@
   /* not found, maybe address has expired */
 }
 
+Ptr<NdiscCache> Ipv6Interface::GetNdiscCache () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_ndCache;
+}
+
 } /* namespace ns3 */
 
diff -Naur ns-3.21/src/internet/model/ipv6-interface.h ns-3.22/src/internet/model/ipv6-interface.h
--- ns-3.21/src/internet/model/ipv6-interface.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-interface.h	2015-02-05 15:46:22.000000000 -0800
@@ -250,6 +250,12 @@
    */
   void SetNsDadUid (Ipv6Address address, uint32_t uid);
 
+  /**
+   * \return NDISC cache used by this interface
+   */
+  Ptr<NdiscCache> GetNdiscCache () const;
+
+
 protected:
   /**
    * \brief Dispose this object.
diff -Naur ns-3.21/src/internet/model/ipv6-l3-protocol.cc ns-3.22/src/internet/model/ipv6-l3-protocol.cc
--- ns-3.21/src/internet/model/ipv6-l3-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-l3-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -49,10 +49,10 @@
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (Ipv6L3Protocol);
-
 NS_LOG_COMPONENT_DEFINE ("Ipv6L3Protocol");
 
+NS_OBJECT_ENSURE_REGISTERED (Ipv6L3Protocol);
+
 const uint16_t Ipv6L3Protocol::PROT_NUMBER = 0x86DD;
 
 TypeId Ipv6L3Protocol::GetTypeId ()
@@ -60,36 +60,57 @@
   static TypeId tid = TypeId ("ns3::Ipv6L3Protocol")
     .SetParent<Ipv6> ()
     .AddConstructor<Ipv6L3Protocol> ()
-    .AddAttribute ("DefaultTtl", "The TTL value set by default on all outgoing packets generated on this node.",
+    .AddAttribute ("DefaultTtl",
+                   "The TTL value set by default on all "
+                   "outgoing packets generated on this node.",
                    UintegerValue (64),
                    MakeUintegerAccessor (&Ipv6L3Protocol::m_defaultTtl),
                    MakeUintegerChecker<uint8_t> ())
-    .AddAttribute ("DefaultTclass", "The TCLASS value set by default on all outgoing packets generated on this node.",
+    .AddAttribute ("DefaultTclass",
+                   "The TCLASS value set by default on all "
+                   "outgoing packets generated on this node.",
                    UintegerValue (0),
                    MakeUintegerAccessor (&Ipv6L3Protocol::m_defaultTclass),
                    MakeUintegerChecker<uint8_t> ())
-    .AddAttribute ("InterfaceList", "The set of IPv6 interfaces associated to this IPv6 stack.",
+    .AddAttribute ("InterfaceList",
+                   "The set of IPv6 interfaces associated to this IPv6 stack.",
                    ObjectVectorValue (),
                    MakeObjectVectorAccessor (&Ipv6L3Protocol::m_interfaces),
                    MakeObjectVectorChecker<Ipv6Interface> ())
-    .AddAttribute ("SendIcmpv6Redirect", "Send the ICMPv6 Redirect when appropriate.",
+    .AddAttribute ("SendIcmpv6Redirect",
+                   "Send the ICMPv6 Redirect when appropriate.",
                    BooleanValue (true),
                    MakeBooleanAccessor (&Ipv6L3Protocol::SetSendIcmpv6Redirect,
                                         &Ipv6L3Protocol::GetSendIcmpv6Redirect),
                    MakeBooleanChecker ())
-    .AddTraceSource ("Tx", "Send IPv6 packet to outgoing interface.",
-                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_txTrace))
-    .AddTraceSource ("Rx", "Receive IPv6 packet from incoming interface.",
-                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_rxTrace))
-    .AddTraceSource ("Drop", "Drop IPv6 packet",
-                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_dropTrace))
-
-    .AddTraceSource ("SendOutgoing", "A newly-generated packet by this node is about to be queued for transmission",
-                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_sendOutgoingTrace))
-    .AddTraceSource ("UnicastForward", "A unicast IPv6 packet was received by this node and is being forwarded to another node",
-                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_unicastForwardTrace))
-    .AddTraceSource ("LocalDeliver", "An IPv6 packet was received by/for this node, and it is being forward up the stack",
-                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_localDeliverTrace))
+    .AddTraceSource ("Tx",
+                     "Send IPv6 packet to outgoing interface.",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_txTrace),
+                     "ns3::Ipv6L3Protocol::TxRxTracedCallback")
+    .AddTraceSource ("Rx",
+                     "Receive IPv6 packet from incoming interface.",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_rxTrace),
+                     "ns3::Ipv6L3Protocol::TxRxTracedCallback")
+    .AddTraceSource ("Drop",
+                     "Drop IPv6 packet",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_dropTrace),
+                     "ns3::Ipv6L3Protocol::DropTracedCallback")
+
+    .AddTraceSource ("SendOutgoing",
+                     "A newly-generated packet by this node is "
+                     "about to be queued for transmission",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_sendOutgoingTrace),
+                     "ns3::Ipv6L3Protocol::SentTracedCallback")
+    .AddTraceSource ("UnicastForward",
+                     "A unicast IPv6 packet was received by this node "
+                     "and is being forwarded to another node",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_unicastForwardTrace),
+                     "ns3::Ipv6L3Protocol::SentTracedCallback")
+    .AddTraceSource ("LocalDeliver",
+                     "An IPv6 packet was received by/for this node, "
+                     "and it is being forward up the stack",
+                     MakeTraceSourceAccessor (&Ipv6L3Protocol::m_localDeliverTrace),
+                     "ns3::Ipv6L3Protocol::SentTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/internet/model/ipv6-l3-protocol.h ns-3.22/src/internet/model/ipv6-l3-protocol.h
--- ns-3.21/src/internet/model/ipv6-l3-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-l3-protocol.h	2015-02-05 15:46:22.000000000 -0800
@@ -386,6 +386,43 @@
    */
   virtual void ReportDrop (Ipv6Header ipHeader, Ptr<Packet> p, DropReason dropReason);
 
+  /**
+   * TracedCallback signature for packet sent, forwarded or
+   * local-delivered events.
+   *
+   * \param [in] header The Ipv6Header.
+   * \param [in] packet The packet.
+   * \param [in] interface
+   */
+  typedef void (* SentTracedCallback)
+    (const Ipv6Header & header, const Ptr<const Packet> packet,
+     const uint32_t interface);
+   
+  /**
+   * TracedCallback signature for packet transmission or reception events.
+   *
+   * \param [in] packet The packet.
+   * \param [in] ipv6
+   * \param [in] interface
+   */
+  typedef void (* TxRxTracedCallback)
+    (const Ptr<const Packet> packet, const Ptr<const Ipv6> ipv6,
+     const uint32_t interface);
+
+  /**
+   * TracedCallback signature for packet drop events.
+   *
+   * \param [in] header The Ipv6Header.
+   * \param [in] packet The packet.
+   * \param [in] reason The reason the packet was dropped.
+   * \param [in] ipv6
+   * \param [in] interface
+   */
+  typedef void (* DropTracedCallback)
+    (const Ipv6Header & header, const Ptr<const Packet> packet,
+     const DropReason reason, const Ptr<const Ipv6> ipv6,
+     const uint32_t interface);
+   
 protected:
   /**
    * \brief Dispose object.
diff -Naur ns-3.21/src/internet/model/ipv6-list-routing.cc ns-3.22/src/internet/model/ipv6-list-routing.cc
--- ns-3.21/src/internet/model/ipv6-list-routing.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-list-routing.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include "ipv6-list-routing.h"
 #include "ns3/simulator.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6ListRouting");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6ListRouting");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv6ListRouting);
 
 TypeId
diff -Naur ns-3.21/src/internet/model/ipv6-option.cc ns-3.22/src/internet/model/ipv6-option.cc
--- ns-3.21/src/internet/model/ipv6-option.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-option.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,11 +24,11 @@
 #include "ipv6-option.h"
 #include "ipv6-option-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6Option");
-
 namespace ns3
 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6Option");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv6Option);
 
 TypeId Ipv6Option::GetTypeId ()
diff -Naur ns-3.21/src/internet/model/ipv6-packet-probe.cc ns-3.22/src/internet/model/ipv6-packet-probe.cc
--- ns-3.21/src/internet/model/ipv6-packet-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-packet-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6PacketProbe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6PacketProbe");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv6PacketProbe);
 
 TypeId
@@ -42,11 +42,14 @@
     .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))
+                      "The packet plus its IPv6 object and interface "
+                      "that serve as the output for this probe",
+                      MakeTraceSourceAccessor (&Ipv6PacketProbe::m_output),
+                      "ns3::Ipv6PacketProbe::TracedCallback")
     .AddTraceSource ( "OutputBytes",
                       "The number of bytes in the packet",
-                      MakeTraceSourceAccessor (&Ipv6PacketProbe::m_outputBytes))
+                      MakeTraceSourceAccessor (&Ipv6PacketProbe::m_outputBytes),
+                      "ns3::Packet::PacketSizeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/internet/model/ipv6-packet-probe.h ns-3.22/src/internet/model/ipv6-packet-probe.h
--- ns-3.21/src/internet/model/ipv6-packet-probe.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-packet-probe.h	2015-02-05 15:46:22.000000000 -0800
@@ -95,6 +95,17 @@
    */
   virtual void ConnectByPath (std::string path);
 
+  /**
+   * TracedCallback signature for PacketProbe events.
+   *
+   * \param [in] packet The packet.
+   * \param [in] ipv6 
+   * \param [in] interface
+   */
+  typedef void (* TracedCallback)
+    (const Ptr<const Packet> packet, const Ptr<const Ipv6> ipv6,
+     const uint32_t interface);
+
 private:
   /**
    * \brief Method to connect to an underlying ns3::TraceSource with
@@ -103,15 +114,13 @@
    * \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);
 
   /// Traced Callback: the packet, the Ipv6 object and the interface.
-  TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_output;
+  ns3::TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_output;
   /// Traced Callback: the previous packet's size and the actual packet's size.
-  TracedCallback<uint32_t, uint32_t> m_outputBytes;
+  ns3::TracedCallback<uint32_t, uint32_t> m_outputBytes;
 
   /// The traced packet.
   Ptr<const Packet> m_packet;
diff -Naur ns-3.21/src/internet/model/ipv6-pmtu-cache.cc ns-3.22/src/internet/model/ipv6-pmtu-cache.cc
--- ns-3.21/src/internet/model/ipv6-pmtu-cache.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-pmtu-cache.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/log.h"
 #include "ns3/simulator.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6PmtuCache");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6PmtuCache");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv6PmtuCache);
 
 TypeId Ipv6PmtuCache::GetTypeId ()
diff -Naur ns-3.21/src/internet/model/ipv6-raw-socket-impl.cc ns-3.22/src/internet/model/ipv6-raw-socket-impl.cc
--- ns-3.21/src/internet/model/ipv6-raw-socket-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-raw-socket-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,7 +40,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("Ipv6RawSocketImpl");
 
-
 NS_OBJECT_ENSURE_REGISTERED (Ipv6RawSocketImpl);
 
 TypeId Ipv6RawSocketImpl::GetTypeId ()
diff -Naur ns-3.21/src/internet/model/ipv6-route.cc ns-3.22/src/internet/model/ipv6-route.cc
--- ns-3.21/src/internet/model/ipv6-route.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-route.cc	2015-02-05 15:46:22.000000000 -0800
@@ -137,15 +137,6 @@
     }
 }
 
-uint32_t Ipv6MulticastRoute::GetOutputTtl (uint32_t oif)
-{
-  // We keep this interface around for compatibility (for now)
-  std::map<uint32_t, uint32_t>::const_iterator iter = m_ttls.find (oif);
-  if (iter == m_ttls.end ())
-    return((uint32_t)MAX_TTL);
-  return(iter->second);
-}
-
 std::map<uint32_t, uint32_t> Ipv6MulticastRoute::GetOutputTtlMap () const
 {
   return(m_ttls);
diff -Naur ns-3.21/src/internet/model/ipv6-route.h ns-3.22/src/internet/model/ipv6-route.h
--- ns-3.21/src/internet/model/ipv6-route.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-route.h	2015-02-05 15:46:22.000000000 -0800
@@ -28,7 +28,6 @@
 #include "ns3/simple-ref-count.h"
 
 #include "ns3/ipv6-address.h"
-#include "ns3/deprecated.h"
 
 namespace ns3
 {
@@ -204,14 +203,6 @@
   void SetOutputTtl (uint32_t oif, uint32_t ttl);
 
   /**
-   * \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;
-
-  /**
    * \return map of output interface Ids and TTLs for this route
    */
   std::map<uint32_t, uint32_t> GetOutputTtlMap () const;
diff -Naur ns-3.21/src/internet/model/ipv6-static-routing.cc ns-3.22/src/internet/model/ipv6-static-routing.cc
--- ns-3.21/src/internet/model/ipv6-static-routing.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ipv6-static-routing.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,6 +33,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Ipv6StaticRouting");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv6StaticRouting);
 
 TypeId Ipv6StaticRouting::GetTypeId ()
diff -Naur ns-3.21/src/internet/model/loopback-net-device.cc ns-3.22/src/internet/model/loopback-net-device.cc
--- ns-3.21/src/internet/model/loopback-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/loopback-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/node.h"
 #include "ns3/packet.h"
 
-NS_LOG_COMPONENT_DEFINE ("LoopbackNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LoopbackNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (LoopbackNetDevice);
 
 TypeId 
diff -Naur ns-3.21/src/internet/model/ndisc-cache.cc ns-3.22/src/internet/model/ndisc-cache.cc
--- ns-3.21/src/internet/model/ndisc-cache.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ndisc-cache.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,6 +21,7 @@
 #include "ns3/log.h"
 #include "ns3/uinteger.h"
 #include "ns3/node.h"
+#include "ns3/names.h"
 
 #include "ipv6-l3-protocol.h" 
 #include "icmpv6-l4-protocol.h"
@@ -149,6 +150,49 @@
   return m_unresQlen;
 }
 
+void NdiscCache::PrintNdiscCache (Ptr<OutputStreamWrapper> stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  std::ostream* os = stream->GetStream ();
+
+  for (CacheI i = m_ndCache.begin (); i != m_ndCache.end (); i++)
+    {
+      *os << i->first << " dev ";
+      std::string found = Names::FindName (m_device);
+      if (Names::FindName (m_device) != "")
+        {
+          *os << found;
+        }
+      else
+        {
+          *os << static_cast<int> (m_device->GetIfIndex ());
+        }
+
+      *os << " lladdr " << i->second->GetMacAddress ();
+
+      if (i->second->IsReachable ())
+        {
+          *os << " REACHABLE\n";
+        }
+      else if (i->second->IsDelay ())
+        {
+          *os << " DELAY\n";
+        }
+      else if (i->second->IsIncomplete ())
+        {
+          *os << " INCOMPLETE\n";
+        }
+      else if (i->second->IsProbe ())
+        {
+          *os << " PROBE\n";
+        }
+      else
+        {
+          *os << " STALE\n";
+        }
+    }
+}
+
 NdiscCache::Entry::Entry (NdiscCache* nd)
   : m_ndCache (nd),
     m_waiting (),
diff -Naur ns-3.21/src/internet/model/ndisc-cache.h ns-3.22/src/internet/model/ndisc-cache.h
--- ns-3.21/src/internet/model/ndisc-cache.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ndisc-cache.h	2015-02-05 15:46:22.000000000 -0800
@@ -22,7 +22,6 @@
 #define NDISC_CACHE_H
 
 #include <stdint.h>
-
 #include <list>
 
 #include "ns3/packet.h"
@@ -32,6 +31,7 @@
 #include "ns3/ptr.h"
 #include "ns3/timer.h"
 #include "ns3/sgi-hashmap.h"
+#include "ns3/output-stream-wrapper.h"
 
 namespace ns3
 {
@@ -125,6 +125,13 @@
   void SetDevice (Ptr<NetDevice> device, Ptr<Ipv6Interface> interface);
 
   /**
+   * \brief Print the NDISC cache entries
+   *
+   * \param stream the ostream the NDISC cache entries is printed to
+   */
+  void PrintNdiscCache (Ptr<OutputStreamWrapper> stream);
+
+  /**
    * \class Entry
    * \brief A record that holds information about an NdiscCache entry.
    */
diff -Naur ns-3.21/src/internet/model/nsc-tcp-l4-protocol.cc ns-3.22/src/internet/model/nsc-tcp-l4-protocol.cc
--- ns-3.21/src/internet/model/nsc-tcp-l4-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/nsc-tcp-l4-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -45,10 +45,10 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
-NS_LOG_COMPONENT_DEFINE ("NscTcpL4Protocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("NscTcpL4Protocol");
+
 NS_OBJECT_ENSURE_REGISTERED (NscTcpL4Protocol);
 
 /* see http://www.iana.org/assignments/protocol-numbers */
diff -Naur ns-3.21/src/internet/model/nsc-tcp-socket-impl.cc ns-3.22/src/internet/model/nsc-tcp-socket-impl.cc
--- ns-3.21/src/internet/model/nsc-tcp-socket-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/nsc-tcp-socket-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -43,10 +43,10 @@
 #include "sim_errno.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("NscTcpSocketImpl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("NscTcpSocketImpl");
+
 NS_OBJECT_ENSURE_REGISTERED (NscTcpSocketImpl);
 
 TypeId
@@ -56,10 +56,16 @@
     .SetParent<TcpSocket> ()
     .AddTraceSource ("CongestionWindow",
                      "The TCP connection's congestion window",
-                     MakeTraceSourceAccessor (&NscTcpSocketImpl::m_cWnd))
+                     MakeTraceSourceAccessor (&NscTcpSocketImpl::m_cWnd),
+                     "ns3::TracedValue::Uint32Callback")
     .AddTraceSource ("SlowStartThreshold",
                      "TCP slow start threshold (bytes)",
-                     MakeTraceSourceAccessor (&NscTcpSocketImpl::m_ssThresh))
+                     MakeTraceSourceAccessor (&NscTcpSocketImpl::m_ssThresh),
+                     "ns3::TracedValue::Uint32Callback")
+    .AddTraceSource ("State",
+                     "TCP state",
+                     MakeTraceSourceAccessor (&NscTcpSocketImpl::m_state),
+                     "ns3::TcpStatesTracedValueCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/internet/model/pending-data.cc ns-3.22/src/internet/model/pending-data.cc
--- ns-3.21/src/internet/model/pending-data.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/pending-data.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,11 +34,11 @@
 #include "pending-data.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("PendingData");
-
 namespace ns3
 {
 
+NS_LOG_COMPONENT_DEFINE ("PendingData");
+
 PendingData::PendingData () : size (0), data (0),
                               msgSize (0), responseSize (0)
 {
diff -Naur ns-3.21/src/internet/model/ripng.cc ns-3.22/src/internet/model/ripng.cc
--- ns-3.21/src/internet/model/ripng.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ripng.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,13 +36,11 @@
 #define RIPNG_ALL_NODE "ff02::9"
 #define RIPNG_PORT 521
 
-NS_LOG_COMPONENT_DEFINE ("RipNg")
- ;
-
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (RipNg)
- ;
+NS_LOG_COMPONENT_DEFINE ("RipNg");
+
+NS_OBJECT_ENSURE_REGISTERED (RipNg);
 
 RipNg::RipNg ()
   : m_ipv6 (0), m_splitHorizonStrategy (RipNg::POISON_REVERSE), m_initialized (false)
diff -Naur ns-3.21/src/internet/model/ripng.h ns-3.22/src/internet/model/ripng.h
--- ns-3.21/src/internet/model/ripng.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/ripng.h	2015-02-05 15:46:22.000000000 -0800
@@ -183,8 +183,7 @@
    */
   static TypeId GetTypeId (void);
 
-  // \name From Ipv6RoutingProtocol
-  // \{
+  // From Ipv6RoutingProtocol
   Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> oif,
                               Socket::SocketErrno &sockerr);
   bool RouteInput (Ptr<const Packet> p, const Ipv6Header &header, Ptr<const NetDevice> idev,
@@ -200,7 +199,6 @@
                                   uint32_t interface, Ipv6Address prefixToUse = Ipv6Address::GetZero ());
   virtual void SetIpv6 (Ptr<Ipv6> ipv6);
   virtual void PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const;
-  // \}
 
   /**
    * Split Horizon strategy type. See \RFC{2080}.
diff -Naur ns-3.21/src/internet/model/rtt-estimator.cc ns-3.22/src/internet/model/rtt-estimator.cc
--- ns-3.21/src/internet/model/rtt-estimator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/rtt-estimator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -18,113 +18,76 @@
 // Author: Rajib Bhattacharjea<raj.b@gatech.edu>
 //
 
-
 // Ported from:
-// Georgia Tech Network Simulator - Round Trip Time Estimation Class
+// Georgia Tech Network Simulator - Round Trip Time Estimator Class
 // George F. Riley.  Georgia Tech, Spring 2002
 
-// Implements several variations of round trip time estimators
+// Base class allows variations of round trip time estimators to be
+// implemented
 
 #include <iostream>
+#include <cmath>
 
 #include "rtt-estimator.h"
-#include "ns3/simulator.h"
 #include "ns3/double.h"
-#include "ns3/integer.h"
-#include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("RttEstimator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RttEstimator");
+
 NS_OBJECT_ENSURE_REGISTERED (RttEstimator);
 
+static const double TOLERANCE = 1e-6;
+
 TypeId 
 RttEstimator::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::RttEstimator")
     .SetParent<Object> ()
-    .AddAttribute ("MaxMultiplier", 
-                   "Maximum RTO Multiplier",
-                   UintegerValue (64),
-                   MakeUintegerAccessor (&RttEstimator::m_maxMultiplier),
-                   MakeUintegerChecker<uint16_t> ())
     .AddAttribute ("InitialEstimation", 
-                   "Initial RTT estimation",
+                   "Initial RTT estimate",
                    TimeValue (Seconds (1.0)),
                    MakeTimeAccessor (&RttEstimator::m_initialEstimatedRtt),
                    MakeTimeChecker ())
-    .AddAttribute ("MinRTO", 
-                   "Minimum retransmit timeout value",
-                   TimeValue (Seconds (0.2)), // RFC2988 says min RTO=1 sec, but Linux uses 200ms. See http://www.postel.org/pipermail/end2end-interest/2004-November/004402.html
-                   MakeTimeAccessor (&RttEstimator::SetMinRto,
-                                     &RttEstimator::GetMinRto),
-                   MakeTimeChecker ())
   ;
   return tid;
 }
 
-void 
-RttEstimator::SetMinRto (Time minRto)
-{
-  NS_LOG_FUNCTION (this << minRto);
-  m_minRto = minRto;
-}
-Time 
-RttEstimator::GetMinRto (void) const
+Time
+RttEstimator::GetEstimate (void) const
 {
-  return m_minRto;
+  return m_estimatedRtt;
 }
-void 
-RttEstimator::SetCurrentEstimate (Time estimate)
-{
-  NS_LOG_FUNCTION (this << estimate);
-  m_currentEstimatedRtt = estimate;
-}
-Time 
-RttEstimator::GetCurrentEstimate (void) const
-{
-  return m_currentEstimatedRtt;
-}
-
 
-//RttHistory methods
-RttHistory::RttHistory (SequenceNumber32 s, uint32_t c, Time t)
-  : seq (s), count (c), time (t), retx (false)
+Time 
+RttEstimator::GetVariation (void) const
 {
-  NS_LOG_FUNCTION (this);
+  return m_estimatedVariation;
 }
 
-RttHistory::RttHistory (const RttHistory& h)
-  : seq (h.seq), count (h.count), time (h.time), retx (h.retx)
-{
-  NS_LOG_FUNCTION (this);
-}
 
 // Base class methods
 
 RttEstimator::RttEstimator ()
-  : m_next (1), m_history (),
-    m_nSamples (0),
-    m_multiplier (1)
+  : m_nSamples (0)
 { 
   NS_LOG_FUNCTION (this);
-  //note next=1 everywhere since first segment will have sequence 1
   
   // We need attributes initialized here, not later, so use the 
   // ConstructSelf() technique documented in the manual
   ObjectBase::ConstructSelf (AttributeConstructionList ());
-  m_currentEstimatedRtt = m_initialEstimatedRtt;
-  NS_LOG_DEBUG ("Initialize m_currentEstimatedRtt to " << m_currentEstimatedRtt.GetSeconds () << " sec.");
+  m_estimatedRtt = m_initialEstimatedRtt;
+  m_estimatedVariation = Time (0);
+  NS_LOG_DEBUG ("Initialize m_estimatedRtt to " << m_estimatedRtt.GetSeconds () << " sec.");
 }
 
 RttEstimator::RttEstimator (const RttEstimator& c)
-  : Object (c), m_next (c.m_next), m_history (c.m_history), 
-    m_maxMultiplier (c.m_maxMultiplier), 
+  : Object (c),
     m_initialEstimatedRtt (c.m_initialEstimatedRtt),
-    m_currentEstimatedRtt (c.m_currentEstimatedRtt), m_minRto (c.m_minRto),
-    m_nSamples (c.m_nSamples), m_multiplier (c.m_multiplier)
+    m_estimatedRtt (c.m_estimatedRtt),
+    m_estimatedVariation (c.m_estimatedVariation),
+    m_nSamples (c.m_nSamples)
 {
   NS_LOG_FUNCTION (this);
 }
@@ -140,92 +103,20 @@
   return GetTypeId ();
 }
 
-void RttEstimator::SentSeq (SequenceNumber32 seq, uint32_t size)
-{ 
-  NS_LOG_FUNCTION (this << seq << size);
-  // Note that a particular sequence has been sent
-  if (seq == m_next)
-    { // This is the next expected one, just log at end
-      m_history.push_back (RttHistory (seq, size, Simulator::Now () ));
-      m_next = seq + SequenceNumber32 (size); // Update next expected
-    }
-  else
-    { // This is a retransmit, find in list and mark as re-tx
-      for (RttHistory_t::iterator i = m_history.begin (); i != m_history.end (); ++i)
-        {
-          if ((seq >= i->seq) && (seq < (i->seq + SequenceNumber32 (i->count))))
-            { // Found it
-              i->retx = true;
-              // One final test..be sure this re-tx does not extend "next"
-              if ((seq + SequenceNumber32 (size)) > m_next)
-                {
-                  m_next = seq + SequenceNumber32 (size);
-                  i->count = ((seq + SequenceNumber32 (size)) - i->seq); // And update count in hist
-                }
-              break;
-            }
-        }
-    }
-}
-
-Time RttEstimator::EstimateRttFromSeq (SequenceNumber32 ackSeq)
-{ 
-  NS_LOG_FUNCTION (this << ackSeq);
-  // An ack has been received, calculate rtt and log this measurement
-  // Note we use a linear search (O(n)) for this since for the common
-  // case the ack'ed packet will be at the head of the list
-  Time m = Seconds (0.0);
-  if (m_history.size () == 0) return (m);    // No pending history, just exit
-  RttHistory& h = m_history.front ();
-  if (!h.retx && ackSeq >= (h.seq + SequenceNumber32 (h.count)))
-    { // Ok to use this sample
-      m = Simulator::Now () - h.time; // Elapsed time
-      Measurement (m);                // Log the measurement
-      ResetMultiplier ();             // Reset multiplier on valid measurement
-    }
-  // Now delete all ack history with seq <= ack
-  while(m_history.size () > 0)
-    {
-      RttHistory& h = m_history.front ();
-      if ((h.seq + SequenceNumber32 (h.count)) > ackSeq) break;               // Done removing
-      m_history.pop_front (); // Remove
-    }
-  return m;
-}
-
-void RttEstimator::ClearSent ()
-{ 
-  NS_LOG_FUNCTION (this);
-  // Clear all history entries
-  m_next = 1;
-  m_history.clear ();
-}
-
-void RttEstimator::IncreaseMultiplier ()
-{
-  NS_LOG_FUNCTION (this);
-  m_multiplier = (m_multiplier*2 < m_maxMultiplier) ? m_multiplier*2 : m_maxMultiplier;
-  NS_LOG_DEBUG ("Multiplier increased to " << m_multiplier);
-}
-
-void RttEstimator::ResetMultiplier ()
-{
-  NS_LOG_FUNCTION (this);
-  m_multiplier = 1;
-}
-
 void RttEstimator::Reset ()
 { 
   NS_LOG_FUNCTION (this);
   // Reset to initial state
-  m_next = 1;
-  m_currentEstimatedRtt = m_initialEstimatedRtt;
-  m_history.clear ();         // Remove all info from the history
+  m_estimatedRtt = m_initialEstimatedRtt;
+  m_estimatedVariation = Time (0);
   m_nSamples = 0;
-  ResetMultiplier ();
 }
 
-
+uint32_t 
+RttEstimator::GetNSamples (void) const
+{
+  return m_nSamples;
+}
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -239,23 +130,27 @@
   static TypeId tid = TypeId ("ns3::RttMeanDeviation")
     .SetParent<RttEstimator> ()
     .AddConstructor<RttMeanDeviation> ()
-    .AddAttribute ("Gain",
-                   "Gain used in estimating the RTT, must be 0 < Gain < 1",
-                   DoubleValue (0.1),
-                   MakeDoubleAccessor (&RttMeanDeviation::m_gain),
-                   MakeDoubleChecker<double> ())
+    .AddAttribute ("Alpha",
+                   "Gain used in estimating the RTT, must be 0 <= alpha <= 1",
+                   DoubleValue (0.125),
+                   MakeDoubleAccessor (&RttMeanDeviation::m_alpha),
+                   MakeDoubleChecker<double> (0, 1))
+    .AddAttribute ("Beta",
+                   "Gain used in estimating the RTT variation, must be 0 <= beta <= 1",
+                   DoubleValue (0.25),
+                   MakeDoubleAccessor (&RttMeanDeviation::m_beta),
+                   MakeDoubleChecker<double> (0, 1))
   ;
   return tid;
 }
 
-RttMeanDeviation::RttMeanDeviation() :
-  m_variance (0) 
-{ 
+RttMeanDeviation::RttMeanDeviation()
+{
   NS_LOG_FUNCTION (this);
 }
 
 RttMeanDeviation::RttMeanDeviation (const RttMeanDeviation& c)
-  : RttEstimator (c), m_gain (c.m_gain), m_variance (c.m_variance)
+  : RttEstimator (c), m_alpha (c.m_alpha), m_beta (c.m_beta)
 {
   NS_LOG_FUNCTION (this);
 }
@@ -266,62 +161,120 @@
   return GetTypeId ();
 }
 
-void RttMeanDeviation::Measurement (Time m)
+uint32_t
+RttMeanDeviation::CheckForReciprocalPowerOfTwo (double val) const
+{
+  NS_LOG_FUNCTION (this << val);
+  if (val < TOLERANCE)
+    {
+      return 0;
+    }
+  // supports 1/32, 1/16, 1/8, 1/4, 1/2
+  if (abs (1/val - 8) < TOLERANCE)
+    {
+      return 3;
+    }
+  if (abs (1/val - 4) < TOLERANCE)
+    {
+      return 2;
+    }
+  if (abs (1/val - 32) < TOLERANCE)
+    {
+      return 5;
+    }
+  if (abs (1/val - 16) < TOLERANCE)
+    {
+      return 4;
+    }
+  if (abs (1/val - 2) < TOLERANCE)
+    {
+      return 1;
+    }
+  return 0;
+}
+
+void
+RttMeanDeviation::FloatingPointUpdate (Time m)
+{
+  NS_LOG_FUNCTION (this << m);
+
+  // EWMA formulas are implemented as suggested in
+  // Jacobson/Karels paper appendix A.2
+
+  // SRTT <- (1 - alpha) * SRTT + alpha *  R'
+  Time err (m - m_estimatedRtt);
+  double gErr = err.ToDouble (Time::S) * m_alpha;
+  m_estimatedRtt += Time::FromDouble (gErr, Time::S);
+
+  // RTTVAR <- (1 - beta) * RTTVAR + beta * |SRTT - R'|
+  Time difference = Abs (err) - m_estimatedVariation;
+  m_estimatedVariation += Time::FromDouble (difference.ToDouble (Time::S) * m_beta, Time::S);
+
+  return;
+}
+
+void
+RttMeanDeviation::IntegerUpdate (Time m, uint32_t rttShift, uint32_t variationShift)
+{
+  NS_LOG_FUNCTION (this << m << rttShift << variationShift);
+  // Jacobson/Karels paper appendix A.2
+  int64_t meas = m.GetInteger ();
+  int64_t delta = meas - m_estimatedRtt.GetInteger ();
+  int64_t srtt = (m_estimatedRtt.GetInteger () << rttShift) + delta;
+  m_estimatedRtt = Time::From (srtt >> rttShift);
+  if (delta < 0)
+    {
+      delta = -delta;
+    }
+  delta -= m_estimatedVariation.GetInteger ();
+  int64_t rttvar = m_estimatedVariation.GetInteger () << variationShift;
+  rttvar += delta;
+  m_estimatedVariation = Time::From (rttvar >> variationShift);
+  return;
+}
+
+void 
+RttMeanDeviation::Measurement (Time m)
 {
   NS_LOG_FUNCTION (this << m);
   if (m_nSamples)
-    { // Not first
-      Time err (m - m_currentEstimatedRtt);
-      double gErr = err.ToDouble (Time::S) * m_gain;
-      m_currentEstimatedRtt += Time::FromDouble (gErr, Time::S);
-      Time difference = Abs (err) - m_variance;
-      NS_LOG_DEBUG ("m_variance += " << Time::FromDouble (difference.ToDouble (Time::S) * m_gain, Time::S));
-      m_variance += Time::FromDouble (difference.ToDouble (Time::S) * m_gain, Time::S);
+    { 
+      // If both alpha and beta are reciprocal powers of two, updating can
+      // be done with integer arithmetic according to Jacobson/Karels paper.
+      // If not, since class Time only supports integer multiplication,
+      // must convert Time to floating point and back again
+      uint32_t rttShift = CheckForReciprocalPowerOfTwo (m_alpha);
+      uint32_t variationShift = CheckForReciprocalPowerOfTwo (m_beta);
+      if (rttShift && variationShift)
+        {
+          IntegerUpdate (m, rttShift, variationShift);
+        }
+      else
+        {
+          FloatingPointUpdate (m);
+        }
     }
   else
     { // First sample
-      m_currentEstimatedRtt = m;             // Set estimate to current
-      //variance = sample / 2;               // And variance to current / 2
-      m_variance = m; // try this
-      NS_LOG_DEBUG ("(first sample) m_variance += " << m);
+      m_estimatedRtt = m;               // Set estimate to current
+      m_estimatedVariation = m / 2;  // And variation to current / 2
+      NS_LOG_DEBUG ("(first sample) m_estimatedVariation += " << m);
     }
   m_nSamples++;
 }
 
-Time RttMeanDeviation::RetransmitTimeout ()
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_DEBUG ("RetransmitTimeout:  var " << m_variance.GetSeconds () << " est " << m_currentEstimatedRtt.GetSeconds () << " multiplier " << m_multiplier);
-  // RTO = srtt + 4* rttvar
-  int64_t temp = m_currentEstimatedRtt.ToInteger (Time::MS) + 4 * m_variance.ToInteger (Time::MS);
-  if (temp < m_minRto.ToInteger (Time::MS))
-    {
-      temp = m_minRto.ToInteger (Time::MS);
-    } 
-  temp = temp * m_multiplier; // Apply backoff
-  Time retval = Time::FromInteger (temp, Time::MS);
-  NS_LOG_DEBUG ("RetransmitTimeout:  return " << retval.GetSeconds ());
-  return (retval);  
-}
-
-Ptr<RttEstimator> RttMeanDeviation::Copy () const
+Ptr<RttEstimator> 
+RttMeanDeviation::Copy () const
 {
   NS_LOG_FUNCTION (this);
   return CopyObject<RttMeanDeviation> (this);
 }
 
-void RttMeanDeviation::Reset ()
+void 
+RttMeanDeviation::Reset ()
 { 
   NS_LOG_FUNCTION (this);
-  // Reset to initial state
-  m_variance = Seconds (0);
   RttEstimator::Reset ();
 }
-void RttMeanDeviation::Gain (double g)
-{
-  NS_LOG_FUNCTION (this);
-  NS_ASSERT_MSG( (g > 0) && (g < 1), "RttMeanDeviation: Gain must be less than 1 and greater than 0" );
-  m_gain = g;
-}
 
 } //namespace ns3
diff -Naur ns-3.21/src/internet/model/rtt-estimator.h ns-3.22/src/internet/model/rtt-estimator.h
--- ns-3.21/src/internet/model/rtt-estimator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/rtt-estimator.h	2015-02-05 15:46:22.000000000 -0800
@@ -25,8 +25,6 @@
 #ifndef RTT_ESTIMATOR_H
 #define RTT_ESTIMATOR_H
 
-#include <deque>
-#include "ns3/sequence-number.h"
 #include "ns3/nstime.h"
 #include "ns3/object.h"
 
@@ -35,36 +33,12 @@
 /**
  * \ingroup tcp
  *
- * \brief Helper class to store RTT measurements
- */
-class RttHistory {
-public:
-  /**
-   * \brief Constructor - builds an RttHistory with the given parameters
-   * \param s First sequence number in packet sent
-   * \param c Number of bytes sent
-   * \param t Time this one was sent
-   */
-  RttHistory (SequenceNumber32 s, uint32_t c, Time t);
-  /**
-   * \brief Copy constructor
-   * \param h the object to copy
-   */
-  RttHistory (const RttHistory& h); // Copy constructor
-public:
-  SequenceNumber32  seq;  //!< First sequence number in packet sent
-  uint32_t        count;  //!< Number of bytes sent
-  Time            time;   //!< Time this one was sent
-  bool            retx;   //!< True if this has been retransmitted
-};
-
-/// Container for RttHistory objects
-typedef std::deque<RttHistory> RttHistory_t;
-
-/**
- * \ingroup tcp
- *
  * \brief Base class for all RTT Estimators
+ *
+ * The RTT Estimator class computes an estimate of the round trip time
+ * observed in a series of Time measurements.  The estimate is provided in
+ * the form of an estimate and a sample variation.  Subclasses can implement
+ * different algorithms to provide values for the estimate and variation.  
  */
 class RttEstimator : public Object {
 public:
@@ -86,92 +60,51 @@
   virtual TypeId GetInstanceTypeId (void) const;
 
   /**
-   * \brief Note that a particular sequence has been sent
-   * \param seq the packet sequence number.
-   * \param size the packet size.
-   */
-  virtual void SentSeq (SequenceNumber32 seq, uint32_t size);
-
-  /**
-   * \brief Note that a particular ack sequence has been received
-   * \param ackSeq the ack sequence number.
-   * \return The measured RTT for this ack.
-   */
-  virtual Time EstimateRttFromSeq (SequenceNumber32 ackSeq);
-
-  /**
-   * \brief Clear all history entries
-   */
-  virtual void ClearSent ();
-
-  /**
    * \brief Add a new measurement to the estimator. Pure virtual function.
    * \param t the new RTT measure.
    */
   virtual void  Measurement (Time t) = 0;
 
   /**
-   * \brief Returns the estimated RTO. Pure virtual function.
-   * \return the estimated RTO.
-   */
-  virtual Time RetransmitTimeout () = 0;
-
-  /**
-   * \brief Copy object
+   * \brief Copy object (including current internal state)
    * \returns a copy of itself
    */
   virtual Ptr<RttEstimator> Copy () const = 0;
 
   /**
-   * \brief Increase the estimation multiplier up to MaxMultiplier.
-   */
-  virtual void IncreaseMultiplier ();
-
-  /**
-   * \brief Resets the estimation multiplier to 1.
-   */
-  virtual void ResetMultiplier ();
-
-  /**
    * \brief Resets the estimation to its initial state.
    */
   virtual void Reset ();
 
   /**
-   * \brief Sets the Minimum RTO.
-   * \param minRto The minimum RTO returned by the estimator.
-   */
-  void SetMinRto (Time minRto);
-
-  /**
-   * \brief Get the Minimum RTO.
-   * \return The minimum RTO returned by the estimator.
+   * \brief gets the RTT estimate.
+   * \return The RTT estimate.
    */
-  Time GetMinRto (void) const;
+  Time GetEstimate (void) const;
 
   /**
-   * \brief Sets the current RTT estimate (forcefully).
-   * \param estimate The current RTT estimate.
+   * Note that this is not a formal statistical variance; it has the
+   * the same units as the estimate.  Mean deviation or standard deviation 
+   * are example quantities that could be provided here.
+   *
+   * \brief gets the RTT estimate variation.
+   * \return The RTT estimate variation.
    */
-  void SetCurrentEstimate (Time estimate);
+  Time GetVariation (void) const;
 
   /**
-   * \brief gets the current RTT estimate.
-   * \return The current RTT estimate.
+   * \brief gets the number of samples used in the estimates
+   * \return the number of samples used in the estimates
    */
-  Time GetCurrentEstimate (void) const;
+  uint32_t GetNSamples (void) const;
 
 private:
-  SequenceNumber32 m_next;    //!< Next expected sequence to be sent
-  RttHistory_t m_history;     //!< List of sent packet
-  uint16_t m_maxMultiplier;   //!< Maximum RTO Multiplier
   Time m_initialEstimatedRtt; //!< Initial RTT estimation
 
 protected:
-  Time         m_currentEstimatedRtt;     //!< Current estimate
-  Time         m_minRto;                  //!< minimum value of the timeout
+  Time         m_estimatedRtt;            //!< Current estimate
+  Time         m_estimatedVariation;   //!< Current estimate variation
   uint32_t     m_nSamples;                //!< Number of samples
-  uint16_t     m_multiplier;              //!< RTO Multiplier
 };
 
 /**
@@ -183,6 +116,9 @@
  * by Van Jacobson and Michael J. Karels, in
  * "Congestion Avoidance and Control", SIGCOMM 88, Appendix A
  *
+ * The default values for the gain (alpha and beta) are set as documented
+ * in RFC 6298.
+ *
  */
 class RttMeanDeviation : public RttEstimator {
 public:
@@ -208,12 +144,6 @@
    */
   void Measurement (Time measure);
 
-  /**
-   * \brief Returns the estimated RTO.
-   * \return the estimated RTO.
-   */
-  Time RetransmitTimeout ();
-
   Ptr<RttEstimator> Copy () const;
 
   /**
@@ -221,16 +151,41 @@
    */
   void Reset ();
 
-  /**
-   * \brief Sets the estimator Gain.
-   * \param g the gain, where 0 < g < 1.
-   */
-  void Gain (double g);
-
 private:
-  double       m_gain;       //!< Filter gain
-  Time         m_variance;   //!< Current variance
+  /** 
+   * Utility function to check for possible conversion
+   * of a double value (0 < value < 1) to a reciprocal power of two
+   *
+   * Values of 1/32, 1/16, 1/8, 1/4, and 1/2 (i.e., within the possible
+   * range of experimentation for this estimator) are supported.
+   * 
+   * \param val value to check 
+   * \return log base 2 (1/val) if reciprocal power of 2, or zero if not
+   */
+  uint32_t CheckForReciprocalPowerOfTwo (double val) const;
+  /**
+   * Method to update the rtt and variation estimates using integer
+   * arithmetic, used when the values of Alpha and Beta support the
+   * integer conversion.
+   *
+   * \param m time measurement
+   * \param rttShift value corresponding to log base 2 (1/alpha)
+   * \param variationShift value corresponding to log base 2 (1/beta)
+   */
+  void IntegerUpdate (Time m, uint32_t rttShift, uint32_t variationShift);
+  /**
+   * Method to update the rtt and variation estimates using floating
+   * point arithmetic, used when the values of Alpha and Beta are not
+   * both a reciprocal power of two.
+   *
+   * \param m time measurement
+   */
+  void FloatingPointUpdate (Time m);
+  double       m_alpha;       //!< Filter gain for average
+  double       m_beta;        //!< Filter gain for variation
+
 };
+
 } // namespace ns3
 
 #endif /* RTT_ESTIMATOR_H */
diff -Naur ns-3.21/src/internet/model/tcp-header.cc ns-3.22/src/internet/model/tcp-header.cc
--- ns-3.21/src/internet/model/tcp-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/address-utils.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpHeader);
 
 TcpHeader::TcpHeader ()
diff -Naur ns-3.21/src/internet/model/tcp-header.h ns-3.22/src/internet/model/tcp-header.h
--- ns-3.21/src/internet/model/tcp-header.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-header.h	2015-02-05 15:46:22.000000000 -0800
@@ -169,6 +169,7 @@
   /**
    * \brief Append an option to the TCP header
    * \param option The option to append
+   * \return true if option has been appended, false otherwise
    */
   bool AppendOption (Ptr<TcpOption> option);
 
@@ -259,6 +260,12 @@
    */
   bool IsChecksumOk (void) const;
 
+  /**
+   * Comparison operator
+   * \param lhs left operand
+   * \param rhs right operand
+   * \return true if the operands are equal
+   */
   friend bool operator== (const TcpHeader &lhs, const TcpHeader &rhs);
 
 private:
diff -Naur ns-3.21/src/internet/model/tcp-l4-protocol.cc ns-3.22/src/internet/model/tcp-l4-protocol.cc
--- ns-3.21/src/internet/model/tcp-l4-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-l4-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -47,10 +47,10 @@
 #include <sstream>
 #include <iomanip>
 
-NS_LOG_COMPONENT_DEFINE ("TcpL4Protocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpL4Protocol");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpL4Protocol);
 
 //TcpL4Protocol stuff----------------------------------------------------------
diff -Naur ns-3.21/src/internet/model/tcp-newreno.cc ns-3.22/src/internet/model/tcp-newreno.cc
--- ns-3.21/src/internet/model/tcp-newreno.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-newreno.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/abort.h"
 #include "ns3/node.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpNewReno");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpNewReno");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpNewReno);
 
 TypeId
@@ -50,10 +50,12 @@
                    MakeBooleanChecker ())
     .AddTraceSource ("CongestionWindow",
                      "The TCP connection's congestion window",
-                     MakeTraceSourceAccessor (&TcpNewReno::m_cWnd))
+                     MakeTraceSourceAccessor (&TcpNewReno::m_cWnd),
+                     "ns3::TracedValue::Uint32Callback")
     .AddTraceSource ("SlowStartThreshold",
                      "TCP slow start threshold (bytes)",
-                     MakeTraceSourceAccessor (&TcpNewReno::m_ssThresh))
+                     MakeTraceSourceAccessor (&TcpNewReno::m_ssThresh),
+                     "ns3::TracedValue::Uint32Callback")
  ;
   return tid;
 }
@@ -121,16 +123,16 @@
 TcpNewReno::NewAck (const SequenceNumber32& seq)
 {
   NS_LOG_FUNCTION (this << seq);
-  NS_LOG_LOGIC ("TcpNewReno receieved ACK for seq " << seq <<
+  NS_LOG_LOGIC ("TcpNewReno received ACK for seq " << seq <<
                 " cwnd " << m_cWnd <<
                 " ssthresh " << m_ssThresh);
 
   // Check for exit condition of fast recovery
   if (m_inFastRec && seq < m_recover)
     { // Partial ACK, partial window deflation (RFC2582 sec.3 bullet #5 paragraph 3)
-      m_cWnd += m_segmentSize - (seq - m_txBuffer.HeadSequence ());
-      NS_LOG_INFO ("Partial ACK in fast recovery: cwnd set to " << m_cWnd);
-      m_txBuffer.DiscardUpTo(seq);  //Bug 1850:  retransmit before newack
+      m_cWnd += m_segmentSize - (seq - m_txBuffer->HeadSequence ());
+      NS_LOG_INFO ("Partial ACK for seq " << seq << " in fast recovery: cwnd set to " << m_cWnd);
+      m_txBuffer->DiscardUpTo(seq);  //Bug 1850:  retransmit before newack
       DoRetransmit (); // Assume the next seq is lost. Retransmit lost packet
       TcpSocketBase::NewAck (seq); // update m_nextTxSequence and send new data if allowed by window
       return;
@@ -139,14 +141,14 @@
     { // Full ACK (RFC2582 sec.3 bullet #5 paragraph 2, option 1)
       m_cWnd = std::min (m_ssThresh.Get (), BytesInFlight () + m_segmentSize);
       m_inFastRec = false;
-      NS_LOG_INFO ("Received full ACK. Leaving fast recovery with cwnd set to " << m_cWnd);
+      NS_LOG_INFO ("Received full ACK for seq " << seq <<". Leaving fast recovery with cwnd set to " << m_cWnd);
     }
 
   // Increase of cwnd based on current phase (slow start or congestion avoidance)
   if (m_cWnd < m_ssThresh)
     { // Slow start mode, add one segSize to cWnd. Default m_ssThresh is 65535. (RFC2001, sec.1)
       m_cWnd += m_segmentSize;
-      NS_LOG_INFO ("In SlowStart, updated to cwnd " << m_cWnd << " ssthresh " << m_ssThresh);
+      NS_LOG_INFO ("In SlowStart, ACK of seq " << seq << "; update cwnd to " << m_cWnd << "; ssthresh " << m_ssThresh);
     }
   else
     { // Congestion avoidance mode, increase by (segSize*segSize)/cwnd. (RFC2581, sec.3.1)
@@ -182,7 +184,7 @@
       NS_LOG_INFO ("Dupack in fast recovery mode. Increase cwnd to " << m_cWnd);
       SendPendingData (m_connected);
     }
-  else if (!m_inFastRec && m_limitedTx && m_txBuffer.SizeFromSequence (m_nextTxSequence) > 0)
+  else if (!m_inFastRec && m_limitedTx && m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
     { // RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
       NS_LOG_INFO ("Limited transmit");
       uint32_t sz = SendDataPacket (m_nextTxSequence, m_segmentSize, true);
@@ -201,17 +203,16 @@
   // If erroneous timeout in closed/timed-wait state, just return
   if (m_state == CLOSED || m_state == TIME_WAIT) return;
   // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer.HeadSequence () >= m_highTxMark) return;
+  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark) return;
 
   // According to RFC2581 sec.3.1, upon RTO, ssthresh is set to half of flight
   // size and cwnd is set to 1*MSS, then the lost packet is retransmitted and
   // TCP back to slow start
   m_ssThresh = std::max (2 * m_segmentSize, BytesInFlight () / 2);
   m_cWnd = m_segmentSize;
-  m_nextTxSequence = m_txBuffer.HeadSequence (); // Restart from highest Ack
+  m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
   NS_LOG_INFO ("RTO. Reset cwnd to " << m_cWnd <<
                ", ssthresh to " << m_ssThresh << ", restart from seqnum " << m_nextTxSequence);
-  m_rtt->IncreaseMultiplier ();             // Double the next RTO
   DoRetransmit ();                          // Retransmit the packet
 }
 
diff -Naur ns-3.21/src/internet/model/tcp-option.cc ns-3.22/src/internet/model/tcp-option.cc
--- ns-3.21/src/internet/model/tcp-option.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-option.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 
 #include <vector>
 
-NS_LOG_COMPONENT_DEFINE ("TcpOption");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpOption");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpOption);
 
 
diff -Naur ns-3.21/src/internet/model/tcp-option-rfc793.cc ns-3.22/src/internet/model/tcp-option-rfc793.cc
--- ns-3.21/src/internet/model/tcp-option-rfc793.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-option-rfc793.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpOptionRfc793");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpOptionRfc793");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpOptionEnd);
 
 TcpOptionEnd::TcpOptionEnd () : TcpOption ()
diff -Naur ns-3.21/src/internet/model/tcp-option-rfc793.h ns-3.22/src/internet/model/tcp-option-rfc793.h
--- ns-3.21/src/internet/model/tcp-option-rfc793.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-option-rfc793.h	2015-02-05 15:46:22.000000000 -0800
@@ -20,7 +20,7 @@
 #ifndef TCPOPTIONRFC793_H
 #define TCPOPTIONRFC793_H
 
-#include "tcp-option.h"
+#include "ns3/tcp-option.h"
 
 namespace ns3 {
 
diff -Naur ns-3.21/src/internet/model/tcp-option-ts.cc ns-3.22/src/internet/model/tcp-option-ts.cc
--- ns-3.21/src/internet/model/tcp-option-ts.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-option-ts.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,9 +21,10 @@
 #include "tcp-option-ts.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpOptionTS");
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpOptionTS");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpOptionTS);
 
 TcpOptionTS::TcpOptionTS ()
diff -Naur ns-3.21/src/internet/model/tcp-option-ts.h ns-3.22/src/internet/model/tcp-option-ts.h
--- ns-3.21/src/internet/model/tcp-option-ts.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-option-ts.h	2015-02-05 15:46:22.000000000 -0800
@@ -21,7 +21,7 @@
 #ifndef TCP_OPTION_TS_H
 #define TCP_OPTION_TS_H
 
-#include "tcp-option.h"
+#include "ns3/tcp-option.h"
 #include "ns3/timer.h"
 
 namespace ns3 {
diff -Naur ns-3.21/src/internet/model/tcp-option-winscale.cc ns-3.22/src/internet/model/tcp-option-winscale.cc
--- ns-3.21/src/internet/model/tcp-option-winscale.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-option-winscale.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,9 +22,10 @@
 #include "tcp-option-winscale.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpOptionWinScale");
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpOptionWinScale");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpOptionWinScale);
 
 TcpOptionWinScale::TcpOptionWinScale ()
diff -Naur ns-3.21/src/internet/model/tcp-option-winscale.h ns-3.22/src/internet/model/tcp-option-winscale.h
--- ns-3.21/src/internet/model/tcp-option-winscale.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-option-winscale.h	2015-02-05 15:46:22.000000000 -0800
@@ -22,7 +22,7 @@
 #ifndef TCP_OPTION_WINSCALE_H
 #define TCP_OPTION_WINSCALE_H
 
-#include "tcp-option.h"
+#include "ns3/tcp-option.h"
 
 namespace ns3 {
 
diff -Naur ns-3.21/src/internet/model/tcp-reno.cc ns-3.22/src/internet/model/tcp-reno.cc
--- ns-3.21/src/internet/model/tcp-reno.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-reno.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/abort.h"
 #include "ns3/node.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpReno");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpReno");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpReno);
 
 TypeId
@@ -46,10 +46,12 @@
                     MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("CongestionWindow",
                      "The TCP connection's congestion window",
-                     MakeTraceSourceAccessor (&TcpReno::m_cWnd))
+                     MakeTraceSourceAccessor (&TcpReno::m_cWnd),
+                     "ns3::TracedValue::Uint32Callback")
     .AddTraceSource ("SlowStartThreshold",
                      "TCP slow start threshold (bytes)",
-                     MakeTraceSourceAccessor (&TcpReno::m_ssThresh))
+                     MakeTraceSourceAccessor (&TcpReno::m_ssThresh),
+                     "ns3::TracedValue::Uint32Callback")
   ;
   return tid;
 }
@@ -176,17 +178,16 @@
   // If erroneous timeout in closed/timed-wait state, just return
   if (m_state == CLOSED || m_state == TIME_WAIT) return;
   // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer.HeadSequence () >= m_highTxMark) return;
+  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark) return;
 
   // According to RFC2581 sec.3.1, upon RTO, ssthresh is set to half of flight
   // size and cwnd is set to 1*MSS, then the lost packet is retransmitted and
   // TCP back to slow start
   m_ssThresh = std::max (2 * m_segmentSize, BytesInFlight () / 2);
   m_cWnd = m_segmentSize;
-  m_nextTxSequence = m_txBuffer.HeadSequence (); // Restart from highest Ack
+  m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
   NS_LOG_INFO ("RTO. Reset cwnd to " << m_cWnd <<
                ", ssthresh to " << m_ssThresh << ", restart from seqnum " << m_nextTxSequence);
-  m_rtt->IncreaseMultiplier ();             // Double the next RTO
   DoRetransmit ();                          // Retransmit the packet
 }
 
diff -Naur ns-3.21/src/internet/model/tcp-rfc793.cc ns-3.22/src/internet/model/tcp-rfc793.cc
--- ns-3.21/src/internet/model/tcp-rfc793.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-rfc793.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "tcp-rfc793.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpRfc793");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpRfc793");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpRfc793);
 
 TypeId
diff -Naur ns-3.21/src/internet/model/tcp-rx-buffer.cc ns-3.22/src/internet/model/tcp-rx-buffer.cc
--- ns-3.21/src/internet/model/tcp-rx-buffer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-rx-buffer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,9 +23,11 @@
 #include "ns3/log.h"
 #include "tcp-rx-buffer.h"
 
+namespace ns3 {
+
 NS_LOG_COMPONENT_DEFINE ("TcpRxBuffer");
 
-namespace ns3 {
+NS_OBJECT_ENSURE_REGISTERED (TcpRxBuffer);
 
 TypeId
 TcpRxBuffer::GetTypeId (void)
@@ -35,7 +37,8 @@
     .AddConstructor<TcpRxBuffer> ()
     .AddTraceSource ("NextRxSequence",
                      "Next sequence number expected (RCV.NXT)",
-                     MakeTraceSourceAccessor (&TcpRxBuffer::m_nextRxSeq))
+                     MakeTraceSourceAccessor (&TcpRxBuffer::m_nextRxSeq),
+                     "ns3::SequenceNumber32TracedValueCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/internet/model/tcp-socket-base.cc ns-3.22/src/internet/model/tcp-socket-base.cc
--- ns-3.21/src/internet/model/tcp-socket-base.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-socket-base.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,6 +39,7 @@
 #include "ns3/packet.h"
 #include "ns3/uinteger.h"
 #include "ns3/double.h"
+#include "ns3/pointer.h"
 #include "ns3/trace-source-accessor.h"
 #include "tcp-socket-base.h"
 #include "tcp-l4-protocol.h"
@@ -53,10 +54,10 @@
 #include <math.h>
 #include <algorithm>
 
-NS_LOG_COMPONENT_DEFINE ("TcpSocketBase");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpSocketBase");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpSocketBase);
 
 TypeId
@@ -94,24 +95,52 @@
                    BooleanValue (true),
                    MakeBooleanAccessor (&TcpSocketBase::m_timestampEnabled),
                    MakeBooleanChecker ())
+    .AddAttribute ("MinRto",
+                   "Minimum retransmit timeout value",
+                   TimeValue (Seconds (0.2)), // RFC2988 says min RTO=1 sec, but Linux uses 200ms. See http://www.postel.org/pipermail/end2end-interest/2004-November/004402.html
+                   MakeTimeAccessor (&TcpSocketBase::SetMinRto,
+                                     &TcpSocketBase::GetMinRto),
+                                     MakeTimeChecker ())
+    .AddAttribute ("ClockGranularity",
+                   "Clock Granularity used in RTO calculations",
+                   TimeValue (MilliSeconds (1)), // RFC6298 suggest to use fine clock granularity
+                   MakeTimeAccessor (&TcpSocketBase::SetClockGranularity,
+                                     &TcpSocketBase::GetClockGranularity),
+                                     MakeTimeChecker ())
+    .AddAttribute ("TxBuffer",
+                   "TCP Tx buffer",
+                   PointerValue (),
+                   MakePointerAccessor (&TcpSocketBase::GetTxBuffer),
+                                       MakePointerChecker<TcpTxBuffer> ())
+    .AddAttribute ("RxBuffer",
+                   "TCP Rx buffer",
+                   PointerValue (),
+                   MakePointerAccessor (&TcpSocketBase::GetRxBuffer),
+                   MakePointerChecker<TcpRxBuffer> ())
     .AddTraceSource ("RTO",
                      "Retransmission timeout",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_rto))
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_rto),
+                     "ns3::Time::TracedValueCallback")
     .AddTraceSource ("RTT",
                      "Last RTT sample",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_lastRtt))
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_lastRtt),
+                     "ns3::Time::TracedValueCallback")
     .AddTraceSource ("NextTxSequence",
                      "Next sequence number to send (SND.NXT)",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_nextTxSequence))
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_nextTxSequence),
+                     "ns3::SequenceNumber32TracedValueCallback")
     .AddTraceSource ("HighestSequence",
                      "Highest sequence number ever sent in socket's life time",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_highTxMark))
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_highTxMark),
+                     "ns3::SequenceNumber32TracedValueCallback")
     .AddTraceSource ("State",
                      "TCP state",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_state))
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_state),
+                     "ns3::TcpStatesTracedValueCallback")
     .AddTraceSource ("RWND",
                      "Remote side's flow control window",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_rWnd))
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_rWnd),
+                     "ns3::TracedValue::Uint32Callback")
   ;
   return tid;
 }
@@ -142,11 +171,12 @@
     m_sndScaleFactor (0),
     m_rcvScaleFactor (0),
     m_timestampEnabled (true),
-    m_timestampToEcho (0),
-    m_lastEchoedTime (0)
+    m_timestampToEcho (0)
 
 {
   NS_LOG_FUNCTION (this);
+  m_rxBuffer = CreateObject<TcpRxBuffer> ();
+  m_txBuffer = CreateObject<TcpTxBuffer> ();
 }
 
 TcpSocketBase::TcpSocketBase (const TcpSocketBase& sock)
@@ -167,8 +197,6 @@
     m_rtt (0),
     m_nextTxSequence (sock.m_nextTxSequence),
     m_highTxMark (sock.m_highTxMark),
-    m_rxBuffer (sock.m_rxBuffer),
-    m_txBuffer (sock.m_txBuffer),
     m_state (sock.m_state),
     m_errno (sock.m_errno),
     m_closeNotified (sock.m_closeNotified),
@@ -184,8 +212,7 @@
     m_sndScaleFactor (sock.m_sndScaleFactor),
     m_rcvScaleFactor (sock.m_rcvScaleFactor),
     m_timestampEnabled (sock.m_timestampEnabled),
-    m_timestampToEcho (sock.m_timestampToEcho),
-    m_lastEchoedTime (sock.m_lastEchoedTime)
+    m_timestampToEcho (sock.m_timestampToEcho)
 
 {
   NS_LOG_FUNCTION (this);
@@ -203,6 +230,8 @@
   SetDataSentCallback (vPSUI);
   SetSendCallback (vPSUI);
   SetRecvCallback (vPS);
+  m_txBuffer = CopyObject (sock.m_txBuffer);
+  m_rxBuffer = CopyObject (sock.m_rxBuffer);
 }
 
 TcpSocketBase::~TcpSocketBase (void)
@@ -485,14 +514,14 @@
   /// \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)
+  if (m_rxBuffer->Size () != 0)
     {
       NS_LOG_INFO ("Socket " << this << " << unread rx data during close.  Sending reset");
       SendRST ();
       return 0;
     }
  
-  if (m_txBuffer.SizeFromSequence (m_nextTxSequence) > 0)
+  if (m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
     { // App close with pending data must wait until all data transmitted
       if (m_closeOnEmpty == false)
         {
@@ -515,7 +544,7 @@
   m_closeOnEmpty = true;
   //if buffer is already empty, send a fin now
   //otherwise fin will go when buffer empties.
-  if (m_txBuffer.Size () == 0)
+  if (m_txBuffer->Size () == 0)
     {
       if (m_state == ESTABLISHED || m_state == CLOSE_WAIT)
         {
@@ -557,7 +586,7 @@
   if (m_state == ESTABLISHED || m_state == SYN_SENT || m_state == CLOSE_WAIT)
     {
       // Store the packet into Tx buffer
-      if (!m_txBuffer.Add (p))
+      if (!m_txBuffer->Add (p))
         { // TxBuffer overflow, send failed
           m_errno = ERROR_MSGSIZE;
           return -1;
@@ -568,7 +597,7 @@
           return -1;
         }
       // Submit the data to lower layers
-      NS_LOG_LOGIC ("txBufSize=" << m_txBuffer.Size () << " state " << TcpStateName[m_state]);
+      NS_LOG_LOGIC ("txBufSize=" << m_txBuffer->Size () << " state " << TcpStateName[m_state]);
       if (m_state == ESTABLISHED || m_state == CLOSE_WAIT)
         { // Try to send the data out
           SendPendingData (m_connected);
@@ -596,11 +625,11 @@
 {
   NS_LOG_FUNCTION (this);
   NS_ABORT_MSG_IF (flags, "use of flags is not supported in TcpSocketBase::Recv()");
-  if (m_rxBuffer.Size () == 0 && m_state == CLOSE_WAIT)
+  if (m_rxBuffer->Size () == 0 && m_state == CLOSE_WAIT)
     {
       return Create<Packet> (); // Send EOF on connection close
     }
-  Ptr<Packet> outPacket = m_rxBuffer.Extract (maxSize);
+  Ptr<Packet> outPacket = m_rxBuffer->Extract (maxSize);
   if (outPacket != 0 && outPacket->GetSize () != 0)
     {
       SocketAddressTag tag;
@@ -647,7 +676,7 @@
 TcpSocketBase::GetTxAvailable (void) const
 {
   NS_LOG_FUNCTION (this);
-  return m_txBuffer.Available ();
+  return m_txBuffer->Available ();
 }
 
 /* Inherit from Socket class: Get the max number of bytes an app can read */
@@ -655,7 +684,7 @@
 TcpSocketBase::GetRxAvailable (void) const
 {
   NS_LOG_FUNCTION (this);
-  return m_rxBuffer.Available ();
+  return m_rxBuffer->Available ();
 }
 
 /* Inherit from Socket class: Return local address:port */
@@ -811,17 +840,12 @@
   if (!m_closeNotified)
     {
       NotifyNormalClose ();
+      m_closeNotified = true;
     }
 
-  if (m_state != TIME_WAIT)
-    {
-      DeallocateEndPoint ();
-    }
-    
-  m_closeNotified = true;
   NS_LOG_INFO (TcpStateName[m_state] << " -> CLOSED");
-  CancelAllTimers ();
   m_state = CLOSED;
+  DeallocateEndPoint ();  
 }
 
 
@@ -836,12 +860,12 @@
     }
   if (m_state == LAST_ACK || m_state == CLOSING || m_state == CLOSE_WAIT)
     { // In LAST_ACK and CLOSING states, it only wait for an ACK and the
-      // sequence number must equals to m_rxBuffer.NextRxSequence ()
-      return (m_rxBuffer.NextRxSequence () != head);
+      // sequence number must equals to m_rxBuffer->NextRxSequence ()
+      return (m_rxBuffer->NextRxSequence () != head);
     }
 
   // In all other cases, check if the sequence number is in range
-  return (tail < m_rxBuffer.NextRxSequence () || m_rxBuffer.MaxRxSequence () <= head);
+  return (tail < m_rxBuffer->NextRxSequence () || m_rxBuffer->MaxRxSequence () <= head);
 }
 
 /* Function called by the L3 protocol when it received a packet to pass on to
@@ -933,8 +957,8 @@
       NS_LOG_LOGIC ("At state " << TcpStateName[m_state] <<
                     " received packet of seq [" << tcpHeader.GetSequenceNumber () <<
                     ":" << tcpHeader.GetSequenceNumber () + packet->GetSize () <<
-                    ") out of range [" << m_rxBuffer.NextRxSequence () << ":" <<
-                    m_rxBuffer.MaxRxSequence () << ")");
+                    ") out of range [" << m_rxBuffer->NextRxSequence () << ":" <<
+                    m_rxBuffer->MaxRxSequence () << ")");
       // Acknowledgement should be sent for all unacceptable packets (RFC793, p.69)
       if (m_state == ESTABLISHED && !(tcpHeader.GetFlags () & TcpHeader::RST))
         {
@@ -963,7 +987,7 @@
           TcpHeader h;
           h.SetFlags (TcpHeader::RST);
           h.SetSequenceNumber (m_nextTxSequence);
-          h.SetAckNumber (m_rxBuffer.NextRxSequence ());
+          h.SetAckNumber (m_rxBuffer->NextRxSequence ());
           h.SetSourcePort (tcpHeader.GetDestinationPort ());
           h.SetDestinationPort (tcpHeader.GetSourcePort ());
           h.SetWindowSize (AdvertisedWindowSize ());
@@ -1037,8 +1061,8 @@
       NS_LOG_LOGIC ("At state " << TcpStateName[m_state] <<
                     " received packet of seq [" << tcpHeader.GetSequenceNumber () <<
                     ":" << tcpHeader.GetSequenceNumber () + packet->GetSize () <<
-                    ") out of range [" << m_rxBuffer.NextRxSequence () << ":" <<
-                    m_rxBuffer.MaxRxSequence () << ")");
+                    ") out of range [" << m_rxBuffer->NextRxSequence () << ":" <<
+                    m_rxBuffer->MaxRxSequence () << ")");
       // Acknowledgement should be sent for all unacceptable packets (RFC793, p.69)
       if (m_state == ESTABLISHED && !(tcpHeader.GetFlags () & TcpHeader::RST))
         {
@@ -1067,7 +1091,7 @@
           TcpHeader h;
           h.SetFlags (TcpHeader::RST);
           h.SetSequenceNumber (m_nextTxSequence);
-          h.SetAckNumber (m_rxBuffer.NextRxSequence ());
+          h.SetAckNumber (m_rxBuffer->NextRxSequence ());
           h.SetSourcePort (tcpHeader.GetDestinationPort ());
           h.SetDestinationPort (tcpHeader.GetSourcePort ());
           h.SetWindowSize (AdvertisedWindowSize ());
@@ -1127,7 +1151,7 @@
   else if (tcpflags == 0)
     { // No flags means there is only data
       ReceivedData (packet, tcpHeader);
-      if (m_rxBuffer.Finished ())
+      if (m_rxBuffer->Finished ())
         {
           PeerClose (packet, tcpHeader);
         }
@@ -1153,11 +1177,11 @@
   if (0 == (tcpHeader.GetFlags () & TcpHeader::ACK))
     { // Ignore if no ACK flag
     }
-  else if (tcpHeader.GetAckNumber () < m_txBuffer.HeadSequence ())
+  else if (tcpHeader.GetAckNumber () < m_txBuffer->HeadSequence ())
     { // Case 1: Old ACK, ignored.
       NS_LOG_LOGIC ("Ignored ack of " << tcpHeader.GetAckNumber ());
     }
-  else if (tcpHeader.GetAckNumber () == m_txBuffer.HeadSequence ())
+  else if (tcpHeader.GetAckNumber () == m_txBuffer->HeadSequence ())
     { // Case 2: Potentially a duplicated ACK
       if (tcpHeader.GetAckNumber () < m_nextTxSequence && packet->GetSize() == 0)
         {
@@ -1167,7 +1191,7 @@
       // otherwise, the ACK is precisely equal to the nextTxSequence
       NS_ASSERT (tcpHeader.GetAckNumber () <= m_nextTxSequence);
     }
-  else if (tcpHeader.GetAckNumber () > m_txBuffer.HeadSequence ())
+  else if (tcpHeader.GetAckNumber () > m_txBuffer->HeadSequence ())
     { // Case 3: New ACK, reset m_dupAckCount and update m_txBuffer
       NS_LOG_LOGIC ("New ack of " << tcpHeader.GetAckNumber ());
       NewAck (tcpHeader.GetAckNumber ());
@@ -1237,7 +1261,7 @@
       NS_LOG_INFO ("SYN_SENT -> SYN_RCVD");
       m_state = SYN_RCVD;
       m_cnCount = m_cnRetries;
-      m_rxBuffer.SetNextRxSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (1));
+      m_rxBuffer->SetNextRxSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (1));
       SendEmptyPacket (TcpHeader::SYN | TcpHeader::ACK);
     }
   else if (tcpflags == (TcpHeader::SYN | TcpHeader::ACK)
@@ -1247,9 +1271,9 @@
       m_state = ESTABLISHED;
       m_connected = true;
       m_retxEvent.Cancel ();
-      m_rxBuffer.SetNextRxSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (1));
+      m_rxBuffer->SetNextRxSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (1));
       m_highTxMark = ++m_nextTxSequence;
-      m_txBuffer.SetHeadSequence (m_nextTxSequence);
+      m_txBuffer->SetHeadSequence (m_nextTxSequence);
       SendEmptyPacket (TcpHeader::ACK);
       SendPendingData (m_connected);
       Simulator::ScheduleNow (&TcpSocketBase::ConnectionSucceeded, this);
@@ -1289,7 +1313,7 @@
       m_connected = true;
       m_retxEvent.Cancel ();
       m_highTxMark = ++m_nextTxSequence;
-      m_txBuffer.SetHeadSequence (m_nextTxSequence);
+      m_txBuffer->SetHeadSequence (m_nextTxSequence);
       if (m_endPoint)
         {
           m_endPoint->SetPeer (InetSocketAddress::ConvertFrom (fromAddress).GetIpv4 (),
@@ -1313,17 +1337,17 @@
     }
   else if (tcpflags == TcpHeader::SYN)
     { // Probably the peer lost my SYN+ACK
-      m_rxBuffer.SetNextRxSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (1));
+      m_rxBuffer->SetNextRxSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (1));
       SendEmptyPacket (TcpHeader::SYN | TcpHeader::ACK);
     }
   else if (tcpflags == (TcpHeader::FIN | TcpHeader::ACK))
     {
-      if (tcpHeader.GetSequenceNumber () == m_rxBuffer.NextRxSequence ())
+      if (tcpHeader.GetSequenceNumber () == m_rxBuffer->NextRxSequence ())
         { // In-sequence FIN before connection complete. Set up connection and close.
           m_connected = true;
           m_retxEvent.Cancel ();
           m_highTxMark = ++m_nextTxSequence;
-          m_txBuffer.SetHeadSequence (m_nextTxSequence);
+          m_txBuffer->SetHeadSequence (m_nextTxSequence);
           if (m_endPoint)
             {
               m_endPoint->SetPeer (InetSocketAddress::ConvertFrom (fromAddress).GetIpv4 (),
@@ -1374,7 +1398,7 @@
   else if (tcpflags == TcpHeader::ACK)
     { // Process the ACK, and if in FIN_WAIT_1, conditionally move to FIN_WAIT_2
       ReceivedAck (packet, tcpHeader);
-      if (m_state == FIN_WAIT_1 && m_txBuffer.Size () == 0
+      if (m_state == FIN_WAIT_1 && m_txBuffer->Size () == 0
           && tcpHeader.GetAckNumber () == m_highTxMark + SequenceNumber32 (1))
         { // This ACK corresponds to the FIN sent
           NS_LOG_INFO ("FIN_WAIT_1 -> FIN_WAIT_2");
@@ -1387,7 +1411,7 @@
         { // Process the ACK first
           ReceivedAck (packet, tcpHeader);
         }
-      m_rxBuffer.SetFinSequence (tcpHeader.GetSequenceNumber ());
+      m_rxBuffer->SetFinSequence (tcpHeader.GetSequenceNumber ());
     }
   else if (tcpflags == TcpHeader::SYN || tcpflags == (TcpHeader::SYN | TcpHeader::ACK))
     { // Duplicated SYN or SYN+ACK, possibly due to spurious retransmission
@@ -1405,13 +1429,13 @@
     }
 
   // Check if the close responder sent an in-sequence FIN, if so, respond ACK
-  if ((m_state == FIN_WAIT_1 || m_state == FIN_WAIT_2) && m_rxBuffer.Finished ())
+  if ((m_state == FIN_WAIT_1 || m_state == FIN_WAIT_2) && m_rxBuffer->Finished ())
     {
       if (m_state == FIN_WAIT_1)
         {
           NS_LOG_INFO ("FIN_WAIT_1 -> CLOSING");
           m_state = CLOSING;
-          if (m_txBuffer.Size () == 0
+          if (m_txBuffer->Size () == 0
               && tcpHeader.GetAckNumber () == m_highTxMark + SequenceNumber32 (1))
             { // This ACK corresponds to the FIN sent
               TimeWait ();
@@ -1440,7 +1464,7 @@
 
   if (tcpflags == TcpHeader::ACK)
     {
-      if (tcpHeader.GetSequenceNumber () == m_rxBuffer.NextRxSequence ())
+      if (tcpHeader.GetSequenceNumber () == m_rxBuffer->NextRxSequence ())
         { // This ACK corresponds to the FIN sent
           TimeWait ();
         }
@@ -1476,7 +1500,7 @@
     }
   else if (tcpflags == TcpHeader::ACK)
     {
-      if (tcpHeader.GetSequenceNumber () == m_rxBuffer.NextRxSequence ())
+      if (tcpHeader.GetSequenceNumber () == m_rxBuffer->NextRxSequence ())
         { // This ACK corresponds to the FIN sent. This socket closed peacefully.
           CloseAndNotify ();
         }
@@ -1504,13 +1528,13 @@
   NS_LOG_FUNCTION (this << tcpHeader);
 
   // Ignore all out of range packets
-  if (tcpHeader.GetSequenceNumber () < m_rxBuffer.NextRxSequence ()
-      || tcpHeader.GetSequenceNumber () > m_rxBuffer.MaxRxSequence ())
+  if (tcpHeader.GetSequenceNumber () < m_rxBuffer->NextRxSequence ()
+      || tcpHeader.GetSequenceNumber () > m_rxBuffer->MaxRxSequence ())
     {
       return;
     }
   // For any case, remember the FIN position in rx buffer first
-  m_rxBuffer.SetFinSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (p->GetSize ()));
+  m_rxBuffer->SetFinSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (p->GetSize ()));
   NS_LOG_LOGIC ("Accepted FIN at seq " << tcpHeader.GetSequenceNumber () + SequenceNumber32 (p->GetSize ()));
   // If there is any piggybacked data, process it
   if (p->GetSize ())
@@ -1518,7 +1542,7 @@
       ReceivedData (p, tcpHeader);
     }
   // Return if FIN is out of sequence, otherwise move to CLOSE_WAIT state by DoPeerClose
-  if (!m_rxBuffer.Finished ())
+  if (!m_rxBuffer->Finished ())
     {
       return;
     }
@@ -1567,8 +1591,8 @@
   if (m_state == LAST_ACK)
     {
       NS_LOG_LOGIC ("TcpSocketBase " << this << " scheduling LATO1");
-      m_lastAckEvent = Simulator::Schedule (m_rtt->RetransmitTimeout (),
-                                            &TcpSocketBase::LastAckTimeout, this);
+      Time lastRto = m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation ()*4);
+      m_lastAckEvent = Simulator::Schedule (lastRto, &TcpSocketBase::LastAckTimeout, this);
     }
 }
 
@@ -1673,7 +1697,7 @@
 
   header.SetFlags (flags);
   header.SetSequenceNumber (s);
-  header.SetAckNumber (m_rxBuffer.NextRxSequence ());
+  header.SetAckNumber (m_rxBuffer->NextRxSequence ());
   if (m_endPoint != 0)
     {
       header.SetSourcePort (m_endPoint->GetLocalPort ());
@@ -1686,7 +1710,10 @@
     }
   AddOptions (header);
   header.SetWindowSize (AdvertisedWindowSize ());
-  m_rto = m_rtt->RetransmitTimeout ();
+
+  // RFC 6298, clause 2.4
+  m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation ()*4), Time::FromDouble (1,  Time::S));
+
   bool hasSyn = flags & TcpHeader::SYN;
   bool hasFin = flags & TcpHeader::FIN;
   bool isAck = flags == TcpHeader::ACK;
@@ -1695,6 +1722,7 @@
       if (m_cnCount == 0)
         { // No more connection retries, give up
           NS_LOG_LOGIC ("Connection failed.");
+          m_rtt->Reset (); //According to recommendation -> RFC 6298
           CloseAndNotify ();
           return;
         }
@@ -1745,6 +1773,7 @@
 {
   if (m_endPoint != 0)
     {
+      CancelAllTimers ();
       m_endPoint->SetDestroyCallback (MakeNullCallback<void> ());
       m_tcp->DeAllocate (m_endPoint);
       m_endPoint = 0;
@@ -1754,10 +1783,10 @@
         {
           m_tcp->m_sockets.erase (it);
         }
-      CancelAllTimers ();
     }
-  if (m_endPoint6 != 0)
+  else if (m_endPoint6 != 0)
     {
+      CancelAllTimers ();
       m_endPoint6->SetDestroyCallback (MakeNullCallback<void> ());
       m_tcp->DeAllocate (m_endPoint6);
       m_endPoint6 = 0;
@@ -1767,7 +1796,6 @@
         {
           m_tcp->m_sockets.erase (it);
         }
-      CancelAllTimers ();
     }
 }
 
@@ -1864,7 +1892,7 @@
   m_cnCount = m_cnRetries;
   SetupCallback ();
   // Set the sequence number and send SYN+ACK
-  m_rxBuffer.SetNextRxSequence (h.GetSequenceNumber () + SequenceNumber32 (1));
+  m_rxBuffer->SetNextRxSequence (h.GetSequenceNumber () + SequenceNumber32 (1));
 
   SendEmptyPacket (TcpHeader::SYN | TcpHeader::ACK);
 }
@@ -1890,10 +1918,22 @@
 {
   NS_LOG_FUNCTION (this << seq << maxSize << withAck);
 
-  Ptr<Packet> p = m_txBuffer.CopyFromSequence (maxSize, seq);
+  bool isRetransmission = false;
+  if ( seq == m_txBuffer->HeadSequence () )
+    {
+      isRetransmission = true;
+    }
+
+  Ptr<Packet> p = m_txBuffer->CopyFromSequence (maxSize, seq);
   uint32_t sz = p->GetSize (); // Size of packet
   uint8_t flags = withAck ? TcpHeader::ACK : 0;
-  uint32_t remainingData = m_txBuffer.SizeFromSequence (seq + SequenceNumber32 (sz));
+  uint32_t remainingData = m_txBuffer->SizeFromSequence (seq + SequenceNumber32 (sz));
+
+  if (withAck)
+    {
+      m_delAckEvent.Cancel ();
+      m_delAckCount = 0;
+    }
 
   /*
    * Add tags for each socket option.
@@ -1946,7 +1986,7 @@
   TcpHeader header;
   header.SetFlags (flags);
   header.SetSequenceNumber (seq);
-  header.SetAckNumber (m_rxBuffer.NextRxSequence ());
+  header.SetAckNumber (m_rxBuffer->NextRxSequence ());
   if (m_endPoint)
     {
       header.SetSourcePort (m_endPoint->GetLocalPort ());
@@ -1959,9 +1999,15 @@
     }
   header.SetWindowSize (AdvertisedWindowSize ());
   AddOptions (header);
+
   if (m_retxEvent.IsExpired () )
-    { // Schedule retransmit
-      m_rto = m_rtt->RetransmitTimeout ();
+    {
+      // RFC 6298, clause 2.5
+      Time doubledRto = m_rto + m_rto;
+      m_rto = Min (doubledRto, Time::FromDouble (60,  Time::S));
+
+      // Schedules retransmit
+
       NS_LOG_LOGIC (this << " SendDataPacket Schedule ReTxTimeout at time " <<
                     Simulator::Now ().GetSeconds () << " to expire at time " <<
                     (Simulator::Now () + m_rto.Get ()).GetSeconds () );
@@ -1978,9 +2024,27 @@
       m_tcp->SendPacket (p, header, m_endPoint6->GetLocalAddress (),
                          m_endPoint6->GetPeerAddress (), m_boundnetdevice);
     }
-  m_rtt->SentSeq (seq, sz);       // notify the RTT
+
+  // update the history of sequence numbers used to calculate the RTT
+  if (isRetransmission == false)
+    { // This is the next expected one, just log at end
+      m_history.push_back (RttHistory (seq, sz, Simulator::Now () ));
+    }
+  else
+    { // This is a retransmit, find in list and mark as re-tx
+      for (RttHistory_t::iterator i = m_history.begin (); i != m_history.end (); ++i)
+        {
+          if ((seq >= i->seq) && (seq < (i->seq + SequenceNumber32 (i->count))))
+            { // Found it
+              i->retx = true;
+              i->count = ((seq + SequenceNumber32 (sz)) - i->seq); // And update count in hist
+              break;
+            }
+        }
+    }
+
   // Notify the application of the data being sent unless this is a retransmit
-  if (seq == m_nextTxSequence)
+  if (seq == m_highTxMark)
     {
       Simulator::ScheduleNow (&TcpSocketBase::NotifyDataSent, this, sz);
     }
@@ -1996,7 +2060,7 @@
 TcpSocketBase::SendPendingData (bool withAck)
 {
   NS_LOG_FUNCTION (this << withAck);
-  if (m_txBuffer.Size () == 0)
+  if (m_txBuffer->Size () == 0)
     {
       return false;                           // Nothing to send
 
@@ -2007,7 +2071,7 @@
       return false; // Is this the right way to handle this condition?
     }
   uint32_t nPacketsSent = 0;
-  while (m_txBuffer.SizeFromSequence (m_nextTxSequence))
+  while (m_txBuffer->SizeFromSequence (m_nextTxSequence))
     {
       uint32_t w = AvailableWindow (); // Get available window size
       NS_LOG_LOGIC ("TcpSocketBase " << this << " SendPendingData" <<
@@ -2015,18 +2079,18 @@
                     " rxwin " << m_rWnd <<
                     " segsize " << m_segmentSize <<
                     " nextTxSeq " << m_nextTxSequence <<
-                    " highestRxAck " << m_txBuffer.HeadSequence () <<
-                    " pd->Size " << m_txBuffer.Size () <<
-                    " pd->SFS " << m_txBuffer.SizeFromSequence (m_nextTxSequence));
+                    " highestRxAck " << m_txBuffer->HeadSequence () <<
+                    " pd->Size " << m_txBuffer->Size () <<
+                    " pd->SFS " << m_txBuffer->SizeFromSequence (m_nextTxSequence));
       // Stop sending if we need to wait for a larger Tx window (prevent silly window syndrome)
-      if (w < m_segmentSize && m_txBuffer.SizeFromSequence (m_nextTxSequence) > w)
+      if (w < m_segmentSize && m_txBuffer->SizeFromSequence (m_nextTxSequence) > w)
         {
           break; // No more
         }
       // Nagle's algorithm (RFC896): Hold off sending if there is unacked data
       // in the buffer and the amount of data to send is less than one segment
       if (!m_noDelay && UnAckDataCount () > 0
-          && m_txBuffer.SizeFromSequence (m_nextTxSequence) < m_segmentSize)
+          && m_txBuffer->SizeFromSequence (m_nextTxSequence) < m_segmentSize)
         {
           NS_LOG_LOGIC ("Invoking Nagle's algorithm. Wait to send.");
           break;
@@ -2044,14 +2108,14 @@
 TcpSocketBase::UnAckDataCount ()
 {
   NS_LOG_FUNCTION (this);
-  return m_nextTxSequence.Get () - m_txBuffer.HeadSequence ();
+  return m_nextTxSequence.Get () - m_txBuffer->HeadSequence ();
 }
 
 uint32_t
 TcpSocketBase::BytesInFlight ()
 {
   NS_LOG_FUNCTION (this);
-  return m_highTxMark.Get () - m_txBuffer.HeadSequence ();
+  return m_highTxMark.Get () - m_txBuffer->HeadSequence ();
 }
 
 uint32_t
@@ -2074,7 +2138,7 @@
 uint16_t
 TcpSocketBase::AdvertisedWindowSize ()
 {
-  uint32_t w = m_rxBuffer.MaxBufferSize () - m_rxBuffer.Size ();
+  uint32_t w = m_rxBuffer->MaxBufferSize () - m_rxBuffer->Size ();
 
   w >>= m_sndScaleFactor;
 
@@ -2097,14 +2161,14 @@
                 " pkt size " << p->GetSize () );
 
   // Put into Rx buffer
-  SequenceNumber32 expectedSeq = m_rxBuffer.NextRxSequence ();
-  if (!m_rxBuffer.Add (p, tcpHeader))
+  SequenceNumber32 expectedSeq = m_rxBuffer->NextRxSequence ();
+  if (!m_rxBuffer->Add (p, tcpHeader))
     { // Insert failed: No data or RX buffer full
       SendEmptyPacket (TcpHeader::ACK);
       return;
     }
   // Now send a new ACK packet acknowledging all received and delivered data
-  if (m_rxBuffer.Size () > m_rxBuffer.Available () || m_rxBuffer.NextRxSequence () > expectedSeq + p->GetSize ())
+  if (m_rxBuffer->Size () > m_rxBuffer->Available () || m_rxBuffer->NextRxSequence () > expectedSeq + p->GetSize ())
     { // A gap exists in the buffer, or we filled a gap: Always ACK
       SendEmptyPacket (TcpHeader::ACK);
     }
@@ -2124,7 +2188,7 @@
         }
     }
   // Notify app to receive if necessary
-  if (expectedSeq < m_rxBuffer.NextRxSequence ())
+  if (expectedSeq < m_rxBuffer->NextRxSequence ())
     { // NextRxSeq advanced, we have something to send to the app
       if (!m_shutdownRecv)
         {
@@ -2137,7 +2201,7 @@
         }
       // If we received FIN before and now completed all "holes" in rx buffer,
       // invoke peer close procedure
-      if (m_rxBuffer.Finished () && (tcpHeader.GetFlags () & TcpHeader::FIN) == 0)
+      if (m_rxBuffer->Finished () && (tcpHeader.GetFlags () & TcpHeader::FIN) == 0)
         {
           DoPeerClose ();
         }
@@ -2154,27 +2218,46 @@
 void
 TcpSocketBase::EstimateRtt (const TcpHeader& tcpHeader)
 {
-  Time nextRtt;
+  SequenceNumber32 ackSeq = tcpHeader.GetAckNumber();
+  Time m = Time (0.0);
 
-  if (m_timestampEnabled)
-    {
-      nextRtt = TcpOptionTS::ElapsedTimeFromTsValue (m_lastEchoedTime);
+  // An ack has been received, calculate rtt and log this measurement
+  // Note we use a linear search (O(n)) for this since for the common
+  // case the ack'ed packet will be at the head of the list
+  if (!m_history.empty ())
+    {
+      RttHistory& h = m_history.front ();
+      if (!h.retx && ackSeq >= (h.seq + SequenceNumber32 (h.count)))
+        { // Ok to use this sample
+          if (m_timestampEnabled && tcpHeader.HasOption (TcpOption::TS))
+            {
+              Ptr<TcpOptionTS> ts;
+              ts = DynamicCast<TcpOptionTS> (tcpHeader.GetOption (TcpOption::TS));
+              m = TcpOptionTS::ElapsedTimeFromTsValue (ts->GetEcho ());
+            }
+          else
+            {
+              m = Simulator::Now () - h.time; // Elapsed time
+            }
+        }
     }
-  else
+
+  // Now delete all ack history with seq <= ack
+  while(!m_history.empty ())
     {
-      // Use m_rtt for the estimation. Note, RTT of duplicated acknowledgement
-      // (which should be ignored) is handled by m_rtt.
-      nextRtt =  m_rtt->EstimateRttFromSeq (tcpHeader.GetAckNumber () );
+      RttHistory& h = m_history.front ();
+      if ((h.seq + SequenceNumber32 (h.count)) > ackSeq) break;               // Done removing
+      m_history.pop_front (); // Remove
     }
 
-  //nextRtt will be zero for dup acks.  Don't want to update lastRtt in that case
-  //but still needed to do list clearing that is done in EstimateRttFromSeq.
-  if(nextRtt != Time (0))
-  {
-    m_lastRtt = nextRtt;
-    NS_LOG_FUNCTION(this << m_lastRtt);
-  }
-  
+  if (!m.IsZero ())
+    {
+      m_rtt->Measurement (m);                // Log the measurement
+      // RFC 6298, clause 2.4
+      m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation ()*4), Time::FromDouble (1,  Time::S));
+      m_lastRtt = m_rtt->GetEstimate ();
+      NS_LOG_FUNCTION(this << m_lastRtt);
+    }
 }
 
 // Called by the ReceivedAck() when new ACK received and by ProcessSynRcvd()
@@ -2190,8 +2273,10 @@
       NS_LOG_LOGIC (this << " Cancelled ReTxTimeout event which was set to expire at " <<
                     (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
       m_retxEvent.Cancel ();
-      // On recieving a "New" ack we restart retransmission timer .. RFC 2988
-      m_rto = m_rtt->RetransmitTimeout ();
+      // On receiving a "New" ack we restart retransmission timer .. RFC 6298
+      // RFC 6298, clause 2.4
+      m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation ()*4), Time::FromDouble (1,  Time::S));
+
       NS_LOG_LOGIC (this << " Schedule ReTxTimeout at time " <<
                     Simulator::Now ().GetSeconds () << " to expire at time " <<
                     (Simulator::Now () + m_rto.Get ()).GetSeconds ());
@@ -2211,8 +2296,8 @@
     }
   // Note the highest ACK and tell app to send more
   NS_LOG_LOGIC ("TCP " << this << " NewAck " << ack <<
-                " numberAck " << (ack - m_txBuffer.HeadSequence ())); // Number bytes ack'ed
-  m_txBuffer.DiscardUpTo (ack);
+                " numberAck " << (ack - m_txBuffer->HeadSequence ())); // Number bytes ack'ed
+  m_txBuffer->DiscardUpTo (ack);
   if (GetTxAvailable () > 0)
     {
       NotifySend (GetTxAvailable ());
@@ -2221,7 +2306,7 @@
     {
       m_nextTxSequence = ack; // If advanced
     }
-  if (m_txBuffer.Size () == 0 && m_state != FIN_WAIT_1 && m_state != CLOSING)
+  if (m_txBuffer->Size () == 0 && m_state != FIN_WAIT_1 && m_state != CLOSING)
     { // No retransmit timer if no data to retransmit
       NS_LOG_LOGIC (this << " Cancelled ReTxTimeout event which was set to expire at " <<
                     (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
@@ -2243,7 +2328,7 @@
       return;
     }
   // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer.HeadSequence () >= m_highTxMark)
+  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark)
     {
       return;
     }
@@ -2282,10 +2367,10 @@
 {
   NS_LOG_LOGIC ("PersistTimeout expired at " << Simulator::Now ().GetSeconds ());
   m_persistTimeout = std::min (Seconds (60), Time (2 * m_persistTimeout)); // max persist timeout = 60s
-  Ptr<Packet> p = m_txBuffer.CopyFromSequence (1, m_nextTxSequence);
+  Ptr<Packet> p = m_txBuffer->CopyFromSequence (1, m_nextTxSequence);
   TcpHeader tcpHeader;
   tcpHeader.SetSequenceNumber (m_nextTxSequence);
-  tcpHeader.SetAckNumber (m_rxBuffer.NextRxSequence ());
+  tcpHeader.SetAckNumber (m_rxBuffer->NextRxSequence ());
   tcpHeader.SetWindowSize (AdvertisedWindowSize ());
   if (m_endPoint != 0)
     {
@@ -2318,8 +2403,7 @@
 void
 TcpSocketBase::Retransmit ()
 {
-  m_nextTxSequence = m_txBuffer.HeadSequence (); // Start from highest Ack
-  m_rtt->IncreaseMultiplier (); // Double the timeout value for next retx timer
+  m_nextTxSequence = m_txBuffer->HeadSequence (); // Start from highest Ack
   m_dupAckCount = 0;
   DoRetransmit (); // Retransmit the packet
 }
@@ -2342,7 +2426,7 @@
       return;
     }
   // Retransmit non-data packet: Only if in FIN_WAIT_1 or CLOSING state
-  if (m_txBuffer.Size () == 0)
+  if (m_txBuffer->Size () == 0)
     {
       if (m_state == FIN_WAIT_1 || m_state == CLOSING)
         { // Must have lost FIN, re-send
@@ -2351,10 +2435,10 @@
       return;
     }
   // Retransmit a data packet: Call SendDataPacket
-  NS_LOG_LOGIC ("TcpSocketBase " << this << " retxing seq " << m_txBuffer.HeadSequence ());
-  uint32_t sz = SendDataPacket (m_txBuffer.HeadSequence (), m_segmentSize, true);
+  NS_LOG_LOGIC ("TcpSocketBase " << this << " retxing seq " << m_txBuffer->HeadSequence ());
+  uint32_t sz = SendDataPacket (m_txBuffer->HeadSequence (), m_segmentSize, true);
   // In case of RTO, advance m_nextTxSequence
-  m_nextTxSequence = std::max (m_nextTxSequence.Get (), m_txBuffer.HeadSequence () + sz);
+  m_nextTxSequence = std::max (m_nextTxSequence.Get (), m_txBuffer->HeadSequence () + sz);
 
 }
 
@@ -2386,25 +2470,25 @@
 void
 TcpSocketBase::SetSndBufSize (uint32_t size)
 {
-  m_txBuffer.SetMaxBufferSize (size);
+  m_txBuffer->SetMaxBufferSize (size);
 }
 
 uint32_t
 TcpSocketBase::GetSndBufSize (void) const
 {
-  return m_txBuffer.MaxBufferSize ();
+  return m_txBuffer->MaxBufferSize ();
 }
 
 void
 TcpSocketBase::SetRcvBufSize (uint32_t size)
 {
-  m_rxBuffer.SetMaxBufferSize (size);
+  m_rxBuffer->SetMaxBufferSize (size);
 }
 
 uint32_t
 TcpSocketBase::GetRcvBufSize (void) const
 {
-  return m_rxBuffer.MaxBufferSize ();
+  return m_rxBuffer->MaxBufferSize ();
 }
 
 void
@@ -2525,6 +2609,7 @@
     }
 
   m_timestampEnabled = false;
+
   if (header.HasOption (TcpOption::TS))
     {
       m_timestampEnabled = true;
@@ -2574,7 +2659,7 @@
 TcpSocketBase::CalculateWScale () const
 {
   NS_LOG_FUNCTION (this);
-  uint32_t maxSpace = m_rxBuffer.MaxBufferSize ();
+  uint32_t maxSpace = m_rxBuffer->MaxBufferSize ();
   uint8_t scale = 0;
 
   while (maxSpace > m_maxWinSize)
@@ -2590,7 +2675,7 @@
     }
 
   NS_LOG_INFO ("Node " << m_node->GetId () << " calculated wscale factor of " <<
-               static_cast<int> (scale) << " for buffer size " << m_rxBuffer.MaxBufferSize ());
+               static_cast<int> (scale) << " for buffer size " << m_rxBuffer->MaxBufferSize ());
   return scale;
 }
 
@@ -2621,10 +2706,9 @@
 
   Ptr<const TcpOptionTS> ts = DynamicCast<const TcpOptionTS> (option);
   m_timestampToEcho = ts->GetTimestamp ();
-  m_lastEchoedTime = ts->GetEcho ();
 
   NS_LOG_INFO (m_node->GetId () << " Got timestamp=" <<
-               m_timestampToEcho << " and Echo="     << m_lastEchoedTime);
+               m_timestampToEcho << " and Echo="     << ts->GetEcho ());
 }
 
 void
@@ -2642,4 +2726,54 @@
                option->GetTimestamp () << " echo=" << m_timestampToEcho);
 }
 
+void
+TcpSocketBase::SetMinRto (Time minRto)
+{
+  NS_LOG_FUNCTION (this << minRto);
+  m_minRto = minRto;
+}
+
+Time
+TcpSocketBase::GetMinRto (void) const
+{
+  return m_minRto;
+}
+
+void
+TcpSocketBase::SetClockGranularity (Time clockGranularity)
+{
+  NS_LOG_FUNCTION (this << clockGranularity);
+  m_clockGranularity = clockGranularity;
+}
+
+Time
+TcpSocketBase::GetClockGranularity (void) const
+{
+  return m_clockGranularity;
+}
+
+Ptr<TcpTxBuffer>
+TcpSocketBase::GetTxBuffer (void) const
+{
+  return m_txBuffer;
+}
+
+Ptr<TcpRxBuffer>
+TcpSocketBase::GetRxBuffer (void) const
+{
+  return m_rxBuffer;
+}
+
+
+//RttHistory methods
+RttHistory::RttHistory (SequenceNumber32 s, uint32_t c, Time t)
+  : seq (s), count (c), time (t), retx (false)
+{
+}
+
+RttHistory::RttHistory (const RttHistory& h)
+  : seq (h.seq), count (h.count), time (h.time), retx (h.retx)
+{
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/internet/model/tcp-socket-base.h ns-3.22/src/internet/model/tcp-socket-base.h
--- ns-3.21/src/internet/model/tcp-socket-base.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-socket-base.h	2015-02-05 15:46:22.000000000 -0800
@@ -47,6 +47,35 @@
 class TcpHeader;
 
 /**
+ * \ingroup tcp
+ *
+ * \brief Helper class to store RTT measurements
+ */
+class RttHistory {
+public:
+  /**
+   * \brief Constructor - builds an RttHistory with the given parameters
+   * \param s First sequence number in packet sent
+   * \param c Number of bytes sent
+   * \param t Time this one was sent
+   */
+  RttHistory (SequenceNumber32 s, uint32_t c, Time t);
+  /**
+   * \brief Copy constructor
+   * \param h the object to copy
+   */
+  RttHistory (const RttHistory& h); // Copy constructor
+public:
+  SequenceNumber32  seq;  //!< First sequence number in packet sent
+  uint32_t        count;  //!< Number of bytes sent
+  Time            time;   //!< Time this one was sent
+  bool            retx;   //!< True if this has been retransmitted
+};
+
+/// Container for RttHistory objects
+typedef std::deque<RttHistory> RttHistory_t;
+
+/**
  * \ingroup socket
  * \ingroup tcp
  *
@@ -101,6 +130,43 @@
    */
   virtual void SetRtt (Ptr<RttEstimator> rtt);
 
+  /**
+   * \brief Sets the Minimum RTO.
+   * \param minRto The minimum RTO.
+   */
+  void SetMinRto (Time minRto);
+
+  /**
+   * \brief Get the Minimum RTO.
+   * \return The minimum RTO.
+   */
+  Time GetMinRto (void) const;
+
+  /**
+   * \brief Sets the Clock Granularity (used in RTO calcs).
+   * \param clockGranularity The Clock Granularity
+   */
+  void SetClockGranularity (Time clockGranularity);
+
+  /**
+   * \brief Get the Clock Granularity (used in RTO calcs).
+   * \return The Clock Granularity.
+   */
+  Time GetClockGranularity (void) const;
+
+  /**
+   * \brief Get a pointer to the Tx buffer
+   * \return a pointer to the tx buffer
+   */
+  Ptr<TcpTxBuffer> GetTxBuffer (void) const;
+
+  /**
+   * \brief Get a pointer to the Rx buffer
+   * \return a pointer to the rx buffer
+   */
+  Ptr<TcpRxBuffer> GetRxBuffer (void) const;
+
+
   // Necessary implementations of null functions from ns3::Socket
   virtual enum SocketErrno GetErrno (void) const;    // returns m_errno
   virtual enum SocketType GetSocketType (void) const; // returns socket type
@@ -585,7 +651,7 @@
    *
    * Calculate our factor from the rxBuffer max size
    *
-   * \param header TcpHeader where the method should add the window scale option
+   * \returns the Window Scale factor
    */
   uint8_t CalculateWScale () const;
 
@@ -624,10 +690,13 @@
   uint32_t          m_cnCount;         //!< Count of remaining connection retries
   uint32_t          m_cnRetries;       //!< Number of connection retries before giving up
   TracedValue<Time> m_rto;             //!< Retransmit timeout
+  Time              m_minRto;          //!< minimum value of the Retransmit timeout
+  Time              m_clockGranularity; //!< Clock Granularity used in RTO calcs
   TracedValue<Time> m_lastRtt;         //!< Last RTT sample collected
   Time              m_delAckTimeout;   //!< Time to delay an ACK
   Time              m_persistTimeout;  //!< Time between sending 1-byte probes
   Time              m_cnTimeout;       //!< Timeout for connection retry
+  RttHistory_t      m_history;         //!< List of sent packet
 
   // Connections to other layers of TCP/IP
   Ipv4EndPoint*       m_endPoint;   //!< the IPv4 endpoint
@@ -642,8 +711,8 @@
   // Rx and Tx buffer management
   TracedValue<SequenceNumber32> m_nextTxSequence; //!< Next seqnum to be sent (SND.NXT), ReTx pushes it back
   TracedValue<SequenceNumber32> m_highTxMark;     //!< Highest seqno ever sent, regardless of ReTx
-  TcpRxBuffer                   m_rxBuffer;       //!< Rx buffer (reordering buffer)
-  TcpTxBuffer                   m_txBuffer;       //!< Tx buffer
+  Ptr<TcpRxBuffer>              m_rxBuffer;       //!< Rx buffer (reordering buffer)
+  Ptr<TcpTxBuffer>              m_txBuffer;       //!< Tx buffer
 
   // State-related attributes
   TracedValue<TcpStates_t> m_state;         //!< TCP state
@@ -661,13 +730,12 @@
   TracedValue<uint32_t> m_rWnd;        //!< Flow control window at remote side
 
   // Options
-  bool    m_winScalingEnabled;
-  uint8_t m_sndScaleFactor;
-  uint8_t m_rcvScaleFactor;
-
-  bool     m_timestampEnabled;
-  uint32_t m_timestampToEcho;
-  uint32_t m_lastEchoedTime;
+  bool    m_winScalingEnabled;    //!< Window Scale option enabled
+  uint8_t m_sndScaleFactor;       //!< Sent Window Scale (i.e., the one of the node)
+  uint8_t m_rcvScaleFactor;       //!< Received Window Scale (i.e., the one of the peer)
+
+  bool     m_timestampEnabled;    //!< Timestamp option enabled
+  uint32_t m_timestampToEcho;     //!< Timestamp to echo
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/internet/model/tcp-socket.cc ns-3.22/src/internet/model/tcp-socket.cc
--- ns-3.21/src/internet/model/tcp-socket.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-socket.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/nstime.h"
 #include "tcp-socket.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpSocket");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpSocket");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpSocket);
 
 const char* const TcpSocket::TcpStateName[LAST_STATE] = { "CLOSED", "LISTEN", "SYN_SENT", "SYN_RCVD", "ESTABLISHED", "CLOSE_WAIT", "LAST_ACK", "FIN_WAIT_1", "FIN_WAIT_2", "CLOSING", "TIME_WAIT" };
diff -Naur ns-3.21/src/internet/model/tcp-socket-factory-impl.h ns-3.22/src/internet/model/tcp-socket-factory-impl.h
--- ns-3.21/src/internet/model/tcp-socket-factory-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-socket-factory-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -31,7 +31,9 @@
  * \ingroup internet
  * \defgroup tcp Tcp
  *
- * This class serves to create sockets of the TcpSocketBase type.
+ * Transmission Control Protocol
+ *
+ * See \RFC{793} and others.
  */
 
 /**
@@ -39,6 +41,8 @@
  *
  * \brief socket factory implementation for native ns-3 TCP
  *
+ *
+ * This class serves to create sockets of the TcpSocketBase type.
  */
 class TcpSocketFactoryImpl : public TcpSocketFactory
 {
diff -Naur ns-3.21/src/internet/model/tcp-socket.h ns-3.22/src/internet/model/tcp-socket.h
--- ns-3.21/src/internet/model/tcp-socket.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-socket.h	2015-02-05 15:46:22.000000000 -0800
@@ -36,7 +36,10 @@
 class Packet;
 
 /**
+ * \ingroup tcp
  * \brief Names of the 11 TCP states
+ *
+ * \todo This should be a member of TcpSocket.
  */
 typedef enum {
   CLOSED,       // 0
@@ -54,6 +57,16 @@
 } TcpStates_t;
 
 /**
+ * \ingroup tcp
+ * TracedValue Callback signature for TcpStates_t
+ *
+ * \param [in] oldValue original value of the traced variable
+ * \param [in] newValue new value of the traced variable
+ */
+typedef void (* TcpStatesTracedValueCallback)(const TcpStates_t oldValue,
+                                              const TcpStates_t newValue);
+
+/**
  * \ingroup socket
  *
  * \brief (abstract) base class of all TcpSockets
diff -Naur ns-3.21/src/internet/model/tcp-tahoe.cc ns-3.22/src/internet/model/tcp-tahoe.cc
--- ns-3.21/src/internet/model/tcp-tahoe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-tahoe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/abort.h"
 #include "ns3/node.h"
 
-NS_LOG_COMPONENT_DEFINE ("TcpTahoe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TcpTahoe");
+
 NS_OBJECT_ENSURE_REGISTERED (TcpTahoe);
 
 TypeId
@@ -46,10 +46,12 @@
                     MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("CongestionWindow",
                      "The TCP connection's congestion window",
-                     MakeTraceSourceAccessor (&TcpTahoe::m_cWnd))
+                     MakeTraceSourceAccessor (&TcpTahoe::m_cWnd),
+                     "ns3::TracedValue::Uint32Callback")
     .AddTraceSource ("SlowStartThreshold",
                      "TCP slow start threshold (bytes)",
-                     MakeTraceSourceAccessor (&TcpTahoe::m_ssThresh))
+                     MakeTraceSourceAccessor (&TcpTahoe::m_ssThresh),
+                     "ns3::TracedValue::Uint32Callback")
   ;
   return tid;
 }
@@ -144,7 +146,7 @@
       // (Fall & Floyd 1996, sec.1)
       m_ssThresh = std::max (static_cast<unsigned> (m_cWnd / 2), m_segmentSize * 2);  // Half ssthresh
       m_cWnd = m_segmentSize; // Run slow start again
-      m_nextTxSequence = m_txBuffer.HeadSequence (); // Restart from highest Ack
+      m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
       NS_LOG_INFO ("Triple Dup Ack: new ssthresh " << m_ssThresh << " cwnd " << m_cWnd);
       NS_LOG_LOGIC ("Triple Dup Ack: retransmit missing segment at " << Simulator::Now ().GetSeconds ());
       DoRetransmit ();
@@ -159,12 +161,11 @@
   // If erroneous timeout in closed/timed-wait state, just return
   if (m_state == CLOSED || m_state == TIME_WAIT) return;
   // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer.HeadSequence () >= m_highTxMark) return;
+  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark) return;
 
   m_ssThresh = std::max (static_cast<unsigned> (m_cWnd / 2), m_segmentSize * 2);  // Half ssthresh
   m_cWnd = m_segmentSize;                   // Set cwnd to 1 segSize (RFC2001, sec.2)
-  m_nextTxSequence = m_txBuffer.HeadSequence (); // Restart from highest Ack
-  m_rtt->IncreaseMultiplier ();             // Double the next RTO
+  m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
   DoRetransmit ();                          // Retransmit the packet
 }
 
diff -Naur ns-3.21/src/internet/model/tcp-tx-buffer.cc ns-3.22/src/internet/model/tcp-tx-buffer.cc
--- ns-3.21/src/internet/model/tcp-tx-buffer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-tx-buffer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,9 +28,11 @@
 
 #include "tcp-tx-buffer.h"
 
+namespace ns3 {
+
 NS_LOG_COMPONENT_DEFINE ("TcpTxBuffer");
 
-namespace ns3 {
+NS_OBJECT_ENSURE_REGISTERED (TcpTxBuffer);
 
 TypeId
 TcpTxBuffer::GetTypeId (void)
@@ -40,7 +42,8 @@
     .AddConstructor<TcpTxBuffer> ()
     .AddTraceSource ("UnackSequence",
                      "First unacknowledged sequence number (SND.UNA)",
-                     MakeTraceSourceAccessor (&TcpTxBuffer::m_firstByteSeq))
+                     MakeTraceSourceAccessor (&TcpTxBuffer::m_firstByteSeq),
+                     "ns3::SequenceNumber32TracedValueCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/internet/model/tcp-westwood.cc ns-3.22/src/internet/model/tcp-westwood.cc
--- ns-3.21/src/internet/model/tcp-westwood.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/tcp-westwood.cc	2015-02-05 15:46:22.000000000 -0800
@@ -42,10 +42,10 @@
 #include "ns3/sequence-number.h"
 #include "rtt-estimator.h"
 
-NS_LOG_COMPONENT_DEFINE("TcpWestwood");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE("TcpWestwood");
+
 NS_OBJECT_ENSURE_REGISTERED(TcpWestwood);
 
 TypeId
@@ -55,10 +55,12 @@
       .SetParent<TcpSocketBase>()
       .AddConstructor<TcpWestwood>()
       .AddTraceSource("CongestionWindow", "The TCP connection's congestion window",
-                      MakeTraceSourceAccessor(&TcpWestwood::m_cWnd))
+                      MakeTraceSourceAccessor(&TcpWestwood::m_cWnd),
+                      "ns3::TracedValue::Uint32Callback")
       .AddTraceSource ("SlowStartThreshold",
                        "TCP slow start threshold (bytes)",
-                       MakeTraceSourceAccessor (&TcpWestwood::m_ssThresh))
+                       MakeTraceSourceAccessor (&TcpWestwood::m_ssThresh),
+                       "ns3::TracedValue::Uint32Callback")
       .AddAttribute("FilterType", "Use this to choose no filter or Tustin's approximation filter",
                     EnumValue(TcpWestwood::TUSTIN), MakeEnumAccessor(&TcpWestwood::m_fType),
                     MakeEnumChecker(TcpWestwood::NONE, "None", TcpWestwood::TUSTIN, "Tustin"))
@@ -67,7 +69,8 @@
                     MakeEnumAccessor(&TcpWestwood::m_pType),
                     MakeEnumChecker(TcpWestwood::WESTWOOD, "Westwood",TcpWestwood::WESTWOODPLUS, "WestwoodPlus"))
       .AddTraceSource("EstimatedBW", "The estimated bandwidth",
-                    MakeTraceSourceAccessor(&TcpWestwood::m_currentBW));
+                    MakeTraceSourceAccessor(&TcpWestwood::m_currentBW),
+                      "ns3::TracedValue::DoubleCallback");
   return tid;
 }
 
@@ -304,23 +307,20 @@
   if (m_state == CLOSED || m_state == TIME_WAIT)
     return;
   // If all data are received, just return
-  if (m_txBuffer.HeadSequence() >= m_nextTxSequence)
+  if (m_txBuffer->HeadSequence () >= m_nextTxSequence)
     return;
 
   // Upon an RTO, adjust cwnd and ssthresh based on the estimated BW
-  m_ssThresh = std::max (static_cast<double> (2 * m_segmentSize), m_currentBW.Get() * static_cast<double> (m_minRtt.GetSeconds()));
+  m_ssThresh = std::max (static_cast<double> (2 * m_segmentSize), m_currentBW.Get () * static_cast<double> (m_minRtt.GetSeconds ()));
   m_cWnd = m_segmentSize;
 
   // Restart from highest ACK
-  m_nextTxSequence = m_txBuffer.HeadSequence();
+  m_nextTxSequence = m_txBuffer->HeadSequence ();
   NS_LOG_INFO ("RTO. Reset cwnd to " << m_cWnd <<
       ", ssthresh to " << m_ssThresh << ", restart from seqnum " << m_nextTxSequence);
 
-  // Double the next RTO
-  m_rtt->IncreaseMultiplier();
-
   // Retransmit the packet
-  DoRetransmit();
+  DoRetransmit ();
 }
 
 void
diff -Naur ns-3.21/src/internet/model/udp-l4-protocol.cc ns-3.22/src/internet/model/udp-l4-protocol.cc
--- ns-3.21/src/internet/model/udp-l4-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/udp-l4-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,10 +40,10 @@
 #include "ipv6-l3-protocol.h"
 #include "udp-socket-impl.h"
 
-NS_LOG_COMPONENT_DEFINE ("UdpL4Protocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UdpL4Protocol");
+
 NS_OBJECT_ENSURE_REGISTERED (UdpL4Protocol);
 
 /* see http://www.iana.org/assignments/protocol-numbers */
diff -Naur ns-3.21/src/internet/model/udp-socket.cc ns-3.22/src/internet/model/udp-socket.cc
--- ns-3.21/src/internet/model/udp-socket.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/udp-socket.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/trace-source-accessor.h"
 #include "udp-socket.h"
 
-NS_LOG_COMPONENT_DEFINE ("UdpSocket");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UdpSocket");
+
 NS_OBJECT_ENSURE_REGISTERED (UdpSocket);
 
 TypeId
diff -Naur ns-3.21/src/internet/model/udp-socket-factory-impl.h ns-3.22/src/internet/model/udp-socket-factory-impl.h
--- ns-3.21/src/internet/model/udp-socket-factory-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/udp-socket-factory-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -46,7 +46,6 @@
 /**
  * \ingroup udp
  * \brief Object to create UDP socket instances 
- * \internal
  *
  * This class implements the API for creating UDP sockets.
  * It is a socket factory (deriving from class SocketFactory).
@@ -66,7 +65,6 @@
   /**
    * \brief Implements a method to create a Udp-based socket and return
    * a base class smart pointer to the socket.
-   * \internal
    *
    * \return smart pointer to Socket
    */
diff -Naur ns-3.21/src/internet/model/udp-socket-impl.cc ns-3.22/src/internet/model/udp-socket-impl.cc
--- ns-3.21/src/internet/model/udp-socket-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/model/udp-socket-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,10 +39,10 @@
 #include "ipv6-end-point.h"
 #include <limits>
 
-NS_LOG_COMPONENT_DEFINE ("UdpSocketImpl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UdpSocketImpl");
+
 NS_OBJECT_ENSURE_REGISTERED (UdpSocketImpl);
 
 // The correct maximum UDP message size is 65507, as determined by the following formula:
@@ -57,8 +57,10 @@
   static TypeId tid = TypeId ("ns3::UdpSocketImpl")
     .SetParent<UdpSocket> ()
     .AddConstructor<UdpSocketImpl> ()
-    .AddTraceSource ("Drop", "Drop UDP packet due to receive buffer overflow",
-                     MakeTraceSourceAccessor (&UdpSocketImpl::m_dropTrace))
+    .AddTraceSource ("Drop",
+                     "Drop UDP packet due to receive buffer overflow",
+                     MakeTraceSourceAccessor (&UdpSocketImpl::m_dropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddAttribute ("IcmpCallback", "Callback invoked whenever an icmp error is received on this socket.",
                    CallbackValue (),
                    MakeCallbackAccessor (&UdpSocketImpl::m_icmpCallback),
diff -Naur ns-3.21/src/internet/test/error-channel.cc ns-3.22/src/internet/test/error-channel.cc
--- ns-3.21/src/internet/test/error-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/error-channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/node.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("ErrorChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ErrorChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (ErrorChannel);
 
 TypeId 
diff -Naur ns-3.21/src/internet/test/ipv4-global-routing-test-suite.cc ns-3.22/src/internet/test/ipv4-global-routing-test-suite.cc
--- ns-3.21/src/internet/test/ipv4-global-routing-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/ipv4-global-routing-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -48,7 +48,6 @@
 private:
   void SendData (uint8_t index);
   void ShutDownSock (uint8_t index);
-  void SinkRx (std::string path, Ptr<const Packet> p, const Address &address);
   void HandleRead (Ptr<Socket>);
   virtual void DoRun (void);
 
@@ -85,21 +84,6 @@
     }
 }
 
-void
-Ipv4DynamicGlobalRoutingTestCase::SinkRx (std::string path, Ptr<const Packet> p, const Address& address)
-{
-  Ipv4PacketInfoTag tag;
-  bool found;
-  found = p->PeekPacketTag (tag);
-  uint8_t now = static_cast<uint8_t> (Simulator::Now ().GetSeconds ());
-  if (found)
-    {
-      ;
-    }
-  m_firstInterface[now]++;
-  m_count++;
-}
-
 void 
 Ipv4DynamicGlobalRoutingTestCase::HandleRead (Ptr<Socket> socket)
 {
@@ -140,7 +124,7 @@
   Ptr<Packet> packet = Create<Packet> (m_packetSize);
   m_sendSocks[index].first->Send (packet);
 
-  Time tNext (Seconds (m_packetSize * 8 / static_cast<double> (m_dataRate.GetBitRate ())));
+  Time tNext (MicroSeconds (m_packetSize * 8 * 1e6 / m_dataRate.GetBitRate ()));
   Simulator::Schedule (tNext, &Ipv4DynamicGlobalRoutingTestCase::SendData, this, index);
 }
 
@@ -261,10 +245,6 @@
   // then the next p2p is numbered 2
   uint32_t ipv4ifIndex1 = 2;
 
-  // Trace receptions
-  Config::Connect ("/NodeList/6/ApplicationList/*/$ns3::PacketSink/Rx",
-                   MakeCallback (&Ipv4DynamicGlobalRoutingTestCase::SinkRx, this));
-
   Simulator::Schedule (Seconds (2), &Ipv4::SetDown,ipv41, ipv4ifIndex1);
   Simulator::Schedule (Seconds (4), &Ipv4::SetUp,ipv41, ipv4ifIndex1);
 
diff -Naur ns-3.21/src/internet/test/ipv6-dual-stack-test-suite.cc ns-3.22/src/internet/test/ipv6-dual-stack-test-suite.cc
--- ns-3.21/src/internet/test/ipv6-dual-stack-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/ipv6-dual-stack-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -48,10 +48,10 @@
 
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6DualStackTestSuite");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6DualStackTestSuite");
+
 class DualStackTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/internet/test/rtt-test.cc ns-3.22/src/internet/test/rtt-test.cc
--- ns-3.21/src/internet/test/rtt-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/rtt-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -16,93 +16,153 @@
  */
 
 #include "ns3/test.h"
-#include "ns3/core-module.h"
-#include "ns3/internet-module.h"
 #include "ns3/rtt-estimator.h"
+#include "ns3/attribute.h"
+#include "ns3/nstime.h"
+#include "ns3/config.h"
 #include "ns3/log.h"
-
-NS_LOG_COMPONENT_DEFINE ("RttTestSuite");
+#include "ns3/double.h"
 
 using namespace ns3;
 
-class RttTestCase : public TestCase
+NS_LOG_COMPONENT_DEFINE ("RttEstimatorTestSuite");
+
+class RttEstimatorTestCase : public TestCase
 {
 public:
-  RttTestCase (double mean,
-               double variance,
-               double gain);
+  RttEstimatorTestCase ();
 
 private:
   virtual void DoRun (void);
   virtual void DoTeardown (void);
 
-  double m_mean;
-  double m_variance;
-  double m_gain;
-
+  void CheckValues (Ptr<RttEstimator> rtt, Time m, Time e, Time v);
+  void CheckValuesWithTolerance (Ptr<RttEstimator> rtt, Time m, Time e, Time v);
 };
 
-RttTestCase::RttTestCase (double mean,
-                          double variance,
-                          double gain)
-  : TestCase ("Rtt Estimate Test"),
-    m_mean (mean),
-    m_variance (variance),
-    m_gain (gain)
+RttEstimatorTestCase::RttEstimatorTestCase ()
+  : TestCase ("Rtt Estimator Test")
 {
 }
 
 void
-RttTestCase::DoRun (void)
+RttEstimatorTestCase::CheckValues (Ptr<RttEstimator> rtt, Time m, Time e, Time v)
 {
-  Config::SetDefault ("ns3::RttEstimator::InitialEstimation", TimeValue (MilliSeconds (m_mean)));
-  Config::SetDefault ("ns3::RttMeanDeviation::Gain", DoubleValue (m_gain));
-  Config::SetDefault ("ns3::RttEstimator::MinRTO", TimeValue (Seconds (0)));
-
-  Ptr<RttMeanDeviation> rtt = CreateObject<RttMeanDeviation> ();
-  Ptr<NormalRandomVariable> nv = CreateObject<NormalRandomVariable> ();
-  nv->SetAttribute ("Mean", DoubleValue (m_mean));
-  nv->SetAttribute ("Variance", DoubleValue (m_variance));
-
-  NS_TEST_EXPECT_MSG_EQ (m_mean, rtt->GetCurrentEstimate ().GetMilliSeconds (), "Initial estimate should match mean");
-
-  double a, v, g;
-  a = v = m_mean;
-  g = m_gain;
+  rtt->Measurement (m);
+  NS_TEST_EXPECT_MSG_EQ (rtt->GetEstimate (), e, "Estimate not correct");
+  NS_TEST_EXPECT_MSG_EQ (rtt->GetVariation (), v, "Estimate not correct");
+}
 
-  for (uint32_t i = 0; i < 10000; ++i)
-    {
-      int measurement = nv->GetInteger ();
-      rtt->Measurement (Time::FromInteger (measurement, Time::MS));
-      double err = (measurement - a);
-      a = a + g * err;
-      v = v + g * (std::abs (err) - v);
-    }
+void
+RttEstimatorTestCase::CheckValuesWithTolerance (Ptr<RttEstimator> rtt, Time m, Time e, Time v)
+{
+  rtt->Measurement (m);
+  NS_TEST_EXPECT_MSG_EQ_TOL (rtt->GetEstimate (), e, Time (NanoSeconds (1)), "Estimate not correct");
+  NS_TEST_EXPECT_MSG_EQ_TOL (rtt->GetVariation (), v, Time (NanoSeconds (1)), "Estimate not correct");
+}
 
-  //5% tolerance
-  double tolerance = m_mean * .05;
 
-  NS_TEST_ASSERT_MSG_EQ_TOL (m_mean, rtt->GetCurrentEstimate ().GetMilliSeconds (), tolerance, "Unexpected estimate");
+void
+RttEstimatorTestCase::DoRun (void)
+{
+  // Set to a non-default value
+  Config::SetDefault ("ns3::RttEstimator::InitialEstimation", TimeValue (MilliSeconds (500)));
+  Config::SetDefault ("ns3::RttMeanDeviation::Alpha", DoubleValue (0.5));
+  Config::SetDefault ("ns3::RttMeanDeviation::Beta", DoubleValue (0.6));
 
-  int expectedTimeout = (int)a + 4 * (int)v;
+  Ptr<RttMeanDeviation> rtt = CreateObject<RttMeanDeviation> ();
 
-  NS_TEST_EXPECT_MSG_EQ (rtt->RetransmitTimeout ().GetMilliSeconds (), expectedTimeout, "Timeout values do not match");
+  bool ok;
+  TimeValue timeval;
+  DoubleValue doubleval;
+  ok = rtt->GetAttributeFailSafe ("InitialEstimation", timeval);
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be gettable");
+  NS_TEST_EXPECT_MSG_EQ (timeval.Get (), MilliSeconds (500), "Initial estimate should match");
+  ok = rtt->GetAttributeFailSafe ("Alpha", doubleval);
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be gettable");
+  NS_TEST_ASSERT_MSG_EQ_TOL (doubleval.Get (), 0.5, 0.001, "Alpha not set");
+  ok = rtt->GetAttributeFailSafe ("Beta", doubleval);
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be gettable");
+  NS_TEST_ASSERT_MSG_EQ_TOL (doubleval.Get (), 0.6, 0.001, "Beta not set");
+
+  // Reset to default values
+  ok = rtt->SetAttributeFailSafe ("InitialEstimation", TimeValue (Seconds (1)));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  ok = rtt->SetAttributeFailSafe ("Alpha", DoubleValue (0.125));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  ok = rtt->SetAttributeFailSafe ("Beta", DoubleValue (0.25));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  rtt->Reset ();
+
+  Time t (Seconds (1));
+  Time t2 (MilliSeconds (125));
+  NS_TEST_EXPECT_MSG_EQ (t2, Time::From (t.GetInteger () >> 3), "X");
+  NS_TEST_EXPECT_MSG_EQ (rtt->GetEstimate (), Time (Seconds (1)), "Incorrect initial estimate");
+  NS_TEST_EXPECT_MSG_EQ (rtt->GetVariation (), Time (Seconds (0)), "Incorrect initial variance");
+  NS_TEST_EXPECT_MSG_EQ (rtt->GetNSamples (), 0, "Incorrect initial estimate");
+
+  // CheckValues (rtt, measurement, new estimate, new variance);
+  // Initial value:  SRTT <- measurement; RTTVAR <- measurement/2
+  CheckValues (rtt, Time (Seconds (1)), Time (Seconds (1)), Time (MilliSeconds (500)));
+  // Subsequent values:  according to RFC 6298
+  CheckValues (rtt, Time (MilliSeconds (1200)), Time (MilliSeconds (1025)), Time (MilliSeconds (425)));
+  Ptr<RttEstimator> copy = rtt->Copy ();
+  CheckValues (rtt, Time (MilliSeconds (900)), Time (MicroSeconds (1009375)), Time (MilliSeconds (350)));
+
+  // Check behavior of copy; should have inherited state
+  CheckValues (copy, Time (MilliSeconds (900)), Time (MicroSeconds (1009375)), Time (MilliSeconds (350)));
+
+  // Floating point arithmetic due to alpha and beta settings
+  rtt->Reset ();
+  ok = rtt->SetAttributeFailSafe ("Alpha", DoubleValue (0.1));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  ok = rtt->SetAttributeFailSafe ("Beta", DoubleValue (0.1));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  CheckValuesWithTolerance (rtt, Time (Seconds (1.2)), Time (Seconds (1.2)), Time (Seconds (0.6)));
+  CheckValuesWithTolerance (rtt, Time (MilliSeconds (950)), Time (MilliSeconds (1175)), Time (MilliSeconds (565)));
+  CheckValuesWithTolerance (rtt, Time (MilliSeconds (1400)), Time (MicroSeconds (1197500)), Time (MilliSeconds (531)));
+
+  // Check boundary values; 0 will not update, 1 will use most recent value
+  rtt->Reset ();
+  ok = rtt->SetAttributeFailSafe ("Alpha", DoubleValue (0));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  ok = rtt->SetAttributeFailSafe ("Beta", DoubleValue (0));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  CheckValues (rtt, Time (Seconds (1)), Time (Seconds (1)), Time (MilliSeconds (500)));
+  CheckValues (rtt, Time (Seconds (2)), Time (Seconds (1)), Time (MilliSeconds (500)));
+  CheckValues (rtt, Time (Seconds (3)), Time (Seconds (1)), Time (MilliSeconds (500)));
+  rtt->Reset ();
+  ok = rtt->SetAttributeFailSafe ("Alpha", DoubleValue (1));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  ok = rtt->SetAttributeFailSafe ("Beta", DoubleValue (1));
+  NS_TEST_EXPECT_MSG_EQ (ok, true, "Attribute should be settable");
+  CheckValues (rtt, Time (Seconds (1)), Time (Seconds (1)), Time (MilliSeconds (500)));
+  CheckValues (rtt, Time (Seconds (2.5)), Time (Seconds (2.5)), Time (Seconds (1.5)));
+  CheckValues (rtt, Time (Seconds (7)), Time (Seconds (7)), Time (Seconds (4.5)));
+  
+  // recheck initial values
+  rtt->Reset ();
+  NS_TEST_EXPECT_MSG_EQ (rtt->GetEstimate (), Time (Seconds (1)), "Incorrect initial estimate");
+  NS_TEST_EXPECT_MSG_EQ (rtt->GetVariation (), Time (Seconds (0)), "Incorrect initial variation");
+  NS_TEST_EXPECT_MSG_EQ (rtt->GetNSamples (), 0, "Incorrect initial estimate");
 }
+
 void
-RttTestCase::DoTeardown (void)
+RttEstimatorTestCase::DoTeardown (void)
 {
 }
 
-
-static class RttTestSuite : public TestSuite
+class RttEstimatorTestSuite : public TestSuite
 {
 public:
-  RttTestSuite ()
-    : TestSuite ("rtt", UNIT)
+  RttEstimatorTestSuite ()
+    : TestSuite ("rtt-estimator", UNIT)
   {
-    AddTestCase (new RttTestCase (150.0, 10.0, .1), TestCase::QUICK);
-    AddTestCase (new RttTestCase (5000.0, 5.0, .5), TestCase::QUICK);
-    AddTestCase (new RttTestCase (200.0, 25.0, .7), TestCase::QUICK);
+    AddTestCase (new RttEstimatorTestCase, TestCase::QUICK);
   }
 
-} g_tcpTestSuite;
+};
+
+static RttEstimatorTestSuite  g_rttEstimatorTestSuite;
+
+
diff -Naur ns-3.21/src/internet/test/tcp-header-test.cc ns-3.22/src/internet/test/tcp-header-test.cc
--- ns-3.21/src/internet/test/tcp-header-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/tcp-header-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,8 +23,7 @@
 #include "ns3/core-module.h"
 #include "ns3/tcp-header.h"
 #include "ns3/buffer.h"
-
-#include "../src/internet/model/tcp-option-rfc793.h"
+#include "ns3/private/tcp-option-rfc793.h"
 
 namespace ns3 {
 
diff -Naur ns-3.21/src/internet/test/tcp-option-test.cc ns-3.22/src/internet/test/tcp-option-test.cc
--- ns-3.21/src/internet/test/tcp-option-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/tcp-option-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,8 +20,8 @@
 #include "ns3/test.h"
 #include "ns3/core-module.h"
 #include "ns3/tcp-option.h"
-#include "../src/internet/model/tcp-option-winscale.h"
-#include "../src/internet/model/tcp-option-ts.h"
+#include "ns3/private/tcp-option-winscale.h"
+#include "ns3/private/tcp-option-ts.h"
 
 #include <string.h>
 
diff -Naur ns-3.21/src/internet/test/tcp-test.cc ns-3.22/src/internet/test/tcp-test.cc
--- ns-3.21/src/internet/test/tcp-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/tcp-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -49,10 +49,10 @@
 
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("TcpTestSuite");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("TcpTestSuite");
+
 class TcpTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/internet/test/tcp-timestamp-test.cc ns-3.22/src/internet/test/tcp-timestamp-test.cc
--- ns-3.21/src/internet/test/tcp-timestamp-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/tcp-timestamp-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -45,7 +45,7 @@
 #include "ns3/udp-l4-protocol.h"
 #include "ns3/tcp-l4-protocol.h"
 
-#include "../src/internet/model/tcp-option-ts.h"
+#include "ns3/private/tcp-option-ts.h"
 
 namespace ns3 {
 
diff -Naur ns-3.21/src/internet/test/tcp-wscaling-test.cc ns-3.22/src/internet/test/tcp-wscaling-test.cc
--- ns-3.21/src/internet/test/tcp-wscaling-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/test/tcp-wscaling-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -385,8 +385,8 @@
       break;
     }
 
-  m_server->m_rxBuffer.SetMaxBufferSize (m_maxServerBufferSize);
-  m_source->m_rxBuffer.SetMaxBufferSize (m_maxSourceBufferSize);
+  m_server->m_rxBuffer->SetMaxBufferSize (m_maxServerBufferSize);
+  m_source->m_rxBuffer->SetMaxBufferSize (m_maxSourceBufferSize);
 
   uint16_t port = 50000;
   InetSocketAddress serverlocaladdr (Ipv4Address::GetAny (), port);
diff -Naur ns-3.21/src/internet/wscript ns-3.22/src/internet/wscript
--- ns-3.21/src/internet/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/internet/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -244,6 +244,13 @@
         'test/rtt-test.cc',
         'test/codel-queue-test-suite.cc',
         ]
+    privateheaders = bld(features='ns3privateheader')
+    privateheaders.module = 'internet'
+    privateheaders.source = [
+        'model/tcp-option-winscale.h',
+        'model/tcp-option-ts.h',
+        'model/tcp-option-rfc793.h',
+        ]
     headers = bld(features='ns3header')
     headers.module = 'internet'
     headers.source = [
diff -Naur ns-3.21/src/lr-wpan/bindings/modulegen__gcc_ILP32.py ns-3.22/src/lr-wpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -20,12 +20,12 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyOption [enumeration]
-    module.add_enum('LrWpanPhyOption', ['IEEE_802_15_4_868MHZ_BPSK', 'IEEE_802_15_4_915MHZ_BPSK', 'IEEE_802_15_4_868MHZ_ASK', 'IEEE_802_15_4_915MHZ_ASK', 'IEEE_802_15_4_868MHZ_OQPSK', 'IEEE_802_15_4_915MHZ_OQPSK', 'IEEE_802_15_4_2_4GHZ_OQPSK', 'IEEE_802_15_4_INVALID_PHY_OPTION'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanTxOption [enumeration]
     module.add_enum('LrWpanTxOption', ['TX_OPTION_NONE', 'TX_OPTION_ACK', 'TX_OPTION_GTS', 'TX_OPTION_INDIRECT'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMcpsDataConfirmStatus [enumeration]
     module.add_enum('LrWpanMcpsDataConfirmStatus', ['IEEE_802_15_4_SUCCESS', 'IEEE_802_15_4_TRANSACTION_OVERFLOW', 'IEEE_802_15_4_TRANSACTION_EXPIRED', 'IEEE_802_15_4_CHANNEL_ACCESS_FAILURE', 'IEEE_802_15_4_INVALID_ADDRESS', 'IEEE_802_15_4_INVALID_GTS', 'IEEE_802_15_4_NO_ACK', 'IEEE_802_15_4_COUNTER_ERROR', 'IEEE_802_15_4_FRAME_TOO_LONG', 'IEEE_802_15_4_UNAVAILABLE_KEY', 'IEEE_802_15_4_UNSUPPORTED_SECURITY', 'IEEE_802_15_4_INVALID_PARAMETER'])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyOption [enumeration]
+    module.add_enum('LrWpanPhyOption', ['IEEE_802_15_4_868MHZ_BPSK', 'IEEE_802_15_4_915MHZ_BPSK', 'IEEE_802_15_4_868MHZ_ASK', 'IEEE_802_15_4_915MHZ_ASK', 'IEEE_802_15_4_868MHZ_OQPSK', 'IEEE_802_15_4_915MHZ_OQPSK', 'IEEE_802_15_4_2_4GHZ_OQPSK', 'IEEE_802_15_4_INVALID_PHY_OPTION'])
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyEnumeration [enumeration]
     module.add_enum('LrWpanPhyEnumeration', ['IEEE_802_15_4_PHY_BUSY', 'IEEE_802_15_4_PHY_BUSY_RX', 'IEEE_802_15_4_PHY_BUSY_TX', 'IEEE_802_15_4_PHY_FORCE_TRX_OFF', 'IEEE_802_15_4_PHY_IDLE', 'IEEE_802_15_4_PHY_INVALID_PARAMETER', 'IEEE_802_15_4_PHY_RX_ON', 'IEEE_802_15_4_PHY_SUCCESS', 'IEEE_802_15_4_PHY_TRX_OFF', 'IEEE_802_15_4_PHY_TX_ON', 'IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE', 'IEEE_802_15_4_PHY_READ_ONLY', 'IEEE_802_15_4_PHY_UNSPECIFIED'])
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPibAttributeIdentifier [enumeration]
@@ -335,6 +335,9 @@
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::McpsDataIndicationCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::McpsDataIndicationCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::McpsDataIndicationCallback&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::McpsDataConfirmCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::McpsDataConfirmCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::McpsDataConfirmCallback&')
@@ -1702,10 +1705,10 @@
     cls.add_method('CreateTxPowerSpectralDensity', 
                    'ns3::Ptr< ns3::SpectrumValue >', 
                    [param('double', 'txPower'), param('uint32_t', 'channel')])
-    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): static double ns3::LrWpanSpectrumValueHelper::TotalAvgPower(ns3::Ptr<ns3::SpectrumValue const> psd) [member function]
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): static double ns3::LrWpanSpectrumValueHelper::TotalAvgPower(ns3::Ptr<ns3::SpectrumValue const> psd, uint32_t channel) [member function]
     cls.add_method('TotalAvgPower', 
                    'double', 
-                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'psd')], 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'psd'), param('uint32_t', 'channel')], 
                    is_static=True)
     return
 
@@ -1955,10 +1958,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2338,10 +2341,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2630,7 +2633,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2681,6 +2689,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2757,6 +2770,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2791,6 +2808,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -2929,6 +2948,20 @@
 def register_Ns3LrWpanHelper_methods(root_module, cls):
     ## lr-wpan-helper.h (module 'lr-wpan'): ns3::LrWpanHelper::LrWpanHelper() [constructor]
     cls.add_constructor([])
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::LrWpanHelper::LrWpanHelper(bool useMultiModelSpectrumChannel) [constructor]
+    cls.add_constructor([param('bool', 'useMultiModelSpectrumChannel')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumChannel> ns3::LrWpanHelper::GetChannel() [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::SpectrumChannel >', 
+                   [])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::SetChannel(ns3::Ptr<ns3::SpectrumChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'channel')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::SetChannel(std::string channelName) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('std::string', 'channelName')])
     ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::AddMobility(ns3::Ptr<ns3::LrWpanPhy> phy, ns3::Ptr<ns3::MobilityModel> m) [member function]
     cls.add_method('AddMobility', 
                    'void', 
@@ -5326,11 +5359,6 @@
                    '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', 
@@ -5401,6 +5429,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/lr-wpan/bindings/modulegen__gcc_LP64.py ns-3.22/src/lr-wpan/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -335,6 +335,9 @@
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::McpsDataIndicationCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::McpsDataIndicationCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::McpsDataIndicationCallback&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::McpsDataConfirmCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::McpsDataConfirmCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::McpsDataConfirmCallback&')
@@ -1702,10 +1705,10 @@
     cls.add_method('CreateTxPowerSpectralDensity', 
                    'ns3::Ptr< ns3::SpectrumValue >', 
                    [param('double', 'txPower'), param('uint32_t', 'channel')])
-    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): static double ns3::LrWpanSpectrumValueHelper::TotalAvgPower(ns3::Ptr<ns3::SpectrumValue const> psd) [member function]
+    ## lr-wpan-spectrum-value-helper.h (module 'lr-wpan'): static double ns3::LrWpanSpectrumValueHelper::TotalAvgPower(ns3::Ptr<ns3::SpectrumValue const> psd, uint32_t channel) [member function]
     cls.add_method('TotalAvgPower', 
                    'double', 
-                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'psd')], 
+                   [param('ns3::Ptr< ns3::SpectrumValue const >', 'psd'), param('uint32_t', 'channel')], 
                    is_static=True)
     return
 
@@ -1955,10 +1958,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2338,10 +2341,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2630,7 +2633,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2681,6 +2689,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2757,6 +2770,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2791,6 +2808,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -2929,6 +2948,20 @@
 def register_Ns3LrWpanHelper_methods(root_module, cls):
     ## lr-wpan-helper.h (module 'lr-wpan'): ns3::LrWpanHelper::LrWpanHelper() [constructor]
     cls.add_constructor([])
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::LrWpanHelper::LrWpanHelper(bool useMultiModelSpectrumChannel) [constructor]
+    cls.add_constructor([param('bool', 'useMultiModelSpectrumChannel')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): ns3::Ptr<ns3::SpectrumChannel> ns3::LrWpanHelper::GetChannel() [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::SpectrumChannel >', 
+                   [])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::SetChannel(ns3::Ptr<ns3::SpectrumChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SpectrumChannel >', 'channel')])
+    ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::SetChannel(std::string channelName) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('std::string', 'channelName')])
     ## lr-wpan-helper.h (module 'lr-wpan'): void ns3::LrWpanHelper::AddMobility(ns3::Ptr<ns3::LrWpanPhy> phy, ns3::Ptr<ns3::MobilityModel> m) [member function]
     cls.add_method('AddMobility', 
                    'void', 
@@ -5326,11 +5359,6 @@
                    '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', 
@@ -5401,6 +5429,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc ns-3.22/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc
--- ns-3.21/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,6 +37,7 @@
 #include <ns3/node.h>
 #include <ns3/net-device.h>
 #include <ns3/single-model-spectrum-channel.h>
+#include <ns3/multi-model-spectrum-channel.h>
 #include <ns3/mac16-address.h>
 #include <ns3/constant-position-mobility-model.h>
 #include <ns3/uinteger.h>
@@ -95,7 +96,7 @@
   Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice> ();
   dev0->SetAddress (Mac16Address ("00:01"));
   dev1->SetAddress (Mac16Address ("00:02"));
-  Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel> ();
+  Ptr<MultiModelSpectrumChannel> channel = CreateObject<MultiModelSpectrumChannel> ();
   Ptr<LogDistancePropagationLossModel> model = CreateObject<LogDistancePropagationLossModel> ();
   channel->AddPropagationLossModel (model);
   dev0->SetChannel (channel);
diff -Naur ns-3.21/src/lr-wpan/helper/lr-wpan-helper.cc ns-3.22/src/lr-wpan/helper/lr-wpan-helper.cc
--- ns-3.21/src/lr-wpan/helper/lr-wpan-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/helper/lr-wpan-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,13 +25,16 @@
 #include <ns3/lr-wpan-net-device.h>
 #include <ns3/mobility-model.h>
 #include <ns3/single-model-spectrum-channel.h>
+#include <ns3/multi-model-spectrum-channel.h>
 #include <ns3/propagation-loss-model.h>
+#include <ns3/propagation-delay-model.h>
 #include <ns3/log.h>
-
-NS_LOG_COMPONENT_DEFINE ("LrWpanHelper");
+#include "ns3/names.h"
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanHelper");
+
 /**
  * @brief Output an ascii line representing the Transmit event (with context)
  * @param stream the output stream
@@ -63,8 +66,29 @@
 LrWpanHelper::LrWpanHelper (void)
 {
   m_channel = CreateObject<SingleModelSpectrumChannel> ();
-  Ptr<LogDistancePropagationLossModel> model = CreateObject<LogDistancePropagationLossModel> ();
-  m_channel->AddPropagationLossModel (model);
+
+  Ptr<LogDistancePropagationLossModel> lossModel = CreateObject<LogDistancePropagationLossModel> ();
+  m_channel->AddPropagationLossModel (lossModel);
+
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  m_channel->SetPropagationDelayModel (delayModel);
+}
+
+LrWpanHelper::LrWpanHelper (bool useMultiModelSpectrumChannel)
+{
+  if (useMultiModelSpectrumChannel)
+    {
+      m_channel = CreateObject<MultiModelSpectrumChannel> ();
+    }
+  else
+    {
+      m_channel = CreateObject<SingleModelSpectrumChannel> ();
+    }
+  Ptr<LogDistancePropagationLossModel> lossModel = CreateObject<LogDistancePropagationLossModel> ();
+  m_channel->AddPropagationLossModel (lossModel);
+
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  m_channel->SetPropagationDelayModel (delayModel);
 }
 
 LrWpanHelper::~LrWpanHelper (void)
@@ -167,6 +191,27 @@
   return devices;
 }
 
+
+Ptr<SpectrumChannel>
+LrWpanHelper::GetChannel (void)
+{
+  return m_channel;
+}
+
+void
+LrWpanHelper::SetChannel (Ptr<SpectrumChannel> channel)
+{
+  m_channel = channel;
+}
+
+void
+LrWpanHelper::SetChannel (std::string channelName)
+{
+  Ptr<SpectrumChannel> channel = Names::Find<SpectrumChannel> (channelName);
+  m_channel = channel;
+}
+
+
 int64_t
 LrWpanHelper::AssignStreams (NetDeviceContainer c, int64_t stream)
 {
diff -Naur ns-3.21/src/lr-wpan/helper/lr-wpan-helper.h ns-3.22/src/lr-wpan/helper/lr-wpan-helper.h
--- ns-3.21/src/lr-wpan/helper/lr-wpan-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/helper/lr-wpan-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -29,7 +29,7 @@
 
 namespace ns3 {
 
-class SingleModelSpectrumChannel;
+class SpectrumChannel;
 class MobilityModel;
 
 /**
@@ -40,6 +40,10 @@
  * This class can help to create IEEE 802.15.4 NetDevice objects
  * and to configure their attributes during creation.  It also contains
  * additional helper functions used by client code.
+ *
+ * Only one channel is created, and all devices attached to it.  If
+ * multiple channels are needed, multiple helper objects must be used,
+ * or else the channel object must be replaced.
  */
 
 class LrWpanHelper : public PcapHelperForDevice,
@@ -47,16 +51,50 @@
 {
 public:
   /**
-   * \brief Create a LrWpan helper in an empty state.
+   * \brief Create a LrWpan helper in an empty state.  By default, a
+   * SingleModelSpectrumChannel is created, with a 
+   * LogDistancePropagationLossModel and a ConstantSpeedPropagationDelayModel.
+   *
+   * To change the channel type, loss model, or delay model, the Get/Set
+   * Channel methods may be used.
    */
   LrWpanHelper (void);
+
+  /**
+   * \brief Create a LrWpan helper in an empty state with either a
+   * SingleModelSpectrumChannel or a MultiModelSpectrumChannel.
+   * \param useMultiModelSpectrumChannel use a MultiModelSpectrumChannel if true, a SingleModelSpectrumChannel otherwise
+   *
+   * A LogDistancePropagationLossModel and a 
+   * ConstantSpeedPropagationDelayModel are added to the channel.
+   */
+  LrWpanHelper (bool useMultiModelSpectrumChannel);
+
   virtual ~LrWpanHelper (void);
 
   /**
-  * \brief Add mobility model to a physical device
-  * \param phy the physical device
-  * \param m the mobility model
-  */
+   * \brief Get the channel associated to this helper
+   * \returns the channel
+   */
+  Ptr<SpectrumChannel> GetChannel (void);
+
+  /**
+   * \brief Set the channel associated to this helper
+   * \param channel the channel
+   */
+  void SetChannel (Ptr<SpectrumChannel> channel);
+
+  /**
+   * \brief Set the channel associated to this helper
+   * \param channelName the channel name
+   */
+  void SetChannel (std::string channelName);
+
+  /**
+   * \brief Add mobility model to a physical device
+   * \param phy the physical device
+   * \param m the mobility model
+   */
   void AddMobility (Ptr<LrWpanPhy> phy, Ptr<MobilityModel> m);
 
   /**
@@ -118,10 +156,7 @@
    */
   LrWpanHelper& operator= (LrWpanHelper const &);
   /**
-   * \internal
-   *
    * \brief Enable pcap output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
@@ -135,7 +170,6 @@
 
   /**
    * \brief Enable ascii trace output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
@@ -151,7 +185,7 @@
                                     bool explicitFilename);
 
 private:
-  Ptr<SingleModelSpectrumChannel> m_channel; //!< channel to be used for the devices
+  Ptr<SpectrumChannel> m_channel; //!< channel to be used for the devices
 
 };
 
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-csmaca.cc ns-3.22/src/lr-wpan/model/lr-wpan-csmaca.cc
--- ns-3.21/src/lr-wpan/model/lr-wpan-csmaca.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-csmaca.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include <ns3/log.h>
 #include <algorithm>
 
-NS_LOG_COMPONENT_DEFINE ("LrWpanCsmaCa");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanCsmaCa");
+
 NS_OBJECT_ENSURE_REGISTERED (LrWpanCsmaCa);
 
 TypeId
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-error-model.cc ns-3.22/src/lr-wpan/model/lr-wpan-error-model.cc
--- ns-3.21/src/lr-wpan/model/lr-wpan-error-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-error-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("LrWpanErrorModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanErrorModel");
+
 NS_OBJECT_ENSURE_REGISTERED (LrWpanErrorModel);
 
 TypeId
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-interference-helper.cc ns-3.22/src/lr-wpan/model/lr-wpan-interference-helper.cc
--- ns-3.21/src/lr-wpan/model/lr-wpan-interference-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-interference-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include <ns3/spectrum-model.h>
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LrWpanInterferenceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanInterferenceHelper");
+
 LrWpanInterferenceHelper::LrWpanInterferenceHelper (Ptr<const SpectrumModel> spectrumModel)
   : m_spectrumModel (spectrumModel),
     m_dirty (false)
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-mac.cc ns-3.22/src/lr-wpan/model/lr-wpan-mac.cc
--- ns-3.21/src/lr-wpan/model/lr-wpan-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,14 +34,14 @@
 #include <ns3/random-variable-stream.h>
 #include <ns3/double.h>
 
-NS_LOG_COMPONENT_DEFINE ("LrWpanMac");
-
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT                                   \
   std::clog << "[address " << m_shortAddress << "] ";
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanMac");
+
 NS_OBJECT_ENSURE_REGISTERED (LrWpanMac);
 
 const uint32_t LrWpanMac::aMinMPDUOverhead = 9; // Table 85
@@ -57,43 +57,68 @@
                    MakeUintegerAccessor (&LrWpanMac::m_macPanId),
                    MakeUintegerChecker<uint16_t> ())
     .AddTraceSource ("MacTxEnqueue",
-                     "Trace source indicating a packet has was enqueued in the transaction queue",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxEnqueueTrace))
+                     "Trace source indicating a packet has been "
+                     "enqueued in the transaction queue",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxEnqueueTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTxDequeue",
-                     "Trace source indicating a packet has was dequeued from the transaction queue",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxDequeueTrace))
+                     "Trace source indicating a packet has was "
+                     "dequeued from the transaction queue",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxDequeueTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTx",
-                     "Trace source indicating a packet has arrived for transmission by this device",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxTrace))
+                     "Trace source indicating a packet has "
+                     "arrived for transmission by this device",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTxOk",
-                     "Trace source indicating a packet has been successfully sent",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxOkTrace))
+                     "Trace source indicating a packet has been "
+                     "successfully sent",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxOkTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTxDrop",
-                     "Trace source indicating a packet has been dropped during transmission",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxDropTrace))
+                     "Trace source indicating a packet has been "
+                     "dropped during transmission",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacPromiscRx",
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macPromiscRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a promiscuous trace,",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRx",
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a non-promiscuous trace,",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRxDrop",
-                     "Trace source indicating a packet was received, but dropped before being forwarded up the stack",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macRxDropTrace))
+                     "Trace source indicating a packet was received, "
+                     "but dropped before being forwarded up the stack",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macRxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("Sniffer",
-                     "Trace source simulating a non-promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_snifferTrace))
+                     "Trace source simulating a non-promiscuous "
+                     "packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_snifferTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PromiscSniffer",
-                     "Trace source simulating a promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_promiscSnifferTrace))
+                     "Trace source simulating a promiscuous "
+                     "packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_promiscSnifferTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacState",
                      "The state of LrWpan Mac",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_macStateLogger))
+                     MakeTraceSourceAccessor (&LrWpanMac::m_macStateLogger),
+                     "ns3::LrWpanMac::StateTracedCallback")
     .AddTraceSource ("MacSentPkt",
-                     "Trace source reporting some information about the sent packet",
-                     MakeTraceSourceAccessor (&LrWpanMac::m_sentPktTrace))
+                     "Trace source reporting some information about "
+                     "the sent packet",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_sentPktTrace),
+                     "ns3::LrWpanMac::SentTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-mac.h ns-3.22/src/lr-wpan/model/lr-wpan-mac.h
--- ns-3.21/src/lr-wpan/model/lr-wpan-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -46,6 +46,8 @@
  */
 
 /**
+ * \ingroup lr-wpan
+ *
  * Tx options
  */
 typedef enum
@@ -57,6 +59,8 @@
 } LrWpanTxOption;
 
 /**
+ * \ingroup lr-wpan
+ *
  * MAC states
  */
 typedef enum
@@ -71,6 +75,8 @@
 } LrWpanMacState;
 
 /**
+ * \ingroup lr-wpan
+ *
  * table 80 of 802.15.4
  */
 typedef enum
@@ -82,6 +88,8 @@
 } LrWpanAddressMode;
 
 /**
+ * \ingroup lr-wpan
+ *
  * table 83 of 802.15.4
  */
 typedef enum
@@ -94,6 +102,8 @@
 } LrWpanAssociationStatus;
 
 /**
+ * \ingroup lr-wpan
+ *
  * Table 42 of 802.15.4-2006
  */
 typedef enum
@@ -114,6 +124,8 @@
 
 
 /**
+ * \ingroup lr-wpan
+ *
  * MCPS-DATA.request params. See 7.1.1.1
  */
 struct McpsDataRequestParams
@@ -136,6 +148,8 @@
 };
 
 /**
+ * \ingroup lr-wpan
+ *
  * MCPS-DATA.confirm params. See 7.1.1.2
  */
 struct McpsDataConfirmParams
@@ -145,6 +159,8 @@
 };
 
 /**
+ * \ingroup lr-wpan
+ *
  * MCPS-DATA.indication params. See 7.1.1.3
  */
 struct McpsDataIndicationParams
@@ -160,6 +176,8 @@
 };
 
 /**
+ * \ingroup lr-wpan
+ *
  * This callback is called after a McpsDataRequest has been called from
  * the higher layer.  It returns a status of the outcome of the
  * transmission request
@@ -167,6 +185,8 @@
 typedef Callback<void, McpsDataConfirmParams> McpsDataConfirmCallback;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This callback is called after a Mcps has successfully received a
  *  frame and wants to deliver it to the higher layer.
  *
@@ -498,6 +518,26 @@
    */
   void SetMacMaxFrameRetries (uint8_t retries);
 
+  /**
+   * TracedCallback signature for sent packets.
+   *
+   * \param [in] packet The packet.
+   * \param [in] retries The number of retries.
+   * \param [in] backoffs The number of CSMA backoffs.
+   */
+  typedef void (* SentTracedCallback)
+    (const Ptr<const Packet> packet, const uint8_t retries,
+     const uint8_t backoffs);
+
+  /**
+   * TracedCallback signature for LrWpanMacState change events.
+   *
+   * \param [in] oldValue The original state value.
+   * \param [in] newValue The new state value.
+   */
+  typedef void (* StateTracedCallback)
+    (const LrWpanMacState oldState, const LrWpanMacState newState);
+  
 protected:
   // Inherited from Object.
   virtual void DoInitialize (void);
@@ -676,6 +716,8 @@
   /**
    * A trace source that fires when the LrWpanMac changes states.
    * Parameters are the old mac state and the new mac state.
+   *
+   * \todo This should be a TracedValue
    */
   TracedCallback<LrWpanMacState, LrWpanMacState> m_macStateLogger;
 
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-net-device.cc ns-3.22/src/lr-wpan/model/lr-wpan-net-device.cc
--- ns-3.21/src/lr-wpan/model/lr-wpan-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,10 @@
 #include <ns3/packet.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("LrWpanNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (LrWpanNetDevice);
 
 TypeId
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-phy.cc ns-3.22/src/lr-wpan/model/lr-wpan-phy.cc
--- ns-3.21/src/lr-wpan/model/lr-wpan-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -38,10 +38,10 @@
 #include <ns3/random-variable-stream.h>
 #include <ns3/double.h>
 
-NS_LOG_COMPONENT_DEFINE ("LrWpanPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (LrWpanPhy);
 
 // Table 22 in section 6.4.1 of ieee802.15.4
@@ -78,25 +78,39 @@
     .AddConstructor<LrWpanPhy> ()
     .AddTraceSource ("TrxState",
                      "The state of the transceiver",
-                     MakeTraceSourceAccessor (&LrWpanPhy::m_trxStateLogger))
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_trxStateLogger),
+                     "ns3::LrWpanPhy::StateTracedCallback")
     .AddTraceSource ("PhyTxBegin",
-                     "Trace source indicating a packet has begun transmitting over the channel medium",
-                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxBeginTrace))
+                     "Trace source indicating a packet has "
+                     "begun transmitting over the channel medium",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxBeginTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxEnd",
-                     "Trace source indicating a packet has been completely transmitted over the channel.",
-                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxEndTrace))
+                     "Trace source indicating a packet has been "
+                     "completely transmitted over the channel.",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxDrop",
-                     "Trace source indicating a packet has been dropped by the device during transmission",
-                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxDropTrace))
+                     "Trace source indicating a packet has been "
+                     "dropped by the device during transmission",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxBegin",
-                     "Trace source indicating a packet has begun being received from the channel medium by the device",
-                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxBeginTrace))
+                     "Trace source indicating a packet has begun "
+                     "being received from the channel medium by the device",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxBeginTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxEnd",
-                     "Trace source indicating a packet has been completely received from the channel medium by the device",
-                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxEndTrace))
+                     "Trace source indicating a packet has been "
+                     "completely received from the channel medium "
+                     "by the device",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxEndTrace),
+                     "ns3::LrWpanPhy::RxEndTracedCallback")
     .AddTraceSource ("PhyRxDrop",
-                     "Trace source indicating a packet has been dropped by the device during reception",
-                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxDropTrace))
+                     "Trace source indicating a packet has been "
+                     "dropped by the device during reception",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxDropTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
@@ -260,20 +274,38 @@
   NS_LOG_FUNCTION (this << spectrumRxParams);
   LrWpanSpectrumValueHelper psdHelper;
 
-
-  Ptr<LrWpanSpectrumSignalParameters> lrWpanRxParams = DynamicCast<LrWpanSpectrumSignalParameters> (spectrumRxParams);
-  NS_ASSERT (lrWpanRxParams != 0);
-  Ptr<Packet> p = (lrWpanRxParams->packetBurst->GetPackets ()).front ();
-  NS_ASSERT (p != 0);
-
   if (!m_edRequest.IsExpired ())
     {
       // Update the average receive power during ED.
       Time now = Simulator::Now ();
-      m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ()) * (now - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
+      m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd (), m_phyPIBAttributes.phyCurrentChannel) * (now - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
       m_edPower.lastUpdate = now;
     }
 
+  Ptr<LrWpanSpectrumSignalParameters> lrWpanRxParams = DynamicCast<LrWpanSpectrumSignalParameters> (spectrumRxParams);
+
+  if ( lrWpanRxParams == 0)
+    {
+      CheckInterference ();
+      m_signal->AddSignal (spectrumRxParams->psd);
+
+      // Update peak power if CCA is in progress.
+      if (!m_ccaRequest.IsExpired ())
+        {
+          double power = LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd (), m_phyPIBAttributes.phyCurrentChannel);
+          if (m_ccaPeakPower < power)
+            {
+              m_ccaPeakPower = power;
+            }
+        }
+
+      Simulator::Schedule (spectrumRxParams->duration, &LrWpanPhy::EndRx, this, spectrumRxParams);
+      return;
+    }
+
+  Ptr<Packet> p = (lrWpanRxParams->packetBurst->GetPackets ()).front ();
+  NS_ASSERT (p != 0);
+
   // Prevent PHY from receiving another packet while switching the transceiver state.
   if (m_trxState == IEEE_802_15_4_PHY_RX_ON && !m_setTRXState.IsRunning ())
     {
@@ -293,12 +325,12 @@
 
       // Add any incoming packet to the current interference before checking the
       // SINR.
-      NS_LOG_DEBUG (this << " receiving packet with power: " << 10 * log10(LrWpanSpectrumValueHelper::TotalAvgPower (lrWpanRxParams->psd)) + 30 << "dBm");
+      NS_LOG_DEBUG (this << " receiving packet with power: " << 10 * log10(LrWpanSpectrumValueHelper::TotalAvgPower (lrWpanRxParams->psd, m_phyPIBAttributes.phyCurrentChannel)) + 30 << "dBm");
       m_signal->AddSignal (lrWpanRxParams->psd);
       Ptr<SpectrumValue> interferenceAndNoise = m_signal->GetSignalPsd ();
       *interferenceAndNoise -= *lrWpanRxParams->psd;
       *interferenceAndNoise += *m_noise;
-      double sinr = LrWpanSpectrumValueHelper::TotalAvgPower (lrWpanRxParams->psd) / LrWpanSpectrumValueHelper::TotalAvgPower (interferenceAndNoise);
+      double sinr = LrWpanSpectrumValueHelper::TotalAvgPower (lrWpanRxParams->psd, m_phyPIBAttributes.phyCurrentChannel) / LrWpanSpectrumValueHelper::TotalAvgPower (interferenceAndNoise, m_phyPIBAttributes.phyCurrentChannel);
 
       // Std. 802.15.4-2006, appendix E, Figure E.2
       // At SNR < -5 the BER is less than 10e-1.
@@ -343,7 +375,7 @@
   // Update peak power if CCA is in progress.
   if (!m_ccaRequest.IsExpired ())
     {
-      double power = LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ());
+      double power = LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd (), m_phyPIBAttributes.phyCurrentChannel);
       if (m_ccaPeakPower < power)
         {
           m_ccaPeakPower = power;
@@ -352,7 +384,8 @@
 
   // Always call EndRx to update the interference.
   // \todo: Do we need to keep track of these events to unschedule them when disposing off the PHY?
-  Simulator::Schedule (lrWpanRxParams->duration, &LrWpanPhy::EndRx, this, lrWpanRxParams);
+
+  Simulator::Schedule (spectrumRxParams->duration, &LrWpanPhy::EndRx, this, spectrumRxParams);
 }
 
 void
@@ -376,7 +409,7 @@
           Ptr<SpectrumValue> interferenceAndNoise = m_signal->GetSignalPsd ();
           *interferenceAndNoise -= *currentRxParams->psd;
           *interferenceAndNoise += *m_noise;
-          double sinr = LrWpanSpectrumValueHelper::TotalAvgPower (currentRxParams->psd) / LrWpanSpectrumValueHelper::TotalAvgPower (interferenceAndNoise);
+          double sinr = LrWpanSpectrumValueHelper::TotalAvgPower (currentRxParams->psd, m_phyPIBAttributes.phyCurrentChannel) / LrWpanSpectrumValueHelper::TotalAvgPower (interferenceAndNoise, m_phyPIBAttributes.phyCurrentChannel);
           double per = 1.0 - m_errorModel->GetChunkSuccessRate (sinr, chunkSize);
 
           // The LQI is the total packet success rate scaled to 0-255.
@@ -402,25 +435,32 @@
 }
 
 void
-LrWpanPhy::EndRx (Ptr<LrWpanSpectrumSignalParameters> params)
+LrWpanPhy::EndRx (Ptr<SpectrumSignalParameters> par)
 {
   NS_LOG_FUNCTION (this);
-  NS_ASSERT (params != 0);
+
+  Ptr<LrWpanSpectrumSignalParameters> params = DynamicCast<LrWpanSpectrumSignalParameters> (par);
 
   if (!m_edRequest.IsExpired ())
     {
       // Update the average receive power during ED.
       Time now = Simulator::Now ();
-      m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ()) * (now - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
+      m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd (), m_phyPIBAttributes.phyCurrentChannel) * (now - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
       m_edPower.lastUpdate = now;
     }
 
   CheckInterference ();
 
   // Update the interference.
-  m_signal->RemoveSignal (params->psd);
+  m_signal->RemoveSignal (par->psd);
+
+  if (params == 0)
+    {
+      NS_LOG_LOGIC ("Node: " << m_device->GetAddress() << " Removing interferent: " << *(par->psd));
+      return;
+    }
 
-  // If this is the end of the currently received packet, check if reception was successfull.
+  // If this is the end of the currently received packet, check if reception was successful.
   Ptr<LrWpanSpectrumSignalParameters> currentRxParams = m_currentRxPacket.first;
   if (currentRxParams == params)
     {
@@ -1029,7 +1069,7 @@
 {
   NS_LOG_FUNCTION (this);
 
-  m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ()) * (Simulator::Now () - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
+  m_edPower.averagePower += LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd (), m_phyPIBAttributes.phyCurrentChannel) * (Simulator::Now () - m_edPower.lastUpdate).GetTimeStep () / m_edPower.measurementLength.GetTimeStep ();
 
   uint8_t energyLevel;
 
@@ -1063,7 +1103,7 @@
   LrWpanPhyEnumeration sensedChannelState = IEEE_802_15_4_PHY_UNSPECIFIED;
 
   // Update peak power.
-  double power = LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd ());
+  double power = LrWpanSpectrumValueHelper::TotalAvgPower (m_signal->GetSignalPsd (), m_phyPIBAttributes.phyCurrentChannel);
   if (m_ccaPeakPower < power)
     {
       m_ccaPeakPower = power;
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-phy.h ns-3.22/src/lr-wpan/model/lr-wpan-phy.h
--- ns-3.21/src/lr-wpan/model/lr-wpan-phy.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-phy.h	2015-02-05 15:46:22.000000000 -0800
@@ -42,6 +42,8 @@
 class UniformRandomVariable;
 
 /**
+ * \ingroup lr-wpan
+ *
  * Helper structure to manage the power measurement during ED.
  */
 typedef struct
@@ -52,6 +54,8 @@
 } LrWpanEdPower;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This data structure provides the Bit rate and Symbol rate for a given channel
  * See IEEE802.15.4-2006 Table 1 and 2 in section 6.1.1 and 6.1.2
  */
@@ -62,6 +66,8 @@
 } LrWpanPhyDataAndSymbolRates;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This data structure provides number of symbols for the PPDU headers: SHR and PHR
  * See IEEE802.15.4-2006 Figure 16, Table 19 and 20 in section 6.3
  */
@@ -73,6 +79,8 @@
 } LrWpanPhyPpduHeaderSymbolNumber;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This Phy option will be used to index various Tables in IEEE802.15.4-2006
  */
 typedef enum
@@ -88,6 +96,8 @@
 } LrWpanPhyOption;
 
 /**
+ * \ingroup lr-wpan
+ *
  * IEEE802.15.4-2006 PHY Emumerations Table 18
  * in section 6.2.3
  */
@@ -109,6 +119,8 @@
 } LrWpanPhyEnumeration;
 
 /**
+ * \ingroup lr-wpan
+ *
  * IEEE802.15.4-2006 PHY PIB Attribute Identifiers Table 23 in section 6.4.2
  */
 typedef enum
@@ -124,6 +136,8 @@
 } LrWpanPibAttributeIdentifier;
 
 /**
+ * \ingroup lr-wpan
+ *
  * IEEE802.15.4-2006 PHY PIB Attributes Table 23 in section 6.4.2
  */
 typedef struct
@@ -139,6 +153,8 @@
 } LrWpanPhyPibAttributes;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This method implements the PD SAP: PdDataIndication
  *
  *  @param psduLength number of bytes in the PSDU
@@ -148,6 +164,8 @@
 typedef Callback< void, uint32_t, Ptr<Packet>, uint8_t > PdDataIndicationCallback;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This method implements the PD SAP: PdDataConfirm
  *
  * @param status the status to be transmitted
@@ -155,6 +173,8 @@
 typedef Callback< void, LrWpanPhyEnumeration > PdDataConfirmCallback;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This method implements the PD SAP: PlmeCcaConfirm
  *
  * @param status the status of CCA
@@ -162,6 +182,8 @@
 typedef Callback< void, LrWpanPhyEnumeration > PlmeCcaConfirmCallback;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This method implements the PD SAP: PlmeEdConfirm
  *
  * @param status the status of ED
@@ -170,6 +192,8 @@
 typedef Callback< void, LrWpanPhyEnumeration,uint8_t > PlmeEdConfirmCallback;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This method implements the PD SAP: PlmeGetAttributeConfirm
  *
  * @param status the status of PlmeGetAttributeRequest
@@ -181,6 +205,8 @@
                   LrWpanPhyPibAttributes* > PlmeGetAttributeConfirmCallback;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This method implements the PD SAP: PlmeSetTRXStateConfirm
  *
  * @param status the status of PlmeSetTRXStateRequest
@@ -188,6 +214,8 @@
 typedef Callback< void, LrWpanPhyEnumeration > PlmeSetTRXStateConfirmCallback;
 
 /**
+ * \ingroup lr-wpan
+ *
  * This method implements the PD SAP: PlmeSetAttributeConfirm
  *
  * @param status the status of PlmeSetAttributeRequest
@@ -434,6 +462,26 @@
    */
   int64_t AssignStreams (int64_t stream);
 
+  /**
+   * TracedCallback signature for Trx state change events.
+   *
+   * \param [in] time The time of the state change.
+   * \param [in] oldState The old state.
+   * \param [in] newState The new state.
+   */
+  typedef void (* StateTracedCallback)
+    (const Time time,
+     const LrWpanPhyEnumeration oldState, const LrWpanPhyEnumeration newState);
+
+  /**
+   * TracedCallback signature for end receive events.
+   *
+   * \param [in] packet The packet.
+   * \param [in] sinr The received SINR.
+   */
+  typedef void (* RxEndTracedCallback)
+    (const Ptr<const Packet> packet, const double sinr);
+    
 protected:
   /**
    * The data and symbol rates for the different PHY options.
@@ -499,7 +547,7 @@
    *
    * \param params signal parameters of the packet
    */
-  void EndRx (Ptr<LrWpanSpectrumSignalParameters> params);
+  void EndRx (Ptr<SpectrumSignalParameters> params);
 
   /**
    * Cancel an ongoing ED procedure. This is called when the transceiver is
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc ns-3.22/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc
--- ns-3.21/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include <ns3/packet-burst.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("LrWpanSpectrumSignalParameters");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanSpectrumSignalParameters");
+
 LrWpanSpectrumSignalParameters::LrWpanSpectrumSignalParameters (void)
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc ns-3.22/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc
--- ns-3.21/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("LrWpanSpectrumValueHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LrWpanSpectrumValueHelper");
+
 Ptr<SpectrumModel> g_LrWpanSpectrumModel; //!< Global object used to initialize the LrWpan Spectrum Model
 
 /**
@@ -54,7 +54,7 @@
     g_LrWpanSpectrumModel = Create<SpectrumModel> (bands);
   }
 
-} g_LrWpanSpectrumModelInitializerInstance;  //!< Global object used to initialize the LrWpan Spectrum Model
+} g_LrWpanSpectrumModelInitializerInstance; //!< Global object used to initialize the LrWpan Spectrum Model
 
 LrWpanSpectrumValueHelper::LrWpanSpectrumValueHelper (void)
 {
@@ -124,15 +124,22 @@
 }
 
 double
-LrWpanSpectrumValueHelper::TotalAvgPower (Ptr<const SpectrumValue> psd)
+LrWpanSpectrumValueHelper::TotalAvgPower (Ptr<const SpectrumValue> psd, uint32_t channel)
 {
   NS_LOG_FUNCTION (psd);
   double totalAvgPower = 0.0;
 
-  // numerically integrate to get area under psd using
-  // 1 MHz resolution from 2400 to 2483 MHz (center freq)
+  NS_ASSERT (psd->GetSpectrumModel () == g_LrWpanSpectrumModel);
+
+  // numerically integrate to get area under psd using 1 MHz resolution
+
+  totalAvgPower += (*psd)[2405 + 5 * (channel - 11) - 2400 - 2];
+  totalAvgPower += (*psd)[2405 + 5 * (channel - 11) - 2400 - 1];
+  totalAvgPower += (*psd)[2405 + 5 * (channel - 11) - 2400];
+  totalAvgPower += (*psd)[2405 + 5 * (channel - 11) - 2400 + 1];
+  totalAvgPower += (*psd)[2405 + 5 * (channel - 11) - 2400 + 2];
+  totalAvgPower *= 1.0e6;
 
-  totalAvgPower = Sum (*psd * 1.0e6);
   return totalAvgPower;
 }
 
diff -Naur ns-3.21/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h ns-3.22/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h
--- ns-3.21/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -53,11 +53,13 @@
   Ptr<SpectrumValue> CreateNoisePowerSpectralDensity (uint32_t channel);
 
   /**
-   * \brief total average power of the signal is the integral of the PSD
+   * \brief total average power of the signal is the integral of the PSD using
+   * the limits of the given channel
    * \param psd spectral density
-   * \return total power (using composite trap. rule to numerally integrate
+   * \param channel the channel number per IEEE802.15.4
+   * \return total power (using composite trap. rule to numerally integrate)
    */
-  static double TotalAvgPower (Ptr<const SpectrumValue> psd);
+  static double TotalAvgPower (Ptr<const SpectrumValue> psd, uint32_t channel);
 
 private:
   /**
diff -Naur ns-3.21/src/lr-wpan/test/lr-wpan-ack-test.cc ns-3.22/src/lr-wpan/test/lr-wpan-ack-test.cc
--- ns-3.21/src/lr-wpan/test/lr-wpan-ack-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/test/lr-wpan-ack-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,10 @@
 
 using namespace ns3;
 
-NS_LOG_COMPONENT_DEFINE ("lr-wpan-ack-test");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-ack-test");
+
 class LrWpanAckTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/lr-wpan/test/lr-wpan-cca-test.cc ns-3.22/src/lr-wpan/test/lr-wpan-cca-test.cc
--- ns-3.21/src/lr-wpan/test/lr-wpan-cca-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/test/lr-wpan-cca-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,10 +35,10 @@
 
 using namespace ns3;
 
-NS_LOG_COMPONENT_DEFINE ("lr-wpan-clear-channel-assessment-test");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-clear-channel-assessment-test");
+
 class LrWpanCcaTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/lr-wpan/test/lr-wpan-collision-test.cc ns-3.22/src/lr-wpan/test/lr-wpan-collision-test.cc
--- ns-3.21/src/lr-wpan/test/lr-wpan-collision-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/test/lr-wpan-collision-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,10 @@
 #include <ns3/log.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("lr-wpan-collision-test");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-collision-test");
+
 // This is an example TestCase.
 class LrWpanCollisionTestCase : public TestCase
 {
diff -Naur ns-3.21/src/lr-wpan/test/lr-wpan-ed-test.cc ns-3.22/src/lr-wpan/test/lr-wpan-ed-test.cc
--- ns-3.21/src/lr-wpan/test/lr-wpan-ed-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/test/lr-wpan-ed-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,10 @@
 
 using namespace ns3;
 
-NS_LOG_COMPONENT_DEFINE ("lr-wpan-energy-detection-test");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-energy-detection-test");
+
 class LrWpanEdTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/lr-wpan/test/lr-wpan-error-model-test.cc ns-3.22/src/lr-wpan/test/lr-wpan-error-model-test.cc
--- ns-3.21/src/lr-wpan/test/lr-wpan-error-model-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/test/lr-wpan-error-model-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,10 +33,10 @@
 #include <ns3/constant-position-mobility-model.h>
 #include "ns3/rng-seed-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("lr-wpan-error-model-test");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-error-model-test");
+
 class LrWpanErrorDistanceTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/lr-wpan/test/lr-wpan-packet-test.cc ns-3.22/src/lr-wpan/test/lr-wpan-packet-test.cc
--- ns-3.21/src/lr-wpan/test/lr-wpan-packet-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/test/lr-wpan-packet-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include <ns3/log.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("lr-wpan-packet-test");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("lr-wpan-packet-test");
+
 // This is an example TestCase.
 class LrWpanPacketTestCase : public TestCase
 {
diff -Naur ns-3.21/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc ns-3.22/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc
--- ns-3.21/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -59,7 +59,7 @@
           value = helper.CreateTxPowerSpectralDensity (pwrdBm, chan);
           pwrWatts = pow (10.0, pwrdBm / 10.0) / 1000;
           // Test that average power calculation is within +/- 25% of expected
-          NS_TEST_ASSERT_MSG_EQ_TOL (helper.TotalAvgPower (value), pwrWatts, pwrWatts / 4.0, "Not equal for channel " << chan << " pwrdBm " << pwrdBm);
+          NS_TEST_ASSERT_MSG_EQ_TOL (helper.TotalAvgPower (value, chan), pwrWatts, pwrWatts / 4.0, "Not equal for channel " << chan << " pwrdBm " << pwrdBm);
         }
     }
 }
diff -Naur ns-3.21/src/lte/bindings/modulegen__gcc_ILP32.py ns-3.22/src/lte/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/lte/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -120,18 +120,30 @@
     module.add_class('EpcS11SapMme', parent=root_module['ns3::EpcS11Sap'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextCreated [struct]
     module.add_class('BearerContextCreated', outer_class=root_module['ns3::EpcS11SapMme'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextRemoved [struct]
+    module.add_class('BearerContextRemoved', outer_class=root_module['ns3::EpcS11SapMme'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::CreateSessionResponseMessage [struct]
     module.add_class('CreateSessionResponseMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapMme'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::DeleteBearerRequestMessage [struct]
+    module.add_class('DeleteBearerRequestMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapMme'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::ModifyBearerResponseMessage [struct]
     module.add_class('ModifyBearerResponseMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapMme'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::ModifyBearerResponseMessage::Cause [enumeration]
     module.add_enum('Cause', ['REQUEST_ACCEPTED', 'REQUEST_ACCEPTED_PARTIALLY', 'REQUEST_REJECTED', 'CONTEXT_NOT_FOUND'], outer_class=root_module['ns3::EpcS11SapMme::ModifyBearerResponseMessage'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw [class]
     module.add_class('EpcS11SapSgw', parent=root_module['ns3::EpcS11Sap'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw [struct]
+    module.add_class('BearerContextRemovedSgwPgw', outer_class=root_module['ns3::EpcS11SapSgw'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeCreated [struct]
     module.add_class('BearerContextToBeCreated', outer_class=root_module['ns3::EpcS11SapSgw'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeRemoved [struct]
+    module.add_class('BearerContextToBeRemoved', outer_class=root_module['ns3::EpcS11SapSgw'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::CreateSessionRequestMessage [struct]
     module.add_class('CreateSessionRequestMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapSgw'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerCommandMessage [struct]
+    module.add_class('DeleteBearerCommandMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapSgw'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerResponseMessage [struct]
+    module.add_class('DeleteBearerResponseMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapSgw'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::ModifyBearerRequestMessage [struct]
     module.add_class('ModifyBearerRequestMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapSgw'])
     ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSap [class]
@@ -148,6 +160,8 @@
     module.add_class('ErabSetupItem', outer_class=root_module['ns3::EpcS1apSapMme'])
     ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem [struct]
     module.add_class('ErabSwitchedInDownlinkItem', outer_class=root_module['ns3::EpcS1apSapMme'])
+    ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabToBeReleasedIndication [struct]
+    module.add_class('ErabToBeReleasedIndication', outer_class=root_module['ns3::EpcS1apSapMme'])
     ## epc-x2-sap.h (module 'lte'): ns3::EpcX2Sap [class]
     module.add_class('EpcX2Sap')
     ## epc-x2-sap.h (module 'lte'): ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem [enumeration]
@@ -1078,8 +1092,6 @@
     module.add_class('LteHarqPhy', parent=root_module['ns3::SimpleRefCount< ns3::LteHarqPhy, ns3::empty, ns3::DefaultDeleter<ns3::LteHarqPhy> >'])
     ## lte-helper.h (module 'lte'): ns3::LteHelper [class]
     module.add_class('LteHelper', parent=root_module['ns3::Object'])
-    ## lte-helper.h (module 'lte'): ns3::LteHelper::LteEpsBearerToRlcMapping_t [enumeration]
-    module.add_enum('LteEpsBearerToRlcMapping_t', ['RLC_SM_ALWAYS', 'RLC_UM_ALWAYS', 'RLC_AM_ALWAYS', 'PER_BASED'], outer_class=root_module['ns3::LteHelper'])
     ## lte-hex-grid-enb-topology-helper.h (module 'lte'): ns3::LteHexGridEnbTopologyHelper [class]
     module.add_class('LteHexGridEnbTopologyHelper', parent=root_module['ns3::Object'])
     ## lte-interference.h (module 'lte'): ns3::LteInterference [class]
@@ -1309,9 +1321,13 @@
     module.add_container('std::vector< ns3::DlInfoListElement_s::HarqStatus_e >', 'ns3::DlInfoListElement_s::HarqStatus_e', container_type=u'vector')
     module.add_container('std::list< ns3::EpcEnbS1SapProvider::BearerToBeSwitched >', 'ns3::EpcEnbS1SapProvider::BearerToBeSwitched', container_type=u'list')
     module.add_container('std::list< ns3::EpcS11SapMme::BearerContextCreated >', 'ns3::EpcS11SapMme::BearerContextCreated', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapMme::BearerContextRemoved >', 'ns3::EpcS11SapMme::BearerContextRemoved', container_type=u'list')
     module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextToBeCreated >', 'ns3::EpcS11SapSgw::BearerContextToBeCreated', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextToBeRemoved >', 'ns3::EpcS11SapSgw::BearerContextToBeRemoved', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw >', 'ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw', container_type=u'list')
     module.add_container('std::list< ns3::EpcS1apSapEnb::ErabToBeSetupItem >', 'ns3::EpcS1apSapEnb::ErabToBeSetupItem', container_type=u'list')
     module.add_container('std::list< ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem >', 'ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapMme::ErabToBeReleasedIndication >', 'ns3::EpcS1apSapMme::ErabToBeReleasedIndication', container_type=u'list')
     module.add_container('std::list< ns3::EpcS1apSapMme::ErabSetupItem >', 'ns3::EpcS1apSapMme::ErabSetupItem', container_type=u'list')
     module.add_container('std::list< ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem >', 'ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem', container_type=u'list')
     module.add_container('std::vector< ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem >', 'ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem', container_type=u'vector')
@@ -1337,6 +1353,7 @@
     module.add_container('std::vector< ns3::BuildBroadcastListElement_s >', 'ns3::BuildBroadcastListElement_s', container_type=u'vector')
     module.add_container('std::vector< ns3::UlDciListElement_s >', 'ns3::UlDciListElement_s', container_type=u'vector')
     module.add_container('std::vector< ns3::PhichListElement_s >', 'ns3::PhichListElement_s', container_type=u'vector')
+    module.add_container('std::map< std::string, ns3::LogComponent * >', ('std::string', 'ns3::LogComponent *'), container_type=u'map')
     module.add_container('std::map< unsigned short, std::vector< double > >', ('short unsigned int', 'std::vector< double >'), container_type=u'map')
     module.add_container('std::vector< int >', 'int', container_type=u'vector')
     module.add_container('ns3::HarqProcessInfoList_t', 'ns3::HarqProcessInfoElement_t', container_type=u'vector')
@@ -1402,9 +1419,6 @@
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::DlHarqProcessesStatus_t')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::DlHarqProcessesStatus_t*')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::DlHarqProcessesStatus_t&')
-    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
-    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
-    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
     typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >', u'ns3::Bands')
     typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >*', u'ns3::Bands*')
     typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >&', u'ns3::Bands&')
@@ -1418,6 +1432,9 @@
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogTimePrinter')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogTimePrinter*')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogTimePrinter&')
@@ -1587,11 +1604,17 @@
     register_Ns3EpcS11SapUli_methods(root_module, root_module['ns3::EpcS11Sap::Uli'])
     register_Ns3EpcS11SapMme_methods(root_module, root_module['ns3::EpcS11SapMme'])
     register_Ns3EpcS11SapMmeBearerContextCreated_methods(root_module, root_module['ns3::EpcS11SapMme::BearerContextCreated'])
+    register_Ns3EpcS11SapMmeBearerContextRemoved_methods(root_module, root_module['ns3::EpcS11SapMme::BearerContextRemoved'])
     register_Ns3EpcS11SapMmeCreateSessionResponseMessage_methods(root_module, root_module['ns3::EpcS11SapMme::CreateSessionResponseMessage'])
+    register_Ns3EpcS11SapMmeDeleteBearerRequestMessage_methods(root_module, root_module['ns3::EpcS11SapMme::DeleteBearerRequestMessage'])
     register_Ns3EpcS11SapMmeModifyBearerResponseMessage_methods(root_module, root_module['ns3::EpcS11SapMme::ModifyBearerResponseMessage'])
     register_Ns3EpcS11SapSgw_methods(root_module, root_module['ns3::EpcS11SapSgw'])
+    register_Ns3EpcS11SapSgwBearerContextRemovedSgwPgw_methods(root_module, root_module['ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw'])
     register_Ns3EpcS11SapSgwBearerContextToBeCreated_methods(root_module, root_module['ns3::EpcS11SapSgw::BearerContextToBeCreated'])
+    register_Ns3EpcS11SapSgwBearerContextToBeRemoved_methods(root_module, root_module['ns3::EpcS11SapSgw::BearerContextToBeRemoved'])
     register_Ns3EpcS11SapSgwCreateSessionRequestMessage_methods(root_module, root_module['ns3::EpcS11SapSgw::CreateSessionRequestMessage'])
+    register_Ns3EpcS11SapSgwDeleteBearerCommandMessage_methods(root_module, root_module['ns3::EpcS11SapSgw::DeleteBearerCommandMessage'])
+    register_Ns3EpcS11SapSgwDeleteBearerResponseMessage_methods(root_module, root_module['ns3::EpcS11SapSgw::DeleteBearerResponseMessage'])
     register_Ns3EpcS11SapSgwModifyBearerRequestMessage_methods(root_module, root_module['ns3::EpcS11SapSgw::ModifyBearerRequestMessage'])
     register_Ns3EpcS1apSap_methods(root_module, root_module['ns3::EpcS1apSap'])
     register_Ns3EpcS1apSapEnb_methods(root_module, root_module['ns3::EpcS1apSapEnb'])
@@ -1600,6 +1623,7 @@
     register_Ns3EpcS1apSapMme_methods(root_module, root_module['ns3::EpcS1apSapMme'])
     register_Ns3EpcS1apSapMmeErabSetupItem_methods(root_module, root_module['ns3::EpcS1apSapMme::ErabSetupItem'])
     register_Ns3EpcS1apSapMmeErabSwitchedInDownlinkItem_methods(root_module, root_module['ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem'])
+    register_Ns3EpcS1apSapMmeErabToBeReleasedIndication_methods(root_module, root_module['ns3::EpcS1apSapMme::ErabToBeReleasedIndication'])
     register_Ns3EpcX2Sap_methods(root_module, root_module['ns3::EpcX2Sap'])
     register_Ns3EpcX2SapCellInformationItem_methods(root_module, root_module['ns3::EpcX2Sap::CellInformationItem'])
     register_Ns3EpcX2SapCellMeasurementResultItem_methods(root_module, root_module['ns3::EpcX2Sap::CellMeasurementResultItem'])
@@ -2906,6 +2930,11 @@
     cls.add_constructor([])
     ## epc-enb-s1-sap.h (module 'lte'): ns3::EpcEnbS1SapProvider::EpcEnbS1SapProvider(ns3::EpcEnbS1SapProvider const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EpcEnbS1SapProvider const &', 'arg0')])
+    ## epc-enb-s1-sap.h (module 'lte'): void ns3::EpcEnbS1SapProvider::DoSendReleaseIndication(uint64_t imsi, uint16_t rnti, uint8_t bearerId) [member function]
+    cls.add_method('DoSendReleaseIndication', 
+                   'void', 
+                   [param('uint64_t', 'imsi'), param('uint16_t', 'rnti'), param('uint8_t', 'bearerId')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-enb-s1-sap.h (module 'lte'): void ns3::EpcEnbS1SapProvider::InitialUeMessage(uint64_t imsi, uint16_t rnti) [member function]
     cls.add_method('InitialUeMessage', 
                    'void', 
@@ -3038,6 +3067,11 @@
                    'void', 
                    [param('ns3::EpcS11SapMme::CreateSessionResponseMessage', 'msg')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapMme::DeleteBearerRequest(ns3::EpcS11SapMme::DeleteBearerRequestMessage msg) [member function]
+    cls.add_method('DeleteBearerRequest', 
+                   'void', 
+                   [param('ns3::EpcS11SapMme::DeleteBearerRequestMessage', 'msg')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapMme::ModifyBearerResponse(ns3::EpcS11SapMme::ModifyBearerResponseMessage msg) [member function]
     cls.add_method('ModifyBearerResponse', 
                    'void', 
@@ -3060,6 +3094,15 @@
     cls.add_instance_attribute('tft', 'ns3::Ptr< ns3::EpcTft >', is_const=False)
     return
 
+def register_Ns3EpcS11SapMmeBearerContextRemoved_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextRemoved::BearerContextRemoved() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextRemoved::BearerContextRemoved(ns3::EpcS11SapMme::BearerContextRemoved const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapMme::BearerContextRemoved const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextRemoved::epsBearerId [variable]
+    cls.add_instance_attribute('epsBearerId', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3EpcS11SapMmeCreateSessionResponseMessage_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::CreateSessionResponseMessage::CreateSessionResponseMessage() [constructor]
     cls.add_constructor([])
@@ -3069,6 +3112,15 @@
     cls.add_instance_attribute('bearerContextsCreated', 'std::list< ns3::EpcS11SapMme::BearerContextCreated >', is_const=False)
     return
 
+def register_Ns3EpcS11SapMmeDeleteBearerRequestMessage_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::DeleteBearerRequestMessage::DeleteBearerRequestMessage() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::DeleteBearerRequestMessage::DeleteBearerRequestMessage(ns3::EpcS11SapMme::DeleteBearerRequestMessage const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapMme::DeleteBearerRequestMessage const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::DeleteBearerRequestMessage::bearerContextsRemoved [variable]
+    cls.add_instance_attribute('bearerContextsRemoved', 'std::list< ns3::EpcS11SapMme::BearerContextRemoved >', is_const=False)
+    return
+
 def register_Ns3EpcS11SapMmeModifyBearerResponseMessage_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::ModifyBearerResponseMessage::ModifyBearerResponseMessage() [constructor]
     cls.add_constructor([])
@@ -3088,6 +3140,16 @@
                    'void', 
                    [param('ns3::EpcS11SapSgw::CreateSessionRequestMessage', 'msg')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapSgw::DeleteBearerCommand(ns3::EpcS11SapSgw::DeleteBearerCommandMessage msg) [member function]
+    cls.add_method('DeleteBearerCommand', 
+                   'void', 
+                   [param('ns3::EpcS11SapSgw::DeleteBearerCommandMessage', 'msg')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapSgw::DeleteBearerResponse(ns3::EpcS11SapSgw::DeleteBearerResponseMessage msg) [member function]
+    cls.add_method('DeleteBearerResponse', 
+                   'void', 
+                   [param('ns3::EpcS11SapSgw::DeleteBearerResponseMessage', 'msg')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapSgw::ModifyBearerRequest(ns3::EpcS11SapSgw::ModifyBearerRequestMessage msg) [member function]
     cls.add_method('ModifyBearerRequest', 
                    'void', 
@@ -3095,6 +3157,15 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3EpcS11SapSgwBearerContextRemovedSgwPgw_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw::BearerContextRemovedSgwPgw() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw::BearerContextRemovedSgwPgw(ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw::epsBearerId [variable]
+    cls.add_instance_attribute('epsBearerId', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3EpcS11SapSgwBearerContextToBeCreated_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeCreated::BearerContextToBeCreated() [constructor]
     cls.add_constructor([])
@@ -3110,6 +3181,15 @@
     cls.add_instance_attribute('tft', 'ns3::Ptr< ns3::EpcTft >', is_const=False)
     return
 
+def register_Ns3EpcS11SapSgwBearerContextToBeRemoved_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeRemoved::BearerContextToBeRemoved() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeRemoved::BearerContextToBeRemoved(ns3::EpcS11SapSgw::BearerContextToBeRemoved const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapSgw::BearerContextToBeRemoved const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeRemoved::epsBearerId [variable]
+    cls.add_instance_attribute('epsBearerId', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3EpcS11SapSgwCreateSessionRequestMessage_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::CreateSessionRequestMessage::CreateSessionRequestMessage() [constructor]
     cls.add_constructor([])
@@ -3123,6 +3203,24 @@
     cls.add_instance_attribute('uli', 'ns3::EpcS11Sap::Uli', is_const=False)
     return
 
+def register_Ns3EpcS11SapSgwDeleteBearerCommandMessage_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerCommandMessage::DeleteBearerCommandMessage() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerCommandMessage::DeleteBearerCommandMessage(ns3::EpcS11SapSgw::DeleteBearerCommandMessage const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapSgw::DeleteBearerCommandMessage const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerCommandMessage::bearerContextsToBeRemoved [variable]
+    cls.add_instance_attribute('bearerContextsToBeRemoved', 'std::list< ns3::EpcS11SapSgw::BearerContextToBeRemoved >', is_const=False)
+    return
+
+def register_Ns3EpcS11SapSgwDeleteBearerResponseMessage_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerResponseMessage::DeleteBearerResponseMessage() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerResponseMessage::DeleteBearerResponseMessage(ns3::EpcS11SapSgw::DeleteBearerResponseMessage const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapSgw::DeleteBearerResponseMessage const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerResponseMessage::bearerContextsRemoved [variable]
+    cls.add_instance_attribute('bearerContextsRemoved', 'std::list< ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw >', is_const=False)
+    return
+
 def register_Ns3EpcS11SapSgwModifyBearerRequestMessage_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::ModifyBearerRequestMessage::ModifyBearerRequestMessage() [constructor]
     cls.add_constructor([])
@@ -3189,6 +3287,11 @@
     cls.add_constructor([])
     ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::EpcS1apSapMme(ns3::EpcS1apSapMme const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EpcS1apSapMme const &', 'arg0')])
+    ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::ErabReleaseIndication(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ns3::EpcS1apSapMme::ErabToBeReleasedIndication, std::allocator<ns3::EpcS1apSapMme::ErabToBeReleasedIndication> > erabToBeReleaseIndication) [member function]
+    cls.add_method('ErabReleaseIndication', 
+                   'void', 
+                   [param('uint64_t', 'mmeUeS1Id'), param('uint16_t', 'enbUeS1Id'), param('std::list< ns3::EpcS1apSapMme::ErabToBeReleasedIndication >', 'erabToBeReleaseIndication')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::InitialContextSetupResponse(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ns3::EpcS1apSapMme::ErabSetupItem, std::allocator<ns3::EpcS1apSapMme::ErabSetupItem> > erabSetupList) [member function]
     cls.add_method('InitialContextSetupResponse', 
                    'void', 
@@ -3232,6 +3335,15 @@
     cls.add_instance_attribute('erabId', 'uint16_t', is_const=False)
     return
 
+def register_Ns3EpcS1apSapMmeErabToBeReleasedIndication_methods(root_module, cls):
+    ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabToBeReleasedIndication::ErabToBeReleasedIndication() [constructor]
+    cls.add_constructor([])
+    ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabToBeReleasedIndication::ErabToBeReleasedIndication(ns3::EpcS1apSapMme::ErabToBeReleasedIndication const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS1apSapMme::ErabToBeReleasedIndication const &', 'arg0')])
+    ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabToBeReleasedIndication::erabId [variable]
+    cls.add_instance_attribute('erabId', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3EpcX2Sap_methods(root_module, cls):
     ## epc-x2-sap.h (module 'lte'): ns3::EpcX2Sap::EpcX2Sap() [constructor]
     cls.add_constructor([])
@@ -5127,8 +5239,8 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
-    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, std::string const & file, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('std::string const &', 'file'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
     ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
@@ -5137,6 +5249,16 @@
     cls.add_method('Enable', 
                    'void', 
                    [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): std::string ns3::LogComponent::File() const [member function]
+    cls.add_method('File', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## log.h (module 'core'): static std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,ns3::LogComponent*,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ns3::LogComponent*> > > * ns3::LogComponent::GetComponentList() [member function]
+    cls.add_method('GetComponentList', 
+                   'std::map< std::string, ns3::LogComponent * > *', 
+                   [], 
+                   is_static=True)
     ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
@@ -6935,6 +7057,11 @@
                    'void', 
                    [param('uint8_t', 'dlBandwidth')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SetPa(double pa) [member function]
+    cls.add_method('SetPa', 
+                   'void', 
+                   [param('double', 'pa')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SetRnti(uint16_t rnti) [member function]
     cls.add_method('SetRnti', 
                    'void', 
@@ -7435,10 +7562,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -8323,7 +8450,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -8374,6 +8506,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -8450,6 +8587,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -8484,6 +8625,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -12123,11 +12266,6 @@
                    'void', 
                    [], 
                    is_const=True, visibility='protected')
-    ## lte-asn1-header.h (module 'lte'): void ns3::Asn1Header::SerializeOctetstring(std::string s) const [member function]
-    cls.add_method('SerializeOctetstring', 
-                   'void', 
-                   [param('std::string', 's')], 
-                   is_const=True, visibility='protected')
     ## lte-asn1-header.h (module 'lte'): void ns3::Asn1Header::SerializeSequence(std::bitset<0u> optionalOrDefaultMask, bool isExtensionMarkerPresent) const [member function]
     cls.add_method('SerializeSequence', 
                    'void', 
@@ -12671,14 +12809,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -12716,8 +12854,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -12738,10 +12876,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3EpcEnbApplication_methods(root_module, cls):
@@ -12805,9 +12943,9 @@
     cls.add_constructor([param('ns3::EpcHelper const &', 'arg0')])
     ## epc-helper.h (module 'lte'): ns3::EpcHelper::EpcHelper() [constructor]
     cls.add_constructor([])
-    ## epc-helper.h (module 'lte'): void ns3::EpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
+    ## epc-helper.h (module 'lte'): uint8_t ns3::EpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
     cls.add_method('ActivateEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')], 
                    is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): void ns3::EpcHelper::AddEnb(ns3::Ptr<ns3::Node> enbNode, ns3::Ptr<ns3::NetDevice> lteEnbNetDevice, uint16_t cellId) [member function]
@@ -12857,9 +12995,9 @@
     cls.add_constructor([param('ns3::EpcMme const &', 'arg0')])
     ## epc-mme.h (module 'lte'): ns3::EpcMme::EpcMme() [constructor]
     cls.add_constructor([])
-    ## epc-mme.h (module 'lte'): void ns3::EpcMme::AddBearer(uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
+    ## epc-mme.h (module 'lte'): uint8_t ns3::EpcMme::AddBearer(uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
     cls.add_method('AddBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')])
     ## epc-mme.h (module 'lte'): void ns3::EpcMme::AddEnb(uint16_t ecgi, ns3::Ipv4Address enbS1UAddr, ns3::EpcS1apSapEnb * enbS1apSap) [member function]
     cls.add_method('AddEnb', 
@@ -14400,11 +14538,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -14803,6 +14936,10 @@
     cls.add_method('ConnectionSetupTimeout', 
                    'void', 
                    [param('uint16_t', 'rnti')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::DoSendReleaseDataRadioBearer(uint64_t imsi, uint16_t rnti, uint8_t bearerId) [member function]
+    cls.add_method('DoSendReleaseDataRadioBearer', 
+                   'void', 
+                   [param('uint64_t', 'imsi'), param('uint16_t', 'rnti'), param('uint8_t', 'bearerId')])
     ## lte-enb-rrc.h (module 'lte'): ns3::EpcX2SapUser * ns3::LteEnbRrc::GetEpcX2SapUser() [member function]
     cls.add_method('GetEpcX2SapUser', 
                    'ns3::EpcX2SapUser *', 
@@ -15944,13 +16081,13 @@
     cls.add_method('ActivateDataRadioBearer', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice'), param('ns3::EpsBearer', 'bearer')])
-    ## lte-helper.h (module 'lte'): void ns3::LteHelper::ActivateDedicatedEpsBearer(ns3::NetDeviceContainer ueDevices, ns3::EpsBearer bearer, ns3::Ptr<ns3::EpcTft> tft) [member function]
+    ## lte-helper.h (module 'lte'): uint8_t ns3::LteHelper::ActivateDedicatedEpsBearer(ns3::NetDeviceContainer ueDevices, ns3::EpsBearer bearer, ns3::Ptr<ns3::EpcTft> tft) [member function]
     cls.add_method('ActivateDedicatedEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::NetDeviceContainer', 'ueDevices'), param('ns3::EpsBearer', 'bearer'), param('ns3::Ptr< ns3::EpcTft >', 'tft')])
-    ## lte-helper.h (module 'lte'): void ns3::LteHelper::ActivateDedicatedEpsBearer(ns3::Ptr<ns3::NetDevice> ueDevice, ns3::EpsBearer bearer, ns3::Ptr<ns3::EpcTft> tft) [member function]
+    ## lte-helper.h (module 'lte'): uint8_t ns3::LteHelper::ActivateDedicatedEpsBearer(ns3::Ptr<ns3::NetDevice> ueDevice, ns3::EpsBearer bearer, ns3::Ptr<ns3::EpcTft> tft) [member function]
     cls.add_method('ActivateDedicatedEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice'), param('ns3::EpsBearer', 'bearer'), param('ns3::Ptr< ns3::EpcTft >', 'tft')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::AddX2Interface(ns3::NodeContainer enbNodes) [member function]
     cls.add_method('AddX2Interface', 
@@ -15988,6 +16125,10 @@
     cls.add_method('AttachToClosestEnb', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice'), param('ns3::NetDeviceContainer', 'enbDevices')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::DeActivateDedicatedEpsBearer(ns3::Ptr<ns3::NetDevice> ueDevice, ns3::Ptr<ns3::NetDevice> enbDevice, uint8_t bearerId) [member function]
+    cls.add_method('DeActivateDedicatedEpsBearer', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice'), param('ns3::Ptr< ns3::NetDevice >', 'enbDevice'), param('uint8_t', 'bearerId')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -16105,10 +16246,10 @@
     cls.add_method('SetEpcHelper', 
                    'void', 
                    [param('ns3::Ptr< ns3::EpcHelper >', 'h')])
-    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetFadingModel(std::string model) [member function]
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetFadingModel(std::string type) [member function]
     cls.add_method('SetFadingModel', 
                    'void', 
-                   [param('std::string', 'model')])
+                   [param('std::string', 'type')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetFadingModelAttribute(std::string n, ns3::AttributeValue const & v) [member function]
     cls.add_method('SetFadingModelAttribute', 
                    'void', 
@@ -18151,11 +18292,6 @@
                    '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', 
@@ -18226,6 +18362,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -18482,9 +18623,9 @@
     cls.add_constructor([param('ns3::PointToPointEpcHelper const &', 'arg0')])
     ## point-to-point-epc-helper.h (module 'lte'): ns3::PointToPointEpcHelper::PointToPointEpcHelper() [constructor]
     cls.add_constructor([])
-    ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
+    ## point-to-point-epc-helper.h (module 'lte'): uint8_t ns3::PointToPointEpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
     cls.add_method('ActivateEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')], 
                    is_virtual=True)
     ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::AddEnb(ns3::Ptr<ns3::Node> enbNode, ns3::Ptr<ns3::NetDevice> lteEnbNetDevice, uint16_t cellId) [member function]
@@ -20172,9 +20313,9 @@
     cls.add_constructor([param('ns3::EmuEpcHelper const &', 'arg0')])
     ## emu-epc-helper.h (module 'lte'): ns3::EmuEpcHelper::EmuEpcHelper() [constructor]
     cls.add_constructor([])
-    ## emu-epc-helper.h (module 'lte'): void ns3::EmuEpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
+    ## emu-epc-helper.h (module 'lte'): uint8_t ns3::EmuEpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
     cls.add_method('ActivateEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')], 
                    is_virtual=True)
     ## emu-epc-helper.h (module 'lte'): void ns3::EmuEpcHelper::AddEnb(ns3::Ptr<ns3::Node> enbNode, ns3::Ptr<ns3::NetDevice> lteEnbNetDevice, uint16_t cellId) [member function]
diff -Naur ns-3.21/src/lte/bindings/modulegen__gcc_LP64.py ns-3.22/src/lte/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/lte/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -120,18 +120,30 @@
     module.add_class('EpcS11SapMme', parent=root_module['ns3::EpcS11Sap'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextCreated [struct]
     module.add_class('BearerContextCreated', outer_class=root_module['ns3::EpcS11SapMme'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextRemoved [struct]
+    module.add_class('BearerContextRemoved', outer_class=root_module['ns3::EpcS11SapMme'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::CreateSessionResponseMessage [struct]
     module.add_class('CreateSessionResponseMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapMme'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::DeleteBearerRequestMessage [struct]
+    module.add_class('DeleteBearerRequestMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapMme'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::ModifyBearerResponseMessage [struct]
     module.add_class('ModifyBearerResponseMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapMme'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::ModifyBearerResponseMessage::Cause [enumeration]
     module.add_enum('Cause', ['REQUEST_ACCEPTED', 'REQUEST_ACCEPTED_PARTIALLY', 'REQUEST_REJECTED', 'CONTEXT_NOT_FOUND'], outer_class=root_module['ns3::EpcS11SapMme::ModifyBearerResponseMessage'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw [class]
     module.add_class('EpcS11SapSgw', parent=root_module['ns3::EpcS11Sap'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw [struct]
+    module.add_class('BearerContextRemovedSgwPgw', outer_class=root_module['ns3::EpcS11SapSgw'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeCreated [struct]
     module.add_class('BearerContextToBeCreated', outer_class=root_module['ns3::EpcS11SapSgw'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeRemoved [struct]
+    module.add_class('BearerContextToBeRemoved', outer_class=root_module['ns3::EpcS11SapSgw'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::CreateSessionRequestMessage [struct]
     module.add_class('CreateSessionRequestMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapSgw'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerCommandMessage [struct]
+    module.add_class('DeleteBearerCommandMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapSgw'])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerResponseMessage [struct]
+    module.add_class('DeleteBearerResponseMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapSgw'])
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::ModifyBearerRequestMessage [struct]
     module.add_class('ModifyBearerRequestMessage', parent=root_module['ns3::EpcS11Sap::GtpcMessage'], outer_class=root_module['ns3::EpcS11SapSgw'])
     ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSap [class]
@@ -148,6 +160,8 @@
     module.add_class('ErabSetupItem', outer_class=root_module['ns3::EpcS1apSapMme'])
     ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem [struct]
     module.add_class('ErabSwitchedInDownlinkItem', outer_class=root_module['ns3::EpcS1apSapMme'])
+    ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabToBeReleasedIndication [struct]
+    module.add_class('ErabToBeReleasedIndication', outer_class=root_module['ns3::EpcS1apSapMme'])
     ## epc-x2-sap.h (module 'lte'): ns3::EpcX2Sap [class]
     module.add_class('EpcX2Sap')
     ## epc-x2-sap.h (module 'lte'): ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem [enumeration]
@@ -1078,8 +1092,6 @@
     module.add_class('LteHarqPhy', parent=root_module['ns3::SimpleRefCount< ns3::LteHarqPhy, ns3::empty, ns3::DefaultDeleter<ns3::LteHarqPhy> >'])
     ## lte-helper.h (module 'lte'): ns3::LteHelper [class]
     module.add_class('LteHelper', parent=root_module['ns3::Object'])
-    ## lte-helper.h (module 'lte'): ns3::LteHelper::LteEpsBearerToRlcMapping_t [enumeration]
-    module.add_enum('LteEpsBearerToRlcMapping_t', ['RLC_SM_ALWAYS', 'RLC_UM_ALWAYS', 'RLC_AM_ALWAYS', 'PER_BASED'], outer_class=root_module['ns3::LteHelper'])
     ## lte-hex-grid-enb-topology-helper.h (module 'lte'): ns3::LteHexGridEnbTopologyHelper [class]
     module.add_class('LteHexGridEnbTopologyHelper', parent=root_module['ns3::Object'])
     ## lte-interference.h (module 'lte'): ns3::LteInterference [class]
@@ -1309,9 +1321,13 @@
     module.add_container('std::vector< ns3::DlInfoListElement_s::HarqStatus_e >', 'ns3::DlInfoListElement_s::HarqStatus_e', container_type=u'vector')
     module.add_container('std::list< ns3::EpcEnbS1SapProvider::BearerToBeSwitched >', 'ns3::EpcEnbS1SapProvider::BearerToBeSwitched', container_type=u'list')
     module.add_container('std::list< ns3::EpcS11SapMme::BearerContextCreated >', 'ns3::EpcS11SapMme::BearerContextCreated', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapMme::BearerContextRemoved >', 'ns3::EpcS11SapMme::BearerContextRemoved', container_type=u'list')
     module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextToBeCreated >', 'ns3::EpcS11SapSgw::BearerContextToBeCreated', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextToBeRemoved >', 'ns3::EpcS11SapSgw::BearerContextToBeRemoved', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw >', 'ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw', container_type=u'list')
     module.add_container('std::list< ns3::EpcS1apSapEnb::ErabToBeSetupItem >', 'ns3::EpcS1apSapEnb::ErabToBeSetupItem', container_type=u'list')
     module.add_container('std::list< ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem >', 'ns3::EpcS1apSapEnb::ErabSwitchedInUplinkItem', container_type=u'list')
+    module.add_container('std::list< ns3::EpcS1apSapMme::ErabToBeReleasedIndication >', 'ns3::EpcS1apSapMme::ErabToBeReleasedIndication', container_type=u'list')
     module.add_container('std::list< ns3::EpcS1apSapMme::ErabSetupItem >', 'ns3::EpcS1apSapMme::ErabSetupItem', container_type=u'list')
     module.add_container('std::list< ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem >', 'ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem', container_type=u'list')
     module.add_container('std::vector< ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem >', 'ns3::EpcX2Sap::UlInterferenceOverloadIndicationItem', container_type=u'vector')
@@ -1337,6 +1353,7 @@
     module.add_container('std::vector< ns3::BuildBroadcastListElement_s >', 'ns3::BuildBroadcastListElement_s', container_type=u'vector')
     module.add_container('std::vector< ns3::UlDciListElement_s >', 'ns3::UlDciListElement_s', container_type=u'vector')
     module.add_container('std::vector< ns3::PhichListElement_s >', 'ns3::PhichListElement_s', container_type=u'vector')
+    module.add_container('std::map< std::string, ns3::LogComponent * >', ('std::string', 'ns3::LogComponent *'), container_type=u'map')
     module.add_container('std::map< unsigned short, std::vector< double > >', ('short unsigned int', 'std::vector< double >'), container_type=u'map')
     module.add_container('std::vector< int >', 'int', container_type=u'vector')
     module.add_container('ns3::HarqProcessInfoList_t', 'ns3::HarqProcessInfoElement_t', container_type=u'vector')
@@ -1402,9 +1419,6 @@
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::DlHarqProcessesStatus_t')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::DlHarqProcessesStatus_t*')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::DlHarqProcessesStatus_t&')
-    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
-    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
-    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
     typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >', u'ns3::Bands')
     typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >*', u'ns3::Bands*')
     typehandlers.add_type_alias(u'std::vector< ns3::BandInfo, std::allocator< ns3::BandInfo > >&', u'ns3::Bands&')
@@ -1418,6 +1432,9 @@
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyTxStartCallback')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyTxStartCallback*')
+    typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyTxStartCallback&')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *', u'ns3::LogTimePrinter')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) **', u'ns3::LogTimePrinter*')
     typehandlers.add_type_alias(u'void ( * ) ( std::ostream & ) *&', u'ns3::LogTimePrinter&')
@@ -1587,11 +1604,17 @@
     register_Ns3EpcS11SapUli_methods(root_module, root_module['ns3::EpcS11Sap::Uli'])
     register_Ns3EpcS11SapMme_methods(root_module, root_module['ns3::EpcS11SapMme'])
     register_Ns3EpcS11SapMmeBearerContextCreated_methods(root_module, root_module['ns3::EpcS11SapMme::BearerContextCreated'])
+    register_Ns3EpcS11SapMmeBearerContextRemoved_methods(root_module, root_module['ns3::EpcS11SapMme::BearerContextRemoved'])
     register_Ns3EpcS11SapMmeCreateSessionResponseMessage_methods(root_module, root_module['ns3::EpcS11SapMme::CreateSessionResponseMessage'])
+    register_Ns3EpcS11SapMmeDeleteBearerRequestMessage_methods(root_module, root_module['ns3::EpcS11SapMme::DeleteBearerRequestMessage'])
     register_Ns3EpcS11SapMmeModifyBearerResponseMessage_methods(root_module, root_module['ns3::EpcS11SapMme::ModifyBearerResponseMessage'])
     register_Ns3EpcS11SapSgw_methods(root_module, root_module['ns3::EpcS11SapSgw'])
+    register_Ns3EpcS11SapSgwBearerContextRemovedSgwPgw_methods(root_module, root_module['ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw'])
     register_Ns3EpcS11SapSgwBearerContextToBeCreated_methods(root_module, root_module['ns3::EpcS11SapSgw::BearerContextToBeCreated'])
+    register_Ns3EpcS11SapSgwBearerContextToBeRemoved_methods(root_module, root_module['ns3::EpcS11SapSgw::BearerContextToBeRemoved'])
     register_Ns3EpcS11SapSgwCreateSessionRequestMessage_methods(root_module, root_module['ns3::EpcS11SapSgw::CreateSessionRequestMessage'])
+    register_Ns3EpcS11SapSgwDeleteBearerCommandMessage_methods(root_module, root_module['ns3::EpcS11SapSgw::DeleteBearerCommandMessage'])
+    register_Ns3EpcS11SapSgwDeleteBearerResponseMessage_methods(root_module, root_module['ns3::EpcS11SapSgw::DeleteBearerResponseMessage'])
     register_Ns3EpcS11SapSgwModifyBearerRequestMessage_methods(root_module, root_module['ns3::EpcS11SapSgw::ModifyBearerRequestMessage'])
     register_Ns3EpcS1apSap_methods(root_module, root_module['ns3::EpcS1apSap'])
     register_Ns3EpcS1apSapEnb_methods(root_module, root_module['ns3::EpcS1apSapEnb'])
@@ -1600,6 +1623,7 @@
     register_Ns3EpcS1apSapMme_methods(root_module, root_module['ns3::EpcS1apSapMme'])
     register_Ns3EpcS1apSapMmeErabSetupItem_methods(root_module, root_module['ns3::EpcS1apSapMme::ErabSetupItem'])
     register_Ns3EpcS1apSapMmeErabSwitchedInDownlinkItem_methods(root_module, root_module['ns3::EpcS1apSapMme::ErabSwitchedInDownlinkItem'])
+    register_Ns3EpcS1apSapMmeErabToBeReleasedIndication_methods(root_module, root_module['ns3::EpcS1apSapMme::ErabToBeReleasedIndication'])
     register_Ns3EpcX2Sap_methods(root_module, root_module['ns3::EpcX2Sap'])
     register_Ns3EpcX2SapCellInformationItem_methods(root_module, root_module['ns3::EpcX2Sap::CellInformationItem'])
     register_Ns3EpcX2SapCellMeasurementResultItem_methods(root_module, root_module['ns3::EpcX2Sap::CellMeasurementResultItem'])
@@ -2906,6 +2930,11 @@
     cls.add_constructor([])
     ## epc-enb-s1-sap.h (module 'lte'): ns3::EpcEnbS1SapProvider::EpcEnbS1SapProvider(ns3::EpcEnbS1SapProvider const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EpcEnbS1SapProvider const &', 'arg0')])
+    ## epc-enb-s1-sap.h (module 'lte'): void ns3::EpcEnbS1SapProvider::DoSendReleaseIndication(uint64_t imsi, uint16_t rnti, uint8_t bearerId) [member function]
+    cls.add_method('DoSendReleaseIndication', 
+                   'void', 
+                   [param('uint64_t', 'imsi'), param('uint16_t', 'rnti'), param('uint8_t', 'bearerId')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-enb-s1-sap.h (module 'lte'): void ns3::EpcEnbS1SapProvider::InitialUeMessage(uint64_t imsi, uint16_t rnti) [member function]
     cls.add_method('InitialUeMessage', 
                    'void', 
@@ -3038,6 +3067,11 @@
                    'void', 
                    [param('ns3::EpcS11SapMme::CreateSessionResponseMessage', 'msg')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapMme::DeleteBearerRequest(ns3::EpcS11SapMme::DeleteBearerRequestMessage msg) [member function]
+    cls.add_method('DeleteBearerRequest', 
+                   'void', 
+                   [param('ns3::EpcS11SapMme::DeleteBearerRequestMessage', 'msg')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapMme::ModifyBearerResponse(ns3::EpcS11SapMme::ModifyBearerResponseMessage msg) [member function]
     cls.add_method('ModifyBearerResponse', 
                    'void', 
@@ -3060,6 +3094,15 @@
     cls.add_instance_attribute('tft', 'ns3::Ptr< ns3::EpcTft >', is_const=False)
     return
 
+def register_Ns3EpcS11SapMmeBearerContextRemoved_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextRemoved::BearerContextRemoved() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextRemoved::BearerContextRemoved(ns3::EpcS11SapMme::BearerContextRemoved const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapMme::BearerContextRemoved const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::BearerContextRemoved::epsBearerId [variable]
+    cls.add_instance_attribute('epsBearerId', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3EpcS11SapMmeCreateSessionResponseMessage_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::CreateSessionResponseMessage::CreateSessionResponseMessage() [constructor]
     cls.add_constructor([])
@@ -3069,6 +3112,15 @@
     cls.add_instance_attribute('bearerContextsCreated', 'std::list< ns3::EpcS11SapMme::BearerContextCreated >', is_const=False)
     return
 
+def register_Ns3EpcS11SapMmeDeleteBearerRequestMessage_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::DeleteBearerRequestMessage::DeleteBearerRequestMessage() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::DeleteBearerRequestMessage::DeleteBearerRequestMessage(ns3::EpcS11SapMme::DeleteBearerRequestMessage const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapMme::DeleteBearerRequestMessage const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::DeleteBearerRequestMessage::bearerContextsRemoved [variable]
+    cls.add_instance_attribute('bearerContextsRemoved', 'std::list< ns3::EpcS11SapMme::BearerContextRemoved >', is_const=False)
+    return
+
 def register_Ns3EpcS11SapMmeModifyBearerResponseMessage_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapMme::ModifyBearerResponseMessage::ModifyBearerResponseMessage() [constructor]
     cls.add_constructor([])
@@ -3088,6 +3140,16 @@
                    'void', 
                    [param('ns3::EpcS11SapSgw::CreateSessionRequestMessage', 'msg')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapSgw::DeleteBearerCommand(ns3::EpcS11SapSgw::DeleteBearerCommandMessage msg) [member function]
+    cls.add_method('DeleteBearerCommand', 
+                   'void', 
+                   [param('ns3::EpcS11SapSgw::DeleteBearerCommandMessage', 'msg')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapSgw::DeleteBearerResponse(ns3::EpcS11SapSgw::DeleteBearerResponseMessage msg) [member function]
+    cls.add_method('DeleteBearerResponse', 
+                   'void', 
+                   [param('ns3::EpcS11SapSgw::DeleteBearerResponseMessage', 'msg')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-s11-sap.h (module 'lte'): void ns3::EpcS11SapSgw::ModifyBearerRequest(ns3::EpcS11SapSgw::ModifyBearerRequestMessage msg) [member function]
     cls.add_method('ModifyBearerRequest', 
                    'void', 
@@ -3095,6 +3157,15 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3EpcS11SapSgwBearerContextRemovedSgwPgw_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw::BearerContextRemovedSgwPgw() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw::BearerContextRemovedSgwPgw(ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw::epsBearerId [variable]
+    cls.add_instance_attribute('epsBearerId', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3EpcS11SapSgwBearerContextToBeCreated_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeCreated::BearerContextToBeCreated() [constructor]
     cls.add_constructor([])
@@ -3110,6 +3181,15 @@
     cls.add_instance_attribute('tft', 'ns3::Ptr< ns3::EpcTft >', is_const=False)
     return
 
+def register_Ns3EpcS11SapSgwBearerContextToBeRemoved_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeRemoved::BearerContextToBeRemoved() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeRemoved::BearerContextToBeRemoved(ns3::EpcS11SapSgw::BearerContextToBeRemoved const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapSgw::BearerContextToBeRemoved const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::BearerContextToBeRemoved::epsBearerId [variable]
+    cls.add_instance_attribute('epsBearerId', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3EpcS11SapSgwCreateSessionRequestMessage_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::CreateSessionRequestMessage::CreateSessionRequestMessage() [constructor]
     cls.add_constructor([])
@@ -3123,6 +3203,24 @@
     cls.add_instance_attribute('uli', 'ns3::EpcS11Sap::Uli', is_const=False)
     return
 
+def register_Ns3EpcS11SapSgwDeleteBearerCommandMessage_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerCommandMessage::DeleteBearerCommandMessage() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerCommandMessage::DeleteBearerCommandMessage(ns3::EpcS11SapSgw::DeleteBearerCommandMessage const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapSgw::DeleteBearerCommandMessage const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerCommandMessage::bearerContextsToBeRemoved [variable]
+    cls.add_instance_attribute('bearerContextsToBeRemoved', 'std::list< ns3::EpcS11SapSgw::BearerContextToBeRemoved >', is_const=False)
+    return
+
+def register_Ns3EpcS11SapSgwDeleteBearerResponseMessage_methods(root_module, cls):
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerResponseMessage::DeleteBearerResponseMessage() [constructor]
+    cls.add_constructor([])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerResponseMessage::DeleteBearerResponseMessage(ns3::EpcS11SapSgw::DeleteBearerResponseMessage const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS11SapSgw::DeleteBearerResponseMessage const &', 'arg0')])
+    ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::DeleteBearerResponseMessage::bearerContextsRemoved [variable]
+    cls.add_instance_attribute('bearerContextsRemoved', 'std::list< ns3::EpcS11SapSgw::BearerContextRemovedSgwPgw >', is_const=False)
+    return
+
 def register_Ns3EpcS11SapSgwModifyBearerRequestMessage_methods(root_module, cls):
     ## epc-s11-sap.h (module 'lte'): ns3::EpcS11SapSgw::ModifyBearerRequestMessage::ModifyBearerRequestMessage() [constructor]
     cls.add_constructor([])
@@ -3189,6 +3287,11 @@
     cls.add_constructor([])
     ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::EpcS1apSapMme(ns3::EpcS1apSapMme const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EpcS1apSapMme const &', 'arg0')])
+    ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::ErabReleaseIndication(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ns3::EpcS1apSapMme::ErabToBeReleasedIndication, std::allocator<ns3::EpcS1apSapMme::ErabToBeReleasedIndication> > erabToBeReleaseIndication) [member function]
+    cls.add_method('ErabReleaseIndication', 
+                   'void', 
+                   [param('uint64_t', 'mmeUeS1Id'), param('uint16_t', 'enbUeS1Id'), param('std::list< ns3::EpcS1apSapMme::ErabToBeReleasedIndication >', 'erabToBeReleaseIndication')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## epc-s1ap-sap.h (module 'lte'): void ns3::EpcS1apSapMme::InitialContextSetupResponse(uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ns3::EpcS1apSapMme::ErabSetupItem, std::allocator<ns3::EpcS1apSapMme::ErabSetupItem> > erabSetupList) [member function]
     cls.add_method('InitialContextSetupResponse', 
                    'void', 
@@ -3232,6 +3335,15 @@
     cls.add_instance_attribute('erabId', 'uint16_t', is_const=False)
     return
 
+def register_Ns3EpcS1apSapMmeErabToBeReleasedIndication_methods(root_module, cls):
+    ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabToBeReleasedIndication::ErabToBeReleasedIndication() [constructor]
+    cls.add_constructor([])
+    ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabToBeReleasedIndication::ErabToBeReleasedIndication(ns3::EpcS1apSapMme::ErabToBeReleasedIndication const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EpcS1apSapMme::ErabToBeReleasedIndication const &', 'arg0')])
+    ## epc-s1ap-sap.h (module 'lte'): ns3::EpcS1apSapMme::ErabToBeReleasedIndication::erabId [variable]
+    cls.add_instance_attribute('erabId', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3EpcX2Sap_methods(root_module, cls):
     ## epc-x2-sap.h (module 'lte'): ns3::EpcX2Sap::EpcX2Sap() [constructor]
     cls.add_constructor([])
@@ -5127,8 +5239,8 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
-    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, std::string const & file, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('std::string const &', 'file'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
     ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
@@ -5137,6 +5249,16 @@
     cls.add_method('Enable', 
                    'void', 
                    [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): std::string ns3::LogComponent::File() const [member function]
+    cls.add_method('File', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## log.h (module 'core'): static std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,ns3::LogComponent*,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ns3::LogComponent*> > > * ns3::LogComponent::GetComponentList() [member function]
+    cls.add_method('GetComponentList', 
+                   'std::map< std::string, ns3::LogComponent * > *', 
+                   [], 
+                   is_static=True)
     ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
@@ -6935,6 +7057,11 @@
                    'void', 
                    [param('uint8_t', 'dlBandwidth')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SetPa(double pa) [member function]
+    cls.add_method('SetPa', 
+                   'void', 
+                   [param('double', 'pa')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## lte-ue-cphy-sap.h (module 'lte'): void ns3::LteUeCphySapProvider::SetRnti(uint16_t rnti) [member function]
     cls.add_method('SetRnti', 
                    'void', 
@@ -7435,10 +7562,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -8323,7 +8450,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -8374,6 +8506,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -8450,6 +8587,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -8484,6 +8625,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -12123,11 +12266,6 @@
                    'void', 
                    [], 
                    is_const=True, visibility='protected')
-    ## lte-asn1-header.h (module 'lte'): void ns3::Asn1Header::SerializeOctetstring(std::string s) const [member function]
-    cls.add_method('SerializeOctetstring', 
-                   'void', 
-                   [param('std::string', 's')], 
-                   is_const=True, visibility='protected')
     ## lte-asn1-header.h (module 'lte'): void ns3::Asn1Header::SerializeSequence(std::bitset<0ul> optionalOrDefaultMask, bool isExtensionMarkerPresent) const [member function]
     cls.add_method('SerializeSequence', 
                    'void', 
@@ -12671,14 +12809,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -12716,8 +12854,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -12738,10 +12876,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3EpcEnbApplication_methods(root_module, cls):
@@ -12805,9 +12943,9 @@
     cls.add_constructor([param('ns3::EpcHelper const &', 'arg0')])
     ## epc-helper.h (module 'lte'): ns3::EpcHelper::EpcHelper() [constructor]
     cls.add_constructor([])
-    ## epc-helper.h (module 'lte'): void ns3::EpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
+    ## epc-helper.h (module 'lte'): uint8_t ns3::EpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
     cls.add_method('ActivateEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')], 
                    is_pure_virtual=True, is_virtual=True)
     ## epc-helper.h (module 'lte'): void ns3::EpcHelper::AddEnb(ns3::Ptr<ns3::Node> enbNode, ns3::Ptr<ns3::NetDevice> lteEnbNetDevice, uint16_t cellId) [member function]
@@ -12857,9 +12995,9 @@
     cls.add_constructor([param('ns3::EpcMme const &', 'arg0')])
     ## epc-mme.h (module 'lte'): ns3::EpcMme::EpcMme() [constructor]
     cls.add_constructor([])
-    ## epc-mme.h (module 'lte'): void ns3::EpcMme::AddBearer(uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
+    ## epc-mme.h (module 'lte'): uint8_t ns3::EpcMme::AddBearer(uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
     cls.add_method('AddBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')])
     ## epc-mme.h (module 'lte'): void ns3::EpcMme::AddEnb(uint16_t ecgi, ns3::Ipv4Address enbS1UAddr, ns3::EpcS1apSapEnb * enbS1apSap) [member function]
     cls.add_method('AddEnb', 
@@ -14400,11 +14538,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -14803,6 +14936,10 @@
     cls.add_method('ConnectionSetupTimeout', 
                    'void', 
                    [param('uint16_t', 'rnti')])
+    ## lte-enb-rrc.h (module 'lte'): void ns3::LteEnbRrc::DoSendReleaseDataRadioBearer(uint64_t imsi, uint16_t rnti, uint8_t bearerId) [member function]
+    cls.add_method('DoSendReleaseDataRadioBearer', 
+                   'void', 
+                   [param('uint64_t', 'imsi'), param('uint16_t', 'rnti'), param('uint8_t', 'bearerId')])
     ## lte-enb-rrc.h (module 'lte'): ns3::EpcX2SapUser * ns3::LteEnbRrc::GetEpcX2SapUser() [member function]
     cls.add_method('GetEpcX2SapUser', 
                    'ns3::EpcX2SapUser *', 
@@ -15944,13 +16081,13 @@
     cls.add_method('ActivateDataRadioBearer', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice'), param('ns3::EpsBearer', 'bearer')])
-    ## lte-helper.h (module 'lte'): void ns3::LteHelper::ActivateDedicatedEpsBearer(ns3::NetDeviceContainer ueDevices, ns3::EpsBearer bearer, ns3::Ptr<ns3::EpcTft> tft) [member function]
+    ## lte-helper.h (module 'lte'): uint8_t ns3::LteHelper::ActivateDedicatedEpsBearer(ns3::NetDeviceContainer ueDevices, ns3::EpsBearer bearer, ns3::Ptr<ns3::EpcTft> tft) [member function]
     cls.add_method('ActivateDedicatedEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::NetDeviceContainer', 'ueDevices'), param('ns3::EpsBearer', 'bearer'), param('ns3::Ptr< ns3::EpcTft >', 'tft')])
-    ## lte-helper.h (module 'lte'): void ns3::LteHelper::ActivateDedicatedEpsBearer(ns3::Ptr<ns3::NetDevice> ueDevice, ns3::EpsBearer bearer, ns3::Ptr<ns3::EpcTft> tft) [member function]
+    ## lte-helper.h (module 'lte'): uint8_t ns3::LteHelper::ActivateDedicatedEpsBearer(ns3::Ptr<ns3::NetDevice> ueDevice, ns3::EpsBearer bearer, ns3::Ptr<ns3::EpcTft> tft) [member function]
     cls.add_method('ActivateDedicatedEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice'), param('ns3::EpsBearer', 'bearer'), param('ns3::Ptr< ns3::EpcTft >', 'tft')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::AddX2Interface(ns3::NodeContainer enbNodes) [member function]
     cls.add_method('AddX2Interface', 
@@ -15988,6 +16125,10 @@
     cls.add_method('AttachToClosestEnb', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice'), param('ns3::NetDeviceContainer', 'enbDevices')])
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::DeActivateDedicatedEpsBearer(ns3::Ptr<ns3::NetDevice> ueDevice, ns3::Ptr<ns3::NetDevice> enbDevice, uint8_t bearerId) [member function]
+    cls.add_method('DeActivateDedicatedEpsBearer', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'ueDevice'), param('ns3::Ptr< ns3::NetDevice >', 'enbDevice'), param('uint8_t', 'bearerId')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -16105,10 +16246,10 @@
     cls.add_method('SetEpcHelper', 
                    'void', 
                    [param('ns3::Ptr< ns3::EpcHelper >', 'h')])
-    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetFadingModel(std::string model) [member function]
+    ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetFadingModel(std::string type) [member function]
     cls.add_method('SetFadingModel', 
                    'void', 
-                   [param('std::string', 'model')])
+                   [param('std::string', 'type')])
     ## lte-helper.h (module 'lte'): void ns3::LteHelper::SetFadingModelAttribute(std::string n, ns3::AttributeValue const & v) [member function]
     cls.add_method('SetFadingModelAttribute', 
                    'void', 
@@ -18151,11 +18292,6 @@
                    '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', 
@@ -18226,6 +18362,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -18482,9 +18623,9 @@
     cls.add_constructor([param('ns3::PointToPointEpcHelper const &', 'arg0')])
     ## point-to-point-epc-helper.h (module 'lte'): ns3::PointToPointEpcHelper::PointToPointEpcHelper() [constructor]
     cls.add_constructor([])
-    ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
+    ## point-to-point-epc-helper.h (module 'lte'): uint8_t ns3::PointToPointEpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
     cls.add_method('ActivateEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')], 
                    is_virtual=True)
     ## point-to-point-epc-helper.h (module 'lte'): void ns3::PointToPointEpcHelper::AddEnb(ns3::Ptr<ns3::Node> enbNode, ns3::Ptr<ns3::NetDevice> lteEnbNetDevice, uint16_t cellId) [member function]
@@ -20172,9 +20313,9 @@
     cls.add_constructor([param('ns3::EmuEpcHelper const &', 'arg0')])
     ## emu-epc-helper.h (module 'lte'): ns3::EmuEpcHelper::EmuEpcHelper() [constructor]
     cls.add_constructor([])
-    ## emu-epc-helper.h (module 'lte'): void ns3::EmuEpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
+    ## emu-epc-helper.h (module 'lte'): uint8_t ns3::EmuEpcHelper::ActivateEpsBearer(ns3::Ptr<ns3::NetDevice> ueLteDevice, uint64_t imsi, ns3::Ptr<ns3::EpcTft> tft, ns3::EpsBearer bearer) [member function]
     cls.add_method('ActivateEpsBearer', 
-                   'void', 
+                   'uint8_t', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'ueLteDevice'), param('uint64_t', 'imsi'), param('ns3::Ptr< ns3::EpcTft >', 'tft'), param('ns3::EpsBearer', 'bearer')], 
                    is_virtual=True)
     ## emu-epc-helper.h (module 'lte'): void ns3::EmuEpcHelper::AddEnb(ns3::Ptr<ns3::Node> enbNode, ns3::Ptr<ns3::NetDevice> lteEnbNetDevice, uint16_t cellId) [member function]
diff -Naur ns-3.21/src/lte/doc/Makefile ns-3.22/src/lte/doc/Makefile
--- ns-3.21/src/lte/doc/Makefile	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/Makefile	2015-02-05 15:46:22.000000000 -0800
@@ -39,8 +39,23 @@
 	$(FIGURES)/ue-meas-piecewise-a1-hys.dia \
 	$(FIGURES)/lte-cell-selection-timeline.dia \
 	$(FIGURES)/lte-cell-selection-scenario.dia \
-	$(FIGURES)/lte-handover-target-scenario.dia
-
+	$(FIGURES)/lte-handover-target-scenario.dia \
+	$(FIGURES)/lte-dl-power-control.dia \
+	$(FIGURES)/lte-ffr-scheduling.dia \
+	$(FIGURES)/fr-enhanced-fractional-frequency-reuse-scheme.dia \
+	$(FIGURES)/fr-full-frequency-reuse-scheme.dia \
+	$(FIGURES)/fr-hard-frequency-reuse-scheme.dia \
+	$(FIGURES)/fr-soft-fractional-frequency-reuse-scheme.dia \
+	$(FIGURES)/fr-soft-frequency-reuse-scheme-v1.dia \
+	$(FIGURES)/fr-soft-frequency-reuse-scheme-v2.dia \
+	$(FIGURES)/fr-strict-frequency-reuse-scheme.dia \
+	$(FIGURES)/ffr-distributed-scheme.dia \
+	$(FIGURES)/lte-rlc-implementation-model.dia \
+	$(FIGURES)/lte-rlc-data-txon-dl.dia \
+	$(FIGURES)/lte-rlc-data-retx-dl.dia \
+	$(FIGURES)/lte-rlc-data-txon-ul.dia \
+	$(FIGURES)/lte-rlc-data-retx-ul.dia \
+	$(FIGURES)/lte-epc-x2-entity-saps.dia
 
 # specify eps figures from which .png and .pdf figures need to be built
 
@@ -56,12 +71,6 @@
 	$(FIGURES)/epcSimulationTime.eps \
 	$(FIGURES)/epcEutranRunningTime.eps \
 	$(FIGURES)/profiling-memory.eps \
-	$(FIGURES)/lte-rlc-implementation-model.eps \
-	$(FIGURES)/lte-rlc-data-txon-dl.eps \
-	$(FIGURES)/lte-rlc-data-retx-dl.eps \
-	$(FIGURES)/lte-rlc-data-txon-ul.eps \
-	$(FIGURES)/lte-rlc-data-retx-ul.eps \
-	$(FIGURES)/lte-epc-x2-entity-saps.eps \
 	$(FIGURES)/lte-strongest-cell-handover-algorithm.eps
 
 # rescale pdf figures as necessary
@@ -108,22 +117,6 @@
 	$(FIGURES)/fading_pedestrian.pdf \
 	$(FIGURES)/fading_vehicular.pdf \
 	$(FIGURES)/fading_urban_3kmph.pdf \
-	$(FIGURES)/fr-enhanced-fractional-frequency-reuse-scheme.png \
-	$(FIGURES)/fr-enhanced-fractional-frequency-reuse-scheme.pdf \
-	$(FIGURES)/fr-full-frequency-reuse-scheme.png \
-	$(FIGURES)/fr-full-frequency-reuse-scheme.pdf \
-	$(FIGURES)/fr-hard-frequency-reuse-scheme.png \
-	$(FIGURES)/fr-hard-frequency-reuse-scheme.pdf \
-	$(FIGURES)/fr-soft-fractional-frequency-reuse-scheme.png \
-	$(FIGURES)/fr-soft-fractional-frequency-reuse-scheme.pdf \
-	$(FIGURES)/fr-soft-frequency-reuse-scheme-v1.png \
-	$(FIGURES)/fr-soft-frequency-reuse-scheme-v1.pdf \
-	$(FIGURES)/fr-soft-frequency-reuse-scheme-v2.png \
-	$(FIGURES)/fr-soft-frequency-reuse-scheme-v2.pdf \
-	$(FIGURES)/fr-strict-frequency-reuse-scheme.png \
-	$(FIGURES)/fr-strict-frequency-reuse-scheme.pdf \
-	$(FIGURES)/ffr-distributed-scheme.png \
-	$(FIGURES)/ffr-distributed-scheme.pdf \
 	$(FIGURES)/MCS_1_4.pdf \
 	$(FIGURES)/MCS_1_4.png \
 	$(FIGURES)/MCS_5_8.pdf \
@@ -146,8 +139,6 @@
 	$(FIGURES)/MCS_12_test.pdf \
 	$(FIGURES)/MCS_16_test.png \
 	$(FIGURES)/MCS_16_test.pdf \
-	$(FIGURES)/lte-dl-power-control.png \
-	$(FIGURES)/lte-dl-power-control.pdf \
 	$(FIGURES)/lte-fr-soft-1-rem.png \
 	$(FIGURES)/lte-fr-soft-1-rem.pdf \
 	$(FIGURES)/lte-ffr-soft-2-spectrum-trace.png \
@@ -158,8 +149,6 @@
 	$(FIGURES)/lte-fr-hard-2-rem.pdf \
 	$(FIGURES)/lte-fr-hard-3-rem.png \
 	$(FIGURES)/lte-fr-hard-3-rem.pdf \
-	$(FIGURES)/lte-ffr-scheduling.png \
-	$(FIGURES)/lte-ffr-scheduling.pdf \
 	$(FIGURES)/lte-phy-interference.png \
 	$(FIGURES)/lte-phy-interference.pdf \
 	$(FIGURES)/helpers.png \
diff -Naur ns-3.21/src/lte/doc/source/figures/ffr-distributed-scheme.dia ns-3.22/src/lte/doc/source/figures/ffr-distributed-scheme.dia
--- ns-3.21/src/lte/doc/source/figures/ffr-distributed-scheme.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/ffr-distributed-scheme.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,12 @@
+     ]sB{e``ŗIvCĪ=mп $Imm̝2 vX,~2]r1Ax<2Y1V~;5˧Y(jNUuoiU(Ϯڜ76:4=`V{onZUe6h.xXj>޴ڶyQtܿ'nNLߗLK5/t}in:M˽&ٶZFŗ?ϛ}㡯R-rq䛉  NJc$eˢ4!EtA+g=Ks+b#!` 3*ÝgUU04_fDPU^yM~Ңl^]}{n:H@_glO޺oßwMob7p{f=mŶKykz{<5ho)hΪќͬ*]r>nsmX$Nlgf벸)XBRݙ&tIWCQ ؄ą	Gc?fy6+վ0=g3ܚ5.$Xv0jPem'gΤ
+ځMrnʗx󲐘+,/e}J۹Y]-شN
+Jq'TH$i=M@"BSOkًAW5	La 5H1@HBzd5"QޗfUԈlՈvU#PAPTzc`^ &u;Mk6M_2=iΌOtmF*zf!(VU{t.tKi̯j=nat_23aOiH	R+"8BHm0Jftne31QyX-MY>[&#5̯\_̊*ftaj+Uײߞ|~8uЕdj+{Xx+4fflHgLVi086J#ÈtǍw^<ҊR$)j=DE|3-&~ci׍1KY2JJNtЉqDW~Hp,!3ԉCHMFDSLQ8q64F+fҙӒD(љ;BgNv%+m8@Ԅ2$&	*2E3LT*!E2EXP:)=2mt}UdftYܘ2`_D S $tE`	DuЅ=F`jBj,?|aFSyQ.?jh^N#m!moiP@JpR8Β>Q'"cX5W+0V#Q(8lL5=)ϋgX2*&0gd ƪYYC]+0c
+C~d,Ƶ+`JKˬ|E"k%3{&g+Swf4}m۞|Gq$$xr"(N!hye7V'|H.w?I݉C:?I;giY7dAǮrZ<?%󚚨sv:؅>ٗB|`@kQjb5!44!4,,#)DRhO
+Hl@Ҙ{VȜPՏsYtŵJJMtN&Iu5avH6q'D|!yBXaBjSZJ0L_(&	
+4HcƐf&D#NT>J7逺ٶT`Mn\s,*'6#^;	wR΃lTFSVHRZ=ꑰڨuq]Kp<ȨQ=-ΆPO *q݊C`VSh⒃qCgAR~d$}	s[AK9$W!q\Xj	Sh[}X [-=eTii =Ԯ Dm8Z]sRL=2Éa_zXhy"dMҎ0:E0Pd!{$'r¨ݳDMgҥֳ3rW4gc+K$>"lD)НbO;.j(['IW1j>͞* e(jVM$m&B/T:{"qjh
+E~MUV9Zbrʐ*RQRz#=\A1	Q(h){0(%[o"x~4ٌc\vN4u𨒉KNFs0Vh6eu-Wצf 'l(;tNpH$4Z[ $wX<N-{8jLl442lM8	K6"w&Cb΁q\;ny~gmbApҲ
+E:GAބ9윁^᯦E-;pY9Mݥӏ9R+xMpGt![tnЄT/-x٬
+>&}#P0hYL'{C<[\rѼ9<$fS,o˳˳k448b	Bakۻ-BwWQQq*\ (DUz"06\,B/S"h1E"ZhE"@C 
+@c6@H =sH~)iA>iXL%J$솃 ![jqۦJEbО8P1pJ݅Hg]8$P<1HݳwY_X#H7"G@I2ꮒQXJPwݑ֚Dn8w-(bB$(G>AIu'j^K0`XQa>Cad
+X`öd1Hɥ&))hW I[VT/Sf+
+$p+5Z܊[Qq+jG)Eҧ!Ũm{IW<1]-ZhElt8ϝR[E uF-B"tVB/K(ˌ`u=wr	 h9lHe06(@IZoI* 1"D-<5OoQ/m  
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/ffr-distributed-scheme.pdf ns-3.22/src/lte/doc/source/figures/ffr-distributed-scheme.pdf
--- ns-3.21/src/lte/doc/source/figures/ffr-distributed-scheme.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/ffr-distributed-scheme.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,238 +0,0 @@
-%PDF-1.5
-%
-3 0 obj
-<< /Length 4 0 R
-   /Filter /FlateDecode
->>
-stream
-x+*O4PH/VЯ0Up
-B @@
-endstream
-endobj
-4 0 obj
-   28
-endobj
-2 0 obj
-<<
-   /ExtGState <<
-      /a0 << /CA 1 /ca 1 >>
-   >>
-   /XObject << /x5 5 0 R >>
->>
-endobj
-6 0 obj
-<< /Type /Page
-   /Parent 1 0 R
-   /MediaBox [ 0 0 462 498 ]
-   /Contents 3 0 R
-   /Group <<
-      /Type /Group
-      /S /Transparency
-      /I true
-      /CS /DeviceRGB
-   >>
-   /Resources 2 0 R
->>
-endobj
-5 0 obj
-<< /Length 8 0 R
-   /Filter /FlateDecode
-   /Type /XObject
-   /Subtype /Form
-   /BBox [ 0 0 462 498 ]
-   /Resources 7 0 R
->>
-stream
-x+*213R0 BK0˥h^_a 
-endstream
-endobj
-8 0 obj
-   42
-endobj
-7 0 obj
-<<
-   /ExtGState <<
-      /a0 << /CA 1 /ca 1 >>
-   >>
-   /XObject << /x9 9 0 R >>
->>
-endobj
-9 0 obj
-<< /Length 10 0 R
-   /Filter /FlateDecode
-   /Type /XObject
-   /Subtype /Image
-   /Width 462
-   /Height 498
-   /ColorSpace /DeviceRGB
-   /Interpolate true
-   /BitsPerComponent 8
->>
-stream
-x읇_t ;6ر)rPEvxr`@ETQAl Qcleq7ȃd2-y1f'GAAAAAAAAAAAAAAD-8~ؒEhfmկ66k~54YWysXX	ڣFlZ{T/`=9mQaѓ%D
-2??>s"l=j֮aۓ~!2}ܾSVVfVxc9V-`_x8f=} ԯfmxz*"[uiOEyM4D!lѵ[RRg:퉼QԱ^ZONӻUrdfgg#ӧhTEakQ#vҞ-aaȾ"0ÇpݸǏwl_w2DrZq}6]ؾ}v.\iHW`+Q.ǎ?wK?g߿:h٧ǏQTA+Mq }Ϟ9cl@D5bk`iʤ+WQ`WVV:yÇ|?:#'mE=Q2'c>䪧0CX<uur=@>>yⲏ:"j9&OqǴmΞM|VaB҆g>}\M\\5
-aLU -	Ygl@D5bk\py\,DD+++C88#xN3Jv[QO4E.jq-//oy߳'x]Ϟ>0f.G"MLL}Uk{sgF$b&M!2%"Y*^
-,=vca{@
-[fCM~)}}G/]v[oݒGi%;#sxQ=Q2rFaX]P;-3Ơq!~@|t-W|7bHݰ>tSd)2KKK{<|KfT3>yJoِ{s7&%j]CþƔ_ի4gƻ{9qdgոr(wrFaX]P;I8)KJJqo'ۺyi4kJGViNSZ\to@Y5i-no)߼AhQ#>|@طwom[?ꌘK#Tn	zd.Ll¼籺u/_8K-H`[8sVrssYʀӇƎN,bNzU0>0*L;.d͚C+++%F!CBFrӞMDl;a{دԌyyy-61RHjUD-z%qyqğ9uVN+-'艒_90y.e=OF>Ή>qܜ&..sfJ~|!2AϻcUrC#>n:]֤)8))	9->%Xdy.hOh޹v333-RyӚcXo:td֮~0f@[L!U.^3w[N%s"XiգKWؘٓ"E>=H@@`(sRʇzzx~<.8$zRX]DڞQ>0$).*i?vB</Vm[?z?(C䴦+|)fy[N
-]ux$4	i9t[aOU/af>upߥ1|g'555#=̂e0#_+u="N+F,Hɹ{.c8wڶÇ2;rxܣDӚ.ׯ1v-..6>3<$;dD.lluZwׯ^:o.F2VlF"~=Üv*,,DW춡wOQ"ɇ i	^xW}Ws"~=Üv޽AWq9z&bh`h!?,?g0(g:ܳ:iٓ	{pZZI5( 9j:f8(4=1e- >Y("N+ŝV!@rZlꭓiMy2Os
-"~=cq|rx?['5ioߺrܹ-5N~1aLm[H|rNFPk('?{ ŝV!@HON+\?l'(u줜5i1Åbݽy~T
-˳}]3OH$W0kfQm"~~{j(<hq4d?l'A>I95ZvMl7p2\BŸ=EBBߞk	&r	"j͢buEZ{Ԉ]CVOZr}XZauAvZ>Op2q=~[xkذG \HVIX5jEakQ#vvZ~jN*:vR3Sjocd-UG7Ē{:HXq.N Bu"j͢buEZ{Ԉ]CVOO8aN*IEG+
-t.Nۍ8xСׯrq[پak	Vk(ڣFl~nN*IIsԯ?>tpڶ5}'N^^;wAQQϝCg="$W0/b,-VQG54iEԲI9ŕmZ-m̒[h%B<#C._|CѦYT[.[kkhӊe;)WS?8ӱ2ц=C9ׯ^~sWA[kcuEZ{Ԉ]CcO-I2>HafEakQ#vm=X]D5bkڣ:~CVͺ"ըqm M5u MivHAAjT퐂ڃ4!i=HSC
-jT{j M)=HSARP{ڃ4U; MivP0|Ϟ۲Km-&I^^ޚc?5V|ld{M\KNvP[cG'syJr{`/],ЖK6WYYĵHjl.9rpCKo+@nP^^'ibAli,Wo@;nJJʖ0_	ycvm<6!z"?^pύwR ۳gL?gkV 1qӆ9d"݋b1Z;u$#kd7oX0cڴsъ
-UTT~7WۦrFrRWte9)q%S')r[[e9qi	rNvD>y
-ׯc٬~4vkg۫C#CvLr)ݛurwk̩r)33P)8R0uwÏC6j6_Tٞ-,W2߁01_Ï4z{)Muo߾}Sh: |}ǍӢi3WfV,'sLW3W.⚢,gf(ɈKNKpupZ+bЁkWvqp퍡==<Ɇ7ԡX,/,U߇4
-)ٿ=̛ׯ72k 9#}ab#n gnEu^*p֣GbU``0qJKKHGbߥ!YpJΖVNYNQ2+Bڊ}6SLe۟WƌS-ر7BJt]5ʥL|1USb0UOQq{,Ø-a/^<dDaãF `˗\&CcfeeWbOtbΖVNYNQ2媝W!5dŜe95CYER\rZ&%%}עφ\{wϟUQ!%:#'(D_Ǆ}1C A铨wLNGqM~AO|lN>֜VNYNꙨ,W
-)&*˙ yr2_P-
-شaK{Ѽ?*Dg܍/\.%:S/!YrD?wnq@ b)5GNO?oa4nG׋VNYNQ2媝W!5dYte9EqP9qi	rN珪E1U}XzaTH)rZ/:| ;b:<΢"rE<(5o޼Axc{.qڵU {C;-,(ruZ
-&)A(˙ " '.9-Yi9HtL͆ҬkġC߳4?*9\Jm۵rkq4 D_}g̼{7 `^3edGt҇MW#,a*xB0Y%3QY*oSߚ,gU117srZRN}D!˗7&ǒ	BJʥTgl͚G_\8 FGZ=S5aqQ1cYZUW5|Ty-cF:PYNꙨ,g$\J35EY4qk,WIq1%%O\|*)y233_z	E!FJ픖3߿JN3jZ`Quaa!"==]3+M^d5(qV7qi)h67aXh[dvu%M)XCg{6EZ [S4U;`IIIAܷw[QX"ؔ!i=HSUs厞K޽sm!I\zƽ؏~߶w}Iojfנ]XED9{jq>=GoF:->C5H(}mfE\'
-^%'
-`iv9-xeN{A}FNں{YYEԂS'O
-M3ۈÆ*|6-m_kQܾc,bRRE`XhчL}j^ҘVu<q¸B_k
-b,T[[9-,=B%UlQ;a'>d))&lt14tw9}zmIc1m]ӪGzyg6;rna&iWxjDrb$.)))-",$NMM?zB	z"Z{ڃ4U; MivHAAjT퐂ڃ4!i=HSC
-jT{j MՎ~/iV?	S+~4O?*QP?R?GSS+~4O?*QP?R?GSS+~4O?*QP?R?GSS+~4O?*QP?R?GSS{eqq8<{񥥥?i?fV'%Ԃ~4/2!>|`|5ރqjo޼vC,9- o^;->SZ!PQPiݛ55|91VVV?ztޜ9WMeee[?m԰W/=cfġC,A=7_CdևF!J,פPksH޿GihM.]Ȓ}}-hrK?$.n9˗Lz*//ǧjHOOG|kj~¸&HdEgjZE?TGA9mC#s'X];-\q	;wigv{vݺ7wmK#G͙9YcנˑaCX;z	^nPtskѴ<Y
-Qb&FAz{{WWH5Gn
-X"oߺܒ'N jAN:6qq'WmȂϝ.^^x|iѸǏoH?{L"35CS~U߮N'G̑5i0sZ;q6$[\{:0xi\Šl(ArUcW2=No^[wnߑL;c`ɵW{lŚUTa"}5\0a1v4ؕ
-LDH?z$YLT觟j((紘N<ab0&?wgnߺ~lg`_c`2<
-<$u]?D%SpZdABabb`cnNdJi1}{"gjl	sZWocD+(ţ186&fʤɿΛǬ.\E35OS~U}ƨåy]|fLp[<q"$YcW̝5RyN b&K	+ʥ>{>iS࣡Ɩ0(
-
-ji.]dCBܛWǎ~ZNCF!r<M~Vя
-NˤI0[Ξ9s8"۵`ܾ9-gl*99m'G-㋜V
-Hwب={dJӞ?w,K-O"o-aN{;il`\?;aaU8eQȞ\E
-觟j(3a_ ;-\>AlNΰP$X*^q I$>tM0u&|:?gd I/V
-H҄m"!a]J:->S\])-aNϣׯ^9u.}kD$g7lG|H߷g/o-iO?*QPiua'pZM'l͞þb:
-c2ϰZB׭ǸCOrUdzBɢ_.̝5[rK7͢ض m}6ACY]zBE
-觟j(hv(5}U/d00qff&{ʴVU6}YYܞ[dsZ?~(V6Խ"!%Ԃ~O'Y!~4O?*QP?ձgq9O?*QP?R?GSS+~4O?*QP?R?GSS+~4O?*QP?R?GSS+~4O?*QP?R?GSSo?if~V!i=HSC
-jT{j M)=HSARP{ڃ4U; MivHAAjT퐂ڃ4!i=HSC
-jIM3?wnadvv6"عg5ܷ[Tx4[O+O)=$5eo*ǖG߇n?uJtXz*SC
-jeݶe+9d`~Ǐ%%%¼EEoSV_~MOO_DL~5rcw
-N\Ra(%_TXr,Y)8Uğ1O)=o=`1Iӗw;m];v[9#asgfW,/v1Cgy͛7\0WpQw Z"rZSJ8{Ls&U-tr<w^\ؘ-hj,ˤrd<Y>bmfЁ\|ޜ9{~&09)"HAdۻ"09mVVVcGSSS>{<"pҥ;v yIKdFS?}}hReK:B	mhϯ5qqP\ɾ}C׭o:̀"r98.dشaӇ#"4w.
-Yލ,>#M].?}d ޸~˳M1$lvUPsZ8c0l:uQ*m32ܿSB	('AʖO23j_b%*kNlxdJi9G_F.V
-L/lsZ~gϘYcWv*Z`'N҇r)ϱV*
-NXv-Wb76&w%KEKN7>k!Cٽ^=z0--- ͽYsbu>0.-W>j|#(0aCNV2>=>)ǓL/,N3o
-cӗOد_II	S&M^`0\vq}&<ZiJRP{(;gUysm1i1FE<Zlr.]}*(_F`/i9dևbL"+**Vmі`J>k.R["e||J6i0Xgјvƴi<1ue:&..:Ɋi )=ݼScxi_%'cF2Ϟ>1X+ '<>i䂣].)pff&avyӦt6r9d)))v'"6n{Pǎ`Mڮ<M!%sZcTF<(WiYYY7ڌԷHS!sqa^Ɋi )=Аu?zX5l㝖Kci\ON{1^cs&9_sF&[߸~cO5vt9dD#CDpʕkNtK)zvB)ÜwOC=,{v`lHϞ:A_G+"1-JX!R	cZgp
-I,۷ohYYɔ-=+:e<-0!ijqZ!ijqݽ;k+64U; MivHAAjT퐂ڃ4!i=HSC
-jwii˗qo>$$7'!amHjM\\{zx|ڍ"jMVve,2RP3-ZEzz[oRP3rk!rZ4:98~!5C>NynQk1-ARP3\|Yh.lCB]0=AT퐂Z3;wk[嵡eʤBeP?U; MivHAAjT퐂ڃ4!i=HSC
-jT{j M)=HSARP{ڃ4U;ЏV_6oC?R?GSUWK䴄ZЏڃPєV{jA?jrZB-GSrZANKhJN=i	Mi9-)9 %Ԃ~45i߻7}.]}z?wkRTXtsc^u^OҪ<sDNKhjVVVkξ_#surF96lPΘ5ɖ/4&f3s	̫LiUFzҬ	^-y&%Ԃ~45iO<\0ϟYL~~!Cy?i˼*̠I\܇(;LNKhZ[[VdggQnEE&˿͛?qի߼yIY%<j}H6ù99|Eh>͑o(dмM,Ĥ T'o=fO>!=?(DbD^vfq@i"ϝG*+x=?ӧc{-:ZEEh,XxILjPѴN9̟;PQal~H6w1WgxF:d߰QK7A;42xy/((f|O]|`:|ՍqYcׁ5ui֤鳧ό[>ώ@{.PȚ5\QVك0iנ{gsVn-Юv>{V/|rur1g4.:rZB-G:3geۖ
-iJKK1*cҐ%8hД>gdvƏ7_,8\8O-#{6nQb8VdQ(oqQ0\w0Ne#aa gX|EZ	đA?iY0xSH'ysaXb4c0Ob֌{X-a/^`ʕ/Jc;BC!SE|߿orL?//C͛6)ŷݾr2_aÅN3cXH\WKJJP8ZANKhZ[=`Nm|V)3BbW䴘#'Q!&=,_~ݒ˷>&q_}{	n\޺;
-|v[}붪Oeb-tZ~mFC;:!C#è#nݼYq9-imވ,%؂0>%%LG~Ç EBNl1"KHMMEJc]rqǞ=a
-7wy$CvĔh;w([eeBQ|۷neΛ=Gg$q8 r=@9-OyC.ם;k6"1kP}uwﰋ)9\sssEN+W>+<v	fn|Rq#qSƾaؑ؅ױ[CPqEEVNqcv,Zt4rE<Xq %Ԃ~45i1lѴF-8~(,wĉ(tsgLGF;edsm۵rkq4ʆH֤iׯ]1tV|v/b/&ҬkġCك)/S$O
-޿g
-K(o|p_Y	5:-` wܹyG-/k+9-NU?ܕmuKKKS!8[fN)/86{ ke@n'O0|PʕƓ'/_zmO˓;)6,sja#>\QB-.*?f,KжUkn>O%tZ/0lfits{
-rZB-GSżX!ab[XXU9233_zȒ{Jm$"ׯ_:PfϞ>xUrreeQ66-Wi	MⴄpHx>UAA?%䴄ZЏ=ll 7Pєֲo{m-9-)9 %Ԃ~4%䴄ZЏڃPєV{jA?jrZB-GS%hSFNKT{j M)=HSARP{ڃ4U; MivHAAjT퐂ڃ4!i=HSC
-jT{j M)=5Mx|M&[-,))iZ՞E=x32*׮|
-wnYhqVVVÌ(	SC
-jM/DE9;mʤm[nGɔgOiޒU'O_Z+H}{2#r
-PTX1|Ќ:+Çy2͸P?U;Ӵֺ8 wϹfeeep]5:(=k|E9#9mee%/2?g6\;WV"\Dk;ϟϔ^Q^5??_46P,
-.YHBT퐂CNS'O:·c߾um8v({Oyӊ1.>d:xv7l4z(i\֣en:hN`(!`B fSҶ[cz.Y;;\8-+͛7e|}%z`7kDb.^^և"l(|YYY4._IՔP44d]߼~~1ƌA//_r-:G0:uw܁\p!̦)YG711q	bcbbf
-0(޻!ϙ9KviEpyŘο~j`srNǌdyqYcW/hի;mdƍŊo\dj)HA!e7B7nh6e2w7k9{GD`{`'և0[4j	AdE<Xn˗aM x`JJJ=vCjPsyI;(>d(Ku>dN
-bdfW5){j,_IՔPt_x8z7͞MsqQi7ڹcǼ9.7VסӦS'O"8#ci{fG\ݭ]ÄyŤ%Cc2iq<»\iQϞ>C߾}G{i?}$jJ/٤jJRP{i><董WUXj4N1,f3۰>#@y`o?zSrQl^^b0睖RfPA˗;('pZ,sk֮5i%˗lO)=4ׯ^m۲աݻ11Nvo)H)ާ5NSrw&pKf Í߿{EdE<>S1J9l8Λ;pPVV`aiiAIcw!2|}1~ܧiɜZt4>T䴺
-~el掩sX[6Bg{Wӳ6n"fa`UݷnӱdF$FFTܜ		h$vulo%Y;E8|TPsSָ|}DON+HAQg81dښqᣳG!rKX<Д/Aqq1{5^pj7\wM֚]>GTF4MJJrhdyۖnM9u-R16)a6M/]8|Ȑ}#v[ԍhJ)=HSARP{ڃ4U; Mi^͙س{wWO"TJU3cڴw"ISR\\MukZQe^jڶjǻgH91T8~\tkvzaN˶={1%MUʦDNKmh;~9JaKh
-.ʬ.PT5y}HiR*++
-ЁnaW8mƮ[¾~Gꥴ4|7[na1Wm[/@RP{ڃ4U; MivHAAjT퐂ڃ4!i=HSC
-jT{j M)=HSARP{GS/J@ŷ-aa+~4EǴvCNKhjN~!2}ܾSMEEOkUyT9-9mEyM4=vKJJR3$'ת"SrmxZkjA?ښ%Ф>|=~վg{AԟӺ:lPbmrZB-GSrƎNS&MFF_FF;p^^ގۧO_b0gVTT;rtܹ/Ix132|i;w,vmgϜ{E,Xh\rZB-GSrڋ.=W._FVVVb@[VV! <aw#CQ3ᇓ'LW=m6NvIII7Xi˗qo)%W,
-k#4dݪ 2h0=ӯM- %Ԃ~4)I~,y411'qqT{;k6'LX4?L-..vkVX݃I/ɓ,2x*0xkQi	MmiܷI|B.A~~?a}3vs\[eަrr?6|ϞT7ܱsݻzuPԦDF~۾{0f]ǌ|GV"j:t)rZi~8իrȠCF~9̅PԦ6//Ef~#F
-Wt1moTPP19U.߾}L;.dv4Uk"+!eVVD!!ϸ"fANKhjSN;&ϟ;1{vE` á{wu8`μgJNvhdX\̜t8"VXA>tkׇGajA?ښN<ެ9BSfk_|ݓų>;wq:	W.,2ڱ`@dV' rZbfMpN496&Ã%EzzU/RjA?ښ2*+޼~1mqq+*RSS3ҫ{Ō)y99oSVVVJW'_lAA90ߥc
-i	Mmi@NKhJN=i	M-YuY,+33yܜCuo)}1rZB-GS;-My0#ª25r!2
-%M3hɵr䴄ZЏ?U"$
-FE>}2XrZB-GSx,xjtZu߾u;xO+++߳gƴiJKKk\\9[Vٗ.^GO25AV/VamVd9~({LµP
-y􏝻.Z05BNKhjJxjtZ\pax/NPX??1Fuԉ=bN6 wnV]c"e/*B*aE,/ /Cv}{1a)
--P*,Mf䴄ZЏ8Yr+\);\ >cD~Gn޸׹ǒոs͛6`+w1I0]! *aE¼(^=zxw>ii&Q,P\#Kn+c=~Fel[vd1pd"iXԸsZ OpR+w10\½Wd:;^ǍR`"ݷw/WdhJNKhjJ%:p öyHZ~$`^
-O]Ż[Vq%5.Ŝl+rskW3k"Q^ZR`"=մ4)jA?ⴒkdɭp|@.,Ծa\i= E<[`?$VĜ6{C#ׯ_%WsZV	+iSvZ^X9-)N+FAr+e˕eY/a+i%%%[O8飯Fc,Z5Rŵgm͚>YiZ%F;eZa)))N+yMєPħ$Ȓ\gŊiۺMU>"!˳=j\\9-{  X??6\(
-iN_+Li.{jA?贜Yp%yyy gU#͇c' r@ZarH^vei	MMwZ pn9󀫓k7!%Ԃ~4qWxyG\²hrZB-GSv6-m䴄Z MivHAAjT퐂ڃ4!i=HSC
-jT{j M)=HSARP{ڃ4U; MivHAAjT퐂ڃ4!~4iFjA?l~-/jA?ڂ~I\M}k,NQao-9--8mEyhެa7޺yӂ-{# %Ԃ~4e
-i+WgL}{*g-k)U)䴄ZЏK-c07ڭISnF\pa vm-gϜKS\T+{s~*(hTo۲uGsFҤM#/^6ej]c䴄ZЏgymv{ !r1{zxK9ɹ{.c<wڶ۳{#G9&.Uǌpƍr䴄ZЏ6봏Vy?Lz'Y|U^;TTT0ri0'HPXXp=X9ݺO?3rZl{tPf;<yD=ψn޹csbwi0e{y^xlzU0O7~PWXM%69-:իl}`_~KLLN+9>MÀVikWiZbSjA?ڦa#Ѭ,vf>$}S;\:BKl
-rZB-GSqaDl[7oٽ}F7_窿rktT'qqa
-qo9?%%E.eV%69-8-a:|	bcb==<QuY<1S&MKcYUhMANKhjNk
-:KKUVV
-
-
-ʔ䴄ZЏjqZti	Mi9-M9-VD 7'%|U&BNKhjSN!U5#;\B	io.>Ze"䴄ZЏ䴒 A?Ŕؑ]xI,x],SVn5⢢۷O߾u;xO+++߳gƴia7lPZZZ\ioߺWUT+Vܽ-ЪzP'8-lm	ƍӶu';$Nj],SVr5-8~\]əyZ~.cFکk\9-<tڻ{7jAc;Od܏'ukU}_prZB-GӟW._mحIS&%ŊDiV:{?Fozt<ߚ1cj\9Mne0R8*lI\WޣYN+ZVYANKh6pVn-_KKK{&.V"=~FlΖ[Mk@\,Yy<;_v-vnR\ial7|$[&??ް>tS9U_ȵ~/79-OpZ\N:"%:~i80 effʭ8 {Kpuxs~/[%~x%l	GҬ+FA˗{l%tZʵrZB-GӟഫWchǞMM;.du)=[Mj߰Qnn.m4`lݻqI.1ރ͙ѩEzrEUP'8dx7ؾꋤ(u?UvZմrsr̙9+e2LXi%%%[O8飯Fc8Z5R%gm͚>#4d"ݽac9\jA?GP,~lx],S=[M+6&m6UUTƑ		^Yw`t]\i+ưP˗/}{v;v9BrZB-Gӟ˅ybb*0|=y >dU#͇1EFz;?:Zщ+䴄ZЏ61':{<>$ڍwi	M jt//[+W1	9-Aڴj4!i=HSC
-jT{j M)=HSARP{ڃ4U; MivHAAjT퐂ڃ4!i=HSC
-jeM?_z	ggg%KJJnV'xgO0?zt8"ʵ+w.Z/mq̸P?U;PBTՒ=v2irV[}Q2gڸdkU'ڵ]#ˌʵ+BQa!CBÇy2͸P?U;Ӵֺ8 JwOTPVVWiEׯ_s戼.7'˗/i+++qT*!vBB4r_^Uh?)*oii)逰Hf~9vODjr:y`1o}69	 c촢0FՋ2ytMj6=r4NѲUNqkN0@`![i)xim-1=q.bol͛}{a=}h5}"1@/CQ6NSHج,/٤jJRP{i5ǏC`̨QrNkK.ע?zc^wx<liqM0!6&Kjj*Fp` bkKK2h𜙳$kVPο~j`sr?^e8~X\OG5vl^աm;0F^bbj7._IՔPt@C7h2ݻݛ5猜{#"HH0NAYiCB׭
-
-5| R"x{s7vW˰&X<0%%%]\Aa^˂'Y;ﴢ\܏"0p,}H9-*̋mȚ5\t"+j]|&VSB-CN}7oܘ7{6jEE"m|vhcX`^bgL"O<HTUݧ՛=r9wvb(杖ӿϔIk=Ne[۷o¼b<9OD4vZ%T[M	@
-j9Mccb1c0C=rTUJsWm1fwuևb"񍁃ubGbJ#Cf^*hryxNEcryvڵF;dM!~1իm[:42ܻ{76&ۙ?2i8aJ$n$11`qw`ݧ=s4F# y|B],,--56(yLqZ|.DFyz/܏5:q#^ݧ*VWCA/_L71=ߺy}Fljz8}ƍUČ:7m:ȃȈp"!nN-^ MҠ$kgÚ*{sNkHxO>g'Qx3|GmM8}AAYXG%,hJExSr.񃻦`|Qk.~~HAa#&%%942l	ۼmV&MϜ:mє0RP{؎.^>dY-v4%̃ M)=HSAI
-
-~~KKARKTVV=!ꄨW?ybtB]jGzygO6Gxx,ӔVՐjl.2D97Az,9 ǎ--mEÔmnXShֶϭ9OqQ}쇐Ӫj*2n^VVfv E[rZUCN0ߴkАl׮YE[1E O~߶|WjT{j M)=HSARP{ڃ4U; MivHAAjT퐂ڃ4!i=HSC
-jhjUh%,V~z~Џnaai	Mi9-)9 %Ԃ~4%䴄ZЏڃPєV{jA?贻v\h1-_~8""??ߌ4Y*ׅȨ:s1S^^icjA?贃@W'gWgle1m[yV,X||ř^˓V#̛=|M!MY,ԱRIi	MMtڊ
- o16-ie}b7rZB-G:-{ZcRRRл>$͛7,򏝻0%{xn6] %{x!Mm|iW"}lL쩓'Ou<{?$]\To^d@y+++C8dě6lsy3sֵhaQgǸ`@iG_B}9#{YAA;ǳg7fLy<H)BrZB-GS3F`0ҕ޸~٥Ycׁ5ui֤鳧ܭ]gN۫C#Cv1?wpa.[/f3|͊V:9|mR2|Bb#Jf"oxyU}|L {=@Sq
-i_.Z̷mы{dك0jU9-Nc83|cF=QzO \tqh0l>Pl~)c`_vsFևѲ(#s!xׯog8Kaϰ%KPl{+!)tRX+,Z^zǞ9}:y2[sl1??@k4z(ZGNKh	hj
-7GU_|1c66҃0{t&*9-fH}*hP$L檝\3w)6vwlv9ZUL{?rp*,,,))A{?vB<dn	|#g|vlC>.N˟#߀'O!|<ΈDŀ
-fl/^G-g`ld(,9H!BTգV̅V݇{lVI	GFqM/ZXçOEU 1W>UAA2ir]ָ۷nC|'|<{xԌB0ǯop%ᖝWTsZJ_`hSQ`Nˀ?wnq@ e c>L
-gNƍ#ݺ`#۷n<A?ic<];v1CB|z(8-˅1h	Nyyy%6lFTTTXvEG#Y>,;X(
-gCv3ڸd6z;k6;dgoӾySU,{.䴄ЏutZӇҬkġC=
-߳uvQik&1ۊ*=duwZ ~wܹyڃV%L...ж]+OyȠ@V*!<q"6&fڔ7b8
-_uk4׮/pZ#>#V 9-i|e=I'MrՏ͚>},FnZuwZ <ݧcSSSs_`
-Fpv\`^==<f1fkap}9mqQ1cY9m[]Y9-iNk"Ͽ~Z\dyF0LߦPV#33WH`bQrgKGEHH`>=}W$3j{(BrZB-GSK9-aq
-
-
-\ߎUAA5f$%Ԃ~4%e9;;!||019-)9ݷw[MANKhJN=i	Mi9-)9 %Ԃ~4%䴄ZЏڃPєV{jA?J
-H7rZB-ڃ4U; MivHAAjT퐂ڃ4!i=HSC
-jT{j M)=HSARP{ڃ4U; MivHAaEEO>o,ۼkJ	wܹٵĞ!o5۫0gsH6nu|2Yg ͈̮D,x^
-P?U;0]S}زzrZWg'2f],,//7y)@T퐂DM`oۆCBxI<usWXC3cG"r%	ϟȼ۷Oꏔ[9C=ssF)m\?~D/VN25/A.%wGR\TOs<		o۲u?JܩY)aDM1?⍝V3o&oDbӸcڶndguޅ;_BHcנ!j	Y\,?}M\\5
-aЅ-KKɪkcE`\-9_ss]@9h?ڶ۳߈%OͲUwM	hiu+͛p=et"KZp{#b&M-\zHN{sgfYr(9Jc0]	/rZɔjaN;x"a9у5ۻ[I'  wj</RP{˗냖/?{;!CNv.p?oj~f.-M1	oX:{LG,#I1s$ީ0wo&li%SN+Ws}{r?F|9Wq1gaSy)@T퐂ML,ZPRRI9-m[>VԡXmbhJi%,~MjeL;\-iGDp?/N˚
-0eN+wj</RP{Ԩ/_gg-Aᤜ?YǏ#).߾}gƎY&xƎN,W
-N+Y-riN͂ SC
-j5.mbI9m^^^ƍ)phPūdF;o(**4dHL?f,X(^V:ܩY)a㐂ڣFMգKW+#48'OyHH֩3v1Ze$KnM"aD(xd#,;vpƂIk,ֲN+WKmV,x^uєqHAQf~OEEBVV(򖕕Rl}PZN'SC
-jT{j M)=HSARP{ڃ4U;0ִH21a@'OFtFrZ!ެYB-ܺyuwhY>}ߥYEj)ﱬӪf]G4iǤKNR:|X6k0rZ1y~Jڷ$k@N=+Whz(iUǛ7ovBj߁S)C/_և:9-Jјbb5EPlXcbE!b~XMX1UivA@wqRe]Vݝ{3sy=3;#مl=ҵӊo+5Nt:ݙ$c|s1ӊi*)Ai;xA)(xC
-i*)Ai;xVӜYYWGRS]y`NMb	)a[M{uPC~*b-+W_{4|mLFl?C
-m5H23UT}6A!t*OU_MM#S!N^󩯯g55;wmن;Bg]G!kg:xܒ∵m˟+7ׅٳϞ=ë!!Ǐe1Evl4?iua/[d%}9c
-Gx6wHAp˽3l:f|tDr>/]<<&~9865fFYp@CQ+"Bݾ>O?Cؑ&Ճ):lڠnåў<)`8?46v(6wZ1UUU`o>)H3Y͛7aS׳Faߧyydl~0Ԩg,Xivv:eI<dzTӫiͯܾu<quff?~x423щ}ss-##v6)OyG:{ IJڼq9sݜq6X NQʚ@t.M	Blz՘8ǂ%ŘXi[1?(<RP<EE}z5|jz
-:"9EM0b0a`8be(hiGF&+jKb @m1wZ1#v6z)⡉TlV#2SvzZKN[i&$ղ2։QQUUUۏ!***Xү;دAGlVCy;xhⴛ6`deP?liw)%9ٳIJLlӢ	abk]nݺu=+2{aEyysݹ}'|2lcքTeeztbl)⡉>yaٗy4pHN[[S3\**IxN<}
-ǇMcz=CzZZ}βxyLIqA팍UhY<RP<Ҵ	5j|Y gݳwn{Zsm]\TU>b~X9(eĶ[@y;xA)(xC
-i*)Ai;xkZQQQUUdvRQ^/LA9x55k׬rᔈ#|r7O/vݽsGo	9x0MeyJNKJ2|@N+AKN)0BN+AkIilsKiŃiZ<&:ZG5-w;mvЀHmV<Ԛo7FE'br1W7fdh=#-!sMz}Ey&!ډN;7zl;Nh9xA)(xC
-i*)Ai;xA)(xC
-i*)ȣߣ<y**((OVʃ<ʓ"d<ȣ<y**((OVʃ<ʓ"d<ȣ<y**((OVʃ<ʓ"d<ȣ<y**((OVʃ<ʓ"d<ȣ<y**(耬[lZ"&zkzZhX5536߳F{܆ O'L(^:{`tsgcb?<i9zUmwz+1Λ1u=Fsi	^GA9mUUc0>	:wێzVÒ&N;㑃o9-(ӂCsWN &::dfƨ+pN@o6oV?b|mm-:/ZwRF}ևkAJrE_ziR'ŢiS"E=`zӵ\VVZ!%xArZ&:O8VtɫG7OFu57Sk&$t{ܨѮxՃӦ}=6D~^VVy6Em&=u>ds8-lSa[vvpsr<wnkav{9-(0C%GFz6._g%+wL𸴴kPd!TO=ś^uZhA
-GX%L~nh(sftY\TWX	+/ȣÜ|v~?aMMlad_˗YXCCCL))3NKD:fHpWxhz22TiAFzFYYAǏWJ]!%xA洷nzJԋ{#`=x䈏Wӵaky-==`ile]x8:1['xoX;0BNK<
-juvM}hy?^BfՠUaaNy+Vrsr~᰹z;v ,?/OȜm~2~
-EfWi	^GA6nsh]>QQ(hуSYgIq1VqZ<hF7߿;BX3-Ul=nX峭ܜ\Nk%̮ Z9#Gy!S~2~|7O		\;9}o?'\<~JMmk8p)5X\&#ߧ|"va4.^|<gt:;y왕0/ȣVN{t=>ydڔ Ygn/xs}XRz756)mނ
-;	s洍Y| lڌ
-	7nX	{
-/ȣ*+lyyjpݦ7opjP>(|`qtؼ^̼Cka_]'OEEJyGSyTTQPy4'OEEJyGSyTTQPy4'OEEJyGSyTTQPy4'OEEJyGSyTTQPy4'OEE--/Zr䩨Ai;xA)(xC
-i*)Ai;xA)(xC
-i*)Ai;xA)(xy-کEi=/ٺ=|DIoO^23X-(Vu`w¶j/h=)]:	Oi|\3",E/XT__UcZOh/eYJA*WmemDZ&bJr!l@?e١TЊRC-defQA+=~
-ZA`e-\Z*hEe-/>~=ZςhyyZς%ZO%zÇZς          ^io
-endstream
-endobj
-10 0 obj
-   28510
-endobj
-1 0 obj
-<< /Type /Pages
-   /Kids [ 6 0 R ]
-   /Count 1
->>
-endobj
-11 0 obj
-<< /Creator (cairo 1.13.1 (http://cairographics.org))
-   /Producer (cairo 1.13.1 (http://cairographics.org))
->>
-endobj
-12 0 obj
-<< /Type /Catalog
-   /Pages 1 0 R
->>
-endobj
-xref
-0 13
-0000000000 65535 f 
-0000029525 00000 n 
-0000000141 00000 n 
-0000000015 00000 n 
-0000000120 00000 n 
-0000000455 00000 n 
-0000000241 00000 n 
-0000000676 00000 n 
-0000000655 00000 n 
-0000000776 00000 n 
-0000029500 00000 n 
-0000029590 00000 n 
-0000029718 00000 n 
-trailer
-<< /Size 13
-   /Root 12 0 R
-   /Info 11 0 R
->>
-startxref
-29771
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/ffr-distributed-scheme.png ns-3.22/src/lte/doc/source/figures/ffr-distributed-scheme.png
--- ns-3.21/src/lte/doc/source/figures/ffr-distributed-scheme.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/ffr-distributed-scheme.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,142 +0,0 @@
-PNG
-
-   IHDR       <1   zTXtRaw profile type exif  xU	0C#)!nk a|V{ԤkB"!A4@91ݸ1mr_:21ӮCe;MF*VqK<E{Tz,0%K  
-iTXtXML:com.adobe.xmp     <?xpacket begin="﻿" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-  <rdf:Description rdf:about=""
-    xmlns:exif="http://ns.adobe.com/exif/1.0/"
-    xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
-   exif:PixelXDimension="462"
-   exif:PixelYDimension="498"
-   tiff:ImageWidth="462"
-   tiff:ImageHeight="498"
-   tiff:Orientation="1"/>
- </rdf:RDF>
-</x:xmpmeta>
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                           
-<?xpacket end="w"?>;   sBITO    IDATxwTI{YrRPA` (Y9tSSE,0
-
-JD$g7U=ok!`      Z   H    Z   H   j   H   j   H   j  z \K}
-~h1ݻ#Sr([6mr?}#r)oO 4LMIdcc#| QVV4k1T*UXf&
-!5޽jJ^O?vqrnok勋sjǩS_x~A4&kW>|yl233c5R-w߻);+ =Q\t91!9}挧<Q1?>޾r鲖ߘ_!E233?o޺I؁\z5==][[(JO.AELW<aDSӿd⥥gΞ5LW!aXׯ_a3())	}&&f!Ϟh
-:TVV^<aIKFoKFEF93~ѼW9`lȵDwniJIK/ZX 8(`bΞ}칦Ʀ^g(T...Ͽ[N^>SyaOCq/ZЁ_89}>~Ғ/99,	.+-;=Ç{D%%&2茒Y{/Eʻwmmm.3\YǍJKOdcaض-[P_>mYBBxr5l"D!L`ؼq#֥PT#mނae__
-&6ð)$dڬOMi($rO>j뤼{a03i^<`2Bo;232)${F?t<>.B"ڱ/t;zDXW[I@!DwG1>=M!?g~zMl,D~غhׯ^qĄD\1,43lY#k-+QC	ȚY9AT*B(aX			}/_V~QTXXUUсzJQQ!$%%(PDPqQyPmmMqQQIq	BhP]C#= 22!:jtT̄iN3>e#ؘלx6gزµViIIj@Ѝk>}z!*CNNNDyel
-fLwikk7Ч+((0'dde	~J"ׯFnnnBAui.nܷoܒ.''kRkh utŎSYAFFHk>:>qY58ÖmVSssR-B}529s֬[Dؿw_C!TZRV捛MMMqI/%$$0[hP}!,送 ~Б̝5LLv_
-]=^zߺe=نR߮561A^OA,8\kMHp0[صv(?c`:>s*Ӝ$$$<8MRJYՕokkѣEE---3\i4ڡ222Ο;o``gg///pԔ۷򹵑}\~N`@kЍ[~IDW^;~ͲK<~||/pvvq۶yKʻw/#^:qr	hΰeD^!iZzxBpdeeƏ9|uE#X.Z$*2r!S3Sn\~U^^{v
-}H$\fdpҥM;LEQ/]ree__v"w0bHGw=			뒝֖s>'M{6//_~m'?k.3f?>+x*J=rh̺m؀'6]<]DDj?O~M8QEE3l"@譠?Q
-0'O}|RIrssJpJX+2Nnll耧?($r[[d:OW'aVB"1BWK{x
-3q
-l>as($r;1ttf͝K!OcFL01ݹ}3)$r蓧ZNQi9[ZZ8V766xh#װeD^!̙(`·A X'so޸"BD"QMM)O^⥍?0е||?O:O:rS'$ߧOfN:477ӕzH$Ndfu2sġOC7nޜ-?#001}٢%KB%Ry]URV+)	o%77]rk Z#++w%EB222f#Ap\Qk-  T[W[Ünml,?	XdOLI"!Zlp(V Ľsqr./+O!@Lg۰_撝{۷o_߾X8 qڃF2g^kB=8HxƍںZI ^q
-o\QVZ=w<Ec5Qmg ͱ3|#Ї״u-4[k8ge#A8^ORHaCfLkΥy-0li[6m45d5_uwS'8Xeu4.[Ys%$8׺"X%}>kaqڵAi;r.NN~۫kkwPH䚯50655׾>VbWs2L/~Fjj41!8 miiᵣد?066ufNv8ON?qB"""W.]B	Yxb5V|F `S11.Nǃ43#?8Tۿ_k{ButPy-1rdȓǗ.>֭ZC_kS?Z>?߱  4''ge]i]]piR|[\"HQ=ukw*++Oyz`4wׇ֬k73xMM 8}ۅAixjhhWטwbG}!>.ɶ{{yWVV0!JB,;YùW` B[W 4NK Zi)SBffG8xo͵`OV0LDDm)SDDD/6bxƔan%;]鈑#~$Hrлvg/QTX?yd9NkkkvVVCC7-Z3x;
-X Dpi)8!ЖMO??:Y-'?O0  @(jɰE@ޭ7O{$'?xד O{00       R-       R-   Z    R-   Z   w\t)/;51m87ן>93cm][[92f1Ph.T+OBBc0ڼ<<9:868z,0 @oAƾ'vy<j8yyyrAANӧs߾}i=|cIEVQRR#CB232Ն9P(۽<<9:$>ޝ2uXMMMW.]kbZZZs11ӬƏg/C5-^/qm֖;o''%::9PW׿~`kk'+'fֶV^ϞB̜=kֳ\GOpru.Ws йYs"4\[og-<u$D~p>aQ:tN3li9ikhXe0b:Y$J($cmNF#GQH $75Ԇ1y4!KS3|Gd^䬫=oiSooZC!݇]tm&FPH䶶6>9;Dp:4>гFOpr:w8W
-,/vgۧ=_.^wǎjgcfjllo33X0o>^y)~Gr
-|򕶶6>^WK;';ðaf0L[Cs*aXÇE1IAF!JXæLGs9s&R޽ӤPXӰv-uwj)$uT˳]&gٜG[uF
-,ak&~dYR/7o*''O*(˓c^%/\E]!$''72$//!ѱ|
-QQQ}A~`|e5N#ˏ1=7oklhdʼ}pބG180즿?L(+-KLL@	g;u \>^c˹~:uwx^sP:˗/{9rm~~Bh۷le/))fg	,AYLL7J"].~e__Aclj͚//_H$XJii)B4*IHH|ZѣSS1tU򬒲2	Y|#ٷoorĹYùj0SHN}Ξ"EBk֭cﯢ¦$'d!"?!jY'-%%ya˶,y&Ml쳰g{D"3ejl>U	a׮Z=ZZZ}15+,URVp:c:$J&VWWԹYaqnWX^B:tB2))g<٪t/{ӢIVo^!`NYIHH;89vIPǏ2cB		̯Rܳyta*+ȳg|:unRb:uwxVHw~TPokoghdsvjJʥ&Nd(62rI&NN>g>`0T:.&&:s*IUU޹sƬ4-0.H44*CP&NtWYYiv`@@nn.QRU%!&OPUUUiiT7϶4|sOڱ]F;uwxsK ?B2Ξ3gmۋ_?؟9lmie[~oضeBwg}|p#ijն;xz>~!I͡lN{zYz}#=-W\fƼ~ !!r䤤/4]xq.q7sjdU	o,]K@jkk?~DIEEEvVFU4-/7svΫMiӪ
->nswjRII&JKKiTP[S=˹s.,u{uJ޽{_I2QRRb]MD"Y*crum81ed|\<<w0` 	6=ƹ?ճ+*>nнݱkסtDDD]F<@,c^iCǚ%r[gH1dȐ!C8g\WŧO&6\(ļDKH]|ۻFC(ScV.[^R\ro.;L}\YY	%txyx:O?u=+Q0&Bj.]eb~Dn͚)v	Ons%'%	#?z{y1ܲc6*=Elr =1c0;IGtub9jiiYaЖMc(uƌW~Ќ3+**2>}bJ=
-aۇܿwoml}1L v7	oa(J5gvDTG4@ 8!񣋗.i)1_[!
-◮^geE }%*}ld$d)"'3gXE߾}/^dul+dsLV.[sm:UW\ZBh4$0Wn\@ yVL	EDTT,.VSS?B:       T      R-      [+i;d5l#'?>ېjK  ]	L    @  T   @  T      T   	|CڇԔ妦Ԕ6> (*,rqrv2YX\\4us|U{Ǐ.N%%%} R-o==%{ӧ8RJ޽_>ݻw]]~`0wy$2	/~Z^nt<;+cf͞M$KJJnq[o߾+.QF{铧:::66S__*lkoդ[))X|Wi4jmM-J<}Z[G!aי-,XcDx7gϙ|2F}?9)F9{s(ꓬ;::Ό5rN?i5~q> &Y['&$"'Lȼm77D|9ct|}YaaS44489?r0B윷w\M7oy{͛WS[õ	&l\M?Y__߼94:WɒsOěH{i"ߒL/%UWWEGENw3+N<IR89&%&?'sޗ}/!>:#"½!Ξ 0dدDf+B"ji޽a[#޽K!R޽qobFR,,Oyðwɺ:eeQH7]֡hݽsðĄD
-93ޢߏQH+VҨ4^M0a0|Hp:Y-';ðD
-:d۷9''n@ D0ؑ#ƣqSXr/0B"0z7bA!SSS1kiignw^<B"jiSԫ1"9)kCl=>T~8@V$%%-=squ}6~1Q1RlLXJJJJJ
-BHVV6!>!4bW119>5[[Zl&[2uj۝2u*Qȫ	¼LIQWG5'***nqJ
-m&O޷緗/{0uj|\ 51A맦 bc^+(*>!$%%e<vlll̂E?D4		ffo߼  s=k۶y{֖V
-ðȈBKNΌ.D"`!JlL,^xSM;y[Cty,.!	6pa^_deөfyyyq"#F6,..vtroW;DIB^T*BAQA@ 劊
-C(*NrO}s>i(    IDATS TӰ?`߷WLTy_$**zmQQQPpPPss3B捛RRŋ
-o^uEvǎZڂE5ͫ	^p9a|т{TiS7ox7B6l۷XR^V6h`PA~B&))TWs{uu#G38ښZsso2 ń999SӈRRRr{)9|KNvnnjƿ>ege%%&>x<uWuu<xBn@'Nb4&xUyKyYӟӏLgذN50A\\mGg' %zիh!WWqq{|͛_`Bܼ @KKK^^~qnnPJe ?`]H=ð;)$0z,?9\B"SH6O&jC7щB".[4{1ʉ($<6X)KaC($0]>pM70{ک%cYK]'~)۱Fc($ZgϜkkjj0B";rOC=bXHjF|Jdg|WsX+**JKKoͥR]5655]e0EEE?ZHW(JP(sXQQ?Q75bbbjjj?C3+D8p raРA] \-+"#-3p  Z 	L    @      @  T   @  j'B:Y  ?_x<H`   R-   Z    R-   Z   H    Z   H    ZSYQqח{Wż~xyx444R- ,***<<9,|nj]{ꧥڂ|/OHj'?yvð6֖|:ZXSSSVVa 666666VTX`0[(*,SSjf6⢢f?bT7::O?Ə%'e^5clijfw<^xH}VVÇ=h7l49|D+l:Y  5~/_vlf4rT蓧\^hgea<SAA,,G0pJ6hkqϙj/^p mEnn-F?~7&QǙ[wBh-6!>}P'yyx ޾U'p5)T=6'ggeege!>ׯQ#KUUU+.lg"'O?>55';Yk֭=^YYŋϞEC9C8'%&?vlݡϟ~-7Xglwȵ/*(qcTdd{{;BQHH>}gBRٳrg
-֬\5wWѻ>7oYKJHD%!Bo߼2d*0f)T=z<~x-H/a:c|^}/><3#	!TQ^ZUY~ootڵNӝ8>}2pihjع;4ܽsF^rPm۷ws6GgؘX?z4|lںEsn蓧RRR6m:g\-m㬬JJJJKKuRSR߾ykiekYg~M!@ 9?yeƌ;w~_*,(loobg&bb}/%&$VPPRꇗΜYYYy5/Ui`:KPx闕JHVPj6)));xI3<,LQQ͛|Q鯂+)+WUUb""fQ+.*23FBB"m\RB	wիV}67# !_<ɓJJJFb>}VPH|HYY9["_E<89)y+~I_`æMyݸaՄ@q>?:**;No'Nhxyں}Wɖ;Mw9#)%7\Os&WyFKkBRsPEEHgۼ<YRRrߍf#y042L;XU5a!dkgpҥW+.+)."D>>wɿ93SIYyrrU#<~\VVv/g\;Mw.--yFuuOO%hPVVxnQa&%%)UUՔinpqu奙 '<}댙g<=Ș=gBhո!))ibj.9L\\\ ~`e1gէi($rtTa'8N!1;|(LÇuQHdu3|KS3
-sfctj̟3B"SHd"#1c0.7oP׮PH丷oy0t)$X#~lA4?磥K2:*B"hkh$
-lo3B"ji_˟7_PHdӧ1Kwo3Uq6GS@zOiTZ^n^cc#JӨ4ƼܼUUUߤ/,,(hg!ammmt:So̚jFqq1[tzQa!JA8zDQ"YH8E!$+++++V]g\~!			%U3CŁr>.4x2 s  `pW =&&cML`   R-       R- DaA}Sޥ8~-@7JH@7%##ƍ>jjj`X[7oZnݼtTt/=<-/+9{EhAZO	X|JOg+z˗ad:> Z0`@'ad1̹Z}}۶F	[v:S		+W°)h@'Mr8=dw5`8$Y@ 99:Z!E  T      T      R-      @u oNV0oܰ~FH нσAIxyx	  Z   H   j   H   j      j"۵VL8aIIViinٻ{GĪ=T 0?gnDxа.;{e{{mĤkWoXdɿ6Xz?%%;b  ?:c4f2Bqgx=5///_kNN^}!~qii"'')vTK_<{2"f2s,
-©-5%_r5j.ZB{{]'enoo_h!kE^/PYQ1{~>	TՌ/錥˗!JKKݽ9t-BsgaS2***:zB544ɦYk?z4TLLl49svrRH݇	 dgWVVZذikk?q?=~쏵WSM-?]TVT?8ejSSS{{gdDSׯ]cKꢣ9LrryyߍN>pv*99GB/½<<O<_
-zS^^6/Ϩ(ЕK/X/֭ۼa'NU=eee			/		f3mS'3>}ھeow'BnjsrBdn[dIHKII!:::n^:s7?	nmiy*\Q^~a3s		t?Y\\| 6-m큃EVUݳkIU5Q_?B%%$"BoדTUEy&I)Boljdhmm}~×QRҁwnjjJyGo
-z2w޼w!/G}]=BHZZa77oQ_jkkc	
-Xr(B~ƍUb B1^/^TNNNǼ~][S&Oz$$cgބYY	Mv1z!k+V9			\63t:Bn@ˈͻ~ۓ]~}܉0W ݝ>} 8/=@(2QBB?}a@CHB< D?[n߲XAQDIIinb|BnnnuunIHH`6n^"ǼJ"1OU011ƫ֬z%KDъU+-, /ǈ#;8m˖	&Nst|vцOӧXh'"TfI^^4$ BD(BhͺzzUT!;}6(hI|\^JNU!ϤAG{}m'-@زm%K޼},">01& bff?>}BytPܳyta*+kAԴpo)/+g+~0$kk_jJO/qqqn
-ðsÇKHX'"""*1Flo[S,M$$$;v$B(G_8:m\>둣FJdmmmcRU%!&O|ΡÇ S'\gΔV%"#_GE.@R୿t9O?107429{VVNV[[;5%E	'svj~޽ǎE jk%YFFT1k)I.*++d<RRR{fhD"hL׻NV.[=_ǧ;j-[B"F8g{{;~JY
-9s])$piS"^qqF#G/:ð5xu^O0,CM
-B"JO^pΥԦ($r\CmS*U47/r[548B"Ө2
-|#̶fLw1c3N9aCpGz;y4H T8R-N]]]B|»dfeMMMhR)VQQEߥkkjGkkk]]Okkk?~.>ާUUUf}L556D-4-/7sg%& @ի!YaBHIIIII;ΰa/)))))<ݻw޽|T10,Wц}\!^Fs/?D:R-  ]8`'""֦7\oTH  1nYǼzM445KlZ  ofȐ!CFºZ   H   j   H   =X Թm>/ijt>/L    @  T   @  T      T      T    xKDuu5/K}IƧOW.]%'ߺlbcbSUUF;T=aӣ"#EDݳ.))*9#ŋħO._]mMBKs˲ŋsrr4zrqqYyY9H@Ϥy=Nӝ>;{he%e?OWTjII	aj㔯e+0,(/gmmm[GOq|͵VMmMGGǟ'OWjkkԀN:::Bl_X%%%4:u9;@gaa۶o%))suu;#[M3M`ݽh(c#{w2;rp䨱Fnsj	-Mͬ'L(*,0l׎#Gu:S3c8eq,M233ɣVB' ,,|rMruE%%&iklXxјƍv?qrûf5BhyUU:BS?W HГe%ff׮{>G;=AAAW.(,,޾ysuossȦjُB4IO?z2:6^` .VYQ1z(|9a>:w?;yT؋~?|B'Y[WVVLꯏ=Zx!N#Oyzjo=W&jYVF<8(XEEE_߀NgXXZ>㔉{-[>sʿx9d#Grtrī9j3g
-
-K-֞|>gd=]v*d<vlAA>9aAȑ54.Z8sv'u54hkomfn^ZZJf_jp%Api)_-!IaObF WBeeev66L֖p>Bh%%l%**cVA;**!Ί--RS6:Դ﷽_rrSӇ(JDIH3XmM"[뜰bTVZ<FUWW1Ç4f]H>}B4J )~>&pW+zi3KnܨR4'?/'?/[ӧ%眜99WPTdBuԄ80˗
-BjiikiG!!I)csV**qqQh}wW#G- VF637_juXhhNvיUkV[X''ļ8t8S H$DNy{)?|{6777Sv999QQEwn#:m  ҠAvutt&&$ ذwlprvJy.i藜׮Oq{jUUxyvVsG0 ֮Zꭠpc	Bhڵ,`0_\`|:n4fLAABH[[{+-RJb4+ѣպzz.--u7[\bGl70ؾsǦTQ~ۻO/f3r4aÖ-^61`e1gѩO+**RSS[[[Y
-
-h4pM?޽s3f
-F++-clFmMe[AkkkyYwT4N744Y!NYZ@hPRRRRRb+>򲲲̩SVV.""r}HP#%%%|.25NZ$%%%F99 DKK̹W/_f0-۷9:; j뱶fY ?@   T   ߧj˦M^EZ\eK	 ukּq!uΌڳ9z?,'    IDAT 📜6wd'ORm7yyy%/]jmmG@w 33sݚ5S!!d+E6:`z 6lhjnToǊLRj
-s"@xY|0BјJ.ӧL66G'%&1Ky .榨!ܩVDDƭ[~7n^50hfn^9pUT_tibB^p `&   @  T   @  T      T  0 //7߸R- t/r`z^pW @甕OIP0ck斬uu7vyF<}tՇ\0o]ff&*_|qqrN{M	Rԩׯ^A qOynb^	|p}e--1/]NLHy KSYYy&?x/1r/]i`___1]MLMo⥥gΞ5LW-jjjYY+WbU3qqAASM{+CvvpW ][[Wq'Xi-'/)mZЁ_89gffVVVf3իW._a6)1Agg:rkKKJ,^0$8j Vr|ALDDZF!-?#001}d;[dDxˈLL[[[M߸vmz:Ü;8OIBG~ꤻHT !--i\jkk(*,`xJQQ!$%%(PCCF;U!T\T|!T[[S\TTZR2XUR-  B(?/}ŎSYfĉ3SتWVVTDB}H[N"b^fj5ztSs3L    -6̯woܼq).)QVV!2%[%$$0[hPM;{םrQQ[-A"ΞׯB8Px/M^v͛e<y8;ӧ/_ভ-!.!--##㏣GZZZ]ghCddd?w.:*J``УL[8Q+#-EKKK^^));o>]- 길E>*:!$##nu6 -]9\7]ojjڳkW;D"qU6'm;vr?($DIIiՇ/+WtחF]tiӆmBuKW/0'ah+|.^ I:>U'u=4z~~^CC?tzaaTUWW+*(Eo% ._YYJZYXW[[WWJR홏ڦ&			111Ê
-ŕ*>xyxv3  tQHQWRN$D@|
-
-9w	l=   T @g44662CIeeejJ
-Nn3jkSSRۻk?n7 Z  x16ys{'ʸq.Ne]ص;ȸA  `a*T۫6'0@7s,a߱Z--׮^MOOa]T@Ro^BPL^zv:111A.**q/ǫ$[;̚=ULm'?k.3f]f9I޾-*,TPTvPy;@τYk-:>wsg556:lz'N6?~hޜ9缽iTM\<--KN+/"xCZSSxy򱊕CIIm&?ߵcg`]^]f9Exz...5]Qadгu|J!;y9DyaXKKvȤe~?t̜FOÅx
-zB"KN0z
-E!"#1QiNSb\6)D8u
-?^=O>j뤼{a03iĄD
-k\m\	1ekCu($5nIK-etuO0kD7.O=O/  cVDm+w>}?Z+%%EBBB !$!!a8˗/Ԕј1!(xشi1c`[mƷn70൏8++@]C#=BUuedd-TSS#`v|ju,jokcdXQ^!''r*...))Z^%p+zիW2ܭY!Ĵ7O"aT =;f <7ynn-? ZC!ļ;QVV6` Pii)JKK%usbU:z6:;vqc1 p1;Uk4I)Ƀg}
-{[}/#^ܾG}!>.ɶ\j`^V}|
-9,77WaZ 1;RPTZW7[($(J40z+&EjjCr'`22S"͎qǋ׫kxYM2Bsر(<pFmi ?N(Zx9kEEEꊊZ8ztf0E5_k8;RVZTVVҨNeƎovX  =;f}~WjqKHHޱMLȈ~7}5m !&T(RD@ҥ
-ZX׵?ZXT"(V`EPIHǸy< }~~3q95^כ&\-[Jx+}a	 @wRRR
->qb7͘.x%V J%lhh=zN`kVCg遏`Ni)<p  @  H      Z  T   R-  @       @o _G`]fEy : "U- =RSy/Idg=0(::}rL   ÝٶDAAa݆gpMLMGtWO
-
-
-xx[Y[A BvV0kgs3{
-rnLjjlSjuo谡9txԩ܍~4Ð[	lmmyx#*ݽӘf#8(xĉ/^*))98:\z6,LNNiͮe"/\ttrv*F1sQi+Bn  @2!=-!kNߕ+ie|yo޸JNJreeyr0-A9tuRRP`fd^^tt}]F?.G^BUVVʃON7nݼCZ>tU >1a-LNJgτdPHWٱz40PXC!'{4ћ^%QH~~t
-hgc?aBo)$c5{	zңs ]҂Nx!TZRz,8!T[[SZRB++#++rvq#ǌmC$B555#ttu33 jABHGG']гOyw#қWVVvZ	II^d>}xےρ,**&;j !`;{No0#o"VRRBegD0`@xc^kE/|,+//7:QHmH oٚǆ	HKST*U@L71U- ;JNJNNJFIIK=n1jBHS~[
-=#I6}	~1H@O0a>9!k	t:]BBBLLL@̏Iq8   |ՅI"u,l̏Z  T MԔFSYY|u)){ y_Wϝ۷xx0>Q&HYQ^э^A  ;q8zRZJzCB_J3DQ"/bKIIP(VO㟮]%&&֕KJϞGGgTQU?aB2`zW naزŋwlÇxx䠯]%ӽ8l3##>kzoߺ5g֬@6Ŧ.Z^|Ґ'9ls/F\='n4B2`z#N	ܿ/a>tF?NWJMI#y+lZQ׮SH7_cd2ƍM'O($X|0WW<tE߹K![< UAʛ7q\kQ0e0+X !$%%u&GdKwo䷶VJJ1BHBBlyAAB(5%!d>r$B(J5*=-gktYY7,,,Ο;'&&eGWUU-+ tJYYX;]%n&rbZxRQQ7Z[Y./Хo_p426(**nB_  @M			zt,5˫mU]TWW}:Z^^hKh"RD:EǂίW?|,@/4uT6c۶cAAqO*Yrswܾekܘ7x;{~m۲%''Ǒ. ߻xx<HO޻{wiI	[~Z @8|xƍ.ĥ˖;8dUWUZ
-!W޺y(J46:9!$))z6l.DQv~^R蒖qmk'sgFYY[y͟wL؅SSN{˯W?|Zgl*h߹\n4t*~{m())rr]]]II	iݣGvi.[R\\(il+m7p ]D--v_J:KHHg	SM}894@j;@g{0  %OصsǍ(yyi3^@+!,LX^?R5!г#<-n  H      Z  T  j  @  H      Z >|vϮ݋,8ou5urrrN8Egge>u+:qt[<g	TUUW@ 詞Ɗ]hgWguw9N&BN|U}s![SmX㓟as ZYWWn@SSSM<&{޽sq**eXeeeu5555jk?~(xǶ\nYY~hp1L#'uWMmMkkUTBL&Ç5s؜Em'9lNYYnzwT۽6D6 .]>tYv\.wGX]t	0lϮf#LF{͞ce1UWWۏ`kem7~|Iq1a01b+^b9}1clsrr:mέcml;7!4ƶ 4$d0#ˑ3NE%'%]r(K.ǌq;VW\ٮvv1֣BK R-zu
-mj=zʕ=|з_\OGFEE<r!2{׮j>s;oONJsփq	+/a>L8	L>i!t(B({9>܉f'UVV;8<7n9Bc'@DuZ.H@ћded:߈fddpmlmEtI|"23;?~x娱ƍ01qpwy{#c3gt!E򊋋SQQ9u4asDO^XJD5}wn/B`ȐwG0qrq՝}-9n" N֣Gh4>`@NVLӃ]]ՂD&ܽaqq7G!˝yF}]zU:eeiejjQ[SB4讀7EEECӷ ?_cF^X~D4UۮrZ&1p ͮt޾"~#xi@ tɮ/K j24Z]]+	?{o~VV>{?HJIwϾ_dI߾)*ڙN7|*l#:خ!\GA7SSbkX[%(..ƷKKJDEE}Ϟ]_@ R-Vf֣G\<&::?//'qV,{ճ*?|رmk: "H%E"""]&H|J^)''OJ#/^@}EQ׮hQNDG'z҂ ЎKֿGʛ71w΄:OrSu/B|K &![~!EEC,-BW7jhhD\\yxuuK̛;昏YTT_o,KYEELTjVQUݻ{wuuС7IѼefq|Sf["Fmj5[ONgW^?hNK-@sÇ涅t:fwݦo^xT]]}fNޕlv9`rښ.˯?Z
-_cNr8v-BCYYYYY]Lg'1^VVVVVsjD_n*/9s:t˶m]iH$_(IIII;6ڵ$%%%UUbǎ$rrrU?	 <x𑠣!!\.vzwO8& R- ޮͭ] |;   ~	7' ~$.[XXT:oΜ=v{<vqgZ!Lii̙,N' ?]uuEKKK/v}J?KKK߿2, =㇏y^%$Hrb-p1EY^:d-8WB "fŋ"/F
-Wk>sƮ={ZH-[$q8.[WׯޠAaZ)i>ޏڲi )#-#VIHvx ]yB۷O<1p m1pF	7><#=lo@   H      Z  T   R-  @ _<Zվk@g_79 8 &  ໃT  j  R-   H   8ǃ      IDAT^NruҪ}aFz [|RzjEE2FcϮ]#GY7p4	R-  ݿw/-5UJJ
-&>rR&wˑCr9=g͌22ߘj-RmKK˅5 ?DQ"B\vu=vr߽߿7x]~g=R- =Q8eԽvNNR7odhikyNBPB'TQU|$W׌􌊊n$2);w<YMM&N|1ҪGRR󽽵χ-Vٵ*_˛{x|4(5% =o.o݊-&&6v8DG>zd2==^6:lO\2{>/b328N>ujVv$+'b*	cwu)DN!,6ޤG؍|ko`4uCcfb<|Yk.Nut)6V/oߺ5XGw0S2a6#gBB)$(3s}]=O7wÇsqt2>}$
-pu`93gLϝ6>MObkeO!͆iA!oDE	aM!M&鐵GPHd&Y__O!'?n.bVB"oݼaX9B"[՛׃w I
-l4Aebd7!jjoߺ}w.EFΜ6B"<~0&iealP[S1m͙gL
-r<m,05b8mQf枮n\.ݎx2aإH
-0Ѯð-m[mzB"G]ܲ/
-\N+(/b0~B"?||Dsf<\]-U+VIl,DTcCC93gU;k6۔7o(nI0 @z,\8!,iEysyyyggc5!Nh:dR			Sq66rusE2!TTTpB"#GZצ5.'/wTHkkKO lǎg$$$tuu
-Gr͟K؎G7F999mva!ynjj21j赮\F$"ŵB֮۰v]Rr"[gKK[!D੶ݎ7BHV}fxhŲ+BCB/X@$͗,[:-	1115++Bjj13h!%%%^!DT#$ Л:ӏbbJáCۖ2cG
-
-}B&^I	!6S v:?Oxp/枷׼+ׯEBVVۤHׄ!0~a2stl_-1bhgIMI9r0ﲷS&'qqRRRҫ [+k			g]{?x !PjJ
-VR\<q츫|GD%J쬬O׌DQPӿ0izoV$#=[\ d͂OMI9u	e=ȡCC<z+}Wӧ[z58?cڌl6r%"hf>rvrjj9N:w엎niӡ^2Қ$ғEN;bb
-eĉ!'O(92JBWD ֭fdq{ٽ ͑Zr|Ʈ;r[B}<wk_1:p[RUSz+/\7~b 
-Xl[B:yyU756/ү 8=Y[PWWWVZ޷o߮L++#p8V݄FeeeC}6kFaX"6ձ*&I-(PWWWPT3jjfWAA/x8  x@鸞P뤤ݧՍD"Y[~MHJJ-bS<}(B|8e9^sa  ƍ;m36*""d2R-  t'mF?uE$vLZ  ?['W  Z  T  j  @ @ '!kAM|׬T@-
-z@   H      Z  T  j  @  H      Z :hbt,lllm|Fڮp'$$~=j\ R-._4sْm
-
-xx6 mꪺRx͞s8>8. NW\Aege~BN$JBmڲYK뗉JqOL>p!
-Xn׭?p0~~\nlbj'+^>sCCP}}}DxxLU&XZY!	lmmyx#*¢WmYYY䅋N׮\hV3f"	6_#WN>V	'&xQXXpՊ
-Gg'[۰399ٶSM#{KK}|oDEq\~_vgMqMÖ-^c۶>|83''̟;b9ylsbF#nYYi޻ʪNEʃON7nݼ/oFeeekl	
-\=ȡCO6#tU7q9Bӡu@`i]rNY,_aXɓyBVzZ:D~oyBD[o>1Cm27Hy0.km17^h[2WIy^5{	m;ϫA@{1J
-<ݣԶ:N!l6a&.0кq\{pUɓؚY9ףZY,ЍQ=eddOtpckieuse_&7UUU_TmNv6rرǏEpV]e####..n=چH$"444jjjB]Zw\-zW.]F=P^};$%%;7!$''USW'1B$Bh)L&؈(V[WW'''ӧϧ_-Q1cɯDAo]Zw\-n?~}<s֬g/^Nt999qW~҂Ϟ-=Ξ_oٶM-Z]]lwqAy͙>s*CBB"N=L[ڔ7o?zD;fwlۖ},((#cc	qq&wҒQ__RTj5vW++
-7'++;vܸ\Ғ.Z4hؾtswS?K-wp^`sg͞蔝5^|\܅G}{
-]/a0|sZჴ,HIK-RUS0b_Q:.!!!&&jLq)|,z?ev%D"QKK_	@PRRj{jLq   H     @;0Wzf{G9kpU@p8 `(K* y?zdwϟ{1ZӧϞ	}	UWte۷+W]y]aH Ll6p@ $Yagqo32
-!X%%%{ȕ$W82 CIII?xuN8y"DEݺi8t(!RPPlfy%²5Y6olɲRRRp@Bٴy3 ܄ W'ׯz?9^^R3=y^'NxvL0|[^*\X\] B  H      Z  T  Ni\.ca41rsQttJZYaܣڕ W tysL{?3S<<BO۟u)-̖o\p8\S߻w|BH;if-m-Pȩ.mcn-H7>bq-B?ppĉ/^]U__6SEUe	VVeee.::9^rFYZYΘ9znIqٰ4`}s(Uă]ZQ^dckz&''vʴifԲZYGLLUZRvusi<!'g'^*lf0΄fffӘBmݽ nd^8lfr؜s|=_I)(0Li		TUUn$IK[ʥK7܋)>=dAKKꕫ飠CfL
-
-iapJfffwzښ`̛0W773{̼|ˑ?~8NcvA989mӁ;89O	cwNt-d/k>PHM&òR޼0Z[wuҫ$
-kl0t"DXaX۷.mt:DvcOðt
-3?׌odPHWٱz4͎vB"y0&i7n<DƻiLrRRAmZ+rvqYeGWUUVV3v,o <\]mlmMmd^h v&SPiI`PmmMiI	,%%EBB!$!!a6Ҽ:77(0 @w⢢i0L#c#bmDT7{S'N޿w/A;q]0BHʻJгOy&&UNNNDmB**4{W0p nv9:$++z豀+++`<{ƌWXOjj"VRRBegD0`ޠˑBv~gE學8HO޻{wiI	h4>WV~rʗ(#-MPToٚǆ	$$oٚ.7n􍨨u#٠۶.?U- {'sgFYY[y͟wLZj
-DDDs47_ԢGɓlN!D9z@ ((*^{M(xvu`AWu!"bewqxT|i5)ͦRrJ6- 9/7[llllmmmr޿hm0^hjPaSG$mO
- ))m%ħGmMc0r1kK`     Z   ՂNDDD^^ں|ǩܹ}QEEp4N1m|ONzjAKǃ/]lnn!JKJ֯];}+W݉}{R- ?SKK!
-'Oڝ܂|]==H  r9{ $W80 =}W9w6:upP88BJ:;X,^&Dѡ>=b_E5kb,[*%%Dhkk]*|ЄoԿk!2u4+kaτGU- ߝ,Y-'*)+AT  j  R-   H        .p_mOCւ>gR-_K         T  j  R-   H   ZN:UH߭(KKS3Sнm1{v9eҤnKSӶ.*
-? R-a>xK)))D  0.dpsw{)r!"(*=Rm7ںE@wuSDHw 	/|W߈<zu7"'/wa644jϧ<ebb۷TKRo߼9e
-))ߧPyQi<Ŋfd>` QQK?vLBBG@sDG>zd2==ږs8?~FB>sB9qx---fΞi n}s.27IOTT=73#=!t><|)"#+?|8>8xf3p'ODDDRSS[7y}海voV.[>{{\\|}kZZڭ7kjjtWNK-~{71st
-re7ޞԄaɴpw0c͘6̭(/b0~B"<~_<M!nނaX9(0ƞ]($rzZ^b0Il,DL&eȢ)$0eX[\@S=i`|?ڕL>CJZ!,iEysyyyggcgBC[[[/]\h@~5m;~{Xroߺ5h á>ⷻb=@7>.Λ?v]=\\DLjmm-'%B1̎]	 jA-++r87mڵskmX.	B$RLLwjPɓƗ{)!!r!"Fh-"+++mji4BHIIWB"T+!!cݻRS1wZ T:Msrѣ**D(BhŪCkYVPZJ_ZF=&{^xp>JuswGuq~!y%---ƛׯW.[njfׯŨCb jҧOPC}B`BHZZf~{))$2	!TR\<q츥˖ٌ4>Bi#4Iw	'W@s"k>r$B(UCC<fgeo=| ð?6idd# |/n}C=B,QY9Y}}ԔS'N0kڹ媩8(&&6utMfk	AM6/74_N^NSSOW$ňD!h4D~އ?;'p~B}}}/($;z|o#~
-ۧ0*2	/412~w J)$(3s6+{;S='1Vsg@`X+.84o\
-|pk(
-) @E0LXxI¿:dlR5uu<ZD"+\kEl6c4%##p*++Dn0yyys0~a9S@ =Breeeޗt  IDAT͵ k;}K]]7@$TMRRRRRa t#  @  H      Z  T   R-  V萵   |G׊|j0   j  R-   H        T  j  @  H  c߼~s}wSFF?{v}T.i[2f3gR;moX_[.dWG'HmK&Ajnm_;:;a^jj#G-153Z{)+'7fXjZ65ggﬓ3᛫526O/!!gQعN7;%ee3ss|T.@ 8cǍSh{a;.i{Ӆ-@pvKZtZ&fpIۛ.lᒶ\ؚq9t(\w d}MHII)5L8\g}j18
-  ]W   R-  @        Z   "    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.dia ns-3.22/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.dia
--- ns-3.21/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,35 @@
+     ][or~?yUzIV.Qv$A Iٞ*%Gw_"[%ulC255S_Y~\>WwW/?/'?O>\}|~}nn>O?g7W;8)/zxvsf?zvss}ϯߞW_.߿.s._~v?^ԿOw^gk:y{9vKu?]}>OGn~zpdu>C~?#?ZC:Jˇt{sQވI!QE#d:m]%wݖ7oo|{uu9,T=ٟwgIƶ:r+:_on*T~Sv,91*߶3ޮ_z?=MZ:YP^mbM×Ϗ3#[v}cʏLn_p25_6_9ޓyw37gϮ߿Ww$9&~vI=>x>]}+=|^<$cT޾O:rvbSIDD<ҁ?	ԡGSz_dfaɀ]>?$9ĭG
+':bz:#Oz'=zR;D|߻M֛?&͇bӐI}_^nCN#?C3#o;Y1;IR<B D}".fBO&MB;Q@0X"ŐO*֣dc udX3t ϙIw|LU|^siHZ ZY!HT)R=	D(v 1хlpILsdG첒qL	ݼ?{n. $F͊`VQ؁szKۢftJOIQ^f(ۡI/qav9jeҧS H)aIW7$Yi3.&J:@bfO~qH.ifd{rG h(	q6Jdq煗fBI- 8IEA: BIw8p%J^]U/nbM'#?r2Danv@}P Pr`%˦
+%4d]$SdP|co#5{g>\s^	_6`2V"g??fg_|ժI3_/A<~ۜm)~,IZn^z:ͻ8I&!w_'.87ˏuscv2Xa#݇G&*g([.*t\}2fbÑ(Ub
+SĸUE*
+RMVюiɴ7BmcN})iq4&zzR<ѹ);r&KԲ4ZFݾMC./l.?sc:g Og~ڤϚ|ړXzSߜ]__?o.63xڑ	Z-7#7Wֳ#_}$Yjn#E<!%ݖ[J1y-)Y[NV;.2z.Os竿3*ɉdtRT(yT<	r\o]]_>TLCh,:!8 mɴ菅~޽YăBEnR]@*ͯ$Ucz󧄢q-hm	@-y(dJ>YӘ<DڴL}[v25|Z>Fw=z >	-4@.blj0jU<A!l2Dȅ^)a,R4 .0j:%sv#Vp.|(L+6WlNRNKjZrt";R\L?EY+6bsva*QһO:һ"K
++<WxNk0ưp}K2%D)׷^evoerGxF8:t@DM<a#5I
+u&h&htQd4Zuþ>.3,kW<\
+VS	>.\ȞTxUfuM<LmY+<s~XIBI%+FBH|86aH:uh+6+-ZM_
+z$3<{ |oy,
+`m{=&7a&B2!_f
+ ]&\5ewne~` Z/:Eͪ0j5@
+O;J:&[
++<WxN'WɟI-t,r$RgpL`#K	9)=mi]w\Ljd	RcK`g\xKm/vƓ})3ܗA\YEk4	hndBqidA4,\=ӟOpYBڑGmL\9F;ySi}U5g&Wx
+P\\ʬ\'$r5\9#ajD(BxJjse35X\Gϧ8`RBɻ?ӥ?f3	jX=<Dw hPU	j b'Y:= 9
+p:k /KG|,;A³jd9#k̀+LOR]bSfj%{͆lݣ2{^^J@2,[4=/<<:	Ԁpᣐ47WHTp+vG9T*;S\S9vp+J=y޲{BGt:OLqi]<AߑVdV[sP/Z:Ti*2K
+kHHͭ%9	>ɥLo_a)c;$	&I8%ht_7eszjW#"^zW]ЅHISC 8Sf<%WV;}L}ssly;ľ0"Ooq4&vjf>nN}њ杜`3ǗT-[\7>5piE8"<F/m:x|Ǵ[J&?mV4.v:F4:gL:Ҿ;B9=zuvU;v7Jl!gu{^$7תI㪝Q;ng]%}oCU:9)cwZi\SNc-F5&3PX6r*uoʻw~6yX]W6V=|_~ُkA]slK{y5
+y^)[va|iyߒp #4[KScMQ|BƎ}<?b&QXM(QWl1Csh}m 5[KwgČ1̒3r9fXcDؓm95l^ƌ9{U!9	јp1=d12+bC!Ȑ]-ȄVF:E'den'tRfNďE@`A?Idh2O3nd #uf~P(#iQ>2@4fM 6'`P~2(TdS{%Q62oL8L<CLv
+f3άibf<f&Q"-l&7;cS8ӱ3G๸ 340Z`}74d35f q6ҳ4f'XIY ߿\fv &b[-	#iIR9{w7{
+qz
+W7g&8P7w6㫋'U&3^ni|ٺݍ)$~=Xal^%$U簤ȴWMy^ZױjXK{'OkBmfQ^תV$;1ݐ.6{<v=[S03zx'6<t$0}6ܑΡ?öc~}vQ?ԏ2(8OA}؟ ڷlG&IHIoOhؒy<s<C0>> _(y☨Yx[aoIY (qIADA<xpw9S^-A*l+탢	7B"⩇m4<'my&}+ANég!Q5[Fq;EJW"ڒA)sT#%hla2!Ӡ@;F*] o@qy%ϲ)6#g)0hq{-7GKFڌ$ɨw-$9ŦR<__;#;l%c< !1R0StDGt8Tr5x8lw^{}C\%R+~AC
+<8wlYLZA'u/>sȶP=e!PI٧+fqQj3`WmIVphXDHҶUsߗP`%$UW INv|vtU.1X '
+6DbSO .6OshN +7K<<xȇqCYr"ҊT+U[Ӿܧ9! .KBj, 2aV~stȋBZAYgqA8E*4	v4F/!դUj۔r#hb[&$,4'56`IY.j1g4&GQY\wM\,J\xePb]I_龈0jn4a]/^!lêk<a"r%J'P`TpQoާ7!dLp;D\iFU  @\TrH3>$o.5a4Bw'=QP	u Hl-;G	~5V1CW25yM`H^c6y.aPaxREq<)ÝRcY|!ʚiOc֪TQS1==_1D}$,ZypEFk~:h>$L!.>	
+RYi~|WSlkmJR-}#O2")"kRbJLkfjfAٕWU35QM mRv4rR5Q𼠍ոt}ؤ(jg#$@dV~Dx^7*C䠝Z}eI\40b.:ݖqNb:#<_O8,s˄"Eh,$W XeT~t݄y+c(k
+)Qj\
+t'Vp VHإ8D?/kg1uu)1<iؖÆA.\~;W)k5**mnše/UFRf5Nax)a`;ȡ2NF2P}+N+A˘cvϔ*6\qEAܑF75{O~_eJSn IǹmLIjcH6y0ds񝅎Kd} bi0q,RIa[ӕFc*W&ZҤ^ɝF!ǊlĮйN5b+Qy,:kM.:	?s9Jr44ֱ6dzAɱMVr< 0RAmN1Yʜ=3e$Bzk<w6ڼv)>VxDy VEp,N4g;1HwujǪlٝo.LYC8σ&8˓38ϐ.˾,`Z S*E dٶdjqa̡,C25A}#@B%3M#P蕢2*U8σQ	 0`,"~#:H;G[< IPr $P6ypB"S!ΈH)Ee,|1OO~jAm>s(9.|7<t:#G>L8=%US(9?-Z	rdTf͠lk<`MvqTKjZhR#7$`hKY<r塤֪ʲ)4	|Ķ A;X@[åشJZ{dܹX
+&*8.ȴH&xW#
+6r-QrmGq"#,42@;Tz(eBj|B0>9HbOTI.0;\WB2}>ñ4-B9-oȫUڮR=Ԓm%
+ZY[&oaH,*H%v
+`9X/t}jAuZ@cFoID$s^w|7;ZƯTF)Ϟ'a]yg~V(bʹCռ\$dO1v!2nyjw%ئi$ KӌoayXcV?]Va=)
+FzU2X^AR=?oAVK;"7	 N%ܴVK7[kZ &grY:=y*-K+2Ma6V6/@C{sW$!k]եsM!d!n<m0::5xB岶\2ys~GJģ;\o`M̵x|VgY6I	PLrJ}?j1GZtYj>^0<R*"$-cH]> an@"Kc)f+AskߡZ`BXb苎̹b4yZo8-`*MΗȯ~ÀGuӔt'=܇*wC"]HMS#Ͼ$ў-,ffi
+ͺՓbl穽Lm\I]D!G&($yQ5"h	D0Ŋ0KTdLjTN\i*IrJE(<|ع )IV'RRhLb~y'=oE䤕cG؛!8σS\V)B$@,$fڳ@-dEKP5Y嬗#;h%c<BrX9I9?wYd5[2ފ@iV*.V<# SԧQiX"B%w9_y6qc^ř5VvyG<Q#(#湴Xʸ|v9@-܅<ֵh,2D]H2̕!D_7Gx<"l,aVI~(FBn]{	UZAd0ՌLFaǛCU*r&I;igqĤYDBR0!V~Gȧ&v9*jYh}tMjPB
+LGdIk4y((nEdKrPRNUE%DYQfILݵ-, 尣z*b65}DM!`] 橻͊Xc<<uaV孋s1fw6"_f;pzH]qցeuC&FaGczcBཋMrG9"sxbj=9(9sU,f	 _o;WZޗE5H.<^C_:6E3ʜ%MoUSȝGc?gw gxoñoUT>^AxD UIOg1M|޶D 3Ϸ0<H%pwx.yՎXRCO)@rfC?
+,</ԾИg=ÎX5P9/{_2ʀm,	Ҋ9(9(vŲĖqrr:/ޖـD?J3[6-5F	׺umhtCI?}.{U8^1R=G?s1V!iDBP 45ec<-쐪l -`+-Ab6
+*,YvKu;<jp`-7<[HPĨFguL;0bj}F8e\1B"gzr'0@4:qvlyiQ*m@kg`U\
+]l4IbY?/-%~ 	u1~KJ<0ؼy#K>Z<β|VΐsMZ"|Yc13gJQ~ݑ4z81BCQ>?Gje^Kit 1&6i# ż6;;-K4"`1_3NZŪ$ edl='R|ٙ,t0nz2˷g_7׿||>˟鞏@! 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.pdf ns-3.22/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.pdf
--- ns-3.21/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,339 +0,0 @@
-%PDF-1.5
-%
-3 0 obj
-<< /Length 4 0 R
-   /Filter /FlateDecode
->>
-stream
-x+
-T(2P0230Q055PR
-DYZU%r'(+W*s! @
-endstream
-endobj
-4 0 obj
-   74
-endobj
-2 0 obj
-<<
-   /ExtGState <<
-      /a0 << /CA 1 /ca 1 >>
-   >>
-   /XObject << /x5 5 0 R >>
->>
-endobj
-6 0 obj
-<< /Type /Page
-   /Parent 1 0 R
-   /MediaBox [ 0 0 550.801102 248.040496 ]
-   /Contents 3 0 R
-   /Group <<
-      /Type /Group
-      /S /Transparency
-      /I true
-      /CS /DeviceRGB
-   >>
-   /Resources 2 0 R
->>
-endobj
-5 0 obj
-<< /Length 8 0 R
-   /Filter /FlateDecode
-   /Type /XObject
-   /Subtype /Form
-   /BBox [ 0 0 551 249 ]
-   /Resources 7 0 R
->>
-stream
-x-1
-0{~d~ XDo20S$#]b.hrK ͵+Ʀ΢E*CBk.ɕ
-endstream
-endobj
-8 0 obj
-   88
-endobj
-7 0 obj
-<<
-   /ExtGState <<
-      /a0 << /CA 1 /ca 1 >>
-   >>
-   /XObject << /x9 9 0 R >>
->>
-endobj
-9 0 obj
-<< /Length 10 0 R
-   /Filter /FlateDecode
-   /Type /XObject
-   /Subtype /Image
-   /Width 1530
-   /Height 689
-   /ColorSpace /DeviceRGB
-   /Interpolate true
-   /BitsPerComponent 8
->>
-stream
-x	xeq\eE.VerI"PD", +DT E)M-4-F]# bWq4JA:4iIy>̼o	x}                                                                                                                                                                                                                                                                                                                                    ]r믿ܲeKaa     @ݻgϞ7|sv      ]|_믻K.(      o֭՚7o޿hXn      ٳgp7o۶mVbbbn      ꦤ$--n޼y@@O>ٺu}fggWVV@      ԖbotM7ׯe˖&LӧO-̙s9     ϟ;wn6mzx;300p111Z
-۱cGEE     m޼k׮
-bʕ[l;5ke4غuYfR      \[^^ȑ#[n=zha9##C۳x¸m#++     3<@XXضmʲĴ'::sˋ^      8s񄄄O>@x)ɵx+Wl۶-""b֭%n/      (***--X,U=QQQW\\p!//ܹsjr      u`TUO.o      if       =Ҹ=r7      "M     %ws      P/=      ^I5ҝ\=      @L{Fk;      rVR      oV4iZø=      ^E=|
-R8R>     UÛԂFq{VVط;      Zb      _"ŝ\      >q{2VV     .3LzWD8=T*]~qhM4dM-k    {KxdaҷOfZdo鮴GRmp!&    L&iviBp2'}{l		lQTZPM81ĨЅ?fT     Pe/BX0}aRt;sr)N3NW     x,xbkjʢoo1đ]N{zt=|H{     N{
->:q{|mF8Iԫh4*J+ Iesɥ&,      ĥi؃yߞf͚$|p2pCFQJPH!!!֛qN.     $╸t-oH4n466&e'3I%N'q4<P=     tVtGXFAۤǅ]{$nַ     	֓kڈ⵹p61x?gCI     !շxyQ]'WJRVF!4$6.Je-P]=     xhJex5aAx(tWzzilj35BsaܞbC	i     e44Z->R0'%LS)8"    dRj]}'**崧.=;GW*[     	6#5qmGP82nMStͳ     O0L%\u}Ĵ'000::څG]:Mj&"    L&VU*u}ӷZ-@FQ?K촣Vz8ӖpnaJ'80^    "\>5[Q*՘~	}hzcti     rbiA T*íu#>baK̈́ɦɚZvqmG     |ԫǦcBw\      pÆ\bȣVF};5k(h>      v-QHHFX:bߞ 7%FO}      "u	
-
-}#qmq%AQN      .ۓFiӝ\NL&@     2q-kGJ{4JsB=      '>
-dff      x3ѨVcFpˌ@wUE     n&I*ڤ=(     6FQфn0"\zw
-     zj3bHӬY3=      pusr     eRSG"	p(      pVuy$bߞ&q     3IĮ>AAAJipfi     h?DT:#5h5_]Ր     l
-
-pZRaeMK4      xZ-f&ƦdR*z     *
-Bzj@GR9|V     Kyzľ==      <Fk(      ٹoOfH{      8nOMfqr.p'     h44F) .,;ܝ     {GP(«I+kSŝ\      l6Ӭ;dr*      x+ѨhT*&^=      =      D+00q{      dd6j}[5ͺط     @FFz-V롤;      "M.ͷ.>uC      /h?GRhb\      h4M4			q^Ph      /1Q6ቔз     @bc}崇q{      B     KĴC,     {ӞҬ&     hxASw^!(      >@J{     N.     OJ{     iO@@ }{      | }{      |	i     /af      _"=     =      $##CL{     dff3J3     o`N.      _\      $++     gp'     /!     %Ҹ==      >@ø=      >     p'     /af      _"=          Oߞ_)JZm2^     '}{fPQxxZ~U3P5     @CGV4@      Of`I{o
-
-
-j     REUڣP(BBBj     $=~ҷGX0*&     ~XSTP/     @QJӯ     _      $19      |8C     |ԷO{jZZ     QǧfF?      9^O     |\¨>     HioR		      n iFQ(C      4Fbߞ KP*j     ;?c2Vdl	     [Hsrg     cľ=          xø=~B     N.ҞܯA5;    B=Ueq\Te*zR    dǣ'J    .N.R*    @KI{<J}^    N.*m,O     HwrPic*    wrI{H{Q?    \ N.*mDO     s'i6zR    CC^    )8>JES)    EC^    )oi6zR    J]S)    ΀ "RT
-    pAFFзJKS)    EC^    )N.*m,O     Pi*    @'00JKS)    ==TڈJ    .N.*mtO     p'i6zR    CC^    1	8>JES)    R*m,O     p'i6zR    CC^    Pi*    @JQS)    RÝ\=TXJ    .f`oi6zR,Keeܭ     ø==TJ8~xzzz^^^YY    /L*mDON%$$<#Gܼys~~bQ    q{H{H{?:QZZ'nݺk׮soKJJn    /++QI{q?:aX
-
-
-m6zhBѦMA={V   ̲JWS5\gϞ7tӃ>8{or7    dgvmURc'Do5&æLԤ?V
-d
-f3mgmӷMU'PXyV@\)6²t@Rg7mj[XJ1tazY~ez5cWa.WXW|h^ʬf g@V]JmW=>'"=et^lutT-Sz׺:$Ǘ[+pִ_9i|o_͛?K.ӦM3LW\X    ~xuzTk۶S+qPxV\{~նzi;6~u4fOl`fGXĆtdEl겯zt4SW6O⷟}lL'~96.|XNhN!oOro*}5OfY{65ڜ6Mr;N>6+mNB;þFooooFR_WTT,    4]v]wu7tS+r^\&.OI-7~JGYcSz񡸗`k:JllspĦ
-Ĵ~wifF7V'u˯?1_zFhSj3GZo7Sֵ/ ڦ-~{Z7̦|_U4ClQwhow=A=[p_Kl*up_xQe   ޽;z"~%=Y6l,^Z7(J#H륧Ç[Wd--VMZ#4b}d]eiqAz6T-/I5nx4oZ~
-{/ӗ6oyIg0w b^'%}Oc~-֯T9m9Oi7ܾ7'/MZie4;ͬ6Ҏ֟(||v	Tر͛KKKW    Z~~L&ӏ?xٓ'O#G?EÇei5f+;vLP5bC8}˭[_@:qħliߞkn`XmjQPncXoi-/pHm9BM/5m_$t/+?[ScwiCMls'oM73u-vr%۷oWݻw;Zl٧O~{ΝEe     P+%%%8p`VZhѷoߘx%[     :p¶m"""ڶmۺu배9sdggџ     qX,yyysO=f͚cǎsUVV4      ܹs[n]|yVVV~~>3     4j                                            sʕ:22r˖-r7      b2Fռyݻw      -[o%K\tIF     E|Mnݮw͛7߿hX,r      uvٳg7oj
-UV111EEEr7      uSRR7o<  'lݺu߾}+++n       jb|馛?Yf*O>-Z3gιsn#      j+??ܹmڴٳgTTԝwӪU;vTTTL      \[YY͛vP(V\e1Yhh8p`֭g͚/wK     pmyyy#Glݺѣ;ＳYf/.,,k۶m=*^      8m۶,##C۳xDDDs=˗//&w{     >䓂aVVDGG_rd۶m[n-&w{ὴZmxxZv     xZEEEQQQiibZuaͅΝ;g&w{N&IѨTp+^ф4i"z5VZlv%     @"=QQQbSU=EۙfZݤf.>i^
-
-oB0.4     H{l		㔠 Jj4Mxxxç=R)vn!=|     p4Ju#)JҍAJ}(ll2W
-۩jH     `0X#QT8r}a4Ŧ
-qS    h|īc:roq
-EzgFJip|     y\%h4JC(+
-i9$$z3=iL    8ђp=ZCۤ۸lFql6SCPR0nO{
-E][    aH3٨i`N.$=.׋QfKw=_     /gs.N}M5Ü\ͅG<lnڲ>4z1_    !+wZ^5%!I.=bR%J'殴l6Kst(     uŸ=ͅq{Oi?MViG     `q{|srۇ; J GnI{Je    zľ=;GW*i0\     d3V41l0nϫ\WTђhZ     L&ivi8q5N._e=JeSt>i0	     6{a(bӷɠ(tEVzq-V+BfYX8m}5^z]N{cJɤPс&     Xip	٬T*keINnpK#]     Wv ^Gܦp$J2܊Zl6[ZoRZ]W^6Rpf8W    @"ޛ#=O{z=}{      )ޱI{z9nsr     xifZ-+=²4SM7deeѷ     {Xϯ-լWִ;      x^FS#4k֌     F閄ᡰ^     UF;D     U{JVu!!N!>YZm2n     h 6#5Gif"||KjZT7     `24\u}I{j`y[     djJNwry!Ʈ      dd6cFpc)퉊"iB		I     @vz^R]3a/$=`?G     	WOPPuB"=Ѥ=^BL{T*     8P\bȣVD/$=JR_    +ַkBBB4M-#FiB      !u	
-
-}#o"    |u{Ҹ==H{     s[6#3צx'Wf{8O{1I     @bP(j?ط'  ;JM3Z7	     h4jG8ܒQd0H{     7&I*k=(X.i     ~h4j49]Q     |^o6#233I{     |u=###88800;     |)H4ӷr7     xVHq{  ;ݻ+;_J7s!_~u۷/11 8'N%v	
-
-T*UM3Kľ=͚5#  gϞ9sw݌$|$Bb}(>VJEZ#mc8#k]W6GU8lMl',}"56K]ܹsg#0`ɓ'>  ^h4e=?  U;6p^zdJʱj>_}]t5j?,fEV @ce6l'<<\VT*GXYbߞ Fi K  R^^}ёƦ^=4X>MС_VV& 
-jZh46}xL&R`oiȗo   p3fӟbt˒mICEDD?~\S  ?BѤ:iq$JYj b|$i  ^|߾}C޽n{(Mec_إKbP y'#&5Ŝ\  X.{o}TuZnI<9ײvOUJ桻{ذaT ISm==C  D'O|s΢;Iۑ݈oZxm~f1g*{k]IW>a!!!IIIr  з  ***CΝ;vsCAb%-TSg3e}I3-Zn/Ώ_tCf߰neϹC+SsiS?l?YYY)Y hP=5c6ɹj@ǣH{  [VСz
-I̶$m3/_|k	B+jZdSBllx|٘ꢢտv8o͂tqYz56ލuM6M6c_薏;u_:v옔tyOg @h4h4Z?e0y؅e}{H{<  #YQFz-_&ylU;&gϺK,eIUeZKYʱñg._bҁOVc+$m|kG;Ąi3,TTIN=s&[ꖏ8%w1tЯ HPW
-
-VԱN.  GYY`2d.fZcI<q~'W5@˗ZXط7|^'k튓V_7w׽{lzImZ,MQN^7|s9g#<d /YwU H{  gΜjժՌ7SGM%%ber? 2Ν:5\YZ㗚oOӲO[Z~)eQ(>gOҘq³Ӧ%nk0\N<xor'f[3*>77|  ^h4j4_)Jdr8nwryi  ѣC֭%zrߜx/5||鶹T|>6cc'ZuptG}n\jRyGSbQiѺ	!bg&{tC'=Ur			L 	37   |RYYNԩ3<k\ȳ1nweB)U4}[e[O4hS}/mևS̱݊Ǐ[3G|g>_ӭk;ٳʹ_t/1)BtI<C2$''B p'W  ǜ;wnΜ9?pԚ4δ˹""~8UԢ3\7bx_i6GX)աC5sĸ>7v̳篞veK&~sWw=_֒գGXNt ۔[E=P\\ŋN  l6jju94   |CeeݻߡC䌃lO<W?^"Y+K˝T{$I;b=w\[WӞ>킃ǏP^w`?*nkSΟY?󙫝|`}g+ h=DP/e" tRJJJNz-#:)&L~sk(һ7L-+US'V}nXK)m<sƨS;ޖҸSku0݅/oX]xf]wP*K7|_3O.j߾e 5iuiu)k4   )rС	&Ŀ﹛z;NKҪd%Ǿ.,4%UYQlدrE.x<H>vF}u~eI'~ıwr1%?:t \ܹS8o  h4O.QTu:8'W`` xi  NIIpܯ_^z}SgSϱ:5K?Ql)K=pR.>Q5$.eôW'^޵GdzKu)odˊc^U,?Zݻw5i;ӠRJn4ud?Ϝ9#w P7F~		q^Phb" X,˲eڴis"<BIέ\ߛM#yejS2&#ϬpnDՠOVrkf5Erqڋk,q+Mnɼ͙5\{a9{Z9j[F;tԩwޟ}Y#RMV @CSZm`0pi/=9=  x?ïZcu9yrK.Z2~;gt/׍O]˜EM3>];k.]]9G'Y,?x?29-|RsӱcG¡@ VĴ6.	iw" 	wINqs3m%e[t_sΒ1?Vvi9+UO]QrA+2?f,euزysGM[ _/N>ٖۿڵkϞ=w- pmH{sH{  NK,С^hgoxcasڗ~ɂʒxiͅs:W1ˊVmZeIb)KܾmE=4ﻥp͘i߾ŋ ^NL{a:TŜ\  bXkn{{v5OSY,{rʲßOj΀vy~ϝ^4L\57tcǎ<xpУ,ǲwcرr  y(o  %JJJsСyy96~_tG˿]{.bkzv9q!zU,ӷ[ݜN>rK-رcdd'" 0rx4i =  ԩSo?M[⹐g}%Vg:t,Ӻ2A]>9Չ/{_Գ^z)guK2cI8ڻw?N> H{ i  2_rjz0\\>f옯%V\N*[4{GS0ݱ5UeooKՏ?ĭɹn05|!!!?N dee1n  .^?3]=י'%"%iS?xO' ^XV.Чv]wh^^0o4; _1l/~vCBBzm6. 'IDGGO  `,gΜy}E.MtF5]U,mZ\}Ӗ,Jqܬg([㑃Kf|ٝR#kM>}zcr*ՑKy |OFFx'4{i  |׮]aaaݻw_Dwm[cΓsQ`ɻwOd,̝=#+&Mbo?|pb>suC6jӧO׮] FJ{sH{  /?C#^5{.IɭH5WMT[8:ifNߦ/[2no1`fKYbV{lᄬY[27jBPǏ pN.! *++Fѹsu;9NwqG`{ƿ2x;cwE.zg~mސa>\uF<x&Ï?- |p'  ^.\غukXXX޽3h=%9uE>,I2ˡK[nN˅gWOTi}ybRY=z[:ύZ#L4r "=  b>}z塡IS=zVReuj7fqHpe-սז}ً6mw>?$4Ԋ;ux9V7y+ّWᩧzg>c oO  rssǌ#CdpXUi6l;._L*[+SZqa/^j\?tiO{5{r7tWƬZz7***  Pg=  > ,,_~iSyRr+6~vd}Z)v,QKQ,qKcz-3e[;}>K5[]X({	s=_ዖO?t޽?/ n  'N̞=;00p喬N͊K\0ıM_7RVՉ;_θ~?:뮻.e[7ϯ,1}޽{[WN>7.-tᲤ͛7~ @iw}{< ګܹs!Cu9
-y>?j,kuY'zc,ί#?_]r}[C|8;")R~I[pj'䌃\|>?տ=z$''/ VH{ i  QPP߽{A}qJ뱛r,;LU2~űéũ_7Rx&nxD;/_:RwNdܙ_2WY[R'xB`I>7i_ق%	>J:p W 222Ĵ;<  ~iӦo~yiiK[ýyd0oԉ},Ԋtӿf֏ޚ֋|n[%{\,'<<<%P:]W>}RSSϝ;'?  g233٣H{  plǎ<L׮]?6z3Pqrqw> rW>SZ0<≲KmH#s;ө=-b)]sGlxxwV{[zWѣGGӯ[Y#=~~֤UojյZo\ks~:yamطqB+vZWw	Ѹ{naA_5bN@ rVۺu;))i:$X~7bKdfr{ь)[J%!=OTpvW^7ER._=>AJ̶,ZUVv.ӟdlmjj﮻r~Y7zk@|i9oٴiS<j =  (++۾}ث'555)⡴gCN[l<RV.9_|o2yOc1U\~^~8m۶Bϱ,K*\>\wu//)yk7ZGH>!^'?./deexi  9"߹sgJ>={Rwz=qBfr7J&1p@ץ1S&޽]qaRQ$F}M7u!U#Gl2j"r^o)_oXT*UV:uJ`X*++Ep'W  ^aam{ݻ'%%T܊iHjUbUZ/}TMP=fz7R9j}x/6GVN,3}6mqrK%J̶dԩᆆ86ѕ_1bB>yܿ G H{  p(??֬Y:t?~.sSqmy"$$dEdRd^=rDQ5/3pm7;w|JBބ֭[7o|ujVbL-_j-"MR| {h@ie>믿.<}GVTTMҸ==C C.]ڲe?ުU9J{6^y뭷y䑜=uݍC=H|k7|w،jJvUryciM6Mu^!C'?y7u?Q=%嫄?'O>t:n'a! &Ǐ_paΝ_yCi=U޽#rಧ»|r;wƎOK׼92  W_)~RgtzzmSnY=5Iیڵ|֥Vc%~)F=  ,ŋz}xxx޽[-'NJJn/#$cǜ!Cxts*g>#\\f옧zx>Mw-[z뭱|CNe-Z4mtرn<LCHNQKu]߿ܿ \  'N<9iҤVZk	{=ֽp:th4/}lѿ!c_-ŕnhq9g=w?Rv)-ڤ9IB9틟M-0`p{I&%%1;w߿zz: (  '
-7ovmƍIkc3w}UeZٯ}`ŋƬ^9RߕމR+kǖ5o/vFT.?[׽{wO>դrK}>I	 Kx|K}rGr'  DEEő#GfΜٶmaÆr.z(|v$$$DTdHoRΨgN(^Zqz_\xv'.>Y,eY[h!=ýK˽E6m:n8ν?裃z饗F֝\;{1B\oh¿{/U͑T*˘1cj냻>p'xbԨQ	<uL}oBѣNpܿƇq{ i  ]|ׯ_߾}?6n\&Lh׮ݗ9ڪ_7RY'{Xp72GNooҢMw={ίWC8³>۴i6m,]_<-m۶ܐΩi1iPNZex78vԼSkj_jڷz+cKux໔3^ڈJ3jm6^g]XXXHHe=
-G^yKNNtܿƄ=Ӟ_)JZm2<Z W:th
-£sJk׮/{Y.|*ѯrbl|Q\p;v(7i:%>_ڿzўzKSl>aڴi7tS~߇:&v,j׸ʒ8*.Ǖ\~JkcˋcG}w"\Խ=nW?\2y>4h<?{wbax4 N{fppZ-f4=W# '	f?~˖-ݺu		IFI-7n\sc_~Z1qS'lG`5{>~X#{}XJ׿Emڴ`W}Si_r-*j1!4ݝзoߦMNrIG=-=GW	/׷gOWo<2>hުw/*ڛnvz̅ҐYr\|NUJY;Oe>)yk?:th׮]Gq.++|>QC ? Î92gΜ.];Vs1~SH;ޓyH^(-$E_-%Ӕ^YoaQL³k^#(m]w]XXn|V}~%{,I!~e[n޼yVjKY%woԟJLaڤ)	k_/8J5ꜧ:9nzʒꈾOt'=[|vDİe6z=?Çx/f`o TU >ܹs;wҥK||z޳)W^y^WU URr_)7Es+[2%իW#{+u¤I6mz'#'\Os~4Eß_oagudreiωY'}uuߟ>l_Tgt뢇ds$~F<eʔFҝ\Ѥ=WiB		\  vɩSo~񺜋	cI~ץK#F\'Kez
-Z;&6bQA)
-RA,
-"AbRDrz;łlZ&˗Ep?y6ygwg)oIPOɩqٳ'x{{oR0l^&O6ZzU]7vO COFOmme]
-Fwo=޿f{{~O;G9ܽA}?eEEq\]i՜jS!cK^'o޼Y]] =|    WosURRb0X{{2/`PgVE15W>u03.xPlXE}LB>|x";~ӼHtz1TYL"Zv̋[i]Y[QSYk5=۸8;;z̋ATs5[`ۨ9:i7((KZ*++ : Ë3v   nj߽{wrrr˗/gdc:瞦mM9lz6a!![C:=>_RR5͛<{n)SsZag<xJ縊bj7 K>Ɩ\-e5fvԶC}	ٸœhsPZݛ!d#v;~Sj({{ww?uweeeP'
- pԩSJ3t{oEW`u   Ԥ&==l,;GTTtȑ\]䶦o߾ׯp޳ڨv3,ޢv6r2~p7+1x=^l!\<b^'-TvN>vϢlpr('G;LG5e##ӧO] n={{`   ill]vQYy{HWM|rXԩTU066F,FfI:Gb;vl81v̑lCcǎƕfdVw/l`}:{S'YZ|7gBT|~-)nMC51Jn-svZ5	jksZYYZ[['!QVO>}xl oɅ)   EEEjV&%0mll2/ǳq
-@YYYY߀Ȏ"^.L6lj$_$Srd-,,[fG1cd_ޅBm]Vݻiò'+\޺rŜk{8U/<qgyYQL(/bZIII~Sc{ޕ+;;;=H6mԩS>~w ;ۃ)   ˭[<<<&Mr旄c7UTT,--kaxg5R##|{5v؄7:'#ֶ_~[J rnnro$;ƌ{	:S_u7v{{Y?nu,+;VBb~:{j㜢ϢM=rذaԿCe"Fb5L8m``0yd|X;~Bo:?gP(    tWRRRPQCCtrrNS-i}xO	{[i<És'Ou]2?Dn
-#n_Uta*GmEzS8M*.d̝;WHHАq#:1E9rMAAAXX5"#yXAA;8f̘Kw!Q5jTŭ`*	
-zN^gXz&&&Fkf_qoz"uN`~SM(<~Hv(b>&bgϞ=nܸ|k9 =nA8sIIIhh(:>b   [r]wwwEEŕ+Wbd~!FV.]-4Tfs528ZjX/$K-WYd<slC'6+>G(N566o4:vl%ő9cyn2ɒ#
-˷l6D%r%҈#%({o%4F&42	+WM
-		M>jn^ElWżzFN:yuk%qcƌ	eٖ=XCȺ`hs-f!C~S;fccc8{|NgϞ] pgr;mRSS   7
-tԩSg͚uxO	i]٦ڸ5F)ܿRkއVD6TǢ_bѥv=8iOY2=sX̸NGdÇG׎?P0jӧtEUv%mС[)عz1
-
-
-VPwC'م$%%u t<XY*q}CS-𯨬[-2Xj9WzvrͫMMf~US8ԏ3sa1!\ϐ,--'Lm۶<; fraЀU}   Fcc_eggzqs6-e+++U0 E65zZUp-ʾeyZ}sCLؿ{&v:2jrPɫW		7c{l5T&QL\9+O/Wi(Bݩ2Onb/һW)3f@ljjH2Ǐb8qbd~#p/"!!y9;HғS9+6݋%m|[qk<b>
-J
-)V2iMU)˲ xBTE1#2wѢEhW1\o*"{iQF988455]UXXXhhhe   QTIHHrxOeԒA׵(L$FK^={jR޽{ j8w**PT={
-̟,o7ͫBRmc9'3gȾ~5odo-5HXXh95eQ?FE'QBBBDDr$8fffVE611AoY__S/2bRSǬ n߶}cj7w;;H6j8>ʮoѽ=O˹v޺[J=N?|EĀŋoܸχCYn ]=sz{BCCedd/    Ν;&MrqqadWQ:KQkJbVVV.=0lX?besրZ5p?l*:ٻw8os6NNS:Xz!! Sj,<p?CLUW׳gϞrrr#:2hYh"sOBۛ'#q&L`]ka]AZ^=ew?f?؅PSFhDW͒9W*5e]{D:f7v~S	ANK_`{f"y;9兲ϟ?___w 3o߾0;~BoOjj*_u{   ϟI$z\\\mCWQQE
-z #=U+lnOB}7FI<rȑi8mvr1ƒs@%ődեH㗡3cF׿Mv륓嚓<ǈ^HBwjieȩHeUwҸqPl1Hv׭['**:rLr"BcZ±>Cc"򹞫M
-^Grhv{"ZG{v[fE75nnn{Scdddϟq&w # ~Bo)<>   @Ν;NNN***zmΕ"H=U]uxYGb jM;BWK9](/7Rc":g81C8s	=VHHhЬ/_砐(͔a6(mfwݍ{T̈#z%8}WCCYdIXmcDJ166FoSW-G5ĘHWz޲}qٗ>$? %5o_Q7ů}sUߏx=l?Hœn?񛚘I-X=o~+2X]]:v	ݓ=z{    '"3e
-NZFvŲe˔w=Q߷oχzpr-!!X7m[lsVrA)!++3g_:_^=i{mS,f1ƲO$z-}TUpQRRyґе˅ȑ#7l@!++RǷfo$O$}:"`<*Ǐ|TKhb~;gRsIXK|doo|rXǳݢFRSS1cFrrree%ޕ! ;8c{`O.Lo    t& ''gcc*da2ud*Dt=ECYC#~tZ*E{}0@o-QSud[wJ2Mtq?ZW>#{R+FveGr)-!4mʔ)v޽z;v썫	_x?nQdgXVlC#jQ*ɇnpzz͒%KQET?}b]\ =    AH$ԩSg͚ER1CUrrr/F qq1M--u0+>"gm	 xޟ3W+1~? n}&
-<G_9U$Itrft-sNUWQ3pA_	L4t$lg&""baa|[ɗs244,%_FzXC=XCxc\UiǷUn].}5*(}'Ơ
-hʔ)QQQ?ځ# p<   tpp?~#=,ҡL+V|ݜ}Z>4<t1g	eU%9pL9e:9L8=͸n˵8_-7o4X9RCyPU2uߖٗlǹ\,h>}DHKѸ?+I&QO?ȒS/);w.z#FX~=VQ$#+}{oa*7Lz˗GF,7cݧ\` ҫg,,͗D&Fb'SRRھ}WU3p<C  \ӦM<y2:6ȩFXV]"޽ʘgy;63f͔>q_dF)D~>ٕRC]Mj$I*ʒ+(˹ yn*>zCu,`e`!Ʋÿ	sľd;%j~>(eʽɓ&MBr[FvUG$j}dR:gۓ{>} sa\cpj\GH2#wr?Po_v577	ʞ;y<o<99;v<zq:''O#`o-
-Oe  P͵QQQnxOB+~ZVVήqqy]7C51_M۱5QsO>˗/^ƬOJ8M1cMMM?w=]}cs-}AmuJn9sI8Ǥ?mmmUUU׮]{=t6ݓ'鴂G`͌  b޿H":u[ҥKN<jK+ammML>#{oQ2=C>|ӦM#EwKHHjq?n
-qλ;dzNݵ$uJ>1PN600vCҫV̬ǻo>Kq1
-oO73
-  Guu5jK#ҁtڛ"sܸqK.,vr;w[9ɄpJg8)...={Mwe]
-^H/}I|6Y=m]NŌ_###LW5RV^-%%t%&w	 ߓN+x{f=(  @s	)Sf͚JsssuuK8}4(2)0Ppv_ۻwoqqq;;;j&VCzNkt[[[~]+9Kgk		F\8m{vu*/ްaC}>kd___MM%K8q:o#fF  SYYy%{{1cƘ3:2S%e7;`mm]`P*+bRQQvIǕ%zbCtmMB?$ń1wޱVPc!&uFWAـBr"rŧO㞼.-feJZj+ϐ0lڴIZZYHMMƻ~R3ۃE4x{Q  )((קP(,111QVV~5ZDyy={;1+;WCǌ]]]]RZ,->)*yEDD`Nڊo,)XufP?{jV_K>Z")ꪯ_˦̝;glaMI	4adСC,
-		ov#fF  Zƍ***nnn͚i}ESɓQݜԆjh!-!!NI-rFVJ^z6e+X>!&dPnee	+Su*FoYΠ{]zy1[b<KI{tjkkkbjA<Vn۔pbABB§O`.@`pL.-G0͌  cbbNSSSyy?/^{(Σ7/S8eijj;xg&ʑk(6ii݁0BA|`H$l$Az8o՞UI	k<bw	v3{VF$W=rҥKcS0EQ
-Dz%| pI% it3   Q]]`YYYOOOFf	%ol֞c+W! IW(ݲV9[{b:u*15uȤI?~iANwr}6-wq2<faz`0l/ŪKr=|3Rc{c=1ޞnf  ^zz3f̠P(=U͓%!%% %AgxypB6?==naZYi1_bH[kl1>s>w}?qg:t(ȵM9k}UjcgߧO&_$S`:1p0fҤIBVWtǍ9zxs瘍͒_>9CyԨ_ra%sg֮uFuJy7}>ƨB}Ǐ]'88=Yo`L  h?sٲeȸ\HǏ5jWF}{МւvWg[{9ybwܢﺵKRۉonѶk#ѣGӇ𰱦'NDQ3&0$v?+Wm۷:5$vfݼ{РcJݽˮ*n/ŭ_~'[uAXL6n5D9I4660`ݻk8?ؓK0#fF  ڦ &&uL@i$u`S樲MU}kkT~ܚQޟy{ykVs-K~5SROfwvfS͸y%%}Q1E@ꃿaN{}qXiFtpNC*pOϠoS,lB'phkk|wɁnc{0oO73
-  6L&WZ>qGV ҕ/)-X@LLL\\ȴ|L=&2dee9`VgIrBy[|X[K{YΟGEk:ϟ?ח	1^EEիxW@w fr	"x{c=(  wyIXXi8{Jb^ޒb޺ M6wРA#Y0{+<.(`jwG7DWb0KK+KH04tl,a$%z{{Ss0<&&_${zz9ٺrJUUu,е9s̯*ɅE4x{Q  aX555.\D:9>w1U3f̈?G{?L2$X2*sI޽Ym\f!C1^WhM=z!TuЁ0{{dsK{LJ"*++ɓxW@WԩSo"x{c=(  waXϞ=344LJJ4ޯ+cch7(-Þ/J^^gϞNv%0{+%fzk~̷(]xNKq3Agj_
-=#!Hd&1~uV##G]]%it3   ܹs...Rj*((pFlgdoo~IHH.wMLSSSLJ\[U>Fû!WM2` BG]%IPC;ejj@:KjeG--3g*Jp=0Sit3   5`^|/{Bbd;A-mTΝ;NWpijj|K1*ʎ%fzI	k#v;99i*ٗ.m֤n
-bpO*y9DaKSFFFGG'::۷MMMx׽@ =oO73
-  NL&j,YDCCÃYBĿwyP:h wwwfG%G z*{5o^<ݡ屷Н~Xo\&t_>oO'Rc-v^[[kSSӸ0">{l--B mY_~"x{c=(  @;Amׯ_+**jjjnڴi%z|[zy`'~'%c3h }-o0㶿~7$oa	hմv}&~YTIccc)))T{jhh#Q7СCeS`VWֱ4iO~m_B<X0_;jy,;0~TX	%/Zh{#1[.9^m	x{@WԩS"x{c=(  @)++;zرc߫>}}E+b:x폺YN$ߍ m\Ս?<~7ׯǴr;ǐܥXbxѴ=Qץ=}pv̋C|qO-EWӭzmooOEIǪP$%%#+a33c=1ޞnf  =Xz{{KHH1bٲek֬|r_^w	WknW~Eɚ<'q~M-^Η~[q~妹#m~yq{yxomxלpϞ=	'#dqȢl7Ux3sXeT!
-}w;$$hgw[-45wdGFGn?f"֔(**+400?~<xm&wmt:`&`,G0͌  ۽{jW=DB ?ۯvG8WgqgLmGn_D#;c.\8h ^rer&NH|b8)LJJgϞW*>]R?Dٯ4kUS^@Kbyѣyt/0rbXS:sYfOa9;PPݧP\\wtF`l`,G0͌  'ObccԢw@8D}ĢEקO%K$!aMs)Pˊv#Y0zPMSmӼ=k=kˋ,*g|d	񩱖$--miiIjUvvyLt钣թSۃ``g=1ޞnf  E^|I QC5`JOB&߻)VRң}Ջ=(?&ˣ*Ȩ9|~vݿ<gT2љ{$ВעީT
-qdѣw;TUx`BCCZH{~'EBB֭[,pSit3   |JΟ?_CCϯ:ӝ'**$LJUTTDBu=dE߿
-}|WYQ3J![r[|ݽ*.> ?A<"?˧M6XsvIϥjjjΜ9311իWxW@'fr	"x{c=(   }ꢶ͛Q_Hnnn1c15[O	DTRPōzRG»j.^3W99)LMLZ:lΘ1#ԜpNjaÆDq)= j9.)k֬QUU]xÇal"0G0#fF  'YT*]x}FǠAP}:eʔZ$>Vk %#͙3RQQy{G]5楮>qBU+l\1q,z}gPH5q4m>d*e888ahII6]Q#it3  ֞8qB^^EFu]5C	l]&"[7'~j!s嬇wˊ"?F֔ܿj0VsldZDׇ7n.5'+~{A!kmmmXcGߦO>]WWpv`o#fF 9aX555b
----GG'N|ILĽuPǎܹSAAAXXX^^>,&1 ԫTKII]܋wԪjI;;YZL+9SVlEKqQS;{jӼIKK޼{AWCBB&L`eeEn\ədwwwss+mL.L-G0͌ b._}{<{?"RSƏ/$$4rm۷P0\ɩW^>6~1E_imaEqZSvW3JKKb{/0~Ps3c***tcD?hk׮vZuu5U7yc{0oO736WԄw*  a?NIILZjd0qFz.պʹ[WWWT%&le|:hrd1	MLB<qޔ7nlלÊY~|`o(,,LqeVB͝AL<yʔ)1<7ݣݠDEEˏ;H$|=oO73/^8yd^^^]] C_~}ժ-:y0y@[FC}Þ={JJJzzz&gb8~%***&&F$7uFt|dF>Xv<;WoUNܫCV-.)=Zjppʒ%KX'^pe˗/GJ+pSs)			ۃE4x{6@LG]ZZZaa!l=	 ]\'''%%%N>t@ÁA aϝ;հ@ "+E
-fVG*Zٗ5k+ꪾEߖ)xg߼mp=KQQ100~Co*ũ_؈w5tj8kit3md2O81}tIIIMM-[ܹst ^jjjrssQSFF5\Tj]j*.n)))kkm_Ag'c3srGm1|kVs̗6Z:[\;sy)Eqj7@@@^~!}}}Tä?⩏1r?>`W{`[]YpF,v\eR?cx泼 ΙʒX[ٿ˭pOO/RRRh0nP+W^	t-N>4"x{c=hXǏ١1cLMMQ%[TTw  ޾}OCCcܹT*Q;yXT6Ǐ5jWF}{МւvWg[{9ybwܢﺵKRۉonѶk#ѣGӇӖPRR!H&y䈱h^,,,?jVꊆń9ݦMe	8|:kH'ޟ*c\(=}9PpStҤ?O0[Q|ի'N8{촴rs"x{c=wˋEd__ܚ @ˠ2=mڴJ<<_oZJ__֭O,,(,HG>hHxOf'n̜3vYiϽx/m\w[}m_h滼5_>?z5zh11+V	I"e;fjjگ_޽{/\0Å^&;/.-bevAoDvUk9i˧q">lUqVMyΝ;iw\}Njjj_͛ٳgzI+WLOO?Ռ'O6=~
-_00Wk?iQ5cy䜓m'k#|NFΛ'9^un|.}1'dq~=f?㮧N!9s9pNr6O"!nk+oxcঊ#%8ϙ}37ps?y3Ol|ٻ|bBr.3͛m^0ym2Wָ'Jkۅů|gZ7m$?=--4TIHH֭{9nNӧOQQUSS-=q,h?|/#fԩv*+>{OD&|׳gO;;BAaQ7ӗ.]{={6`KO4uQ>swaPTr[[T=8^Nv`ܓ
-(&
-EEE%993oO>v*PUUǏ]]~			<X+ƍC29~圔'3+g8W]q=k/a|y?4OskyW[|2Yul5{{;Ͻ6 x-4{mD{	4:j	pco-3yȶoV<37OoޓiJL5/;m֊'I,͛z4{-=zСCPO>7n܀  wX,˗/f̘1qDoo/<prr+wIbRQMkbOɓ666
-C-s}QحB'ScPݦ)_H?V%{,veu $ѿqvI񪡆ʑUdq{%{{{566>xϟ6Bu@yp8?qɍ-󜯜xcMoH[U\m拜/'m\/$o{ob˽7%7!Gg7ȗH>|Ŝ=7O^?Z2OhgM_Zk[4͗/q`+e/mk%,4OϠTxmȹyl|F[|D+""",,mVQQ_Y yAђ4cMMMT$OC NWay@U⑴=z022z/5|H'O25ٳ鑴O?&ɓ'?~H^z8l\HצږEۋOY{RA<"VwRPPرc6qw233SWWwuu|2Ļ (ʎ1U(Ko_,--1=	9caa<'ckkk^C|i1nWqrc
-o̼τ)q ᦁ4<z,_yo/IM'6a?}~7ρ}n`h~|[8	}ps?7{/w<a0|v}͓skָ'
-#Kl֚'7	[/ND={k+***iiiP .455}F͛7̵k׾@eI~OߴiϺ=k B"gd***C__?OUF'gpFTRVc%0uTdKNNՄ/uϨwi6ܾ4.\ꨞJ= Xu	*>{=p7.G ((EӋze]]U=(,,|Q)**zv'q~~>7<
-dxM3=gϞq/lUkV@4O9oJZLv'8xj#Lkr_JaG#mg7<qhڭEZH3mdֲ[(4^ȗof拡Gʗ濾6Jqexo޽{>>>#F>|8nz2_Y (((ؿ̙3%%%]]]JOg%%	Sv8S...f;]PWc=z6mڕc>#[BB	p|񆆆eĳ~ PPC-88XEE299=ygHNNNƍC\Yz    #G8P__?,,͛UUUx ~F
-=jffZV>~E
-SzĎ;Q8/uu@I3gN=PHMP6&+۲egѣGo۾;t1~ѢE6Gu2=:[[	&nb6 	 >%%hW\ƻ    (//?~ոq$%%O痕UYY	y @TUU={TQQMٽ{aыg/t:]`cժ,$++m6I"#[)j:Ob%8p@GGGMMm޽
-~DD̙3g̘Ch   TYYYԩS7o|9؛  p2##cŊ
-
-
--ȑCMK={GXu02#UXnaaѣG)))`&cW;g%%%M6QaةD_~!ooAΩZj@@
-˰|<5ݸhIʪUFdɒoCCޕ?    `=O.,,@XZT ƌcddZ&x?355""%*&>{nONNNz<x]L>z466vҤI=z4hse21	%=!**ڿ]aԢ*+V0a/&q%%%^t&     `Y]]~ <]r]EEe)))u
-~-fj*jϙ3G[[N7Ǳ$qv_7C:bqȀZTeQWW=zmٲI)V>}Ii9|hwk֬Azz?ySUxn2zTUUiڍORvܩ?z      d>x`ݺu'N\`ARR+x`PTccc:^_s ߖ?:y~LG(&ϙ5X]PH=|X`y>%%e֬Yz2du9=>(.,,xp@Wcu۶mJJJ$bz']tSMMmѢE|=      [QUUu͵k***N:5**1iJIhFFF̪TܛĠ R'd1;[0_~¿GjQi~~~bbbǏ&<xYfѣ	Mݏ8tPd|I'p@Taoon\kZZks9v      Q444ܺuiS.`'J=dc7KvGC7$Ԕy~꫈1`?Ė[ws&xoԢk8e˖	D4ۇJ+,,<o<X=:$3g||ߗ:"W,۹6TUU%HXM>&Qoߎj=555      @w޽{!!!ӦMX"8aii9k֬㸷ʾ[5|Bt=g7'r\5M}TK^N~ĤGEE9)kk*5778p@4v?#m틧/u$>[lQTT433K<Gp|cŋ,X;      @˗3wAAA騛)`?+)+V>}ot*+"Θ"%5;2LM9gn:qt'%xw F;ϙ?'(O._QL6A/66vر=zXx+A9|Pacc3` 111Z$=DX.JR	&oc׃-ʮ.]i\      ŋAAA[>#N(nnndo.}u|m%n3[,&{Va~`xs/-'q'vW,_bǬ6{s&澤s:>qB0ɧvvvȴZLL.VOcP5nܸ,^OX$WW_X	NM̤PYPWWP(XMb;ZQE*;wn\ƍ;v8rHYY     P3ݻwӧO0a5k^!^<2{l//sHeIl}_ɷL\5d;埣Rh_=9pߟoOW~xC<,/z_jV8N.cz衫}v#zDLO4)`W -+5H9I9s&%%%utLSm2Os&2:*	?fs=T'7ComyQ1mfbw/p?UdeeMLLp׃s+WxܹwKb<vSL|2     ޼yC32:ҫ6888<љ'ܼvFDV'n^d;꫈z1+<A_Ǎ'z.4VQ-LtOWw'
-}OӿDYb'Xy{򤏏ѣcᓏ`dSSSdKRRhZ8|*>G\a=<fX:e e77֔uF_aPɦ8sŐ!fEt;ck*|"tz-GDcUD"~*`M4i˖-;XNzϩUTT/]TRRwKbԄ>\LL@v   ৢƊ'N)LOߴi)[[[߼bRnշRpd>8ZS\Lm*t_x㩭_0_7.ڝ󫧱Ç>Y`i +SNELNNJ
-eǏJJJ
-		IKKo۶vCOE0;$%W~򸩪$eV'(HHЧHfkiaVTFvVlin]kРN~U|عm1CEH;qƑC?&s/FC\[[;11ݸޞkpa>» t1rss8{80`޼y7oބ    ??~LJJ3g㭭/=ڰ<vvvYYuI7鿫b-ž}ŞvįZiP]<i~i^wr#a2BڡKف8KFzT;v߭hh0e*hObDEE]B{w3Q[FF&!!A`!ƌu|	])"""ٵY'
-߅D18AA)yVDF_IO[i}=a{xG-ؐCQU%|Gu1K׍q̕j[5[}8)4/Jn.Gpϣwna2errr	Nzphkk+--hTS455j EEET+92,,    X^^?#Gر]v͜9Ý|<݋ݻl}M[
-kd3'&L.^oL-vWvyѨ<ufY;pe	Y[{R
-ۘ%$}TOS2dg2zh"Y5jTDD<4)**"ӃvppHOǪ7JJE]ܟ U9"&|ǈ_)DWO\P[^U炰ύʺ=lX?dvg\C$[ +]_:$*x$[ד{h;sXb
-yy͛71[#~0{ldG6m+Q[[ !!Je'III}},   @ԩS˖-Cmd0<z444tڴi,鍵NGR}Q?h_965'3{%yk<pv0h@Ur2#eG>~@bO2-gjbn͙s%PHH.}g j޿077GoY\\|ǎ5ii)VT4ydaa~۳>yL6>!R>}KUi+Y,f\%oaa!e?ή-+?"糼OmxW-JN@FG9[w/TUFSljձ5eQ-:T=Q~pA=WDRmۆʲvpp'On> ]uSSSQQQCCaÆ/(8x    IQQٳgޙCսqO*iվi!D-"RH,mZ^
-P%;c4AѾh;W|?̝{=w{y~X4>-%%$$u?P?$::&>|j(cVH˧8
-dS\=?ϙ3kFCeg_|(z`KzgڊxeeEJ?1=BxC3cFHP-9>&S2}enn>h vvvi;|0/zĈ&&&&Oz(,akkN4`+J?ç!_ɓF/y̘uג07B^=uܧ8g*\ÆlInN C)ܾQdTYX[ph)P=wUո/^M~S%X[[		ikk'&&}Л(**rqq>}I=y9sj    RUV	
-
-jhh`by"""4[ HD{]zm=sœqݳvҤq%Eq>w̚5aZui\9!zweeg?劎ݴK΃t󪧨 :nщ94aHɌD<,qdϪs-[899nggWƲ-22r3p@---BJ0QOEw{7n:ҥK}ç䣏z!CK5^sypQr0oer36tk[FO4yxn&y뉿(AW;Ɍ@}X_>Ϛ5!:1YDts8q2NbnG~~)S):jjjl   uQ666Өxȑt<X
-%%%(lllwRK?3\>oʔ/|dQ]XK~Qć"!! +#(g5_חp{ƌgN843rYmXRUʈҒΎ;LpdP~vvv=hРuֽRYs5;vq+&F1 й6Ӊ=[fj-{p{W
-u1CQ9'pڡqco;c&263oIsԔ9᫶"h#=̱V_=}y&Osp3/tTS푻 :<<<qO]u-bbb>Dr;@`ըA655EO81iҤC8p,44o޼y'Olh˗/ZP(.D TB[:LDDAP   sxm۶IJJjhhEIIzzz(.OŽ-$u#yw~*rrF{)mC*3JNNl3gΜ<ϖFי\L>D#QsUiZ'ƼٮTqdPDݻwQ__#f"\jeF5x`ee([0Ã~(h3=/D\'~}ƽjk+︴wP|n;Kl&巯=4m7_/ƆQ]*V   'â
-zl5
-ϭEDDaSdgg
-
-Ο??##N?~s_uxJJJ>](WlC   ~<{{{aL!!Yd''Xͭ$zwJyϞf>`2"\W/W"T]MfNybNNN7nD 5_;y^ys/mf=jU3>=u\KtpdPU_=cǎEXe4YYƜ%>GĀC)sܽT{/t3w	#ЕJO1c&Li!c3<uM\/1` رvګ1BZj:P\lʅzbg^gԑc=sT2~)ٳ|||vvv{p5[:::aqtW^bɓszabbFk@II4bsss[YYEDD䴀jjjw{(
-c)/#65LB}   9555yyy222nnnE($XJܹ}V3w_<_Eׯ0ʪ,	]1mڤό|[Hʅ +CD6|.koooaatvL'".&cO[҈#\WW3>fF;X~ɠ_f`sTTTrY 16zFʕ+Gf${AW[9:	!8.@TTKLLznD0_~O쓯BƔ̱cX:ar'u7t\NN(KDɑk	aAF-"-LdDS^<vϮhС}i!ن<m矪
-Iv̌:iWjН+//=u5ݪ!wݹ zggr7`AA/_Z@7zKJJ_q{P5lD[1K*	  Craa32|f)/3DQQqǎRq3vgL9i6x৏y-蕄ez*>^V؞0|VpX]]}9sbi-qDmUVc+]`cc#E^7BK{3AZܑ#GfϞAγlp;3sݺu&0VwFΏ衅@p.q߫8}|A˦Lf,z5` \#Fp:aͅ><iEE_=綣@]т{e޸uѲbR^褨.AƆRw뫃qq*]JJJOO/33q=Zf """/ǁ_s{鉹=-yЍ0LYYYD]A]k  ihhx䉟+*)2>:ì,KKKT[[>`rczTQ3}g^uũJեAE+҄HpԐ?&"[J**O3#O36*Ku)"""TZZ:%!5CYHn޼y񜜜(ܷoE%]iy5Т_7P?{cLύi'[H3^8zRA+1!PUxybV32^Ԥ̜5e%L;?=e1t.{ЋT~n%KL8qӦMQO{!ߍ :::/^,--Żn`exyyjTO~~~U//6%  #͛HJJ>RX455C}{9LG"Уe]mѣG|vǩZR9\~͌ek+R}uw9biY)%5Յ1\v\&jG$~"""ccYsRPZDDdQW{pJa\Ǐ%{UqWեiS5iIM]-a6(T_:O21-cd3̀B+4(%ɃuǌYuS
-~SΏ>XFIIIQQ͛t:лafin }.daΨl"kiiֻuSRRNk%   _x"  `ffzH|i&YYYSSӇ${Qu66-ӫMj		ͬg<ϛW~[?gR1PA^x.!{lʿ|}uCXcu}|6q'WSN"^NG7/>!5gTA۶m;zGF E%.]tРAF?\[7j[ͫtv{GU*(a7i֩ns<'~1QFz(iN>Ks,9rȖ*,x+"KO{i_rfXXXaaa]]=w= }	Pίl^RRLlշQ=
-_(""%   P/**J^^~ڴi֗cbXl{{{EEEKK{wσ(|0I5Ⱥv{gN2)D|߸(Hq&̍O*K5|&O.=LjpdP}ҥKѿ)SPE9+kϞ=|||-7Ơ64|Pvܹ$ϸݨb3aXvh]yWw~|sX"n
-=sjCz,VTggg0SuݱMJ䒏>r?ߙYuUA6VJ KzvB99zyu2}4.dl뫃щP}ZUWmbk|9sl۶-jO<4|" Yfdgga»:@7ӅQC(Jߎu팕̜2V  wy}LLH&AzGϝ;&z$޽qH;c[}+PNJJ[SS}V/`o^oz	W`g}ٓl]]]vvѣG޽:55pUz:aƍgjjJ:E>O	QW"P[ɹv/{urɩSFa	+ϟeA)80>,!<1q*"hPmcJ>5;g*FV.ٟ9ec$-5M~S6bl(kCWo9pEwn:u&W3D&q)inYᮻQsS;Pn]<j;vLRRrƌzj5.777QQQ)))OOϼ<:߮%`պ(f_w{s  444|%&&F___BBb艉yP_{2ғkcp#G`^uBmj;*B5et7Դ0ۘѳGƎV/^Uޅz^ƜaÆU^LK		9rժUS[Wj!ClJ?AçfLM`k!qqbcc>9ca+7BNeo6X&u'>z4:2v0? >Z#q)6AuUAf
-hI#cj:x'nC>:^K4_kU?ٳgҥKҢTҞFO؅h= p{6]p{i\VVV9Yszׯ=X
-ё Ͱ"  ~˛7oPlٲ3gc꒒X gѢE111x;ḫ6,,Bn;SuwLtcq(SR.`~Tn	nPfyC~U,sssNN#Fٕgd&PKBKFg_dIhb
-9{*akk;zhvvv]]ob鄞nY/Zy/gg\be~ ikYvnWOݙCq,v`"UAe~WUE n^qu's!]9^n.gkמ]w9jnbޱб4-ܧuݭv;k!E<y!|xgbb",,~QG{&iOBbpp3g|w0gr'Bޞnt{Y  >|@PPXDmmÇR(D"}TMM͈zu"HšT*+[>W'3ISm33g;Ko!V@9\\Cb5E1bEQVknZJ
-HE4HYY90ʯ':;;3r0_~O"ˡ>y}yTiou&	2/;EBGՔ4ޢU%6@eQ	+BWNɒ{iG%%%eddqoO®^k.~~~AA{޸q~XoӅ5Լځi
-쎎?;	  /:xiӦYf+%!<(7oޢESq{򁠶H0qk=mT%\LL9w_/dEIMNU}ekk;bĈRNppp/\0}Vf'ߏ[^NN񃨦~{D)ݳg//ӧ=e'8qTLL݌o߾ׁn9ܞώa=ta  @ٳ[nUPP-dCOLEH[]a~޵zċgBeY}wWڒxlG> Ze2
--Ǎcd]tCViJJH=z#|Pf'Ofcc'N=WZ%++}7oF=LGE\aaaSSs4.I5?08dNffcu{ RQQqP
-
-df6EFKH8r䈎68vAgx4|?~cFd<l-hi*V~gڊ'j(ޟ21O]]=/3Db_MNNN̝;7$$|FD'8Ϗ.S\\ƵMGpAjVTT:tNO%A޺uP***Η.]i\ sᐷSRR"--4|:tvy_   z555.\ؾ}ݻ?P	y/^{-.ĽݻD
-i~888L3P=]a4 P-ۛudeeX'$䤤qrrS=f>IйSjpAD.۶m///cjUjH ӺǏGPHH˗/i4}whɓ'=0~qttP(bXceez,MII	sgCCCt,ڂj=njİeLtӒBg{	  Ћhhh~Ӝ9s$%%^gg>scLBYxC,}Mb)>wf{8pv'hq$IX6j;nR4M֭)Ϛ5kQOzdKBȱss`$)!5INZz5V6lu3?CD̘1cٲeT*ǏxwO,-
-f@ޞ~BII	swiskw0sGjT SYYy=wwweeeiii{{wT*>;ssnݺl}R!Ak-]<롷t}[-,VMƓ~WbccEEEa6MQQ1|P7o;v,
-4^P@Hegg:ujQZtE'z.oѧ׮]۳gܹsۇF;)o9QDuK\fr^|~G
-QRRlUDDD`ؘ6[5ehOtjpwKPJ  ~Ojkkܹ{y)**fH&Ac~Vݳ'MH;}R5af7ؼxق;$8mfyjX`}5֒$$$P_HH@ 4ű}xuV,ԩSmmm^ F?ȏaI*ƍ;Fs*c-Ǧqenntt
-!-y{    ijj{شiP00+y23MMMV^3V@IՔɉ%seԜ<T]mnp{@nUԓG뒒XPmaa'bި'aP]СCn]%/EzN՝>}:H<3ȷ#Џ_RR<;;ÇxwX舎io   F=ywfffRSYH|mkk+--f͚Mt4**,,崪%l`o<eX_^C-k2~x77TVQQ|cǎ]jUDvXTόA<nbb2h k̓hQ(pVUUDn4,??}ԩ'Ovqq~zmm-    =DCCBBBk֬APXTʺurΤ2>Fv9,̗HmԨQK'O{ 5*xD]tA/?(`MJE?0I,,bѐ!Cvʲ0jcw)**]SgSNY[[,\իWн    	P-..nŊ+WLgC$cAAA}}'k!'KuQ#F.?c-Qٮ
-0al|5
-={mll1x6|R	"""(^X|yxzOF4,rСC/^BͿq8RL=gدS vjNM~|`+ܩگ|>mNF{3QC3?N+!!1` ]]=91,,LKKnݺu߿ǻ|Bt[`M.    F>|@"ϟϿf͚xzb"+B4o޼K=z&u/7#v
-\״shj+	")622\v-YӒTˣ_/:zȱ=PPT$:R ؂{hiLЖiÿur٭`V۝;8|rګw^KcWY~Xvڻ?	n"""=` ٳ3G=	V㒕ڹs˗Q0xbߎ/_:'3}{ɓ'al    :uuuo߾=v؊+ƎPb"=guIxW~z^o5iB6,^AׇTKK!CpqqYUOujjxx";;;ϟ?ߟtsR?	"p[en-sKol]lJm}mtP~+mSӦGZhS~	~9:^0mQk ɮ;v숾ރt}}Yf-^888E뵵xwd`]   FFFzzzH<e{Y`ҥKDbME
-i?+k+B#8mڴV/4ȒgB""ʲ=z4;;f">>ѣm0`w;Ĩ'a=#BɝP(ʪv];{GXNrtא#^^lٳg?}wG"???''۱=hw:    YTfXXXuZZ3b"==((HNNNLL,88<PfnXSc2te;Du3zz*Jҝǌz***9))MQQ,hd艉IIڃ⒗'O*pݻwWYYy׮]/^h0a.ۃmQSSᐥ     UUU>}VVV=gX:'  @__ܣQO7o!pB3'\mPEwKƍE>{=AN*+ãN\FRR#֦̂>!!1>^GG$%%{Fߎzփ#|@>'O\fvPPϫ #e    ˗/QԦH<(򊎎UVVvww/{
-j燤f[9kW~AE>	0[ncm4yݻV@O^XelllJg͐̤$...tj77ģOA_Q¢"õb
-
-5o?nnno    R?̙9+5(GFF.ZHYYj3{	jOf&;mjs2Ϻ3yt*{رc999M.(ѫQW_\\ѣ111|gdZjȑ3gܺu`@?Vׯo۶M@@ ݶ.\=@{`)NDZZ=Xf7-Z  TYY۷oSVV޿?cAG-[kccL4n^3f̚'Mx~%:nn.F=4aYEo_EGDD		w-aV:ĉ7my>V)))o޼ihh04ۃ^cVO>mo;| oJyy{\\\PlܹxN~<OC\\b˲_JJJ;vx$JOqB]ѣG..z\sQ#r/Eأѐ!C	ƽ,R\\j	=<<{EBm*tРA3f@Q	!)Ubxxg-,,޿w7}a^zc{L.=(^v Lmmm^^̦MX*7#cݺuncc~Jszb<,i-ŕ_~;;{|#)55#33deeiԩ{'&u"fe'L`eey.{L* DߌصkӅJKK 5(tE}vhXۃ 6nOsĮ   3Ν;ᱶ>%0q湗kcq-AQ}Mq3f+u{{c-sy]5j5֒SSUTT/jܸq(,dJ?MN=rH
-Ԕ_^^uuuxwy^@~~!+zpr
-!ߺ= _QYYz_TUUE~NJJ}|<+M繝a!!ŋIA%*	jgȝB\܋.綮4|,zM9HW2444Џ
--,,P0Ģ]vaЩ555CF߇> пzzAAA3f022$: ??;?s{ ۃ_6  蟠׽{:.--$<(tqy[.''w	i}dbza~%˿ή1qѣvU6
-?4cڵ/Ypge<x1 o"#bnn
-䫪 5.CCÈ.>0`nOkPLw  ,,,TWW655MMLOH`[B!sNii˗gf$5pA]ӧwD	qPɓ',Q4WY\UB|62` AATn0~[WWDx"hȐ!oll̢DIIG'''77"߇A )))K,	{acc#= ෦Mƞ} K3tPZ?CCCCdrEz:KMy[ZVVUU%H*
-1# khMҝ+6Z/ %%R z={A}HĿ^e:s,kʊQkF ^"F%oGD|"C[H-{~;.\ػwȑ#%%% zyy^lC @=CI$zGa1kWɨԼw'PzA&КssUSS.ZE-vm %B\\(ѯE@KNCԦ*++/[LOOoi+ZhB?؟3'b)t3LQ)[V5\׳M}Zni]B{);M}ݧŶaZZZn
-tW_FzahhS3o  QXXxQvwwHAQ}||ddٳ]\\J?gHPLsagg#,hL߾(Y9S??!C Q3[E $$$))immb:..NSSuPZ6qqq			$Z`ngcYOgj>~iuuwȲ~6O;s6E>mDݻ߼yw?蕠H[;c3
-Y=  }!::=."#Yo4eddhkk={?~nOoW#-43\݈m/hl2u|^"a @`ܫ(IwwwGbcci,kR۶mCgDjPKKPI_`/^!m>v{}{HXwOG.>m֤ڔr-*5&^:յo2mNͬ[g^uRSS'''t{x-a+u`c{`&A7X\%  XϻwN<vٳgkjj?yi
-'SRRŷlrmp{zBy[0{)~~0sJ?[hĈ(84WNcCoڠ>Ҵ}ɩY֔5EFvuu7oٳg_|YVV^%]g,mE-*WѽW륱....***//ǻ>JՃdKP{di'v3{yy* JQ5RRR>9uԲeƏz˗/7Iǌ_QmEe&)zTS2OA<⌶W>|˧AozΞNevjz*JQG\\ВBuMJ=xedd333QHK  
-X6sa&c~~~24L. hnrrrǏ?Blf[XgժUBBB֭pBSma#WT9L^^RLL7zKўW9&7Nڃ;_9(#3kh}p9"%00PIIIZZӳ:-@`Y#JurrD?{6dff6f  wzjὼ:4, p{ ?P\\cmm.../^d="#\bii9gSSs5!ao֗!ӦM2\S z@9κq1Qo-l&lll+19@?Zv^LLkH}}}ƌchh[x  ^sH77wM&'N8q"=  466lݺU^^~޼y,z"]fcc#))%*XK=x>:k!*wJ4gmKIjd!2Ç|5FcbbQX"#DGG{  uLxo9~ĉ3   '_vI7HۃN})S̟??99{]>绞}ٳg<zpǋ-!vFkM+-QgO<x넚$)));vRY:-ǎ{  .dfVSSPff  @.77IAAAVVv֭ϟOH`|Rl2sL---Xd+Wy;sK#-n˲+><0a]N裊@v"zkϥO>}ʕ"#YvU;vHLLL[[;44իW`   Χ\ Кְ /QZZz-wwPe͚5)))\x,U&##U_{	jB![Pܙݭ߻奤(z㢅cƌ9r$)aѫm7>^˺*HHׯeZ[[?eB"tuuٗ,Y\PPP]]w  wttlmxyy}wOllСC   7oAz&tb77799955Ç*S"A]WmE6;nnNXEYZk9g.YP]	AR=}*87=1UVMJJff>
-"$$$nݺEa`  @OˈCC=&   ?|葻Err2=1Hu)))qq񠠠*
-$˪&P8q|tNNĉΞvLI2ebMa8OM^^z֬YII0_p.5K,/##tΝ
-u  L~~k|lldi   MMM=
-766IIir>>>tNËƯG6K٤Ic)JKM^")vpp@}x99̤85VlllP|o߾7n
-\   =Bi3o3{0c{z5/ .RWWWXXdQQQ2\KZr2<==?eN%%NR_ޝ{ӕ7ط=>eautHYa1;kz7INNN[[;**뒒feܹ555x7   }6+'a\@ Gsq%0| B߿+!!O$+r{>h"IIIWW׊t#JP螗Lt5jƎi4cF3q¸k`T8{j Q3]U۷OLLLUU5<<N4h;YYNNNrrr6mBq۷on  ,LL&&GgH @F=}ȑ#˖-7n@`=x4&(d#H-޾}f:dxv	5tLF+T֙jq<8887r萦@]UU}WϙҲbe{H&߾}{Ν3f̘9sMӋn  ,
-gM&̱= p{  ޽UUU<yŋ>ge5EE1KJJLL\`i$CKPJq6lXzʮ LeA5!Ԍ=G4|tg̘v
-#35cz̞=m0 U]($$$  pVZ=Q==O>݄  E>腕U{ə n  ]͛7sq+W1f!..!!ASSSLLl۶mׯ_oG]𭜜/feefP/uG_qcGvv 2D"aM,M
-m|ITZXXf5	Ż  W4>Հ @{mrr%z*))۷ 6oLcbyfff.\=T.zݭyuh6FZHf#zvk+Ck+L<SZ9! VjőH$UUU999,֙$Rujj@@E$$$VZ]XXp  nnnheeA;n{ ۴4333aaaww+Wfgg͚5k͚5gϞm=uAakV<w<dic2Foccc3\3c*-gF$j}U}M|Fzߖ-[S$O |":::Ç=z7  @tڌy򥡡!)B̙\&{ .ӧtqqq111I]tǏ7111c^fffc-0~
-ԐU--~&!Cri1ɩ!]9 ۇ^rǜ=SLjTAfCԔDuuu>>>SS;,L,Y&  _PPPUUw  _Ŭv2XYY}SX @xs6n#,,k.LfYBցՕ+W֮];k,x#MP,-͹U%d>o;[~1ݻ{zo_CfPhcm칳	b
-òBUzzBBĉedd޽[SSw  ЏtBt03^=  t'OؠXFQQuxAAŋ7o,++k``X{	򮹏7v1>qw?U>3fL4.{2xСwp"ݻ~ziiiqq,kjRRPaaaF%%ݻwUWWl  /:N}`v n  ]8772,ݰaCzzzcl,4wٹsJBBB-`ݺg%z `ڴ)|X7ӧO~x׻'Μ+Ԍ_W޽LNfKikJKK{xx啗`  ;~ql   /_榨(((haaqiZJ
-	x-;;3f̟?D"TotW\8\QHf	靟0Wf+KBT%3X`~@RgOmmmd2+R(fϞw.TUU6  ߁i/-OII	8n  ]˗/;w3gi||<#bْ7LHrrrxVSmA	;Vprr^pjʂW,kz{CMՌt,i׫[BHHHuZZ!1&Rz-[$$$DEEO>;j  ~suQlQNNsv8qbĉ p{  5557o;VC{B <{=+JQ܇w	9Wegg;v,ޞ[muؒl#ouw[_PS-bH?fٳGFFFAA
-Z?sͳgڸqcFFƗ/_`T   ^0G`f	 kTUU<xV(YjUdddeZi<~[YYYQQ׷<*dc}8W.'#OH]#:TQ:JJJ***>>>%,!w/+ֺf͚ǏH  wJJJeֿK7&װa o{ .X[[dYYٕ+WĔedОAAA(ڿYquo蹰TWӻbAxYA~PisZ8x`qVˬИ;wY\\ׯaT  oB~~?/_(ll=@  FuugWX!**,ͬC TJHH;::޺uN;zS=[œ>h\WÌ-RUY¬Y6oJe]+D"ff۷]RRرc7Nǻ   ~	3=  t&ӧ:::ihѢ#G<x ?oOCCClmmo޼	c{z^>3z왖-+Kq6_U'+++o޼Yv6&HT"2yd==ϟ3[H   n  QUUٳ@>>>xxxܽ{16I]BBTT֭[^D=<M]<jp#**q,H&gfp^^^=m  ה8::ު[=\\\0轀 @hjjjhh@ѣGfΜqU\R(d2YWW}6660u{0ϙLm ZrFzY~VVcLڜYY/1cʡCnܸA`T   ^rIDDkr} p{  ӧx111UUUWWWǳ=OHHJJYv3gP${4
-)ׄT4tS^_A&>''U__uōsdִ6MQQ$	W\\\EE4V  \r:>L p{  M-|2))RNN=OV`OLL[revvvcm)	5^N711AƱcXi2Wv{|2L  oVg o  A?|yf)))QQ۷G*ccRSS7ͮKOLdYSSAA^x&p  .J @y3g֯_?}9s899>}>!@`q{jbff&**bŊZa)n^޾}#Gh)),jgDZrrNjM/][b   8::ٞN<	y{=  t:ǔ|mذ!;;Ba}{ZZZΙ3G[[1&uH۷oPUU		IIa"\eCjP[Z<֯x7    i=IfޞR ˼{ԩSsֻ=/^>}:
-I$2N;8@%қB??wYFZF297=NBBBXX<==-In   ?~Y=  tƪ/:::Λ7Afff)))ii,ݞ.lذaʡix D(zOuuuDM*DbMBOL|Lر5t_|?  o,u[=0轀 @ŋwޭ,++a
-º4E"9::XLAA߿"u===Ν+%%:@h|JY&!!ٳgx7   ^9n  ]ҥK***qqqL,ҌB;w޽[RRr޼y@}B^>rĜ_ggl`#|=wwwyyy!!!ccÇxF    myQ-L.n  ],//CFFfڴi+V H>dE <~x޽sEU1N=P@wPQc"M(JV@,ذ`΂ "RġuյP+(Ȍ旝)sd{o2;̨;w())M>	g7nhddԹsgSS={~e lO&Mpn^ @/\R___AAaذa>>>w!$_߫W.[L /r=VE H##N:;LL (.TtM///333ҹ_v-;;  ؀s{@ *-///99yƍ={زe/Y&2VRR;wŋWD 'rfff=z=zOR6>~C!=˗srrt %@l TZAAݻww1b555sss//TAHٞoooCCCs&%% ϏVPP':sX;0  366  `ԨQ[333믿Hu  ]@ *v$âCn۶-%%s{vLMMfϞ}EܷQt)nĉ
-
-
-QzHFGkhh/_޽㺻  VQٞMJ+((x𡯯/)))lD=&&&***ӧO[w9l_wtt$]ݛ K݈onTTDX-_~-:~xfffqq1-  
-Jw	
-
-6lX׮]uttV\yĉ+X?	Ǝ_@T<)q(۷-[KDGGFFN2Eӑ#G^|uG  8t\P{! +++%%%9s(<.'ۻwM||0GsO}Wo}~J֩9i7ܲ>l{s`Dͅ03f(((hii[.=>q>Nfgg/_s  ;.P! U#gooOGd6{l2b*eKgcc#//?f̘(d{*|Ϲۋr1)NHKeJ=;Y׈iٞ+&V0x=<bud+w>4</[L]]O>7oZGx3gjjj8::>~  8grAl TZ~~W"##@igΜ$C*?~MI'/^x^z*qξ=WbŚC׮c}q՞!%whߌHuksh-AMVڈ۷O^g=衙$$$/O}3ei͜;|œNOGGǇC_xq߾}544BBB={p g d{ *Ș(!!ɉ:\U:d#-?o߾ǰ?h}rҠm2PTy-ZFLthLAf7?uC_>qr26O۠AC`jx사eh Gjذ^<Ssoqk<j %al@6 3{98՜.6>[n]~H7`'|0 ~Cx0`1c]Pu
-  \"Ej;d{ Ҋ322:䤩1yܨ(kٞ=zfFq>"Ӗ]W,PٱYƿSÆ%ƍ&A&~"a{r=ڑ*6ubV3Im6%vjf/<*qf ΝZ!b&7jԐHwod+';}͛Mv5>^NQ~wss#=}||?~\PPu
-  Õ\P  &
->};}tEEEYYى'FDDf'$رcrrr^^^Y1_
-}9 A:-Z_ѡ+^b2eLxؙ^YrHF%9%m-ᓳӽ|N~sӞ'&sO6Μn@m/$/hKaCTXJ5kLHݶٺ*׋!??FCUOO&MJc]t122"-xbnn.N  d{@ *M ȑ#3gTWWWPPϊa	
-:sܹs{쩫}|)z<CǷC'ܼOqtd왆;lI mջo_x<*¢7cEfGxz:=]YҌFNw3eiQ6ݔKjɻ&1߭`<}v`s%d+q>SsDx=iߣU&TZ駟9Q
-
-255?-HE/u8GWNII[ }d{B "==ԩSk֬ٳu@@@jj*kwX_'%%͟?_]]hӦMù=$n-ֵi~:;wkeާ-ө%ӟsfo؜U&Llݺ'@Vm߿dֲsd&wUU:J\so][N
-zlݗ'ۿ!-0NTJGD8neeLQQ |!C̨zP GAۃ@l TEzz/_nhh2j(2zXRddɒ>}꒟7n s<ScŦMR=*6y3ei^]a1ZMXg>3ǰ!i?5\\\z|eOK]P֭k+ד,缰ؘcǎ:xzx<M9N:.}Nte\  A d{ *.\qFEEÇaTIח^?99yٲeJJJ.r劰0-WQc#5?Z|7n__~⢦O{J3͏=TҤv횮r:fZ&cv%ec#^=g1lK5*ԷOw]^?缰'H_!--=hР={<ـ>>qq7n%VZu)\  "p% @U|!))i͚5TUU%#۷<Օ,Xpzvc,oqT5swļj9GX}+ءyVM7oLyIfr|K	m\L[іLg9Ӗ9nc(7kT8̟!#ݖz.Gf.5ӧeeekeƲ!]DaddDDF>}f͚uȑ/_sݕ wi:  4@yOOO##ݻ.BBU|}oݺa===EEEgggϒ%[CX}YÆhuIuRU;0W
-״
-.6umi9דhkI~Sn1|b^]ȻM2cn5t)fR~;b|6?ԃuOlzHd8p`	SNx^"])  plOӦMq%^ @Uddd\zcnnnoɳuX7+&f۶m}%C9gs{t믍TPia}qZm6;5u4UviE%O4h0@.$pRM>Pɑ:o|e]yë5r26EM#3Gi-ETUUսJa_|@xǍwǏr݉ :  ۷>tuu׮]{%֞̌ܨm۶kii9;;?~8?.Qm~*əhPGgW^=^lnړ*Ydzn_zx&MK=ߪA[7t?7X~ĝ3Y`Y k+ԨiSV"{5B=h4&)KwlW_~Uź,
->JXbNKY
-"#I@]iggt޽;Q  A(,,|qHH!?~\=>>>&-ٞ.!ێcTo
-6*zXywn1ys`YTmۦ^F}xhFNӦ,_<^|0Fͨ$)õNR_o8%x!v]j>i$sӞPwf&[4M?3^I444-Z !AN9,\LTOOOYYy|9  IG+ŋ?|zݻw7Ο?9<^ѣG{111رeTTTAN$\V#ӖYN|\UnZYb$T@#խB։,=MOW]MV/gd}4m/"sbƙL5֒:X&s26=4jzvdvhߌ:%F^vjհs5k̙]?]ti$Ԙ1cvu-q	BO  q>|C'##TD/&[JNNfj:ݽ{744tܸqjjj?CJbt'ۻwWZYYF|)z^<6z2R-.jZև*݋F}=yhM*I"ףFϑ}Ss'sӞav̌M%W:y=M7=Z҉:f}?R)ylݺI~B\U.~={tppHc2Oa``*j*###eeeKK˝;w^~=''  ~tx;'۳xbebb"aj:/??ٳgAAA&MRSSSWW6m}$3Qy1cƐq%مԫs{r?nvtOe3:]5nꊪܱ8Uo׌zؖR7=3L";݋JdmeM%X5k<l#kQwq	70s,Y?-6o_x?ϫ~jrtM{<P^USͩGғ2{CxzFVFNz16VNo9<˫W600PTTذaÕ+Wrrr.  &J.d{ٞ/vjՊⴴ;VNNNEE"##?~844..n={>|xpppiǗ1/;ޥsK*2jzB*湇1}t2H=;?}|nt^#Qλ}ƚl*/4ib_Ed54Nݱ-rGjdts͕S	3l٤θ91/2lHT;QIFi&gW×}C%1cBB
-||6l`bb"--ݿUV>}Ç\w  P;WhjjP5@WPP)S+))7.$$$;:27qDÇٳ&]J/=Ǐզ)2m/0*
-ϝ?QU&֕P ݽt[:Hu=dۑw{P0o0:s,_>qg^xؙsr˖-r1y(g[_B= kko{}| Eԓ	.[X⑗=zUpppšW^411700X|ٳg?}z  :^e{DbbԩSE? P9B<y0gΜ^z)))M<eGGݫ|rrrdw޽/|YXn][Q7R!cǷR~uPFhMm֬1KBo׬sۨ(w{-jQc##	3s2wX0ϘlGZ^˸$GQζfƏ>zhȓU܈JII><   c!}>>gccC+V<y͛7-3  TܡC:v숻4CV=LSNe^@ PyTgggmmmI&VnT|;z]vzqp%WG*3##~(,tv\g# ,H-.4%̖/]l|ɠI<߳l\W2ϥumnj\r硓xa}?jGuj`!Ey-Z͌eNa``vtt@@ĉ{ݧOy:uǏH  w}{?Rx:@5o߾%?dZfgW!cӧOϜ9S]]}k׮MIIr>x_KZ2cTԹ=eN[L` GXG;uosMBܾޭ"ׅfTHESIos>c[k=^=uדvTm[lvq!֙(OLի͛KNc_ߌ8+訥;wϟ.  ^TZd{p@M
-^:~JIIiذa۶ms/^ڧO\299_UT_~26R\yo\Y՜NF'Mʕv-iI?iԝ+3Oj}\a~BV,oj.[U98BT%.999nݺ5#.x'NTSSttt<xǏ
-
-& @l TEqqO/%%ebbBFyW\)ecONNvuu&Y|˗uAkmGkR9K۳iȏo7VV7_:~ￗ<`}f.so,-[6zV?Zl~/=yq.Նʽ̙ex7uE0Oi5C/q-%!$̛7OSSSGGgYJ^,cgg'//߳gO2#  *> W^:ujɒ%'C-7&%%CI/^\l.o.Xӂ 5I֬Yc*ӶmSG$\θ4.wjJ䎞=\KFL*8:y?-+YPmkojhƧp[6XV-Uc>we\ճ{o]]]uJ^B00TOQxɝٓu  }d{2D-{ϟ?iaa```nݺ˗/gW!+WӧK.vvvNs>(ٖruhA#/o,4AjA7Y0{""ףUZdɜt/HidYzܹx:(>zuكUnQg&9.Tk/PPdEzCHPKo2yڶmJݟysDя0s׮]UTT-ZtsxG5kV޽IǏsN~~>׽#  b\@U=D7g S2mժyNc m۶Șm޼߷狿۷eee;v8}P·5/{nCiݺ@CE.&{'qΝno_xd'%L\dV/sgDa[^]~UZw6Su㣧ue>m!\80}Ͱ#.]("̜nРA!;Q#lۚC>Xe{Jn)uɶD:<6ZҒGwW?:2i͍7o}"e5R4Ng|/aee-Z888,ճc $f}}}XZZݻ͛YYY\  PQ\Z=Hl@mذTEEܜ.\=T@SSs			Ey\k<>Z?jz-!}O?Z4w>w1K6~vN-[n2a#{|zP)i_Qv3Dp<0n*+ӶyƖCUS.=;uI&M|a7HT.oǬwIclGkRо@?'u]hF6psfXVUDHuݥ̜ny")Dx///rkĉ'龜y@z琞B/m l=> c+++r4^Eݱ޻wwС{0a?׃lOaGwWGGNgEBҦhѥsK[ln/^F={. *"U~c2mKukM
-FMG#sus[_=ugsɺג|ݒs?n޲ɪ[5a͚5n۶inҤ/v}h]_qTG]]}Ƭ|1dȐן={g  @ۃl^ؐ)׭ >}t۷[YY)++q,9חlϣG|||,,,ƌ
-s#8|'LSG_OVYn][1OajԨaVMml}J\<:8}T.eC
-HaawSW}[TR.ݾV{m+jf`޾ ;FCS[vd{E2]MG^jLz.^`z$a&^M1̌kaaܘ]4!aʕ
-
-
-&&&nnngΜy!  Թ=M4\P{l-} AaacmmݥK999''#gr߿kaaleeRИ(۞%[IkM7x~r$d,̕&^dбg}|[vCzod`oY.?tȻ3>XK)!2ux?yl6)S|)$pҜY"BYwxJ<804Եv"ia?i3,t،Sz)|r3---wޜvG|-[СCmm+V;vÇ;G :@P=666SK= y-??#F(((hii͚5+**͛7_YX|}ɐs߾}VVV]v500ؽ{7֓lNDveСϊa'+xo߾}ԨQ{&Ç={T  T#\@U=>c% ZQQѣGBCC555544"##3cc>gǎȨ(ssVZr)1Qg(/<oݻoIk6AAo|RQTTT.\߿ @3V ߏvppPUU%iӦ<x0ccvj0hii.K/cdDanD1[vmz\kIݜ۫QKHHx  :  <xjii988gGGXX
-#"Nmll陚+ 8&&&6mzs0007**)SC4>""۷ ::  
-PX\\|899_GG144֭[l?ǧ84СCӦMSSS#-(iF?#eV v*YJJJ0_bK>_q3w\}}}mm'ݻڵk :8\ 5?;gΜ~˛{yyݾ}s{>_ɓ'SGGgժU.]p>XF joSo/XW^***KpD8qq|}}233  JHH0ȕU,a'd%
-//|>ٳyFFF>>>)))d{=:sLR?<r>^F ji
-K7o*9f͚u).84#:7*ȑ#䈖jӦ͐!Cvڕ[\\u  udX*^+?N=,dred{
-/^8~7o|l;wEVVVQQqgΜ!U·Dmaa	VRSSڵӯcp-
-?d]]nݺxzz^z5==n  8n'*^d{j4	0++YzСC=<<.\Pt 0 ҥKs!>},\4LPu!,x*sG>%	aXN8tRcccMM͑#GR9似<  5~&'O`'*^d{j4!޽;uLMMUTT,,,ٳC$sիW >o_񽼼eggwT>ܜt)/Rȡ{{;  +{rU/=5 P{24333իZܹs%{%$xxx)))?~Wr!<r?>444cp:t(OHV\yl@u  }%=uREFy)k8h *۳v[^~}\Z>Y1<xp׮]vR='|Ν;,X@/_~)-s @@_lOz@lڴiȑjjj}uvv/ٱn޼ӣG++d 1BFFf[n͌_ǯ 8yBwATTTH.../  \uREF@FaYYY/^:th۶mfΜy|?55O8[nÆ۷oߓ'OA *yYrtYOO-חW`bbҢEEE9sxǏ.  `SBB䪫rU/=5 Ԑ۷o0UVjjj...%7`ᔀf{<yk.CCCyyykk̨/;|r$$tppPRRpwwOg<R{RRR;v3fLLL9  ܞ:\)W"Sl@M
-7oܺuQ qs̉-9lϣGv5b---={dep=F ~Fe쬫KKg߿ڴi'Gqv{8  l;=uREFB~oݺEk'O۷cHHHZZ"=yd߾}#FPRR233пb.	AGqQx7eEEEUU+VșǓt FHgBu  @3p\Ջl= QffDhhYK39xv8p`6mcǎ/^~ƍW^M)u)_,o*2'Ia(%)e)KBJx)axW*o_/H!TiXy[͜#2!>_-z&0	ϩ,aW$/IM_v---ҥK{ܹsfFQrV;aDDLĽ3ttt444lmm}||nݺG;6  l{rU/= :BP <x $$wjjjǏy&ٞ;
-##´A`mm=aI&M	bW*^P*Rݞo]-fr*QV^2_kUf"MeN^["oVV({{{rhii䐱MY;'+&&!!aܹ:::#Fضm[RRRaa!  \uRE(//wpp ޽{7n׮]?\._ݻwKIIn}%2]	UYZ*˔*0WS+R8-%C._}dfiUaҽ{֭[_F+%.C׷(</Zhٳg_~u  ݑ#G&MJW)W"ۃl@mɓ9shkkQ-[n޼)foɉYbȑ#'MdoooW+z\*x	K|fEJY̵ė,%|Ɩ!JPxy/aOڗETJBJܒޒDV/utt2e
-9Z555,Xg'O$==<<N:   :De{pnOݫzA
-ŏ=:zܹseee[n=d??+WtIdxR113dy뻊*oI	e/&(	~IՒ&2q)꨷?^f#z	eDr\^Ben;syB]>qBBсR|OOO͛kjj_Ν{׽  wWU PSLQRRRTTJJJ*ec*jޕZXڽj,ZRzS̒X۟ؾrGɵ޻|ɓ'Ӌ   J\U*^d{			˖-377ӧψ#<==ߢp6d*,@ $yvܹ75tqqq/_D  ~Jd{ j/^:ujʕRWW711Yb?Sr%Jc7nݻ?~{  oOӦM{rU/= FϚ5kd``bŊFD ۃ@ CCo߾;rHee~9;;GFF><//>  ?:ԱcGd{d\Ջl= O<zj###999˗>|8|@ a@K>Ϟ=ƍSVVVUU?CBBnݺ  +p\Ջl= P(|s֬YcaaAٳcbby;p=D \ $$#.oرzRWW?~<yy֭O>q{  WrJd{ j##HFmO:thݕ|~vt4MYǇ7Grrr~~~9998  ~L8WU PKeddܼysΝfff;wИ7osbbp!'`9Jo˜쬮ޥK  ?>*ӴiSwwwd{X\Ջl= P(ͽqƦMGw|Qc8x"vCӸ3'''ggg-  r S*^d{SRRcgg׿ӧ߿?55/Oj-ZԴo߾VVV^^^oFF  7J:\)W"ۃl@-y{:88hhh7|)B W
-;`==޽{>|ݺugϞ}P(亻  S+^d{nݺ<m42w ('`+
-#".]f===z]ѣ޽+,,亻  6S+^d{
-
-
-nݺ	&(***((3f׮]III%|@ j<||>]www755Ԝ7oÇ?~z  lOzA~aPP]^陔9<A(-8sʕ+嵵x<޳grss   *JW)W"ۃl@m$޽{2SWW255ݸqs>q?E 5H';9ɱOz  ""C  s{^\Ջl=
-7TO9rٙ---7lp̙Pܨ+	y{{{*x>  >oOzAŏ=JHHHKK3{.&&YWWWCCcĈEp?E 5ݻw׏Ç+  ѡC:vs{d\Ջl=,UPP?~<{-	UD-c˸lٲAEoQ-4e}}}===;;={$''   S'+^d{aAAAA\\7yΝի\jׯ_8qbѢE%''G}TG,%W/s廒
-fSEHHDP7zUbgJn|?w	YE
-`iCu]szrP8߹s	ϊŞ={^xu  PI]j\Ջl=,
-鱱eHHnbEEE>|={z555-[vر˗/߸q͛׮]529_P2K^-%/=j<U^)_%KfΤ+xkO2w2Ƌ7P$X"*
-sNZZ?7mD~Dw޼ysyyyWWW  @={rU/=|˖-7VTT\dIRR7*իW'O\`A=&L0{lEYP9M*,Ҿ̅+X|jX7;Pr\[Tfɒ["^E7[|ZB>|UY7KK|a1o޼cC^MMmʕ/^7  GiӆIHHI$YyWd]-,J|aK"©@WJI" Nzs3#-,o&UzyE)sV1w)ƖA+u3W-Q2̏Os,o0xfz)at/55M/@s1_-Js";w9 sŘKRS$/K>ӯ3EJW-R&U,]>=,H8$i̤߇2ˤ<ܼcǎ͚5Қ;wÇ`CmWXX''͛/|.]dee{0ȕ*o~YEXX{˗W)To.\-5W/;jnȖ*oEٯ*]]iii/4?ׯ   oڴ)ukݺt);H|Eͤ_w2%KʜOϡbK~XE|3i|_R)s6	̗"+g2A,S>kgΤJca	[$"oQM濟X67d>|?ذAٶmɿب2mے0_|}I͑)Ig+2A-&R`I2meKކ(3w_<
-5G2
-Jve5i"Mi.fsăȔuxJEO_<Ŀ̯JnڶmoO˗e9tШQwﮦֻwouޥ"/իC5+o2w>ARY֫T+*'r5myWKKKQQEZRRRrrr:q=  @8ukРAƍ[2P?|tR=-^.AdH]"Z̒m`.)RxyW']E
-Yjՙ,\Fd%(cuZ|\RX2%oH#Eju"͡MR\3`~\Q-եzſe&nhU4&+WHiXE^yT̺-E#-/!Dvz&M5j԰aC2bŊ,{Ye<y{3gΝ;wҥ|Y4"7)Y2gVj*Z*lZ$U,PN(kH^xie>|4<syvx'k׮?,YrQ; @qi99:+ѣ4\ޥ0KoѫScǎeV$Ȝ2[HMKE3=4ka'"{	zmOv%sDTLf3(̝0濨z5]_~tcS{@|E>/B-F7癅P/5o"p0T"YF@fpf$l=S`4KŘIw ;j(cccқ5)իW/WPPu/IQQQZZڑ#G:tBR_Vp~y/V߬-oR^en~y嗹u}sTd	K˫w}+a_Ud}W$ɥI.z̙3III)))/_  y-{Ǐ߿p=/{.5M/\C)
-xxQ""rfKlvLХC%Rx{ -.	˔"xe
-6po"RBy&RxyH!s$|	:QA!Ẹ@\Q}"/H	vH.J8%S07ƍ/СC/_~O>idggzxezUKJ!x%jkW~~QJrջϹɿ{sssK    OMMݱcǰa:uԲeˁ_>999''AC}yyy95 TWb!SsDɵs5Q"9ؑ    dffvY__ҥgϞ%Cu       v
-iiiwuu=v؇M       CttÇ߾}'     ̳|\7G!
-lr      oq4        nTb        T              "R/}.YWFFy+11QlllɄH]9ŋNIO:UVԒd$^$i$A Qm kB'oI؍        ,HN0*[SNgjjjӑot
-hbf*^Hu"Ϗ~B'>|\%99l       p*7\Ky5|$2Ji3bdu*OB޲\n )bhyfʈ,CD-swY2       `1/5StD*"rz}nE+`_0@vDDB$R)VWx       ̫Ч0WLLL\6kʢTЙJd{*X;LI_%L'":E%        љbRf{$N(2QTvf(NaaZ*w       g|)'CF$Dg{8eɵWL{Lb.T"\       ?g{<A9=k\}Ç:2.       AT=#rftGo\wY}w""me\       tNH^K97y{HnOFFu]Y{yR]yYxMMM;B       pٞ/_oY#y*71)z9;_y!'v	;53賀ķ       [UIVZedd$''	Rb93bTVGd(7df[%_<C7'%)H3SUdC       RlFrFHEd
-p+322 E`t&I.j\       ?	VKL-SɺSN5aΊYݱHd>y^XJI[,STDEY˸        hQ2.        ZS'       4Cߴ        ڕy!8       @urcN1^222H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               @y<
-endstream
-endobj
-10 0 obj
-   79590
-endobj
-1 0 obj
-<< /Type /Pages
-   /Kids [ 6 0 R ]
-   /Count 1
->>
-endobj
-11 0 obj
-<< /Creator (cairo 1.13.1 (http://cairographics.org))
-   /Producer (cairo 1.13.1 (http://cairographics.org))
->>
-endobj
-12 0 obj
-<< /Type /Catalog
-   /Pages 1 0 R
->>
-endobj
-xref
-0 13
-0000000000 65535 f 
-0000080712 00000 n 
-0000000187 00000 n 
-0000000015 00000 n 
-0000000166 00000 n 
-0000000515 00000 n 
-0000000287 00000 n 
-0000000782 00000 n 
-0000000761 00000 n 
-0000000882 00000 n 
-0000080687 00000 n 
-0000080777 00000 n 
-0000080905 00000 n 
-trailer
-<< /Size 13
-   /Root 12 0 R
-   /Info 11 0 R
->>
-startxref
-80958
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.png ns-3.22/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.png
--- ns-3.21/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-enhanced-fractional-frequency-reuse-scheme.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,272 +0,0 @@
-PNG
-
-   IHDR       ي   	pHYs    nu>  
-OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
-!{kּ>H3Q5B.@
-$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
-dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
-b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGwǈg(gwLӋT071oUX**|
-J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!ku5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
-M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
-yg"/6шC\*NH*Mz쑼5y$3,幄'LLݛ:v m2=:1qB!Mggfvˬen/kY-
-BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
-+V<*mOW~&zMk^ʂkU
-}]OX/Yߵa>(xoʿܔĹdff-[nڴVE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-6U#pDy	:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F WIDATxw|SsGJ;^aʆD)"8 UPQQnmVAT.¦,ʞmW{ܯe)ᣤ77{#)"      Xhh     Ƅ     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hT{           F     Q!     hTt4   r8;vXjU^ƍD "   PS6mݾ}{XXXHHѣi pCt   P#EEEIII6m*..زeKAA n   @۷oBFh~(B !   .\lٲt:V۴i]vO "   7׬Y|r???///NסCI~]vɲL[!   PEQ8ѧOoooFөSΝ;o߾}ժU6V B   :ϟwe6Gj͛78qot:i( p=    TZZ~kjiӦ!E7nlZ?sff&m    @VO:5|/[!I$I:u0auj| M    RzzmL&ԩSM&F;I|}}G=pӧOb t4   t{mٲ(BEQE$),,lƌB;     @ڵk7k,^o0\J>cƌ	oڴ n   @Z5HD[   @ME=  7G   Ii     5&;D -    Gv  E     Ш    D퇕z+%    h4>\t wF   xR'R q   A-Z$MLLJM p7:    Fh4lxl6+.f6#""Z	Y 9   l6gjZ+.Wiܣ=L n    TTXjCu 9   ]]E=$>    @M###cccy@]   DVbXVw3Ő=v$''c<0LQQQ6͖Z#5nh0"   <>&&mvفQQQ&s6->>^=QϜ1ILLBDDD U!   <j0`krREU-=fEFFZ,!h2jgXRSSkWS'6}Ձ    jؗ] :::66VկUCӈӴEDDT,KLL+&    (j/J'eW^ЫW#褤YϿKmJ={+=uE   xT͈'ՏLQOc2j,2}t/!!!:x=@MЙ   ,߄'''W[ЧJMMuy]bTh2l6fMNN޶m[n^-<=   Q=t%|Lb. ˲'W:f3)))YYYjbLP߈{    Ɩ+IMMu[}.4z<\5H			&!!A]:Vq   AanCBBbcc{0Wc65Nn6je
--_=   Q{L>]KWZ """))z?L&u׏"Btŀq   YbZ,h4戈꧸VX6M7%111111%%ݖja?1 A   xb2piZSf::HPlllJJ
-GĭNEUP+{    Uɶ˹]e>wݖXøG]d2]T<1T3   qcbbBBBOY&\c\\j@pCjjcZcbbjZ̐̀[!   <HBBkr.QG=6-555&&j2|{VOĘ=%hY 	   nmۖ<rEQjљK=222111::Zh4&$$bccSSSSSSlZxߩ!!!UM1v   Уm6z3,HNNV;T:Ԯ'**JMf3=ܙlNOOQτjV'zTO$,#   <hT4FΥ/d2\Dp"))j&'';_rx(11l-d*7:5[+>RCXh=   r7LWHt)3s|[FqѢE/\qjo^tt4Gq   YԒ5)wo*[Q(0( /   Ĕe6Ք&:sauO|||jjjJJ
-G 
-q   AV)\li:LEC;` b    fZ,zɹY;:D[   $%%Sq	!cbbBBB"##]?K:ٞ P=   gJHHRs5mIMM0`@sr3   %99999jZ,"tRm5$    x:h2,uԞ T    b&''<.f5B\ :D   x5Qn}l6ݻ;YUT5o v{    Z*af pg=   'UP $Ry   s$&&ƈJy\V^}->}~_ &   <HttCbbbjjfKMM5fd2%?7 POK>+   bXbbbPUZݓ7#@G?s$(    6-22f06bPrrfKIIf%. {    f=qqqexVklllrrrjjjrrr5 '   <Hrr"..nѢEzlL$urP q   AV(3`sE*RzdY%    YثF "   <:zUU{{U.] {    b2fǻHzE5"   <:4Obbbdd:Kjjtc03 9&b   <HtttrrbIMM0`dRy,Wtt:?W5 q   AFcJJթ֭VkI9v=t wF   x5Q|G}l6GEEU5j4#   <l65)){ 1T3   RK{$Ib pgT    :úk*.X+    X,T			P    4r111jc2"""\E=111 	q   ИY,W\\\zzzJJJJJʶmیF"99e{     ZSn.?kW#I     _QfjnT ;#   ?VY˅ ps=      
-q   J*_zg)
-=     = }h   3qqqxVq$I"Ӷ ඈ{   ,""RFe
-C5;3   b h{    \4E "   pqE3 3    G${       4*=    .     8t 7G     Ш    )EoQ     )I     D] ;    5v$\ Έ{    A 4k    @= n     Q!   PS{h
- pg=    jJzEaf pg=      
-q   rubf pg=    jՙ  wF   H= Έ{    \{ h    &b0`d2L&C   i=6bƈ͖8` ¡P    )Oq1qqq)))III6-66 @CA   dY7{DDl@B   \KgJl6Ѐ    h"{nlԘqP03    T">>>>>^9:::..6P    )EQi$lBfzrhX{    Ԕ$I2Lj c    8$y= @    )' "   PSjO.I<a잊l6[dddXXXXXXbb" E   4ј]W)))ѱ6{bf    59ݸ*h4.ZHD] =    .$IF{"   pṣ5O>]i mљ   @Mu=<3W||bIIId Ψ   PS=sfXP =    j5gv2			2v E   <d2U:;; :s   )Wugv   @M{<yf. pt   PS03p{    \	\F:JFC   dYo KϽW^sn=-آ`    wǗ {    Ԕkf. q   r0; 3    \ {     A    PS! 7F   73     )Y     F# &    pA    ő$I E   Q    a ps=    j|Pt 	    ԐT3 3    5%I  E   љ q     @B   9 n   E`v p=    jJ$IH|     ):s@@   Ԡ ps=    .$I  E   P n   E "   p    E q   b h{    \4:s;#   PS$3EQY=gur    {D# h@NcL&`hL   EQEhڵL2bĈM62    @[l٬Y_СC;v6mZ׮].    )F#jpÇ+lٲ6|g{쉊CCC.     jЀH2q5k|k׮=tPZZԩS{v   @M:s'ۼZі[>?]*ɲ\Skuez\׵*I-\Br+U@TvuuBUk݅r۩.ZX]ת2\;TjժrWXne_mvuYreb[{,VJo]{Zv\Yv*r[rRUj@E˝c6t-qJҲVuݯN e_ڵJ_\C`{O{{/ݺre@Zhe,!_v۶m{Wڵ뭷JII>|]wծ];$   ~/((0AAAexݚV;1+{Yһ߲yex_].
-)wg[n*9xs[suނUlu%VUѱcǲF{Ôr)CITZUz^}Ru\DUq5fCGQ(w.Ue**mJ5U\'yų@Ҝ)ݰrcӸZ9SޕL+=*|+]yw\<ѯvbxZpN<y<пV8>   PSz^QXX誛/{W^rYCt\RPiOXu_VzX_cŰ|bZ\]/Abj^QT)T<Re#גzjvC%BZfT+UKzVUX܆;+n깕f67]JSwe8kH\嶤q,yRDeujVÕ;v}ʕݺuڵ*q    O!IRhh`ܹs֭+s*PTN#ݣ2JKoWJ9UmTw*x\vJj)Mdʕ9[vjrY4smF*%buz˔T(*&*Mʝ3iPiG:[\mnXٖ/Y8쉧>lUUUK,Ij*ʽFCRp˕mq._ծ=ʾJwz]gVuoU\'aWT_ZZs	!:wܻwox>   Ν;wyF_XXXZZϪcT
-gVUkPUO5#*SnU?TU
-F*\T>
-f5,թt3WLUO,U\j+mn|nGJsQuASOS5_}+UpUkUl:9V`U|UlY/]Vr`FbjZoGf3226no9rDQݻ>|      P\\믿&L7n\׮]ҙ     4fҥKnZ\\6bĈ+O>~~~,     h)rԩKn޼e˖#G;vlFcU:s    ,33sݺuG޽{4ih&\
-q     hE)))e˫=*     FEC      4&=      
-q     @B     Ш      4*:    @9;vZW^ƍ
-
-M     cǎ+V֭[hhȑ#i pCt   P#EEEIII?n?|͛
-
-h pC=    jd߾}˗/,))q8ˁEe     {.\Xlفt:^ݵkO?D !    x͚5˗/j;v$ܵk,4     Q}$),,s۷o_jf     ]v#Gt:IZj5qD__o߾tP >{    Ttk׮jӦMڵN7nlZ?sff&m    @VO:5|/G(Fԩӄ	׭[P n   @ӷmf2Nj2i%IB=zONKK+))))) h    U޽۲eÇ_K<c!Dǎ]*l6z@]!   Pv͚5K!Zݣ(1cÛ6mEs52V599jZV׃&)**bfRSSzƸi4F#G
-   @Z%IR!D```@@ڽf+5q 䘘V$!!    fX,
-l2%55JrjUucjFFFSC   *頴qe=QQQ			eENBEM>=99f%''GGGsM    ˗X(
-Ocf=IIInR5c6-ZzTb'/ =   ǩ=(L-bL>]KHHH|||}0 e    G-ߨ5\hdRSSՌ&::晠bLNNBL&hbcc###ukWP)   _bccik>Ϻ:f3)))YYYH:ҹk嵘h    FQ-7͕Nbm6#""Z	=JLLT\LBBBjjjMLLV"::^]@E=   @c&IRَW:BjZ+WiZ:f\Mtttll:z259{    Ri-OEUݟS׃r_f,K5b֦Jd0    Y2:)`"Fjְ$&&cAM>]͘-ZĨ=@U{    \U|QcDDDTUSĨeDQQQtA   x"jXn,5a"*""BɻC,˛Lzl6'$$pj0;   YVkdddXXcccccc]o!]sU<T4bjjcZcbbjZ攔G   x:`FUoccc+K	ħVD׈Pl6[lllm1BH    GGGGGGlrw}"iFcBBBddڥ+99YԄE
-Փ*11f-Zd2Y,ĤKbJ"""*J4,=   Qo|ʎj:V|||56j<\U]إ({6V=@9=   g1LjSk1F1))j&''[,KŁx(11lzh2fk/u*>R$\"   <KT_AuG|[FqѢE/\qjof paf   fW=
-.\=> Έ{    %P_/W據\Uͅ+W 3   ũéǇg'&&\> @@   xu%WXVժ>RբB ps   x5X,IF:R٩*eYГ q   A,dRÝ @E   xԨfB2` d2M&x2   <NrrrLLLHHMUqC6bƈ͖8` uT&     			ɹ>=pCf9...%%%))fsX=   1L-ڶm[zzzBBBTTxsݙ:6=#   <:KRRRVVV'11ӟ˝l6<C5   h4FGGF)k
-|ܐ:Orrj]hx2   ClԲٝy$I=&>>>>>^9:::..6<q   YV+)dr\EQnc'0@   xf5)IF<!5 {    bZFEj%    fZ,(XJD    N%v=$$$222>>US5QEVa Og4   YG̕6`jrWg.{܇hTe_'&&m3   \s9Y,djX,bѢE<ᡬqCi   F2=L L&&e<=   X,j9lGe q   Y|GUq٬v諭Q{     $22255#QQQ5]z$Ib pg=   ',u:s5&)..v <q   A#"".6QFhfui ++++--`0TI.Vkz3%={ TjRSSFl6LjO #<΅^|^xGoڦ(3ȒQrYv˔}ՍB:)eeP*N[r[s;RW\K55h#h=v0϶wo>iҤ~]v ,KLLLٸGPUO?$ -{6햇߻:Av%g˧7wף>߲eƴ,KD' iFDDffX (99fTtWuC5׫A84~v=99O<􇾚nd=[C7u:///,--m<4 x5뉋JIIKHHضm[zz855599ҧ|׫y9@@uИ9sW^ꫯyoYRV 9vrw=s;vY é9N\\ܢEd2%%%3V?3sշϿ.w@@uM6M2eʔ)}/NWSJRivzO>?.,,Y YVQf_UN ovgr_:!rA73*1V^уf U,5ؑ] Q4ǎ[ȳ]vYoucnWbe(
-NXNl_qUD_gҍ|~NN IV5jOY h؜N/h"	!Ju*)(]z!j*.Rd?~ԪmP"!YhІ6	nG*Ik?}u|]_Ly褃4rՏ>h>}Z <dZ			k*cM] 4=@Cdɒ?pzkK]]?W_"]['Nty3*R=ꅠkrd,s'Ovmhۓt:BQb///'gΜYvz*nO[XVU+zŝUeEq\t._|LQU`ʊ	q	7Oϙ3;6mZpp0) ѱV5..l'tUuR1N3 9q8iii/ʕ+o]]
-a-Fk[I|=wooK$!+%ni|wGWqD}k:w2:BHbWG7wFmazMqόiP{1n3˱{]
-Jݯ~cYjUlll~z}nvU! _lXRSS`2BQJ`hL p[Fiiijjßx	1o<m=tpI=̷S
-7Oݢ>Nx`A+!(dO>m1ol6G7[Nh5~~Z/D遃N\7=[r5osli=m']%[|͔B?y|KwȢ[ΝV3C0o !јJsV:@\\\" 7Gu ?{gͽkڽB~zg5>|CZ]3Фݧ8VّmY?y+-;r2(4/ߠh$Ic+g_	}{|1<dY;/liOe}/ev]+9l3w]vu^ p+j4QQQUڣRr pk>xGPSʵ۾O˖WoѾOtڦ{lu!;jOd̾kځ;2uk~`GԵK禛hg[MK>9qEe_M^6{tO(%P}?>{oƌAAAq3fyѢE,5! 7Gg.~뮻^\ԧYUzG85/gQEw޵7umRӻW#G}}͚aϺ;>mBH-v>(#:eD#]9Ar]|ł`%s"r톰z_}ٿ o hdff>#;,XmCec}P.'wW/Ϧy;Z=tW@HpFSo}ݻq-2h/h*={h*TA:7>~֬-cO&%9Pd^ҕwS*;z[}ݼ<ޕ 8lȿL>Սv( wFg.-ȲaÆ'Oxo+4c};
-ʟF
-߿/((EESJK%uroG;ԅ&)ɊͲks:ntyw~~[~xaݫGzC֬Y6	 nbDFF?999!!!::bF] ?.߁YAAl6?<ic_Gп~ۓ߱u5/jbwiE^t8}|DQCQR"Ojشiwӊ"elF$D2e~䬙}tx%؝0>Cϟꫯ pĨYdpMSz  EQlׂzXM. ]{v&5>ѵP%n AA yykO=R%2")}JJJCQJ ^^RcaCs(!F*vW^?/)Xu++ՇMx޸/?iӦO| bX,Bm۶F!Drr^!$I M Ê駉'FGG%G{^_`y L2]}S>9Bc-̀9*blMCiwܬԷwaA=wiVc9{$#I+WϹq`#Sc)޺KQw4{ а;&rb{((rٗ_~k׮_$-g<>GQe㕞
-[<WBIs\1yԫlݖ~}ডZ!,ˊ1zxKF2Una0(V3''/?VWV$`ͥ\V`v{LNN6mڵkeYnoC\\fj /ɲ|С+22ҫEǿV^
-Rŧ׿!Zt_ΦJqg7S1
-!V~㉒#k.ikHӎu0YE!IM>{N2[YYYM$IRnU1  4=@=r8+W4уwvKm#u*+9g̻9t݀W<|hKueE?_||pv.-ﾷeڷeIR+%ݶ{ҵoκ2<>|w=7|3yu dY^ qP/rrr^|EſG=kWX}̷/ߗbazS?yAmZ:omoʲԾ[!S_zR!1jzp#dՑz!;/K,)uJA}~}ec;X (66V@TjF$ 9.)k׮ɓ'>ܫE6O}Vxсon{;Ca~9s׷Oǂ[5p@gly_M-ڴͼ.\ZI;u/L	O^
-s].>&MRTTD;] ԍ+V͚5E3!Dqd/~lX֣G=5R%[a33KΎ\|s~$D#$$Ȭ/J`@Y6/'߰ gò${{ÿL2e۷ݘ游Z<R nT'O|W\yŔcή)EG~7F_]BC
-ao͛[2f3g~}y9jM:8f¯V|8sGj4Ykvv-3&᩹?;a GDD2qnzsMeԅt9v:o˳\ޜaG?<eАFNɟtE6nǦ{Ļt!ٟq	=>r_%ͪ^
-{uy^xĉ42 4VjQ= Q\Kkڵ!lS\/w?mٺ.g !J(>q"{_E9{ffQI4#6ҢDN%/c1%%+u: @c
-z ".n9h"|*GIΖZkrv|5eWGbn]
-q\΢&^t+))͓9JHpDο}Oμ=%7%+ۼ7|ꩧ(FyE$$I {v~5j̙3GCV쨗ouy~Ⱥ'~cYd{l˗Zc<,kX}`زK(YtkƾV8=H9s+,rhL?wׯ:u5k
-ig hA 7F=P%K[}c[-κ!?SSpl7q[6_$D#	Qퟓ[j۷m?e25%_8q2K'FkcƠFZCSO[Zv[[}ϟӱcG ,8p`֬YGׄ.`%rDV?wů}*y& Jl.&0P{ِkSg͢e]^M]=ߺo,͸ؽۏݻw_K.-*ƃ q._|111y}z^|mzؖ;|k$ɰjVYz08ս[ȸ1=6~mꋯO'wwunӻ~K*f+uJy3[1y3<s (Bg. pg=/YΜ9+?~Mo1ϭo=oK83a7O+4b0I%rΝ=9w.Ks8i#c+W:/>|+̳[9|[ 4?Du 3x?cΜ9wՍ{>m"H_˔gjg\gj'BU:ӺuN~EUG}󹹴M~A7 R&+7Vv;t-:pIl   x.Ͷt҈'|2gH:}O[?ӿ{[.rX%cF!:"Ο/{<oVӹS;Iͦ}QÔ^?)%K,+Շ_x?7dgs(3 3xG>ڵ۴}LɏѶqC/vf)N#zb^݋$Q!	]9צugu}~};i_ɠڋ9g6}e>YMn{<H#@Cg. ps= ,OSL>}z^1'q^xS$E={Jr^M{l+",,lǎE/9k#|/ieE9vAmɓ'ΝGЫ   3:  ++kҥK,i֬YԽu(bto_ҫOأmFuyBdsja8rC~]wW`cϙsE:a5CO =
-~Ł6};{JkEh[_?z77mtwta *3 3{<x{=z#gWhZVPsf%!OZ~-5Uˠy]:qBfވmN<(5LY-EK¯`Z/:tw|3 IRBk KT4N+ytU,rOY^_PS'd4m}F6Ɠ'NkZRR|x^'VWg{#1/Uea;{zӦMSNСNeukZ^p=($*O)x[rOsU/]6jnU{Wմm/~[nrS^WsX!4ͅ
-
-
-ڷo߾}{ޏ @vG}SOi4~kR/S`yV$tkwzvk!R!
-8u¦zԾ)?q젠-|{qϾaβ5˗mv<>όY/~w4i[;rbR:+}EmU-֣>h\?}`n,I[UU=$>}nt~:66$OrU	} ^lٲW^Ahg\h#ӟS.^
-i:wXV`$	N|cǟwͳݛpvjiӱ]v={׶_⪼uJo~3g̙3gT%))HyI5J%|lٲsvؑj ps=hlC׮]jժ7lzZ^=x6M׭&M՟L84)m.[eJ>p~q'^ҥ;ϹIjW.b7?zRYgBptQ}joX<yLc&L?iZn'	psu ඈ{5kl?ݻbG(:WS/}<7Mo8SP\Tu!DAc}Ν+^fϩ%Lg	6p-c羚cZE{ेgܹsco.ɒFF>%E9Q{xnm̙ڵݧ+  
-
-
-:tQ
-l-p]?r^ߕuș_Ҿ]"YH|e՚.p$#u@C韧}WE۶m{^|)YO~nۧ\?jFGGOjeԩSSN}Oq !4N~~~4+WtK[_u7oѣG9rĲr:TZ+,t<g<+.|Qkvm<Or8|wij;\^z	ckl_=?0l~蠑qIM
-sm999&M{@]8e qׯرc[hn:o9^С=]_RKוE~~Bm۳>^Ǣ	!/\߲=}mÇ:)17o=u9RᑄwovԨQTk8}81>'?cƌo}Ν>,  !A#Wnݺ>|!^F!t֭ۮ]PSWN8V=y3'.h3xz԰]3mؤ󾴴>qok?dN>fG<xps^k(/Pǜގs-t~ɓ'޽f*K!IC5;#A$IR@@ty^ЎX``ϭ*.DvvIR%5ѷ4䕟'!|}4ͽԩL[1A*)}lQwtoJmz;$5Y˟?D<ӣAD%koyM;i9s⊕+W2pWY ඈ{И;o߾[nu\ůGٽH=-Ν/
-{mzՕ><pB6.d=C[՟gGG.aq_-GӲ֫)^9{zѣG?փ-A=R/8M"(:biӦ}v.p x߿w={oVZ5yP/oa+_z%ɦ/"DVfޫ=ʅIsB7m>(!DP6YSNUOcjYzmṗpk/ڹ7_|JQ9sm@CGi۶m```-yo;\pZqcjٗ$fgg|Q)6mv{70uجܝsO-͛wUWjqD# ;#Acj۴iӧO]v]p!fSq7nܳ/b -\~WϰE/3w5i4e
-ivړ%c}睏zs˲EK(X9)))ZsѼ#ezJ(v:{L(+B!zKRݗВȊ$PU0u[GYUUϪ+IBQ_(;u奩rr~趹c.z3j$("đGH{:ׇwlq~uO|`%-yoӧ!Diji&d2EGGL&s=h|||cǎe˖m1_,xn5n߾WS>y
-|.1'Nf̐m|
-
-Khzrx׾k׮yl֫)xjaS4źxwt;mZs~B5$Ę'B?N;NuleY(zhZ|{o\K|fSFw38>k9sx-[=REQhlAl6a6-KbbbbbbJJlq:B	EZl9tН;w?S煄&ԧOܝ>P	kӺu4Fܨ7_pwvv_7f=$i?P3gDGGzZMR?gӺOIzgϾ~ڴv郏w}4q!F%/OI;Pb_3k=V\x:ܰ|~c{-7^nM|[]lX)/dM޴iW_Q"IYzpfs\\\JJJRRfM:Ippp^"""$Iw|D~=];æ?[xϰАww-[zؐ_Εܹn%۔VJ|4"qotӦMy!{ˁQ;Ir?6m۶}K_mѻ~kءDׇ7-3gym3"dEHo)	}_Yh/{4vuaMϧ}he]rU;^e'N|':PY|h
-#˲wޜKg> E`S>}Ҷn/dy{k:j:?x@>C~}>钯}[VBk*_\ʇno2W1ht[iྷ/JeQɒ{1umO!!'
-mي$Y3ooBSӎ͵7]{
-5写'έxv*4$;[/~crOxlMQ|tyt,5jԂvPk"v*P'l6c hx&M=zĈ%%%;w9^]s;	JNVL8ז_H7A_<pW;n4t\,!!!:u?o,)8p`Q6KG>b3/k{מk!F#NB#)Yߥ=':vl[NaG^<1(?کyKN.i
-tR]GPяz~|}}̙s뭷nٲE}o\͖cZ#""hS4E8V|Mw|MԊ7<4xv;_0+&遧X/,I&ب~\[0s9_~Kwm#X +5oLBZPR*;:sWp:۞=Ւe+"{m=mLAS~MK{׏p҅zU.snLPP7pmmܸng0 !!!qqq	P{)|}}{ѥKիW(v^}w@@@S7uOßxY4=_.a?<qE-g\/;vwFIBsK͚/\6mMo;U^sӖc';wn#;o.F+]97kƲSa@[3p7uSY:}ٸ^KSKly鑤۴3gΌ3V^ϙ7' ***))))))===!!咉&]t2d32226.}(BߤK׮]nj1tP8eW8K(Y?y_/\.r@}U@GO|iӦeWytE?i3gszlVZ*tOvFfwѣGnm4ersG\ۥs`Pj՚ϗhnk{	!WNGK/h}'Z;st#)'4,=z7<$IjC܃Z3LQQQP1]vիѣG7Aoh^)(|mGW{.iU
-y_{ѬYG{NhGuk/tĹs][j4In}BIvvABIR|}``SBj,@QzEsGmԬOffAf͂<eȽr7:pm)OltZ5gގW{oΨ	#yYYYuX$1v 3xV>x;ڵ+_}\Ȋ
-ڭ[]vYv+ǿNM[=vڇzʖ~zу7ڼyUW]Gd<t#=zعCe!BH[!Νo4Oe!k$oac5?ZYjBhMB;UPhķ43KjtÈ3~$r6.;J({݇>NoG+k^x⫮?<{,<Fq ඈ{YS\\|o5{ZoR\L?eN7sn_{1\p6w?~wii==Iv(z	OWoyO?}KYh6Gz/Eq|NPNq84Εc/Vo{ZCB|u:Iٲvt:sJ$Iy7(ӳ[0Բjgg+ߺyݖx̻W&MOp3fKLLAK=8ڵ<xnv^TY5ѧOݻw(߷1smǎێdd;%ˊF#ڦM[uE},OFqL΀!/:R;u`Y6vWNA첲gIjjo|l%֣{ig}С:<p_^jmv]򳯾jPPЯ?=r^|Ut	NYEUP!	!󋽼|n{pݻm:"(AAz^+jN6ީ qCX~M.wxXk]ꢽ%,ygϞ=}.]p*P݃1IIIf"""cccF#\
-x^z6~۲}8:/*b~>JC^6w֥?}B{B
-lEvK׹S.vyy|}wk>NjԈ5zEu?u>##|oCv¼~ٗP㫗On'-,,4iдu*316Wu_|×%ńd<I||!!~e;5IlB轼ڵkѻWz$Wtj3;ݗ#hWSpDix'~omJ]n: w>Fᝩt_.]:cƌ믿>,,A.Q4E	!L&M͝ M Բeܹѣ{1t18.o߾EF3,+kS?v<k=6ci4)˲RTdeK1eCg676\Mv/
-!FgW>,:VNW:cjw\IjrW/޳EN盏uȑw:m6Z5_B4Y!m|:=t8/ se;~L9(Cw1ш"##zj^C˖Ey͛7oV-f?d!/֑ㇷ,TǟƊPtagGO826_⋨믿k׮hɅzMip{4iҷoN:__i)ħH1]n{.~'O![ڛ<J7~?Z*hB8;[v?u*ԡk}:o2bx:_99kޭY!wܘtr:B#[MЩSӮ-<ל<0֭[7y.vֺ
-G'??w~}s}Tq/}m|d՜,1<WI={fƍy3D{W31]1!y CS{tp:;ujޢ!'W>y2sa䠀g?-vsAۍi.7XZ|3#/?9׏~0a-2x`Q:7}t!D\\M\:x"V۪U1cddd>|xeR[JRP={ܿsfzOnn-1lG<y-skSWp$#sZ{ҵaPuɝN!A9kp`;Eݫu~mk̝=kێZO5iOpo3f>pǞ{;;+O/ϟ:u#z%龉_ߏ;vgs6Eҹ͇ػgˆM?<k4?):Fq86 ˗B47,9pË&E{fs$7ERB {j=˾xaMNzL$rkG}خs3f̜9s)A!AX,)))4P'	߿o߾]tϷX,>R~Ų׈)Nիz}馯h/y֓W|D]W>ꗵ0Ym|uk:)i)'}A;,L!N]$]>[Qܫjyǎho'v=yw``_mh;r^amVkl߾[MWRGy{`6cfsv//1}ZtM!vmZvj%AWTC%h/*!m(UƌfXso
-klsK8ͩ%{^E3{n!55nssMN.!ufchCy{{m۶a֭r[ZիסCv-P6cYo{LOu|/}_߯,+Nlx˲sm՚4![Uddkk64L,[mǄ;5ֵ1:v2hط{k?{ZwQˎ=1{~۷o߇I\ź݋w999ֽV\4ǅ]:鮽歧ϝwtGo??;>S*BW!bמ\Ir̼r˥g4{WV>^<iڨ?YWG\]rOX)SXk"v
-|PfsBBBDDl6͌\::ss:tǎ[lIKKf.$n)gϞW^O(j?9(,l=rE#;7oXgYg[~~^M!w9%ڵ}iLcG8۝BQ#;f骹Çoٚ!<EU5OoyNc]\ÿsrr+EJmrt2IOXj~v1(K01WױE34hCIՒۺ].j0g^ףEs.>rWp7jr:mUW^>u]v}a$R@{Y͞z_/<S-rW[4Kud2EGG@]^Xu}ݻw̧׭/yRPzܰw]{6HpJ3gs7oB|?/tV-G_Z**ICtTѹSӡ;
-!=#Gt
-Lp֌czv.5%'N߫t5~k=N#s_<=gժUZ{zDuRlSk`9r䕗.ZfઃBafܒV43[4 TE].vΎ}d&|;!{-:[#	Yl}4nh(ik7n*KK&룓5u[L
-{T̙O=ԫ:{쨨(^4 :s[_dھ}ׯ_yvm;u)ȗF8aC^b^B8cS[Ue=8oӖ]Oۡ@wwҼj;/j<V{qWl>RRӻu^݅txw1~/_*#PJ92x޿AK֣-Лoٺu/_\u#Ĩ:w?XZNwobXhR2f\FΝ+eΠÛ{Zi5#/Æ۹r"n]Hu\ ؛]`\t7^~#!!a^{mhh(7h\= ;#Gܹl޿ɓ'퇿u^cZɊy}XX֭[w>lH+	=wvts!AAޮ6VӲE^t6[bK,3]O~~ɹyZ][k/n+,,>NWBչMJ^P<CM++>˾ˌyT+rcA?yyyQQQ8oRSSǏ7dYTZ_3T\Ȳf}tвz|A󿷕F4Ci5wG8{_8F\}Y`٫O?Xϒ$%$}3f̸F#13eOFzխ[~_~eZ/Ǿ")`{22yMDdҔd}^LYΝn$qҹF2L}Jn-Gv[O<23gs/yщ7G22jN׵Mw9٪eЈ|}/nݹr4hF#ݦ1UT=ҥ_w/_O%%%y,u]9^FedMֺ{)//WIS>4oW!`WT,u˺w޾Ν֢emurm $QҭKɧ8zSU.04d[硏÷7+|^;gΜ6mhZ<9?vFÉGäi.M ׭[7|!-^oܶ_.],D%4\g?Zr?&̾l5}˴l׌_:|nS--uxy,{=5rxͯ`PK'O5>@sR\l
-<WNGvSϺ={\?+罓ur`gf#GF1뼻K~f*ŋ[jݷOW_MV*vl];=?h*mۆ&}6ĩ0t&9nŗ_~9sӧ13!7(%o;u?e_sB0" Ν;_={1b:Ga*E?C]x?llm3OEQ7W؊g_wsB]|ŎwlYữiӦEDTZOУhJgnݺɓ'/pz`@6Gn-ӽz?3;Bg&_ْC5;y˯2b̈W4gsY<){5j-ҽ{w*}VVZu뭷>>NF]|x_AvzNCZUVf_~ݵG笏*uJM?--mϾ!LASxG:wf&j5"$'Ӿ,\P_Y\%9Oo!dA^3wd8~:]TqjѺE'}1IEˎ}uA[wF:=2cN<yWGGGoذns> $0gϞZb|}9Wl9Gw6y/u7pԶ>@oM#Fx*ns`=|v-P``ޞV)p[JK?6ڰzdb˖c/زrddcP_ySOG=qq^BM{ύ~")g̙JJJ8׹' wF!o޽cZK~c)~>|ز3Gʀawxb/\ߍIݷkmGyM7}CwhqXzOvǖ7	[vaZZϿKK;!IҭsǽbǅLsｫw\߱,rݼSɏ>f9G qכAٳgݭVիr~%w
-PTKˣ9λر_n6tQ˯Ruo&Mܽw_4>s7^{dɇ}}9.SXd^s矽rnxyi;8y*./fn/?:dPV^r(!sZ{󖰰{gʔ)ɅAg. hw4ҥK=7oU+))rhtعs}_H<锔P|ε^W~~']67
-X?f~G>ִiӽﺣV\>C+6?{g3Je۶2\{f}Y{v|DK	qtcGO\s5IIIYFg. h{1#Gܹs^.0hX4a)AyofwoNNNFޚݪtIM7|ͷ<woZ$!9J{O>6mb;򅠣[(*rv޴l!4_ 8)$Mffaq1lJ<o\_ө)/D;SLyϟ?t26!jʣ(
-Q# 3M x{{nz7ow:bء1ߪUM6m5[#1|믿8:60[_z;wv;涝S?E=ߟW3Ma8γrJJ,(,ѽYa}#0__.	 /l/wؤ!eCg1I3oƼy&Nضm[fmG}eYP YB e搐<ժw粹X<9^^^~ЛBV|6mՏį:7z5tWz?>~;w&H6ݪ~yڴiǆWs@Jn^S:tPwk%C-[uPUWWR!_O^tDچ])oXR>#p_Ώy֤)Sj WyۦMqeeeڵgdm*vHͻGnO?ݽ1jDW!.h$YVEq=R粏KV|CU|;WW>+>?}zVvjG*]Rm!ڰt5Tz}|'Oe]v%|Ib`N#5ޗ~~~7x㘹äNE}.iOx6aϞ=7x;o\'r84;wf~zݻ/$/hSl=uEV\1I->	ëonс3'5X穫%?_bŊI&M:5<<zE =@CҧO[ٳg֭Mqj6Yd;>[Jʯ&,5b6ǩIQiRTB"?UmC(s}ʾD	TMr{Qեm]qSʭGќ={DBzdM=q[ZZZo*^NEEDk/,goF"qAoٺ'((-))p!UKggC/іa#bDӿœNJӕWEGGtM={ܖ8 hHv:x6ٳgЁo=:\``)S5@VK-sJϪt{vʾR}t_y*Vf-\J/n$٢%}kdoڳ#FytY\VSrrr߾}?]K`*u\^nnǵo#(-)βAu:sv{;co"^g_ֹvr:}"^?\t70dȐnaС:W}cT ;?P~EDDرcӦMv#Fke+M&hHq'0wܡsKFYW7|7xo^s[2g0rxXpFQD/ή[w0;;b`]f9<huݻw+:(:]g1!kРAs5z:`! FT˫E۷o?tЁ|{^Vra7=c矺#--m۶nk{e3Q'Pzo_tyD.W\*nAooQT${f˖CNYoѢɱK{!!ٯ;`d7֥,ѣGiJh]>B9F.0]{zzGQ@j3 5M Tr(mڴ1]tIOOX,b/3'LOKK9rï=vrSٻ~f:2v/бcͿzD$с(*RΝϗeٖUy˱Mӏ8kw8&_#!5ۼ@fV	˞{SȲn<y?ou\ϊFݞIzcǎwyܹsW\!@8N n{ZIСÐ!CΝ;~ne^G;o}~J>Ț-%o?yۭ7xlڿ+9y2S͸nJJM?[_ֲđ_|ę,WdOwUw$s<饕۷=h'E3y=ǟx≦MFGG3&88L5= Rm۶={l۶Cl٢5\m/yUZnSlWzP;χ=՗q	o$iX
-KKK_(4͚hDA37O64?xLi)M0#hW^>>~xqjUnjqWbaC⮹w}̙3bF  ETh:wܽ{͛7gm_⯣B&k㒅nw=G!otr>g+ҭ[?6pվtjpr;"lBgAҧW]?p<7N_^;OBCvׅK;v_|qԩ'dY(  H+hʷNײe>}l۶-##СCC4^.)^G?eիF7<>r]ЁTkR3Vs_xv,3p5P%>Cv>3jx&M|dٙUt:{yy!@6}z]!bw3wuO9_D^76㷹hIfY/bʔ)sU*Ci ,M TCѣ{ؼyo\a3ފ"EB$R+zk]+)6IҼ2ɖkPnYVl7ҭFPbTnkJoۤҳE=uY'z={?n6o{Vp__wod׮]~~~6&4k5`KJJn?>6m}h.w)[|޸5<񝒤jDnl:}Aýop}W_}i:wq*H2H3 =վCt~-Yd߾}wּǿ׺ėR]sfT@5P^T3Vp-mR5k+voѣG58κ;z-,))BGp9ʡ'674	v
-k{!ڶjreː:xNpd=E#w*>r-c=<k֬QwQȾs\|wy_[onݺqP$Ie f& K߿|_(2s`NW65S\=?+ReҕTpk(+66lQqc*&k+_ev-h6Wsmse*}˩RRt=ѵpٕ;pN#Xhvvf.Zv˖-۷o/))$i޽:zuQ/yy;|MzzCJH.D>{6'$ 	!irՁc-Zܱ`хC73>poMPPPΝ;v($_˝:uѣj....))ҫ {ws~ժU'ys3g,Π˻ʍYU#;bZc6;~/|u6nزeˑMhBeY[/JSxwXQgf˶V-}|5B[Z-w:Z4رYZک.M4]ׁ5k֬QH$5ǎ+((5۷'A%J/{  xA >|x͚5VomIqXs]nuD,'}JRSS˼oou?T")M,獧~OuW"ߐ?f
-2hvYoذ1ԩ3^^]9o_ݡwl8tбcjP5\Hs,??[n[Q	C. poL OFFo=cƌ>?Yw$-7"}/\x[Vw%m~䬗sY+Y=+Vqgyrq3Fߞakqpڟi,#D^>-v$ҩS;vYآEHʏW po=B:u?;?/IǅAHEEΜyyYfyyy[7.NsjzHW4__݂gc͚5D}x>3Xlh0JK5y%.:Dnn^iV-_8v0nSq4;87;siX:tꫬR(;vf߿I&΂{ |AX"!!p	4=^:}[+)ivS't?|ݺu,_w絾uoeI]7/~K?8}|!dE+<sac??Ci#/@h^ާWpQ`Ч[/7]ȲoQz|)ԩSv=$$$88iӦ2#<> Έ{๲WZt5ki{t-rGBժOII;2^0Ptb|^IMMڼ'SOql~&mǦCG
-f9֭kcH]:۳gOp[)e7nx֭[g 3׮]g޽{ѯGGw8wNȠe:zFG}yf!Ӛ	}<iZ8B9nKŅLGNxl~NѦ[:aOry/NqN,E|]>'Nk0B}=HvM~zo7o޾}{DT hCϺ:).._߻w/_x߹sQWc˭[fggϝ7Řw0-33500099yʴ|;2oT́pOv&3XQZ9ܿ߄GW]u;_p!3vm4{>ߝӧo/grȑΝ;++ C5S.G
-
-
-֯_?w믿GI:ɓACptlns1Lz=oNj5xsDvmgΜ:eeɲ/G=f=4VB9\z4;;\8"3+{͙'Oq"Zӯ_?ɯ>CҤ{gddh֭[7kˋ*OMIROg. P=hI4~?Ӽyϟ/HǏwTT$dE ˆsn`ӧOλ{SJJ\a[nw~w +:y|۶M">|ϿuTV$0˖WR"jf_pxVVh<[\E#
-56-===++K.͛7%5 әzz.Qnٲ~rssx	&9#0,!mvFcllA233mUi {ｊܽ .Qp7y܂ޒ$6~ᥗ̻}vBwѷX*BGo̸BT6XVަMފ`ovaÆo>44Gu猢0khڵ.|gs5ؚSAAm[n̙3-Z|uW=KЃM=`wcǞ<yO>Sr`0K/.)(9 kxSyo7yR[VBxyIyB^IrkʷWv{/_'G߾}5y-X(**jѢEӦM}||8 @C[l٬Y_5>>7صkWqqc۷oK.gΝ緤]|;w,P$I*XoG%+>?]Tu)VW>+>?.f۪JSAj/\ W{:`lǮ]
-_|Xʊ
-V?'ԴVM;Z ~mtر]h:z51IGD`L؄@	>193sy{tW%~dH EDMY$7^y~X,()nԙy!Vm|'ֻ7nx`gpޖ8+vҥ"Rt@pG@k  
-qܦM9jժK.%''7Btǝ?~Æ{UTr6#t#G>|mb2s;э6c.ڟ6߰iM!l>4߁nYn-BN#Pj)|Ed*T}pZCoSfs	64=QT ɐ@;gxCԯ~q%r_~2N"Oכ/]*xr}+QO	)?~ 	؈a*
-d_XXhm~tZ`t\}}=UؕJ%,'J 	0J5~={lذa߾}999ӦM~ɭsk׮رcƍ$IΝ; =v˖3g}x\!H!?GyajΎGn6/?Q䦿Yy;q\kl^{QM-Y7n[a÷'*/wH#O=EdVV֭[m6Ĕ1wFd//~w?St">w!ٚ_giZTRFR%pl= slM&Stt4X
-ad͛bw:KFf1{niI[M eouϩ&M7uvfL'7ϦD$Vo;70kJv<k׮w˚47mu8ޢ8p]i=^Xa?KLk rܔr{}͎hVMpoy[6ޛӢǛ7&jVeM{|o+ii_?Qwg7lϷ[%ݵkW{jڽlwM7gmPҷ8bQ[Mgk@;wR[?DC"7ovU&LH$.\322^xt$Lݼys˖-H$>༨(EEiI^[n]~~I-B׀7өg(99>!N,>[neYvСS"EΩۉS_rÇ^w#]D\KWX^qPtS.]~8|b!\KU_~=qgϞ<yrDDt hߎ;f͚e4J\.o>m14m>T5zH0Zo5#`Mm6_b"x|ֺe,Kyy9BHVnLi3 yTeق6Vn5n,hߴ֍~i-|PhhhA6[y_d˟7%qZDvLo֑66?]iU6߼"fyu94ML&G$)S}m#]qEEE[lټysmmɓ1BUUJJ\ٶm-5jg?,Fb='"{+VhllUh̡(*===++d2zY%K1?x:t5+#u~3jƌaÇ4ekT-Vk]}#BL*XqW-r3  ݽitHRGdjʛ@7ݪ"aeљ[Mn¦EM9Vl	7b:Xf|uPS0LP Zm뗷i,lgW*-Y#Mao[kcS6P[u 8#E6-)J@BV/-vz[͘fnk\k3*Ź֢[-xn--U͵y(an߹sgTTTdddӔU j,666]vڵfy5Uu5*.vj6l[1BAaf|l6_.ͷuVs:?3gΔd֭;qA4y_|ĽiъGNj=L+ZZgBU~7XSPUKvoxltL.+Q]]#H nswwxaaa~~~ǜi͓n"i18[B?68Li1ns_Jjp<޴ۨ6bbJ-rZ$)4[i|fi>k5F5`4`|0#Dǌ0h3ˣy5-Mmر-MXuxW5r*r(]d<8$Z}ZZGZlyh'cNl^ @pӑID	j_AzlUUU555z!5{@ڵkݺu%%%GRRʃ8||B"`6pٳg/G u_X	ظq#GfR0'TnXA;PcǎM!d#$jޓ![}zG8bNCԖXAA@ G|'8Bׯ_ʻvDFFn޼Y(8.HL&fcQ-Ji1m_EF@;qj;
-Z865NN;+T43[ysZmMz;bQ@^qt넦;朦gmy޹uu[5?l3gV!6gmnVC^5Xr[5{GX,G=tPMMqOHH1bD|||w
-@eTTT<xpҥ7oޜ<y3&`fw3gbcc{fRlTB4>oѣG>xաUU68f͚9	U-&?޲w^ZrB>,lcSFa4rNg{wj㹬'|rԨQ>>>   +Œw{fggL};vёb}^]@uuѣGWZh>xAZ-[_;wj.??/>[߻"pء˾z^[oMvfY߲*
-WX?j~T}/+rxCxB-[|}u 3l&]f"""b$`y^   1Nwkמ>}b:t	z2:-xwygƍ7iY!_UV}''$ލ1Aoh:lG=qr8ò|~`DZ\\_^^O)0+	N8s׉^Qn 6qy`$"gMdMN+WRz   t_X+,,oN<=eʔG}tڴiaaa|>AtRa߾}?/Lpp`Efud55^O@SL@)o3&>zhvvpРr9n8{^+$S˯]My!sFb6Oq{yzE!@[XVu{ŋzfr82g?{lXXؠA)N3  nQI"Ϙ1cڴi1115	{@qjLMM]dP(|WիWXe%a2rO_}aV}dCo/\AСĢѣi$G9z(3חp~E*^+0+--qFNN̦aNf
-Yu\?A 9> f4W=S\\<x`JV%حs:q^		6lH$.   ]	F.J;b9qħ~?=&]VO,ϟftϨz;%fY8Ts^^&V KG[[/?|cl	!!.nRFFz.--Y=	9!	X޾Ds?VUY  se!FM9tJ2)	/.pP(LHH   a$IRuAt
-V}_|>}\xP [wʕzC5],kaKgR*L&L8cێˉcbt:<J?zTw'NI#K7{dkkk
-
-2H+rq</;BsC]e'˃ c/\B3b!aQمÆ:   @7pK.}'/3g·Fhh FĲ.V._AQٰŋcƌá^ZKY'yW<;VOfy=>r%	pu:i>,={رc*UB|-HT_YSSTTdaԁ
-wƬ.d"Q^<{<,)P  BHopxȐ!'­$]vUUUhz   =஡iK.+++̙F<ޕ=XۗIxwa?\y}kV2q#0jHOvLo 0#?.kYf|!M_
-Ɇ!p6鐄a`>yѣG1l!FL$3dHNw\Z˪B
-#;>ʑ<Dw='ɓ'NՍ9H.:>^q?/ۃaبQPIaq΀ͻtիװa
-EQ   @wpw\ti~iii>xF#?S~~nڴÇٴ6>Oi̇>z_x7s![ay~>Tpω/;T-=].I;%!/O-w~:t`h\pرc%*qyY=Cu4]VVvcG`@s$	]/>v,11A)a;p/.]1F+S7!ÂG-))	>|xxxJ.    =
--[N4)uڴ$׻r8vݻ%'4xND:y]c2	2[{h~~EH៧bPcvo>TM3&J!uތY/?4s	a/z#G,#G*\	e@2n/,,,..).#'q+F_+9wܑc%Ctܣtz#F(X<3gZmLL̐!Cj5    l~SN5sx0nVk٣ObENV7~|hhOb8yo*B"GEkU;w]>0I"G}{{4\})$EC׳g	ì4r2!''رc{:>M{l~Yʕ+UEՑXߋѧ̙3{3.cǀ4˲6r4"Z<WV bԨQuL.j$JΖ<x A\:~W E Spp:a***VX<yrĈ_Λ,˪1Kv/_v
-H93RICgk.X&dL!׽OkW?O!tzMJxbÿtDD="$!ReLN
-ì}PPy'N\R9~|ͦ24eee~ 8aV^ese3_Hp4
-ei80,r0aXb8۶7sM%VĎVXtyyT&hw?VQz`
-Y3l]˝?tGh4HpG
-/^lٲܸ h  HhT%%%YYYk֬)//OJJzzԨ2TT(
-
-СWGGGK1eukܟ=wθ ?!`ğ%D۱{0àii/$I6xyҧ_燤Ý}X1rؿr.(?jD+ț9;3	Z>wѣ,X0NN~ȢwLQ*˥KzccutqT8,\m۶ǟ\/7Q{z˕*}~AmAAqB,	C+ίgPbfqkh0Hww	BH"h^rH"瓷wV+m0]\^Y#%a=<By<]ᥥ ..riOQr%H0ׯ߻wnqɓ'5X, ~TTT:thʕEEEz4=Ձ9lYXXW_7Ê:m17*BhփCAU+1!7*;(
-ݎ19;w]sOGcr=k	45?:" 8ngF ƛ;v앷ުyG(
-3a7q|ŊEEE~X6:G=ɏw|!<㸝;w>69QuvTOˎ;_՚&e$}^|nzDa3Ňޜ>J%qǱIzxT5e=*"$Ͼ<g_NEވrD(o/Y\_>vsߵyX,(gtxMM^'I2$$MP@;rʕ͛7qGQԁFշo:  Ё`2xUUUׯyfZ& 
-]ZÛ7?[ߚ79_N>Ih"~wVkxkX70Gd9AG.״A
-&يʷ,c
-	
-wЛo5sXI$C׮_IpBh<1FN	
-001ԩS.]G$rDHt}z4޼ySjQ s&(Qx'I^P@k]]_{:[[k0[&=:w796aHh^E\Q(9DWsxdvdx{Ϟ+zܿ_PPȑ$u w3f8:r`=}kjWU]RZQqʇfo|5;;;(((|d5hVɜ8p`\\X,Q:}?ݻ9#ۻӳwP  :8<dΝ;׭[wʕ]'z?^g
-Wh.цesoMG7PY^zqHBGWif`z-zCL].*GX5&Pxr_fóBI{aoSuET'64"9¹UϿ@e˖^K:=;UqJ$իW_reڵVu/bN(chX/|h)B^~!kwzZ]aުj=B(&F%(Q88L&hH?.3eR+N76Z(p)b7n>_QxXy^#yCE"M3zkx<cώK˗,=|zog!d***0{ΛɅpTB8frbnbٳg͛E"B鐐k׮ݻwȐ!	  :RaϞ=<XMYQAԸr7ÄO>9v?qmĤ*3vfzfpй X_~<it_AżʪzÅBL&y!(Pa!N{΋!"eUUy:Ip=*z}3f(--~nUңs=аnݺ#+N18=fͲZ.ZG&=9B!Uzz}Y܇|i,H>r77JX,*]Aa]^~ͼFec}@;_zZ%=*w/f-,7Jk/'M!(%Mdg]!Q{EEEa쨴QTFDDC(BvZzzzaaa^|>aaaagϞݵkVV N=ݷo,X;;vDe%ݰx{q3.=vؓO>i3е2P\ b9ި$IS\)64 BH$$|}|D,,6EQ|C1U:!%'I2!alDD qeF8_%_}fG}lK">,%%E7f,=dg1'pySRRB_|Snk)5'OtR)zd΀AB;̲\Aaݧ_d͘џOEk6uY4B!8'IsN*4~'竘0.!t=Bv$Hja	=!~Yw&j%4ͿtRYYL&FqȷA]UUe4U*UhhH$((nWMM͆.\hF$aǏD>{,0P  y@};v?/XYY/nxчqE7gN~ǎ3fHGf(+6iII-BOEnjkJDUX=hòij-BH"`Be!&qS)rsiQ/Caܵ+?]|JJ
-0__5`DC駟1bN۸q㦯/1)3Y]DU*/յ{`^^m0!TJoխy5g|icU:R70<3o͚/8Y%"|v;sDAQ<O443;C|>),V!_Pk׫D^^q1115,2f sssvL&STf;|}1cFddW#ѣ5M~~~VVV]]h_ZZZRRy QvcY,Ço޼933_&.+CUU.T?,ZSLyi_PZ\RaJ)@LYYJΣB`fDT*M^-zwWR$e;h
-IPSS zj"C4B{d#p駟fuwG
-SOq={liOMXAWagEtlɶmf1"DwמBe61i3;/֬=aӹѹ	rLՊE3e^]d>O9<#G/[qԙ"#~+7rxg/\,tOq+J]f^#Kql'(-)PLƱ9Ec7nܨށ!(nS~~͛G=nܸ!=z;vlNNί:|$AhݩLLLTwnZ633Gߙ3j5 l޸qC<<<^ٞ2TV`5z~ϦE
-*~ZB؈ku" pXvEpYmፍvՊrS1췛qGӎd)Yv!L(8~3
-HȯBw߭\R-yq/G|HgJ<xQ=vu|J+ƹ=>WK322&73QBn٭V+a`eYN>E>STWgtCb}򔆪=K]ɩX8"!!'Y]_o:qpp?_B'LݲBaQݡ_o)'ќ}l#X{LfWP\\C/6,˲}=9sFVO6MV;pH$1bđ#GN<3l0ǃh݀VMMMMMMm'Gm&-\p-. =otk׮=tP(5ks=z]/[jѯK*.C\c Gp8Lqa<lN8&466.Y "!vV(e0X| HjQ,^7oތaǏ=|֭[O<iْmJr|xDWOO5۴z+qYeFEz+"G:M@;,UV	85x:(P	;9v˶gϗly)$40$:'lcy7o8D/lӅyy5*M{9덦bCT/\;[Ta d	}'R 
-D"8{m~}||x<^
-\9
-6Ϝ9!suXORRRvv6BHT&''k4GMvvvfftYEJұ'HR\`t wl6_reݺu$IN4ƳvuV*%\YYY9roVPYjlnb@@>sn|DXYi	8='
-H̷[_^qF#VYS
-Hq]뛨@^ꫯ6mTWWK/pv,\/Ϛ޽{O8a6g;~PbiSߧtҥ~<ٺ_yҕ5כL6/pZiT PM[6ۯ$O$^[kXL\Y̫9{o ^cϝ/|ɂ؞;ܓsrGx^CxEEEuuGϞ=Yg.ݼq(///  n_``ٳ)xE 92""ÃCsuMK:+w%xF줤$G"{ pvk֬aYv֬Y[R\D_~)))<xpڒo"_{y*,@ G	"BN"IlXBM!91b<a!PqI^!IİHo`B*8Ȼz:te9uՈvnq^̙<oϞ=.\0}c2އ
-R>GΟ?ؓ/x˅Czdf]5lvo1Qw޲h7a+G4۴:VHy,˝;_:q|OBCZDF!cXeѼcc"FθiixLCtuIgݽLU볿bA;  D°<2L*BHMMuzRRR.]IJT 4͂.\آ  =yΝ;waX&O՘k=P֭999}<ۣAA^$Y֚Sx>#184CqYшausQWUN\BE㢣Bv{zB{%8RϿީS^{7^{mNYβkkoD^RR˪_fs&x2r,HzS={v>|i^ʍ
-O*\сCd2]#++oq,yzABu1q8Q$acrl)!/>hM[_Xs"$1/,ЄN,<4ǝ&h[/o<`F/&ڇ$Id?}tyy+19FZVղ,)`X h?܃RwT';;;551Y`AJJJ   {Dteenؘ1!=ݿٸڵk}7ʺq!2!S2v;E޽U*y!Qv=xfBH$buVXut
-x4}iT!1,m}#Bq)0,2=䬝:و۩?=uԂ߮׿Fn3GDzzׯ_	Ƚgu$#E>'6|o߾^?8ß"ݩ/{̬ko{-%zJb'	<yzeGy4OIܴ|E^2PH?׶*tǎ#O0K_VrsOڻ{;փXھj0|}}1bΙ!Ό*+*===}||B!j@/(R4
-!VQ9sy{j}  2& \}l^^޷~/Y$88z|vｇ釷2>*/ܤW/Ο/p:D0ivMB^RPPWSK4JY15,)8O#d:8Pe%uۑfwS!PC#s@/?_Xy>ycyyyWuuy_TBRRrr˗믢jc;Y2{p)S4440\ݩ+E"SI&,_}{荷>Gӷ=H-]eGe$7/8:2&ngN.,*ohЈp/y׮ي~eS˅t@G ^>e6^~~V
-
-qv]1A}D	r1PrLB:뎺ZVTfddקS~IIIp m\@ +V<ß|Idd?5ܥ_q?Z?1Y^FG^O#xLc[cߏ?{fGa8[,;m,yO=#}__JEsgq!t-fn=7_6eʔ>蓢"D|B=*+IL|BCC+**V\yr9pF!<aԩ፷>
-ϐðfYcO^<]\U7[֨nh0זW4Z4BC{<:wPHUT6~wos%ϗ¢RG!0@94!!t=⦗(LEި>}|Cnqٱo}/.(Pe3Vng<zڵk4M5ffQ*AAAӯ){Z|4G^ҥK.]웎p¤PxlRtRGt	 hPQQ}WFEE}`@/sWAA<xdʠzih1O.c{tkF[꧑^ۿ|E)\G19VXG8᎚F.aߊpgB4oڒ`㿛(xq
-q;w\xgGTQܭZūV|MfЇj9 	ˎ{aq6m˟+~1V"n6(g=-[ec^Q1>nb@`Pz@ռ&qðyO&P#7nxFI{Ib홳ESw&M 4EOj:#7$FCG$p]1#ؤ^q~3̻x|5MW}ǥ'M&M3Cِa	=b{v97AAAcTCd^^^*u$sm ǢEBPJJɌUǱ|G6 -1аk׮͛7|x.T.9{v?8Vuov
-s3U7[ʀ/>xR*Y|>.^-.`=qTk갯ϻۂ_~90lhA1p"t?a!_~6O(nڴ?={#GJ^ʞϛrSNmݺsxCuLLc';Rt͚57nKTSWާWמ޻jEe㯇oz&E<oh,g693FձR)zQ=c|~8zx~Iv+WxvZiGJNňaa~{\^{*_orOˎ_VyZeDP"E{=JJf$:OO4Cl1Cv;%kx%Slv޵kH
-
-Qm]TTT$P(j5Cf7 9i4Oh-Z$jiiiS*? k֬pBll믿LTywCݍ{B.˳Iǻ&  G_zG~׍bEee3g2y}EB{6cZܸ$oȊa=hZ?Y<[,XOP_~eٲe%+-uv%<=ќ9vݑ=$sFi>t^HzWץ}!tB!/>pRYZ&Ie9@@yxH	Hټ*3ccR_R~DA*=Ͱ$,GZ?>w?T+O$I%9(x酑~
-aJJe!Ql#gYZ'9+͞nk7n8R{j8)#;fεsqA%	:\]~~mr_:vVŞ(pB  {]eeÇW\yʕ7xcBGK!||ms@<GB pPDց{sx<!$Wkp@9;xyKJKkBG^8vxn;|T{Ӿ{oo1Bݝy~~К5k-[f0>~b'OdYIj޼_~СCtO/b?ev#1ɼ۷~\:Ċ![wM
-W+GElβ,|E8GT(D8 o@FӬ#vAOxDWҷO#$DQDӆb{yAENVv8e[_.BCC119r;
-q
-8~xJzz?NLLU
-h4)))  s`h49rdΝ]SpAծ?D(N2'E
- -|'s\x ހڊfZnu8K0	\\ŧ͜vlR,pD"Y|zGs9=6QY[/H${9r$IX1+q2:rVsOСC5/p%|ivW0V;cy{nQQQQ<'m	B0  ϏaptAİ[KLLT*o3xZ+cA nyMp/tzw{^zi˫Nj\:sL,~`M6M:ug^y/T@bps[=QmhJhظ+/{hԿw+0l**==￿uuc?P(=F`NXBC=򳾾O~%sp:g|T*9qGj4MEDD] jݪmLnqĹ;\ix @hMן:u_g/^8uU=+*KJ\v7i+WZjĈw,xE_	_7Fvi;<òhiq閝}fmf|ؐS	81^[b_u??m۶Wg8g{lȐ!;wи)QF`ԩSsYp N%%%EEE]qΙW"6֯Zd2???$%	LÜtc)))NZZڼy2(]MMMMOOo @sp2͎q222pONN~n J@
-q'NF(A:vrolU5j<q,´gOihD-:|="MzoSկq/~J2cfs`&y{<yl6Oo4ƛU8aVIT>#?^pᡇS?^*01 :b?"**J,rxGzj\\bW}	bƔJҥK% G0??߱$VਞxV]`Zv~UJRdgg;R{JE hy5M0s̙-[l߾͘1RzdofҤIϤt+F:(V5Ki~Ѥ՟}9vLܒUט}}t9oxE?>}=7gR97nP(zQBcǎ/L'q2ç|F9Thު/9ylS)R 8D>^SSQ,E0C4VPPH$H$bX |7:1RRR`8=ݝF˛7ocVjjj;OV*Pzz#ݦc9*1Z~{pOb0lٲ~8nܸWF-+CV*=!m[QQQll_=PP1tPǪdrAqmG	>>޹7 Z"'7/^|ҥTŘѹ/<>pDnݺիVϰ̈;~ᬤ/fW_l~Y~9>.8"00gϞsR^HK]ejkk}||] u͛h*k462r: 폓;hOj}l8CiiikBGFYhQ󉄭iSbb3g233ZmSFFq@gu8$avVի7n0,!!a^BBP}=w=mN,>yyy~1=B0dp=NPqhnAAD"׫O٬"I8AXN?>|TT/".tapvqㆿԩSLY	&lx!{nάP pYl~aÆ'x]R36[HsyzzӦMsww5@۩ӼhѢ6Zڽ{O<|_$1  tFܵqGtNNNVVֲeN55knqBaW7^|9**oBIlv.j'q HɍH&Fm1R`,>{EzjAx.,|%)M6Zh:^Ez۷W>vw*6"PpWP˗m6޳Ή8Fcׯ_/++0/008ns˭.n1  t	,KQQw]SShN<l&];m$ػرcQQQ?wl=SlFE$$czeB̲U~Yǳ.n1&}۷﫯b}XQE7PS`0$W^]RRm62!89>ΑaSU*զMǚZU) ǰ,`PTQQQc3	øfngNN˲JeYoaQ[  ]U#Ô޽{֭_c?Z$#//cv	YoDde$ɒ~;4!.;zI)_n:o={>s{0YsWÌFw!C$ɚ5krrr233ILxp ?d/cɲ7mڄէ2fyyWkkk%B9ӸB-//d
-ӓ8=  %@)((8vؖ-[
-
-
-;"K]9I}ж/^1,8V	25f]whXӳb}_Tl< =/D(xqP(ܸq7|7eWI	bYn׫䅞=ٳ嗛7onڴh4&><BA=CMa@ ظqczچ'$Zm!jc9έߟ;{r[o[?^9>nvުh¿xV-к/?fOt͵)zfߴ-B.طo_NNNppПb	sFX^^^QQMQQQ XQ۱ѭ
-3uvC  :3tUUUرcŊxW8c*8z+,XL!ETAXm/>;&1ۥX?_7t|ތ>௄~:M6\b,~ogWbYYih㏯_ĉ;wtS(0y{ҥsedd\|Y,784Յe٦Lņ[j0s<ζ-ViV7ZzOh8œ[|񗃷?ogwb;wGh;s.˾ks	0hjpVk~~P(ݻ7;WS]p̛7yE5{k]'''vNa8   =Շڼy###'S4z?ng$I>sfJ(!]ϭpON&PMMݶ97f=7h/>#J׬YqF{ z
->AǏȰX,S禑2N|º'zƆ(nMAKEw[ZډK
-->_wF;k[7i;[s[?VG8ms?ZZTߪy<^~~d
-Rv'V|VeNc=n!--͑\  [l~zpp~J%rqFO'ه7ld<܇܅J+=ee5n
-ȹf؟u%00jgFGn߹[o dR
-o'V^f͚z*=DUUO*'(ĉǎ3s{UrB;~8º'B8C h	JpXy/öf^xUǜC{!CӪfêC}}=ϏJ|>@XOJJJJJVMJJjfgg}F  ]N8V{رM6;w+%%QQ]rm=fū?b<O<'T ez&2Ю9{G)v8tpɀUV?Xv.%HҶo߮~z=f4:q,Kvww{晥"QfffNN5nCŌY ~+sX-vW.ֳgh$R)!.]j>ROz  iA8d2=ztǎ'Ns̙UR]'z?w~B(9990
-裻No`
-}zϾMΝwæokR!|o`h+pՇ{>--СCf꫓q띺]^m77cvĉ'NXd4w;'9XBۃqXcccaaa]]]``/˲0&mRՎXOnf3  =VrҥK<}911>՘h4GZ7Sccѣ_|BVP)tP'hkzx=_m63QK,C^x}OpfPU1B/|套ܟ
-p\>gϞƇtFJX!Z&|||H$lD  Ahhh8sݻk6Ν`0:WzTf~C}遾%@u*43\:4Ӄg2%:;LifGP)Uw}wԩSSM?":SK44LT(;w]|^G!_ 0dzֱWXXJmR*Z655J̎?9{=)>>Zȏks: :8`0dff}뭷Μ93s̬/GbV3z7+^ _"XΦyccc#x<M^[7MQxZ,37fY3>ZTTԅ+*.0͙3|u֝Iȕf n}1zx<Whh(iZp[dff&%%94jJ!hlRjoUN{&NWXX~}8>r'Bkk](p|Zɰb:jŲk^q!= A`E$a9e56O邿@ԧ<ꫯN<۟{h+Eս3y2߰aC]]ݮ]h77qI7bfVPA'm[hQvvvvvvjjjjj0sZZZ!Fs>(AfѢE322Y@罤&+VKۗqqF#@'W*6o|r~}ᘈr
-:93F1)qiF=oS_RC/q8;;ﾳ=[ѼZn3iz^R0{ۺu+Bh>7Ɛ4t -0P(:q	Bhp+J2##pPh
- ׯ_W0ܫ5dN=F˗wرf0ac5RXG5k
-
-
-zogb.p1!5"a8EyyL?qjAA5B1$2OG_~СCK,z%NeTU<~@ ذaCqqut:!H`u #Dң&I(bhG';;;333;;1KTj48_k@iZ:9`(,,ܱcǾ}z#l6ҵ˫sbyjɎG	q:Z:ШnJ$KJ&B/ 
-!?cim//*|N/)qnjQV`@yWn߾]N;^+`pT[%dUd@???wwwֲj#~dc=(ⓞfs :0W\ػwo}}FylTek{<뛶{¾	VZ,VTUC{Xv#Hf3sX̤}n#P m!~SmڴiŊv>ZXҴgq*_x1++Iǉ: n't:]ee%BH*z{{KR(ڱp[>`28]9@gV貲],>>'qdU]xwǋ=|x/c^,ڵ25YWx$7oV,{ͪoTk+̞<h4E|,n߾}ӦM6mС.خ깐b,e\ri'?<A/a@;aXfEDD(nGzzzzzy4@j%'';h40t~qVQQcǎ]v/X`L&-s)N,.twl߾_Oϝ%QA]WZT\Q}<܅<w+7V/2ٗezͺ^=}@G`J?Z4W lܸq֭t]':}V=GYf͉'<q\%YГec1|8ZIg|?9aY/_ͥiZT	ڷtRGQhN>M{%FV;= t	q˗;wNVϙ3g^L.EǏOLL\蹸b ӵF#˲#E}F^TԸvJ@l
-v{j :
-W<f̘K.;w.###bZW>c>d2]v_-**WT-f( ;F2紿ogon|;v`bm7'6~Nb)270hcXbȺ`gfffffiܧ   {CZAAA3fx<6VBY8bvHtLtGO!!a6[v1v---pl-ZY,>}XmeyOIIV5Ս-B'mT׺q};{9B:d:]23޶wl'aAEjoooDpjuJJJJJVMOOojmVuAEp   v;q300W&Q	]aYerhq&L!6Eu<f,uW~*!$c{=vn0((1bC]+ z߿'!*lvs.ٿsРA&44T$aƲ:ZĀn3B_ۏ>Z-Z|;t%Dn?˼ی˴6{v3բmpOqU5tO[l󵷊%9!Iag
-{ߠT*SRRJRLKK˳Af IMMȀ (bYK ,KA5*׮ۏ149j:cN[o}䲑oyƴ(w7L#Ќl:E]_/L]%(@M!/ܹSP<PUN(,JO>u0cƌrG/Hso#7ްډqM=iCS^OffVmz\VߪxpOqhZ)55/ `,
-^aH$r<Bwm*D"8BF(M] #QN\x_TLϏG2XM:s?VjBwW{J裏>X+<=/]:|f4hPbbb||D"  mMQ;*&''9uh?cVE˼y@g樏+B!0%%%V1}0%B$990taV+{Jl?tO%|P&#üzdpP"#BgFn&Ev6m#ނJlݿ:zt޽0`	d/  ͛7E2FqDyhmi  Xt4A(!M&@ 0!,+
-B!Ǳ,N>
-9!4zD@QQ幋ZP$@ި>[TGaŋFzİt7otӧO!:ZT^\s}xxvm߾}&Lh4^^^/  O;T*-Zw̙  @Ʋc~@ 
-
-Z$I2|>rn'~2FG]Z]1$C("B>郖~T"@qN.JH׮LrY՚tvÆ:nOJ\T
-뽼6ݸq㒒&Nؿ777  (Zv.LKKk^/j 3nPgYV"Bm6BfF]!Bauuueeb8K1%Q͖`Fܹy79av[Y x<K癛[;ư{?ҥK/&$xni?R"++088x			P  ;Bϛ7OR%%%6Q&s @N@t,RǏ(v;BHE<O,Cm7`0r8{yJI3<TZ{ȱRJRVMIvS]]]BB³ÇTW#W 3n1_TT<zAmd  (K.w}Ӹ233.\NܧB3jAV/Zt6p03Q4j!Cc[<uwww,Wl4!Kcq_0xl׋{8]\\ Bԩ|.>'_>''gܸqyRlvɖouuk׮zj``qF  pGܧED@S	t6prƱ&c
-U~~f
-4E!/ǎ8ǡߧv.roS0:"	C_YR`X"!tpm'Bg4Dmu~ҥƅWVˬT]veee1z!Cj  ΦT*ju;7iJꁈ  tf{#l6b,HjD"1L8܅q;x<kjjf3.':>rjc[v;0*/O翺>VxNo	!QVXaړ'O=4mZY]vv]XX8bĈPZ   !;;;333===;;VȻ =O,#<==afF$Bb$FGMS|
-G>]F՛U~-Gm!c^k^^W?1x砡U׳ޞ/YYY<DhhpͶY~߾ӧOKıcFFFB^  8#ޢ@FINNNNNngQvGv]]<!3{:MbeYS8cpsa'l6lb=]UCNv|RA1oR0㸆['j(굜[AaUAQct
-}INNϲ.=<rgΜ(j#GX  8CRRRfffGku&Xt]߷xt:0#8dwkFFtPըtNN9R$#,cvB.̞GGᱧ>]0.э wdqٹ]vM<!uņq
-qo߾#F		
-/  T/4^-^_5 X 2$R%Z:QGI$B4tSWT[k3DGZvǃ	E|ݱq$IwŬP(Bl4I=Ѡ۶m'N++sX|!6vڵׯ0lIIIo<   ܦ䔔e	  A	D)VŘ8N*2c0pOU[g6o-o8ok,C|{_u,˲,Q&LU'	V!**j,=5{ꂵk2c=٣5fb7={8qjܸq~  IIIq#---33Sfff*JFV)?}	=  йAqǲ,EQ&8՚^Uv |BqaE֙hڮR")/]^hag6mwlfYlk޽	&<#wU
-_믿ZǏ3O>/  lk#JKKKNN^tr   X=4ڃ8Mbd2nUL&sww0b`,WrDqqEk%r^>_'^}i"0ȧp%4ǰUkk֬j'OUU5u7|Bƍ}UVV6l/+  p*VILL\`AJJJ<-//1Af   Q"a8;{avH40Gb˱آr,;PYYqLb0dg_jq#BfT;7*..?~zzym,/,))	1bD~_  RSSZ-BhѢE)))ͳx.\|r|  3잎00L Pe4kjjXeR,a#H:k2[ؚ/O'}͙տd}nbtbB<
-{e~0kK,VBav|Í7Ę1pB6ܸqGG:thPP,  ZhтZRׯwiX{s  @#GMrðze2MӸ͆\>i\NQIAvZKYV.9,orMqY^^bDh1~;x<ls7Dipe=&L߰ƍ}yyƌ^55.*$&j|ȑ˗/dQFb  p|Ԭ`sk?9֚#+  	=aXlZ9R*V0Cwc302q8eFSUU;BYu/3|4 ~{P@H$f!I4~lPȿt/_e7ătm==w=z7n\BBBXXP(  Wjvpk@  :9t<Gv@D"l:黐cd2Xl0hnQtsj~~2SI%4#(b
-P3*ϤT>nFL-yoW{ŦGOc9ijݾ}.(qw}ᢻ2  moWl  S!	:0eY$vNcF$ل»òb1,] }i7_miK溩t
-c8.	jj$ !t%Ѹo,ZÞ'NMxckmuw?陙ui7hР(  VB.lZ655i   08L&J$MuuuݎH{qEQ<j殇e<އj$bfM
- wMc6;܈G|YsNOOٳgϐJ)׬Lvlri&	  sIKKkCfffӃL邼  `!ǲcnT*x555YB˱2L"HR@qAGW0d4W-אAO
-q?_0	@c>5σx=_GJNN~ˋ_^/!W͛7߿ð#F;V(
-  +RRRӳ333j#';;iWJJc}6A^  t~x8,RH8N$bł	P貒Mhv0.hb**Y}ӧb*#!ٕaЌ,.8p@,O8P~Yk6(W?I&ǻA  ݢT*322xR-r~;R{0   U{sssi1qzB"H F`X4dt=4Mu:Д??G*
-!d6[x7Y*Yz5B~"2RYZ:bPXPx4M4(111::b=  p9">GFINNnj  @ 'pa\X,NI"렻=k!`0Y	ឮf
-+##ԟ~4ýk,aB BhI ==j;vnϞ2ՌW={nҫWCzyyA  $4Fi'} N&p	\	B\[[q@ \?aYÄBD"8d21.l_>m`P_a=<B%Fv+ܲeKmmرcS]3_bEEE(
-      g잎ah0nD"+++aju,X,z=4Ms!3TRPd9G^$dBe:&	~=fvءj7.5V*mP(V^o߾A`  {+7-ťT*ۯ,{  3`svL&
-Yl!Ʉ[, px,ZV0dnZ
-946@ !r5KKK5Gh.IZTn(+ʺqFPPФIV|>t  -IIIMo9/]Ա.0"  ЙA9)Bбn'Ig؁h4YNcz.$.VgDB||*{Q4:x|Ū'N6zWXlP(TU<x<((h̘1&L		5  p͛7iZvQy޼yj@v  tfqAb@@Iv+s!8ΑCӴfމJ`Rmor%Y,'?-u/^2eJ5Y.m?~sСÆX  ]َ9\WXoIOO NJ5w<%{4MWUU5aD"T*xV" kpHx]p!""bΜ93wimڴѣ"hÇٳD" ˑblZ  @wxd2ZWWǲ,ϯcy<1vL+#Iq8_TفӦM!jk]exy7e5ѣcbb
- Nu
-FAٵ%!  Lr
-͆NcYV*8^WWg ٻ:A,k2f3G t/2/77I&=P\AȪR
-nzIPؿAEDDHR  <JeGa @gYNH$b aX,܅aYBl6L&!FߥݱcMƍ tٲo߾ӧO4ݯ_ɓ'k4OOO7  n0w1  &;gòr\(D"XLQ#חqGfP0jeY!y|Wy{I&͍Ըf6w*ՖcΜ9a'L0tPw} Yp!֊OX[RSSC &s9gf!DQIE9">8B_b*J(v͆a0}~={00azWV"Tdq/7_xyԫW/Rp/  -  ]{8aA566l6N @8\99~az ݆vCݞ={fĉ4ȻEs˽{oٲeݍqqqÆׯz  h4-+^h[   q'
-)2 ٜ߻wV\0a !@ׅ,^VUn޼nذapE90_ڷoKJJo  ILL{UqL N=`&peqgnBPhZv;IݨcZU{zl.@n׬߰aCNNN^;65dV,-77##<22rȑ {&  tZqN8I$IJ$@8MVb`V԰P(b!d4V+`J ]q===$!!Ӈ^mdRy=zH$      :	8eq\*:,:,˒$ɊŮ߫WRX,vL"Cv# "f@7o.**ӧ33gpBѣG=gϞ  \  ЙAǉ%{K;l!K2k:1@ðotRll,5[7+#G2$((H(B  &s @''H$x<kkkie?8nv;Uj8$rM~~~&L@.gŲu֓'OA1w*
-     =BQN@x^Z3q!az}ccVeY@W!Kٖ!J'OP\m4yzd={޽{5***J&
- ={RL R<b$i4y<T*EF]Rrs8aEQ< BD:7jhU)EJBHMu%ZǼd~rp}/㇟v>|csCC%.6swϢ={N>-훐y=  porLr  N="pd$I4mq+,e9q4Qq,0;|oyR4eR?ʣݧwhT	\v;vL.Ϝ9qZ^^\8UCٳ';;!ԿI&:  Yp   {bewl娱.$,˲<ϱK!_1746ꋊ%Ir$+"\RT*?tZy2)e]{o<g
-P*E}Iq$qG1]q[k/ARRCaa8ʤG9s㸾}>o߾1  pr\-`^   :@IM"!dZcFnX(L.ɤYN }&~3JJZf^mM p5qBPR~߱IQrP(:hmzƀ
-mVǱp/uPxǕ/^\^TT_PX՚tFPH)2X]ѠYvqΝFq̘1OY]X'T*7]|ĉ^z=:>> ^P    80Bz#Bl+{eL&ji):fܪ[/ltj4˲a3bYa8RUq$1ulݜr'C( Ss*B~
-M __WƖZ=Bfk90p(bǮ3< %K5~^uƑ#G6,5v7"dթSG>|}||   sv  tj0xs:\v8hm6˲,IޅXx<$1la<"7l:.=;j[C.vSli:RwtðPwi̞}9uH>$Mkžc:#B(:ʻgL*wcGy*rp,U]-!)0֭K?-{Aq!ӊ7onhh<xS'54`F+"d+,((6lX߾}===y<     @ 78N$	 qfYsX1XV 8J5#(+B.̑cy:!%௔IVk2m7{e4}H#S+t24Kx\odO6t^:u8L78HT5,cE"^xglO_OOO4C3lM⥲/].oh0sWT\= `/0[SVV6bĈ'ﻯNt.4PT.\ʪP#F9rdhhcv*   EP  :=88///TjZwf
-8|3BGǻ5k,_yD>g7&1O!,9T r3PAQD?g]ϹZ
-
-T%kͼ_{W)#$O!x<q"HlɳJ,TEE^2m۶k49&llzWlϯ˷?~LV;vȐ!aaa   =x  N=刭A˲,rDQjunp80LSfY,G'+B(#sMnB[Un[͸Z_oq,2»WDo(UU=|d$-wzqJ&n'-HMtvӅ!T)S*E0hFk/e˖ׯGDDL:uǹ,cV*TVfeeРA     ˁ	Br9I4M3j=X$I{Znݫ{v&lk!Ƹqc}*͕Uli)kF"}eZĩ'
-Bnn~AAE;y!.xw^p0HOiqG)xF3?/[qň	&Lծ6k==w~J1bĈ#bbbd2t  &MT3  tfq"DlfY(l.p8~_5l~ih0:|>z!!4sǝPcV[m46cN$䅇{>&1W_눏dVT\
-	vTȅM98f7k!ڭw/TJ:'O^Txʀ ḊکXNz`/_0aBˮsB]*g6߿ڵkw5   kM  {6rcYXly<qz^՚Lz/+:Wn
-RT"ZVa8s58;]Ǐ˳ēy덱>u{u؉ƖtZU\"XsZC78
-}zz4<uZ7B"W`Ei
-B2 $[&@Ǚ594eʔ2zBz7=V;N:EQT||#⼼ab   %A/  tfqfP(8eYGNhi0Dȵ	>|>nXJř\7~d_U&I|¸Ձ}jk!IGD{bYYy`ͽQ}x~TB&4qG;_yzHfrqwT+县jI:vE0ѶN:|e9PAnpR;TjӧO'>,qM^U.c68wBW^Gh4nnn  p_ =(0X,V(,x<GűD"$	0R,'p=)v;v}m˅ÇHu?d̬JC2X&҆%iץXKAUTv͡ið>c}b^͸J,Bȱ:?̵8a8p8d3f᛫֜>y8pCàH/kيSX,5jpYQknJGm;{,Bh#Gӧo_V   @[   :99A$I)JH(nze]C4APM&SMMh;칒UkN343/Vl6f]zg_pP|ljz"C|u8NQdk֙'B*h@`E.^*;q !$	P8jsn`f2يK-F1FuAacjiNX3*`VVFz|`Ϫ*}-dq9޻w'8Ǉ    _Q@# ;VjuJJZfw(ΉXX,f	H$b)
-wqvjkm6[}}difxĽ4QlZs:/!0$4^<9p(o9B'Y?0?E8jdf]/C	7mnoEpzˮ=W"b
-QS$de^]c@ym;23gp<o4ZkMBʧ'ٙ?8}vrMHP`fW2={Μ9c2z왐s   z ZmvvvbbFNKKKKKh488qIqHijFV1qT`m},ErV+Hw8UkbwgM	-}ld'Ff1CdveW)]w;sC?ۼsL9܁[YUյ@` f3$nl6^%kbTJ=p勐_߲qêƆUWY(Jw^y40IY[Z>I}BC1Y7>{H6!jKCE˩ig}_t?;^mTP,z|ᛷ]8ytի+xg+կwuu4ozA;Gfٳg/^855U]]ںsΪ*9  H}$LLcǎBۏ=ՅbY)A<APfaPV>e(fB4q\+'	_zc!Rį?q !db~v~jE HF&|;6BFժJ#s=#.l//t63tCpo._ʲ_DQFyF[:Ft riAq&ʒ@׿Ϧ_{~nrdߪ>{秦֬YҲcǎj^S  )5(24AQ{HфB!ZͲl$aF덴Ul_cԄ|~>!lmPP^
-	!df6tK2UG&g=!yB+BEfݓ'3ap(juu?F9ު+ٸaѨU	w}0BoܰddE9솶}4VhZUq81x<xph{os/è7o*CܓΝ;755lrд0#fsOO˗={VRR}۷WUUF  Ȝ((eb잕U@d6MјL&Ȳl0b%k41#zϲ.Wp"ff>6GTQfmaEl^|Q㩿lb6y^dY>>E?q&ʲ~31BH*<s7ysb7o*]]UѨT4e7|4b(Ķ^;9?[S</Ά_=8	+Ĝ8͞={vtttƍV}lZX՝;w{tt285    GԩSGA{E$y`04z^N[rD1	Ϟ=!?__j"I(M_YxΆ>w!4
-AL.s4-Zhdv6imYk0eh?z&-nlZ4M)/?g^BꪂQj#l4?JEo9}o{<852D89΅y^Dߊ,8jhhx~j0ffr9Xn߾?22RPPw޽{]b`M  .Wi0 X:;;;;;;::q|`@ܓ-rb0#VUT<Al&>H$I<?77g0T*˲y"ffy)QDQrqlD'OgmYgZ"4MIia[j~?O]!ljS΃}WѨ6]ө05HCdȲ!'ϜϿﯩ9pO
-9]2CV럦{zzv{ss}V+ `Aw> <xvѓkAܓqg4z}0EQV?b1Ng4ʬVk4eYV"cH46
-h4*Q(*)*623'n~Bjmm$OgL%ZUThRx4!P^0wBsbsPq**2UV:WmLOz-[~41I9;{`غu={Ѯ  }瀱{ >%=! ZVAZB#-afV8yQ|eHya!h4ь5qr2xpjtòZMlv^[Vj[{qcBF\a*^ԽggCYSRy"׵#Oz!fUn2bC"[׬1"a~}Fٰaî]1
-  ,KM~R  XpE(ʣt:yNH$"!2ES<VfADQ<4ŢrhȨgo(p/|\Y`
-b,nq$};t焐BikSUiU|_BFµ)%s]^L!V̶ج4DW(O
-?=s5o&QTϟz*q6mڻw.//gy  zr}( R'T*U8h4<Bh4ǉHb$?K4Jj(FH$"@T8*4<|4ͷan+4(xB!(A=̆4/}UrW4]<tdRVjklpԓK&㗾z"!X_^Qa ͯxѠ4o]0;Z߽{7444/  P ˑmoo>q
-$(A<eZPCP,$I0H{;ӴF1=|ffF$B7T*4Ҋ	]<wɋ	<&2D](J'<wH?{x/&|^o8bEE8NH%_BzMҡigxHbƒu5EFHqB,+"B^eמo~YBŢk޾fOkw
-?'|[[[ΝճT(Gh4v}ݖj  vC'Ovtt$?qQ׋Wu7ٯt:^gY8Ng0AP99gggytI߁F*.6nP(|87~^b4j<~s4MOo}|ph4muWUWjѩ0:%Izl/tj@D9_xd3x؜Fڳ]9!Ԭ-\,0Ͽ~ֳoB,]cCyYm3d_zoՕvŢ(
->_}WQ_hZWS+c^L_9ooo/w&Az۷}>[o[t:  x{KXn9rb4M !D0Թ;4MB!BH,%Ua
-ǖ
-^LAx=?|4a$I΅?8e{F7(UTث]iqӑㄒUV?w^Lִ[06=$Tt沚EΞ!7n(sw:`0V\dViij63(_>x<%EQU쐻]7_z3OO\pAVd=|A7k[]]ܼf   ,kvEd[0xN4PHl8Vvb	`0ef]5zaԧ?+aEio}gѪiE)A"Qvn.B\PHF$EZv96BNgShT8ʃC^Rų7?_}=,A7.畉pzio߰SQQDHS:ڭMU;PWVju/OMMM}QK0H9شh<6N߿骪֝;w! W'' X:D9v"!ɮX,DQ$Dѩ	e)Q$j5s:ZEQX,qEQzVUUi*ji'D=p0hݰySG?ݺݰ}j Ą;cJ·ݙ<2vmTe;w)85e0(Pa74XSXh","~4Ȣө-]qvl[m}Z0\tΝۼy󁶶w|>\-Z\~-[477[l6  SF C TgggWW"ϫ%(,ֻDQӱSsDQݶu\F؂P($F	D4U^f;-۶9:2y;:49DEQTѴ^)(0*hݽvf'(t+.Ԯ+sw||r	Vzc7Zl+/mZU8~p5j^m/Ti6t;%IRw6[<F97<;;b9eyIWYiw:f}mƊ2MkѢO;{̙ѵk׾;t걱l[F?>~300PYYsΖ7.  .Dh:uѣ$;v7
-qOVS:jAx7fYRb1H4roJޕǊӱXLVʯ*RkrARaN׮۬ncIƒTZ,7[_&L?jx'RsOO>dpp?Ov9شZ<|diiۛׯ_oi0 kAǏ+E֓d^FtL&Q +WtWx^qf9Aaj$Qyߴ g8r/߾}{WqQyrYf1]lnnnmmmjjlz  5RZ]0rr杝 %I AEe%Ih4Eiy>5jZr#2^
-b
-k΋_i~s}GKJ/^fAZiӦ={l6q  x	  '(l9ZVRq<ObMEz锳P(bʅ= %Y.}O?ynO~SS9Hu%1\RͲ===wUՍ{ٺukyy9  -A &j$4xDQh4ÈHӴ /_дU*EQX,
-}7NѠ;}ͶsΏkkr18MnCBH]]ݻׯ_oZ  @' AVqTy`00j%Ix<Ϟ=(JieZ\TIE]8łDh|W+Wh޾}*reϜ9sM7mڴk׮Rapv   ;7omH=A+
-ϛ'rkJh&&&qs%J4M8 &HXd~2Z_vwwSwޟݻBl=b]6/ϗ.]
-;vؽ{D  َ`-~#7~eNsM3=QT^hv:%譹.ɤB˲*y	 ⾧~y~}/۹s{-jn.V~x7|#I܇kǎ.`0ȟ<   ٫' =%bQTN|zzZX,&3!˪jyr.N'A~z7{%e>_q:/ڵkhv޽V  @vk `)CܓU(0*J]APopDsplѯmرqz$qa\?99YVV};wYF  @*Q  K➬Fa(vF)M$Br9MkZ5!XfuN>===]__>Ei=l/(3N߻711QXXcǎֺ:s  9\  m!@(zT*˲(k@p8JDAgf TO>=88XYYѨY2L37nxjuMMMUUU&	   ,uO<oXZ^$innnjj*%9fC@ 077':	q ^G\wy#<=Ei;w.^󂂂}m޼  3\ uOvqhXe	QM&V2!PHQܹeYy ٭8M Ĝ8:s̷~[ZZ|\]m X7-[~19_<ܼaӉy   DQ$ `C쒳yr@  jtsss!arPQg2䁄t:0$	Z /I.\*..>pOMia
-.^c^___wƊ
-(  @i`f q"* ,Yn<OTSS_cl6b'g
- ^u_4;wѣG͛9h'C݁իW۷M69Nd=  fotQ  KZd܎B>66BP D"r?4MS5aD(J"!#&]B q,K˗5͇~MM33YoCioA+W.^x]IPUUV  ].s ,e-d]8j<ϋ(؇($1L)q#IJQԽGz}G&70y$I/	HX?ST4ʓW5Χ_ay$yʒɭ6ҟr3.e%צٱs?ɏ:ܥ_R_a޽g֭Α\]5/	B__ݻwY]nnhh(--E  oZ   Y߂&izziyRvc(ssse9QTjʕ+*Ja񻉇2'}[JERmeAs%M*^zPi?.e輴lHCoB1ﱧH,U:#yw|\2_&
-JVO޹s'g?_ꙙ\[i:t^h.vw߼y3477oݺuڵ  rQ  K(*,+u	t$I
-BJ.S8U OFc$vZ|6=q+o-E]/hWT\dXoLoB$fP&cAh~QMZ/՗/]uV(ܶm.//jh 7H  2=YGQ`PTfh4J4vPI[lbXhNn@#!`L	ɼ2ϧ5J"{ҧ+Q	RILXYC=I/Mj/WEͽgODnީ1ϟ?7lذ{7f| 
-G  =+$IFENQ	B:`0,KU϶ڧVo۶M=Md0o*I^2K2	htdLC%dyysF$WNI~vޮv#)d2K>_XU
-irӮ]vՑVe
-  or  @ܳEQ4͢(B!az}0EQhr90]W_\7"~zVLuRArPڎ/TE"T,mawy<իWܹsǎׯVǇ*  , '58Z<q\4_1wY~Q\u\N 5A!fVU{*\[[kZsi     ➬2LP ,p8:P͢I S4M4	Ϟ=Z6mjii+**B  KGs deY I\acYeYB0^ bykיޡ!NiӦ;v `i   K➬j ȃb1!(|>QF*~ǬOZ.]if۶muuu%%%z  3o" Xqr$"0Et:Vq\z=XXXNܿ_ڵk˖-eee  K斠3 'A`yѨRB!8ZKY0sVŋ_NQnmmuUUU:%  KPMH
- Й+j(Cӱ,q0:.REE>zi0+~4]voҲvZ9F9 \  K΁"6I$)h4a0x'LK`~,0;\k׮ݹs7Jٌ" B  Xʐ5dEQ4M<o
-^/MǱ,XEto;wD"ڝ;wn۶rL&  ,\ ҭvreYNG4MӢ(Af3AEM^˽333Vjllܾ}{MMfC	 r>  K➬AHV5M,(tX,&j("n^rʕ+MMM[n]nnϤ  k `)CgST4MBH$"l|>%( M6}ccciݺuN7  ,Q r8NZf}>!D ?u8ӹm۶]v! e R'DQdyN)F,˪T*e	&V bQQqAԴgϞM6ZJӡ  `(
-U "I[3W4-lZj5!a^/I (! o?eբ8f6߼yllh4666߿XѠ  `9֚P 0::zj˥]"J#!h4St}DF57"W^͛###:nݺu͍Z  ˍ$I$i ,/H/Ǧ?p݅Q'߈ ZbfDQ$)c|V8ׯ_TT7oniiihh(..F   Xv4MIIIQQQOO[~ӟ_>U@ܓCyNq\(zZ6q	!MBe@bY_ cwOwtWdW.%<Qtn72C3gx?	߱O%fe$yK4͛LFGn޼wu8z  sm|P \hږI~Wկܹsw}t"h4`0gXT*(TWt:AP2`K_./1[yyA!KinJלꑗWgaA'(U鸐B,~U/TAgӜeO.K>>B/L^80,ˎ߻wҥK~YjU}}]  ˗lF `I(p8p?o_ܿ>˿c(aYl6k`0855eFFFN>hT* T/EYZ>̛qzyK#4_D_"brDiҍL4'%ȏ,I$=_Qdqj|Z6NLL<yΝ;Ph~  Z(bYVgϪT/ӄ K_E1e/2oe3g(R()a$D(?ɏ|g񇐰	?h)J.AyPh}|
-V䛖"U֩<pB&UkEQi:x0͕|5o'`©$8'ݻp%Ѽe,&3(oޫ/^N+3gOrAeRKxO%/TH~?y%7+**{=t_]]]---_YY)O'	a ˲(޿>_^^0Lr;MmYzOShZM];LEGn1aE~qEQ_bժU< q(V5ƛ1U_	W_LWWW/PMU	L&XrXwxxr
-}mB;!<JH(&uaJ|iODQ|Ri֟]'	!5oa=#g!ZD"/^)jMA(I4EJ9"?"oXn#	jmke~pǭ53E?%[TR$+_yՓ5Ny-4%$$~2CQs`Yd	akrx,|8#lZزeKrLuO.NLLLNN:իWT.yi,,)©nS}
-^oO[T-4|ɰ$T`0d*))ٳgￏ  lh4p8,Ə_k"2録rxm(7	۝nztcojyC%e1%^l^7/@b±<+!Sr:I0|V7J848	CG͛$%q!D"#Rr  $\lń/?N,|J*>阷yWr^Ku?N{-+'y[sBCQ[Ubr-Ukqܙ3g6lذ~z*XIIO~7kl操VBi$'#K2oe/I3+k	zOӯ*qZ
-n^zȩ>F\/]a&+d6SGɷ NNNVVVݻd2c  EQNS(%#PrDAs"?PGU6?UL~H<휞PMN%TwRJhH!JB3ڲR,	Yq)!	Fr:y+܀"9 Itv)Wȼ<ϗr(e%X|ǯDE9NWŇ\:%\?	\}	Jɝ?0aWGYK:WIOuhA1${h	I+W<-AC':}G?"Lޢ/˲>orrrzzZFf4y.:sqCCC### $O|&f|L 1<Yls4m}|o_HQaqZ39BV^hzJjvnc.  'SSSziY>mޖ	yjjfHh8	7qͼQHF+2iUB92^%/y4ÝO'mnДc	D\ZRS99K.w.XOtLlB[0~Ӽ^ZU->}믿x'O$IڸqcKK޽{,KތC'` 8NRKJYX_H:GZ+G6ZFG7{Z``F)	     ޸h4:44sܹp8e˖G_~h̷lA W. a!qr\o$4j     ,)~~ףѨڽ{{W__o4cdJBW      7BO?ի%%%۲enO-1u       K.=ydƍ[l)((ț	SA     uvvzȑ#( B$IXLEa>!     XΕÎba     e  2=      ^[[nF        =      yԩSEQޮ<Y]]M};a^7aCkOV#G=z4L.C^p>|&owwC%)/9tP{{'p@      `ْkvǎ{2v]	Outt(n'OƯ!)oe]]]	ۊD&-lwA[O\$lʳv]ȑ#JܸqC~㸢 ?u     znɓ'oܸq1BHggܞܸqƍrpSnvnܸx<8o˚eWv@:uJncO<xmmmJtԩ5+=x      `9W(r\.Wn[tHdCCC99CQBN8!'&Ǐa>44DH~ե4Lյ+Lp8!GQTծF@ʯou     7<<Cɣtttg=r):::HEr^Up>%S:j)G/ȑ#f=;ʒc&{'     `H舔B()nOr(%(dx4;vAySNIn'=      ˞zi*.+G݁n_{{@A     )$<^Y^[8|܇_S\g      h̤N`:L(	<&t-ʣA:uJ>(     V"S¬	$9Is'^^7#RSNK*S=      +Q[[3};99qDb^3yaNBt	"9-S'N`Ns'@A     Bc{v9?qD{{{\bNjjjJHpdr}Ny2m}A>,I^3>:xK=      +ԑ#G~L^	msn;t)ɱc>'N3'OQѣGG{{ѣG{xփ=0T3     2&gI>E^f?~AebY[[[P.+~ÑB~ƍ'N(#2z?x), MTq%J$      ,JIQe7ÇO8rp!3      ,CsrAB      +ѣG1'7      +puu_eTi      I'a%uww\ey       
-       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                &ԥ*    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.dia ns-3.22/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.dia
--- ns-3.21/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,26 @@
+     ]oǑ_A0̨*${8$,ĵEꖔm~$rf۫%L555S?W',W7ߟBNOoo..}/?|şw/oӧOW~f]]~noqux:ồ//p[.Vo>-OߟYӲj)Z_Wpw7×vlKX^˸ӇGKŚ۸+A"ww׏gsUva@xroڒjKnՖ71777Wuv;۷(cr^	M`˻J,X0[]^lW+ϯ '<rO{/o}wy}W\
+?(jBˋb+^ꩧpݶ|~gWOlO/8/x&7ogn?O~kˋO}/'XQ~,k!*o<$,]-!,*FIv$g({ّ`^gnvJ47qvh}qJM
+B!$/WZH&(=hϖ|>4tkf"Fzzev$qͯ{>әJ`rHa*H"l^HA<D":Ň3QvtKus^orxD.k+I5<|,GA-'[Ҩ-(j(w<GY[1Վp+.tYF4FG'FE7[\T-/zFD:c/ 
+k hۢ>zO):$JfxGpރ5C7g˾Z ՉHm?r7w}'?-_^}ӓۻO)V|\].W_x=|s]|BG̩⯝4Q2:a04Bw/uyZmI7_-=[MTMVQ" rG>U=%it#sB(+J $pt2]E䬢PETk/bd	i<򎓣/%GpO{OC9#TO2U=	t$e>=%ꉝ'v"hكڿYE
+Ty3˜WEJTGJyvYE^Eߚ$ОL	:#EDYݮT3zerVQGlb뼝u5Q;s	ǐ&?.~55ԀH[OyyٛYIRP%?	7ׯO6xe/"²Rv|"Q~xx;}M߹ّX|ͯSW~}~Jmp
+5p<NVhDJ39.Gc0CtǻNeׁEDjLt:爃T/O9ovcruuPX-#sAD"#Bk¥SPqc7Pa.LOg
+NÀug:jNCJYS˫W׏W0SzѴ{db^'z
+1~7SBgm׆77i+xbǺkK n%ЖXp{Bx.c(z7X^|
+:@M?D> ދ815rʩك8BԴP;Cɉ>.SlRs~L8=}p l>g,Qr|//)ڌ#P SN9$.%FhGaRUP>9*IQV	;F児9G~9(9(?Ơܪ4ptmS|MTJXnt5kT|v+ kt1d6=; `g!9{TgD}lԁב3LXN;8H&DrD&&%{'3K8Bp8bpSk{M:9L6e99`=wgBQ;`JwoڧڠJ.JC~W^(k^&WcHuOS+=f=b}'xSp3鴁9ƾ$<~DCTv'?}rb/T:+e6>aR		$D}x,阺/{7AJL,!U^/ؙ,E>45Ek%C<.oUHA=NC%IToDH=^j&OeIfJx]tZIrT H$kIӇ7Nt?!76<s*4d$FCVghbyUd	tZ2fu5yɩ1!V<sb Ȟ7r-T8!{WI֖SBNe'9&Tɮo%C<=!P+BوB#3F13Ƌ&:^t%V^Ͻ\:6U<G}kiB8l" >"N~BҹpzrwNy\!X1J@YʫY9y&X3{NjJ2!
+_2qRH?NvJ٭j"7sX]d!#_j(ͼ(Ćptm2=	/	 imV޹<$ !$ 0c9Wo=I AuOYf97?E}L|AQ,NZc$L'Ie8&kq"A/ Մ5T
+|jEk2&aը}&kV?= /v/]\n OM;Ng5;b}u4Vuw%x@pmp>]A}ZUߴk9{MeQ1dz
+.T!{ڂܟm.7~G"@ǛOn{PBju#B`*!08Ԓ#aSz%Dw,[$
+k.A(휡An6qS	OWV;9JU*# JJ.X6C~k;U׮J9xy~o_BS_¤6QP,"f`xLq8zX0AS3aik*xB`\Y*{c_dLF&ByDH>PrYmьM
+_|A1,O>ʷȟuDa%oU_
+DAއXd9{޽5 ZȚd Du qFCg_f6{2d0) SaȤjW2DlA-˾[@$ܤ	*y+ɫQ8,.fe{	DZr,'S}`䕛e	XpiMPZm	!Bgm2nMJOQ8soҘ0pǀG.TzzrmtĬΝ	ٙ:| m7K;':ؽ6rq=ݙ@eX@!x֝VlӔkb ; AƓsǴ0<**[,.W&d+ {A\yazoJϦ}.7/ rmغ<⇒gޤhwaDZ|D*Js!?9M %Fi4u޵hݧѼ@޳)76nV9yW}RIiŘ:Ms Ga$(;+,͑[1F8!qO5$9Td.7gI5KuLi`m%C,.RL1
+ )sZIkI-<%-sTdo!{StDr.K,0\(ˢdS8r:9m".E9j^XzHQ#>oQWIQKD3%L!vI,!$yT|`{! 13VV!<b 'P+si[DjPNn*V<efHom-VCݑoq*h*y-E#kXE	K(q 9+b(H_MgsbI-zű" r+C8kq	9BDQ&)rxRf+يAժ$i:4ҦI%H_]hх΋qo )09xUE%Hؔΐ!sNG>C0C&fi%2#d,B:)^jhѧVjtG&FʟIS3G?$9d7|y&Ji[F~1<l9~Y'M|'C<gI]jZVfg kqV\;V:sy*{J~knq%nr'VcA`?k
+?L%z rYIt(}Tځ5$'UtYme.f=X<+#e.ݙ58f<y3t*kשڎ_섳h
+g&bV릾uRxx`V\M(k¥mcUܐUH>lrA  <ײU4bʚ^u$֬2Bٗi<Uo?Kl^ SIiIhF6K:hc
+.f;XVJ}.eq3JKwqgTNO~`|aƜ&! .FTuMhV^I:%?[vZ-*:MUe],B_C<^PCMʮ E<E\QS&8fN-lH4]Uk5xi8/`9;槵>W0Mz_|>dSv0&E!-ы}\;ʺ֪Iʬ	LO	NCAm!J0~b6L`bV^y٩.!{_A p!Boa1Z{_Ekچ>P&!O)`JZ
+ܔ2)Pp3m7=\e78C;/A3=z?w!}h|~RndQ!( 1Lzĭf5Teی(C@$)0>JX_Ҙx0h3f(g)*<sI$;˯U n3N-#}RK[I˽IJ'ǻE/lg.u)[lL<yf#rb
+74;1}t4]ƣ3d$Ȉ)Kc|Ab̖]'A&MXEʃ$yŰ{LsAFesD9]g-
+ŻDY'C</NEEo$E-!\蹈@Рj|UbN_ć8hu0ϽcU>#%!UvArCšIdiR Opb|!{AD$6d,H:|%&EĒX	JT)jC+܋9!lHFc䠣͍jB9(zA#}>lw0|~tlhZ rLG]bi6ZT	ピ'nAq-˩#C<CP##1rVNk>ǯ ĊKv:t^:T܏f)Cxy&Un2xk"FxVo9|\ڬcu|+篪!򺳼j%yeEm=Pz*^:!KU±h7EAUBlmA|n#˩i!!z	C7O	J0yuCs~r=%vޭbQ]߆oѝޒѦtQ̻~`v~XYdቴ	 XJ-*
+.1x<Zff]Fֵe,Hm ã
+Cޢ[]:c6yՊ*5J	P1'gUyc<2GM^#A`YǪyo9ir%i,hMs~hmmR⽴iBavZ,Y!6[<cvw1"1!Ԁ4)@2$y{
+U03Fj';?4Īu4/&N}36 @ KFҁ|9b^bVEt@4b)Ĳ`1m`y6MJuo!k%h֨P"mQ&wX^@^GmwWZ'e6S7k<@}0;̯x"\UWoNGG/{ыm|`M͵=`Z=ޢc:	5܏1`pၚыmhtf'k7&IZ<ȍ=s(Ic@
+BYz5a%͢{l1xU(*n,W4fGuQ+p<O 2 cN<عZrwCnxw+S 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.pdf ns-3.22/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.pdf
--- ns-3.21/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,287 +0,0 @@
-%PDF-1.3 
-1 0 obj
-<<
-/Pages 2 0 R
-/Type /Catalog
->>
-endobj
-2 0 obj
-<<
-/Type /Pages
-/Kids [ 3 0 R ]
-/Count 1
->>
-endobj
-3 0 obj
-<<
-/Type /Page
-/Parent 2 0 R
-/Resources <<
-/XObject << /Im0 8 0 R >>
-/ProcSet 6 0 R >>
-/MediaBox [0 0 550.8 248.04]
-/CropBox [0 0 550.8 248.04]
-/Contents 4 0 R
-/Thumb 11 0 R
->>
-endobj
-4 0 obj
-<<
-/Length 5 0 R
->>
-stream
-q
-550.8 0 0 248.04 0 0 cm
-/Im0 Do
-Q
-endstream
-endobj
-5 0 obj
-36
-endobj
-6 0 obj
-[ /PDF /Text /ImageC ]
-endobj
-7 0 obj
-<<
->>
-endobj
-8 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Im0
-/Filter [ /FlateDecode ]
-/Width 1530
-/Height 689
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 9 0 R
->>
-stream
-x	\q@Ҩ,ZSӼoL#ZE+u5{o`Q\]@VZf[i䱤f*++50w/y                                                                                                                                                                                                                                                                                                                                    (VNNαc-ZcǎD     }m۶}6l       +==}	*TxSSSi      u-ZT(Trnݺ|Z     ͞=G~ڵkWV-000%%     p,[n}=<<*WکSիwyyy4     _{裏vgqss=ztx9sJ      "66vܹjj۶s=`jժy{{߿?77     ۷7o\Pر瞫Thٳgg͚K[     _ttAW>da;""Bjk׮ݦMB     ݻ^z޻vʊӞSN+WL+D     YLLڵkwޝ |)صkΝ;3
-b      rߴ/''Gؓ_     p i%i      G$L     ĴG     phH       Gg&     H{      dť`(H.      9XӋ\      t.!     Z^y{      dEѸ=|
-R}     @V|||\J@yzTTط\      rV}Jq^     L5          @L&^?'-      ȍdrNf1)\      ȊdV`/2Q(vo     T*16F`#Q*EΚ\      "F=iǧӣ      ...
-B6).a      YqqqqwwM{z-TT     @)x*1^^^vaf      YfiVf2Ũrb+=      "ۊB;;     @nfK1o	w8K3      ȍhh4Jҧ!|)޽{I{      h4sK     qRte}Ϗ     ླ      Ȋdh4r*77       0L:NT*o     ̙fGy04     8^Rnз     @^={
-^/i     	qfŹĐGVF;#*U,      r`9\KhL&SIN2     @.=%y$      +V쯷nK\      2!.e53OIHi4     ȍ(OA      gFQV[>##""<<<      [&I)ʒ=,     Ѩhld7E"Ú\      mdطRJ=      r`{iagM.      YҞR<o+4     ȁNy$R      Y*ə%     h4>vz&     fwww)Q*2vwԷ     @jh4><&ITEN      YQ(bSL>*kr      Ȅu<z`.o+i     ؟H#X     @HV`     	qޞ1\a$     Lh4iuh- .ly:+     Ȋ{GP(|
-K;s\      c6e֋dgq     +Ѩh|T*/M&"##=<<H{      }{      &      GfYV[*n-ľ==      h\rKJ{))a$     "-..>C     pFۥե>*TWWWWFr     ˫
-TWcM.     KLuj~ )դ=      X㒔9a          iOi	     >i4oO@@ i     g04'U"""đ\     \      N@Eڃt>>>j     pHi#dh4*ǂGחjQ)!t:#     1quuoS2jeJ{T*x    зǉf///1QqwwWT:PHܯGaO'    +a/RVM&M'R#kfN]6hA     pgdf,~$W¿촞	@Rݍ+9v&    777;}{ĴGZq`0	]n3
-TzFRX	h4VW\Bi     w\ҞCi=9F)YFQ̈ĘHn\=     qbsˑ\iBJ  +0ϰ$b#k0ĝҲYi     raf)6 X?)))+BXI    <dM.1t'ŝUG^llIf!    @J>KT!qT*.%"    @΢0od
-i     #H{HC
-H{     3g%̲]$ǗdF&     LiIO2$*b.lʤ=     ȓԷμ=&g>+
-ђrc6NI!     䬄iOqL&` '(;j^/T*]fY:XT
-
-{#7I{     d2ȖlV*vVڲ<2*nA=     [IfiGH(Jj2fq"&JtcvpJN     77I      '9oM      9=7W%           @>\     ᓗ#~Kz椅RE"   *22RUzPE    Nз(     ("    YTa(    PE    Η&EQ=    \=E    0oEQ=    4i4SE    ΁5("    K{EQi    8Y,E    !(    طՕy{("    g@H{    HkrPE    N@Ú\E    s`M.H{    0oEQ=    |i}{("    w^H{    i&EQ=    LEQi    8iM.V`(    &TaH{    	H#H{("    ' 
-XFCQi    8<o#("    w^FrQE    N=E    S=~KzPE    Α0(    p=E    Ӥ=(    W_}%|ruefH{    DDDi}{("    'H.H{    )FrQE    =EQ=     +=nnPE    =EQ=     +(    	}{("    gBH{    7G$(    #TaH{    FrQE    Δз(    p=E    W`'(    ,a$EQ=    CQc=yyy   @i#(r'777&&f޽YYY   DE+IIIYvmz}|^   (M{233w]z͛ϝ;_U    (K{v5dBQV^zmݺ5..v    Ç(]++++:::88m۶>/<{Ǐ   ڷoG+j߷~)6"0cZkylRAwڿnϵY1=VW%)Ս)Y,omYezV?\[<;Mǋ_X/huWZ=.h{wiC#ۇeo"oim(Ê,sd1PdGwވBvĿ"axB۷oҥ?ެYɓ'L^   C_~ [
-/bڵK)m1ҷĝ駟~*T#(cǎ:   9x𠻻<裏>aJ*~q۽!~Kڶ%iyt=V?jx-oV/ guCluqějt<wmV:{ʿ,5V7'Z'|"9~ۖXӥcX }^E"öm>߭V_z.yZGsm/./E>;l[Ϫ]]]z|PX`Arr2    ʛCթSgm׮]Kj_~¶Ҷ]0qR_t=` d]=EBqC:,K+$~5+[U+Ҷt!t~_h/-TN˛!^Mds-knmZt}{_:Xl_-alyˋ7'%E>mnXVǰ1V_iE_Midlo{P<	nZ]S:m@߾}vԩaÆ«k&Ml߾=33y    MllSL&_ws%pY_}q[:xipN۳,D	o҉*X.b{-oI7_Y ]:ⷬi{{nyğeN"lMZ/ⶏ";F+-om	Z%i%;8ғ7|Y=e>"`IK[O<??oٳGVjg}g:t0o޼$&&:     222N:j{YZ'xcǎF155     p IIIv]vս̙sᔔ      8h___|M6fڿ|||^^     wܹrʨXVZ     phiii<                                            8cǎ-Zhǎ4     C3L\r˖-:D      8􀀀gy{'/_J      8ǏhѢB
->`ʕuf4i      7{ʕ+?RHPTV-000%%     p,[n}=<<*WکSիwyyy4     _{裏vҥjժ*URT:tx'̙O+     8عs֪Um۶~~~=ۢEU\
-     @o޼ysBc1Ylhٳgg͚K[     _ttAW>da;22瞫TbbV]v6mrb      rwzy{{ڵ++++""B})___|qʕih1      9Yvݻ/Ĵ'   '''##c׮];w(D     YnnnJJJfff~~HaORRRttt|||~!Z     i,\     pD=      D2     R`0t1      Ʋ.=     /1te;vM.      Gjݽli     h4wwwBP*74     @|||\J@y:kr     ȊZ)yI}{H{             8     'ɤl+**JH.      0LVs5[,?1E˼=      b2؋L{
-EIb$     T*16F`#Q*Eμ=      "F=iǧ      +...
-B6).o     K_ڦ=z=      BYwUy{X     @YjlL{m1걜JTT}{      C#,ww:      ȍlq)-TT     @VFFQ*>Ka     @VF;D      +.R      ȊՌ=}Y     @&L&F\T޽{I{      dd2t:RY؇\      2g6mcFSRG      [z^R2a      ْz[vQ(zSĴ-       @ĉCZm4K      Y%h4&$3K3     H]zKH      +V쯷nK5      dB\~jfftGrUTY     F}
-Eɧ2     @FZ}4MG2K3     L&NT*oH43     @nFF]`0y0K3     Lzq[%GA      V+v777Fr     ȁ*H4ӷ     @t:^/m#aM.   yJHH8v(aevO׭['%σ `?Q*bWwwwaCR79DSR%   9sw#tkfS|?qչkJvgYkY)k1k5[]F;[}i{zz
-wq=.^c `h4ڮe9?   +ϟۧ{vٿ$3Y{3r];5klW\qGr^^^~~>h (.e;>>>jZRY?N2K3  }_}޹jS\߸q?8++ @VHGX1LJRnq#==   իWg̘opzڍ0ҏrXY)a{w/_oLLO
- BgQTFr  K?c޽[juy彮_Q׬YM6Lcgf^og0kr  c>駟2y𕋫3	:V^Kj֬ٯ_SNdؙH}{H{   /Ι=I&HrA[i7Bw혙wGw~>%tA^^^ׯOLL 3o  OO&Mqrgiڠ#>/VBG8ese<L߾}嗼<G P7-l* qM.  !!!aՍ7^`!Dl0y$e~6=Q{b8-=I7BcR~	6sVW/C4i~7nCHˬFoivaž==   wgɓ'O9?3yәV-_q}MvիF:_2ֵՙ?tmnv__;a7eo/ygsl_ PHwD
-§=7-Fr&  2-[ׯANVnz9W%lmƏ/Jv/wnw\_W]<?wKa	״Z5"M|-t᯼ڵk  pG\fHvg
-   wׅ?U6!N9Y|#랕fSo];+S.[^VJ)|wķmnR¾޷DPȑ#trh4j4)JKd,qFr  ٹsբE"	ɝ8pr7Mgᇺcb/d-aQ)?U̔Fz''7mV~吅F֭[wڵ, (+  MVVֶmۚ6mڣ{3C0cZ߉gjL{Ȳs+B&
-5~GY}<-Ra1g!r̘{pE5w7ԯ_w?Cnn.OF @qi#   J(>>~Μ94]=1)>ݺz8㥘`W>t?Y3|o'joĆVKZ>/f_SE;X^=w{j<+9fZm9nUJз  Cѵq_[Zޯ׍MNXݿ_vҞ?
-/φFN&'Nq[6Nq=j%5ѣw}'<>yC3KnIt:]M  M65m1gx}7LJ	S1,ܶe3gԱcgjc/.?8=1l{P'^Q:ݨ+sרQ f &-..>C  >}z/BxCm#V&%	^Qe^;z$hy53<{炼 NXquu*7=ō7>8p@x c4mVzTR]M\͍y{   $§n:k&'-HAQn0yú\穐©3<|p^zRX-%s1lo笔o,iݺxW+1.T=sXF?_γ Fqqq*rB(ľ==   7;\v-((VZp.w汪?lʍIkƨz],LV𭌤>LNK\]4ż͙5ە=oqӦM۷oo>f K{j~ )[H.  P	Ϝ93nܸF}uVL`{=U03O?,9i>|XWݚ1m[
-Fusau6M._MޛJV0O&M			<a\  ڻwoӦM_{ÇJ[FJIX#l_8*#`g~6EUTrsdCHvjXVv܁g*Mw/++%쫈E͛7o۶Cx@L{\]]  ʛ˗7nxz?JXܻ{a^F')~uF/-+>ub2+ulԨ?| !Ҟ*2ɚ\  ?qD>6lm:ADଔ5җW.U9WG7{kVWCPZZܪU֭[߿?==W  (Wi}{  O۶mۿYAp_7l⅃Wk׶مsL#lL&M-Zt^
- @=  ˗LRn]aW/E:|pyKK}KZlپ}/N> H{  s;vjj~.30ߥS~K=^n-CWMYWChѢ pVQQQ  Orru4hУ{?/c]]:F5_8;%K~kXնm]v  4oO@@ /  ̜9N:+2=4g(Uzf33˺Ra[ '""B,  egg<xۻUV_E,J!Gv#tA]5vLUApZF敝=:4o<***-- p\  A%''ׯ_萾gN)וA3AGΜ`ސz?5;ݷoBVcbbx=  "  %///::zO12t'Fxkْa.ZdW{>SOeR|߳Gז-[~', Δ0%|||j=  UIII;wn߾}Yi+Wdĸ1nL++ۿ7GNHp-oW^yeر3 i+}{dh4*ǂGחj...O:l6s7 n)??ի+Wlٲq%ŊviNZX-c/ji73uUnzK;wڵ_| p=l6jG׻Ba4  :rСC[>2'BؿW%{&Fv=YWBgWVmԩѹ idxyyqJtBާ=R)v챼 v'x{{w&'G^]8'̜ig}O+4>ZMΝ۷ogݸq" pд\G
-RJRn'1&rp۩  .̞=M=cX̙Uy<71o5nT_Nv{̣?,z6mF8n	ϸV-Wr#G矼(å=QxK`V>C^4*n\vě*\; w޽{hbsS̬%J:th3ٌ/z饗&	 gmڴٸqcff&Q 4il?˫j_B̲"s8
-TzUi#h4VWi # $$$jꝷ{0	
-k|{`S{ܙ~]bMuJ:u# @"""ĴH.ø`hPV(Ҷ]M{t:i sɓ5j4sЫV3hˁm7[^^ɶ'|i7i-[?&rN<C[l ,22,Vi]lIøJ>NxG`0;U*msBQ[ pYYYڵk^@gG.zVj?ҁi޿&rM_/xܹV{/?"J{3~[vEoyN)1.\ph4:tH_i-M{V= ϴz(F.=wo~! eggtի׬Ysy|vi}0vú۴i4F3)nըh'DNVɡ˖-VSO=ULym/;^:_ۿBըQujI
-%l+iu?YbEqCc%le'H{mC<R=w0Ǝ: 7YYY{{lٲ%#[Z+G̛+n^5=	lݲsoOڍǇx`ߜ&#I'Uz:,W%?*ťY/<6>ņN:	/͋gJX=b"ܳ%]Juq%oա P={VSx9{:=ZrYw=8GVi%gX+]{\o>3z*I妇qRSի/_\xǽW\S_U()r+w<{O ʭ]vnݺUVׯOO{~ЎVuZEfZH9x{_I^u.z蕕%M6ܖ-[~)/fJ7/[P(.^  krh!Gw$V*_ PnΚ5qƣFdZ"sȠ>Cg=k3SO=ColyIឞu#̥^5J*+W`DPS1gL0kΝy{H{82rv_1zHQ"t= Pر^Vږ-[nнr>;;LS&ն+?t=zn*u揠~z
-UZ5   ڄ#uiԨQ?~ӧqRߞLs9Үu%*lɷt: $&&fŞ#F>W	ᢀ7|Z]Xpqɰ^m6==1tɢA+'rȉz",lذgkv9ikhVb܇R_ K#|/۸,@VT%pJN#E=, Y8werr^Dڷo{P>8P}NӴ[6GX(^WqaCh׶ɍ腮OTXqذab6ePw'WXuc```5uvI;$#M,|W%eHZ\LWjp?+mt:q8e:$T*s=Y~iI{kJs>?ف xرcU6nܸIc<)z߯ŝӧtqC/ֈ9L[9Iaԧϛl5k		J%Ήqyzzvm޽ܦld2=e6JK[vi @9}7|E7oL惏clhHXieK|1'A+?ECA*TС}4u/ڵk{gϞl%I{eC#s}hJZmH84ORt:+,a=vn}Y P={v̙kׯJ>8gi\mY)&;U#1έ_\;罇~bŊ#Gd{SW/bֲ?_ӿ:qX٧
-3۴im۶$+=!  wUzzG}ԥK;ݽ =1Fڶipٻ{n6MX/{VbZjiڤ=3k6HK,ZxڅΘ?N>F2/lZnqT.Ҧ=  ӧO.Q!.WrB>w,kkr[:Wx깸?Mݸ6zTѣz&\/Ok3Ä-UmZbXvf1gWt|%';}CeݿoS^իx1=  Q~~7vѢE//=_̧g߫ƌyuyfM$yq	^JWWWJuҦZ^TvjxZ64>_W^5s|ӟA׹_PЛ6/r4eg>k>O>͛7믿x싊ʹf]$  MgϞ3gNf͆f:2/=sњdqǓu夅|Tk=C/:r{YG{jOf<׬_;q		WWKf{೏ǋ9O^asR~mznzx^Floכ];\5'2_^`3gxS  -[xzz6k,<<<iEݕJIۼqF5\\\ڵkgط9?3fg>ZսGذLetdZ.,jׄ]Z9`Wf.dA1gVGf>䊺u[Z_
-2'<y7PVdd [(ŋ'MԨQQFάI#;>3UP瞛:u?7&~9~}ŖSs+A?a\,x݋3}SNp폷Μ:EcOR%/6͚5sĈGmJ{*UzoIϜ4:Ru׋}oѰam۶e$Pԝ_vQx/SNK1}+Fysѫժ	d&IIXp}7̔䄐PM
-p];l__,C?}ܞb6M:UxH{ (8qbܸqu4hП8EݙTzu፸[n~K}Cfˤqd[A'o-[2_Mem>ib߯-೏g%kz3×.~oF=ah԰Njܕ,SN߾})))H{("pߥoݺcǎm۶س09O(7vk*UMv}-/Y48/C{%ot&+El䗻3G^ʷ;ܸ^0nK8FxUٵcjT𧻓V]{e﷼Jʕ+[lٵkרUAߞe=E rss?>iҤ5j9+y夨ۘ6K/\/+~=9}G&j=ӏ
-9⭱s'	~;v0ը-Z4Um3OOOoo?8!!V۴FrQE@&υқ7odNJB(9UAV*ן䤭e{ժUCo1oQ0שgwMyiӺ˖J1{Z=ĸ3ap/ϝ[fuZն2?ؼy]vڴiaÆk׮rEECQi ǏߨQ	&нХ¹2zKFi
-:l_-:eyeI7[Wd:/xx<CNH/bjOܕUϯ~[/v/VjUZH}s͚5ۼy3|P0oEQ= #..n֭M4ӹ{x	x~{kvݺ4F}^=z쮇LJ	)eW+\_w+=WE'3yuv<S&vh˰+6)l/>P(t:]V*]zdT5jy}gL=s)碃?~7o+MڳgZj-Vp◻̘71.U]]OҪ+'m͗{6vԩvK.=s('i4SE@nN81vW^yeذaǏ`0W>~Ř<_*
-|{Zuѧv۲apZ89>	/ft4|#3K3āͪW{N;pq2TJBتUTXb^~>%?3fUլY`$Lpnǎ;9x?2O>j
-W\}k&k\ҥK<gSO=E&wyeҥϟN5(" O[liӦ믿qƌ$ҞU^FXԗcy=_?hOOGj^%'|7;5$3y	Wc矌xVu3DM¥N^]9a&mx䑇|>{v,m妇sa<#O?iӮ]D#ϴ˄Tl{>ZxiCo2=/CvCÇV̟ݻs~o Չ3k2z|)8=)lDQw[W~DGG'N{EQi =y!C^|E'D/.>X_ippjhr֌S'uTO#`YOײB+=1зY?qM{]:]6u`׿fU;m(;t]z̡?K/	ؠAuL,zl*l;K6ѿm0㟋GDM<H{vkrçO7uJW^޴jןo.5j1bđ#GxS=LQi ۴iS[nn:<yǳ?\;T_*W~դi¥*TxgFIGnֿ+9ebG׉94R
-N?Ìk?3's?̱+W{'z衾}|lm"z[GLO
-L.^8|Yu?B2
-c]2-WKNwW/</NGvG+X>fVEEo<yrzƌsQy4y{󀧺}xTHQ$*gF(#2"Y{BVCi(#{ͷs4z>;}_7D{@ D{  n<33ŋ[XXiolOg$<;mкlU<tu]-fЌookr4S^nN'oTTT^ w>31M:sb+\!
-=^_cc۽{wiqeLJraqA\/6ݺD6Du)+ܱ]71kkhml4'6ẉQas?} VI{k׮n޼9++``t= =  Gjjj"##]<xtv*sګ֚)3,EĂ6^{	q9=L7-|}Mh.7v}aWn V*tO8ϛ7MDD$%%%2y0]Xg+K;gYfv,E3;_><t%de ;ӯQ٧d777--.D(h@ w֖m6aaa++υ!08 &Fbzf2&Vh#FLhE~Wj
-jj ꋰai`HEE5gݛX$Z@{mmj)5 ]Y++	@V\x/%"*xLZ،˺9rͧ_AmQo_|uzА=bU&\m{   
-JKK6Հ2?ykj`-k7RTTT쳦:;{tu^AnZhقAZ+^LeHe6aɇ׫&FN@JI0G{ExJ{Ņ{knk"4Ev螷xOtNs[7\Ik~sRHHbbbbss3Hlcr@   0l!999[n300x&2M=hi'\V_8nf-]-\ܶad;uܔ@SG[X"˓{56IՅ88*#Rpss#sIKK9}zol!Mˈn"e?Эjm3T{IWajO=~XDD=n111UUUP.#m  p!::zɒ%IIIu荓'Ӡԩ=u$
-޸}|w63gLjl"·-	h*觯.s.ԇ/;|=&s3!FhRPf&LXn]5{l&5=w̙,6kk(	ko7ʑU{T IKKpHi=@ D{  δܹsg֭FFFEC:[πd`)fs0)/3$ifdV9#i)9f2埼7KaKYSׯ۷Gmzq<{Wuge<aN[t"GumJ-ahi'PSSEGl 6EV_5qfΜioo02*rmEQtjݡ=wM*!AW(*}.bX9W[qqqgg'0@  9\h!=)RQy)	,>%Ĺ46V7'>fzq1Q΅؄s,),ab,kktq'q(JQk|HM5AG:;Æ=}USx뽥~%f;pޖVV4r`RVXHO   𧣣#''@XXxǎм77(ј?OB:3 vͯn}tv2v;l뚹st7;nriv0<ybhh(""bggh7`L.  FeeeRRRэ5v d[JJJ1c޽{X>/C|Mѥ7۪ZGǴ.3c>]Ν;P^  H#_yBBB[n-xsFmؘ<<<X̌d5Ft7{jC66;tZ+&qO`a۷srrn۶-;;H$B=0;h  #ƨ(iiiee億h.dM444SN522zzo!]7we*TTT3ٮ{**Hvrrӻx"@Rϣ='@A Osssvvɜ9s֮]!?Qkc̃5kց?'YƎ:[C-YW!bK>ٮHs޽{544N>H=   <((HJJJEE%66Fj#"̙J99˗M1{LTꞺʈ000,U˼i#]hSUUUO:㻻|Z_/@   0 ?6446à|`&N8}tcc/R,cPua.}cv=+EC,;뇇!wSeYBddZ\\\UU=ГA DYYYxx%KBCCyhD69WTDrssV$YƦ
-;4MMfy{e{Ffprr`/EEE iiiГA {ʕ+ϟoccU.>cT>.Y{k,+/qfmbm9	u(Ag&JJJ""">|= =   ڱblllk#4[eaa144{M,cZ99wf_cM{݄8뢂Bgz&FbO</oBh6D{@ D{  )455ߛ6mZx٫gм4<weѢEX3g5C0q\g>Fm-cΜt&FÇ%dMMMFFF/^@g7E{'h  #p...ii鸸ƚȮVx͂F@/M:u	
-
-
-W;[!Q%o^S_S5ܦgx4ҏ&$CCC!!!ss۷owtt@h@ `dA$oljj***>4'V\9iҤS]QAr&Qнq*⤷QYek}C5j]w\Σaam۶=x𠽽xWE{'h  #c{ }7gN~P},"1Øns'^-6sj[X׭U).CVyORlllo߾<3\z7A Fwwwkkׯ_?k,C4<U1̙3Q9v9	f"Ff;muDEyYYzpSZj!G`Qwo---PіV[[=c\r@  FbÇ!!!JJJ			uπ]w}Wi`bbb``@OɐWEzJ;5TVz\T +EYWPcO٧khh;wJ|{\ =  hڮ]fhhmaaMjUF<`T	T@-Pz筽R^TT !ޮ>9sVEY3ߜ^ҌQ;ښVc%P\9CJJjҥ111_|Bh@ `$QTT+,,,""QY/[pۗAۭ7N<}Ym͇,tRB]P+.hεtGy{oxn %xNu9Ɩj*{yyʆtuuA@A QHD.;޽ ŠRĦw|WjR0hpLE2~fƈ'^:zSd:+
- 36:%$&-[LJJ׷b>`y{h!  m'WWWIIɽ{fy0+	Mt#ӣ_gU(~"B&w~wM.bӃֆrgFs']Y4i~܇bAnwR*?z4U }SϺ	W%~O|?Ԓ	9vw\VynC1'%%^II	[<<<޼yJ@p @   0Zihh8wܹsKvR/tLS~r_uF~doNd }8ώ	=5djO=cIy4yg`s3MKsntJsIN8Ƹ888XYY߼yn   ׻wfcc9sMmmmmllO;v|VX _|wPh#@Τ+iAFS?KZ\_Iפ}O:H?Q\MҊO
-k޾ǉAݮ]&MDMM=~xuǔn"wn5ըxe|#U_G[vvC<xBwbcZu'OTSS嵰x)H = =  8O~~~@@rzcbb>&F_P&ߣ!/9^o!zx+;_jup:::[lLl 4X/&[4][{5G%'9⚭Ϻʐe*"fk Qn*KDeL\\\mm- @ `t!!!QQѰX0QwիW300ݿr}wA뫬 ?f	6mT)+uݑm&d`ؘU{KLvv+W A6D{@ D{  EEE!Gۻr*ѠaX#;|5zz'_Ijkˀ<˖|F8iXlFGq-qfeeɓnA@A aNYYYRRҿ h{&m۶mtttJJJi'|CT}.i~IPNbb|.Nz%[Nxk76FUZ'))tbp=ГA aKcc#GDEEۇj-
-	GyneeHMMx|B> Jݼ:g,>>ukV^)AAw93$)ɣhwNl }WhWϏڊY̙3x< жA G}}ǵϟoffif[s"KA#K^fر))͵`Yw-Z#gEPu63-A螙:^EY86zkkcdeifժ0zu_Ippp~kk+
- @ `A .^n:~~~ܜ̶ F
-ޥΞ=UB4?QQ6+~PR[2rՂs%%me>>vחVZ>Ơ*JDYYY{{;8@`#CA aBwwwkk+rQ̮_ށ'h,X@MMZ_ f!6Ft۶~|}U6:[?:p(_Av6|*qss>5J^vKm 큞\ =  q[n322nܸ-4:zj+ORQQU%BfPeiV:M=pσ:j>3*|_Vh[oҤIS.sDcM-qɚbbbvvv>< A@A®.x1++HPPP__4Ml?`**3fٳ(}d|̺Q]Ĩt=$%<M=&QfH<џ
-CCCΝኊy 큞\ hdE{:;;?~/s qGm߾]DDdFGǏacc*52v[}cgk-!WUUy~SM8pO66Vk*6ŝׯ[XXHHHl޼B 䂶= hdE{Pv!~~~T؝={HKKKNNζmN8X
-IXPSTUUUT,222Yݹ鮦*u[Yqq[?>m3Ӫ.ҧSrQEaX1ڊӧO?z	 = hE{Dŋ888$%%]\\`ښÃפS)6&9sFEE4447n|89|ƢΝq\xN5fڵdu/khK~4E,<yG>`Ӷ$WWwtt;BFFdi@#.][[{###TU3gΪU=Z]]/v ӧ⪪III8]tISSnĉ֭{p/kJI;Tsa8OmV+decs:Z#w+*Ӎcsl߾}ѢE˖-;{lcc#xܽ{@hkkC~rrrZ[[ ˇ}8>UV100ܺ-|Trr3ŋ
-"IWUtXiChMIIQWWw&BG7q̥sW.ZQ(e߯h"5bˠ_)%_|S}&Ʊ iC/Hːox(@~CIkc&%Z}G;u'?A΅P^~{:AKIqQlĆ{EoeI4)[m=X_Q<SZi{_4ms\<۴++W[7gz{{⏍mʔ);w,,,֭ 0(((@EEE/wƀ6HڰaͲe@ld谊-~U4?Y7jƄ>$TDD$00۷W ˨EEEB=i4=6$!_[[44[b])>Ŷ!}80=+ŊZ	I]}Mw򙤭@' @f7(9"Cq/BtQ}﮾3%980{mL5{gbxR̤		sx7oϿA3I4iOL|..iӦM4i񴴴֭{1$PEEE޽cAZ>w"A*g.++{aB#t[#mg߀w\\nd[MuⲳMLLyɚ.1A4S'13ch>O"-I铴9}"21/I;H;daS, /@$2>nW
-8iɾ'Hq{;{RߋN:7ŉP ŭK~`}o[|~w=:X[nJ'Y_#Xs	}N:D0}e"0'i#luzz	&PSS455{ +#ZWW())!ҥ֬9?z40Xfԫ𭿪TXe"L&Mzt;jlӧuuu,--oݺE$ 	U  Y6~zS__|~/7n`_	OT-[LPPp̙={B <UUU+V@]nN&ɂ}SyOذR\\8TnU=wݸRX.rl56RhhhQQQ[[87|Uaa!g?}T0޿}b`޽æI/O;Z >|@Zh#}H=~OAv(x OؾYfIen_I'.m oXiiCAqFOwݜ^)
-% &	) O<^xq%GGG3gΘ1~zCCCww7S^^tRKK˛7F*x jvѯ^f޽mܸq|||	`hv<tnm͛cǎr   `C ^zĤ/s
-fdd5'}...Ǐrss.O_\K}ѣG544xyyo߾    F+.\ן7oݻw= yZZZ233WZ%  m64oH/U{|fƚ>&-]TQQ   Tsss/Yd߾}׮]	 ?,XzKOs7n''޽{
-, Q{K̇)\\\zzz'N@oGG   htΝC>pFFFee% >J hdd4ggT-|"""/^hinnYJ>,Ѹϟohh N   0kx<< AO۷utt=ZWu8]ĨF0
-T{,66VJJӔ04蒢JJJ77o      ~9D"իW;w\hʕ+Ntq،YX.gT{h2)-MR/59zĉYYY7n>tFw~.BtvvիO<YVV      iii͵XdIhhhy1ޞ	aBCC}ó[{ڟ{l}Tv@R]ՉSN)++7nʔ)VL.] (V}UٳgUTTxxxvq5v      Uttt<yIHHHJJ*88cAZ7`#e"¬QTQ\}U￷Q5_"k(ɣۻ]u@!^bՇ2 S>0M\\\TTݻw       ?ϋ/|}}edd僂
-B_wջ;ZIM}}t?"sl}7Q^M%CHyZ"¶7Z'XDѳ5.--mڵLLLTTTJJJgNǃq@7͛7̄V\yRpK      (44TJJJFF4TC99gV~\gv+.s@ux\DeR%_3WE	-'&T{P[K|vFFI&ʦb804jBu񩩩k֬Άn\      G///qqqݻwzAhJ߻87.oMeRՑ^Z_>wƆıKMYOW.yωcΠE%=~tȈ'5_2SOR"[;[aѩdoooTB9//FǏ_`     74,,LAAa9pe*fMk7}XY¾6քM/5sԩSS/S9ۖ/Iy9Νuž~⚥*Eh=~f>t^9++q/^*Y"ښ;-HhW{E9wzB]ma4>fSi\ѤlقcUU՘rTs_.
-oݺ   1ϟwH3r*FPo'Zh|z{ӴvԵ%6}s5˱q18UM_	?
-W~TTT/BڠUGGG...t7Ν;˫Kb,T3;Z[*nTPe=?Oق.155zum*4	6B-u!%/Y'$bJ7|K׶pm7.|C,V(gggՁ|3f̘4i@3     )O8)  `ffvڵG{{nE4O,Yț"Ef._8 "5WLrȮǉY%ft..1X/\.m:[!h[1NNNTTT1	>E]6%.`cHK;a\&Ls,_3*-!S#yϝw13ӣ7H||wpdea2id$:,,\0S!900PVVV\\U_|]HIIac8222X"77n$    TTT$$$,_wƍiiiuR] =`mEC\|5Vh1o1G,hSX1,/'q3QgO9}_߳k><ܳ+K{n8u5i=]>߇ii6TC^`X<gTశ~w[UYvB6,S|3MȆ=%%0^*J|ӧ3P*|{D[C;6!k쨭9\o9yKR蛝;i`GLRqkcH_$j{;АѨ.//:NNN𰳳777q    `<T^^^]]K.W{z"f$6VUa.Y!Aدir7[Ty<2
-߅100,Y"P9$#h6?EmVaee* з>>>>²uOS`{+<dSYĦ0Rفh*+)Qwo>pԧ$bQ#uQxpβkio	ǒ-\8kX;5%7npj$-[(== C@ =ztlllvPQQ{.D   `TR__ʕM6˗/{i'Tr@M˓~ }Ƿ7F
-zh\_>G133m5]yN {!o_EtW#4zDw1\n#mO**=U6bR}'ͮ%$$LLL?Mik,߿wcm`8ndCG>^ƭ{Yw@uՅhWӶ|]KDx6/-57ޡ[G6Z%<Sͺ:ggJ8eoo߷UVѩO>}JJJLLL555`%    MTWWgff	
-
-jii=z1JБ$NBO_p	&<DJrS.# J(	>MElT`}UOmdĉzhDڠSBg
-АG$%%mȨf}{BugMEFfe,	s!㻃rKx8g33023/d^z%*&L8qZUΎXf\?GbSXhl&Yy_?=謬,jjj<y|`TVV̙3GNN{֬Y
-
-
-׮]C   (˛6mWSSC/jJЍk>XLp֬u=^9Ϟ|#oˍXxKnh]kXr/C+۞6s;Z{HIlj3			JJJΙ8qKx̯R]EܤINcy6y&Ih;44yMWR/-5wd4@m!}UCm/{{N^kt?<|hiX@5CyNB2//Izzzkk+dH[[ٳg%%%yxxBCC/,啛o߾J    \s\LKKK4>|<?/5Ui**DUafڂ-u=ћ;7=88>BCf+0$>I	~Trڷkys_KwXp-=usg{校Ǘ-[FGGדzEE0ޯha'^W	|*sۯ:mm&=jO:~	(򅤌@+y߫-F2$:|֯Cy?c>C;Ϛ໚[|]2			;99z
- C$??FFFh:==}֬Y'Oihh7oޒ%K222:{   9wٹsZll,y~f$/*]TJr1'zsKO'?쟤QXYLޓ4(`GkW̙~iWo'&Ưay}UDog7jjj=]e9:t\tiLLLq-q`_Cl5:n@@M,2xB{v/ǚ-_x]Μ؊ͷT,-"?lLC3jrEO|we`TKhgDlAsAAAMM3g@HKKWPPpB[[ە+W=>>>^GHpp0     srr%$$PqPQzURT2eʍ̞t:zʢ=FǃsևaQ%rE-ڷo@olZ{[sցhOߜ-FM#wTZ%6}wߦ6V$=/h =m&#zEgBJ<=/\c=jMFdxi/'vЄZQX#;ˎ|-l{HN7־Ƌ'p$&''kii	=¨>ݸC]x}=Ν#   AkkkNN+x7wD{DP]!#lmrqj<wi%+|NXUUI{{{SSST%E{:",_Uԧ4ic-uPk㑫Wnܸ'?%e~RUUzdN뵊<a,@ΪS#6GP>I_kA4X1i]Wh4!L]NTSm	X0s8n\-...QE^xA$Ngggss3m !yO?^b    0iooAEE<==_"Oߤuz=Y;Ff҈BKKuHox'z ?`8=wm|*3zα#N]nM6b#<𢢢ݓzgw/9Ǻt;3g>|O0Pw@k"-57]g5{ϠWS32MLC)t'YSw.S.48+i~mqzg_Se)==͆ubr:pZ.]d``Ͽ|O>A}h7޼`    tvv}688XYYYVV)7'ұ^9^B/~1{n׮Wx	,(M2۪(A]MὯ}z>{zsDnA_栟s8۷Ϙ1U$`ݣ]-X}miϘKs6b|a0Ȱucqc6NZɛ)3RNֆuzX)[~3W]E l={ſ, b5_SRRϟoaaq֭zs     X%%%JJJ666]k?>X[T5e(Tclu\W׏iAmxE޹ɰۘgY]Ll֫-NO_9z?akk~t
-
-
-߿ t!NoHgc"7򩳙3vKE~# :yEca]*_>Oقˊw+D96K;io[E>O^^^NNmmm ?)K3y    aKWWׇ×.]Ƿe˖-1<ڸAw#C[iS18*®ɱk+dew6"zdXO)S&X`uUئϙ0lf=]='@;w{܁UcqQԱ~UozKYv|==fM%O<1<@B9|y#Nc,,:uh/p`7󫫫pvy    `؂ܿ$...TRP_X3kO_+Y?ZFX:TZA6rA]\U@svQT26hm7_ָim!yOR jN=eB6,B쨞soEoK]HQ?仗{^u#}Va#SSSn}Б"%r]E@=ۚ#EXCzw@&y1}4:"/t3ONd26#t<B3~jS[˫VQQ>zracrA    `xR^^~ȑu	
-
-OTI<s\P%Nbb\ԡ{rE(*9ohO͟{=kUmm.^ ~KOnddt.)}vl&,T2sE^mRl9q1Ç6ZX}6~uAkNlepw,Ÿd+4@VٰNk֯{ٻF˔JfL%ka!q0nAmgGIڳ{.[t^rț)~7)/Ɂ=@    tvv9rd͚5"""7o|r]	p[DM:e֕m͸RFo>趥	MQjZVLMVI
-6}pK]XkU\ddTo6mw;_aW޾b9Xg(,6==UOcqGH"D^MۮZQ|),,hulδiFA=Ch-B?	q]$jo	7"ϚzdKkÐO/| qҤS>4:	}Ų@{iAJ_H.dQQQZT@    F+%%%O^z577U?^_}U{8\=>UQ.rҿQuO^N8KIVSLy M[r广P3"4~.L`tJ(!ijJ )yt7K,S_8}*/C>9^\HwovtP=x@R≳
-gG֤qۿٶmgJom$Y更o+45],	"""[nvZMM@000@    _|9}6f\\\m.!pjtҖok&D4]ݸ^OG{Mr3ˋ~ұ#t PMřC-]ݓ444q͵OyjjTՔT_$HPVDHhֆK-u!P:`k>bn_҇}}gg8pѣG0L6\    0|@^cc#*yyyQɓ'%/˗I#OCƚ!!q&ؾV!LJrq!@_ƚkiiM0ZEEʲP}8==HHH=1110:K h    466޸qNVVVSS3**%{
-p59+'LhV\McBv<N8BKK+//\yA??pbbEo|@    ijjz葹9??r@@@чKm-Ccd(5)2EC]__ط/I@ϙ3gPeU
-###k$e@n"D=yoҥ222NNNo&Ѝ L    Bkkkvv]Uz>ȁB0aN3RMU8>.ѡzyzz~*Lˀ@w4Lmm3f,_<22@ wG{bcclm   ?IggÇ'   **$Ze:~j.檽R 3S'q@çA[K|zz1+++cyyy>LG}@ߡV\uy¡CΝz˗/WTTptq!,y{    ***ۿz1P? HWd##έ^:<=LM7qqqJu〆Y2o>m4**y桊)~S7JKKzxxvuucffZ[ί?JCzr   H$߿ɒ%rrr&1F_[5,xm_Bu~		'ڹn^ႆ^?>\̞=EޑG@e4.55芊Np ˗/7]    僚ٳg!!!BBB\\\2uVV[K<i>%%%tӧq1'p4R].Xplri55533iΣ|C,Ujo(M
-USS511IKKL 9ˇ@m    V۷oUTT/^e˖K.5_w,"j"i}ƍ`cĢυa`"p՜X6m߾}覝6mڦMnHGC%1V\nngϞC"=_   Dggϟccc555.\h``pSD GvCUwS&Lbbb^>k>`"аZhѸqf̘addtf>kK`aa!!!G@     رck׮߸qcjjjS1[|}&&FF)|N[kV)ti\Da.sEoooAAA:::T_ӻDh.] O>\Quq8qZZZyy9N@>}z}1    ˗xU&(cQ033%-+uq27n/T8Ja!!!222SUU=upSaGcqIJJݻΝ;2\𣀾q\9Zu322m    <Ǐ_viO8QU~ڱ`+sѴ.yylio\ZG5#''GMMn`؊$ãq?~͚5+V@u"7Ch    ǣ9^+++LlzOPwWqApTVNNC`%\w<11QIInaaa	xxˁ@ݰSrll*իoܸQUUsss,&rssAs֭[X۞ɓ'C    ˗/ps8phA8-+Ֆ5Gl^wbDJΜ>&Lx8:qMMMzzzd]jk.]|- ݸ` }=؜˗:di   󴴴dffHJJr6888uT_$ZK2kn'RS]C{>ӧ1$:@#gT+++_U%tC"4Tc322555
-
-x<xV@E-    /Ν;U1c*v_ho HLlAXkKdEK>G**Vn1VXζـ5eЈQK3gSQQ񹻻$w8 зMĕ'hhhgڵO.))
-(<H?   _B}}=*jw-  P69<XP_}x}2u.;]ǽm͑A\%EWӜMFGGgd=#W^ݴiԩSQ-.I
-|@4yΝ;a0XfRx"SWW'..>H,K3   AnnnF]===\"@]Ѐz|?`ެYl7y9	SLy)%yhV]yu+ܜlllϟb2 	ϣ={v֭aaa%%%hBXWWGAX<iii   Ahll|r̤Q5hΟ݇\,e%4'&&{G쑇6iҤy`+Ј9T;w.ܿي&F}@qEtAsz|@CO.    ",!!ammPs\VPt#xm:\ıh$DFz!55u1Gݺ^C̙3rSM4O222ήw<|q~B|3ڃ\Y     *<==.\iaa	XM[ǯ9ɐrM%44P$Q$s!STR(qeHW	2eL2%44SM|}{}[.]TRp!VU,'_b>y5ҪgϞ~vZHVp޵gjϓ6n8rHr382tAPn\J/ZHPPPQQ=>>]Źi~Ld&   `|}\x$y&]no5KWmݺusܹVu+z9Z"ګ޾غuرcL:::`BѸׅ
-??9sN>=æY   'C^|w^---999sss,9oT2Mr3<3عsgm퉶6߻woC8cP֧
-
-
-=z֭vੀ7l٢"!!vZRhlp5A   ?|Q---QQE;w(4܂Rߚ::x,5R"dN.]Gsmxtλ.g۷ONNwǎPaj} 3E5)=jjj0mڴ~`n>  N:v3f8q"E)PHsLٸ`&CӺv"++T1%oݺu=g-|ɍMn~uuu__߄W'r32SH9zE12J%AMNي1E#}jqZ1ynEN>t>xnsҏfٱcǸq+##si|<,Wl  #GL0%$$ȫ0%נVу;wN>Ɏ//~z/o/MMfF}Ю8cPL⛓.))I.]Μ9sƌL7ƶM1;b~m7T45!}'K~'MÜB۲:,˲ٳLB4CA|33Ĳ2|5a\   8ϟ?;vLMMEEEPYZKuYLTHc|ag&WQ).\DOPPgϞuыNhHIIIKK|G;iM%۶=muꞴ=]rBH}us>󌥍5KR̛#F"SRR%A~~~]յޕ\zBf   CeeeFFRTTTSSӇJZgݣGV3':`A/?wCrҽr3'),_n*$$(%)7U{Νׯ'u[aaSّ6888$$ܹsa4ҺY֩wNfCcY0'mŒf#өԛƬ\CPs\;	Fm5jϟ'_~ŗh	^277CFO.   EZZZTTEDDttt߾}[MHP+wϲy>{\ߡ$)XPO><?&?N%ٳzԞpTbD+++KJJZZZ޸q#))0?? Y4u&Kk%a>=6g8///++a0ZP-'׻	4  @jjjy9.ZHVVVGGgF \Pke3E/QV:7[;׳'""ϝ7$_kqޠv<&WWQ...'O_bExx8b!  h	Tf(&..Ͷ(  ̌$UgӧOKB2?!?Oқ\E i>"//qj2gYUA:=؛חmmmedm/|pRE  -kRRRc6g=  ˋ^by
-
-
-n۶%Gk}QwZ#22TL_\L N2xrZ;J-M܌}W"6wPQ*gWeee`dd  F^^ƛ<nϐ!C   (jjj
-
-
-׭[iӦ\mɨCٹc<cͪ϶skO(ztϺw_p֪vӇOOϩS?~<--CK @+=o.CAO.   E^^Çmmm忳iӦ[nUѶjnƘQ];ut*:+ͧE?ͫ8uPjؓzT=O.**j``G ւ~%2fc04m   ΡJJJ
-
-
-֭uVQiࠖ+*;1׮i݃iKHmKퟡB>.G8AHi_/͙3GRRrԩ  y@Pq{0&   Nӧ'O&UbX.!W7mgkm4&0o߾G6|mz:f۹cY%1Wnfȑ#GO.!!1m4ooR\  gcclֻ&նW^p{   pO<qss'9swbNF0qP_^v//ot*'$8K.=z8}ʒ̿e=b 6}ڤBP;PVZHxxDHKK{zz>}{  ggddCcr  LJJJ%%%MMMCBBԖ*DsՆcEϟҥ62dЍ6g-#7,#(?rJyyy[[ϟ  ?8WWW99cGGG׻	նQ  p			ӓ;wɓ'CQZ(Zq
-"),ʊ-VSg5`Ę![3Sܭ[^8,zɈ+WǏ1  $Ym5&bm   Eeeϟ<8m4		Yf8q"j!T蠖(5yP%Gw߿ҽ[[߳sr\ܩS'ֳg59M2}ËqV9goߎ^vݻwt:^(  3`'   ΤիW>}ÇS>Z'Y~7p@_Jy{ЇLPnϐMmRZj.io@o8غoy7nڪ7nժU	  lI&ۃ1   peee޽9sA}}}S>!nBݾ8d0-Ԛ;g9ji1&m]vsPo^^>%P;TVgϬGjժJM  'T\   8SN:TWWۈcA--<<<a[+i޴/J^tKս{VmX7{߂9_?J9~7i5RYPUU%3f?x  @>FFFTS^^^2annPpfm{   p)))gϞ]tLRT:.ole.y=:\D|(]m1O>=>4o_W<ph9ZӸk{!$)*MMMII
-OR=  ?p1an   N2555$$dٲe5:aGGDRAjjm۲w^1׷3OwV5k|ې/4%Kv	LF7Q?#?A  ex;666Tnnn=   8.,YDTTTII޽{#5[4𺏙Yߢ:SNFruڪ8-ٶiYM5C<,Om"j7  llll(KՕORR488Ã1   paaa+W\f͝;wrO5lm%Eߩ^ܳgՔ}KG[0ǓZgҮ]oEK7BX#_ý555No߾D  
-T$sss6nF`  ߼ybĈ[n%?Ej}Q׃oLOԔ8൬s^tF yǋ.3vl_@dj~iĲ)agΜ3gΐ!C===_xA  6j&2Opp0\T  iTWWEEE\eTTTnݺUl>t4h^[+]vݸaNi#w}xשgzz3	Be))'L}R8  6ay~F`  ݿTd&M|0zI큚ݺvjo7LL9r$܌i.-%7=߾v5|]gEz|KΜ9pB999---''آ"2  ݞAO.   Iuuuiiݻwwܩ",,ljjzf0{8_CHbY';CII;f%>jz6"@P+/ח/_.""cǎF
-L5  4'??q{ж   {}kkkyyy11E>}070*}PEpw5޽a_+M\\\b\F/6=k׮Oe_M?ppNʊjX='"##׬Y#---!!bŊWe  WWW0qqq̋㰓ܞ!C  iڵKYYoƌAAA)P;w<p@)ۆ\gשS[XX,1~om9'Ԧ*~իEDDƎkaaq\ _wxyy3j  hD%%%R1119zh#Aͩ/x\O}}m2[mu|Ձ~}4n]߶mխuYYYxM  /7|awL.  QԔzxxL6MAAa޼y'O"jP1$?]-;]Wn+jnrUЎ<{nmm/Y$00099z  7!..U_Ϥ$[Qm{   @JKK߿!CCC			<p@nfH5*P3yǷb8G-w?N訤$##dɒ_VTT  ۃ\   8ZݻwǏ#oCxR-G\Jz>m[LJ慐m񇙩VI~7Wu*OL:|СCg̘F		   n   h߿߿ѣI}ŋ	Bv:uڷwe%k^N5%*+;%www---R N45!!o  0jhԭƸ=  &Ucǎ͘1cԨQJJJNNN<&5CO;/^u\lTJyھUчWSSۻwǏЪ  ~!qqqCn1kۃ1   p ŗ}icccIIIuuu{{{R)B}jV<jd73PEy<,sɱaG;w7o^  _cuxç-|n   (jtܹe˖7Owu޽JZ uTe^ 垩))޽\  ˉ;:y3  TTTddd^ZVVVBBbÆZV7uHϝ;WXXxҤIo.((@.  帺rrr   4k׮񉉉^z(tMA
-!H);jժѣG
-
-ZYYݹs'77  }T&=   8PSSSqqqII˗GDDeC&Rr#%)H闕EJB  q{q1hÈ   vKKK)))111S{uC: \cڵҢK.KNN fx  @s{"##\  Өho߶QVV&%Kf^);"ACgݻyfRȘ  ~C1=  ɹ}UUU/_=uV=9;;kii.X̙3߿+   :4???MMMQu  @Ν;jjjBBBYi!AP˗/ǎ;w\?   ѮMlAOLRR5 s7a???e 
-cccGihhxȑׯ_WyAy%G<>l0--7o ,3  p͍=|6a2M  mOMMMqqG'N(,,<}t__߷oVCmvݪ'>>C[[nkŋ%%%( sV򚛛EUSSݞ`ժ AݵƎI*DChAP;7zzzd _YO<h(  nh0##J%nU$sxyy)K
-W Ɣ{3gΔx5$GUЎ|M?zYH{X:2  8aߓK_lllegg=s h{˗'բiӦyyy={0@d^8sҥKeee'N}۷oggg  t{xxxشϧ666/w Tk&!kIՕ%= $%%>|PTTTYYɓ'%A6B"3H=icccR)))Y[[_~>  aэnalkH8UMĘn ژoߞ8qb#FPTTq$7AP{Q5Pf˗}ʕ+iii( 6=Xܞ|؅+32sG2#xNtt45ܼkԺn&aõ 1?~={MܹS=P7}67}O5ݛ}=Y.]qޚ2t~r3C.]D>ޤ%%%,YVVV  8˗/2}n K{{=$88y~V7-w{.Tʌ.cz  O>.]ԏ׮]KjL%'a*y1̩{E?j椹n;DEY`w2=^X` ,4x3S\Z^#VOq^`XXի'ŋQ  '=?h:C^c$ňr3p{  `R]Ν;%}(;ۘu:۱M^Lok^s/Ϫ7/1BRgo"fs=?gVe=5W#W]XM~޼6҂}8V'?B>Ǐ/++kjjzԩ_b.  dߓV	rElHѽnO\\8^/F fE  6:QDDն***
-=~s=_=z&͖ќ,7W}pۓL`yK)94sv[LSN!r_wOR$:whOl4R1=k̚)&4y7iC&-j0CrکzU^rk...jjj"""s
-
-z]mm-w  dm###`v4b#Zk0Fõ 15iaa!'''++l2H=_I@Ey?ݱMWt޽wҹ7SNdҥ3"KǏ:|8s͂c]jށMj>p Y:b8>ìTf,
-:d~p꾚!wڙ,ի([?gvܠ'٩Ϙ1799;  p8MɅ^hƘ\0~ _Bmm/_.^rJѣG/\ٳi_/ "&*]Rúuoߞ*f6O\Le1\\ȚFe,歛G{]yJ
-|!gy0n"OُWג9hسz*uݻwS]Mht=	=]q޽[^[_j_z*hG<F>&N8|puuuGa   =a?iF3  hjjjrrr\zjiiiaaaCC#G~XQr5GY^<uX>89YxIߊ^1qgvkVK۝qo__ɪ[Ftk|r2dk˖*?ZIb,}VRbYJriF];6&GqW,L9T8tLQE+8Uɓǌٳ"   nO429-###= _E^^^LLĉǎkhhxׯ_הD۞D8o\\ݔG>^I.S5ݛjUSmԻċ$ϣxp?,ߟdf^sr\jݝ,x|qA{3'7'N/-G8F%GG;OYI~z.0Q^׌vDPjSE"GOOOXXX[[jSRR"   m4~K'AiwƮq# ~۷O4I\\|֬YGIII*GwН4DxxzP/	{?ں=ܽSAtldLד1}Ȧ˷&K|
-աl^/]CI1e``@,Rpb(Cy  In̤.Fcю`X~~~mi+m&5f#DsKrQHdj/%EBv h{tÇI9&""2cRzU5ꕿV4w4ԅk.U܌2L7/߾>ҪKa+"
-2}憏;ٌi~~$K촛ɉٖ9A߆ekH_7_^*r3%)i8#L2Ɲӡ&'((DTTt	;wA.   ,4';mgtܡjÈ]r *rssccc'O,!!1coow!n/s1\OWAM(ݹUԖ<}dCOu!rE$3wM}p۪^çemIw)l%s`dz5kh~YJ`@j\0Y2W"V#Js?Ν={TVVvܸqk֬rJZZZuu5
-s   4&J=9i2acc0!ksss???`T2͜#k]S,F _EMMMYYكHqϯJ>|H/:/Lrz}D^*C?&<5GWGJ.<<=oIxnq[j={v[i>!s槏lWT}ozdm5]D@?7js-X@HHHLL|r9  z=   ?EMMmԨQ'N{.TMa16ѣ+eOUzo=X~@4GVfCYM12O:uꤦ*xE9{Yjܾs89|#VR~din2S+)bثYruUЎf9sTLLLHHܹs(  40n   Ҹ8oo3f:ʮ]?~L+8:
-׳nj.<}{Oqumc	>LGk,r\d:Wv9iNnZp<5UNvuA/ iddKgL16spQe?zkQToݻP#p_לּsіbbbK,9qQ  `m   "99ԩS&MڱcKOm/ѣƌDO\7%^PRoڠ6ގyTםvSG\y<fa6ϯI?5ىyiԥUMT$ImR2ܶ:ylѩVgŊ:ZcG"3#X11:wTR$?|[[[O0ALLl!!!)))  nOK]8   )eee&&&&M{AQi4^B5j"$N[안B69|#nNĲNI?VLPM]Rb~ïI^_|"-8iԶ
-|ϙ5;`rm-ճ[`$1 ?G൶MVq^Ǐ&OL
-s:t(!!\(  4DTTT   B^޽411TRRڸqcdddIɚln^[K2իWWmYq[Q&AIo{]tƞ>ٱyؖlNveIoc8OJ5YTyX=N.Ns74%9?ǐWl؝;wܩ.&&/_h4     NYYׯ_O8xbIIIii+V#	UZTr3D9-SM6p&?۲۪RVIDGTAY:{RK\$_dUS83Vd1yny;8lEg4Ju;W1q=TGh:El$!	C'9vuc('OTUUEDDtuuܞ>}J0  r?  mA~+͛'(((..nnnR[*g[RQfˬWaOfgȐ~o__!xyY3JϙQ5rsw|3w"k thK|7Y2^h^bYZ>UMO~ۋ-7%}x΍99L'JN]v0捚_w`z*iO455Gs۷o  xWΎ y~7322/_.---**jbbrԩ*hG̶r\Sm6i>\c6r3[KXh(2Dv7f jхTaC8}vfeIENׯĝ4fċ$BU^?/-3Ņ[F'TRp箮BBB۷ow^aa!Z   A ~Hmm-=}9""bݺuRRR˖-MzǶmt1|^*у\[`vQ*1ҵk}{ݛe|9=lhQņ(g<h_XM;db)~fw7k$۳g7y
-W#WA~xqq###AAAEE;vܼy333a  4HٽKnAp{ RSSmii ++xbRH==mٰaпRΌL[-թ!	j;钽lҲݬ͢-lul2eiW"V37vy5z{~=k|xcܖ&ve*zy
-qg-[D(~6hm~DhREɱ=pBqmذ!&& V  &h =Cݞ,BUUU%ׯ_W̶I[VTٟjۣ,p8Y.
-R1"?S>oFo^n`_3v6e<8?3۷'e&K'VWFS'j9.EU˫_ŋ)))  ynO nLjkkӯ_yfR>}۷o+ixf@ޱ27S<ݻhS=ի[PtvxOڋ-JMw>angq4AetԥU?{#Rӟ&bMATUt̐'O.\PRRRNN,$$$995   =3.,,SVVܿNm&>	/ϑ<ΝٻǠ ˽yqJ=ybECsPo϶V491A9XC0n<ׯX֭09;bĮ];S!X!Dsh59<,,lɒ%BBBcǎ%>}B)  0 nAp{ ǒeeeeRuww m3KE>*ߊ^G<ɓNc(KRkw5iAiNqu-s<"t<	y<`a^n=;ݸ:StKKKyyyٳg~3  =ATWW<xUWWWXXXUUɓ'E̶*i^n\7y_}{$'ؗ識ʫavlj|ȶ%^eRԩ	ɜ<Hjdٜυcvĝ)$3̐zpۊmSmk!@e2YղJPZofVe^zu͚5222?r۷oP>  h6 = ={KCCC@@@[[{߾}>޶#>;8Sav(<IJE׽JutIs%ӿ8r<`-S{ޏXZqѕJo?Vmu腞$wN]8e{Y ꕪ:uV?sj)sroXBGׯޗzÔyDsr|
-97};o#FFG]MO}"5@dwN{zE'cbn8::N8>ǎ/..F  nzrAp2剉nnnZZZ:::Ci3	:dath3'	Y<c_﹇|uv>°^`p%slpaGcF\vكVQVi7uh}pOxؖ%WOٌB%YZp|Ckg]S^qg͊s6IfQgoݬMpiL2-#!>a[XR,DJ'Ѥ!e)yHCJ!R!,3  Vt{ =c)++=pٳ䴵_^sm{F%^9\^nb,hh2`@>!}I-6k.Tk+Mj*=g@!?F'PC=,1wnݾNař~wk#K˗hɥ<93ٹs޽goWT-
-nj~|r[weees=  *0 nX
-㽽gϞ-&&&--maaA^EkmX>?88p"ŉF5r/sfv˭*\2S\Ο3[i>AAo!쯡.0u;-^8oߞ|H:n[1N0p HЉ%{dk$+';rAxY.nK"%9L[s&+1zgW'N(,,iggwΝl   Zm@O. Τ˗ÇHJJ);FmjwYg+㋝40uѪǨ
-M0z[\ ˽!(/ޭ{g.Q-J6g$&t"Yui՗ȮYRx|5W7%1{JE9{OxݚI&}Evr%b5ٗ9-C%QښcLtO\6ގwcT\UOOO55+((رڵk8B  U@ PTT7sLaaayy5k֜?>33VH;.1{֬Y"""222+   cL.=KeeOdeeMMM&הcAPĄÇϚ5K\\|	7otRNNNUUb   նcrAp2>|pႩ̊+BBBr3CB*aS.]*))I    n 999!!!TyyySS3gΤ}PV7[Z烃/_ ++tҳgfee0  Vq{ 8wޝ;wBYYYQQ,000!!0BԲV=i_/_~ĉ
-
-
-.<v؋/Ir  Or{ж =!/[NIIIHHHGG͛7cxl!j*i9gϞ]pÇP  IDDD ndjkkRSS/]iӦcG]]ٳgAPKdrիwСj   ~ = ֦^~RLLL@@`ƌ{IYߵxr!j
-s-[TTTF<   ~*A oݺࠣ#++;m4cAP3zƍ[jhhP2NG   ?Ƙ\ =~{*J!J3AMU^rΝ:::H!Iѣ   ի; ӧj-%%Ef;w~AY I*=WWiӦD]]%%%555(r  \p{ 8ݻwO2r{vu-RkcAPU^r+444VUUݴiӥK(o-  6ѓ	nAp{ 璗ٳ{HJJ?>SIAP#:px򊋋˔)SԬ._ZYY  @AAO. N=z3mڴ^͛!xl!j*J%&&=zTSSo߾"""֭MNN.//G.   mIDDzrA ___555^^^III++.dTBľUO7ǎ[hߐ!CΝg<    n %%%5kںu.^HjjUp{ A>XBYYY^^Ǐ4e,  _8;NATUU%$$ڲeƏhffvԩĚZ"ӇR\B !)LHB
-   ~ۃ\NQQчN8tRyyy2(5R3aaaVRTT566MHH(((@
-  =hA|ԩS222?yd|||\דbDDfΜ[QQ  r= 8:͛ SSSyyyCQnOMA<1~07ҥKjjjww^FF
-U   +W774Cp4eee?>{uF_ZxO.A,zݼyF:uKLLL~~>   DFFRn@p,՟>}zGݿ===??OVCf>QI~Н;]]]#''{gdd~*  _zrA BeeeNNNTTEEEEDD=<<bcciBD`q^\\\$%%---o޼W]]  o'Ap{ 'Ch۶m7n̙3]]]޽[' Jywww5k)(lmm`   A ~7RSScbbL"--cǎ[nEfj}J_rwwח4iƍ#""  o N"??֭[SLUUUݱcǃϐZ^p
-NybbbJJJ)))t:(   =7$''͛ꂂ۷o \Ix`bb"&&&!!hѢSN%$$   n >,WVVuuuܯ]6,,,73v/qE'?7o<)))ii瓟			(?  mAp{  TUUZ۷=<<M/&&faaqҥа8VUtO"Μ9cbb2fAAAccc??8=   ~Oж = P<xP[[{ذa6l		IO	*A9ųgZZZJKK>\WWz   t=KmmmiiWݫ'!!1aR		SE1<i|%<<|ƍ&Mvvv+))A	  7w{z =)++{Y@@%KUUUW\j! 
-\[nmm5~ٳg{xxܽ{7??&  'Ap{ STT͛cǎ***ʚ_| QM׮]۴iӄ	dddf̘t޽Z   ڋۃ=Luu5NOHH8y+HNHH߿'q<~q	cƌ޵kիW+**P`  hGn@p8			AAA,;wCbcc+JՔAЪ`I~Ѝ7F%''aÆd  ^F`A JJJN8d)))aaa===WWآӈAЁ+?̝;w544,,,BCC~ZZZr  @s{Г =|ݹsHNZZOKKyTV<Q2I';yɳOJ Rٳd   Ў`=/ޠu)++˕+W,--I-OHHH__Ν;%':E'?cll,K&%%h4   ڣۃ\/ӧO	Z찰0KKKYYٙ3g޽9gBPׯ.]Dccc3))	o   '@ԾܞÇϟ??444++3AZ%''7mۦL2n8}}}ggׯ'u=#O8|'N0aɒ%qqqh   nAP=|ذa
-
-
-n2%TVVfddܸqښ]gkkK='*i%KMD&؋Z7w&gC%ìܘO1YbY~ZSԌ>_w61	6rCkI9cNU?yrξ:xDEEkEWW7   55N`  NBfڝS[[wE	:u*'';hۓvZii?SNNn۶m׮]{ɫW_x_^9gQw/MIY} l>}as~x\ٿ4tteQ3Ei&#u37jMҘM$&&||ݻD#$$dkkKH  Юw@N䪨 䞞***\\\"""[lcAIOOyMƌCUR[`ڵk;ύb,j6MʍF&qtR^3NO=zSfFu]w~Z|?0-Mꇩpͺ䕱aÆy)**Ջ<򒒒=*))Ay  ]sUjd?VD[(ʺ?3VƼYʲ-I]'S3gSFVY˼/:̉3%6f&C,0nuO)X{Xvǲ-y9ֽί:6t,cIfs{Eoe7=L9ͺ{XVW,˳Vvbs{VCR eNdd˗#"""C#D6;:::Cݻ듒PȃeeeO>ӧW>z1L~iҊI{o|lj'B#ۊ[]9І{dٜ,5jԀuFN:mܸ1##!  K[ܣH
-HIR3sW6ag̡bٖeeKt9X22/
-u\w[ezLd>yCIջw晌ԘG&,r]dI+|8,&\,6gc~CM^g0%c^ۘi{=2&d<)s _[!34c"j&cȑ#سg.]ɓ'(AS5k??42af)bR!M:V%hݽ];?gy5iY*///"";+Wq@   ֯_OMM	jK1늱&jXe>ڊ9e<0ɒxC+VY%qըٜy5a9v6{{b{ĩukM%MȒI=ּ{0=梁quoa ˭˜\o[뽇^Ǻg-	ey꽾׈9W,ے2_GۗKg?&+3e$B6ڵkΝĎ;Q΃&gիW_~֭ۘ/?fl-i\wlLҌS~_-Lٟ&̼tw~x?03C~x4a,"+V`xG   ۷o  m̙3kll<y;ͣP?	濳f<x0wBCCQ΃SYYxʕuu6r~C]~u;F`FJޓܤ<7tٜMM_FnTN6iew>'B-!{@   ׯ_'%%%_{梠'#" ҫB P@޼r"ǜD(3zZA285PMBۙ7o>|~˗/(x"yt&ʻh9իWbYB#Ց#vKRkE;Rfu</ž̪ޔ2fkoi^obMuѶhK?N8})W}SHԶpKۼ|$/ӆoqw+ٳG_|ܹsgϞv۷dǏJˡlmm_~oaFNVo_u73hobo߾  X{{{ϟ?7Ο?̙ׯ߽{w8~᰾}˗`wjs6rbv+v?[q,3W  ӧO>\[[t҅^z֭O;   鲿v+Wܼyɓ'߿ws    Nܻw߿u   ٝvww<   ,V9    NvVVV   ĴG   g    Iڤ=+S~?L+Pwii).x\[]]pP8ߦf8v;N,?7K%E(!ԪV	å^   ^mҞJvtK8533Q}Ew`z^k}*Fp8=   o>HNMj4I&JͤbzI¥ҞOHIQфWr<2
-eBەRڙB    ')TZYf*%ŜcܘĕVE9i$ۓ I;ŐBR(*:jWx   fs4&8jMM~01EU!i{fu EiAVL4(_Vu$    '/%9[j3{*42iaҞmV0Y{1Wu:%   `߷H`R6<;(= æ=&oT"˸   1sgsq=ͽ;Fe\   ?)n.t<iOsjvQe\   9rړb溓<O~{y<8.|`iOJ\\   :r3eMʣ h9><ugB'0Ougjg",wu   8a=)t:^o<p293XߏN6*NM2Ͷ}r'5ޓlyT^O   8I{&Y8HIe2LnU< (\4۲iOS+w-   J|Uı̬Cnb2ip>\M%CThb qS"˸    6ZLqne\    S}{<   qJӞiϬm    ӕF|f{    
-qӲqg|Ғ                                                                                                                                                                                                                                                                               ?x-
-endstream
-endobj
-9 0 obj
-60095
-endobj
-10 0 obj
-/DeviceRGB
-endobj
-11 0 obj
-<<
-/Filter [ /FlateDecode ]
-/Width 106
-/Height 48
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 12 0 R
->>
-stream
-x[WYizÜ93DIT6A@cnMh\YkUνU[49;\n}UR"Tk$N 5"e'LZ< 8\!`/Nwtt;{LF9#EerFFFnwS'ݎE`8uaOF#÷%vc~[ťWLvsW"3ރ"@ϼojx;4b{G1
-HˊB&s؞g[=tm&-g5-./gC㨧<(*|ܠcr;\s9'g=tt|RD"B~qjSH>_^^̄|8/_9_ﳅ.ׯNcNE:::l6ם5d44ECC`8(C1Lbr+gٮ#+JLzk'>O!&ɒ?,^CP&Ĉ"1U. xVO:͎a7d2P#F[߿w""CV\b@o&ʁ+)ǦRTO^(ZZZrݩTMSV.DBE:-~d2BW-3jVM>r}?G *Sju,4琤,5L熘0CF2FYj燩`<60\y|.l,uxdmmݻ!t!pDҚrr|3Q2$2L&G	HIwq)q`e<4k[E)mJƞcn.UnGMlo؀~ȍ#0?IewǄ].ՏWze19>_q9h ~No-ǛBlDGƿ&Yp0N-Y͜	ڂA@rM;"!{b.Rw#+rH >2 '+QT!Zgx +Kʱ#wN+ńlunk.5UkQYߛ	Tc1s܏g2q1VĠɈaj!g$ɏNҼʜQ޹+_,k uBHTaXӵۯ&r]4xg2̑,SXq+E;ǝR#/v;;i`*&@A-pXHtZ7VGB̠6jce(^W̺w	f]zӴj~`1[M_lzt:;;౻&H*Hď:W NՕzMӪ bNHrje[pg
-Tk˷#[F!<n$N~ kA/BףYϰySupG=%Y
-^H[k0M]p*a1ՄNX_Y9=џ<ewX.O<]W#0FS՟>y<amq2fi$7!^[	lKfG?@NE=Dm&F2N8Qټgd5YC%hy^f6"Th4~7Z_Em Hxc5%Fnɩd"F.m4m4m[֤8(y-^lN|~~\5X V/'j{7NkQi3X<( v {FKjPG@-N^U"xfM͕:LKu ٩ica:SNo{%y?hx:!
-D\ZN)y%EKudÔ?U1o}}}^.A>2T(<]llĺ8zvӥXn:!ɿQMb~*9YL<O+yy n=%YN)k $~sOe7ߩ֨WƇ~x{s꠭"a)0f.SúNll;fmDZA{;5I#*-|9{??-\ܠ2hlc>LXѠR.%w	Q-J\^!<9\+Z}
-2l@_=)/*BT+B)%dz-<収<cr|懶xʀWJ}rL] =#qu^4@R@qwv E'7552-ny8o]ZZX
-|slAwj\z~=jL
-L,3Cx=Vا?9v{zJ]X|1K&T(ֶ_w ll2YFm{ӧzw<|w:ٽgarDb8W% yxxd2&\ȚGP,|w5ɩ
-endstream
-endobj
-12 0 obj
-2610
-endobj
-13 0 obj
-endobj
-14 0 obj
-2610
-endobj
-15 0 obj
-<<
->>
-endobj
-16 0 obj
-2610
-endobj
-17 0 obj
-<<
-/Title (fr-full-frequency-reuse-scheme)
-/CreationDate (D:20140609013142)
-/ModDate (D:20140609013142)
-/Producer (ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org)
->>
-endobj
-xref
-0 18
-0000000000 65535 f 
-0000000010 00000 n 
-0000000059 00000 n 
-0000000118 00000 n 
-0000000310 00000 n 
-0000000398 00000 n 
-0000000416 00000 n 
-0000000454 00000 n 
-0000000475 00000 n 
-0000060753 00000 n 
-0000060774 00000 n 
-0000060801 00000 n 
-0000063552 00000 n 
-0000063573 00000 n 
-0000063589 00000 n 
-0000063610 00000 n 
-0000063632 00000 n 
-0000063653 00000 n 
-trailer
-<<
-/Size 18
-/Info 17 0 R
-/Root 1 0 R
->>
-startxref
-63851
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.png ns-3.22/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.png
--- ns-3.21/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-full-frequency-reuse-scheme.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,162 +0,0 @@
-PNG
-
-   IHDR       ي   	pHYs    nu>  
-OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
-!{kּ>H3Q5B.@
-$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
-dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
-b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGwǈg(gwLӋT071oUX**|
-J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!ku5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
-M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
-yg"/6шC\*NH*Mz쑼5y$3,幄'LLݛ:v m2=:1qB!Mggfvˬen/kY-
-BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
-+V<*mOW~&zMk^ʂkU
-}]OX/Yߵa>(xoʿܔĹdff-[nڴVE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-6U#pDy	:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F 	IDATxw|SnI٤@+EٴP[Jw뺭'"Eq1[6(+Yh({ti8e+M^?x44=dY      *J      M{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x%    Bv}ǎK,߿CCC	 x     -iӦ۷Ņ3 b0   ^`Ml6[~~-[*++) x     -o߾͛7!T*JZfeY2 i{    ¯FVGEEڵkʕ4 "   l6۲e-Z5M׮]%IZ|]N'% B   9,<x0+++??~~~*{=zؾ}%KV+U B   9.ܵkd=zZBL4)  `۷ow8
- <q   &֮_~ŊjzڴiBYzM&bYjUQQ A   IeѢEO1bĉ$IԽ{	&[Ni <q   &m۶h4N:h4T?]AH0f̘C9sf555555T <    hJ>}~#Ft:Y,˲,IR\\_/֭+	 {    4s7tVt%IRr??cGEEz    @juPPP3KD so	    #   :=    @K)Ɏ;  E   u x,      B   eVNNί	 OF   pawtb0 x2   #}= &    >dBI FC	    a0jMMMMOO7L&f&)11 #   |HNNjUX,%++fsi4Qb G   F{yjj.g%塻 <q   C̙kj! OT    Z {    _dXfb41;6   -%555''uBdt @@   ŒZLgKw 	   t%IIIٶm[vvvRRRfѻ{}     >$33SʍMFu'#   |hTZx4 @@   f&Bdee5] <q   CjUj-NS0 <q   Ciiiiii|rrrI p=   3g2szzzxxxZZ"333..ΕLf& x>   lWX,Ţܒpuv6AC	    $>f9''l6+CdJLLltuve #   |l6J|(1   !iiiӧOl~E1 <q   sRSS/ qC x2   dddHD    !Fq۶mHNNVnoU#2     h4,Xa轔 p   4b0CS)k    QV5+++'''''}h4Q$ d=   oX,vјȹ!%eYb^ \=   i8/dRR;z\t '#   |bQ0gna㢤< #   |jMKK3͉%ru8 x2Ry   dgg/X@YKzxxxRRRzz9N	    -JIKKKHHh>a |   |2Cl6geeeeeY,l6gnx%${    :`4Yݝ2k    (ٜLL    -Jrd2)ûY]= {    ~Krrrbw5 '#   |QRWwS5'#   |HrrrJJJbbbR{     >$%%E"333''jd4쇕     l6ƥ>B䌌{$I <q   CVkRRjUh2VlV,՚N <q   CӕgΜ9)))]<%---+++'''+++99    %3gٳ2,PX}= &    >b	Rl֐< {    *͌UJE x2   (7]eWz     >h4
-!jMOOwm֐Ȳl Ɉ{    L͓㺱!]JC    e6srrFc6]#RRRx. d=   1ӧOWZX,Rh    -J4(rdJNNnjz     d2L4C_ x>j   RJk$I '   ~
-뮥CKcn h{    /g6\o)222u/  x2s   ^.55UzFcbb'555U3     l6+c̙m6 ʺ}:N OF   x3"\^Xw$I OF   x2L&!b    ~-w,= {      
-q   ҤoIIOOot?ʽ    @Ks'P   L9s\]{$Ir: <q   ͬM <    s233Қo    F,KVVbX,FcrrrkfZsrrGe0RRRx    hY啬Vkzzz)͟󥦦fff
-!{_D   u$IX֤$,0&h4
-!fsNN΅&lO(    h4SRR ̕$''gdd׷gϞ<*ٜ
-V+L   ՚eZf`HLLZ			:<Vzz,X=sY,eddL&^){    NKsL9sdgg/XjS1sifӥ8,X` `.    DDw'Q2椤$Fj*^VVֶm~Çwˁ   @KzZ2jeO
-Z(:[VW\\4FG"   R0.EKTŒH<_SL'##fdd({PVL'"   
--IOOOJJLIIiՌ0|ʲ&^CcXXBs1w   Rzyy299Y	L&#2d2)O{    JFvlNid{    ¹{VL&勬ٳgM{    %&&՚¸Gh4*af    -嚻D%=X,Ԗl4eee1%3{    ȲLc0,XTOzzzffb&%%EIp233SSS1QpYִ4x     FnINNȠ>`0ddd!Dfff\\\ZZZVVVNNNNNg|)))On6VkNNNZZZxxxSu0w   r溰דLTeVzzz3줤$՚EB   \(WRY,,a-To.%t1&ɵԗٜ9sVnideVi^)߮y   BK.˟|{Li%)))//b{    #   :f!v8gj +    +{!    @K-[lҤI2   r:B _#I $}   ]?/ĮRIT <q   Vs:[          h)ׄf-v    @KR d=    ZG$ OF   \!]  D   \$1w x2    Cw x8    -E mq   a$ x8    F x2    - #   R?/x. h=    Zi F   Hy M    R?wH OF   \= '#   R mq   a$ x8    -t:) x>    -`. h{    ke.J    @KzH|     hs#   R6   @K ่{    ke.s'#   RNS0 <q   _?T߮)   " OF   u$Ib< x2    Fw x2    C    @~Ź ߮)   r84 '#   RJS= {           x    -LCk x8      B    G    mq        #I x2    C    @1} x2    F x2    Fw x2    -ES 	=    Z <q   RpI`. m,Nw   @k(6p?~|qqqFQyS&   RJCkzŊZBB)SFoe=     i5kرcڴiz֧L   T*BeshCt:݈#dYꫯ6l駟ٳ'99yĉ^{    Tpp !$O4)>>~ٲe.\bEnnNڷo_/{=    ZRpȹ/]Oԯ,I_׍,+AN^`F-]rߕ@u5"۹;,ߣPy~tms]?aeT*U:4zqa\{lxzmXzu:*6\jɵ/_ױޣr=z/1Wjzr#t?,=?NܟWSkg:?_:o֨zS~.4<7Zզ6PXdIWcnw/
-
-ڵkכo=bĈ￿s$M    Z￿+?ht}0]5ܷ̂UUU檫zǆVht    h`PRRݧ8	p,a;f\;oCk3DѰf6h]=w4qƊz}}޽fAo3K3?Q4qխU[DPMk	6ڲ!tp(?]Vכ: sE~Ãc^/Awgr?tX#tMݷ^}؍5ke_Z@jx7|$_z',[V͔fW"nŽ{իk*q    _!IRddNѣG^s65D1ME$=á#!zרx@Z>F<܇n5z蕼Uk#_(פkspZv}*Kj4s=R0#pyp8FFzǌr4zW^y8N%Nr?{\M(k%耾zJaT/8uSSs?뽈>zi>vj^65u6ʿΝ+(((//Bc:{ޮ   Ο?_PPRjkk^8M2S/h41i#~qzs4ThsMQhaJcw5U\m{~pm-|&i5#=zM"Z-R37_ZtjհFtSOk45S_l7nܸvڣGʲܧO#F3&!!!$$k'     ^fYffjȐ!&L?~|^2     xիWϟ?֭6-..nȑ_~q     Z,>}z7o5jԸqb0     YQQѺu=ڧO!CDDDx͂M!     L嚚ө>Q      x%      &=      ^           x          Znرcɒ%?~|hh(5 D   ?o|7{5j5 `.    -R]]`˗>|x͕ <q   ٷoߢEjjjvի<(2 OC   ~Wh4Z622r׮]+W <q   _`ٖ-[hѢ ^Vu&Iwt:) x    ͑eYYY$cK,ZT	 <
-q   ,\p׮]&iԨQFO4)  `۷ow8
- <q   &֮_~ŊjzڴizRnh4Ǐ7LeժUEEE
- <q   &Y,E>}zĈ'NBȲRw>a??u)>     Фm۶ƩSFeuIcƌ:t3g_SSSSSC h(   1bNS~X$e믿^ѭ[7׷  :    MܹM7ݤju:BeYoرQQQzr    $ZTFIG x-     
-q   r5 <q   C)srr~NdY& OF   pawTR%3 ై{    c6]+s <q   CfϞ-HKK̤ X   !`0Xtd2nf2	#     >$''j*_[,Œp9s4p1 <q   Ci6   !s;a!v pL   uz    "b6-)A#   |bIMMq>1szz"99h46    !%!!8WCJٳ~C {    d=)))۶mήAJJl67zwR h{    )htQvƦ    FQLw 	=   oif!DVVV3ߥ    ժ,Ր[\=> Ɉ{    ,HKKKKK擓LԐ.Wè. d=   3g2szzzxxxZZ"333..ΕL&    lWX,Ţܒpuv <    >EI|fsNNlVtɔ.NS0 <q   CfhT @`.   O>=33 mq   sRSS/ a h{    ZK>Q x8   ٳgo۶-///###99YT {    _d4SRR,XP\\0l O\   O3)))`0b㚻 d=   ZYYY999999Fhl排$ '#   |bq<dDMe\ Ɉ{    p^ɤ<w( p=   X,a-Ly\\sPI d=   /Ziiif911199`0$ 'c!v   dgg/X@YKzxxxRRRzz)J#˲Jť x.ޣ   ߒQ\\>`fr`.{ 1   QBٜeXflB̞=] pM   `0_\]u8 x2{    e6srrvя餀 ై{    ߢ;-M&2ٙ <q   CrrroINNnZJ#I '#   |QRwʬ= OF   䔔֦<
-L ]tOZ2&]{_\x^NsϞ=aaaں  KIIQɱZ999d2Ft{  >W_}WyBBI'de$	I{r-N۸(SRe3%Nrckz۳ĳ=x@/}.\Y!RI?"|vکRYYͧ~ؾ}ɓzΝ;s ܙTոGTS d={e/<^OI=)e_˞~XozvNS$ ZIIIVUobbdZfY	Vkvvvwwu0U3 x2ޣWWW5dȐ&_yd=MWOnk'Nzϟ. .Xzz̙38;;{Μ9۶mSdee5zwa sfJ xg>ݻw(۲aլ2thOOi?Fk^|nѣ 8s̙={v[Fq=ko  ^nӦMSL2eG=[)/+&F;+$9}? /X,m憔o)5A { RUU5o޼/_ÚP)RW~ճ>;s}Q eͯޒ <q%?ԓ.;v{binUUo?^Vfo~3Eߞuo۽Zccbv{WZZJY 7)7ݦfqGk x?% 4Ñc2ꪛs˝7]ϯ;e]P/1dx鮍?qJDKʔzj֬Y;v` 5FQwVkzzk6h_!ClXerg^mI}6ȩSeWOnWcg:jرTRWn0d_zB+bԈ;n9s|PRRBY w(Sdff&%%)+nljHç  h[vݻo=zt\eCO
-y,u>5nWe~ZV?̗N!/v>|Se~VP	zO?=k֬-[Q )))&IzRRRPh OF999#Fߞ~扁'_K!hka΅_)oM[
-d.0Pi՞:Uwݴ7='O&~}gqy!4i+l֬Y|A38  `v9%''}69sddd4 }J xw}޺}o1::s־dَYT\j[_aQvPEW*$ 租!	~ч]|QoܛڛBOU=9dnwʊ+}фVKe fY	z\7LfQ(A, hGyG=s=NU;wǶӮY_xnjru[z?X}GQ]V~љ#j6E	B9g{~N;:|Ӻ3cƌ/_}hh( f2L&ٳ[u/%! `.~g~^xfNHGnR=;z* @=6ѡmBH!v>V!!~#Nfү%I"*Jcͯ3~Ae  Ma< x2=S..ܲ6ﾺg?_x{Ηk]L}={gh>RSUUcNFG[K*9r~J}q) x՚ӧq]| 1NsÆǎ~i?y͝RYYثJ*Bi<vxӅWNNh!UUU;ejS:ւ-Dk{rȘ]xƲeK/T hfsRRR)222u[ |?d2=a;Ǎ	yreYujaqjyՕN6O>eaaazj2%!v;oKW/s{^+--, v*YhLLLt-˕z=> #,8p஻ׯ_UŮ+fK;vShh@eS~'	;}VNJvpfA$,2^/?p<[dI= @{Pߴ?xڴi+W\ hflB̙3'///;;;;;{۶mAs!$IQ  OFl6ʕ+bbJJʝ3=)B>AYBB={9b["/|3:J߯/c'Ŝ=/p4"""wVKD[yiHǇ~_.((, ж(;r= @@AdY>w?^z}w=i]uALBqA;v敕;^s붼3g.$,*R-p:l7IJrUW?w>R,;vt?
-
-QoZVVִiVXt2_ 1\.&IaX.l> Ɉ{ߝͽۯYI}Bᇳ!]ji]BQxF;TDGǎ2>c㡔;QZr٬#?㯾jqq1e6Da  xJ ~vŋM&SJJۛLaz@RFxoEjXB؈KbeY*jGŧ4ӯQ[+{ߥAg)_~UW]n:j t2w x2wQZZꫯL\mkV$_zq/qݴwyNKgBWӞr鲝BnPk<{p}r7JG	~yﾗ_~6 hҤoIIOOofow x $]:yĈc~\{/=}e	ΜW8.^su*v1'W}'Oή, k= <# ߆fox㍎#̘~}Ʌ ΚբΈpBDh "i\7{lʔ)3fҥ Oc2̙sjt #~SNXxk/<]VҲcΞc.h/@Y<Gt/6.^j?<aN   ƁuYM6⒀bYoيɗ!h֝?nڻw)jiz1nLo=K/+<y Rz KSϟح^?j9ydي5,ѧFDj1]M:;;+4 q= OFwЊGΞ=d2Zwnxw_]9_ ُM<zM[Yx_3ʰ6{F>?/@ xB$ ' Euuuk׮=z78nt<P >:ju.avS:ZBG||ܺ~S.[  <m@s?7|󢡽{=nFcĭ7))9WxTYѴZ1jDؼ{799955[nT  s @@wyni̘1*qd㚻?|wYjZk^|Qǐ;ޞʴ	4>ؿo70j ^-- ~st lʕ$I>5~ԥõZ$ݒe[SЯyŷ4dؾ8|qL&t%B>|^Z~ۧO* m,b%++bX,׍F199{Z999<k0ڽptrܹy-X`hB<DiycFT.I{jQEeRXG^zIGIMM<y2v@&I=^j7{VVVjjjw{zzL&/ζjkkfsFFƊ+}o	*Oq(l1%Gl=uLRDF4s{]~w٣G  OaZfd2F!liUKob(Y`YYYfb$%%4>lovPύ{ǃȲ((.++eYv:j=$ic%;EP6'"BC^RSS.,,, @[`.z322ܓٳg)11qΜ9J$={ӳVkVVVJJ
-/(cǎedd=tU8_8uuN;rv޼^.&'GF iu4ipG]wy}x* m/JHHP0F1%%uϔd=)))L&S[gB4CNʕ+L2}CTg}K	ݺz<S]TTTgsտ_g{\Q)vȯBmJjy^<wYΝ[SSCe kXVl0VkfffBB%c)9s^fyh	{ϟ't#b-gSΔ;.^xa05ZkLOUUP^ĶL
-z?c܏6mz <sL&%8QVΦ)''GhRRRZ>lNJJRh4VjMKKڶmh pM	:3-\ŧ"i*DYYe^acC(ի¢#:9STPhD^ *R}^{ujnnw=o޼" Lƥh]M&=|ue^gj0򊋋tfsk{V\;UNk׮?YTTӓ^y)9_jjv}~S'O/WMFbZ5"SgY̙iӦSvU8Nץk{u뿲,&hz4~tV=zSc4ܸ}vLmngc@R
-+++tҥK~?+i]V+pڄLJ_OFFFbbrcFFFNNbvNOOX,B&{[Ν/Tg}vM5*zn
-
-"CKg?yd%a킆&8[0n4q\6o3ZKozy睈UQ0yi~ޱUܨR\_ohEc)UKjh$̙3uuu_LKK#~U[(deeY,?e]'~EM&S4e|tWߐ`hC"߿H&;^/IBtv80[Yy޽v6eVO5YVWyzgΜ9٧FoWt$/-V+K侽J֭ 漯r֬YݺuJA7)))\{edRrF7pu&Vkjj7ϒ /Cozꕐdɒ7^2g\W?|ڢ⚈?8[g/?th-kj .<C8e͙3~BuR4V]}<ayW	&{ӦMСA9ox칎LNNV>L&n
-K]2333336}t%c={6 ^(:::!!aʕw^qh6|S/pV]?qPQYiymK9}QGڴZyֿ<Ν;J[RRZ-_4OF?9;oΝ;oPOd4&o+L&EVVV%&&6f|JQrr2b@K^r%G^dɖ-[&ݱSⶥQQQӥstuSeu:Mph~y!!EݍԪ*:?w~,rJJʓ/ұ$IзÏۦN:vnݺ	/h0Vk˧XV7LJdZ`xCŋQ]͐6VSUe1s^c/֛GMVùΝ)PmWd?7t:O<z+uRr}'O~衇8ZoyJjcXRSS[ƋLlZ)00pƍk׮ݺuN&mKaQuE-0Om{8K##Cp>>gSK\{݇|7z߽j*Doܼᱠ믿ڹs7'%%QO$8Z
-ʃBU$rddd޽ׯ_Ⴧw7ی"#W=gJ9q߿#=kw~E#,mIE?*++g̘³;VT_7bs}?.+?gΜP79BHTa`ܥa3UCFFFRR2+++K	bL랒llZgϞm4fsNNNff~\fj%(x'If͚z}uh:nJJju	ӞZrP}ES௺s[fo-u|$gW-ZSN_]2^؃d~̙3cbbމ'2+ϲϡO3999d2p`&)///55UJeeeeeeǽèA4,44tܸq[nݰih6|AuHHom~I+ie0ܓv{F!n]")竩6?3f̓Oܖ8Bhq]b/Ei={YfM8QRr]=,Œe6TaG2335\/dr2Lsq𖦎.yr8/M&/3vS'r[tW/>7Jm~/njEiYM,Kg*N{;sϫ,˷vO\ʬw)=}PnK\>k@o-KUO]vsϕW^ҥKozӴ4ŒG1T&fjcǎ޽{aa၃tS>wُwe=B!Z,~d=oϾ_ʫƾk
-\Sk?V{EE˫~l.(Lbc~≴;>䓉'Ν;ch5 G/?x/3ty*S|_#$ؿuچpљk3fRgBy~w%_UTTqŤR9V#;Ur]7ng6ϻ;m|!P3yBշd2+gΜZ* p=sK.$22rΝrKkk0UUqq;tRUWUՔQ"f#ͳgϦ|)hhIkci75֒VYn$qcƂ
-G.>uբXr:=iLeּoĦM9ss}=L  xIXXX%I8|BC4<tidx bq JvyǮ|믽ؘJpv<4kgFW-uٗBYNYH
-o|!4z℁~w'q9ndW}4is=˱4t_Z5n 7|Bxxx||ܻw?x4??Uwc^_R-sUTȟ}qk\v_[O~Sm>~}%$b݆m%<\sdDBTDGiNv>coߵJotOT.0s=z>{n*!IΜ9SQQSOiZ	 ~^ VO3fWZsγ:wi4k Ss[oϏ_ȃڷ,*׭?50鈥ySѱ߮=?n>sx*p8~~z!J66%[Wңqc뭗%v	vE<oG^t{h̙NIIIHHP[+0P	?w"\ ޝ+BCC/v?nqswmw|7>3?_M[6^g~IG!B**Tɍj-	!CZNuW8**ʖw8qc:;W\oa=EY.+_kǯz7y7nc0  fW۷gϞK.=v%DQ㭌Óʕ&M'Ǫ
-d?='zҖWH^ܶêǍn_^شI[v]gUjI<}d]tW|GS3nޚԡ/XֱcǙ3g^K. ǄsA1 <q|Vٳ_ܱc=uxs/nz<݊Gy䡃8xrE=Ξ+/VՆ{U*v.ZѳGHhhVIk$|AAm]\\{NRȈ>ٗ^z_e˖٘>̕ '#tz߿c}{|!meyn۟GGGK>ѫ]t?_+>VQIΨHBI CBVdVnxn
-m!ЃNQUEh/gRRSO=ue}T>K$: OFV֭[]vmQTQ!3h-Y%y躛ؼyW^˿5K ?:B?_.	!AܾeǶT*!DD߱+EEUztqPByW^y|p9*{ې. g"o	8pf[CZ=?~G=<)k4N	tzYq444HQ*CV
-UTT^}m}~^KxxFj-s%QRZ#I"0fn^r/&OGߡ;42 x8bܹa֯_?4$&]` +֍??a=_tx)TV
-m4útc_:
-!Μ-MgJ/}}w[ve+8Q`|ŤpfW<?ɬܮ]Ξ={M\pتh4vSYe!	!**lz׍r޽ʪQB:ghhVu8NBjAU⧯vu5W\l߿^_1c{Iq GٿK/tڵw͐~{.\b[LAaOqJkI굇zMQ#.kmQqUnܸlgJm?zdf=,Yw~XșNTڄ+w**w닟TUUM<gܿB8 $	!U!*$VZsvw-G˄Si9s[AJBJDJ<˦%_~_7Gqz mPaÆܹرc{SQVp:9y;O.#uzF)WW9rP^jrEE$;vϷ
-!F=%'kyﶙ4j)Dkp0w8rڿq?=/:UTڅQ7tߵKd"wj-/>,˕iSE"?+"9N\m
-cb%$ItX%ٴ\<o޼nW^{G#/4hPׯ_f͚Mz)+Ͻ_{-^|~rzۨTj!Dn'N.k0]"FS9\p.jLkЀʍV5ƏoP,CX
-NyAݻGoǋ<lS9ҧO~pƍx ^}Xֿ__=wgƏy빳EvO/홳Ҳ;_>!.&:nWtΆ}ycJ˜NKU[NÇ6j+^{}eRR҄	naÆT̖/D x2"Zݾ}c>|xݺPnOlW;ń+oyI"]~~Ku/ڹZ|b8c]'WI{(7.XC;ܩEnլv0Zu۱%KTҥ;vul9ksǇ^gSN}*!)٣æ͇6_WH0gwDUT8NJ%6[UtdT`!Dy0<pOΞ'NTٛԯw/:bVΙ3g;v̙]twPzz Y|TPPРAzYQQa6Q_6M̓[~"kw^eՂ;⎩r8˳giRV\44ү%IzwԊ%jnwn!	kHЄ.Z^ǖmwݟco=d=nĥۏ?_׋Ym\ 3S,d!Z-tjOn~zipHmuǎ3dP,?ZT*iTu7VEOϘ1o3 <q|_NnRmU5Hcǋ!Nf`UPP++`/#W[Ҫt:)~N.Y_qYb&xɾE;.$NnWrBݣ{b$W;W`wJOq=:2]ueZ'=kfg84/_;O9[t
-V)v)$S8}zR_g\?,ݽ{)S|755y!v| 1+88K.ٱcǖ-[_V#8H{
-Y?dha1zD^V-B@}֗;~锅ʌλBNqVݷL1rܘxnw~N!Q=\t[!ڪ UPxÃ^{iW@SOC7󶱋ّ8[h:F.+GGjj梵vGtBbtuuwvkFv?u|:^xn/\QS  KuaРA{ݾ}ҜA7\[LӸ6oBZ֑O)mzAZ뻒$.,ݣ.MQ]]3jd[o5jl$NIw>yT^9(HK]>pV?CݷKGG]-|cҲzc0Ceص$'NB'	I}:wBh4G?$NKڙGqZ_x^{mƌAAAm= )|YHHE]}ׯ_~A~~~Z.pըsq6钭ێɲ|nO<~/-v\67$oe}\4/Yb%auU[wfYTT55:߁fXK-9=:lذGZp1bɷPk4F~ټ_Zc%ײQUmϼhԈ;|^޳xʫȘ1cƵ^{Wwm> ɘ>Md2EFF:uj戚Zfi\ddИQ=u55?w9URR~WSc?Wp4fi.RiV	!81UTTX;^~8oڋ$:+4>SB{tk<K2qϰvؔg^kCyĉyiW۴ZiiB;5We~_Q[ݺĄ[TV՚J%4jԈ\s4ۺ=hʂ_<+s@@w|w@߿޽׮]z1ӶGLz`iO6wzΫٟ|GB$:[YY;k%)_ܥOv%-Ǌ{aqʃn6[seyIG}MQ%ձO\uhScCGкI.[TҠYQvswSϭ\"'&&|DkeY?AM?a5vަ!=8szg? 8AkIco\V7>yڙ3gvQVSx2 /u)|\```޽M&ӡC߿4믵8iDddrl5?p%ΗI$r@.2"ç^300\&]+/_3jD>g郇ziH.uxx{\;eNL묪jr˒z5uiD6[]hU}YRoepWTvѣGGDڬ1M+VkenSQa1Tv,$fd1yu<?o>}z\\s9у ml>Lnܹ_߳gȑ#yة#>=яeY?uognڴiO<>o2,|W՝:UrB8k*v{:z#gϞ=GC<ʒ%K@ݓ'<H2 ~?>3 juM&^_z*Y7Yx=)6n*o^|Du!n?qĎ垩f&:,<|ԩ:%%eÆuuu󧜿 { !IRXXXBBB~jl>jx"O,|͚5#GW\jk7nh9qHeK֒rexqѐƬ_7x]O <q 2dbYcXvAx|[oxUh4\kIVۿ$Iwm6{axoU/FFF>c7tӷ~k٨t  GˠRׯO>eҥv;16y嚢fdּ|pKc{d p8h5W}oW[e^#Lk犿?a{z)SdeeUU1s@۸¥"((gϞ})..^.K9?)㏗^zifߞ|4]4|H]./w	֞;_4oEŵN'mm@/vް湱c>s\s͂hm0  E`5jT|||QQΝ;
-kkk9Ffyg?UUUv[;)'T>)Վ:%B&_1yPTEEU6CѾ]yzwL{8L?CI סC͛7TecNLe{guGg>TY5Ç~IkXU]iѓ
-*j)QY}_7xƍ't
-s#GXXd
-///X,gְDڨ"G+cΝÇO?rH1>TrQ%%=#v۲@^9;5M0m7n\3O?`)Sˣ2}T*T oה pбcGEEڵk`1v|8S|=~-FUlGjU{+/)/nz`	Iz7<vڵko֗_~СCT7 d=@}ڵjݺu娍!UUwK^3탹skG}QVH'>M[q8!Ꚛ[n<p!Wmm뒯^`^LٰaE]cٳr~G  kذa{aKhMv2<.=g]3x377wȑoא+.O_Q[c+VҰ:h4ґuu$p:ǌv}snkvw@ hDxxkkk7mڴk@x6C޽{r^y3!ĬY>mj5,tFądYDD?a]ܗ_.))/,fq./VˣW~H]]=lڴnUo,} @Cz]v۷o=x>rp=ҳϽh:u3:4@akeY^ᐟv{v˖\Sm.&$'*|sރc>p۵^ۿzjȐ!穚Y < ^?wd23//l65QxSsۿQyQTW*Nr68ynꊾw^ܥs-k(Wh>sޭ[o֬Y/...80uD5 s(А$I~~~]vϟ?^F@B
-"mO_nvzⱋ;V2ל:Uhnب55]*ˈ55
-ɓgLQʹZGϸ71|{瞋JII;vlXXAkOt hTSNԩSnn-[
-kZ\w|wK;tϿ|Bd=h߭JQEGǪTQV4G:tRy9پ]O|Çϙ3ksY;Y ై{=T=z'$$drt=rmS}S"Bt:}w'Z~8/񯫳:*e%zlL3×|ꫯN:_?y>  x,% hbccؽ{wZ[RZg:?SMش'rzsNw=͉c*t:VYFl5ʁ"k{9t:k֪^a#(T%`{거?<u3kW^9<LCk x,% VۧOn޼9  ` ?tNI!HBv)FIHBYڃkNM٠Ol;uuC6P֧jm+{z*sŚ4z(yE_۱s'L&Cuy*Pί*WZZWSS%drTFEAy Mǎz]m?}k`k3oW]qܹ-\ꫯ6mZ=4N h+4ф<O>ٷoݻxCY|\W8Y}
-#~U/>F7h)|*cS_@ACjfox]]SϘ1cnRJe{dTTHP."\=.bs_ԩ}lC>ug<U&q0n^LJ5swy_;n޽{SԣabY. YJ 4s~޼y,xaaa=-S\^7ϱ[Ng;qݨlpF@Sz}c6*ʽ\s=z4]?Nڛ+}^F_NWzSR4VVoٲe555$ݻwŪIc+%n4y\ixx^'	!Y!;vtpCxL̙2ѽ{}Z,VSS= @C}wK,t=UWF$,j+mƪ==et7/C,w_umܸ166s1:W̰&Uۜ[0 "Gcuu;vhtbu޿tIi5EMT]>~xeeedddҥY Ç/[Sշvk:)I>iΖmcfǬqBsy/z{K$	$1aQ~Irrr>G4Tɲ,2[AAy1\S	!t:qoaO{sn߾:N㳜N***zݡCj,o.  x>p\wu7]?SS*թQQW_}=xNt_rlȈ ꧷n;rn۾_rOWP1%RmǏ?w۵kg0>fx  F!ӧWXp³gN8{L*1*چɏ|z?|ݺuNmU*W[*-,s8ΐg9Wأ{U?:/Xi>~$I.)?~j2$""YKG x.o&##j	xncZ*~V4)>[no.W^uYac^]m)jkBJ5ê:6RhEs	sdY.)U>}.<<<,,,**,9l( x%%*))Yd<8zINOe&Hw˽\Vħ쎩EP'N8w""Х!8(pTB)رsm{wi~xN|Ne񓎍7$&&v}mGD! 8/l+VOw=f̘瞽:a*6oϼh0Νyf!DUՌlBS{tyq::_g)jv{]pv	62yRvfΫq/_еkט.]h4%q4 @rىf[z80`zk%mX)h4֭[KJJlfZMqPgWd}n<ۻÕWEη:D:zhYYY=ZE  ӑϚ5n.7"W>hǜ^3g4:^Pt&k󏝍PBjooqe}DT>rGF,Yr|Mmz6V;t)bxUt4tmٲO>پ}{~>:A*RɆ<[o:twީ{T\`y
-T;eg{V}/#-ȈbkyM}c_ZbQŵuzWqTVk^^^MMMϞ=cbb~" hCg4u:?exuNY?7vu$IAe3oN{wm6o<m=| **"$IXX67]Qn3lVELn;p\UU߹beюХKH*< ښ+Vk			SL9rdTTw;UVV8p 33={IrH0˫N2L{pܹ}fq^**#N{ouU;BK*QPX^SV!:߯**0FIJ󫫫۵kOe  ^FFGGY&77wǎӦMի>ex}-Zh>UPࠒkjSǪU>裊G8oF>: ʬ/wu8q*2R'ֶkբMU:P=_ rejϞ=ǎ3111AT*5j h+t:݈#dYꫯ6l駟ٳ'99yĉJ:gݹs/_3LJ
-:-D%ŁO:VoժU.yh6?}){}r1=Tb
-
-D}BJ1⣣YWU*
-``	v4/88XQ m$I&M_lWXS[s/q/h4z)wT+Nh4i4UV}7y蚋:tZz||,<ˉ;{NTOUˍWLA+G,$8rH``AvEBC=|~}j)u(˲t:Fm+%])o_W#Ry =Z?N6;wVFRիC7_?۹}lxzmXzu:*6\jɵ/_ױK)~nLktF'+FGY׽5WwZ߅FK,i{ͷ?N:]~AAAvz7Gqwٛ> Awȑ|AAA]w};ƞTOS|#yVoYtiEEŽxyR^>p=ӡ}_9pkl%esBDtuG:{^˲ܮ] &/Bؿ~u*t.Մ,`!\i,niWa,~u'Y^-뎮-]޷\r:4u	?;fwI+b׍?0/h*AjqK/_etT\M G~7<m|sqTM%;~7cg:|y8^q}U,ahَ;sԩ{lȐ!jsORcǎ}׋-*,,+{\5cPtU.>tVZjUUUUU^cT+;wnڴQGJR#gaCTPqϱ]ssׯSNʇp檪S]*2Xi/$Q՘ 6wyױ^X
-߫}מv14\GYԫC|}~]Zװ6͵}S?Q4qKI䆯6%,PMk	{~bVKц+]^]{T/{Ti[w<7|֫a_FrͿPHjPUnzmDz%r/^ܻw^z{?,--?󫫫'MtC;w8Sa3tP_lڴIVⶫ/Qf*n]W;ϸWUQ?|iiidddΝcccz\s6[Ƈ ]vF'U$Ir8>Ν+(((//Bc:kF܃t-Y/8qoTt MRyUj/ܰaCuuuMM괫BCH|YP6Qn#Ň㋔CEEEwܙwzڻwJ
-
-
-Rw!X\b!s〳ތ!vG\onF;}OitЍSkS(wCiPZتw6M5KmFK_oB(mMLJv9ZRf6nj_&j)߂Vl6:wOiw$_f~k~4\l7nܸvڂY/#F3&!!V9sf͚5G+nڥC5jM]کy={gϞ3gμȈjZy܏6ZSNwqǸqbcc [l5k,_l6WUU2d	ǏիW``=_{?~ƍ~i^^dJKK7NwP!Y"#?㼼wyfy_jpC57 "R]wT}	Izٹsg  ^lߺuf9r_>p@! Gܸq[o7|QՎ<wC͛7OocFN!$Ν;W]]ݾ} x+YO>=͛7Ǝ5jܸqC1^<iq<TEEŚ5k.\y^z#/
-9Le_)&Mk)sݻwܹsmOuu:iG:thΝcbbFÙ! I5}CgȐ!^zS"rMM͚5k>k^3B08oc쩛զ{ywKJ^=*5'^UvFSz}@@@llF! xI&9N^A 6m֭߸qc׮]_z+&hBK^:efȈ/x'[9{-ITę7v7o^MM_׻gV>7eq+4'O+..6z
-
-2  /&IO=ejjjOu]Ǐ{*EJogߣ
-5f큛g;_J|_%8>|xMM?ew3y͔%Yu-,,=>9'  *++<'䄆yM.$жKXL.,<8ֿ4_R}Ma,]1!BKz{QŨ.+ITZ/,,ܷo_iiiǎY  C܃?n߽{/^7k֬)WwtTNQCz}O?;yaFQ[+*uuReϡdY[ZB5዆?]_xnVhZ4yBN^ꪪG_QJU{)--5]tEI  Y*gϞ>ɓ''g_{e冰I2|ئ#{TV#-éu/Ҧ%?}vq@=H8xm{ń1Ѻ.O=ȑucKW5ԩS;s4"j@já}ƍO8ѩSѣG3<<  m' ?WT'O6uP\u=?)-xj~><F!mrM%74~xsLJOqiO}zqAvJ$IumҘ3AAw}7o5}VK>@Z͙3g;vԩSXX R[[{ԩy-ZfM0a̤.g]~+s!N)~4o?p-!p:2QsfSISZ|Ϝ>:)RS&{[_ܑRÝN[3loUT,m6[IɌGWQd;q:eéRIj5|$IEڣGj4;2%-:;vXdIǏO {s8gϞ]p_~YXXt-W?ϣ8UT~:66jABBJ|5+	eu~r䈮]:IBښZZ-^XKwߖrv1*VzKے姧\#أsعY~z|?[;vo}J':Y$IRdܫ,-ޓ`W^ѿghJBTT|:oˁ0ibxFe\8|錎e:Ǐ7޽{GFF5 "ĉV7oӧ'O:(Oeʭ\|-;uPaTܙ3&/\W'H'ZV;]D)&|}>{cp3*W=Q]:Ǎ'п><PpTٳ\*sÔ?s\hѣENYpʲ^<p@~}_o$IudW$
-?a}aaB[nHoق[K=}lZ)GFխkNjY%I>+N>uֻwo???ABuu/_^WWw͛7L@* ?9sfڵ|ɱc.G}tZmrA}pgBpݥjCfGN~=*IB,9jߣ	L%3nx>{]}$I\se<ͺ3\NvLbȇ/]'Z͇hDGIDR}ǎ{kkocF$>M[~;vZ%U554Րw̔lcz$:o3_ȵSTJ%M_֪UkrǏ5e{Ϝ)+*B(I!hń!Sīg9_/(((//h4ݺu`־}-ZTTT$˲V]zq'y i{;wŋ?C^Ke~QU6w$P/z{>]iڧ6vjYyGڈpIr몫ŒǜN8~;Sߞ>wtԡz[{tZ~~~Ko!\jswκT>ѣ~awyq>ew/(s{8+PU.n8CdD((8|}n;v݌"/Ŷ76m3B\41=\sƼ}tj^@㦣B!`zkmu?pv˳:r2}Fwؽ{ٳg\,s+,,ꫯ<4EFFڵkʕAAA <
-q~3Nb_|ž}s%Ua!Nٱ##BmΪ]=peBl\qĮB8λ_:EE9gq;,6!E	19oӨ릏zEtvhBM
-egQ:1sxPPg}o߾<p~+U*'͕/0r!D>;feńhj%peᐫj+*k:Mpd~by'תTNjr/<st/ꪌjZ;ud@nw=ES˲P?Zy={OСso=.TYVվ}@{h1ͶlٲE!v{n<|K/K.p 2~%%%˖-^{\9xXH!ilS	!v<~uB8Y?&BՉ]Ξ+$>$$NWQQѥA[[%!D!Yʄܿ_K9׵ބ/_o{ O~c,+Qȹ*4p@|uk\5$i4MMc՝=Wv4(Rx$rZG-2bΓu8~
-Ə4\67Xqgm_}8q:Vө5UddW+S_bTU~^?!UT'O,--5ݻw2h{%Iѣۗ,YbZ xZ+VxgϞ]ZZ3ϼNI'ZmSB:iNYj4@!s}KY=_ݾ}^w:BVt$ѿoJBPFc9Z($g||gYOb%Io!(%%d2UTT|/t6 REEee6!p-.ϯ31;j.}eEs.yeKܷ~P[j;|b_!ġs[WVֶh4*EF|v!BϿئXs.#Ν;WYY2a?Z`v2LFh4$o~ҤIׯ߾}P 9xdÆlҥ<0ʰT悝8Q(!\raauTyVl=(P[gw8NIj!B I%)+wb+4 $2"("<,7U:vB+3$I
-
-(zUZ}W``5k˒{>n# &vC%UBpC֑,sIIN)cj[}==MStwmP8.Ccǋt^嚫ƂU&\'(H+^	؅KӒY?[WW=hׯXBVO6s?hƏaÆ۷Zjє <qZMeͶ~E<cO>%YϯrD$I?!DUԩPV!**5A?_IrxxW_=p D!jJY_S^^QPP,DZ]Rl$I؅t"OSVoܸqٲe6ۍIcBCl	VWIԷO셅 o[Վv1!3n8]DJټJ;rݣǎǛlߵTv;svڳta-\)EEG
-v1!,WW)CwVTW?{wuTUWwn;j -v`l'ر"3s&s3	d23޹3	dL<(,  !Ujvkk{(hC	Zyӥo9۷z}\\r&C{{-[mР4=[?~|ƍah  7>p?vXttwݧǴ҆ƙkZEH4ϋAN04! OϠ)e@P( !$ҪK)eYJZ58yJhSׅ6k]{Ve4~h4=zԩS xY^D'/KhT@Q$^Ce<L~~ENvc-'?=׏]Y.RO>2G6/LL h4</76;~{q	!$ggM	,˷b3$,_<::UWWl{fדOBNiӦ'O;wfÆʃh4 qL`mm[ou1V/Q.A3m(07ES$˄IC>]<oٶoor^u	ȲDEyIifuF0$	
-x9I1XO3F{;w.|_|Y%Jg)C,74ٗ=!$kP)8v[ju)ɖۧz}ʅK-|x5--RIv֬NΊw\h>uΝABM/Jt\h>WXWcXv7y^<vvSǣ>[kKI'׃ti[[[IMM0j:4EQʀ/!$--s =pw>***T*SO=VRTv4δ_P<	!$&FVUyhբ14!hTN{tO7i4LLh9%	dYNJDý4u+;D4M<xٳ>bѳ֤7~,\('kmPAT  Ǳnw|U;^x'jZe5JE|zW^^A>qN]υK-˗%+SŚؚ}R˵g5,^0帧F灃5ʀƾ<e|L yo߾ʲltttll,0z`RRR^yej5!DP?]8ۼysFFFttFAs 	=0/_\^^oJ/?ټUę9L4T|o6RO_f	!D6/I(B6eT^5LUU7DEBHsKмy*%2	!IIV9LqnRV?˗/nŔhh1WTu˒/Ⱥ5řr#\?yN[:ZWK|RO,B/ǜNؚBhz;O{bkNVf><{-At:OlߖRatUqfr0I*&h4   xΝ?p߾}~駟~MKZXNG̈́(BHK[(zzjŅò?۱LiZwV
-"+˪Aj
-ٴa1#2noO5	!MnY!|Pu(Jް1`(++kiio~C+_bJ|G9`
-=}ȭsϝoSWLeX &>>@T׬JsB`,4Ūh2>0h	!+R7o\λ._iё6/RxQ_<{e80#X?Ҋx
->f,~t:NI333M&.  <=0 o{rY;h@iٺ%e$رnM!䱍=ٳq+!ja\B$[qW}-&Dcg^vY?|yt=!2Ekj(\e-_a[nݻ7|拯̟oC)Zonۿ?prkEͿz~h廢ij~zܤk;~^E/ԣ# Qt4hFxA;^<y~[\ղ|&}W;OߴqAByH3^/=qf'!$2RKWHE`258ttt\xVatᾏ12}d  '[)I~ӟꫯy~oWXZk}$.]jiB-{5^e!,+ŷ542.%yI#̴F#Bnbw~gʄNO~VBp'N]KIML,p_XIVݫ<UTTtڵRmA2:,A'A2ƾ
-ew޽n[2JE,`KfNv<ϋC_0rT[6_k;^^A1/V+A< )===!:::&&0-07 @8|Wի?6oܠ׹8Lz1;+KCC!D͊RNeD+/eΨESM~0tM(_1}2co^5ueBZWggϦK"12Do_;::~_?vSgʭEJ>LўV;<s{;\@aYf_zmVvtߏfs:M}-`P=lYNUU}9dgZL]Ur&y)>P>wMٷ)|vIjE_  wzI>Q-Kjj*q,%5Fk  -tQQQܸq#++oo6wq̃g6I_]7g&_Wo\-I"Dӫh&̰Ni9:Wx8(";:!/nVV`:H?)^xk׮;>ŏ8>Sa0h^\^\='Μmhma錌ج̸Hrv.]n=vvjuoˡi_gYfN޾8S^q'=^krY}kB,grxsliCBؚz鉾>OyͭYK'swju)Sg5zAA4ܑe"RZZ%`v&U-&iűV+  ,MEq```rrr~[嶘8M/<ߜY	Zfy_?9/T_di44ǩohnbhGP~7<	sD{0mcھz_ϟAuN@L&_:~wXQ?E[dett<2ŢE9	qV{N7:5/T	EEtlڰ@6C57ouJNPy}z̍7nvf,jٻeTt[tKU*<+ H?dk76ֈ^z厎Jehew   =3gμ曗/_^xw3fc#rdooyIH?Wݸ]$ꁚMmm/gV:-ܒmq+Կ?^Y|L/E|TDDh积Ku_Vsvws3T*ZdBǱц˒dYخ]o?}qkH%CK02o?ӱZumKu:I̷91!B%Ew{!i"[r^0((5; I<F'(9rb(@tzYdYf'  A"GMgg'~__~=33gy4Nr/Ų7?V<T%c4|+ԑ_ӆOoYH (,|r+'?'/+ L>g=vZ^zWOSz)A%I7&j5qx)I0(|AAFWFV3Ja-/(2CfYa&5lI@YׂC>ɲ,L+++isܓO>iiF}ڿ׾T*? Gt~TxN<:t(!!?-$KH'dϿ}W뗿/-PNf?
-hůBY!DK$)O(i>=onv6d=0s"-]/``8xɓ'U*üc(~h4P{V3jdg(jʝ)kCQǫhmmj񉉉( C#  ?=R%7e*.M[s^905bF9ݛ^x.0Ì'
-t~(?ԩS`P3.f$4M:;;N ǩj4O򂂂) 9=sЍ7~;v,!!g-z.3!K"	w	_ӭC08<G9U*E޾5m~Y<	ڷPR}e/yV/`ȲLtqYwwdJLLTT0bϏz! @8C3g|>err>i*Y#16Ӵ4okГCDȷ\j\N72h4)<H&c㛭,U<x970PShBQǣ=uԍ7,YFp8v}jD  aq$buu^x.ͩ::j1dOHsK _R捶Kֶ9zǗGA80(;"""w+|c}*& $Ita޼yz84(vYRRk.BHqq>]IypV	 )nw=|ٶmۗT0B<Lv7hhZjo.Aa(5ز-1%7_x쬅Z ^,SӔֶ7>>~hX,tرnYc'Tԃp pg7n_YYIQT~~~e/lruh9I)ǅW>-9)z;w
-̦O<8
-.l`IVWYJ۷o7zWVd.𰬈&.EqN5DEE%%%WQQt:F/{1<  MeAjjj*++_<=j{#ŗ'׮;Gꓓ3he٢[,;466Ovl<`Z<0njkk(*111%%Ee̿MrȞrFz 0+ ~SS|psm^?`"ۯ2)Is71.o2EQYv|mJo~"ÈH,4-v.F(")sBٽ{}~ .g%Q8{544}{+uQ14$+T]*?~~p}VK79ɄVpV{5|ÛoYSSSQQRhzsRA "UřLY4Bu gihh8}аp¿~jdƝGJwv/8p9(BLL/OsG,[M͞@^.տbz巿;wy>qq0uDDkjj!999++8㩯w8d$W~@ ,wuu۷WUggUl+"LNuQ(~?zC}|zRƳDrrB˗_jw޳g~ᇃ=Q~4H}>s__Mӱf9::ZewQQQzd%%%"6	 @8,|wwc?=z433oold#;8[=Q'Hbn/!}51o|k=7_1m/~a3gΔ׫}RA Lǫv\`ARRRBB(*&T)ٹsߢ `Vkll<s̻{֭yG?z	klTEIhGY[[OdTt_V쬄><0fLF,&Eh4_eYٳO|>߫h0T*|A=^Uwwh4999FQѠq`%).....v:(..޵kJQB 0'Lɲt:O>;\x166GZzU#N~ɨ(@ҥY>r29ve@b<݅FӲA|Ht:]EEEMM[o%I/=kMJp &OIS`pѢE*h4'VZZJٳgOqq1!dx.2Sx?$ {{,^ԩS;{l}[vFzE}2Gjvœ۶-IKڵV,7[yUΞ={@  I|eKtp`R$q\}}})))			$dٔgL  t:_gϞC͛7j{B[֡q 
-=\Y>h?b+~K}3Hhp',%FG]tݟ+Rܘ?ds{{{N8Nӡq`s	~[VV& <xk;)%[F#	E91j@li~v7y`\
-d?/|Iά[ުj,Zhbq:%%%cĬJYļc YqC&˲9{O:qK/Kicz}xp7~gj5iu{bWV;n|рњa0njl08_[5iy4$֡!julllzz:iڵtH|***B4ץK  ➇ippq޽iz?%7UƁ	w.I[m&K`봦o}W^ihh	D(fU˛#j4~o |鵵+4QH @Q 0`~ݻ()))))Qf.--ͿN|  !y8իW:TQQ144rg}vŲnw<IB
--kWlٜzU[Weg&./{A/|FŃս{-.sӠ`$^`(B466jZVEx,Kyy/ɥBHAA޽{ g{4A]o߾7|vo߾ڔq4L!$~BHdM4GEY~yghh%=0TyZ~w_xM $V׫j######z=&$>p(#7[,^PP'4v
-|  M}:t)77_	}6s?yk0p <^3+W[a=0TL8pƍ>tE[0fMnl[QYWW|JJJbbbTTp8l6LL|! 3j4 <oۿY1ajEHW !d޼@A('O{}b<O^04$k9J#f7~k-޽{\RYY)2Ͽ@i !>zppb4.\h41pL`׮]EEEEEE51Yљ  !Y >|jkk׾mh74j.`*$Isf!7oV޸ѬVhsCÇO75]YDh0{%'4yYׯWUU	g8O9]E2%+fddp{`2vq 0g}߿a;wܲɜۂoG@Ss'M[[EQQGG]dIo~U?6BHsΝEh4RL0:T_|7Ϟ={QY^YVFǹ,]sbagQclb/gM\[x8^ӛ2z[5vo	8ssŔU,+W*]V[[+bGLlϞ=J֣|Oh$  GN}}}ee/ˋ/l/|{a-!B}x<I6m||P#V1%YRyM%7\<zo޼y񦦦JZ#z@4{٧v%3x'ۓY$_xs%	zp?Ï1?wG$DK{:bF/3Ŏme=O[[[MM(v}ٲe~Џ&bvܹs{}&  =sSSSӱcxK.~v--zA^['v٤"hRPyNOOomm|k9ٍ$t:}>_wwyM7' 
-6|`oĴL=ő$>E1300f3z`l6[qqqqq,++8Ν;w'#2F g{阘ɤQ<ϱ,%Io@V^_Tw׿BѠY([</SнicNܼLMnC51cbb֬Ycu:EQ$W1"dB1o'N& &-L@C&]Q2A0u7eF/ckYxk o1[x8g-$J%Z헿夤$|bX,bbXJKKWL0T3  G˲$r'I04݂Ɓ'߯iGMsYQ$F58u{$Q}*&t0Kɲ,ÇO?^g7o^ddL&垞8fFM&n
-g5Co[lu=0
-zfl>	!( s{$IQGA0MVm*2/Ɏ>f,˒Dy]$*ftv	A(jj+W8q"Y //`0J `C)m6[QQQQQnW @@3͔qzVE%Qc_tzSll珉7
-
-6dR-\744 m0#"̌DBȅ͏?Rf`PWƛ<(Uo߾j*Ʉ ;veەg1I [5:XUՄnq&2Z/H#BȖMMM8	!ZGdj9*!^GQԕ+/edYDۉ~С挌۷X W~X,wﮫ޹s @L3IǥFGGJEܯ~ϕ6/Zc!q_g'!DzQ&V-/p-m	G9rD'|rʕh t:wڵk׮L,4N: 3|FOwҴ$IA
-	!`<=(RlY~[\TwmK3SIV3qĘ:l"˲s q޼yO?t~~~\\F {U"رjj&ڃ\  aN	*h4*_~,R<!5#4c=@xAZJ11ouVLZ@cMHGwcÇ755͛7o˖-k֬IKKmd RTTgϞ~%QqUTTڵ+===//o'4B3j g8ufEy<ZV}}}}}}%IƆ"rCCM	Oi/>}VSkQμgͭii	NIBΟy, >g}o֍7RRRm۶e˖Xd=  3A}Fp8vUVV6S\  y/EeN.V]__Zm itko,+t,e,--~_!NYBB/0h@Sﯬdf˖-֭l 0,f`PQ pzi0>`0l6zFe%p?hFާѰJ_/</bt56F?w.Yt]z{piqAXshؘUPPiӦteC  	pn{Pw	 L?^O|	Yܧ`PKN&&0|KB(Jzvu̚?jmbP78kڿ_UUh,((غukff&z  fnM0)rN3[ 0g	%I(J$eYZ>0e޾>'!KݖV>%eU	dY&&&`דeN9**ɕiEBۃQWj"eիWo޼yz  fBaaaEEG
-
-
-&	3s 3=OA0,|>I2e>A^ix?eULü$I4MM6KL#7.jV0cIyͅ+˗oڴ)--Mբ}  fREQ( g{$I8aT*r냦9yy9Y	 ղ$kuOiYU*F??痳2ZJIB.7qBx	7<޽{)z'
-v.<  `
-
-4 9=ӏ8h\.˲<,j/~OncQѨ+_$I[ʥ]?o}OV0ͳB::z~q@_SxGgϞ+Wܶmի8  3XtVTTX,nٔ=  aqeY$e͛zeYyh}^A²4~ο;@+W%nS(KGGoW7A3By6Ǐ'x_lYTT `9;vK	}!EEE{u=  fO~ (4-&I0u47jā7ܐ2wq<!N#)η?9|#%5r_E3B|N:ٙaÆիWGEEv1 Ls:`Νš^||Pcf 0ǲ,!aQ}>Zeϖ,+7`
-mV/;MSCDQ%uj5genIJiܑIeBG[+**ZZZ,XiӦ+V}  Iٽ{wqq*]vUTTQ Po2DQTEqǲ$#)ؘ#Mo+oDE	!qF38蒉HQʿߟErV?qڑxPo}oٲe (++#޽{Ν#zll{*c}d=  aqcFLQT &I?LYoi6Q{$._z 	!$6Vo0h].VS3_zR[t&IQzO<y5TXXcz Q__O<+eєE  aEQYccc-K (*k(
-0E.oW@Rb!}/x-?uT*LVsZcO?~۶m_`VE  <H>A.=z  TL(Ԭ*u:Mjt}~_~/_t0k=^_`s-&>.9ђP2X*|˗-˶m>.\P7  B}*&َa 0DL;Q9$IR<?88(N)kk2oސ|
-i?a:g&JL0$'B״bx(sb+++j5k󳲲Ї l]vt 
-|  0iJ%B__J$LS!֭6Z=yZ[ߞocF,fг	`-G$GB
-$Q^lw߭bYvɒ%֭[`^gM )C󔖖]QQQzp.] HfFR&FZrdYrFtEAe޺5ыitbIE	![ϙ`fjԸԐ'R8|0EQ6mںun@  <eee"//f)<#ëXkL {MӒ$YVJ%˲N~A^fh"W$g[R˲dB;{hFxdY9rҥK,=Syyyh bT#&RhBQj|  駌vjudd ,,+4A	!yzj5;VLnC\m]ܙ3竪AXfMAAAvv6 NI|%QEEEڃ YqiZE٬8===zVLpς33訉αDQ"}%ꎮ=p-,,\~}ll, vnOP31>  C5O?,Zʲq\GOLT[?:5.GB[=^3Pw?*o;|pSSSJJJAAʕ+YE    4TL?<EQ<t:A:;;EQyNDp:Dikt:=!Q_;tPkk׬YlٲX[  2zh*.2x$	w1 Rdj$ABeY?v !85>!GZ*++o߾SO_fi44 p8
-Co)٣~(B L?ehZhTa~AgKuZ}+'VδZ>GmooOMM}Ƿoߞq !ڱc]WFhޱcfZ{  '20CCCzQT<k>LI7f^-q\̙3111ׯ߰aCRR p(}ϰ)++B܃ 0EQʐ=p'BWWW?qh `nr{,;s)Nvڍ7.Z`0q  .g$\&b qόPղ,L@ 'IF5  0H?Ւ$-[DDD/ @]c	!=  :s͈`0H$IF龾>i|520h9޹sZʕ+׬Ya48  bx>A Z-` W1,jAe@a<t裪*AVZO/]4&&7~ ?!(I  af$IfYt:^ϲus `p5ȑ#E^zׯOJJ" fvEKII+< @8C33J>²JbYVI|T*x vL<wNcU.]999EB( {^ڵkG `|.dZMQ0E\`0(Y)
-ߎ 0Fw8r,YaÆ+V$&&4n$  ݾ{)<gh۹~H6^t:GL 7wtf AQ,ZeY|=Υ'EP
- $Q]tGdgg]699YV  MAAFe ƣNgIIɘ]|%%%cڵkΝS1{frHiZEZV<ϫT*IRTA4 Ryŉ3337oޜ D;1NpB,KQQnWhGEEKruH]pBJJJ,Ν;	qόiZRT*qMӂ 0HeYfb9RYYҒTXXc͟?_ף   fPSTTg%^Q<`zDBQXX"!➙BӴhj$kA :uĜ:ӥJNN޴iӖ-[rrrZ- Q3˼<fي1J+))Q={^Y,H;wڵkĀ> 0ԜAʐ=]`P fYzO<h6W\nݺTd=  ;s9NaX
-
-
-Ngiii^^%@Rl4 xOX֒0  q2EjA{{{A $z*{si45klڴiҥV  cRf+//߻wĬ,4Uqq>\S:U)#l6Ţх3JH> Ƅg,F$YC#G\pAK>cYYY&a4 #%T3[v=,L~ue\giX9״(+++,,Tf= @0S~Jx<jh4B<˲Aruv JV.9eYAZZMƚzQ53b`0"[QQUUq˗/_x1z  MJ7.t:Q1+Lm*--U
-SPP<gϞibvp8땔bXvޭK 0&=3E4c2T* `r1fI%i	EQ}{޻l>Ԓ](mQ/|l͍w'˲c9qFUQroʕO=TnnnBB 53ezb1ʤv}DAPqq]iٖ2Gk s➙9$8Fl6	qzVq\Ʀ~QT*Z$*m"ZU?/՚l}[񟧻RSdB=$z/BDhu)ogeRJLSEGliQX?j>1#ղ,/_|ƍ˗/B  <e\މ,))	)..!)v f{nH	KKKwaX&Qgp'N#ZͲEs׷>N]K-:Nޞ!sY35rfZƴ	=nB1q&ӧ;=C%hXkKj{݄tʵ>ӫMbZ6)1byEx+5G9Ξ=rrsslْ QFӓH5[ORRe5|.vRڵk )(*3sBX$i```hhtǲ~4Q[]x\lixA$I(eiQ	!$<8iJbVGQdzͩqX,fE^--e?M	ϝoVAIL/ONH0Oa;D	(a(XٷK/ڿ5I
-א.z'Oظqڵk  <>=6E(O)++nw\gۋKJJBC hx)<\<˲xx$IJ2FE	#oswe<qa6kgeEZ|Aop9xI䤈(Gj!Yq˖&EEBCΊ[`2rz,\g!j5pALbB̉,Irw[]CC~BH0(6x~Wv!./AW[]yѣG,XaÆ˗Ĩ  0(ӨO~eeyPFe= wdt1q,>ohhHy^V{Dab`oA?!$.ִ('>;+>;+.##69b2r2x$Mܦ˒U*zkPMAT*žXF
-tn:_$˲-^0/g\h[u:1%9+ J==+WNz}`'rSs>N_su|eeeGGf۴i͛ӕީ  \條;w*C,رcϞ=w]^l>|	 A3ShiX\a歮7ߪ68	!.[+/JJ8$J!$ҪOIJl_ҋveXp孚q#(]d6i4r_mjJ9 l)x,#m^/~}75XǱ8l(iꚢs̙6Ͷuu-X`0  |lIIIEEEyy93)!BTTT(L&F%%%eee>➙V 0H$Il$V
-q'9v!%|fefą2>9!P35А`~/MSqKM(Q:~T̸8S뙖,ˑV}T~SO.r4j$\lbѡ3&z)>>~ʕk֬A  bݻw/Ⱦ0wmϞ=ȥeeev]	}$(4f2zܹsfSfL/--ݻwg1 Pn;%RvӽL o3HRe6U* (BNg|yx^t\h_[ɳm{<$Iv|]==n/(RjƠǛLMm~|㙳HTAO;we̳Ǜ{(JkThN	DT|93#6&ƈ9L֎熎9r-պiӦM6L&  3C57HsQQn߱cZ2;v9Β	X,J<TVVL/e${bƋ:4z*IĲ,!i4Q0yh|NO8um|E_5?ΐe}>r;DQR~Ӫ.ylr$N|x^8|6/Ҿ<%¬|w{!6[$Q;s#霫jrө,^gync<W=|͛7ҥKW^`^ BtʬzFm]aG(PiiiEEnbvaSAAAuue,Tc1d )$zj,CCCN'ǡYM?3'OJE=g57}tNmp|#=`P4#7;-˲V._<?=zx7;CԹKRgjZtAn,Ʀ>Bȥ͋3{EgO}?eټM6-Y$66i4  FQ~ϷeXv9£'k`F$G 0yf
-M>Oʲ,IRxA$JT4-{~vPō@@Pr[#IB?C7{{݄hCre~ztdyJ[[}L}Vf\Rb>uBHLq=5&%׮+/K4L`
-'xȭ_q؉;$B$lɘgN
-!wĩ/Brsslb###  x\  ➙"FEQGDDtttHVj5!YC[{E%Yqo}s-~>Oڟ[(iE/_ցKOB^kkk>(!sA(Z4)';^W BFeQeYiJ	ϋ>1pĝ7ެ:wQeXګ+7_A*tj_pv͛7/[,>>^  J{  .f
-0**22b,RXy~hh$T<.f(Jj5ҋU+J0(9̏ڗ~+k3ƆQy	>YifYW|\!jխZ9/))b_W=@1˗%''[<;,NVmם`sKx}4Mۢ2{fiZ9IT^xhŋy_tO>zxaD  0Ŕk0 LU܌^MI~jEN',B<`>ƛUuy+hȱcJtlysy'#/SQyofFR;4uXVfܒŉ](	zou	!,^0zfJԉu	yBIBNL0?L׿n~z45ܸ3j׻hѢ쨨( 	LK] i{fqU*u:!D@ xN'D4:<?Pg7,z:;+nXPk񫳷j!ӣ3#B1vC*>mDBܩ<r²(cCmkwtZ8a~zVNy\[*|qy"&%'YpIL<wz\ecǎuwwoذaڵJ6  0)D&1;  <DM0sAj(fax<&AzoU]KINؗ7(ݸ[ՕGj	!JyQ'E&.]ipy	!Vbb@GBG/M2mvhmcS?!$%ٚ$).4j$2K%1=w(Ϟkԯ]mÄ\sϐ;V#GTVVvww^:==]բ}  `bEuttB~?@ |y
- e=J
->O(s}2o%hGk!F#liR}&>ωuGV
-d,Rnu{	!E(29eRy+n<MSrⳳzuho	!Yqf;NQբ+x,sdjήݷt;.ܩk[ZjD=skum}ѣGO8jժUVz4  L^˝[* b40{f ,^nw *^`l M`hmi*&ڰ`~trhzIz.]i&ϕ II|\~2>NT<%1өߏrgVa~tRB3!$"Bdq¼HeT4e6k>	h	nX?k~bnA<gU?b1<>ÝŇ+VTT477'''oذ`ѢEF    0g ),,t:NSjϴZWBdYƩ3'N!2(*"Blyn^r!*m(ǮåظXZk6>"zpFli٤i*j[yKs"z{h4MՋahe-E慷t75|9 !$^|p455EFFnڴiӦM7L8 ɟ*?  !)edh4$jaAp4mT<WAiJdImiQSDƾQm[q|"4M2iJQK]0U5j"DDh&ۢOwn:sA%er338N
-@E/]4DL1)a%:#:z;w,˚5k{\ٌu  I  -=3yzVuݒ$T(i4 r[{eI)7ŚDQrLO΋[^BȂ_~mu>h$TLL!T#R;u=D˲IV\N]A6.I5\EQ _{[iCJ5*~ H+̙37nt+Vظqczz:z  `g
-  !oAQj((>J%K4AE/(GaYӰmCC5tNwss0(T5'&DLam׮w;q²LĬ8]{yNSE.^L5suӱq$Aqg=AT-'N_|e٬uFGG4<  7Jg.̒ p?$IRF8N)?y\E?,˘LA9J  ||{KjGE<@0(NT麋Z	!Qy		fҕ'!zھ,ٖ3Czzott!f611".*DY)=qFUYYy9/^i&ݞ  rkꓩf  L!Ax^eA h4ey$eƟ㛦`haI\.]iz)XI= EQ$:{<,{fkO_ΊSwBw!	˖&GEf',7outC7A"$'[&%'[0H&I!XYYy5.]R    p?DQ4jl6澾>dYjc?h0t-ihO?qǖdhTɊ2v&$ɢ()++)49Tr.u:AeYeMQDGtĩ;ͳX9[s.FeAxB"Ky}pC156nXi!4Q++?8uv}ӦMǡ  `_1h g19j`yt:(D 2hC$ɽ}7r-q&EǪefq_z'*ʰ('dxh=k4U  Ȳ2ѡ_n!>?65nm`YfyАN`~LĨH/\lrb2q˖&%&FYnwq㢜բ78"O56_8sqypOhT[2_\18~f?`;w.kѢE[lYbEBB  8 s{f2'W iZQv	!~^mDFJI._bG(Jޣo߼Օb0kYޚG۷,ʉj?-$99ْnSףLXWyVVgvZZ.ǅ=M<9bwz*ʲ0t󣇏30;p d,ΊDh}݁E				fQ#IrouVWnPb}򉜗^SpjCO:utY&--  tA @8C3߂n[әL~Y%Fuσa4rkViFڷR"Ir{sjFiJdDQ>BHeK.	_#˲ҢmQB~qG`Pq珨O_X49!<|'O+aВŉӣ7xze'z*EIM}>>4N^m"'1#sV7NXUUӓaÆk&&&" '  s{fV 8N$B4%2KQhLj!Z^;џXtK'>Lm9gXWNn,ݪ-+IMO޼iO.1Nw;:۶5ke^%BJXAzHTaYnҦ#AݚiF
-.ht:ulT&cZ4i󦅫W38ff5|>Teeewwwrr׬YpBш D  IZ2;EQ.K*Vi*)1\1qsJдVFFFnX?=5"b#:ʰiSث]>?z+y^ԨUY,N̈ΊOL0ẌW&%E\0v^o`|ZzinҊDH~ٱ7;~68<A^KIX-:c33b/KNJt,5߼sdѣGkkkSRR֮]mX>  0->>  aqόWT(
-F#0@@K2hah33b33bmVݺukmS[CNv|Nvx5W?ϯ0bc[fDyM[['NJHHXj՚5k233-Mh"  Hy  f=3KjZ^e0$Iz(}h3i[⎝hRz֬YaÆd=  0>P p0dYEQIeYfY(6HӸ1 !#˲qRsܹR/^qƜ
->  LWψ   2`fQ!"Mj(A5xD p?8y?zkT*UnnƍWXaX  Ld=  a=3He%IbYVѨT*EQP|M|2紜O>}MBHNN333f3  9 p10߂ t:FVeYoii(*Tk9L S$Zא~x/^nݺ5k$$$h44  I  =3Hea(beف`0j~?n |XM'N8~xgggJJv{JJ^G Ag. Y=3]0!DL&"4E Qd^Ӆɓ.]$˲҇k))):M  3zKЙ  !2d21#b Ebf 7,N>ׯPh  Q$>  fJae.vQ)EQyQ zjoމ8{ꊊZjڵkҴZRQ     =3E5EQJ.I{~\ 0YC&gΜ쌎^zrrrЇ  t P3_ QE60`$ j뛬UWWfݞj0p  ư\h 'dRZV偁!QxcY? vbM؏]<vXkkkddd^^c=dɒh  fBw. pꞙ<˲`P<)I`$ '	ܱgΜaҥk֬ʊx=   IDp  졺gf)Y29А(f㸁Q$V1A Gi^`ZbΜ=sر۷okM6-[,999K  PzP ,˲(`0222--h4
-@Ӵ_NCh"  s͝ϟ;wΝ;.ܴiŋ  =E#  -=3(hX,mmm@|>eYF), y-t[gٳg;v5Ysss{챥KT  yX p;3jA$I$IQ)2$ I5!k3g]vҥK  C pgƿ	iV&e`P; 蠻zcN7;vCCC)))k֬Ybf3  Y.  ̢(AeeY=$Q4/K (2nĉ/^x<)))+WIIIjM  'C5cr. gQ1Evuu~B l M !,GWTWYYv֯_f͚lш& KwZ  l3׌_,+Ib(p5	 Y=^[ϟ?w\SSj߰aCFFFDDR!  )E= sCIF$IGhZ-I/j5*BdxoE:Uu̙y]vՙf5  n'h g4t:Ay" cʹӧOWUUuvv5kdddf     !qÈh0T*EQ`v{^A8C5,Ӣjh<}'ZZZfŋsrrbbb  @8}m=  a%3.t:Y6e"vBFt x)٦ӧOqxիWƪT     qjZEe@ <!D$%I*B0Z3Ke[N>}Z,XrʜxVV ܭ, @Mq9'IF(8Z2;/pz"Nn>zhMM˲999֭[|ybb"p @xt {{f(F^0!<RA٪/KG ;窇;VUUEQn߰anOMM8M  a=  :s8J%Ij8.<h8E_ YAs>}tMM?͛ϟh(  [E$  !y uFe,kZu: ?+I*<jA޻q:իWAϷ)))FM  F  g5(iZhI4`2L@e$> 1댼tҩS^222֮]rJf0J  0[r  aqσ9iiIn` 02a(JD<"dnO8tYǓlٲUV͟??""M  K>  f(,ʲRXn[$ #qxne={ٳyyy+VXpbmR  E 8ahV~x<>Or\.&oJO(rjLEEŉ'fsNNN^^j5Z	  z  f=	R4!v\.B?Q&$I^|ʦ+W[.'''&&7H `A <<IqV(Aa EI`Ο
-{SΝ;w;wt7.^8..84  -
-p fݙ$=B8f4l6U*!DhZYEQhI*&$IuQ.\p8mmmz~ٲe[lYlYll,˲h%  WMh EDQlnnIOOl@
-{aZ#ze.o UA4\5-˫/\q׬Ylٲ$   fwСyyy>룣GҬVM&hy^$Y^2,{Diiu8UUUwafɒ%K.E    `,sڋ/sx\=3(exx<NSV)x}FV2-YiB]oVd҈{zYzM_x?ꈅ'W>]	^]N̽=Ɯx'yLxddOid2z-2:ǎן9s.KzmfZZ-> `6R朕e `Q,;'O|7^ZTTm۶(=0u,˺n?44rL&0$/8(QC_Wf]~O2s1LыMJ'8)o_JC'[ʹBl<;2Hy)#vf-?>L{=H&k4`0~Ǐ_r?...77wݺuH h4ND  PeZx≌>>tPmmmMMs=3n"y@YO04jvwwwGDD455۷eYaDQ(S~^>qLwl&XpO!W4A1`b7e2[3A2"F"SS'xSFZ;;;^x,Y>IIIH YBDQ}uG8PCߡ=*IF	M[yIKhU31*Dy;y<%2W>gBizD;;3|#V>|OZ7ih5mGՈJD;kj纣J1x1+(嘇5yl؟5KS#F-L|<٪-=]۷o7/_O~R^^o~3%%E^	qLV0X,ftwwB^3gF_uOp<-岓Df.OѭO~J?%nd1Ѵ|되W78f[~y(F\\> `B}WMiJ1k	!Edw<je9ȘW
-GgI\6Гdg)(رCK?bpįBϒyʧ]~_˰'~	a*'_Ckr[`?л01'1ߑciSY&2CfD2?G]#8g$K߫V6@߇11W>/Ni;79"x3/^zAeZ͛0]{ܵz*KoNSf-P/ctM%g:avAl6͛|Id=  07:syrtijeeKQdO
-b#B+:vKB>yiØ1,@&QIX0#ʮ>9,!odT̰DNSeI2~d^[gjxʪFЁ7bU#j4M$8`,=q<<sGyn<迵·'.64'џ'NsFRL#ʈF#hx0~C3t	zLcLT	MP2:B\2V	Fxpm5AӸ	UM~%r񂛻>F'82&9z20׮]y|IٌA  B_y~?h x qGNq
-AӣL`%K̥s) <_WW$iަ|%?z:zϬ8AS'S-Ϙ=4]Ñ;FMrt{zs<I<F=a֯_A  3{zzZ-M*ݻz6V<bloa6x'W[L?dh8#V5ficVjL<шױW8|Iꌹ#'Xf'qmGv&Ώgi1ǦDeh;Zi	o5Rӿ{:8COdt$5{vw}4MRQ7xԩcǎ544ȲiӦ<4gơG !|fg+:#L>ztDEg]3ё-ƨ@`0DGGk4|    <\~ѣt8^w[nݲeKff^kw{f(`P)$ы)?}/g*ztVM:?kCopx,V1O-    588xȑzlo߾=77W3v3jh      Ozܹs6lxǖ/_nX8       沾Ǐ744dgg/_<22rL>=      XIIxڹs'"r $IG     `6_ԍ?. Y     `+(((((@; q     WPP[ B	        =      s\aaaaaaYYYaa!EQE~[RRN}bN^|EápGv*,,ܵk׈'ue;vZʒVuǎNs뭨xCKR^RRÎ;F?_,,,,--s      re{.cXBWʯC{
-ZayymD-=m}F̈ٳ'[hΝnuuußR]]<gQ07     t:v޽{wM)))QYTexLIIRcꪫƬIn}v@𒜲2xbݻ_	SPPJʆ9Ϣ"'07`"v     |QGQfن?nەLnbVUPB-R%1ٳg[,%BㄐP(X:GZ;w^ihWˇ9UU\\<2`VCu     W___FS\\<<멨P*hFLU\\D*Jt:B\`R:j^Ps1INh?c&{K0;     W\\<#҈h2'X,#l6á,Zltr?$>x	NHh=XQQ2\tYY4)},zr\     `ֳlw_ƋK5GS3ɭJ}#( 9q     #-4Wf֋wءr8J29q     #h2u:j>Hz-*A)/
-=`P      PMF;#nNs#LPSVV,`@     (*((PaJJJ&Q9Β+:#R>yv]	JKK'x턐PO.܃     Ut:DpA94Wzh	BIR***vQ______RRL5ߓH@;vP$YQQQRR2<***
-Ro s     GΝ;~LNsǎV5//oǎ#jsv={//׏޽[))--MOOOOOWOrnݻWrvڕgZw5zPsj     ŔzSeyϞ=EEEA#:...l+(((..Z#VhXKKKCfS"1bIn}/**
-u
- cMTZ(Y
-      0KJ"ϺwQZZj>܃\      hQ".=      hٵk䂹c      #>===Ш s      "eȞ%-YPPPQQaيC=       `N=        s
-       9q              `NA       0        S        ){        =        s
-       9q              `NA       0        S        ){        =        s
-       9q              `NA       0        S        ){        =        s
-       9q              `NA       0        S        ){        =        s
-       9q              `NA       0        S        ){        =        s
-       9q              `NA       0        S        ){        =        s
-       9q              `NA       0        S        ){        =        s
-       9q              `N N}ť    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.dia ns-3.22/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.dia
--- ns-3.21/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,32 @@
+     ]oG_!h_b񣊫u,{XȺ%HNۯ>F%uk<RpQf?EXo~Yn/oCgg7o_?ˏ?rbxmݧ?y믿vW_nw7sw|ś@}nnuzqǙjMwvsu:eq?7ǼyX_-.?ڄ]iz؏nn/ݗOOH
+ωfMu/~_yI_|}VBL>.VOws_6VƑw2ڲ[ewyn{rq]lqtl\~,zNGM%P0_.7cE)^}xۦ8u\^Zyo'}6=ƹ_{ϗg!MIdo{}1Wwbq\hW<>Z]rwrgwkay>_Ώx՗㯡IL.y7ZQЉxjIJ\޿dDY\_\-3#i0!:#J(;r^̻$.2>1OaI}gO,vƲHta#)EJBHAĞ?[KwէYvjcvcvy}\{h<ż|ep뻞u&m19
+0Q}V6	Q8BPk)=NAwt8>JB>%E9QEn'2m9#QR3WD|k_HnS^HhOlFTpBìTFSт46>$0B罰&R}1D%aT01ow   ۂO`<	goxGp_3;G47e=J}yuuچg)qs}.˫/oZ.=>J2ϫ[_ÇŇU|?և|trvmB1k8Fˋ/uymɥw=%=ץ`EMĝj rG&vJ>!9{ؕssDHQ<*lDX!p2e*wF>Dpby1P7!OvOۧB ͓5O;O'yfJtωyb# s0jPEM(WD=&*shc(b(ܕDLկ:@kDQlIIME%N)YJQ1FyN(W'gu&Jǚ(38i|vl=Y8Ewi`*l&Plz׳7mS*tBXK&<uq>2&v;n-ϟm
+*2lHPO$?]ώK}Xn~]ş{fax,g_)ir@4-JNZ9F#cKPT]ڍ	C _
+(]˦	ML|:倃\?.gw;bO7.Wa]2zfmлGQ;̟l#l!ojbe18턝Y3it:us.sVHԸ}kRcyl1}z:>,'PK8'(1AA56>c֔*7Iٟ`L7?``ʆS OS0':ϊ)EaI#g /g?)ľHZ!{\r̧c0s_9?HU)qpy%7qD^rt,i DX j ׈!)꤇b'Y2)GT}bS3Б519&xikN	?eɭ=is?ee9o}SjeO.qrAOY;g<$λWˏnVOg2z'Њ1ń^ϵͺ* )y;2{:_wp ٵO,@*a1ICH2(ENEt>
+]laRVǩKw4ܳ;~
+][]L9A0 :;X @eCZn@X'OȁLBy,߹yA{tQenNXsNˍ<[z뻰^d:eMOYDZ	Xסqn{ش¬d\wӸ8O!Φ=ŤȻ/LOl":ΖﾳPKE?o_q覻4Y*ir}|DlA睷Q9 3&d%&>-h229Т%^&Jl]'4C$I&#ƫӴqm%{AڇV̱Qp^bHekɱueN@?gi4gne5k#EqZԗZIYOc%sN97az\X·0(ԠQ<.x/ZTc&)kb=kIo%uЫV&f%rNKBk7B ]m2p힆-GlWXe |W}kmEM?.fv
+xw!(mLM},wAɓ!
+Ӑ_-Vg  aC͂ȽĀ@9|1{EVAGqB7	B,C!*֣=62B1oNd(DCضZ8I)aPLo*|3:6~vNOZ*!IV";
+A^HgIhf- R^RDiS-]	$s/DlЦHL4ƆN^!R6댤i7٬3s ">;e"&vGbǯ"U9s"%gIbI;MLCެnU'bUxZjSj|#hHs%NU[ikARB9*0m?^pK6)$~.٦Xۍ)sWAӴG]z_ ?\}ժ,Ioǖ	S(Sk^ӻQ"BfY0|vgނA'IV1$4V3R1*?_/܀Z:$YlBEq14`Y~X}{xG-?%!x8Uqr+j>oz+49ATAm`AAr:"vm=@PZb~,lkUb!5?+1@yaJLA	wr)LBx<Y*'ήiǪ`JMz`QPs0CD˟\~%U4āa
+DȒF)<2Vw]~#mҐ*΁Py|qɔ!bA<l"ڡx,Yb$"NRsѨ<s9"~Zr Qa`!LSSӱ.!UٱB0f'D:b0#&OړsBwsAi{mQ՜b.^(m
+3.ctV-yߤ5 n3$qAiV΄LZ	6RtS3;|Bk*XnԗPН78HŹ|5Ewՙpoms .d;:]YGu+[['+o.< շPꪞlymn͓(J$NLҩg$#bE߂з0 `*Jcrg<z됺wΆ]in1WXm:6HOLqa0ԐayD98En0hlTRIQRMȢqTF*{K+U.CL'o5XEsbԓ[z\֎~aaBcKQSKVYoSJ s/srٕڔ,)tUSk9}ƻ 1COVYkfK2SVFbQBuZI?A1b;99Ew2>VU|$r3R4	0oj6(~&	\dHq/M s/qTV =goRT++s	yjq:6zQh{2"d́7J~^nAx"ׁbk.&#t7H1Oc
+Y^Yy!2"{/X+"Z_EuQԦ-b)",I]yԵ#̽ɋd"!׉B
+E>j@-.YJEqtf2+dJ"vDvÈud*ZZ`$eS~F͈J2ctlp=3Fbd3ZփK-4h`Ġ'0{mV-\p#1,5BJI?XtE,)?גRDuםV搕Zh+2'/4[sKKsncX?Ԫt&Q2=^rBBK"'N%w)`{3PR'#>`#s%\`#yb򜞌䟯D pӢ[\lcs|P	u
+0e;8Nw	mZ7mEv/e\xL<cp0Xtΐ7IV^{~0NKlqs
+Ա%fO`c<g%%4`]fg_~͍.{ja.#bat	bT 11m{Kg4ClM3Īx1)%N8Zg5sb%gn/DjIGmTHx{\yJzmV*<cvb~=CZ+1>6^HlN(:>4E3̭;k
+k2%uUyN$cҠi՝:"Fc+V<BO3JA~@u'}W}
+`,tP6i_,T?T]1?_oS
+;j2)Cc>[8&&տe
+gp 1a&#տjxVZM0x/a>v(1`$pC)voQOˈ0c@1X7:UءIM08m
+p21-]	ai!<_@_ 	͸<ȍ,FhLؠi+5;
+q`M_:ׯFD'~idNY'mNlĉ|ac4T+n5"F/نW8uazEvZIX4*X3A^b`@,BjY[Bk1V@ZhU(PTe0l%{4D7{j.(bYѡ{&WRdn;܂}llrhiT4w9JK2iIƀ0/h<Qc)B"&cr8*r>SL"d'ZfT?&$Hb_&kk5wB^0lm-⽌Q/..Klbp"jh
+kS; /F?JVȦA7\`Ada2L H3\6V;R.Ml{C6;vqmpjkE`G[`P9TIΦ:#%{9KHA2${qX+&rP8z#g3H)J,"*HZg72!{pTHL*tBdk}IuQ.%Y#{$ƁD:\kRruFCՆp'ZrZ%{%ݪ,cΑRu¹VRɖ@۸tyklPߋO RMYkaC
+Lm nBcEn%S ,X֪2r
+XY}\2<Cztf֒E*s 2R:\krYL*zmS3`<q*9'dF
+2RǄ^)D=<c+JV|^V}"j=)[l pDy獏Vdki)]ZW-קec.Z:f)W	35jИ޹,	\+nO,T[	3<֪;AhQ1A;*'u`$IxŞ3p'A&)U$p/:jO8׽νCUsOdh>!J6qofٸY#l9%CďɝlSg{%K2 gj [IQ)3e<TRM+7rρ'
+"7| KOA@PYNrM;dwZ񈯱>\O_k548k@v1߬$>M_I
+ivɠ"+&+GfW
+2#ʯ;0lwVX[ i mp ѵY.fv{%.#Y7 󬫣jP>F4mb#?y P+_GI9׸
+99Xjx"/n?PU> $oMxqB oQH4C@!X
+n~Ї'v()`8<|QC-9z!LfꌿkZBtEe'f	!,>!
+ 5 2dksm~rCsZ|/$ 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.pdf ns-3.22/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.pdf
--- ns-3.21/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,317 +0,0 @@
-%PDF-1.3 
-1 0 obj
-<<
-/Pages 2 0 R
-/Type /Catalog
->>
-endobj
-2 0 obj
-<<
-/Type /Pages
-/Kids [ 3 0 R ]
-/Count 1
->>
-endobj
-3 0 obj
-<<
-/Type /Page
-/Parent 2 0 R
-/Resources <<
-/XObject << /Im0 8 0 R >>
-/ProcSet 6 0 R >>
-/MediaBox [0 0 550.8 248.04]
-/CropBox [0 0 550.8 248.04]
-/Contents 4 0 R
-/Thumb 11 0 R
->>
-endobj
-4 0 obj
-<<
-/Length 5 0 R
->>
-stream
-q
-550.8 0 0 248.04 0 0 cm
-/Im0 Do
-Q
-endstream
-endobj
-5 0 obj
-36
-endobj
-6 0 obj
-[ /PDF /Text /ImageC ]
-endobj
-7 0 obj
-<<
->>
-endobj
-8 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Im0
-/Filter [ /FlateDecode ]
-/Width 1530
-/Height 689
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 9 0 R
->>
-stream
-x	|b~۪ccbιֺ)FcB1a1nFV*z hmvg:,fF^/$$}=7||I9n                                                                                                                                                                                                                                                                                                                                    
-{l߾===
-     pi_|E۶m|Ɇ&%%Q!      ͛'N,SLRBCC_N      cǎhѢLw]כL&j     \re̙O=?VZUT	̤r      \KVVƍի]|yOOΝ;WZSNGϧ      \d:qD޽x≮]V\k̘1;v|g͚J-     ˗/Ϟ=Fm۶~罼͛ZJ??QQ      /;;{۶m͛7۷o˕+{Uj˗/SW      /%%eUV:t/	NOOUV6m
-Pc      ,..nݺ~~~ىbsɀ5k._Fj     ;wnժUvJKKn&$$=sssbccvؑU     pfyyyn2LI{rss5׮]KIIIMM5      \us`vj     I4      1B      \ԓ+$$     YE      4      Q@ow'i     3^_m     GEL{4Mv      8J!Ɋ0n     SQ2Ll#
-ږa       ZmsDm=      Jw@a     Hsrѓ     0n     s2Zh     lXc2}i     T4ʹG.ۙ=      NET	u:uaB;sr     81&XN{56wOLLm     MGܦq{      L&nZ=Zm{ʕ+G     !x"1vaf      "ҬRFy#,Q>H{      zG$.,lw      gc4=
-!%lPؾ(͌     lzZV(ᦰ^qqq=      CisW     p*b.BhHiOPPi     #g1bOQc     p*AVOUGL{BBBH{      `h4
-Hm{      h}j͍     %hZRy״=      NKj#rVksi     p@s!Jv{r+WQ     yw-Z6.'     3d2C	4     8\[&LO.      '!Ne12#M}Q     rǇIHH&     pfz^R>j^^^     pZA(
-Gqf      8^V}}}dt6waN.      j-m92bHlS\9      g`1{Q'agN.      "=E
-y$bOOOFi     pF5Hm{H{      8	G&	J%     p6zz.a|aN.      b4e2T*Ri+]jC     T*j6<APjZӶ     r1)lq$Ri^qN.      '!6ݱ32VәKlI     sm\     Kf`     p=c4ɹCO.      'Viz]:N]X;3     8H.dܦ'     146ٙ6m{      ^WP(M`ooo      @      w"Ÿ=      hTT
-u>mi     #ͧܒh4JJ{     HSKKOQ[      <ZzzjuR,Ĵӓ\      Z^.h     hJX6?E:ж     n\b=           1)* 11q{      H      <|:N]t^6/bf      7 =     pRO.J{44k      J )y=ZV*f5ZG/`gh4     OO׶h4T*;#H+Q*9#&     pBmhLT*5ZTipb⣓      w`BRǗaGxN^oA      (FQCT*𯬀^FT*icڣjv&     nCL{i+N`<"6Ejգ
-J8Z8½H{     ;)FsL&d1jG׋I#ov"     $>>^L{ړ<5$;¿:N\)Me      ؔmf)t:?6Ii'#"rŖ=      KL{92r11xn5$J     &{r)
-qdc{f#q)J'JE     `Sbbb1qD1      UԴsr!G=      6=?=GWvd{"      SGVH	pnd2i4      $3njͽF88      `Sb,юJjL[FTOe4
-FRKX/|     `0h4*
-;3mol6!m     B82J}wM{jB7R3h(JFcLKFXig]#     //p     M     LmI      gpm{      <K.ST)ϧdkT~JŊ     }_tǟ5:(Pn۔S}Y~     KHH(]̿([BC     \ж!J*     ii     p'=wzr&!     q{H{     ;z     "m     pRav     7nim{     cN.      w"=m     pR(ʹ     n@=     3n'=H{     m=     ;"m     pbm     pE     	Г     'ii     pqqq=     n9H{     ;'=     ;bv      7 "yȥrʼ     }'"'     pɥ!!     NlCO.     (     mж     )5:     :bv     N=TX     EO.     N[xғ     x1mC.*U     ;zr      w"="     n     qܞǟ"af     H{H{     ;'i     p'!     =     ܉<WA==     Im{H{      =h     	m{UX"o?     pѶ     qv     AJ{Ÿ=     H3Ӷp-&)??z     CO.;w....%%%;;
-    ؓ==k\jUݺum۶˗/L&    nГpMnڵk_ժU7o>{'NdeeQ3    (ͤ=1LiiiC5jݻƍ\B    (9¸=\TvvvJJJxxx۶mxz͜9رc7oޤr    X+Ut=Ѫ1!(cq7¸%	B|^}76?7>	H*?gJTP!!!!...>>_@ze\qKeěǑX+,Ai懕n}'k	Hb
-SO	Z<e㛟jaOj
-{[<tL(lx[|ج<E|?<4mԵkWoo吏zYf`<   hϞ=J(Ut2	?gf7eB}ԉ#GeF.֬YS^8q3kWJGsą.@gbqV<5hҲŎK-tSF:UiMa5 MZoBXӴ~b/-*|{nٙCa+/'&U[WyZS^^>O
-\P=z4//    JdLVT'xi3*T֋˲xlM|3_k,bxS`,L<U;o`6#ZWW?̷>1?AxDGg,6Α[׼.=k78Y嬏f_m=l:Zט[jq'`5^ڳ"qwOO{t¼y222;   9|pڵ{vG?ͷ{5
-z.iwqydqg(.H[Z%Oi,f(G6ZeiqA,Z\/TM`qJ4?h"JkZKKW85XO-f҉׼Ax{IͷuY͟+nx[lcf6pӶYovh"|j'o73[<_cJ;(ۯ_Ν;7lPkYI&۶mu   4/_>y`_\r8sH\>},m`Fz^~iGC(X<mOY 8]Ǵ>n`~Xv)lGEamV'/=qwŋh
-uH-I\>SP7Wʢ~6`JygbQOϔtn?ݻU*UV{ʕ+wqΜ9HOO7L     p	YYY'OիW*U~N:ׯS?      .ڵkjժZ߬Y9I{      b2RRRj֬٦MS9      (55uǎ˗/OLL|23     4ɔur                                            LnnѣG,X}t*     !C/_e˖B      \͛7CBB*WO>3K,~:     ࢎ;֢E2eʔ.]|ݻw&     p9W\9sf/ ˫TI      7֫Wۻ|򞞞;wZjN9O     
-tĉ޽{?]vTRrJeǎ~YfRK      ˳gϮQF۶my//VRoyyyT     ޶m[ryxxŴgzW^UV|2u     RRR\jաC
-			?|r傃ӣkժզMļ     3[_lllvvv||ض'888''ɓ5k\|     3;wܪUvڕ&LLLӞܬ؀;vd      Y^^^ff[L&pӼ'Wnnڵk)))     // 1]0E;5     H{      ܉4Jy     GţN+bc>n      !1]%E}     <Zbڣh\      xT*L&+^C     TjL&[rB}\=      j     TT*
-%!     p     N     9VkLfkbzr     8	`1Vb#lcs_     p*Af#\      @T	u:uaB;      81&XN{56wm     SMGܦ=      NC&I7VK      W!,;ihud     p(*h4=²c!11=      Cj#W;      8Q.a+W     zZP(Ma     z;Mw     }
-F)FC     T,F)j#̸=      N`0jiő      8!h
-Ebzr     89hjKiOPPi     jJi      8-UL&3o#˵Z]Ĵ+$$     5[L%<*Jٗ=      NżWVGvgf      "5d<      8\[&Ü\      NB~bdfG=ʕ+(      F}rm{<==     zJ2}j-     FP(H4ӓ     zZk='N0J3     jGM     $,f`/$^^^     pRSG"L      ghZmQC8nsr  8/[+GnVl7|ȟ_G	y >
-Bl#ɄRYmOrH{   Ǖ+Wf̘!8qk9e^r͜],.ey-vmdf4g,f]`ysZ^>sug/qϞ=/\{ `A[e>?  T~FVkndoEMq"_5klȐ!M&h ((ɤl_R)JGXYbOOOFi  xrrrZ+;|_$!%z7O,  *JtjEP({,!  x$ӧW^K$(%@%ԯ_?  ܹs|(  r\z
-@GTO{  0|}iժD&zpGj5knݺ7nLlcgdVk3sr  <d͛}ٶc?rT"Ȥ_x<y ΰ<wFjC  ]pm&MZln{f;pZ[+7^:== ̴=   ,//O4id:I9#/3:."5r#8h3*Dʕw|>G P6,h'*lqN.  !---""qƯN'=S3%)YtHnv 3%Nj%:YƊȧݸ-M4YzիW@@ɡViz]:N]Xضӓ  ~~VCygZ᱆Z29g'Kckա{ЧL{/ܜ`Qc3<QqJܑǟ{}~999| $ZrL&,am\  pﲳu:]˖-ʹ7h3ˁK?Qgگq]B33tܨ5|UtD7.w_0A/Z  7|im39mf`  OoU*U:Nܺ`V^O_"PZެxpײ=wt煨C9v1%(&);h-}s{DK	;=";\ޯ_F> PBzZB!4'  @={hb%4m!+',8&9oЈ!4Mq>:4nvd.S|ⵟ|1Q˶ևKTiW'mSΪU Pf`  (M65mڴi~-	iC}oؔ>tI&tZueǞ87zern!Wva5Ȉӧϗ_~Ǉ PXCO.   Κ5AƇg]IVE'v9(|o>
-*w_wИQ9\]{=3re3"HL)MPs˂W:L֯_?:::##O% ѨRm6떃im{   ?|pƍ.`NIK^m?nzڗ:eI69`ttRN.{=iц}Wk"}`;aF?ޟ|Hz)$iL  `׭[״iӖ=糿Jd|O^>Pvn=k$hӐ3&ԩS"/0?w&/REܟ^Z5Q;L6jhٲe .Mr]o]
-|=   1LN3f̋/sfbОY^zoVN_u(;*O}]zuAkENsROak֪C2J;7"ƍ޷|xzե>JHGb   IVVp\@tvkN	WD
-B8nac[nʢ5뎬{eRΘё7?<t}jC7{`LR'5iM>~g5~|j___ry&!  ]ИҥK˖-QFQb	ocQB7{i}WW{=Y/M7@VrJX^yF.#i*lǇ5]̢tL]ӦM۷oo>F K{T*zN')^CO.  P	ŧO?~|F$/IAt`]>LճY{MI]19|gM[R&'"&D>O>xM4.t=ݸ$=   E%kڴiDXg*<PP<),Ş>U޴ÄrOU(WkfM:s׻slf	;=l͛m|d=  %Mzz%K7n~gs^""p?'ΗDRoo}(wm?9~|8ikFi .t6sr d2}jذ[U>{.L6t|jǟ׸y"s)zz!K=|aZjպu߼y  P   駟m۶,Q*K>Kupf-1D;O٤I?? t:脽=  ŋLRN?o.oYH;nN]GNY$EqF>#¿kٲewI# po=  =z;Zj50H=Zu}'LI8i.k8q~w> JLLd  ~222>1?>e-c[¯sW{gz؄<g+I#Wm۶mll,  q{BBBS  \d:w܌3j׮u{oruKRnyCJUỲсtsotN:sΥ x'4  תUaˏ!9pca<{*lV<M8jsFEرcoܸ p\  Eeddԯ_gؚi~*!e?rƴ[GM_0j^=hԌKy[/O)U*չs{ AE  \K~~~JJʠA|||z;+GRF/XsdųcVEkW)aA@L˖-lt] Ni=8FR vڎ;ڷo?"̴(R*U3һ|oKPY/q~' =qoAV+J3V[	;zxxG>qf4he g2˗lٲr#e.Zyԡܖ_VEӠ}W*+Zq"[n;w  \=m3*ʣp9j24r^ ؔW_6Lkސ.̝LZZ.־[?RVҊW,bVJS' H{lQd2RhtjO{-
-Blc~ XmٲϯS+q1\%4z
-O?ӟ\Ǯ}5<[ydu[S.]ڷog]zE i=ܒ(Kڣ녍Jh4j  gΜ7ͿG&sӯ~cлu7imF-UA~eo˗5j?% pGem?rJeq$Q*2nu$p^8 (8ЧO-Z9pnt׻Apϰӗm_^z͡@3	1mڴYv[ nFB^R	
-0ĊǑEj#RKwZ8}O{i piii111Zj4xď~?@P
-Ek<Mˣ<an]FhG*rpgji^yRyIz 󋏏;=+qirmNw/x8ė^PҲM{4i d?{רQv7\_ljBoe;65ߤeDY=JQ+NtoÆ gmfvA.LF93Zwu:RTZ0=E=[ ޿nݚ7o>d74q2/^10PLXf4!O~Y")QMw]93~sٳXnJvzm͇8ZQOM{w}v6]6قyZW'b(K 8^?|Ҟe=iO1vjQJ{B  hV/^:2<Z/ۓMI}5|
-Z7GO*r^xq*Uo+V|XWnl~m
-zGnVT+`~J	߳>ue~e˖'=XHH_|CV\N{?pG:Ǔ%sӯ@{nUφ"Ec7˫=>䓽O
-{ƭ{Ntr6m{ƜCRy_Y}}e5Tn^H(k
-+oIY{@+\ӹsgO9sΝ;$&&:[=b"O:Խ~=[K#ޢA 9sF#|Lx=.Z7wpfѳzI_iss%rgOOʕ+
-)1~APԮ];""ŋ%d2󥏇\S[U\+qh* %Szzzlll֭[jznrAz%9ǀ1wTY{xbW{_i),!5S5j]ցǛ6m*-[ܛ.?Rb!!!.\{pqR9ՅH?+
-^/ (._ظqѣGϨdծUV=aoP923*VX|ygvt<egUP|u{)l8qiΞ=Ƿ! HgʎlH7{O{G;p= Pb]~}:tRʆ$J].쿭wf~Ɛ)/|ɋķ\xoFVRKk+(7=ztݺu'Lp):ԶǑQ.RԹ~U|iF! Ν;pB#G
-ו\\VYt+זSX`ñ/}M7-yxzz1x|tR.uYMÆl:t8+((_Xjyĉ.H<G/޼x@V*f8CHQp L&SFFVAڷo?XU.l*VصOtRΒy
-+5R9oҬ݊W+*	׻NO-[v῝[ECy Exk644ZjݻwrGzr	
-YƗ&4T*gh4bw*tHXP
-k-ǔ|@j P\paܸqUT?~jo+1a˔m3tJԁzK\iC'.esԕˌt(P/X":9a~㨨(ݻ1pH{hT(vf*,*lB{I{< @Im۶_Eׯ_WܮRp7kE0~qC"齵,SO_:r"|kРA2e:v: 0ǫVӧݻsrr%ӓ뮁i^&ZP(ͨT*GJyRh{]	{	+sb@Iw̙3fԪUEiȤ 5#&]&,ئSa9|o9.ɈL.Pna_WٲeG[1Sm˖{P7WWef6m6mt5+=!  ͛77oܵkN:YMhu.D%wNfmWM3_?;*i6чhJe3/,[l5&ya{E+RæO]?7޳{кuk^~Kim{  uԩiӦ	?*ɹDq/֯nbⵟT4Uzo}!|<<<^{[\;jcFJS0Xqtݛw3:+#Jl4Q97;wfiW_`bܾ3W߷wu?O{h  !t۷hЯKXܥ^ǆh~/VocdfoeZ3*TT*m]~9(9c-ժe_F73RsbDJ~nŎms?/38lJġ2V7i}	%Ʋ<x`}߾}7o믿	ؗxiI  pΜ93k֬f͚><p\;s<z6e.3ð)ҩ"g.s'hR:tcKWkyfꋠ_2CXXzդU+'!mKJ> <_X8-݌ϊ
-jKǔZ^y>}N0  𠥦nذǧYf111KopIN<N7`j<<<ڵk۷t+桕b({x9t+z_b4ͰDX),NֵŮS۹?ɂΝ^>a[}TX釥ujW̒7]{d>ޓ&MI=BBBH{+z*w  8.L<QFG{\.)[hjTL*`ԩ\XOKחoX;UX>tݏ$	>ǅ;iOKweё/~g3NQdEe_Q90Z%&9okN{h=|=r N)==}ͯZÆ7mڴl},V
-ڵkk4L#so=|/U?&,GF('{+cefsm,PREҜ׻H:0VfdFڊ̴Huuk{A]_(l];z*_$-.۹uSN#F8rHNN_ iii ҿשSgo8\})b=f&TZã{GI#+ÆR2bƿo˦;|-^4^L/o8m~?OfHωADn,Z8bZ>Q˖Vf޼ykׯpW*Jxoo{PR%&?r ͛7nԩS۶m,Fu:re斋FoPkAK?X0$?+/>x_߫3A=Sz訚IIQ#{+x;mw>G9_]}y7F%˗/oٲenVEŸ===  wرɓ'WVmԨQMqNæǅ__|1**Z*qyl\kWx#.|ƴ}{g]WV~ynoȨo{WFjdWFMʽAokQ=[hDZg>>>>~~~|IZZ߭(isr  GFF\޼y?W'dҟB)rΓl
-ړ}FãW^'ې{c%?yQƗuАqc߸q5H>~9g@'6љ;;ڮRM+ʊ?闤c={f/TV˭ׯ]vmڴYfͥKzE"θ===  wM0QF'NyR&=3\2d{+/zo9Qs;pM}L̘GL2qsTڵ_~[=9+#Fk_(+]%mvn.^<+;%+CUq.]5k~z0nCvgp> \q&M}qyO2{m^>yc]1Zvߢo[m"8]\z³U}-8phpNyiB:ZʲY_իWtr\d_Ijժ}4GX1i3.tꔀ)ʯ?կoIO֫W5j,[24ƝΚ~++Ξ
-ڵu;󳇆|gU%=vܹVZ-:}4߳(!i4?|$ ߏ7_>|c"/F<;6dOdU/B^קӀ֯hקvOx>U!6D%%f<_e.`*5}&Ej?g*]ZؽyQ	gUPlٲ{ӭ~9Uyߨ
-ӯ8v鴩G
-V?Ƀ~<#r}֨Q#4mqZV2jb#t#wFu#;X׿[7ˢE~jƤ\=33; ˗/oذM6ڵkBh}y-M^Ye|ʧӀi~}%lC½+D4=ik3rez0.ƻ4ΉJ6M^$o{)Yeaߧdύ	+XԲPjo>¯uD=Ι$\,,H,Ό^1aӆiY7FCKQe@`YC2`{u`y-jD:^J_yRRR=zhC }yyy?СCk֬);u!XD	˓pǈe#Ậ1_*&Gvةz+CޙePROC4}E\_*U)٨9hjM^U7%vo(ov3E*	x饗
-lРdvK/nX;UX8®]ۈ#6l\6^41`EB2RtDڽsΪ_]w3fw&TdI("KE5K(K$EeR(	5um44մQ"BvpZ&x==ssy|,|Y5QޕWրVݿW^.sݼy7Iodif b{   ORUU=CwjCV?t;v}־[R鬟0qTEJkȠ',Yj9mw9g-mu`:Ƣ2"fwYwg013ځ?q=^g;2\bRO6#Cmۚz߿֞p/VPyj=}=H]e~jX{͛z8֭⮮o߆7/0fo0=   |;::.Y%hb;:t5b峒hoeʁձs+BFN8'p%Xa.XNÉ=R3Gis<BX)\#Ej ֥vb),t>>>oJ7㨤Y\I٠wRxo&arK7EOYI9.Mƞ:JBdgjJ&
-
-y'	Z+ߣm۶-ZhÆ.\hooW00b{`$0=   ꌌyyy9992~BQKf	#_`cM ڋk\_0.iccDz'$
-6Ek*ޞJFRa]pbpCCj\]`j7L|=/#-7C!7m(6t=JR4c߼OQtU%ᡶmT*?<<\XXرcT*b{~f͂??J=   ߿$--|&<1c:M@B{;rKɥ$TbW<]l
-f-!_Gc9h/]=sTf"Vaaa133WFl-BZDZOJ̳Gg͛FRJ_&FcV|&x"''jժGmN.3=   yBQUUUVVJ8[KpIlC禍->}UWnSѦ(MaX:)jҁهGO4>CwRYlL3|4[޹O%,3zf+yFj*(Q9YmR7÷_=~	tQ?,\-jΕK@Vdee555wc`t\큼=   REEE7oپ	0x
-kd!L|oڡM}@g?Lͼ9u*Ǧi}$}tڊz6hw~pOlqIHH'JY]0zk:^wR<C2"7HOsk#oPЁgs
-풑A[ffwﺻ
-`N@l   0t222.]x	d={ԞtS9lw|~^,Ksy]=e=ზ#:XB-,3D˯@_}pARƿ@
-_ [jCPO:bnn~#J%	--sfϞ幮HMSmfEiz{pxP\RVV0];0=o   0ijjv͛EDD~8nX
-e&&&sdlrT[夬o'HiT[&H-f]rӶmU~%|"<%p+ރ%߸K$d_EK[v>ZhNɭ4{Щꦒb5'{y
-͟Z'-fJM/ҡFBϑ_r$%%KJJ:;;po?0Fr   69Z=^'"?	\.&=ks$Чb%+U?qGZoϑ_n9OLWpEUV:lϥ%AJMZcM`x3閾;JN:Qgr.xM:mHWޯ8}*9ztcUKIXW77k}E0HQ{S?\RLL,""ѣG<y=o   0A"iiis{uo0+@~]<yrc['nsrܼvGaϽ;222<8`sr(`$   >2<$!!
-e/hiipYfرFoݹ|R&t71QO 3}>o[NHHhӦM׮]koo50B\o   0ZhnnF}iԣڼy󎽯9>ИTњ!焅[qc׬a9;_qFޔmٲe޼yNNN/_R~89`aFrH.   'ڹ
-WwҤIvvv[H'ͷZ\Gwx.8#\~Vxk?3uT3=   xeAAuUpƌRεnSUUpV::oG-duvё66p/}Phٱch#3̚5(4>   0j)//OIIQRRʂX{(𴠠 NMm즒6~@pJǖL[)wTpHO{Z)DEe-Z?777wwwNh#3H.   |wܱvssu6pFu¦'ƍ}P }q~*v(-fW\C,	xZ4TYK"߽{Sw#   `QVVF .]*''!4pqC'$$PSO,S7f{f{ӝ#7n^\ythە-KFFFqq1|aɓ0=   Fׯ__j_A1Lsol?1k,tcGsaE;68y-2*~|988Ljg:ddd?os=?
-Y  #XSS3+++\+@K:-Qpț<ymmm+Bbqzj9P_Mk^,eܹsrnuSIuY?ehh_	Ё퉍ox{   ~7kk%K8::n{@FIg/^	
-
-":\=9ϟD21ή+ˍn*X5e~)АN    r   {@#?!sw^999YXX444N~PN0ahI9Z~״XFm=W~ϳrvvz*@l03   WBRQxӦM-.w34]=OVZ5eNNNd?jD= ,L;{B?l58roB#B-p86*hw)En޼x[y{`$~z   <}411QFFF]]hdt;|e5lּyvADSK=)&j#++w_XwL=F<tJACIu4gܿWǧզ&x_ٳg̙##   ŋ?rFB~~ux8NSS䉼,蕁USA44iNPV/YY
-ݼH@xh1建JIIWɓ'kjju|N¼=    4---}}ܘX \\\Ȏ{"Y2͎WI4Z&_,鿇q/q>eCBB9R[[o|s\?3g߱   
-mmmϟrqqپr5FbYD_Yp!HII[~*uYYZ*9tKG[߿nƨ+spp	mVeyQQQJJJ˖-|-/H.   Lqqq||H8RNHoKtuu/ok	=1@q5T+7;%`TrWb._^Ii7rոRuŮaaaUUҮ.xo=   c*4fff_ W*<5ŖI@Quފ>:$)xvRGC$l51^V=3S˗+))WVV,o;;;x{   `0^
-PTTܱcƔ;	nsHԷ|L_wOַA~B}7cX|4l/CK3odrVΤ׆_̘7o߻7i}RGI=7-!,{_2Reex=쓝Yd?BqSPDEE=zx`o///x{Y  oH]]ݑ#Gϟɓ'O酵)W+V?䓵 !mw{Sѯ>]/PBJwXFU{Q~dյO:uꔟBss+# }\o   0}||xyygϞmmm}bxxxx~
-^h;2B÷*j2IzO{Ҷah.U9mҾ?;h_1\Mڎ't+o=Omۦ6eff	&;M@Ps-gM5oh1/41V0{+߿Ӷt4Ck59p˟IR? 0 #   `y?~:Ց$#'E$>}Ąu?̧6dB4x{@˖<m\Ϥx 3f+=~_\Gq-$ja`weѻOMMMEE%;;@_ =   F#O>%RRR4?4E$^xq͚5'O633q&pi}Bz_*#(VVqZy9qk++ygsij*?Mjoʼ|SAX'4   _Fqq1LC]ԁC5@#Mxmlll&NwT^[S@+/Iqw{Y/pPh4f?)nnn0gԩf b{   ϥ,//H^^>((&*
-<N,(ɉUKK䉼Vpѽ}UYrYIquUiJJp899@q8~4
-6N$/!!AQQqٲe999%%%= Hab{    :{QSS@t;W7&0͍YSS܎fpPA9bbiYbJrZUA8NQaۑh"gԑǇ򒑑YvC!=@l   0jkkgll,**jǎ4!FJ<<<ٮ\PX]2M]-^k^V~(g89t26ԓ*ߐm6+Kvq>'//wƍ* {{ g?V?J=   xZ[[Wsssqqqb??^		;w.|_ze Ld2sEUTz
-i)y[dm{b<8Tśd555PVV_3@l    ҂(7nTRRrttxbGz:@]U.dffrcBjψw0W}Ub-3Hv\deΝ
-{8su\f3S-!!l\滻KKK[߿nIof o   y\biiaeeuv<ViEDDߕ톼͠7[Lj=Ο:Btj7	#PyYIٔ)S88z$575fy{{ߺu:@f`uVaWW /\`gg'))iiiyQIH$f͚}
-Ƴ=SIs즒LWwn+*HDEXR=yJ6;333	FH<;ezϟOP |##˗'O|q[[4 v?۷l"##f͚_~<|ee	&{zz>~M}(U%ho:sK<`PM6.˳mJ"4rE6npcc#t!A8u///=v)..^v'`4TTT$))iffƄpƃuuuq8z
- >V~UJxY	^[[!*bc[ӇJ_&99U}HS*Uw0-8RME%$$|}}o߾		`po!H.|T*_WTT~kk+ ZZZQ5//>.< q֔CpI&YYYݻS9|ƣ_cypVk*lk+>aD[SNw;n~pBUUՔ߁9sdiox{QGwwwMMͱc쐩(((z{VUUA ~Ϡ yyy]]ݼ`mǏN8Y[o*@xȂy_ HtsY*Q[H̋%CӍg.زeŋ/_~zQ suC\0z?~P?yEEE---8 02Alrr:@{ӧO^}ҤI&&&W~kkqAΤp8QE̫hdX3m7)i0o6d+**޽{'9w?~'OJ+D{a،~-þWwcU@}+
-?Aip\cѶ|j?ábprr>~_?1/#-Uڎhu[[a_L_w_mD	m?0a0l j|d{vb8}·VB_h?Só0_JIOlÇƢ//in`ٳgQMHH$.\~z'4iˏKm#w﷚~'UvWQ,x\<?>>@edd<y
-8qiB,X }
-+oBE#z/`{1˰1'>B+?É12lK;2} V8a3hσ*C	}!66ԏʱ9*@gpV4Zme34*Ti%-ᶡ]n!ŰpGｾ1p>;{{U1<}ϐvOfh^1cƔ)S<y;w y pxŋ}||*BC;>/||lll+UUUڻtL5[e\GwKv@[OuP._>08FVVV.:899Q9}E[mKhJPb{L[2T>}ǰlP9fة;'..Fr$2	+mm@}.}bcж[-C4џBүҎ>}:a3@Z9CU^_7Õb.[{~O\g-׷AV}BpӟUv])Dlll,,,h!,,uD߿ɷ!!ݝui׋'Ji]o@Jw2eJ-VSuU<hjj*''z*
-[ETTt腲#2,XXXeI=m+177VN;leeE oJ=Cle߽hXB+4f6ah%lm~6f({niPǁ{SWHf[=5[_
-Fi}O~pP'mGD|rIII׌iiÇë ~ݻw+WDwd>===PE^^~׮ld聵;U&~މwRץ2A[Ϥ=@LL/..nkkI*++>|tTUUzx)-2mi%h}?sڎ}(J9{d6z{>܀+Xl3Ў6}Ix.b6@OCJl<-
-_D|bhD5ҤCgtxgjGvn<8~ٳg͚ރ!!!/^ 0̔.[?/v<D+RˋsƧw޸`駟{:   Çd2ؘKGG'11ݻMMM> CtSSSiiM69s--wsI TEDϛ7o	U@c7Tw^ggW677C   ;vrAAAׯ_ollx ~Ν;zj			'''ܒ6;5z ..31hXXy`@M^䧤,[LSS311.   0VAǏ[ZZ
-		-]4  07 O8qƅY`@DU8n޼y;v(~/4~ޔIMߏz    *Mw>sLee%̴ tmmmEÇbc<yH\d	vvv篂Aq2Wnn˗   yK< 0ի&&&{myK!!]\䘍ka2Nޔ4ydvv7gA{S& VWkFiq~dd"#      *í[.^xժU0:B!.Z@zv\dR	SWII{֞8q"խ0wf\|SVVv͚5(++      ijj{ҥKx|ud$̫J88L4rttW_b9F 18gmmm7mڴիW_8C@1w8<L;      |+:::ݻ(%%Z
-~3eS(Dwwd}}-$秝B̤mVM$KJ0aBU{f&0^-G500@w33ʕ+=j SGsFɋpyyyYY%      xuu`xdwYZvddB}q;)s=&FOU\XXJ찶.MKB!nقGGC7H"u'O\n֡ks4l\ԪU       _Iqq1WRRRQQ)
-4cOuٳ+vzomĤ8_mѷv
-BIcwdԂrkz{pppL2EUU !J3I{]VJJ0      b^|#///!!S@MM~pINNp[JJuß{GuaG<=_v)p3--[Π~ceeE,@~l;g&R{3&U,?66K0tttܹs'""_~   	Fy&==]CCcѢE^^^~~H̜BJpr{}}K>z~prry{33#y22bSRj 3?߶ٙ-YoJFQl!5:M$M%}0#\4<~
-mYNcIMٷnۣױnfffyy9ܡ|/^PVVr
-4    C^~'))m۶>>DwSRmg`iȐ[NzR?9>}n?kB4QWoM`mo+W211=㡵An?~LLL]`,Sn^=z95mWM7m^:Q9wRʣ+G)_,溜ʹQ҇)>em
-rm1؜8жF\;.{)KKK;;;_|W>YfM2@`0     +ohh(!!xvp/|r*͛u&:9s"(haa2o2]
-6mO۶홙HXJ"qGCBQ`!ȞÇ@ [@x$$$e8|#}ų֖
-<f%E76צ}ͱ_*4ܻO6nn6Tn^CPE6iIHOg[B@oOdUUUyyyd?c>"%%%lG+W޽{n$    TTTXBDDɓII`>E;w*KHMw[gf&oDD
-1ͳ))So!o~0(R\ܹaTF[oKHUh/_U	
-
-"=`2WUOO]x/A攸Mu
-rmS]%6s&֋'_yDT:ЌY|Gm2|\G]i^O:	4ΜBٴrzN \Wk}BBB]]]oNUUU`` ^q    `z&&&"""ǏoyzD L4i"6ֻ]Isvƾ=HH7r5%/lgGR>/ٗ**avTYdǘ۷z{224ddxJ'..NBBӧO߼ytfFo͞5sH,E*yEmH[fb}UJYIluy׏̙p^= "
-خGI^ntw&tpI>h={W|UvwvvN>{Nkk޽{.\Ɔn'~~~ׯ    $NC'NhINKsK` ֯ou˜C7z=f]+Wzaq%6Zu#%ERHVZړazz㳺[[˱a7.'$̻DիM"fdd(((033;88gA[N(?.`10LRy4u"?x(œ~]CA%%Ξa712sQ;R7i&0jCVEtߔ0,>}:0իYYYgΜ9uTggg---..jh%    KTUU;wNRRh޽))ig=~~cH,,,/z#pҔ/>afL	-doMOIldDgEIlϨ'Cm$m\󰃆iNJVTTDIK6Ég*Z$]EF-7{t6vlK$<ݗ8İo<q0wɴ },W3`XڐO1υY0߿B/9...-244<p7o`AAA559s氳GDD$&&ihh?
-     'NC`mL_#GCCd]|2ᶶsf|s?.NDP7Hʋ9'-:}*<~}ǩ.[[ݼ3gXXt~My39hBwĉN\v$gG)S&/翇a.N\\SP=&MY0SKSTYiԩP	;d;W}wywtbt\Zϝ?c֚H?M~殝f`◒1#U:="""Onii̺ikk;|0_0oOLLݻw*++    `:x9WWWiTSS۵kWud$_/=ee&&iih6=XRD{s-*ٸĕ**34٧LSGTSgo0?4ef.Yyժް#hcKKhs՜o߾˗^9tpW].@G3XZ?woCyxzxgsl׻w˿mREioV,eBcTzS3mGEmHX'ʅf=<SN73)~-/4軪q1.%%%--C*.0D?~a~~~;;;|9sL:5..L&/X`ҥgΜZ    Fsxڵ[eeeJCZzxxOTe˔,iޜcL^ť$%5mT!!!>)]Gr=LJ3to&
-EN\rŊqagÙʹA5@8~5k&OT7QA-6ZW} 2@ˮ>+!աrwW717N4ivEiW#t/dbbQ'BlڐsIIICCCAY<yR\\\CCرcmmmNb{>|hii"ͽ@   (WAAGGw~5}iJKO6Ro:*<L[[vInDE͛3ɺ
-
-HjRRnnnȀ;9u~Lt?!aaa=ޞl1AA{oFD k:9sEMMpYYY'OYS;,t9Ѓ,#=p=-a3<~Di7l̄	3f]Asy9sla*B\Sb8tn1YX|:ޖ722F/#{qC˗;w_kjj3g0oO|||GGGkkc,--9    
-ZZZddd"""ʂ:>@##,[Se5^	̙S;Ib"a뽓jd!U,q61yi&d@eyyѼ=KDHjMI9{=^VZ6W]
-!3fǬO<DUhgzՒ\z
-ܫdKTbmE)#mРpIiɦL]@ffiXSYTsFE@7)`FF/񰰰PT C6~$WGG?ǏWWWw-    #"*\xqttti@@Sn}'wUoo?yzedY,۲B߰iv~9?van( kkk]]l&&I&N m!]ŋ7n8{vόᢢQQQeaTd4ܩ-{Ei|b~I&L`>uI4O6}7w>kmChGc%}CњReA\a+AQ=ll֛UL+>j>~+^z85`vvXz:B    ȧɓ'ڪ~~x<عU~!SDD^8٘uiil`RPQ{N??}%['zKH^B:#)'0HGy	A/P}-[f͚ʊIMϗ"Xu@i\w2)|'2bi}psXZNftD<_~vdnÛbv`IX23dAa{###QQQ+WB? o    7[kiizzzmvyy!S(qxtNN-LoSSQQ3/vfdS4^D"7svmm{o`O'b/p!6mct3>W;vxyyn?u%%%CBB=!]_ڴ#d`t_Ɛi MK\[\5Qz 0u4$$[bnm^:o_c(TaYI5vW79yXԐ@AU]O"""ܹkei     0bz9@Xl3gZ6%%111Y6i̴30X$$145jOOz!vv]tiWߐHӦNMqq몠Pxg}ɗ@_=};A[nQ~Gs_EfQU]m0M/xIy(sfI,q-Uu͏vWϣryggQT1g'e(pM-.\קP(%%%C    婨xKr2f̔3sfyo&L8;';ڝ;|g@P%gPQ(t.ٙoLr\26|u,AC+ &pEgt ;*Jާu㈲Xثn*)>f56:33&{{R"H*~Et[#SꬎE	SzrV։	&CLNMq:Y3a?dųDt t>B'5~
-쩩<ydEEy6    F&{177DNMMBIquE6ѕv4q863ׇ
-\DgB?:22!0+Uk̙vvv7Codsaٳij8{u8Ӧ];7x-["ɷPQWڰI)kEEfbΛqͫO{\TΞ\h}2e;[>q7Z-~NPr5mNw}DP`VLq4mYKG>N飂%KA`=    #={]VFFfÆ'NhD.?Z%d2iNV}fd8G۷;6`H;
-eՅ[DOgN)-D7V;f͵9`tj+^>_fBbcԓXh>Ov]'f==klhwd$SZPR$+i)\iAMMog!MI:t)S&N3;D'LBXp#H-ܸ"++USS    c҃YFHHhkq[#$l"ЍJLdܘL3wLdKK'4geч ǟ	z:QkL:nOD"!ìV:K.29_>y5)~㦥z+iiC24hLH[HZ(W}SL-k/EΎjvn{s`.F]6^Ph 3'i2Ֆ&:bUl16<0"Q!Hy96O	o挪\"+##yWWWCVvvv    ۷466644ήj ͖-[F7zHl4;ʥX!%gZD=&mʔ|| c	Iٹse=9i$MMƚ.jCzCuJۤDj+kq5%-'ګBd4h7Ok3	4֤o;CXmCp|1\7n
-
-}vgg'L|=0'    PEDDu5rGddPTxL)qqR0.ӕ,qw}g5&$=zȈYGGgޜʲ\AaS]ծӧOIII133͛70:M    ~,.]VUU544$`p.kEyg3x{;L8};z@3--mӧO<yz9ٸ2jv޽xvvvh`}.|    IIIx<XBoK11S~I0bԬ'	4>B&+++2
-I$R`@{WW+޽{			˖-SQQ	z*Ja\ ݻ_큼=    Chii|m$%%BBBv:F"ucZj*YfBIzJJӹ h$9|;fbbʊ,(::Ջ|A;WMιs猍g͚b
-ŋVޞ/̙3Xl   ᤳ֭[%۷w0>UݰPcUտSR&Nx_ jO>qFtǊ~ќ&9=B*ݹs׬Ysĉ
- 4{_=    0466ߑ򾾾cR$77M&&WbbL7Y[̛3$e0vزeˌ3,XK wuPeeeUUըwvuuA7	͍E'@}hsrH.    P,]TMMYR~~))`fUuR(nq[](.p0 `3`4T}(2.ΝL0A1^FFFEEEgg't +V~w=    noo믿Ҥ1ۻq[c[-dWDĉ{kg\Јj???aaafffnnM6.hVjoʬxdeeN<[2    >y$99YGGgɒ%ǏoNJr<L^,&kHZp||~ϘxkHYʃ͛n3fX[[~)9Fu@dWgݻsuJ\7b{    ;묬,CCE؜={>.lq4(HDx/DDlZXSo?f 7111/pfͲ{^sm ׫:u	\\\ttt_|	q   O֭*,,lJLq[Mw888M?=V̙g3fCFwᱱ^033;{:t@_V]
-@FFfƍ'O,//0/^8x9sr   7۷999666:ŕUp<<zolVlUGFUWWjv}:3ٸvq5d.~\91ڦ}Ϝ9=    yf߾}֭1ckcbZ»	
-#в)Oo'W\	A TTTff333544*}l\G]vʕ+D"֩T*tz{aN.    ZXXHKK y@~֩JKS$&O," PJ޼yߛ;@#HWsRݻXYY'L^Uќ;=e򳲲tuuOf͚K.{R@_1Z{ss~wb{N
-    \kjjN8 ##OPGGw\K 2BqXR629f{{%=lZr7j?t萡ITTTJx>KmM7n		YlfPPЕ+WZ[[aC`+YbECf    2?OSSӹs<=={655M` h%W/WP8~`6K<<n*5&$ BVV6%%,JZΜ9ccc#))ihhH ={=+_o0oax{    k׮ڬYk4 c?ӯ-\yM4%%+x{]]W>^*$':tԔILL,""Y~W+X ЧM)400@Ϻu<XZZ
-=+` o77 t    	U#!!!,,Wܖ6 BBشH)7
-	gf̘jrex{@JIIgϞDV{s֭[IKK^|{R4;ޞy{    `?{E~AeMHI"`@QD@99CfkFvW]kL	uQ$/:gv8stW<T}}YYy._|رFFFqqqX,4t)-M\\|?IJ#s\_"#c2yCS=5C]Pw<==GA.cII%K\}Ԝּ1''g
-
-
-O<axMTRRiNCnn.   JKK_F^ƍG}V+M_5##>2L'oh7B]P70Ǉ4%3j(*pnru}uT7GEeooO^'~ϟE4'zi{fs'   yyy			:::K,9vX
-
-V-\X0x`Юe˴4=%=z
-邺>#,·y5kD@Pӣq[%44t̘1zzzO~^@ˆyf _>WY=    y&^z5..NIIiĈ-:x`ERnAmgf&zx71q1G/qY aZ1>WX1rHr1Κ5Pft邠Fݸ2J6dggϛ7ONNNOO/99ƍx%??N;997@&G2嵐   ব}h4SSSW$%YILߴi˝hn^$<ֻwɷ4G&̴Dˊd>JJJz&
-++=7|]0LCCQF͘1cΝ/^@вBgaaaZ   ?C޸_baaIh4vɜz0{vqjjIZZiz=zXN<wEDDGZgz۷o޽{[ZZn߶f!RŻϟ		144TSS%r}p999eeeAl   @=ڴiySFn^N!a!S;j(*9={T%"0qkHuwiiibbb'Nܼi73 ?Eoqss՝2eիo޼YWWw0YC[mdi  <z(33sJJJ[n}]c2IG.&pptt2WϞZu)nnw9aa8cЏbȅM.~SS5kƗOߋ'?&Egfs7WO<4ha-vMpZ.[Y~;Ncsf4Vs'yA|~ܾyճMO;vΝ;>KQQNMb{   3tÆǏ'A555(|)jU>}+٦e>ffVWXw3ׯ$=IvyxA?32'''gϞ222FFFSN¾	g6њqiy޶+Bں~D79pоCn<xY`&M"o u{aaaUU@_Ydp`L.   |ţG6olllL111OCBX:Kz"/o̧ʣFjjg1llaT}v+++111!EE1chhhh6 g{f[Ⱥ_me=]r1ۖwmk6S*dΈ#HvPRRM.Lׯ4  jkk_xeTVV677g0/#"j4֠.3s7y?e?aZ//j~izLcᒒobDWM^Nn#${i*((L<9""Դ{ݳgOv4g3ܜ
-|e\ϖ[CY|vO[VfǸv5-~gZb6>j~2c@%φ-=Tlzr  +={vaEEE+++um6qfd,\8PLu:2@MM.5uY2SRƩ?X_II8oPU`<200PWW9qDQQKJJ޽{W.ں;.JKgX>=u۷o_zUZZ0V8Q=T$&WAf   |H]]y"yiiiYYYotW@k=N".ɬ03旆~"""EL敄E9		SC8oP'4mĉ:::-:p ib!  Tf('(((??u9Yѓ   _C&	ճ5^(1|oc`P9ˋHIFQQyۛ̉swz5NEjΧ!!WW8p c ]B[[Nfuۃ,   o;vlѢE9(''vfPU1򧟜LLާUedNGG˗_BBV/^lSv$ {Nffq.؁d%..o߾O)  #&&z푔  {ݱcV\y
-N:Cw		:9|2̙mn13@HymY4fLk̿EA].EUC~{1ydMMYfmٲٳgZ  :ix9t萤0zr  +޾}{`V\y)63:Z@@ ݝ3Vbt!~N޽%KODzD)JIVC u8UVVvppرc  :j-	diFl   ~~~N*т:QQBBBۗ/w@G;VTSQ	9|!=АSu11;v1cɓ333<x   ###4>T  x˗cbb&NH*s)OLİ\PXt)y:=:>^M폠 3MMqqqQQvPckK٢.Ef>!aÆjjjSLaXx  %???((M.In   fWWW_t)))IUU4g̘Aю:::l411c<stϞ=Ǉ#0pĠAmĤb:@WI\܁H#BCC`oLÚ  (++n  驫ݻ=PG֮Y3Xr4WWWٳ'y74DPPϰ!C54{UFo/	zX /G~~>Nn<&cǚ\Bf   |E}}}AAڵkmllƌ3s̟=PU~ر/SSyb׳G54ez!{.`2qYU))/&##ؿ#p ";;Vk2Ppb{   +jkk=zz)SM6m֭11l4izᠠχQ:wDDݻw'iKƷdfnl,N vWGGGOO/00?  <#uv  ?֭{
-teiiJ6@DdЀHO&(GrРVQTdd9̌ZDw9zMZډ'ǎdҎx)&  ݞ6<<n  oTUUݹsgƍSN4hΚ5kDG#oA$W<&&fϷan.$$D^z9XTtƭ533Y0xj+WG%--dɒ}zO  Bdeeeggq{0&   >ٳg۶m355:t5|V",,/4*g2)U0쌌ӫ%KO>jȋɜvMqԨW,!Y=HcȈ4ׯ_!  _qrrB}Ȅgsəy   7<y{7nҤIIIIt4(Oo3<UPHtq7Yto[ ic?r;CзcxH*IRUjT
-s  4NB5&   FmmӧOݻpB?~|lllaa!iڠ}[uk׆͟/үpORR))ed
-"oh,-k23YY䥤6j7$j}'b3occ-[=zA  +PRR"&&v̓<==2թ!!!=   O믮111Νe0jիZXȌQSnc#%.!K϶e˺w4qbiCKk۪됨2=[n<~ /MPÿt:'ɉ6;;GXXcr  +lׯ۷x1cƨ/]ٳet:zP.#JWW_Mݧ;~)&##e^zwy(enn.//?y䴴r<>   ##CY=-@el   ϟ<ykĈʡcUJ
-b{v^rѓƍ+op{233.ѣˋICI驨<g29+~̌;OY☘]v͘1CRRRGG`\v  jP;-dn3=   l6Ë/&mCCCSN!bbIH4xGbbzbƌ
-nG()iO?=oJ}*GAT%qqFǇUTT  _i!-g   oߞ?4dLLLtuu=<<ۇ#ԫWٳ}cay!##5t͆4>ݦd%m##q&o")i׮]...yyyxd  w{:ۃ\   6]QQFGG*((=z}BZ|P[Ty:!3\G!Cquע:5U_YYHH@@ cwsɄHxqEEE}}ӧO
-O  Py{KSRRBټ=  o?>00PGGGEEe޼y;w,5j_\Dff{>}::
-/Vb9NЫW:3ӥ!bU0zC-]TCCCMMmѢEG}  Ma:vgv2ݜ#))	   QWWWYYy8))){{;vFj>ffƸCBBܒ~66ݻw3_{aJJ='uUF?~[QQQIIkň o'zBFFƼ111{=   BOZ7Λ6m*E\}`vvW؜95/:cY&=$W_߰0[ܹs:+<&  >0MiL.aaa  WUWW奦N2EWWw?(85u	y36~bWŋbIp{oZQ@U,--Ǎ}"  t'Ǣעb{   C***޽vZGGG555lHRnVZ牉22?)ӳ[nsmEW;vxqMM  Х=  'ܹe4433۸q7HCPQrh-kXXn-,qޠoՁczӐu:~Ԑ       ]w獵[ZZʒN||kתRRڡݻwO[sK		֭qpޠo411>|  !%%%AAAu5nzr  +l6il޼^ZZZ__?>>O[Xl<wRC"yXڵkGellWUU!  !Cnqjۃ1   !;wΚ5K]]4**w*no ߥ[[o\#U&:zÆ3g3fqBB­[\  oguxç>=   ٳp±cǒi\\ܹs0;A?JHF=?  xhuNg;  Լx"''[KKKMMmZ A?*80sL3gμ{  Cӻu릭|=   @+y.%%|2:s#hCu-j]|,Y"+++''b<  q{x;viSiF   IMM˗/srrTUU=<<rss'$aA&Rr#5H+Rq   ߏݍC;N   ٳ#G3FEEjHAUJI!,طoÇ!  =zr!K3   ~̙3AAAꚓS\0@_<  Ttnnn{-..?  |nO[iv{Г   ͛3g΄zxxdggOH@lA?FTO-QbEBBܹswuݺ:<  v{8= Ѕ277x ח={6**X^^a PUJcbbfΜ~WUU   ǎVnzrE)**"w9dNvvv;J\_RBsZޙ,Z9qÆ7o\5iiMMMfaaq[n!-3  #$$ %%%AAA-}e@~ÇWTTԄ	lmm׬YsmJBk.sƍTKKKRk׮  q{z)/ELL3++Xt:=dI *鳽>QONNPRRf0Af2APSb=eX666f333#K.  = ñzJJJ:؎=d7Hۖg&#&&FYR _Q]]}Ν̩S[YY޼y*%mFjQQ6m6m,--WZWYY:  AO. :N)OO/Qr =ׯ__viM2d^rBlA]1$.n׮],Қ0aBxx3g^~
-  n9GNNNAAA
-@kedddՓݵByJ@'=䡶n:GGGeeeK.U$%AP66vΝf"~``KKKl6*|  ifRȠ W=A  ;vp8=(3ErQo۷ooݺvĈzzzQQQ'NJI u!̒l93T  :tr{ZE=z6lGB 82#'yѨ]u{ț!'PVV~;WTTTܿ͚5ӧOWVV[rٳg#
-=OH8l	_߫ŉl.#u7*|uϯ0"CJJB_L<H^444]]]wٳ*T  -giq{cRJdggsouq
-գJt,Xttt|}}I")	y{X,V--2bЯNR4I:~t4s'2r!UT:IG}y{{tww?|5<  1=ӯ q)n-n}!UUUϟ?%7ٳg5~58HkX25yrܔ)3fl?%Knu1BJ""BPWϘ+$.#1}z^ȷFݽ,5zE^lKz{&OHKLN~@Ǎm۶Ǐc.  gԓL;vWm  :q[q'??*4rIV ?@D^^^TlÇѓ{o2nuqY1q(q~}$"CDD9UOoׂ:#UyZaIix׷:=ULW=w7n`v3AON>rr73a*/?Af
-
-0fCդXAьgΜcǎ;wףz  ~жӇv{ZDA+l6y:tK[[[KKkocck4$Ojpp@={4-ݻw'{=zP5'VOZzݬY:wO.D6!ܷoØn7i0v֎Ȣ C@W~}HXZދv^etSSSUUU{{5k<|;  9 _5cL.jysssz3p/1{PPF`|H}}ŋ+**ʺ޽8&Q7QIWٍ67!*(h(#n`da5yrL--ѣz&K:ijةbmlz5xJRR{.,KM\0U*JI鄯oUFF1S~`Syjj6d"+!ttH1ke0	&>455@`   Fpzr}v/ ? uuuo޼9r䈷DG wϟ!ٿɺYNݏ~Mъ,[yQQoN$>~,ٍ^=z,׿Zdr>lJ33K߶REOl<]CNW>>V8G&v-X@f-&$DJ={ bzO8qFFF111W\)--E  'HeNdcn}ӱ&LPRRrttܴi͛7X,|'*)Ø@ҙ3f܍d0n?X5LfyZZYjjuzp?";#+!zƌ7t:V!ߪ}w^h
-IiiԈcߚ_?{9!d[B'=dacc`iiIEJ  @iMf. w9O+=ָCp6\p!<<DUUuڴi6lxG?>tvrEE}jJm3M2[GJ
-dzn
-n%fFҺa@;'$xRF]	KwiLOO)ReT_#Us   F" 4'1Clj0,j;{Y3#nOQQչIVXRd+d QYYydr)**ۓf?n{sUd^7SP1}ɒNq322JnY%/mѢ?/,]:J\ aɓs2n'QѤSwX`"0U]ƍŪUr~;vpvvVVV?~|ttӧс   Eh.93i'43	@sp:I5IsPsruna 8///66vĉjjj,Ν;QU,"⦯vN	!MAA166FGK/&$_@HfFO|߿Iç47R匕:x1wbJĄWedXK^H,s<,?`Z{n777--c.]ȑ#Ϟ=c٨  pӚ,-PTTDp{ hBӝ̹
-
-p823++#Cf09ɒdTdlF?pLMMGeddD/^X7`cR[55QAAKQNJ9c2UxcU2$ʪ <qX]))`ދǏ/|9(HcpP>KnGD|gn CEEɾoQQ{;w
-y=y9P  hn'g۰p{   t]JJJ^Jь'LV&'}0|54EY=vjj;֥ g	aa$,5b--	̓ݻm?iq9ʓ#5p9sr(qqmqb8?ii-"s JJGKaQQ=v榢"//gϞԠ  Мr=   ~TlvEEE~~>Ų'm(CCø29mo'z	_ߎ)NL^JI*YD@Lo30"4>+Goս{BBt{&X~@e`&LUW'Tse&7d!>bEur}S	#;6)FhhzTo>={R#U#		ǎPQQquuݺuݻwQ  hAl   Ç۶msttTVV611<~8b{ZrAaյoj3fPR43k:=zdY		EN681h:hN#ޯi|<,ҐYTP8.&YmR6~aVVKY))I7ѽ;9"	`UHJ"o쁁ǏWQQ3g޽{<y\=   >    RUUUXX~zggg---.hi~}U2K)E~ɓFEu#
-CP19R[Z>Y,5ER[W6,q\Ə"!//4ďZWWJwv'L(OK;=]Cc*$8RL,^gUyb3qDRA͜9sڵ⪯G  9>AF  E!;wl߾Y]]]__ŊHJBlI__j~}LUW?hч墩ȸ2K[2IJvp(j&i??j}zRR\	kݳwԆBn듍{gd<jn Er~F&{\?pZ暴{˖EGG٭^娺  L+G`   ~T?~u竫khh,Z<L=_Yii8dHܔ)w"#;0pUV}FX[Ѫ4TҩNOOwt[5>>22lm>J}ĽoYg,'W4Z]{99}ii+%**Նߟ&&G12:ҥK111FFFIII/_.// \   >'FqqQ7.B]fw1{l999UUUOO'Ot<30&\x2MC#w̜9n(AR4gΙe~qw;xgٖJJB}Pq;=3Bw45y3MJrԤ2IYOEZZk!!'}}^?|ydTL^=z`nb*\<?XTO-?))\ZZ ::̙3Ũ  Al$$$&|oTWWx";;CCCCYYy۶m11|NK)ACB:؇bCV'!Ce$$8"=hN˳Ņ
-6` YBwGc>>Tk|Y II/i4rN'MR2)@Nڥnܒ^J卌ϝ;{D    = |zzzQnnߘ1c.\SC~OϑbbT"у%'wt9sed(cWD}Ӈ,"2l iqqաC=qyM))::bpۻ+tL43"w=2WN-yw`Cx9G+L@p߲e^ddɓ'_|   ZϡC$%%;ŠA2	 uuu%%%ǎҚ?>ijEl쉱**J932{:eԐc9Hkk `KKXZYYZYO7eoo?.Fo (ofv/*; <PF<GWJpB}}Duٵd+դlڴESSsر˗/?}w`   h@p{ ܞW^bppigm߾͛lZYJ,12819lYGW4c99*ܠA{QQ#"ZЭQQn[ZRС/o~g
-
-RNz0AV:QcXNNO&uѨ:::˖-ۿ'OЁ  @@p{ R__Ǐ敲-ɼ}6b{/{RI=P0++*N=k^;t-$D_Zs9(;t81eX/+{xɒ/=B~O]c}ǺA߃LE]]][[}޽>FE  P##o|~c"""/_\F	i(My&=88KNn_ޤk`kٍКkX=c5PQtGVq93S"31E&ӽ&LՐ#?@T먨}+))۷?x    'y{  ..K= pӧOurrr^^^-,_Gy"#!,n`pϯ+yN죋N"|GvNrb0"}<xۤ/߭0""zdY		jFZ?{6q VO믿(**N>}ƍ7oެ@  #n4=p{ f]pN[[[+((_t4p~2WWL8TT#?x*;{QQAy5܎M]FYb\C^e +K攥,FJ#sp-^קOh
-#"dƌOm[mi"@WKS,35َ-BUҪwG]t9s6lp*   '?`v= +W0L333KK˴/"YBΎJC1PHh|F+IJzClqq	4)))>5KczQEJ>T2[]\lmN; "xuopWHi,ΐCT< AXz󋷵04$ǲﵐ11cbnC#[	2)tørSr/66v	򱳳ۼy7>|  @|b{ CuuuaaaRRi|]x=_Mŉ;\]kh0gCR*`fDyy	fZ3sچ	stu0PHhq5yy҄G16%KϞ=yD;5+<{u9(HIR۳!s~` VJȦ)/hܨQ9V,mmj?+(7.Ғ`ܔ)~&&NjCrl+9Rz|y..R<'sHCRi  tۃ,̀@l x̜>}eLL?h:a2ᬣÉ`ı7TTtߟDE4E3lXi%7U{K/+!!?xOAYx['$p_V3ZHH[%W1Oɵ=w""BӇE!ԧ\Oqev˗'%%jii$&&;wQ=   :N=@l xx7X,UTT444#Ncp~nuqqӛ +O#ĸsգ^TT(4/ǏוL9mmDF6\68QAARkr.sZ;kWĶ:0h4r3G=h9^KODEVfdaq JI700**j	
-
-
-gϞ}5*d   #$$\@l ~ƍ.''啛[TTTb!⫉bU1O]<~dFGM5VV>iKkxtn
-nrddLo/Yo\w3,fgؘnoח)l?$r[Qtt[w'K툷7@sYd-Hk띮#"p5 LN~r%0662dnddQ\\L#   : >dxՄ 7YYYSNUPPYt/KvA-@`<eXӦMSTT$Ç?~  @'n jkk<x}vwwwmmm---77QQAPg:5iHȺuM:~y   :*cry{ CMMͽ{~W777555MMEݻ}BY:%-3QqL̎;,XN}^  t:! o޼ٻw/ۣk.4NMmAPGGKK{ᡫ`ݻwz?  t:@p{ S__fܹg///===ww۷ K3Aճo߾e˖M0AWWe׮]&Ua   _Al+Гn <ד'O积///oeez֭ܶu$-ݻw9;;[/  /Dnn. z|W\ԿSS5k\r= H`#Gx{{KIIج]6//f  \AO.= 46|>}zq{{K.U'A,vHHȑ#tիW߾}  = n 	ÇSNXYYiiiM2F]xv]|'BCC̴(Q=   410;Гn y-,,TUUtsjAP[;p޲e			VVVJ!I_y-  n +**._Lfcƌ!M@&t)SH}bjju:T   \p{ 0x`ӧOI('..ԩSՆ֫&-Q@ի544V\ygϞQ2[   _NO.	Ƽ}ʕ+)))ƍ>h\ZӁ29qPy4iZԴ   Tlzr=ϐV؇믌)SHHHHIIy{{<y}Bn[ZSXXi&sssQQQEEE??VWW  Inn.zr= oݺfccc111uuu_$.d΅ 娞ZYh͛͛'%%%))9s}=z>  b{ ,p{ ࡾƍӦM266ۿ?i}LOǝAPQ=۱cǢEtttׯ_rԱ   ۓ  <
-
-Hcmƍsww߶m[aaaa j.T/#"HuA*Ru
-T#2!U
-ޮ  |[= nsJKKݻu萉۷?yY!jN?h[d֬Y֬YSPP;T   ۃ?`v= P___WWwm۶ijjϙ3qyl2===S2̼  =
-qqq[nرMGGGSSyڵSb [l&N?x```UΝ;T   -G駟ГTUU=zh~~~#F033c07nܨLNƝAOT'OCMMMZZz4%%%x  9t  f?xѣ˖-8pMVV˗kҐ CTto2:׿mmUV?ŋ^  mAO.4/p{ ࡶ͛7PVVVTTtttLMMClAձX剉E+Vh4;;;yyyuuu'O}f:  ]=@p{ ?Ch/^;vԩStYF΅ Ryb瓓MF*
-<{V   = ӧOO>5i$ssSNդ!K3ALNN411YbEnnÇ"  ໂ#,, ~ԩS&MRVV622py{ LNuֺuTTT}||<yRYYZ  HJJ|4I޼ysɘSSS999##ÇOH e0oܸYEEEMMm޼y۶m+((@.   !@p{ a^zuXkkk{@zy!oU2""++kcƌИ3gXPP{ԟ   CГ @ Aj;sLjj)SFu@ߊdصkѣf͚_^^   'p{ = PܸqcՖÆZ|޽{cb> L&:z>>>ÇFT  '$$|41OJJIn޽<IKAZ=p+LLLTUU---;s~~~YYY]]jN   ߹ӯ_?=@l ʕ+7ntuu500022Zx;n޼f2A|CTs@qM>=55?,))A	  =IJKKoݺyf777===---ggge3y!TbU&'+W?~}||s^|Y__
-  @Wq{1l6^hiϚ5kΝwޭJIA4;~ѣG[ZZ=z5550  t!={, S]]]PPcǎs****((̜9sڵyyy5iiu,_⇨'N$$$XXXHKKkkk/_>DT  5;W n MRVVVTTuVWW1c(((2:y{ 4ٳguuurrr?~\QQz  @s{Г޹sgϞ=q!%%eaa|D*q+naQ2N';ɽOj R`ݤf   Ѕ ZnO}}=^ARUU9rǇ쒒Ξ=[DU))222f͚rrrQC  nzr=~ f?x 77	3AgQ[[}jiiM:</\FA?RRn޼~֬YcQQ2   "Dlu-lݺu
-
-
-sy2gBE=|<&M4vX;;ǏA?p`ϳЭ[zxxL0a񮮮7nGT  '7Гp{8@ɇKW^:Bmm/N8H.999ܞZ&-:5nAbny&Wi&?67\!U[o.,v?X['oeO֚[CgmM9gtrSў^zܹbmmqƧOVVVb  E9|04=Ps{߾}yHIIm۶͛7AGܞjhh<X[[;,,?t?sƍk׮]ĵE[^Zh,MzZb巼?-l9={
-mעPw?_s?J+/29;xgZqf9ׯ_'/)))!2jԨP%  Ҝ;wy{ \?̘\555䅜`
-(**῱<ɓ+W=ztnHoܹX 4q'wQMp+v]+wgQ%'$vܷgw#W{E}.t5^<2/_>{l===2Lnyuu!  .ѣGI+~;Ԉ93,ƽg]j0GjCfrvg,]8Ɂgg<-ָƧ{s<k5>{<YykXw/&x
-lsQQC^^D/YB&	|#Gis)4Ù={&Eg{&w!ܧ>!%i_M^o`ee%)))""lٲ"8ؠaUU˗O~Çͅ\Ms>vN,;zo6y;Whv;l!rGxlͭ(vogu򭂂4yݻ7߻wbŊ/^2  pAaaat8pt9H|HfOPOR9Z<,[S3{[<;3/'#ϊM},<xjr39qNss:o<K9-/}8<*X@Ϟ=e$$d<"O_qOP|2*GkO9Ž0e{ <6J;\=3s97ۭ}9RBBBPP}urrtF=ʡCM6j(uuuMMM.4tbQ!m:nscBG}<܋Dȷ:::"(((,^ĉ  >}ZLL{%i	+tc8Kr/)g϶xSK%y
-onƛY)g1jW[X{%9rm)I-l}<5yp7>-_K
-		Q43PgrSZ6iwI\6YZŶqlr[{9WM&ѽ;ϥŹ/%R		իGd"22ÇAx뽽-ڻת= ]lUwH[Al.b?o离t&.""b*+	}^ETҖQy9瞜$5;g;sD:MOO;s|Euv\MAlI WeSl5]hyUUiyzBҮwď?xرoСC;Ѹ~ݻw~bbEZl9r$lϼ~ڎ{cX2>>GHiWj=wT-JjG7Rj5H_*IVDG礘S':iɿPiPa>-'w~s+}W78r+]-ZX>y8g߈׼$U)עj8jVA]7Z,?u~NÇ*6Gߞ={N>KiիW/^<}կ-EVTaվVT˯j?(~$ĩaBQØOqˆSKߚm3|re֖7Gkw]v-38qbvv~1y|׻woOoߎQܾuVN$TV[]OpΝ԰jP/:|$î= E+]ExV}50:հSrWQqk'mmyi͗SN??k8kT1?K6BÔ9|$ń᧸gG>͛Νڻw;o߾Ǐ_|?𿴬ңG_>/h#l$xTz*?jkxNbݻ<  0^x1??ԩ~۶m;p?v>}j~Xׯ_?|ii{o7d<)ߜxI\{  ?<{Į]}MOO߸q#ݿ   o.,,LLL|_?pҥ'Oy    lEO<9sɓ'/\coZ  `4Ɂ۷/^x<   L   ;ccc    |bGn       1it:3;wLO	En#$
-(o{'''GFFbͰU7K5E(!6	îW   aHT&''Sht:y|WNL$<Ծb0EG333ioh\S}qMn,   >ٞt:ݾXɄT	iL<I5>>®/Ӳbi )Shѥ<O2
-uBJYڕB    )ݩ4-)ִJ<&IYxUI}9[ۓ lE;ŐBdQ\Tt[   > ϫ%4yùۦW01RTRffٞ1(bV:E)ZUG   R&g]H{U01ҐI7F#Ӳ<fu bZؓ9F#lddĵ   )20)7Ҽ:(e{	k_>f7sťDn   Ƴ=?=ͽ/fz^z۸   !lOBTNxlOskY$0q   fٞin<!>{y<SW}u'eV-+>~ttDh   kٞG4<)SDo3ϟ兪o`_嵼=ԮDʥU@>   `m$ۓ0###333n7ljiLtbV92a[lOj5v<OUq   c#ٞ,9Jb(ܪ'EؖN'err]kq   C%ıΠ!c*Zw\T3+޴վAjcc(޺V    i    E==m   E==n   {Zٞ^?   B|Vyqg|Ν;z                                                                                                                                                                                                                                                                               A
-endstream
-endobj
-9 0 obj
-60735
-endobj
-10 0 obj
-/DeviceRGB
-endobj
-11 0 obj
-<<
-/Filter [ /FlateDecode ]
-/Width 106
-/Height 48
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 12 0 R
->>
-stream
-xWY?sONOwr&,E%-jbE((1q[E@@zonU
-hrf{<|{qW!
-R\A0LF;==] h4ZWWWX,f0\.X#Za(ɒښdx< y[^^v:@z>8
-CQhSt9''>}✜hn~
-676
-{ :MS1́N7~3/qq	/\	X껝FUҊ
-Rrލ]AUߔʆG19r,(c_@
-z/&NJvf6'8.Lo>pW]-Mug:LGrt{<3n{<Y/݂}𡻻?LgӅunH$L&3b'M9:ݷt}>%x7?ύ	w#r{]]<@H:rF]M9b9]LX7]Iȱ֚Y܂6\U9yjHn ,Xc|39J˃|xMϭG_Js
-S/Bv{U?D+*N/N:)LNrrx"N_"p"q9Pqm 4"!A@^ߔ}^(Afk(&*n4es*)'``AKntwc,1 p;GU[i{Zҵ4ƔqnCq1,Kzr*GJ)9J|06x߻U
-QPHÁ`CQ̉0)Ê fd]&A1#}afcoieMֳ[c0"19\nmAQLŻ/ŭǱ~o`Aa\˰]Yb"0?PNg\:~=0C"*]vd0-g'Ԥ1%oƜf2Ui<	=b^><`VVb9W='q凕fNZ]V`h yB|]a\w#0d0{blz޲H56 J?|H!aD]=t!ᏭmO2@T6P(Z|X9i{g ү/pE*gb52cZ0-tqꠕq,knDp(|~$QJZLhb9\IbT*D5۟%8XN(WsYzCmbaoqkZi;cqaҲ"_F!) Ap:h]/KsϞaBju.Xe':vtz+?$kK{>jI8 ìeDlJ84-<k'VN\?EQYPXlfjynZp3= WUwQT~G*gba%y ,)6|*fX{z_3@dZ$[& f~/uooHH5;M+ bjfN $w%J[CLBJXJ@Li#o$l3Hdtt+HRԺᯩa.!WUTߺE_.-0T*7c}],__,\Ul)6V+
-~gT(qЋF7ygYV;L&n(HrwmBcDWy DH!c@0J+pN{C4f$ɿCuۃ\7HdJАj~qK鉴ξ>.Sh_qΪ*!Ye`׸VU9xi0\L6EڮpyA`V,yx5tz
-{4ZUe{w|<}>x/FJ¬Zal{va::}矹n re	f`ٔZO~Tw? 5;wnϟ$SrxMMn@vz*|GlSnvaU_yrh̞>ZЃXj-w,<yb墢O&z̩OgjZ&.cx S\ feX[[Y~9GXW] T?2CۻcP^N)%	3c}ըequfnlyg$>#՜iV㛨\7/ o	55|!EA<=KClhOA\\\atY9
-^YYY
-ťygD.HFcUTO===Y 	c>,\.:K:I5˲9K&P:00dR|#βg0jU|/ߔ`>>>n4Ơ Ñą7#W9/X _
-endstream
-endobj
-12 0 obj
-2582
-endobj
-13 0 obj
-endobj
-14 0 obj
-2582
-endobj
-15 0 obj
-<<
->>
-endobj
-16 0 obj
-2582
-endobj
-17 0 obj
-<<
-/Title (fr-hard-frequency-reuse-scheme)
-/CreationDate (D:20140609020015)
-/ModDate (D:20140609020015)
-/Producer (ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org)
->>
-endobj
-xref
-0 18
-0000000000 65535 f 
-0000000010 00000 n 
-0000000059 00000 n 
-0000000118 00000 n 
-0000000310 00000 n 
-0000000398 00000 n 
-0000000416 00000 n 
-0000000454 00000 n 
-0000000475 00000 n 
-0000061393 00000 n 
-0000061414 00000 n 
-0000061441 00000 n 
-0000064164 00000 n 
-0000064185 00000 n 
-0000064201 00000 n 
-0000064222 00000 n 
-0000064244 00000 n 
-0000064265 00000 n 
-trailer
-<<
-/Size 18
-/Info 17 0 R
-/Root 1 0 R
->>
-startxref
-64463
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.png ns-3.22/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.png
--- ns-3.21/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-hard-frequency-reuse-scheme.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,233 +0,0 @@
-PNG
-
-   IHDR       ي   	pHYs    nu>  
-OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
-!{kּ>H3Q5B.@
-$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
-dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
-b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGwǈg(gwLӋT071oUX**|
-J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!ku5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
-M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
-yg"/6шC\*NH*Mz쑼5y$3,幄'LLݛ:v m2=:1qB!Mggfvˬen/kY-
-BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
-+V<*mOW~&zMk^ʂkU
-}]OX/Yߵa>(xoʿܔĹdff-[nڴVE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-6U#pDy	:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F 	IDATxw|SnEe=PA@h@nUq^;!up*"Efe=JlJGIhno:hQ!M^?x$M>9Iy~%Y            x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^           x      B     U{      
-q     W!     *=      ^EE	    f۽{4iҤPj    @{mݺ5##c׮]&L&    ]/^uVRTT}Z    @<xp۶mBBP(֯_/2 OC   JKKÇT*Rw5k    EX,+W.]400PժT^zIjժ{:J    @[dY)**2dBӧOBB®]/_n6 x    m)))Yd޽{JK.7pC@@Mve) x    Z6mZzR9sfbbBeV;i$`2֮][VVF s    hdZtٳgǎ;e???!$I$g~~~7nt6    @
-wܩO $I
-0aȑ#ϝ;wС* @E	    O?tllرc5,BYeY$)>>oBە 8    ѣ]wݥV5BIu]j) x    R*AAAml,I A%   r6  <q   qN/= i{    3q.N5 c    \ <q     W!   |sV^^ޏ*	    9:Ү`. d=   1vEz S    |ȼyٗ|#n <    Ct:ٜi0CCrrrk7B    !yyyfd2L9997?~q3a!v p=   irv<t #   |]M=$> ɘ   @{ @@w   L&h4Lb37Ŕ= )    d2.i:1sff"55U7.= )    >d21µ8WsΖy5-= )0w   C233YOZZΝ;sss6HKKB! OF   l!DVVVVVV;/l0 <q   [zEmLS t
-=   oic!DNNNu6 #   |N3巚sJӵ G   T!DFFFFF[O^^^JJs涇t <q   Cϟ9333<<<##CzC  <q   Ct:]nnyǙL&$99.     >řƼ<ҥCrrr8 x8   F^wNvZaf p   |HFFFxxY^m OF   K}\s    !YYYŹĥ>$ '#   |^7oΝ;RSSw(e\ Ɉ{    _/^\^^<nZΔ p   4Nt:]k)k    Qf9'''/////-^۸$I$> Ɉ{    b2\)Oz}jjjjjk"),
-B "   |Hyy3i5 d=   1Lt:ݼyڙ8SZ{     l6gddTNמk{X <<   Crss/^\KzxxxJJJff E   Ԭrg̕?bĈsf `.   G9ghBƜd4Fb޼yͯz$Ib dG   N6_o9k    (јlq1E? <q   [sVsxWK;s1} x8   5$55kzH|     C)    >$555---99C){     >$--Cvvv^^ltA;[~s;    -F1==j\Gv$I4 '#   |lNII1&''l4PNNlmF <q   C233YҚvLn pL   !͛6bK/^9wb. @@   $LܜW͚s0O3 x8   
-{c{P    -[sWz     >D!222Zltm֜3eٚ    >95OvvvJJsu<ׅr<d= X   !iii999F1//oĈzc4]#Ҝs\ Ɉ{    rssg͚\jd2-\C x2   8g3q^h0RSS[ǅ |=   /2=<n T    #I=>    suR\:=17Gk t
-=   3)))rrr_r d   \zz3ɮtT  oB   x35ܝ;wt:!DNN%ܦ` d=   7s-uH`. d=   k>+`BLKA{     9tKX˅ p=      ^   ~R3_I-lvb$ x8    
-z LE	    /f0ϟ	jrg#Iᠶ ై{    ocfen=    :=)))m\ ބ    s'>&)''d2L&ׅz>55f6ھJӥ X=    :Fo0llqi0g@s{ӳ= <q   $g\fsJJhBtTF1//Zr~;6k֬+{    FA4gdsQ'555++Kӹ~<o޼+pFczz+2< <S5   6sfѨ钓fsvv#YI233-^iseL&jmz (=    :=sss/^l6۳s^?8k,ᙙ?mNjjŋ/^|= :s   %''v93ƔzlvFK999;w	%, W=    ӡfEqAV:fN[XXX^^l1- >   @{9q9]tcٜn2'9";;ד,-8WL D   ד֡xɹ,`pkr6L&೘   @{9z"ejj31o/}Zܠ]E M{    BzҦ76L팇;ٌ 7=    ι{:`08ə7o^ZU    fsvvv;zC j   ^{.233SRRZ31L)gCPNNS2    zdYn#t/v.&333;;d2xŴ4g~9l6gdd @S=    ~b-Λڵt:]VVNBdgggdd931SZZkYfFٜr]    @{s]T;`0;heffNMII1999999<A D   \~?f2rrr;_EPvvv^^o0\K}97?K)5594; ~Yߩ   x+V<տ{9LB	 ?   1|g    @z! {    t̏IMM b    rʛn*0!$jr4VR \    p!4~n6JN(.gDQ `.    Z]8  {4   eE~ |q     W!   ^^$&i F   ;E {    t$Is9Dv"   ^\!]|gn
- tM    h'`.I2#b!=    :c!v B   z<N   @iBx8    &M.o=    cBp* D   ~zdV OF   ~1uQC{    Õ`. B   $I tq   r OF   XV ډ   @= #   ^"\tT    `. {    ke.JqE* D   \}=,~* A   cs7 yӠ    ډ\W
-!   ^H|     hE	 x0    p8s    >P( x5%    Q  E   c$I.Л%    Qt\fv" h?    =c    >~H`. kJ    \CuC{     x4    `. d=      ^   @{9b+Uy h'      B   }=t #   ^N   @{se+ D   c$I x.    Cw5{    t$[ty`. A   u9 {    t= Ɉ{    3\)!=    :\q!   ^A$s\dY9T<    :zD9Љ'O:t(>>^k4=    :0@R__z_}Ĉv۵^oe=    ؀CVFGG_`3gLJJևL   
-BejЉh4cʲ_l޼?޿jj)S"##!    h`L|1wcH~7$&&\rɒ%W.((8te   @{Bn[P(6e#]ʲr8n\8oz]d(Sӛ$mu5"ݸnm=tU~iz㮫V(
-:xScc+ޙ7vMnwM|kնyܮp8
-Ecq;	w{\7k<+v{*i->M֪;oq^6-[ܽO>.j6nunx֡f-r{M^m-VК^ƞwo
-
-ڻw?ܱc>=zP'$   7|sͷȲCR($I![}gnrKm)7qݬ3_=Wq+B5iϭo^z4=%n-"iBOVZ;v"-h;zh1k}wa+sC+4Ci#sWvߚovʒZ|8Ivtd}G_5n[YsC~Gml6[]]]mmjUT7|s=7|pRot    hరЊ
-FtSoxvz5%-vfD}b4sngÂ5_}_zg$͟kKzF{`-Y+ʦw1yZھIwKv6Ѭyknn5lnkb".ֆZkqGj1r'͟G/UWN'ZSs{	666.[_~III!=    |$I&!![n9E+mn=-F$=#!Wn種íC2У=lqVi:Fе<irk#_5)4Md-~v->s{\-vZ0ggЭ_v@b0b"8w<>_U+kZ7p8qRy!Wk]-ͳ$cxr{94$>ͣ%p5-x8Mo5ݞLRz=vj,...))B$$$<Xx5    ӅJJJ
-EPPP]]j赚782m4]mnZKZli1-54}\<6٪v;gnc֮4?jMmnÎy-&;☦6|Ujcny׼VM_9v`5}5/x?ln`-Fn1Yջ?m<dRTTe˖6?~\;v	#F		q     GX,ׯ_jh>|ɓ'Me\     UUU[nѢE;vX,^{78dȐ@i     x-YϞ=hѢm۶Ǝ7nĉÇtK     ެlƍǏ߿#""f      o&rCCj^8      x%      &=      ^           x          f޽{4iRhh(5 D   N<o~7n5 `.    R__xUV566=zt۶m <q   v9xҥKl6ۺueY2 i{    \\ii_|Rjudd޽{׬YC x     aXV\tҀ VT*{-IҪUp8( x    me9???''hȐ!ZV]v-_l6S% (=    RRRdɒ{qƩT*Ivz7lڴi׮]vB    *պiӦիW+ʙ3g&%%9/WT&M2&iڵeee
- <q   VLK={vرSLBȲP(3yd??7:| A   U;wӧOe%IBL0aȑΝ;tPCCCCC O    Zӿ~:66vرFcI6~B޽{~ {    GwuZh4Bgw,Ĩ(VK C    hR
-
-rP$g#			v x-     
-q   r54Ek x   8X17"2 x2   tK3qfF <q   sF㏹ke. g"   |ȼyT    >Dt:ٜi0CCrrrk7H. p=   3ΟM&di[{\c    !-4\ @@   a!v pL   cz    "d4M&M9b G   ɔ纤̙BT^Δ p=   1L#Fp-\vvg޼yj! O=   tf=iii;wu --Ma4[:) t
-=   Bdeeeee( :   zgOڞ {    =B6~Kw t
-=   tfٹVs_t7pu '#   |Hjj"#####í'///%%9IskC\q     >dɘ333322`06M= )    >D溚wd2LKl!    Oq&>F1//h4:tt:.C0 <q   CF^w;m'; ΋\   5kVvvv+ :/   䤧_B= )    >$++˵8x㜻 {    ͛s¬T}=L    Ez>--ms춯x. d   4Nt:ES=4 '#   |lk:zK6(Iq x2   L&Wr^ȹ5,3 <q   Cc0)O=NΔ p=   1Lt:ݼyڙ Ɉ{    _d6322FcrrrjjNku%I" OB   ]xs).ò)))ޟ8SY
-N% s   Ԭrg̕?bĈ6r`.{ 1   QF1'''''d2F(7o^8SZ{ 6   :N/h\    |hqF?"   |3qjz`pj{ivf G   -vg#I '#   |QR0 <q   CRSSҒ;8fhff d=*//?tFi~מ1ܷ3J%q99 4yyyf9//O^liN0} x<甖ꫯʄsBBBtB%!	IYKdm\(|͚UnZu\vZmc[Zy;/pߕ*$IiwM;hhh(]N[oу ДhLOOo3Bdggfee`" OF~zęꗴZ-5Vv:7$I" Kc6SRRfl6Fg c6sss[ ޯ?/-%x=V{WYrՔ)S222f̘|^'	 άgiiiMxL&SFFFNNN^^^NNNi;; x13% >}|z Η̞=;Ke]~Cx}?~  rrrϟ7oۈ-^xb=n7\ Ɉ{ /ظunn&>'MOe|F=zT8e֬Y׿( 2$LܜWZàZ p=W[pa׮]໲mBB#_q;wٳ<HM 
-{{vdf p^ɓϹk뚱wvs4֝4~ij{ӻw^6lXڛ{O|}{ |s~6Z{ ӏ)Щ<p7g	~Zx{WQ*7ݲtwqǰ{̙{nf^  _-l6gff6k {Ϊ7>|_}Okeȱ-Tr7k	!!nkW鮻$γ3t}_:dbRgϞTTTP ΩySRR+.lmHo )йl}{			;,3f	h6.ɺ)dr!$!D}U|Bv/.{pn@TߑS7}$t:3G^fΜ9۷ooll, "//oĈ))))))ᮬ'--͹>Wg
-m> Ɉ{Nj;W\?/ꫵZw<:IXS;EPZUnkt(T@Z+n<_$מOzA&%PTÆ{nw̙3>hc t4d25gYYYmY x>% <_IIɻ[o󾉌h9{^Z/ۿ}MUuXypdUuBT($PZgGNٻӞM|oK~riBn񯼒zg}vĈj s&>F.4mw=,3[3 x2;vli<g5j>h{JE{$ܡ]=Ֆe҄Qq}ǷEGXoZtUfذa=o_~{hh( f0üy:t-gC \'Z|ɰanꔔ{_6rH/zC$my1ue5~[.ܻ[[m΍HB/0){?sYIi7OEov* h x^{?O_ş7/:v`l-a(+19#z趓WFFwJk]XDsɩnWV1OO׭_Ν;{2 +tm4 '#<ؼy#P1{CoV)6Yik]dP(j%N1~P$p(5~rIt8XRy뭷ʚr~̘1
-ݠ ЉƔ)srrw}= {+6''7ЎۦwyIwe,jRvE(mf!a̤urjB%la0Z[WeCHfcGiUjo[7wd6 ӝY^w육9==]wǇ ||[\,>|8p1\=wf#
-uXk%FVXQzV[G7jmP=^މ%dȮ
-6=6}9s5k: :#5ܝ;wt:!DNNNGa$  ,˚5kvZZjOplʔ)!>8%q~!;d>}Pգ5R@_Q7?pJ{m]$u
-էxPhDT>l&>O%%% :g#"\bo'Z{ S .Y׿&%%쭷?oOTR!17h{C;΅(f%,^#o6|v
-́yYϜ9s̜9s @|Ė`BLKAr d=p<)))F{[n>&}?١5
-M!*eUECPhJhCu	٪ٻeMigP(>!=jyy9eN9t, )l˖-3iii~sf?~|@ ʹN3_+l5aF&rMgʹ*(:Ynݾ쟓fUGXX-2w?oyƍ |` d=ϢW_5ԗ4V(.~oC)T~B72j+kkklY!V!?\Rm棺WN.'Z3r-Sz^~e| SȐqJjIfff  DdY޻w໲Ǝ~ݙ͚5Kt*N݆*MVo$i.=V
-KNI}
-6ua_}ԩSsss) aE  Ob|ofM&M'=\uH [komk߹$$=WVaѫכ7o~n￿gO1Ͽk[{  ?֙3g׿.[,&O/&?\W_yġo\3IL=$2")7cŢG׮]OO<ߟ HNNfVf 5=۱cǣT}=vZ<?~?sW5ؕjP]ˮ{V;|޽WYO޽{x8* ^H. p=@UWW/Zo47%%%ϧ/Wʲ2aoJ-4:n{rss{nIS +a0 x2& :ppsybfGMHH2?#x]zp8nihp4TQDQ(?mԎ?K/>} 	!$Ir8T < ظaÆy]f>΁iӦ1;e[JeX6KRrB-f*<mcmڴi+W, } OF=Ж>g'>^zQZWxΈ	Sm(=s./djz萡]c?oΝ޻wo* ^{ ShϿ뮻&Llݙ͙3k57ԚKOKJҽ5.?_De:ogD;cѢE /;;;%%%##K GUU՚5k^uI=RXo(ONM,_{ttߖ
-o_Tk~}?76m;wn tv,3˻Ld2\&''Ԏޚlk9:.55UL|	x/<6q[RYRrA?xBX^zARiqfXk~aԧ6m^nlzSh tj$fsffffff_9䤧7fff.^`0-hjƬիWSqđ.$ڬuZίo/)>#qOT*ڳgsnڴ顇JHHP*  a6SRRF`0z!hPKOd29BFɔRXXH"٪U~Ү8q^}sYdjUqBnL|͎RETt3f82h/NOO;w_Fe 3b0Wre=YYYMy]<Tg$7oެYrrrfsNNNZZOq|щ'|a7]uUHL[qgL]bOj?ja1.;uFJ2)))*۶>ݳfzg t.5bz^ק233YOZZZVV+|ּyrrryp8k֬f͚Uro/~GOXc}]@kH>dM4-T~HnW}[3lΜ9,hhh2 5fhtf9;;{Ĉ9_^?~e4g͚% <<<33NaH>|ѢE}Qmn?^WYoCasmWMM;y`}X `]}yFe0LQ	M(UϯHJJڲ%7_ܺuO< \M=e0A^^s\
-MZZZg1)))+zl6322rrrv[gk6ϧ vȑ~z	W=Pbb"YO`
-?4kC]{%=^]Qڲs*"#nr
-
-
-y䑅Q da\NJrr`ùl6trL:Fŵ~*UҠjݰakVVV_!tJQYt`.ٳgI}X,%'u>T!Ct֭r֭ӧOիJr8Sγ%ʲHߺ.o~8/wb[O:t7ܦhqkj5zm^wnGS P(={ٳ' J%>lfMgg*;;ד0+++//d2eggLS;gffL&!sB=!,x饗
-~>s
-:ʒ]PtOU\80pd#6),,lĉWo;v6ʠ/'/mfWнq^|s*}?-TUqXGs566T?RmO'''d2]Er.n0Zl222䫤t:]|q$66vРAeee,Qy	!IBR:{I#뫊PKץ	IIe+dKeg9&HBInS?t{^_YYz9sݛ<EZffkMZZg9`08s7pu$fszz'ϒ oBohF|-[^;{\w|:rֈϝ>~hӢF.9de ǹVZ񠠠?߯F!ꃖՖ[nS'O7׾<yܹsgΜ٭[7)s>pE=ΦNd2r.͚ٗ5˙1͛7Y{EGG1b͚5{`dn.?َ%vllhhKϟBj$϶T]򆊳ܬփ5gϞ=GNVRR)^G?Cwyg=|s(pzN;!''C#[kictgQjj*bE^}Ǐ_|ۣo㘸s[kt4֫lrZp<[_m@HقXάb˖-f%rZZگ]3$I<?17wN>KOOݻRxO|wxdNg6?Ųs{^&fJOOw,/h w
-9rN[lY߆zjҹP7\w}9aco7qS9{eq%RĉsxeFկ~Kz#YK|cSN}ꩧ>ZOyd2g{gCPNNsT5^`02e=NÆ8qbLLƍKJJIR_]jBnſƤE:bg
-w}QQNpl۾m+S}>~e_:2Y4zfcȶ~?={l6+ B<PZZ3v͈..3BNGdYׯߦM==lllF2Eyi@Ⱥz1v	E}3Κ7((W'R[[vm[[[{b
-/=}]2mڴA͟?TI$1UN[xk.233/۴(Nҕ	d2ٮ>---33ӹl7o^7yyyً/rFWQrrr;eJtF=N$=z8.k׮Y4Uu-W1QBmP#P_a1tv䩓V:#ݻwj\(HGgϞݥKsN2GeB66Isjj`hX!\~0==9D+336x(''''''?M;Z=@{BCC'NXTTcǎGG-!~gQ_y!0(d7o$۰iN82nS(Uqʒޔ544?{9rd	}k$\ci]]Ԗ{͙3gʔ)j ?uis"s6gL4p1n;x(;;۹fY6Mۻj~Ik;pF}`vdz>sqqq3}7qwQV|?
-/ǻ}vo
-uc}͟nI<\7~u,wo~5Y/G/mט.~ʑoVqJ~Z:7_/111>iBBB[Yb<PUU/<s*U?6L))) ~>LoT*ҧO3gr	Ȳ|A̜zar!;jЁ)xǎ~_Yr8s}V2$į׊VW-[+06~~G}4eʔ \ G/?lذAi[ZZ*:<Og30Yаy<G'LhK!TVQ)/kjnWp8Devai^pz&}4=o>h:%Ŵ?W^9w;~  G?###s9kxX+^FEy뮬/\ϧ}WTLkl޽Nd<?)\'WWˇ/8iq]"I9-%55=K}ӖR?hl)jsNy_mݺ[n?~QQ{жl, pH,IpVIICӣBLFvXDf9rdf|uWTToc*,vz,ϖ]RGϟU$eᐅ$@i7+NҵcLJ|bFxm&}c~/q8b_Tkv ~*}''&&:tRo&Ƥ#nG/yښ7)6lꪫy7c#l-҇};p@eYl\sWMSzN3WB ??Bҙl1]9lwE{)wNii~_?'ܷo;Мk!vWdd+$22='DDDL0a׮]k׮ݳgODXF$ |5yk_tt/g5\NGj7n:ܭ0阩[oﶝyjNBv??B!f-'fޖػ,ڞg\	'	I<x@:q{dÆKKK1b@s6\(Inu"Hp_:jԨnfQ'TPPx/~ӏ[h8!ĊUGBF(~Y-	!CjFi:k455U+V	݋+w5jyrʠ-ڷ7+3?g㡡w}C=e˖F1  YW0o߾VuŊΝc.'a6W\<y7|i7o}c5ґ#\[umVkwo^q%!!a6Xu^n!)?ӍQ83vׇnQޭ/ݐ7{o}Ŋ55u,;ga-ˌS|C{+ju߾}ꪸ.ְ7c9{fٲeޘYSS3|:r'WӣG
-*;_\9h`*z|Ƞ8NyKџ_bBŞ%g	!͒$XᅒkLM||̾jdD^1cHMM]rp^/' Ɉ{C4MRRҠAN8=l&%{{?WI1uT
-p")1V#*үklB ., ,,f
-Yc8a٤(RKh&::4bcU</\~iyy9ϒ${ (ѣG{޽EEE55:Jʪ˖۶m6meH0S#u&p&**$(PYnnB
-R!"#$ɱkm+Www
-!DD߉gklVN"Ν#==oi>b*_p X=-CX,9r$C:r//~|۷[gyfAmCVT|4ZYq244HRl
-]v.*௩[~;?tӁ JBFV$,+%mNw5w=O?5>:u~H|k$.3ک(>!,DӣGѣGoڴoM9rcOb.>YvxyIYvHBREF&H*Zћ]/eI0.a+i#*KJm?qж%z$pM<q`ٽk_s
-
-
-z5o޼kvR_/DJBJ,,IQScj$&h}*,6:BCCjj;dZ)P*vO8[ou֬Y}8t\~
-_S|{s"##4f̘6}sN%pmܸs'T!b{GX[]^_m>{JK4ñB]wB֘^޾log#=c{6T0i<}ffUWW7uvưA5$?HxbQ($a6[Pk=zWS+W	!6޽*BDD!*+k/~ rL\wӿhѢo;8V=T(Ǝ=zϞ='Nؿ5n֏t8s7W81nJ$aeGcCphrxG¢Ɏnۑ"~Qq	T>wdNR`]^G$vn?{l^^ށO	~'{z`t$Y'	!"7m,-m߫gd2ðĄ4WVګF5P2QTTv˴J(8Zhbc-rIiu.:J$]sG?-\055;HJJ8ݞ8S|EDD:O>6mZ~}qqq6MڪuK߫7?FvuFP!74Z-
-v*0V5Z*PXDL!׆EvsmpwoXےFt3y#;v%&g(찗5_{#Cؑ/'g_S[[{>vX~ﴫTTi'ذA-@[^t]m;_]cD$ʪqr|`Mݶ=zCKESY8s<O,Um?B\37֤L<=z4 wd=EJk׮]w]QQѣGǎ]S帇Wؽ~IHx̴tMwn{7-UkzZ(;w=
-rU7xȮߏ}8}tOqRIpŲ,wܽvw)UW8g
-.
-1aQq<WYYiӦSSS3}2n>x	ݶn;:\:D?=p
-fX#!kȈ #GzTZ>u~JU/Ё;i[Y{fϞ}u͞={ԨQT<(>N|4tо}FrQ[W,ؽ~IPXԔ~RW?~~6OmWW>/CMw8vߑk}ZWҨAcJM$ߨ).=:P:}'Bz&TkyۣXTTV:'kz<1]ШՊY3n+B$M)YTJ~ZaXHLu}7`Y[3)u%룯y=WK}yyy|bTh%o޽5͎;bKX,m'w!ĀnrmVMEO^^7-Ulv?m].Hy}#~q]tAc
-evmUB踄xlnҗ}>t?)[,<XM[N	!Q͸uض.U*/
-!޽ԹVCղF#w$EV+9ktі?)H}k^r^>}o/ʠr-	>scX(:\]W_}ݻo~С@[ydY޶ҳ𘄡Bt]yCWn_o!?p+BR(v}BI`sE#'qm{6~!H:޵JW>ZtxWYee7m3fu9$&hfw/w'Or}\*[t!iUa,۰qoYYͮxvBJ!&ta;1 Q|ްr.S⯣y/*{饗{xoh6"\"P|{4Mn݆z]v9Π *ӢE	!,uU_ḻegC#7C۬M~/prT\BW!s2.GâOP}Ol$nVV=Fjy~bMMyy=ڵkקzG#<J;UV5|;F,琋*2^Xt!?39BJ$$)$pﶛ;\rjJU~wz|K/|squ0Th!%/		5jԮ]6mڴiӦɓ~Z38WB8C[F$0r*JϜ!rW]..[{_`HS\4ܺT?^GKUvwƆn}tGu*++?|G~nQf W'=oL"[bRU۶CΟeY.:Q^_Nu٣ƍB1&]jyG^yYYY3"##yBJUhƭiڄy̙u+eiQPhd°	@[c÷߼+g
-T4569Vvxv{]Yq`q͢5gM'5]hL#q4=BaׅEu\Ls^FGylM⼼uo<uTjj?~t-Ne:efpnz%t_
-1Qv?;fZ6yg/^<mڴ7x| =׀J5hР~mذaݺuݦ)J*ܐkoTn[r?}Gq	Q?IHƆ'ګo3fZ*1y/Z;s#5pG]ssw-T(UI#u?,~dך3B#|FС;l5QvHR(&Wl6ѣG׬Yx.]|'ԃ\\h,!'8̽{^sM?]Oc {` Ope";lP͏3f̞=;..O"x8Ѩ9<T`09rСCW]9P*\PhOw۱N8pE*ssm6 (42n|B#bo}>Cٵ©'mVF۽!~W,/>gȸ.=Tkj4~#4RVP17G%yRŔf]|ǯ_eIPRP80ub7k&jt[p. =+,$ᶩb_9}wyY4 Ga6mϞ=ok2bbbZg|iYr:{ƍƙ3g(+4j̙Ҽ5gߟ,}7򲞣QPۿx||׿?R_&QQQ%g^W^,))\8Rڵ`j֭^U]}eYe<lܿkw<y)땛CCGWTTtԩݻ)8W_$MDR;d3gn喴͛7766RxG9 { !IRXX؈#T*F́5|uݺ~k_{c Zlb:uL}{Sjex>jxu'6w9w6444P\q$>"P|{ !<xM&S5`,>O^bW{Yo?t}`;th$9^yyb+-Q-۸=]wW_Y,|BcFjNGbP(ؿɴb
-lq
-aXvڵfOu2Wt[F&'˲VLLv,գ//v[pn||SO=um1W*E@[J 8w]t)//]Yo,fyuk63fLv֟llL4|HM
-	V_
-
-Zheri['ЫGM{l^뮻޺x⺺:se`+^yP|={tƍKLL,++۳gOh,vS'wK]]}ݗNuZtR_oohhll8T!bM:	IQVVg3t]cj*p}޳7|;sm{%%%v;Sn2q~|Ȳ	0 x2u6bĈm۶Ŕ|Τjjko߾n츸gyq2v{ʣGK<qϔTmw2ёI_|vw>q좢"B\C aaa!<<d25XRyyus_uϞ=\sCuQQUVCYPPjEUTT'+lÅTI,aݲŋvm_~B0J5% 
-4iRTT޽{,6)E'cN<W_Lv=f7XX˷
-Ş=EykDEV]P]]ըaC{mߑ_^N݉7Z?w*6{/#G8 _F2dH^f;Μ9ȉ:m۷-{Ɲf<x}ܐ5AO$F}o]HkTTT-嬭?RcKO6o<jԨ{n p4z4XOfKJJVX|M^{oBCzpBuUUM7_am5jin*tBc#;7~kԎ	ckZr_Q\\|w?Û6m1`?}Z~K	ÇlZn:&x_cǎ5g!̙2ɢTr,!XyF3nl|XBEDdSu?b_EEuiim=syRwM^466>>֭[iVOh?% j111v*((ϯ64(0x-䆆;v$СCݻwG}(:4 WU[eY޸w?p~C௎8yVDC1@sƌzH}p\S5s\t_y@ϲg0[XXh4Px˾Y3:4nܸw~G#BC,T.a.ݶmN7l74 z޶=By%1t`__./{~̙lٲrKjs < I׫WEEEFq9d!:xhƍgVf=ÿzn3gT*=nltC-2B4؆[MfԽZm___(wJKKhCW@;޽{v޽`핕LQYYiuypѣݺu{q5d=hj{֩T(XBګ蠠#G[˩T15/Kkϟ뭷<<' e{_
-EBBBCBBmUwxEǿeoOIIk=c ZVUݨѨ{$l!Dhc^['+)SU4)zl_UZJJʫ:}7x| R5**66vȐ!}Q*5e++V=G}ͻ'h4hAQQQ;dp1[,^V`6%%FTiM--:υ_Ϙ1W^p朲 YJ AT0۶m.f*!vhc=ٵ]$}ko=kM`tmBxWקCG-VEpְZ{ni1^&m*HAՖO:e0zSj^h[eecCCCHWϐߞ(8VJUqqZMW_:{W`ku7tǲU,Y[n9sfBBJŁ".~ Nħ8+D
-6lG}t})o֏s?fԋ&)3k{8O.U666&Lp,RrQQ!AApe}սkl#zi5Η>S%qY]ܐ|oow}8p#IRӏ0 RÇ.e;STMcѾ0uzb@⍸.tn|oWܴ;MWӍ](jZ=}vۦŇs
-Milڸ鍻=q->_gzM陸B[R}]v544Htk\W+Ip- FBe]cCv9hU.Ѻslns2{>}`2***,KCCV2hR  qc9_/_\Op!<<p޽WBVVƍlۣ=ZfE-sklB+6ĸ넵q3*up@&K`чhn'O4={$AsͿ x ѣGW\{)pMhz\#ǎi\O?X9YPTUe))ׇk5
-!F#\oo޼ٳھ!~<XhS؈{|á8tT_PmMMM~uFMG9E@ UTTlٲ>nx!RP @PۿW/z_|W_UWW?;4ji~dƩsX,Ȉ Caz*fYY~䩪袢5TGɲdmT={ɓ\sMLLN2h}킚S| BqիW/YSLy/,8XJeju^2O?ݸqju8!^ ;UQ]S`[v#$/kẃc	}Rgׇ?¢$R}Iٜ8|v
-NE_WUU_feeM<9{Ȑ(ZMeɔJelleYu=|ƍvM7T$>w/Κ[
-vZm5BB1!TjDsPsdYT={1<<<,,,**,m("直X|EǏhFCe)Hԭ[_˲{OCCCeՃӧ hQ\\]`;
-VkZpDqhh@pvdp}#ܞϩ;yھe˖nݺ5]h퓈"8P|cq<_dXV^۷o	OL֭=^8^c,ضm_LӅY((-%_O-nBSZSoE75Nca#Z_T[:x4  W^]tٳJQ"8,k>[G'eݺu/>|zpDN-&&RC};v쨨XzF"ˍ]hU˖8 los݀~ݦ7T](--.)#Qi?^UUϷ hϑE qRPHmmM̙swXֿ/o0axٳgW_}oo,)p8xu֢"#Jۻf5sЀQG{k+VVVul5gpڨܶS)nݺEGGkZʂ{3:>4%g~UUUk֬yGΝ+5r|Za
-\~L|sν;v;;oVן9[ҽ{TP!?ٿv]A#JedDH5ySʭ=>Pkfsaaayyy߾}t@epѳ&@)>:^TTbŊ|<󜪪۷׿~窪?|8jԭg03$IX,F*++[p+9@e5ՍUQ~$6[]O!,aB.њFGձ	,G3gϞTm@R__zgyO_}?HfSmmÇyM=q"9A?X,-cԿrTSOJ8{?~s߽n]BVRH{pRѭk=8QSЅO$ʯ>&&&**ߟ{EZ^~}AAݻgΜަK.]h>;ܹ2Dqo;{Vf׮]<jU*5%~g|/w܇Gj~~7_wԅʪH"8Xҭ%%uݻP=_ rmb'Nt]t%mS(h4cǎe/ؼy)Sxk[+quϞ=K,YjUxxo[N֊NZ[;})??k.YfCYǧTWO?w/$ u=Nɲ=G0.1:*<<%|ECDQ^^P(t:1@ۂ?pu)%$)<<nHLL\r%KV^]PPpСӧ0[8o>sJuUQQ[+t:*ߤP(n**R=JZv_~iZԭWkαo(4Jm#tS6FOʫTHSotC9{ġ|qرCՋqQVnX¹ۮ4	ru, qnI5ݸ]Hn7.Z6{7輫ntm]WwQ(nuhB53Moƛ]­;Znm^+:BXNݞ&׍7?Cq=ƴͦWhll\|wަ3⼤=l[{4}\n{3tmz6CZhr{ޟ[|hm/9VoƠ{;v?ޣGo΃ޱc/^+((캺!T$>Տ?_Xfwޘbj펢uyC7   b=B$/=ڳg:	
-
-b\jmhhhhhꫯ6lԴܡYHS~5ݠ"6l,>7Ywye?@555?$	i%I4=unvFukkqή7,߫w׭~nzCst]V-Ci#s*vbNp?<jogB5U<<rmcݻ̙{nSl2'NtiӦ=bfn3g]7+kϜ9nANhih(+"rfsteee޽{ddy6;\}7MOZ<s;l <qx-X
-!\[m\9Ǧ.mbڬipvrs!7YL:\۷Eޙ&)r]LI[5=nwוJ߸%_sR󴢵}.
-
-*++sEֳJ;?7붘i_t-ZLUp^kv$Gk9=i4:oy<j-jll\lY~\CV{pTVV.ZhѢE7p#Gdd$s -&>zZ}֭[J,F nfF+Onv[mIIEZjjj.\ѣGlllPPY.JHFЭ[眢6M@E$=#!Wn種[o΁[-j~;M{]Ý֚8*6ŭ'y>=5k!W˻N|-5CAM_M#Oh-qsvٱ<l1:tnCs]6^qJw{s4yrZYYY\\\RRR]]-HHH<xƋr,)++[|g}vԩI&=VhB޽'N(?߼ys}}}CC[BCH|YP:q޺#µÆ&㋜GGJLLѣ3=.]P(Vk{v:5d1]ԭIĤ6K?o,WKJnMos'->6h~6]X7bIy݆5ZDMnw1Mmƭry
-:sسZ tk6'ͻ"^ŭu=![,-[lذDQF;v	#FGbqtΝ[~}VVֱcǦMFӻwoJű)S3gμn.\}={EGFSY*^nYvm|'R X,ׯ_jh>|ɓ'Met.\زe\XXh0222&>M+pH+;{|,K6EqS$I۷o= xu-Zhǎ%>>k==h[ly뭷
-k/,d=@)gs,Xpȑ߻{7fo|$e]GDD& [ɲ|Em۶-66vܸq'N>|NA{jjj֯_dɒm۶%%%>zTp0
-8:RuZڂ8`G߫G|DcQ:tG٣G.]v=  x%If͚5r><""k\o,,744_O?ݰaC~?%9z+.22r٬NK{wVT>蘤ZA} WWްvVRz  ^,<<np8Z'/aXnk-XmxgkbղE^_={15~jwӧO:tҿOp]d
-?YrM?v#FƲ% IRj|p_W?ɓ'x≏N988ؗj|σ~^^`%>++ko]/	x3璬'zl6=>='  ]\a}Q^^^hhC=tOUUx]C,ם;_տmwl5cۜ?0v;   ӧ5?,Xn7|S[[1J$UViKKK<XYYΚ\  x\16m߾}K,Ylߜ9sVcw͂=xʲ;5JRBo(w8ԲT
-!<_*WƍSNN<VoSǏqXuj+++CCCu:]Ϟ= !e˖}*{lh.]Ӷ{Ca%'N/-[LJM/8a~k#Fi4B?o5"$@7Ic\jm@@,KO:sfKccc=  xVTT/NٸqOձR~hQg'LP9Bz-[97 Le[./o~;もf/ZTp!|{~3>WЄ$IJGҭԩSm/JXԲk,7XUΝ+++Bu=,,  }8ebZϜ9p¥KZ,ɓ'?Dk9l7CuلI;cK9,Ct> uuB!9Z!ԲAjk~'n"}ʔo8Jju=^R޺xbTT׬:l6B~nw(RwBF2
-
-T*U\\\hh//K}޽{4is?g"n?~ɒ%yiiiJJMllG,jFE:TȲbKe?jo*IBƯNW$Z]7,Iܙ6|xBǌ?/?{.]z.X9sl6
-ZmϞ=p{{nVSs}wu[K}[n
-ɹ$IJCʲk{vӠ	
-$ixCwaJn]xFmD=zpDGGGDDtEfFtɓ'|/_~ƍ& {:uڵk.\xٔ$9%$CZsvx)ݕJa(-X0{ʔB%6مHwR*JE8/^ѝw;QǓܒ_aS8t+WAj5BSt>駟߿Z|:sl-;_\m:^zxC%!UGFFGm*$M
-TQQEF	!'OΆ0!=wju`9l抺Ξ?_T~>pȑA	}zhXeYqYFӻw~ދ_xU=m6He ˹s6lG8qꫯ~g'<&_h]Xu1cvbGOG,XU\>!	kllM3,߿]><p`n&%eѢۧ+6L|tr]w>qo֒jk[_sl3W547Tú?1wm	\ߺnBCƓq@BR(7~\v}{kz_rsk$n1]B:c[,_)J%%%*wL܃:xҥKdYV֭8q& <q~z˖-OFyݡCbn ɲ]\kW=j!DZ3f(~juDxph4B,?q¡VԵkM7=۳nJ射7l;4h??;wޝʹ;ZT*,.O>9~_Zz]5K?̘C!JE1dKJk.\i<;O\}Uo}Ks1'i<y8xdb.!Ĩ&N=<tgp8hm=.KJӪ-:|r=C>rkhМ9+wx`.Y9KG~ΦȽ{Y&111(( G!Op,[>;x_{	];9аkjju޽OM,ߖF^^.C0ƁBCl~>!Ĩhntw|J1nܯ?qBD#>\!+]ty8(=O>9xE;n`ZA}~rՖE/g*P-?&_/KZt.,r]AQIvo:xlpjBh7O=Wntը^q^mS*_a(eY(REEݖL}ξȑ⬷œ~9֩[#v GY,+W.]4  @azjժ1c\}N QxSObʕ<ȋ/|N8wy:LS(O<yU{!
-K><nB4
-|yPk!MMMMON+IB -yЯ%IR\^^XU%P=++OVVRs-::QY;w#***>쳿@o~b,;
-4dpzݣzjUIT*EH_Ј֦±XW/*+4+,1/={j7r@C!v9}8}7ib!q6c݆ͷklsL~k	ԨJFR)"#n6LjRXoIvޢ8}teeNKLLӧ?Aߣsrrj%IOHHصkf3U B܃tO>y*++߾?|MEED^g!wv8d!
-ΟWT]-'NKJr(]##4 ???pXBZ-ԵJR%4TRJKÑأ,˧kYk	!IRHH}55iii?[wjvjj(!t}~~pǋ^{c?oƼ2lW2e[-MƁ*HAEuuVݺ8eHAEvJljqc"k<',V\\\[[zh%Kݻ`07NRIԵkn!  `ӦMv
- <q.]EE7|O>ϟ'>++Ҝ*-BtW
-(˥Q:NB\XkktߟPlAjunw8$I2B W{X֢r!DdPPDXXɓ6!Ԓ"(*)(If<&L_lE]Tl6GbsE"\0K[uXaIZޖoMu#m:^gcOlvU'&vv6zਨG~$Vgi	!LK<p0[ez<yK.!!!,vZ6mZzR9sfRRG#*դIdZvmYY A7>:LeŲiӦKu瞻̙UǏsLp??!D~""4ԹNV&VCCذpQᢢ>H-IBАB\_))/!!ʆY$fBT݃vJ-[V\iZ-;SP/$O]_(IҀv.bwEE}L*uư^=#mC%wu͸K;>SU]3j -@di`=IxglؼwF{]{783h<	$r5a [CezJ!AK|ޯyK.UW}<g͛q܅櫟u,H-^q=]Yǵi1},޻}rQRQ$iVWԝ;wt:]RRRFF!f`?͛7oݺI>!izܹ[l;qKKK	!à  ;TO?;w666?詧bcc8SмF:N].F4!BȽ;4M#$vBbU*^)5EQ$?EU(\ 'IZMݞ9LFbwݭ[Ĝ>}~"z}\C/[R)䙒<$*_XX20gjK˗-MX	_h4썺]W}t,~|BJg)Lsw|CNRBDQM\<(In7$8QSSS-[>0qV^Zr]j6,_.3  xPryǏk4W_}1`La$)8N$BQ#nRg׬֭nt:ӟ2$!(j4<Z6zBP9mR0OݹU*G}tP(5*RnN9F+<`[Ap\\V2ןkl.]iɵԔBHѪdg$l0T,f-N=	O	w[ښn\<(S0LfffLL^0qyyyG\\\T*3pQ%+B09 @@oܸ(g}PRp=qN#&56[r=Ek4݁@^O*¬TjU*HqVD"I^v8Rf$IiTW};w_){ޒA<'w;ZZ} 4MVY'xb^zCҽZѰ*B=oSxQk.'f_jwJ۲IƧ]vFML:}`]cS?!DWٖe̛G{<;wYOLLdYL\FFkƲR$IEVoܸq*t {`<]zEW_כb7s>S.1&&M&B@Tf46Yu(PyTN'4E]ljȈ#v$'+q!$bA$Tzśo*O?ի?O=/x/`I24kϖ-M$֐dK::>9pԙs{ZNEg^!<UO?=pjBMS{fѿשOoI`WV|m[
-h7XZZZ@|||jjd/&a^?ARXh4 D=0:A޽'۷/|s+T73L̸8BH`A\>oRoϪo/]Z~bϲB2	ٰhq8U=xx$BH#IR^R!]]TTȑk&$_z׿5!D/E!񙤭O>zwYFzOϟlieE+.L$XCQMS&!dyanve͉-Z8귗ϝor}-q8||t귗˗^YPǴ$)P8y윜шr  Yq|ww{G9?R*f-nMBH][ۖ8%iiյ&&)6@vm!0D E}Μ/fdhJ<EϯZb!$PǗ//əIʺrC`Y6%%]]+TUUݾ}{Ϟ=s_ym\+zuM}g_́+Wkܻy|:MSs]p
-.{qV?=GR<UW]N7.&%	!>wulRMG =ʓ7ouBbcu/>dLd=$Q.7t:5Q2}d  '[DQlhhO~?3gVdddee(HK(Jkk	!V٢ٿ0Vۚ5M}
- %`PV<! %&X$BH(~tԗ֯ӝ!A8yzFbb*eP(222ǲeeeiiiׯ_}A~VAXǟ?'_{u<H^sGȫ2BAG\9'?/[Z/Z&{DBn?،~CxF]!dҼrWX%ICʆW\Ôh  Q;---/_-wbG)`:v力	!JA[[twT"fԢ)@(&RT|3??|9kZKВDtvmX$P׾쮮_W^C3V+㲼$BO=W/Z{kO[~hyB2+5|/'.7knhkwBBtlBKd?"BHދ-Ή.IRGP忞޻ﺼm2	 _0sOj"ƁAfsffZfq8c$G (\@jjj{ܿt󦪩 yLo/wd\_;+](Bbx1)EQMIbrђOa Bx~n'zF +0INN|뭷_ooZUq|&CW¤$Ow<{co+Y 17')?/9.V'_hy<+Wۏam[i(j7YSwVzO&%ܞ`kRVeϷm)݀,<޾80=yS%֬X	!OoiɁouͭ-S'rٵO\sзwߵs}g#IŬus-LSwM.*ںFE-Hxf.  N{\ ߿>hjjя~uCc#$	-I/-\?Ξ]JIb$iʕpBy+!MʛDP:s毞{nS&<n
-~s躂x"^:Looկ~u>y[[,
-iA$l\?iA띿~C7'N=q.2JfE$Ix]]N7(On6k۴0?_O9VB0UBqqu]͓Ge&,ePݭ=wzbgya>~OheԂ	v)Lq#"I"'$%KL4TRWWBZ4;  ''T{{ٳg~W.Z?Z[͔y)o˿T(ݖ-M@\X$P]KKG+>Ve˴zIB/-^5)I(k:d=0,W</s'\ҍ*dhg//|vfwVG(+(J/[^9'rTf)^y\RkODC0pΒ߫ӱX[jJ^-<<2ԔAfm07!d͉w7\1'EQY$fv:	<<Q,IA@O. h?PI}_W7ny^3=܄|/}I)nT(c(7~򓦎{WwtKޓ	JKQScCCTMo|'67ǕJU_pmA>9NE11V*+%	?_
-R)JFI
-x9bYF	o 	C,0C^ߠ$I{$I%i_3<chFCڿ7?
-? F8:?)AzNO:ۚ1>Q@/~_ܾyrMh4Ge8!xwIZu9}+x^Z1L%~{zNR(S	q~P^WDdʉFQX;؀qӇ(O944ޮhӓSSSA@uLF  ~{.?plROOb?A׭h+x>vliJJw
-s:CC-+F9<֭oRf&atmMM_OB<S!0Dip8x]`ZV*h ꒒I D9=yۿ?~<%%pƉr)6vaFgGdY_ 0~NhJňޖ5WDBBT>ҢxMe/_/9W_Z|h"#I!楽.h4*
-^sd6P6 f{f-/OS]]MtYYٷ!QT 9R&d3L!N75!&D$/Ps҅!ӎIq0<Zz~kC4M<x~h/gy> ӄ(W7o.^8%%%55Ycm61 YH?p޽J^כ@Qf%E1ΥZ{{yziF55[έok;zrߟ2F/GLեܾ=&&f߾}}ʜDB! 4
-馦&QZ^3gNShرbΝ}  !U<Occ~xa׻ulšqfAh4vx<JET&SrRRǳqDX-};?1Q+nCC[oky]Z Z$Qےѱ?99yٲeh3fpl߾fZcF'\ԃc8 @4C3K7o=rEQ$ʛukz|Ǜ:<V:QWBR5XAKΝ_>y^D S([p8ۃ`BBB\\\ZZ:@!XUU5r]v  l$<_WWwȑCCC?	P(e<$yfurokhlLOJh4nbDA~[/o0%8	۷owttP!I_Hg {f@ Ҳwl^xa[Z3	Zɠ-7xAk9|89!qF!P/׿nkk7|x0j$IM݋\ODQLII3͢<7; !]v=m pA8#	y>f?,tJ<ܢxܹU(].B]~vϗnD}DR_:;۷uuu555
-7. !/½>egggRRhIHH$	YL!T  {f3g|MMM?Ϸiܡpy$=A_,izWchMNN.^{7ݻw}7]FTѫ`D|zzznnZ@~0FHy#r hgƐ$g߾}/W\_}E?0@a'OK?SYY?歷$QLY6?3rCK,	M4_={Ν;'\.O2} M09Hn?00@tbbd$	o`۷ԄRVVfZG>7;a f{f z{{?;v,''64do2=070q]]͖pOQ,A+_aٳՁ@`%{> )_p8͛"kll,,,O5Ree\cǎEQ ѮwwG?詧yu9|FFFJ#P^J]7&ao[NV9sg?;94<'קx<**??`0T*4SQQ!g=嵵(//'Q.  r$Ir8gΜy/_X^^UX,h'@Q^Q_W$775&.rmevvWooO0MZ÷jkjjyQ|yKZM0qDZ:淵B.S(=`JBݻX'KL}Q	zr D==QG$w};wd2}_b(Rf3!nAhKIquu;yfl0l]콋gzes栭 SuܹsAQ|˯c "
-lnnHLLLIIE0**g=  Dqƍݻw:thΜ9/kCC4ͦq 
-9y		z{k4~pۿrUtwT(@?~*O?rxdy04}I5P677B!VVZ-:UUUh" qO=p~o}*VTq`^InZTh_x<!B0`f[S\V'/eH| *ڻso~Q̛7/!!0p8***FYبO=  3L${ܹ>}ZV+_vi\yw3gg2;^dkB;wcy4Zvݻxxw}X9j84DvMQRLLL 0ʝ;w:aOMMΝ;A%  Qqrs!7nܸSu:%quGde-4!sbbZO?Z]]SGGo(f?V={700~x($ (agdd0`~î]vnfϿNlc#q@ r{`0xڵCԸ+V<v^Ɓ
-Hz?Gӄ>|˵:!asjo_KOG3RLIINSlhh裏!
-5> q<CYݸ4Zb6_~eyN.'BJJJs? @4C<}g۶m>즛77oz`"!Xyr#$IQ$$*/,<wfSof7B_{\/Ԇb^] DByi4XNƁqȉnff>c	݃ >F<2y߾}jii)((WRZ_mi!8&,(M6[z6+{{Ξ%|ί\b_N
-EFFQ|pͽ{:lfd 444p avj >F< ܸq6?Aիv=\9A(J%©F Tq!FS[P30)))_O_߳gg}vI8%XM@.b0ϟo00pcΝ555eee%%%eeeI)I:s D3=ӋÇ;755iޥLR ȑJ]](>sg}GߟT`抋ͼ(7nܸx"+/|^mh#G(IxtuuBjQUUUUU}}/J{  
-۷رc[SSlo/1z!8n7/]R*uw,71_qG!d;0PFa/(~ܹsǎ$),[_lHLx$y	i*X|pSz|ʋ2q~p?G\Ϗ|;mG8£Q>5VGX㿩Q=YL~PHDn#ׯ_yl6۽{ȃ4?h-	 xȑ_/_Z_%$.z(nyc\inq:9zb0d((wu4q\}o/A3_BB/|[n8qw,˰BOJf"/^f?>͞Ȫ&Zը+yЍZGaQ:ҽqoy̰7;lYzuuu lKZjرcǎ555555UUUsq  qrzʕ+/nwRj*Z*y>Ozq\BA)@Ő p4~oi0Z3pE䤤䶶6{{{NdKI97'#'
-6|dĔLoő$>E1344ĲjMJJz`Vkyyyyyᨪ8;v'#IF f{q*鄄ѨyXEC	R*~onV~>!ĠR-<}6'I4nXɓZZzCLxk{{{l6[vvV(Jű
-:e@L(85dĤ	hȄ+JI&^2ܷfeOm"|$#cM=j|p>ȗ>w,I~DPp%F}---G\^^n6fsee}	j @aYVDZ-"0Zhxx$9FSkڸO>8AP|>(
-Z f,Ix{dP]-SO=s͙3'66Vz&]@OxR3&7Lb3md䱷ϣi͛7<p]OMM?nZVXGfBJ{  )&ZvEiZ1yLP`iZ!I+	Mz!5U0	F$I"M|>ߟNQfAy7.duu(****))),,  pj-+++++lc=w9  {<>Nh4 twwA畘ZP$JJ/~ѨPOJr>Ѵ^QsRS	!Z[UfP(τܳG+Wn۶mʕF 0i۷ocf)X=E	 pkt,+';>OV{<*a*pݽ 99F"lNOopB4j5!~`bh4RYS4$ɉo,C.X`۶m6-11 0f]jkkw1  qEQ_V333B@.7tfkPTT)ZM~#h40LE[>44<|QIJKKy+VƢq  عsΝ;+++#_x,t f8FOuҴ(z^<
-!PHR6<^KDIy/=|yw=DQ'CCFR0IfsjBB}s&bE$QZڑ#G̙}8))	# <={SqBonXJKK+**µ?b3 @Th)J1˲EqG$#t
-
-V)	11oݽ{b2B,͂`0`<`>|eΜ97o.**md RVV{A9qܹ3;;p'|N[ hS)FQUFp IM4MtoZus9B3,BȅF'd0<t:?HIywn޼u͛7'&&" r3lݾsΪQ"Wn  y/AK666B!FqUa%eY;g-mhhhh(xrs!aЀna6o޼fՊ>\  l6[q_  f}1u:VU|>a$IB+<ZPW+LEQ_,(}q KV۷gTٝ;.bxNؿ977dÆ\  0v{MMMUUn|f{p/  !z:^Y<B1[,#~s=O?B?8o:!G?j$@.ܿoŋCIIɖ-[rrrP 0|j =6lIsZ D9=SyN'<^q$	 mxC>߀A(roe{Ԓ(
-ELQ$IC>_jZڟ>-&fPbczz<mvwwwjmeYvժU7n\h PZZZSSHYYYIIIYY<Wa`J hgIr[r.ߏ@뚚^OX	T(Ed3-]j3	!jB/ZtbSX!D㸋+VTWWOizٲe6lh4h i5GFQ
-|  ➩'JRttt(
-7C= ǅ5*_9#IaPOW_4a6BN\]̈22PnƃＳg~R6  򒒒9^& @C3j^WTNex8
-/<wE5.(z+==`ȲX!]}}IBQ%vwwΝ+VغuU8  ӧ\pԘffZ咟=  Qqԓ$IEe̙$I
-m|ٳhx>qBXf#p=;y&HQ_z6oB[~KPЌ%8~7.ѣ`駟~ꩧ.] nv}푳qɡ!lc `F@3xGiyF#a:4*
-lۊ	!'\KKt/f$'n/JMEKB4vrh߾u֭Z*.. (--u8?KJJl6r TUUp8G}|8  QqcY0 ~_TJ400M<~3&Ŗx%1V[@ѣݽ?WirE	<E#M\Fɲ /+ш᱒ޏkmkk7oކ/_ x***g׮]U<;w*++k%4M^& @4SORIQZfYEoh(1&&]G.AG[ߊ!IzJr9 B+K_r-q<^b{wΝsn޼yڵ Ѩ"ڵkǎzlY={c}d=  QqcyDQ FyBE@0ir#/Wɯ~_ݒ,%'tzuRRwm?yBH}G{ <V(\99N~h,--ݴiSffNC  <$b_ɋ$Тh  !z t`0(IRbblz1}>09C>_PZ\KQꁁ{o30^BXGA99Zss %1r:GrsΝuyi44 4,"i- @C3CBu<ߪFJ5q啕k
-Xb4#kfX~oPFGL$wpܽ{^zl6oݺ_Z- _roђ  {	&r jQ
-q.KV{atx<ϯ3Mȷ~k+x#ghZV5G>ק'$Bncx,\.eˎ9rERYTTT\\>\  j%ܹs:b- @4C34M|`0P(x`3VHP*m<vU\eSccC{4G)*qhO/Y^xeŋYf޼y: t橬,--g^	?8N.  D?L>-6rT*N$I@@ף}`B| _1F.TQ+&Bϝ3ŜnÇSaÆ-[l4 cQ^^^UUekjj
-V\c=F 臸g4-bj:.Pq{om
-B)bڋiic-$Iz/{m<4#<b$ΣG^rEg}066 _~Yjq$\	!E  !z=GT</I˲("yrB>~wWRb!4D~ۤǎ<_TTTRR ౓G}m6[YY `F@3hd2iZZ\.RU$x;j?/?9 ׋1xAp84
-
-
-JKK׮]  @l6mB! fy$Ih4~_$Zl]]/ZIov^|<!h7x\@绻?HI9|pKKKFFFIIɊ+Q    gQz)8NW> pVD\A+hoXEBH
-c
-o,Cm{{󋊊.]Hp+ gXOe6y|(.& @4ԓky83FP(D|cV()Yv>0t(DQ*l8~Ҏ|;w233}ٵkZVJ& x\v{iiix-YUUݻyEQH ➩'SV5`a<G;Yl4mZ/WX#qdΜc55O=Զm۲P xm߾]zӮ#4o߾jN=  cL=Iqt:Z0B,0i
-2,3{h1
-ϞylDy#gϞmjjJHHؼyuҐ  <^v]õk׮ZL:Q L=!{Q<jQ> 0+|OjW^~z= yMgx"v  MLR)Ih(T ,#P͂Efm޼9???&&~ [6@ cZB!].(i9vO/YΟ?hVXQTT` r׭H9d} hgZ(JAzNcyA 0$ fIK}ŋy_r>%K$$$/ l=B(B: @4CɴEd2i4VX9 ѣEZj۶mk׮MKK# evI MEE+q  !fiOaYVP,+'>4M{ fI8{7.ʕ+@ ??l6+( 0vLTYYYZZsqYgu!T*)b(
-DQDg. `}i~x`^ӹxu-_<55# DͶk׮I<gh[XUU9zIIj-++{е9a|dq8YV|RQqϴ(J$FòG?o, YDQyСCǎkkk+--]zuzzRD Dɍ<>br@֊QvܹcǎIh !A8Nh4`0qBE `
-Bwl9tP9997n,,,D Dn (--\VVf"^SS3񒜩"\U$g۫!fyǎriAӴBP(z^V4|0\ 0sI$IѣG9֖VZZiӦst:4   C
-g=eeewYIIc	VJJJjkkur!ei`0h4\r]qz `&y~``lWzz͛7o޼pBd=  O L
-9)//߳gOd摃yl696D=H呧`
-BJ 0Hx:ud2Xb͚5 og{^~;wF5 cZ4 n嗩{,KEER@3z=EQJ~  "4;>:J***ڰaÒ%K,  q8vl68Bf |u=r*y$j6Ν;KKKϼ²<Ns0tni `Ft9zKx_dɦMrssF#0h" 'J羷0	૫#_ D'>Ϻ<0FkJTUUU{'ja
-U*zYy^V}ྺ;}}(Zt9Fa峼(69E%&NQ5^fދ/e˖/Zu=  O&lO)))lTVVAw.))ܽ{wMMMccceef1;w퍍ᾙfy׮]rQqtj4M'$$FB|(r:4McfE$q	EQTE=>q⃫WZ/~qɒQǁ[[^^lk^2ıNװ>$I|Gj>T>G_bų>[PP xbMp'el
-1)y-yGd$ij(jZRL&.g>ch7
-iQ4mjc4N7bɰX,;=sδXJQƍ˗<T*R9u>G"DAr#MB[~Ǳs$-[l˖-C  <yD.,SUU؈ SN!gن1~Ү]J"ﺲqfyQB3]j5ZJ%˲^D9?vp|wnsI4,T))[rsMe0B\B'$$%#wz>,4E-HLiXA__ioepi`>qS0ebbV̙j͊ž	B]]]{},((ؼysaaaZZ2k 'MOtϊ!4qprRYY)<"b/+++++ڹs'脸g EaYVš!
-8cn|p{/9EQ(biZ$B($(ì3"djͩ:V_/I^Zie#F=|cKOO1&ܸ?s	!!A[)e}ׯb}(lV)pxRx<tX`W^ 	Z	#_Wp_<ꁪJJJ*ᙾ?=V^^^QQ.ަ<q$y^B($)
-U䑏߻|]4ɹII:ew].ׅAcbݘO!IIK}ׯx))FA%chd		11&Z$Qz[==@w/]J2^T	9yoO|O>ijj7o޺u-[D>  0Պ{ WRR"O>!Vc,{.ަIժjaj$I~vKq.ǐ߿֞jhp$qarr^rr^R҂t٨VK	>7]bR7̛gKOWLy"]Cn񢨠))9*""IQ^2ba՝@^t^V(%%`P,/(y<utnl9K28x*koGZ6lظqcvv;  pK0%رc<w}Q{vLLiVՉ!TD[==oܹVf٥ii-_TnnZLZ%I8$BbuE$[F+60,Lyq.BHŲ,==ht߾}O풴4N7IPl/[,A*{frMaJ,ȊgP\~`ѨF?Y}.b__g?jnٲe͚5h"   L*y dB}Cy CSJ|p	qR*PaaDQEd2@(p8pB|e-9IIwCBIgj7o|4E$%Upv{
-)h:7))7)IQ3KX.N,(F}v	!F:h4k5	x͛wd+V! )JFS c6w-\YYYUUU^^nЧQN#gɣ;;vXVy={<|ؘ-46MnO.1=jmi4L&By^BHƝǍ{k߿ۄ%ff֭[ss>(INx|/Jl2%cMm~lS!$V[iD||s3!$`(H6P{Tдen^iJ6rě$I8sOn߾mX6lذaÆ|ш ȯbf={"	xS\6aUUU#<Xkr<TUU%L-y$Ƒ[bZKhg|>BEQ*JfC྆w̙wBg.UEYYgHt}o߮ r6͟TnnAjć[Z	!Y&\w݄kl쒴4F3}#onSt9l֫Tyf+~ÇݺuK/YdժUth  5bc\VVfٶoߎ666E4l26`G*++kjjZVla]F>2ZXGncG9=EEN',Iv8>opp0?<z$]ligO54AAeK-&ïq`ӺO_?-
-<`F8,}I4,,=}n||d穛%hʂi[U/7BjuVllшgQ۷wX-,,ܰaŋ)  f&w3LesرcGN>K`@3]hFTwz<ˏ"걨}ԡ7<mig=$[[ѣnx!z}<7>>Vks8vttyӍIIi11F:tc6BH<33`$|sN8^17:|/ϟ?~(I))%̉3+qT<xeBHAA͛m6[ll,S  0V  ㅸg t111]]](*Jy
-v\D=+[AxnQ4i4ƍև2#vLۂ(YYe˖Zt Ϸw/]
-p!ZGG\uu(R4--?9Y۫:x&/yv$I$IhqCC}͒$)fAb+V74V>g>ҥKիWoܸqҥ1F     n0P(bccf3˲
-eYn7!=ť.^DQ032^VΙ'+!Axnѣ17V(Tq`@$YBjնʃ4[ڕsDYGǹ&BIYn6Ozv0I~힞}}EBAg ;ަKsr^XjE3+,]z-YgYjUrr2 Q  j+JZ-/jZA<z~{ņ~BȜLC/ǏIja׭K\FƁBHд/7;,7)iqjY'AP^2?!aQJJoq--OlhЫT`"Ɠbh:dzk̍Ǟ3k"6\ZϷp⼼8  `_cZ1s3 tC3P4j	!<Ap8hFuϣwi$ʼIìP띝??wvO!dn\\yqòB^2՝NC*hLZmxGn&,==;.NͲv8nޔ;^-NI.yQ+sbco~$I8Ǐ^nի333CJ  r
-$~& DM0}xh4 gazW^ICϣޮm'ͶFśo'UW
-bIp I^^
-!bYB`0Qܸ64D$--`kvypa%&JRYYyZt<>g	 I@\ssNjń\뽹iӁ>ۛU\\jժlF 'bKxr
-US?A!F,z^B
-~J'0iG?#iiBޓܑd9힞Ww"(Z߿ƍ F6b	ϫ14T}VhZS*6Uߺ!9yIIzjMQE-Yдa8Qv{{8zggáR("M$Iyرc'OlkkKNN^rʕ+333uz  L`v(
-d_&q4y>&&eY^B	whd?<~}h~^||lx+$5]io9rGHr}>y|8ޖ1::!&<s쭭fqJʜXa&TehrF4E͝rU](xNgӱw9t5==}ݺu%%%.4p
-    `@3]$IbY6jZV+h4r_	e%IBϣqݻb4aV8	!
-	BА uM2SVge;W{ohW pA4=ݤvIյ:y<Xyi"gbhZxˢn?Nooࠟ8񢈸gvEr]znnذaÆs5>\  <ig;Ɂf"=xD$h4T*QJ%0<{<8Cuϣ\E(QDI< %$5\'Z~\y!4EIR(gf΋|sBHF$--;.NQslS ,''$%
-zzl4$-Mi%FYϬ
-nc߽{l6mڴd2  ,W @4C388Ni4#BzhG@fF$$QIy<7/;|>BȼZU`q{`>\#}}4yiZZNٓtC.BHPh0L_EQ*AϰX(ĢEgyV]|볳Q  >s=  q~
-T*A!(
-QML C!^~BKjr+D:8MZ͝:buB0II_{x'bYRR䉴.SiY6hL71N, 94o^޽W^eY677w͚5T  1)  D-O#QQ{j<'ych\28tN%~t:	,:]^C0S	!zIJ{ɆBN[Tig<7ov9Fd0`9r-ZhÆ6---M8  \'C:B#g1XJŲ,qr.y7EBâ$zz8n+T(-P(A~}C_KJw8ݻԘqz4$VOON8t&/tyiZZٌAgy;UPpȑׯ4W\\dɒD՝  Phx.+P3N ATL&400z$I`C5? 04wBwZbbfսMZ;|J$A~w.r}.yC!R9<e<84E.aLEK4}[~		/$Ey,o9Qg|tڠK1EYY͋pua#{>}8ͶaÆLZ& IŠ =@C3	BjZфB!jVARa"GeD!^w%㩹uk[n6'fey y<32]^[R K64i]Z-!qC>_`}oo0+Ȉ݁7~?!d^BBAjjN9:;	!FziZZjL̃ΐ	[))	zE3!P7:domuBQja?3$?իNs7o^|yJJ
-  xx8 Qq
-4MkZ<!=JȰXsr	8sVOONbL%FK`$Ir|uB&'k">)Q츸}}GU
-'&os8:N{[[]WWǳa޼a;R_/IC#Gܸ		!̓~\S]	E)))11)&A3NVOO}oF(ʴXf+3y޾wbcO>p80^  L; vhgڏGAI䡚?(+Kò*br(IN{CP%JMQ$C!yԥHdTqqqqfVc!CCU/q χ
-ɃC'LV)Ë⁺Ϳ4==dTc-NM~p
-on>(odW_/%1ަ{[Zryf
-秚L3g1'|ɾu֭^:55Y  <<<W 3j<{ BFdL(w T(}>w 0y)4mjPP-??ru2k+qnyALen|?hѰawz;ZҬn]ij;/:;)BiiKQ<p`ТeeN?C~+p[@T&j¨V'K6ΟjӤ槇:h<woooozzeˊϟo0>  T`fA3DQh4tE9NF#?[V6O5he+̱9+!*"CƮ;wyffhG^aDqAbNqᏒB1bYj2[ILi11+23$&Fο*-(KҖgdO$I%7Z7$!7fEUlNb4Y˲g:aj?Xzuqqq^^lF  OĎ`x.(03@{
- <t:0L0t$04tNbbNb~ejXkɭ!?99?9yח/}9	c(*`ؒ%78ñ7#c===)))+W,**18  TAO ̂gzi4Fz(>O?bc> 0%`c[0&&Y  LpuIf\L/IAj(B!IX(JT  #	|߽{WP,Zh111
-b}  ⯞a? <9=ˀEQTLL 4M+J8y`0Yr !qx~B(((X~f3  [\ D?L#ytAQYUT
-iAz^zeY|Ma$Ir'-:s̭[!k׮1Lz  `o`rރZVR)JIzzz(
-Bj Y߿tMӋ-ZfMQQQJJ
- ``Z =H$a(be١P(h b xË>_Xx'Ntwwgdd]feddt:4  Lt' 3{aBF	4M@ |@ Jf;u+W$IpZ*##Cբ  `ZOq	  D==~Uf4KKK!
-
- &v_**:}f[vmqqJ%  U<9L\KPJ0< E	RP z
-ϝ;g{zzV\zꬬ,F#W  <$4`fNSTE}DQ	,ˢ `^oΞ:jժu  <O FM0_<ϻnaB  `B'sֶL&VXXq< GIfTL;FRh4$nI8C L#b9wo{{{lllaaM/^sn  xd3s  gzɁ<*3qݢ(zQ $->[=ÇϞ=%Krss0^  <J(f  z^r#OvA0LjzhhHEAp $g?~Ν;`ÆK.MOOGOr  xvJFwFLqA$yج,<MӮ/G \s,?wލߴi͛-Z  p  Bu(JV4o6;::u~iIP
- CKp8Ν;wׯKTPPiӦ%Kdff*8 <I, @4ÝiJ%( Ez4 $=lٳg_
-l6ے%KRRR  cx.QR3qEL<A2MP(
-844CCC'-:~KnwFFFQQΝk2D  ؿ 3O/@(`y`fI^(`?g<q^7##cŊ6---MT  1
-Ռ*ux.0 yV0`('Bx\ I$s棏9xrss׮][TTg0D  xP PW2Wn,ˊh6)zjZՆB!a5	 Å$I~ϟoiiX,֭[`ALL\!  e(v'pYP3Q(^WR%$$h4#  29y/13sYzUrrrL&3     0A{Ml\			y F0̙3Ϟ̴lEEE,0L    C3A+
-B|<+J $	000p̙'OLE'$$  "( z](j$lDJM	 @SOZϜ9РV-ZjժD<  D>	iT*AaBDQt:(:p'8qyX"???99YѠ   PEQ` n?9QU*EQjZTrr0; Aӹ?+uuu,Yfٲe  yrKЙ  !v T*u:0^qBy4 䃃<w|ދ/Re֭[g233j5    !k&V(DQX,j:
-qRj\#0=Df:麺@ hѢ7t:  D3'mG#{uJ$,kXZ-ח," O;ҥ.\vyyy6-##`0   Oq gQE4111iBcF$$> OԹrӧ],Xz+VXV^V rF  Qqϣ
-j5M4Mx\.W0gTTtСsyތK\rܹ111h"  A_jhЙk	$I
-e`0xDQTy	z[wܹsuww._|f/   ڂ'L;ahz~_t:N0뉢.XQSSsɎɔ_XX88RV  \D!0!y8S*xN'!$
-0뉢zV8qȑ#---qqq+VXfM~~~BB  0 'N`&B(.T*jZPB0rփi,f￶nϜ9s]V[XX~E%%%j4  ̬^$ 3[MP&IPBT*F$IA`0+q\Kv{GGN[t͛.]Ȳ,Z	  fU"Bkkk]]]vvj}R@(0h~?!DSt} n5lz̙Kg϶-]4--  L$	= 0C?.,,|׮]?e{7<HR48Q%I|LYIA~Żw2x%K$&&" 
-'}fe;V__^z)''gQ{j5q^p(J-/
-\(GbȅzY9ZVrMBrW٤aO]w}qyЯ	6?`}#o;[~םSF"MӒ$qzK.9N9ٺubh48< L$9+5 `P*Œ$Nz뭷]VVVuָ8=0y,z<@ vNhdFś6jy	^O"kH4	ftA>8Ytӄ@yw=N0G~|%G \}7~{㞉.&MasߤlD>RBPgg7N<g&%%Y&55D  DN$ f EQ駟^`~{:t^ϟ}c<'
-Rxz{{cbbZZZǲ,0 L2._Gl"*??gh?kJ8Dq>D~~q8˰g_ϓSPFR]z/^?iii8$ zC 9a
-$IG%ț=iw?GD0l1Q2g°/a'<kMa#C"7&rV#OZ"4Αֶ#jsEQkÛ7{*}||qsݑ%wstO358ư7.s'"?b{Dvϑ/y=l{F6D.M[0<Qb(B<En{OOO߶m^z??UWW;ȐWB
-fdzwّW\-OI<@di}VDǔm,&q&L:B(y>>r8([VRR  0l`0㏏?y;7XJEx^F^E.0uX8ưz>lG>wUwdx4DbXˌ|ceӤa)@8}`eaav+qX0N0')ۗF2V-xSUEFlKs'_9$?đFV6D>2GnF"7};֑Qx˗/_v?efdJ{y@2gaۻݗfVUY} BSSE>銪_&ؒ0xBZZ7n|g  `0X%|pq?2od325Kg%VuWJo׊.@&P<,,5*WF}m _2+3)O*2/IƮטd_]]䏚ьܗF~^?Recg؆E<Hƨ"4sG4Gz!JXZĦtA2kEn	*mt+1rDq|InnnNNN*{NՎӛf
-|Jh"><c]NlL);%_|'^_xyj:=Ll0	%0y_|g1L8 @QT\\R7o^x@'v5"	_ #BaרcқQ_ƹr&_sD0j)^3Sc|V4H!2Vnp+~QfDPK3'8^& &by7#
--ᶒ7,#W"'Ex>Cy$r|#|h#eZ۰5\ը6zֆ=wK򱶄RSOEj]vrC듧Q7oŋgz8khhhiia4oA&"H(.)9Ddyƹ3G@$TScGwlOc lS(5))iڵ8 קhh>/
-M<mJac~+6`qgتFMF-5 \aױ+&X3fg\fjGm	nqFn[B5lÆkMYx5FU_휑X#F6lԗa`dRo 7uKEy@ssӧ?$IR^^^qq
-Fqϣxn7quT~~]3qgt&i=9"lcT`0U*     W hhh8vv[lٖ-[6oޜf&<ytdyY;6<>DYU*    r\G}w.^VڵkmVPPf;vh4      'IRgg;sumڴiٲefyn {       `68qDSSS^^޲ebccg̈́cA     0UTT;v} !$AQU*լzd{      fEÎr{      f       x%%% a4        `6A     0˕VUUREQTiii=555p8-/vyv}kE>"۹sgiiΝ;=>WYSS}v"/iXop8Fߚ_~9$EQ6l߾}S^~J-0KH      0cWvv2f9|%XRR"<fgϞ5D*sx^+<PuՇܰBwl64ڱcG[CCCSjkkwލ=
-fT      <f۳gOmm]!r=Kyy`mmmmmDTTT:6vpplʚQn,ɩwf={i%%%t*ra?     :"XVf31Y{CCCbEP-J91ٽ{dgg766憆!qBHuuuF~Gdroz:mX,;vixS#
-vU^^Y0     `kll}#G)//zjjj
-aSzˑ8a3_}_nڱcǨYW^2gd	&b     ˇuDBS<ltdjP&G+	g+++&/lFO.M      xVXqI,]o~49|Q7Aߩ6nyd=0      xfz۷}vܧ=`A     D+++HtFWpB$	=+ʣAWUUo
-=`P      OpaMF;܉4la1	tpSUU%/`@     $*))a***ƯӑÑGEEȅRaIPeegj>q6M*++ypO.샸     	%Up8JKKDnWVVF+=XUUUaaG&')555۷oolllll'Úܫ?H@۷o$QSSSQQ@{~Ƀ7cgYq     jǎr?&ñ}vRXX}a96mݑˍ$v|*++g|b#G9;w,,,X,;w9XJ{`VP      3\2~}̨#"޽,<hdPV5rr2lf2XV9Rۚ૏eeeNa 2D!Y$	       (BHuu|핕V#>      Oy!9`B      O;wbN.0v      <*0      I6Xrr8%%%555V<<<샡       f       0        U        *{        f=        
-       Yq              `VA       0        U        *{        f=        
-       Yq              `VA       0        U        *{        f=        
-       Yq              `VA       0        U        *{        f=        
-       Yq              `VA       0        U        *{        f=        
-       Yq              `VA       0        U        *{        f=        
-       Yq              `VA       0        U        *{        f=        
-       Yq              `VA       0        U        *{        f "P    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.dia ns-3.22/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.dia
--- ns-3.21/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,27 @@
+     }[oIr
+B*d\22a//`g"{4<HfV/KSɪl6UfԄ**{F?ۻ˛@ޜo..?_A/˳|=x]7ǟ~?/wg7n]]~z˟NNY^|:>p{MZӝ\ܞ~v?~Oٟ>߮{.Oۧ2d9Ѭ"_/J?drs>*vxLƳ{ߖU[vm]޽ts{{vyujFwgWQ6:qI د7D*cb3Q<ˋ}8*O2|{jROlпP61.tW~buE<5O>t~0叞vO_pt5WoN/_߯닳ۋ8՗7o&10Sy|}Vi ~xY<$C\޿6rvjUig5|ڑ)E؄c)~.0KcHEzHI]^:RH
+lΑHfQ;[vWͥAxݏcc=[(;o7뉗<gFf.$'a&cwQb>"aFBdό\8j7*{bI1SFR$m uw6;O	$x\x=i.xTx&W T4IfhVљttaN#6)>x3%G9I-~2a[F`'`Sq׆QQ&$h"MQ9{K۬ntPjo۰cfsKFk~Jo+}0ɑnLLw@s=DmJł:.v4#SnIr{Vo1YP͉+DEIm)Q&5OFi^@Ü#(uJH=ɬ OSH#bBEEun1=4R}	cҰxcVT rb
+'NxS]4sP|>-='4C_o?{B-C]>vO~=xy7]|\~oo}}?bNy>Q:6apviή.?\\&oG.q=Sx|{jbTE1T!.Ȝ54pY}Qa}>H1GqbiH!ӿx'ѩcL΃E3Й	.fh>MG%H=~ؚJO" &WTOO_o~FNH,~noo_=faT[?.$(|P~+;"8DTRۘt;88b8bP'@%zW#:v-PSN$h%liVߝ^?կ-df3}%0O~<aF'o	]XvCh{ENKxSh9y)8r:jÅDDj!wA*v<!4{fPGb	;;V,<ռq߼_BڗR?|qN.q7j&|Ve) 9&b88ۗ҃}^\l69+'(%"YmTb>qbqzBMsu,~L_(s4XTV儇BH,Ր앳dQ`AHHEUw)<8`j-p#e;e*.(]P7JCcsz[NT-4ZًTDdA
+H2gEgOs,,9U12C>.|(\0`B{rfONTBԧ_
+mY>Ͽ,+*ԹBIq5QK+T\GpVBxFogz-ӿ~__oÞzi`qNhjH|:ө%b.i!m\KN-B0"J|sDWgLw<6T7n{m7g.h{b'oޔ3VLMxtd7p?ocXzyu53xDˋqcWSWD9tEa9t0<30|Ĉ׌ȟO4YaZCė~ë:qujB!F%nHl#>O1}/V=ĥ<qbGt#j2JYc :WR8]Ӡ&.`	Ә̣kQ\ 1YƗ%_J/1y4Bbyd#1%|gzQCĥzP_c`ys^)tG߾/e%%o]=Og{?'E#|=g=-;MCwDs¯b@(bqW MéCT[8APH]]v}Gtu
+9*oIU-fK_w?.gw[ lbFIs\Qq\O"TsS& G-hS%1LWotBTn	9ܾ+v_=Y[_*Y's?pba,290Y,1 FVёui99,i)_1Y,1 522gpp+p+D
+7!b
+!-PrcpJH7gs AikǰoU\GxbDLbt+4+ԧ(ɡ,i1NڸXcNVcX+:Ty'vjG"&.5Y֣U:BĮHiuy9vZ-uU\,KL溧̓MV:0gД˷*)x]?w[4 i{J4={j$YUFR|*fRfc/X.mTT~<+RYʧ4TĹ+c0Df]H`A=v-LMv9S*}0n!!n.϶mUDuTGC{Eeܼ+uA:Z!勲R
+CT,n#i P6>$*yQW5#܉4u@}k/ǻbR'R4.J9$3Pi:x}MĎ@#>DNElLIh/Pg^;	)AZn~{ݞS:oSL4yB:BڣZXw<5,Del@ƞc_7#ϞQF=%PȤQRPRrQB,ˆ047JY1Eg-h1sӤnSOtH^H~BJ9hKiRQ	ᒘ@@Y' 8y3񙤺dX3e}!H3J˹CmN9邩һ
+~,̬'r¹pY]]r׬2szpY㜋!{[hb+Mׅ|BOBB_rxtոA:<̶+q1fl&s^b"WzG1dϖnz(hBWٝl@1"ÐAwfWZmių(:q|]8W}ԷB
+zdْAdf^n@(x2=g&s%Mg*a~MNSH%#'@[)Ƚ+t(2yN=EU:s鋒jE&YX&!1HE8]^PC+Eإ;f-TQ䘺BE鎉P:hyN6{h2cMH@.bH?\C%Mykl(w!ϤD[i.H*^C4Y+iy5leԟ$MJd%QtG!H^M2UJVA8|A	 i,*ؓd.矞7Fԕ,hGX{obos9<DՊcUߢ'yg1kO,xP(Ք\Ǆ"P+ Ro	;nH>eڋef̽1Yx	1D-DVBxK"M W
+DOqЮG4 s?DL,yD/""ڨjiD*"kF|EQڵQdH>,bcB$"GWF5lg3BdH~0L~8TSW_)/plB]-櫉^ѧYjH^L̓z?J%*(z4ď+ͽVR1VuHJI"% ) qn@v_K0t8- y?r^ǌd}(;eQhɂG"@d8h%)H.+I	'e7^C:G	<P(*p,w;Lwzx}ۛ)S*w:9dzj`(3IR1Jg̏]N55OB`p`&vY ?HP7)W%'+z*t-@Lc<#Si(JuY6$쏙=:dA$`
+y] M{,<؃6퍰3|T-ꗩrJ5s~Ea,a\`Wmy]7;5  csc֦avTKHV.lH}9Hc=/&Fiq8
+>nL*׏̣d^F7*C䠳{r`TũeenӋ/tBb΀̽9	Oqs?&DA!Rk jZÐ-x@U]Q:݁&Y`HLb;^UHk)pnՅkҡqk~C#tK MtHa$;-Rg)瘂SPN5?_sFc
+Cg).(AݎX)kM*<XI(]wN')2vJɊ8M+OVX0x|BZkРlM )`E,{5ZdD$ߤ)-Z@aaDiw;*c
+|8O"ȤkԥݼMA^bӞΝGg88+"NDZe xˍDc?IS|4%6K
+6KEEZyE^ř!+d_I+w1-\LX4مNdlhy̽ĢUYC+L42+We_D[ǉ]cl-^`b@~ZPUtuXɋ+r*5I<YM!4m$698'4yH~bȁ}\EX *S\t&9.q-4|6.&5IR=(ؕZ=Mbz56ygeE*O˒GT/\%Ȑ4|	+
+d5ʘK9)l X@eTm";ysp--đ_8.C)G!wjY > r/q|Rc!"oP)@w994qАȽ/}CF"AVr"Β
+H@QF9wpx:3f]!1>;d=jLt#]#o:|YT$0veK5d-jZs9qthS_+C#j~@ fH\8-/dҽΤIDa!fͫ{iM0:e[YkuZ	:ݵKqU%F'iC2_X d4jⒸ,ޤ|?.(f=!+%DȡVID6el	JaOYise,{ۉމ@2-Hsp:e}rVTm;nYȎzĚ@pH~v#2*j[׀xJ`h0Z. 	-~,!DlZ?8 pU) C{1:	jy*xLGBh0ԉ&u,FTd1Ai{+>as<[Ь`b1%тlbՎXCR&nI:/n2fnlHd'u631j;IHЬ{5$ڱ޴uXqϜ9"Y)EE.7B}d8eauvt<7D'D]h1 yR5Vukdgq֦ZyCH)|z4+4T342j`L󤋶G~0ߍ7?d	ZVdՍܑ.4Y1~ά2/S$䘚4XÑĔl;NqvZ7^@	Gx+j?3FR?ݡ_hޱbZ#~mMMP(̓0Q!FmB@;\95_T(SN=/<$)8/[p59MKb~BP2[#/z9@ӂ~o^EkG"tQvmYbӕ!L:l:f
+
+J<o/:$ĝVyVt׊hB!9L2ժX.P6"t>i.Dd_IiZR2;8]:?>N%%Թor:<*v5sm;W͉n]4DyY4uH~Ҵ+7(D.Dׂ]C%5Fi=.uN"Rc6gy@^ZHJMcAf1d	!z45FBт/aRe5OJd'.s2ztG&DYYC^{j"E`EhFm88W=9	y?zgc}AZx(Z-@Q(IѠfː̽(QF]Wd,J(J()S&@~<VdL
+$C"x	JƂkuD
+iU<ci^:v5!DM|_#>T?"#rFqJlúZv+YJ2 r?F8퓋Fb$#՚Vo$O-0ڥ.]tk6o0 r?F<)6+DikFz*4r4<yq: r4+!âkT֠m=c^,w\	BuHN =z% HuRBVj7y^%\EtP2$@Tr 9T*,sV;(cq)㊻n @e858r@^}`w
+bѽTu|>5"A\<
+/<+(77h%r.j;1:<BA\x'<	TjQ=xiYC=*<c:kӖJQULl%;&|q1l\-b4m!V-qh2>ǐLhVyXـc+aqnChB	)\<VC2/(Mv~pUi,KaPx!RЀ2cls@˥C6}GlSj]kS@!E]Ƕv'XDiaםS#d,LkPI9Ea4;; r? &.&}m5Ẓjst7je| <0\f]uZV'^,Bm)H<܇p<exDpH=#Nk~L;d<`'u⭨6GNqDm /@3tqm7Y|>(c,2䍄QX4:fm@8_w8K׺d*Ĉ o
+k;@նef'GM+p^Ak`k sw<˯Wg_Vp{?6ws 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.pdf ns-3.22/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.pdf
--- ns-3.21/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,372 +0,0 @@
-%PDF-1.5
-%
-3 0 obj
-<< /Length 4 0 R
-   /Filter /FlateDecode
->>
-stream
-x+
-T(2P0230Q055PR
-DYZU%r'(+W*s! @
-endstream
-endobj
-4 0 obj
-   74
-endobj
-2 0 obj
-<<
-   /ExtGState <<
-      /a0 << /CA 1 /ca 1 >>
-   >>
-   /XObject << /x5 5 0 R >>
->>
-endobj
-6 0 obj
-<< /Type /Page
-   /Parent 1 0 R
-   /MediaBox [ 0 0 550.801102 248.040496 ]
-   /Contents 3 0 R
-   /Group <<
-      /Type /Group
-      /S /Transparency
-      /I true
-      /CS /DeviceRGB
-   >>
-   /Resources 2 0 R
->>
-endobj
-5 0 obj
-<< /Length 8 0 R
-   /Filter /FlateDecode
-   /Type /XObject
-   /Subtype /Form
-   /BBox [ 0 0 551 249 ]
-   /Resources 7 0 R
->>
-stream
-x-1
-0{~d~ XDo20S$#]b.hrK ͵+Ʀ΢E*CBk.ɕ
-endstream
-endobj
-8 0 obj
-   88
-endobj
-7 0 obj
-<<
-   /ExtGState <<
-      /a0 << /CA 1 /ca 1 >>
-   >>
-   /XObject << /x9 9 0 R >>
->>
-endobj
-9 0 obj
-<< /Length 10 0 R
-   /Filter /FlateDecode
-   /Type /XObject
-   /Subtype /Image
-   /Width 1530
-   /Height 689
-   /ColorSpace /DeviceRGB
-   /Interpolate true
-   /BitsPerComponent 8
->>
-stream
-x	\Tq~rֵb%)RuPsKܷqI\@AҜ\Xʱr,_Y:ۭ\Ta9f`f΀q٘aޏRR                                                                                                                                                                                                                                                                                                                                    ƍ
-
-ھ}K      ۷4i_}9      p'Mtwu]W^      ࢯuwSNϞ=Fb      Paϟ;w{5jT~\/      sիWN:>>>ݺukРA׮]322@      8b|}w^n]__qu7oޅF      8ٳoذa.]c.\044~;vܳgOQQܗ	     +((ضm[VJexx{ڵk>}4h`Μ9gϞJ     p{CmРÅTmҥK/]ըQvڥz     HJJʳ>۱c䂂t1			),,<zh``SO=rk^      8rԩ]v7Ğ\K.qF^^^rrr``;J}      p(777??bJ{|}}oܸ!|rvv,^      T}SR:EW      H4       b##      -RO     fN./      n!     *Jvzr      x11^\      t:v      xFSV-BZø=      ^E*
-RTTڲ7      xZNje.'     7h4N(      $Ҝ\          ;L&^xLf{     6&ff1Gئ}i     UL&4{iRt0'm{      Zah4=JU     UĨG`>{zz:m{      GZJt>)/a      RV-B!ݴO{zmԮ]     C4KMc6(      ^EYјfGX}l      xH\V^Y=      l6*pAy43n     1ZVRJ{      xmѓ     }T*Ns!Ҟ`"[5d     ^fĞ>T-)hRh	    3L&Vk=-Wb1		!*h4`y
-    L&NST}hTcB     Ո>jen(@O{J    vzZmC
-Hi`0u    @V=
-ºaRe"Ü\@kjZ    x/qfɹĐG8GUvmFi*T*})_    8`]Kj:)'Py    <RB|#af
-     gӁ|QT    @oٌLS)af녷N     L}㓖V^=98lߞOB|<    h4j4G.Y斩' #^O    pd2t:JL#L@F~~~    g4Z~NvP.=HR	oR    EzM-gFm{j׮MBx
-o    s^Iؙ^߳R    (J{*HĶ=>>>T=q-ܗ    
-7D^r mi     W'(
-aAV78\      h4e=?    lV( FVaeyKm{H{ o%]=    ph4bjmL&J%ޫܝ=H{     T*Ũđ|jusr .#    xt<zAg.mi    g9H=pi    <Ҷ     <Kayf89q{    YZVfh4Ze0y؅2wgvM=     ϒZJe@)B!,aO	=      <l6Ӭ%F    $FQܢR&^iii#\F    *D    *\    fYX*o-Ķ==H{     3SnIt:]E%=\C    p44ߺTi&    FRkZ]i= א     ܤj}~~~eW*:srn"    ILu4z Ѥ=kH{     nn\\F    piUH{     nӞ*33n    <H .     `0h+Nث̣=pi    Hi= א     ԓtxi    Hi=da2ZZ".MI85N.@Wӹpw    WT1٬h1=j\@=     BYf???1QQ(jZJiڀ ĳ8    UH{d!E=*l6{n=F:"qi    0JsZ#zıI{D    *bK۞*#6Q*jc4U*J8V9=     
-iO3b\jh4I~~~֛ypN.     JjjГjHݸL&f1~q4mujD#    WIKKW4W)qaDTM}l$b=     \U̅G^l:mYJG=     BO*B#vRՆ?%u"i    T%u;="    xzrU1ЖC
-H{dA    *=UOe=3۫nI#    W!2Rg.g[BFcv|dҞ*F    *R2fO
-|pIH{dA    *=0b,юFL[:NV[7*JWX#l)%h.!	i    ГK.fYR9izct	JH{dB    *,/ɤjU*UFcffjZYwV:X$av     ғpi    0n&    Wm&    Wm&    WIOOw0- gTߴJhL&Se    PRSSoƵ(*T71aiRF'    T4^/iEP=h4M ??    *Iim{(ʵ1iOIi.B    iEY5)Q*~~~?    *Ԯ?Kӓ\AVۄ?    q{(ͪi5Z     0'E\=QTRL    5ԓ\u    jmPkE    *Ҹ==Z     
-srQUaVy    JL{EQ.WM{ά½
-ћ   zFi(תZ=    vq{H{(ʵi^W*Uy^    Ķ=>>CQ.VL{&I)
-\ŧ    =fԴtfzr   @#ECQUK{zZ~ғ    msrQUҞ9z*O
-    (7F=    q{("    x'iEV=     BCQT=5    &cN.rjUUw<fUE    \f    WbvrH{H{    H=H{(ʵ"!    ""(׊    ԓ+d	iER==    UĶ=(    JJJ
-=(ʝ"!    BrH{H{    HiO}H{(ʅ"!    \f    WPkEC    ^\f    WOo^>>LQ.ii    xT1mEV==    UEQnii    x)'EV==    UH{("!    "{/iEV==    UH{("!    BO.rH{H{    ж,    *(7    ~rH{H{    Hm{H{(ʵ"!    BO.rH{H{    ж,    *(7    8;iE\==    U\Z    Wf`mEV=r=#   q{("%)**:uTJJJvvvAA   CErH{dI{rss}١Cn۶ٳ   @@CQni,iO~~]:vؠAVZ͟?os    Pݥ3J3ES==%'''99yJaÆ}MLL<   j-##q{(ʝ"%dggo{Ν__~S    jO?yw=#ٽc\ꮷm*%yMi{P6Yo#kևx"+_tRRmk}.i[_ЙR\L!>^l/.֗j籼_橴yvZ~ؿ,evhxms²45%6FR]WZ)eƌo	Mit~2+foYRƏO0!P]knڬ %555---%%%zK-ڶm[pppի^:udqb   @q- y?ԭ5exoF.od}aXJ,GX(a?~e^lxpF<"zᇥʺK\)^)pzQF?VJⲴtRZ#w}TÇW    ھ}
-]wu}=h֋ˊRxlOz3t56Y/>5Xois6?^IllspKu6[Zoc;8+[3-[明A9z!|Hy+.볈]
-'KW)sT=<+cmYqw_^rE    PO?:tx[6KfJe}it<x`k+-n3Flf#[?&6 -K#]ͩb}WVZ_x4Ɵ~K)\k8HϾ6ϗj7.>xao'%=e7WbڿTl^6ؼ_e9դ6oF'_?fopҎϵ(8p`nݚ4i"5)ռym۶W    ٳg=j2~ϟ9s?.?,m`F~^֧pz'Ov?Tyg!ʭ.WHG9x1X%6(=)enc2R'/^_E2#m? k{9қ7~[Xhs=#/f#8xHmWb<ŎSXݻ5M6m}ѺuvwݻwK,e     GFEEӧ~>`׮]CCCFիW:      T˗5jԠA;Λ7/###77<      Ջb|ꩧڵk7gΜ={\pXK     +.\cǎ+W={     5Œw5r                                            j7n>|8((h.]r      4lذ:u߿_     _RnZlիW(      믿nݺwN:={4E     @?~ܹuԹR_~hhhnnܗ     KLL|իWNnݺ5hРk׮r_       eX۾}w}ݻw^vmZݥK|p޼y.\     ଳgΟ?aÆ۷~|}}BCCׯ߱c={}      m۶jJTo߾]L{,Yb4ӠA9s={V+     egg:AÇ{ڵk/]ҥKQQQ5j׮]zzzQ)      <;vLNN.((HMM,]ѣO=ʕ+z     ȩSwڕ#LOOӞ7n%''ر#      Grss-pӺ'׍75/_ξpႥ     
-__`1))]ޫ     kH{      jif      rU`0X      ihtmw'8'g      %=:ε     4MZ
-ki     Wj
-BlT*U*,#"     jܝ9      F	pBy==      5       $     L&^w<&tm=      dzLf1)s_     *&I̴GT:3'=      Zah4=JU     UĨG`>;m{      JZJt>)/m     WUBnڧ=z=      Յ8Dؤ=fϙq{     H4k4lbc=t      xH\V^Y     mfs@@@rw	ضvڤ=      ^h4jZJPJXn
-+(      ^h4:hs[=      ^EåRt:i     W8J3      x	ɤjP쓒B     L&NST}~zF#M     a6cV[RLT__xh4᧢mg    T#z^V6afF#4b#U    $Q({J^/s1		!/c@K    Lfr.19AfO{ ~~~2^    5ݵD;V R#,/u    .&=
-GBfkjZ    ¦I0'Pi@_   Z߲9  >bOڵk3J3Pُ    GT:?ضǇ\@F    5hY>Z-H{    f3L:NR6Fi'P?\    eFQn0EJ{l6}9
-!    2rfQZZZzH{OCA    Ղ=55^zj6???F   jAJ{*HQi`???    N]!Ü\@jJN  s>|~˛_IKTuС?y_b  &N%6Q(Z.opfضvڤ=@$)Sb .Ο??{lowCE$r6u[śJ56+c_Ǽ.6/z}zq\e^,88 <3Rޣj\sqX\˖-wgΜ :F~.a||cN.f3L:+r_ N<٧O:ħ[i_B_ݶC/Ұa~7_zV\\lX
- fB FVaeym{|||  @Fz_:ldbuكJxG߬Y͛7J xF#F:Z֦dRT   5k?hsGVL%fqƁN%	 R6GQeKO.Z(СCoӦMҾ?sMY#G饗]&+  'y1ZŜ\@ GUv @<Ȅ)Ĭ5<ԭZ{$>O<1hРGR <FjCx3 Μ93}ޒ͛G$YQ;mE6;,y'oqNٯU¡q_ҥKrl 2mp' j`0lٲyIWRDaIOMⷤUem7S%~	, i}^<6Bǯڪ~:p!>Xx\JBV%?nݺo~ 8nOyfqr6"i TS999Vj֬fѲkaYlXrի#J	Ņ+ե[`)SBddx|P?̳/_+Y"ݴ#.Kcy-GcݺuSNmذ=t'*<sAׯ_E_ j=h`0He.!i T/¿U}ݰaz!/WL[K}~(e\d)X_RTR9߿VM8zdiUm1TXq=F^L{nDO5spq~e]T#Ӊz7qzbVGc>B\-<~X ;;"RPJPH+kSbՓ9 oF EAA`߿RʛikC%>t9. 
-wY|9iΎ4¡A.F_pDoΜ/`_dQm4ϙB/)KMKɣ?ʌ>聧{c֍p  $|q29؁j ߹sׯ?ݐMhQ^gǥluKIߧVldv؅#Ƽի wKm܆i]{NgN./yĊo<<tpɯEE#{SI?iFR5K\JrYYY FVER	7M&q{x9 f'N0`@֭7>S3m%dN>o?~wbR'ܩŵmM,&4d_W]HƙA}nX5!ч_,]7NJNv:T}Ǧ_e|(ٔUYgf. @yH{ $%%hѢGI͕l̺!BM*Ϋ~[5kZMx8kɉ呫'CƎA✭}ֹSãVOqmG!ǾӶnDEGқo}{rR%4O;ָqgffV  xzri x.̛7Hԙ2~|$(8hIdO-zhfQCw,yMoCƼk]u깚AGX6㝳/駟eĄvE&HMY3/iܸqTTԕ+W~O  <l6k4~[ͺm{j Aqq{٬Yu.oe{aqcSWo;ouz݄+97smL{>2~-ԫWoޅעDLUQ$Mx.'~F>7GDc0}ӦM{})[ h=DUPiii2iH{ @^W^oѢ[w<2⮃K=:nŕN.F!UoRzW}nX0[XqYBNڵ7:Yh"7jNͥs?@*ΏH,   2F>	
-g_Ҵi+V0 TkҔ|RS> b9vظq|I͕ik큛+/'D˞KW^/$,9O2 7쯑_eZ믽H>ڱ8/jp`,?}2g\I}	f~R6kL^w^u+[ PaF~juZ9|}}f= PoݻwСCv6jC%q;cFH F Ahxu⼨ة17'^ط䧣ܨ3d{ȫu	ӯ]Z3_-]۶m*{UY7|SN{M
-؟;wN bZϯJBG ^ b?VXѰaÛ2s+)*.x`XmȬeos/ۙpae7ʻ1kƠc-]Z{%'b%7'4o`ٯIa#=2ȧE:uOH>Rr_ T51h46BGzrތ *~w6md,'1+ok¾ػ|.Iʿn[?N92K6ͺqw^[3jdW&I	7{uv횟>JβoصseΝR<'!H>͛78 8EL{qIH{ */PJJJ-	{NVL[3,I'M,<߿$\${B)\=onZa􉰼b^q2W2ՅW#r_W٤Q8#|b2,viժU/ p{Гf= P.]lٲf͚M^bJmztڬiMz1;G`v9kQqi5=roGVm}8/RNk׮vf4^xh6mtR Ӟ*3*aN.  X,GӧO&MVotCv-m[b8OկrJ7;a||ms={K
-F~ը._H9rh~-2-ߦMmٳr  e=7# ۷o?`g+/*>yKb?p(CW+{P7˚4{xCN`ʒ!ewxǎ붭@#MYF5o<((r e0ڊ*hT= _uڴi<TMPbV^<2-IHן=@'{tf}gaʁϦ9G0|X߮];L2xCTW^eіџ#~Mz_I&gZRԩΝ;i 5iP- >QmڴY?;X!OR#G>St=`meZ.z;ǿ9շ	so%43eѾuؔ)u<̅!q3Wyǫ;L|«e,K՝;w^#.]
-g[w' 3nH{ \#iט'>(>1'=C|IN *G٧w~?cۇcjv#auIT
-7[?Q}}}trG28s2+7{b̅d@98_~I_+v큛ڷoW  q{BBBSx- pb9uٳ~1بJʺ*aEĊMKK;mS7EÂ&زQOj\sj,7~pF_lڵm{F;N8u2¾~ywX6ql'3r#{#t"7fpY	Z3,XF> P󤦦=f= p[رc6m6>㉱my2h-[]JgT?prsV~1kSK>J\>Uco\?t/aaW^ر}zwڇɯ:s2kk1#<쏳e>ws$z.d'?uҥUV׮]M )'H{ +WYqƁCL:h'>(pJ=^~K3mv&8༭iRhPH91p3o+V4裙3W3;0p۵n]'Qb!Zd_aOg]1w,1驫۶mhYtU7?8BTj4SNn xԓf= `8;;{Ȑ!-[]#[ms:FE.(YoT?mkK[;<_%#Gf֐~}:?ó¦UchU<Im*EmWmU3\4l~m2;&Ò`8ճgO-[0]  RCO@h4kPM ˗/رcǎ:uK=˨G["idq^_,2)3q2̏M^~8[Au1z_#'ܷS!c+Ȁn?uY6DvxöN8fse"/KOWkNx}zOBV^xa	?r [ĴǇ=0LZVVXz&(|[`cyVt:lvJq= PR:rJ)ik}euBisL4OY%;a#K>8`Ū7&չdaˡKo
-Bp؂Mg<M&
-QZWҲcw.vhᑯkBs|ĉ{oNו+ңG;w  /l6k4Zs=z^P_R4.\< ++kĈ-z%C(I̺yРA~%`ݩG5mf⶟>-*4ɓ|6غ[ߎVL=t6u$-]r~T?E%Mxڵa?Gnnk:t0B49T8m{ן>}zvvvQQ   F#')
-BVt:C)VPi@R{>#p>lұcݻ'~胕՘'>h7$L<oc-1rw.ͻ&;eSODuVUTczmZ9#uګc~{NxTIFҭE}}p7=<G't>Ix+aiw-3jNnzE  *Qe!)*ʃA;ih66L+Sy" wӧOϝ;wʬIW[^%fNHZh铛d~hS~pk>[
-"">5ufE/ui9?v䠻Kj3']EO*,gkR'ͲĤԩӂQ7qYX_N1cOrI  TG9nw_dZ#3n(^p]#\DQ\\wnzGŕqq񋵋?M_kNۺeͻ'\sXsf7mRYjD=n*} ?O7+à1vf.T7k`1mn6=ٟD򅛍|Rt=r3מ={k....??_  8f11h4OE)rq8<RPZڈZ<O=i7 p'YfM6můJ봵>Ӓ5a'N( 7t73{&&xËeS{c@sj+MZUI6{ԐAFǞb8:i.TSOFDƍ>ʅ?n fk^~e͢e	<0ϦCEjѣ  *=zr_Y;N|*FieR)-YoGӑx	 5O?4uԦMN 1+:m%e][zzMԂJ
-ebNEqәI;'VӖM~ˊQ..sju_]3seҹ13Oxcscg<߲t;/vRmY|1K's`|19]W.]:v옐pl  IKKWQmҞҎ]
-Fq9NxxGi0ĕj>xڣT*+z$= j={ѣUV1;טG,Lz?[BMY)vO?iI;[6T;UV^ܷbڊ?XХ_!|)41mpR'8G~2b	7?n%=¿sKw}U]qo'~-جnJ?˻WZozkzSoPmV(|<U5۰N_Nӝ>}h4߿_XC93'}ڣT*mZIR.zz?mTSy= jBNנA'xbk+1Lڭ9wՀ$k/i˦vXPmhr#1Bq9*6;jrnֺi}9%*T:f\*OЏH]4p_|o߾b2,K,_o?KX/[,o{i6.s3w|=㎏x)K嶿gN>Vi<oy=!!!r w
-ت:\H{	5P=L{cL%H{ 0w[$$$ϰTRY<vغufޝl*7gm>řǥҟf/bT4rF9>yCG[?ۀ}3}[Nׅ?K)i0_53X?QF?6dZV>u]F.>{c(ʾFku&wO:%pIOOw2FcL:ԽSiKs4(\H{ <Ǐoٲq9PԩSF^Tgݲm[WG2eR+7pht!	&{7}I56'IoJv2B8X&*ʋ_5ky+	ФCԭ[7x|sBՀy:JOZ_>,KqqDUMm%=Lu;O{D*= jK.%''m۶M6ׯߐYY{ⳊjoƯbJ
-SubvZo^Tlf?E֫yfwUk/luư=K*,uyGorp8^/DGz璺vz=3>1+ϝ7QL%>X-nFyvF,@Ubݐ!CJeHHș3gj8\K>  @[)8H#R@t9s4klرIY*o*M{O;?w=X>3vt{ך{n0N]FiԶ)Sw*`;!Ԅ~׶ߋnͳ͞	J'=IWNzenPZ=wf3kL̃4SzJ&d.Y&UUk!ݤI3g<qDQQܟE@$CSeĞY֣+;3O{Gp=^@t۷wܹ~			2+)٘ucƌ/Bu}uv1l/r% Y4ׂ)=JV8u	K͚{uYA8_/xN=;Lx_-T׵
-34=7zoǉ#0a|Kzn\h=w7;ICX8;3Uرc}ى';vNIm{\Wb*gFKv3tD=^@Muԩ{e˖GWVRڳ@I§'۴i3dȐּä\h޳;֭t!r1m	ot/V&
-a9tT]"\֡G1sQon˛ҪG<S(c+4ySSe>ԡC-;
-|׬O66iDsZ+{D@հJ>ZjߖO{Zk|߱@VNf8ΤC=R$\މ@dX\녏N:fU4jԨ^xᛯפ=Wa*4zF5KGn.y˽fGEXvKwޜ#א+-|zǉU¾.T<퓿Yǣ{j_jd=T[C=ac3<sȑ#7m^Z	Gt˖<={hjgzr	Y*KU5@bhGXiKӉݩfJ[
-{	!KH{cJc>(st ? 5ؙ3g&LP~wy')rJkc8նm]I'kc*ҼgIFL5,zf6"w];W\9p\QK/z{ˮT<oxH';g*7[Mʅ?}M!wJ޽{G{'Ejy	mٲeϞ=SRRp34;`2ifJr0Ӗ=N^iҥK۶m׿պg:HXҫ( ]""*EzOBBKPD)YS@&˗	"73;;3;7SI$Rbs*]V^Mj#>B,+,ߟzbx'1~&C=#/86@4c$1Mp=ˆR^#	/UR'%^poɫWwpMh__J+W3FQQ_0hr$p=|dbVaaon  ~VЬ=,Vr˗/m^^^6jkki谱!@,xa\Ch큀訪\t!ksJBBM_ɨi)fsiĪs[~ycv$x^fܿq;nK}?5r){D	]tc#??pXw{7Q/A!-ةS<H)yqͻ}Ǎ7vX+++D45558XbOؘ#i7# eOp6St%%%333	jH#||ffɑ人:[*ٷ5b =#͙jjjʉ7S<VPPZ9h}S(ù2cw(\IvqQJ/$0imyn2$Ɉ>ӟS㲣[rZ۠qO#%5}B鎎;G-//OOHPWW;vEq	7/];%o_ey4w3{?3;#Ff%a6ާIdoćw{,Jb'2SnQ~%AAAABB":5"RA YYF+	pnOh큀xT z8JS)))==6dzz`jĆ%?A@hbELy|nF76͚=U.9YTsԋi"""vp"VtpQ$Sp9$M >Ej>~׮]&LՈ>~okZ,l7ӎfLK}<}@ߚϪpe%1ۛe=R__{$.>R6ғ|A&??hhh(
-<b큀) =#˗cǎIKKKHH$DnoVVVBBBWF=_>kokzOPU_NHꆕ=p*k$\e~t(g!/O吂 .JizTVw@|˖-G̐S.Z]1v+]W2eʤIlllH7i\+++;΢nֈZ-#yLuw"?y/FV'1k%8{G7/Qm>61H]l>'"TppWn  ;N>͡ĮMȃĿ;>3UUU퓔ܱcҬz6>D&M,wese[i^5tKK.>k0.RH#|#.Zlϼⲡ^%rخ<
-WWaʰ25jJ5'+֭ZlYTrD*bvSltJ'O|d,-7:+J/	-$\!ioqG<&oc0&{t4c;[^JgrTAPD 	y>T^ƛ={b'C@@pZh^^^:7o쿄ab<#,紴4qqqIII,=+W,ՆG}4XFpCjauޯsh+{m:)ͩU^~iy'2X|FǏwHhH&/X 4k֬bUHJwpp;v̇Szhll޲Yc<sT O4/À'ppި&]p;[o{jYޭp~t/|9£9hO,rvPX b|)̙r=/SNm5k?4ˋvK;~ÆTNN2o޼quu&9;c#jIYcܽD>}-qJʀO?3ԓfcWl(52fO/9/]=>ED`믿mBn)Ql>f̘s纻$ ػ_f踳qDMㄷXϟn*+	7NP=
-U6H=L?QYn5mX-F>')F6e	 #gK$V+..niiYYY	7ށ`5ڛ!!G~hLFPӦM:<=ld5~"((H&8ؓG{ڬJKp#iC56ѧ伌WZ\(ԈwhM2_WY?a۲{^*mǠ_eeeO|@Az[ħ8 ֬YӧO?GH:sF-[	ua\vk=ww{ޑ-0otޯ!&&.vb
-u?ś^v,{yQTO7dnٲA":T;w}bX Z{ !9$s{ xyy%$$[k@3~]GG˗KktO/%%eff\7mMxٹCo8`lp66ku(6d!K: #87R,>}DZbŨQ쭴o烦|ӦM<ctommȼ;
-oV__u&S'\:`SOث.:=w$˻k;^{bhܽ,$fzb[czqaC$k/644ݠA@'OҬ=4hnp;wƆfC7k!322NL@p333ml-B%\3+w%r%DxNS^=}gm-Aԋ`PB0a¼yG9ܴ\`m2iҤ)S޽tgV^z6#l#ALEwC0NwQwq۲YutOu[  ̉cm>H
-fQkP\mmenkkz	=Iчedd6nx閖4@=s{acc3OuXY{8qWWXYYt%ޕ011aF-ŷw7 s@8r:-@rV
-ØLudymnAA;J.尪O=_ mPW$O:uܹ#lrⅴӸRu>HO[ԍO2W	9lܙ`+˭û]ڛWtu߿}.z;Zo$%
-PUL+((deeԠݲA@ {<\	?G__?lZ>=d?sKf 7'TPPr-	6eX.dVTAޫ!aFh{e&MJ/īe>>>...o(NVoatQoKxSRsG-//݈Z9\hQd`K!U;Tf@n7=QԈǼ}}(Zc¥s)oCg?wo%abccp,9#.f99bHA_=쑽]aeK    nrrrrvvFnz+1As݈3=vŋ't333nnnꭴJ,Ith&&9-Zt.]^&m݌^tfuǷxΜ\\\8kK=<:{rՆQo^Ĩo<vG}heifll]iUUUIII@w@큄d3g=EuuuFF?JHHr.VtroI{ZEEEoV&{z͋!A[mlR[\5YZx.
-M ەߏ~&h)3"T{K(g)6HVQQ5jJ5':B8vM@@`ѼQI'HMCNhѢؑ,XPzi?pxz0jkܻfI4zenF7Q#طg珣dOP?`ӧ)*G$?_WPQbqyqׯ_ti@@gn  }h큄dpnB{êUvq=.re۶m#rzmT]gĉc%n߹CVKSxZ~0s&wZYgK@Xr.hQvRMy7*<)cC=
-D٫ٳ'M[QSL;vf<
-&GP/yxxn^f;ԿVǾ~nx"x޾~hqjg\mmE6˞߅whƔ^+o3Pg$|I]]:>b6*lixgrABrHN=_BB!!!,$skO3|1--MNNNII)555{zOđlgK"Icƌ	ůzTi>[clk}̗5؛s4ےks;L+V?s(ι5}YΞ[q[_а5~%K$dJl6sLL=X+0Sr!8Rm6˿x>xL9ͣ^tp6ZZTΟZuc5,n쨩xk+W.C=SA}Λ7oNg38+V=yЬ=p%$$쏵=	OMbab<#GGGǽ{(\W>'"cb([XXXGGՆEqu6!uPEEݣa@`qŁ
-cCw!4ϫWv5jڴIy9V)+w9+^tYV=:;D_g]dYSSR;qGJ-[\2*9&8믿Ι3rH-[+vl~r?ݛa޿wq6z83Rp8/fA[#xM[5P ᭥؟tR/Q_`eEEEgg'`n큻4CBC;wgpH$ᰬlbb"{ZRSSGе:BOGϙ=9o2gO:n7nTVhoY D3ZcЋ'!o^9$&һn. |>;,6z(F&"vΜ9\\\1<GhL:u*rC,khhRVVVbm5[1X5kk?QlgefvYs5	WxK.ߏܲyMVepk3jrJ={H|]vUVVA@@k$${={6'`nn.///XsZZZܹcee%$$dkkK.o$pvJQ_L*$-?bM_lLAwnlAc4yE5/˧uDqc5~_{\#>%g5*8Pf?AGԩf[e[c>o1c,_p'e]Z---qowwwr_0	WXA-{:Z[lpԊϩ'p=ycjz#jo4ttouNj-ʷFl[r22ܦKi-Z403r^n-[+۩ex777PMLLΝ;7@NA3iܷMr>˗aڴi}֞~fb3p[$W4N2O}Kff2wקC=UA;bE3tӌ6s9fk@y2@p<`sӗ(ch+mѥ$=kDo̐9504"W4qRige,]H%E[uk׮	&̛7?2<ŇEE3HϤ+,wj7Q-iogjf#8ڛI'%"?^^͛78q6}=?'#c%31PݹsZDDù(86:Oۮg$~bϟ7D_>@bUIm%E3.uEIK15jRޙeA9 $fn*}@S i z5ٳg7'(Ce6`3tuuS. u *A]]j>loFh+~:j/q$=@kY&M~!A_Rg|kYl(gՈ_)߲eCI,RʹۄQA@W~~>hn	! L.h큄d͕ןz%W3>}beeeedd;E.ryptz7AWfn=Tգf&ңF7w>/[|mg͇6gm7	-Wg./q9{1d*)X Rh/d''K...AAAҙ*Nqɗ?/ V"e!=IN)h5`Z$\p]kZ)ߟVIHPm <qlLgwF۔/_x{$l!1֮]Ѐvc103 !f?n6̭=hmmqㆥMMMe_eLh</**
-?w!ƆPs޵x霫 lKGK&^=iҸɓ'I@Udy$X
-D^_`E:3RWom3$7pRKI1SK,ddd01ȍvǎxWhoX'(-a@L}kGs|ΟyKBYhaaO|.҃h.-!!ӧO
-V_grABrH=@@@@ _p8999%%%"Rܕ.rY;,_:'gO)=U1Z?j ٳ~JJ0f4 ˧_?K gu e~u|W?"&^+_N57XB5hnشnD*9^ҸS/!z+2j(55?s󟿢_h1zv4c"B[{,;{tg3Rk_17J[D33#9đI ɉLttϟqpHH9('Gccciie8dvI*JHHl߾pow!!ڴ-P}J떛KY픳77Zj0Y 3ir)z{rV24ϻd&ꪗOΘ+萠m߷IO5=S͂?~<ѣpqZcPSSC...!!!駜l9/ʸVEEٳg޽tOq@ˤIbc|[ҊaZPqqYxrTɦ
-o_^HӍJ E擀ɉUTT<pׯ;::n! }%@BG8bh@;k͚5	$W4|\\-	5ľxrd`Vi|Vj\pXQu%kT.qχ$xV/?[Dx)<p*A1"50?GR)Mm:v[TJ!mBqrgQϡ?~<PW	WocLc7)ܹ1bXD*c^hlp̡Ե6mZ|?~q(..HHNPah=C   ~J߸qTDD	=eش|||?=ߗeXcdgkJ1nŤ%s\Ǜ/#6}K<]v-h555>G+O[ZȦ1WϞOI'6bŋmm[:'34pMƛ8ح=k1w5MFx׆"AlS\ʅ333QQQWWy>L.HH	 \fY{0	=B{.::ZZZzժU8Y˾l۶MRRjz[ldd ;0L=]iPTTf͚'|؜9s0-aTs"=DIgya*R+~Ȉ+A;6{@ѫ[UѰ<RR
-$pegIei'tj?AMVUU=ptAO==%Kܹ۷ohWrABrHh!CSSK%+4&S0Y.]m۶Z8$ܾmVE'0[8![JM3f˯~5^~6.M*3+lT]I//۟")i9LjJs ĊS2|/uac757zyy"9ёں'CBGhD]]QRRJIIApzOyxE,Bߚ0&M6mZTJ!`Qqp7nܔ)S͉HML<mddн39/s85/-MJv$KO\˕Iȭ5jw#.<	eyɿt,%Lc?O8rA[JJJWW6?J.h큄d=CE˾rRS;c
-!0$k~&oܸ4pV"%SRO>Ν"Gٳg7.D62Ƣ_NuˏTA(շ<9 T?BT_殾@Bkv{ߚ֒DJOQ6#yjjj۷oO:Cd𳐛Ԅv	}%@BGh!#""	{Jk544+&=}p2̘1N\oER^^GzԘt Ƽ\\\UOH-k	۵uSnhaBru B=Gj:qssˬ5FӑaGVт{Kq1/x7A!෦kP&PBȚzb
-ȑ#MMM
-J@h큄d=Cׯۓ8Z5;%%%?{8$7"x|Μ9<NVoKe_vX;U.
-RSzU"hTt(2z-mٳй\6Bs-rEiVCQ1	;XCc6>?rՖg{j)1ӏ1lM~5QOOKzY6!'xtĐ6䂄d=CwɉGGG#:GSSy0:HFс>|*vZTW+WԊN±k@ڒ%K!vÄ`iHMho&&	cur\齃luqtQ!^t(;nK{̚V{<<{E%xb~MbARգ^Nضm[\F46{b`7p8ܫWbP\\WrABrBhGSSSYYٖ-[ɥ2D~~)I;vS  ilMZFƑ#Sf͚asc--!V>"vaQÁw6صǌXQǢ<[Uy@Oa]2zi: Jj;,wwhɓ6ZcPT'g̿v;H1KgHiK}#vI1AσEEEQQ/^ݖBp=Z{~:::׮]K 8<卛6mᱰ0%$&|чCӟ`{
-׸KKLa٫&u_lܱW z'Μ9pZry'U{SsO>,X1뤧8LNȟD:/u*GNayE=ΖΌ((hI!ƻtXq8JXjB#=PMc@3	9/$MoԋiHiM~")0=|AuOݜBXЭ=A	Z{   PA}}ŋ ʊ|ù -[6eƂn=W0&7c*g^ңӯbݫ^sWv:U,L9.?~/R%w&-_r%hѢ`҃L=ڍ4b\Hga-[)pB;:HvkZKXS,\}n2r1@277Cn>[P}>y5삘DRhw7[UUz'8B1V]]}߇{8C:\Z{->66edd8NaMFr9,۾4K)-?y5/,vh-X})e]FS3=J|u	_ڕQu lʔ)\\\
-
-
-	PY{-3NcN֫zIN^GGZ|ƌmwz(pf>mT;gkw'U6TvWbfW)'.z?nhhC6$LXXʕ+h7#tk	Z{   Bkk+ܹSLL\r!!+]޲eĉLwkx3D6!=őh[yA}>7#-eI@3SYVZJ({@;Cѵ٠aKh`wZ;TQhf"a%_{O}(qXjyfooob)b6*lyիW}v1 WrABrHhQUU***fhL*r.VoPWoGjoOOI&M6DfGs\-[eZ|9Wo7ԐY]'LaU#^YsT56FQ}ϴ_H%:{ұse:l%$+<Ŧ^;;;ϛ7rJcc#m,ύ3g΀f$K3$$h큀@
-sεIrEׁٳgvpڵ	I:XJظq#Pjժ'|UulǦ=>uf!N@ikX;Seܸq[m5۵lش3HWW[uK0	.mk>^C#١T/).ogg',,⚚['OY{HH="(ʋ/RRRH!!~ԩS8tF=[cƌ2o*y$1AEM^j%>Rܨ;i$3_?JV;gKV=ZOoSMՄo[ɻf[~x{R6gihh899%aOYI|KIؿƍ?[p%$$h큀@mmm񇙙ْ%Klmme_۫r.
-f
-"Edxwwwnn9s[45Uco׬YŞ9opzUBb)KQ	9G7ddL<YSc}9=չ_!Qt(=Oޝe %>lo&FkjjZZZƑ 5Otp0࠴u>|v3n+ !#@khooUpph\\\zE!!{%_m
-ܨ0$VQQ(z"zi8=EO_뤲fT}L[;:uE_ޗ)u]SD` ?D)%۶;
-I]+23ZV%DOb߫C[SZio޼Cz.P!^^^YY٘' @BrHh
-4NNNZ|)
-C{HH:)^mڴ	zӦMspp !+aBtj	];[twnPOb52UdC']_~s?+-I%}cm㷚KVzGV/u`B}#HSS3>AO=<ׯ_/--Gh`ھ=㡵=Bk@@@7oZJJJ36ԓSS	G3c|=#zѧg^U/7브ܬo(?`~>kSvEtj:h$$$bӢ0{'N9srB'\/]LU+bQEANzA{wf&%7._XrMѪӟExZiw{DfEaC.삘!ҘvJo"i;>xޣ{ZZZ[nJH\w$VuǠDHH	=1Ǐ/^Ȍ?~b7&tcPCu҄PZXDelᙒ:w\\\ݻw#vNS$((dfRޙnZ':I{=tvT{p+(}WPF6jvF"Oc͆:iCf1詯+Zz}~kJ3447n!R~B``g̘caCBk@@@
-#ww9s̞=ٙvGp="S[QK7%_0ӓI)=c"kt3F5.=b+}ztFEGLIȘȞ9bHe]ޞ餁M^^~ĉG3fXȿ4.,`0ۗJEb,(joގ^PFydcc5pߨg}g싿`hPFioMGv>pClze*b2lmmWZOzG'=LQUU]lxV[ca8CBk@@@
-ɓ0EEEMHHh8~ڀk	gLlKrBDVuiӦqssر#OBf@3l8.g̘1;>aՍ%vJ,65<%̄^Й$G
->Y]'|ۜIt-YA]7 qԩZq	[6TT$G__4^E]l5aH]n i|hW^XSSv1@BrHhTPUU',,,&&Ә?`%w@KK{񺺺IgpCmԼu֯?ľ|,dS}PJ#IŸec~s`|I''sm3W~A	...ew^ӦO~9Pw3]'0~xӗ(kdb9RS+++CCÓ'OBkDY{@+=lZ{Jh큀^`0⠣Gt	<.*2554iرcώc){$7n>H.Pr,1bԊGwlUxPl|@?LT}V
-5k~s4`꡴8o/-4~!,0!!!iژX%=L?)s̱uBAeHH=%@@@w͛7KHH۷1hLJXXhmm=aEEńcgH|d\^ܪU@S=93?;v)ͨI,rNsYND}nXɷDev/wۨ_y]J'|?߸}})V-:d#6*_<K[fMNN)R9KA		Zn]RRׯn!)J.HH	=%@@@tyyyЗ޻w/ASRRCB8܇"{{ɓ'=zڵXSn%VaK-u~ՆC4L{ziYW_˪x#I}HSY/Ыp_¥,YZYKFQCa:vOciS֧j$S%Pz;[RCCCE/\\\DEE=@
-8CBk@	=/_233544SDỢ"''iӦFPFF&Ez>I6l t<}DD4|IL7{1bEz*f)YxI[HJ!qj:;UUvl6N=EDFr!B3̇暪|aC5X{nAć_Ȗ⁁iܴABq=<<***n!)HH	=%@@@---<?/}}},X@3DIكx555kɒ%7+w	ugT]T^/څ&nXyCkO/FI}[@棨_NĞo|ix (7S$W
-fCuwCq-*zq	Owzj8cLMWPPw}bv;@BMh(5(Jss3l߾]ZZvAAWRuHHY!ѣG#:x]d{MÄ)Kg%ۢ)Njvَt5߷>)g뛼|_وc5M]-KI
-/38xDO\kvAp]ue=4֔b
-CCCUdOJ-;88֢hC_Э=p%$${֞Z{   Bill|20O<vAu>8rõ憆.[lԨQ;v	cǎ>}ܰΖT;NÄY hTk^8'BxI!ؘ5-8Qnc79H+m/?*Ϣ%^Nbĉ`߾nlC.ұ!踺R=R*b~&Ӹ_...zڵ&n	pn$${֞r=`T9(   Ν;gnn.((hhhx&/9"A&5j֬Y{IA >Cjf-h|'Nxng.IPICT OD&G^j;SBtZKWs
-<:z}܅VpUѣ1vvܨE%(^kj*+.z	ْ222X#]'DGG/^žz
-bX	!gkOGGǟY\\ɓ6B@@JGGGQQQ--GrdL&H`l8f̘;;;"8 .m	'Nb|ۛIw	K/-=.~dONJ?O;%3I!qYC)}0EK"_r_HQ1GCMSk,Eךy,LcЗᨗа$""K,Erm3mmm%%%MLL@7bX큄d3Pnx<4vyyy?~GOB@hllqㆵ 'nF}$	9lRQQɓWr	ɝ]7eʔ'6dރ&k" ~v"Nt"bLb&J+H..z')s(_jNV|¢%E֊\HZS˸j˸VZvAksssԀݻwWVVvtt݌Ck@k$$֞rP=
-
-
-ϗsNKK!  7n O^^^q%myxx+ч?tKwQq{ߗ"m}W9LV(=1kz>wss[zĉu9ZqƁzr!e O:u̘1VfM_ɨw	?> #u[Bid1ɡQ朔D{@3&^Qתhyj0?<Y#AGJac4_y䯿z>Ep8t .k^%\Q/֡">''GZZZLL,##A-:^	FDD~bXpfHHN=X{(JMM͉'PqѢE\8 ۷'!!B$5"˖-2e
-ςwcA7莞+Ikz3zWFGT1IcUK+;LIb^*Ezz&?n
-
-~(*_<vL]]}	cǎO>U]`(<o<MӆZhodyM7&5%&EoezoaƳh)eVEo]ld`/(.z9'0He}K.k-e\!!!bbb۶mK@Bl	)񎎎+W\~}^^^]]9pGYYܷBk@9gr=y$::Z^^oܸ<X*   _z5kbccаt%%,,ܹs|_}!?X)@۾0z2R.-?y5/,>_ 븽~a})="77N8qCg555ǍuēX7z}	Yx1hTCw|[į@ce8Sw*'%N[BI %2_p杞J}/zE=^rr?QQܥurvY]ވzi2:D[iiijjjRRRwy&BgϞ?,&a{&yKSLÀLq3񖦨p'ЕғʤQ=p0I`La<dJL1m=|b|{LϘ<yaLjտr+LET,nQla<=% Гv!C)&Fz00货tOeWDn-ݓ~3XLsKv @K)nin@#F?[& h9ySOvOS$Kw#///((4s$%%wK8bXS		RPЅ_Tdjj*''w5'P)@31݋ƌcnnqfPě۶m0a¸q֯_ɉ%!i!F.[֭;?Gj**	gT|˚]Ram!Iqו`w]sלcNQbWbA仴cngWrUϝvF(wSA"""1k3!884O>EU	PTT~G5}%g .	KfH߂4Oc0ZtZ?݇).S`+SJ0&+Si%02E c^23z_zIƘs"Lh\zeW0f.1FaTX, ]ݿ*fRc%BRZ/e<iy2TX:s& o\2cG4O1<2`ɒ%K._ O榇?y.\8s̉'._7@
-իWk׮]r{MaaWRyY[[^z߾}=F4+ںu!3T&eeeң͍#GMyy7ftPÁ1WKH,;wkOs,-tgmR[(3Tz]M*u͝svKG6o'r7BCCwdhhr2.XXXzNNϟ;;;n!;@Y{&L;uD:L8m$8hn<{1JäɟvK(1!:Xt,3	g
-FK*B2a;=_,=n%ENCS,LdJ$F&ӧ3ךCYץNu
-Ô0U]u0ӦMsʔ)4J&ϞC4,Ю01;=t! &M=z4pף+pkJIIO ;ΪnnnC;t,/4X7n|7d{p;88̘1tΩӢH.X<6A6%%%>"AxG+W=i U|ac-Ǘe潔^b)Պb?qD,-$ 9&}C`K*bRO8x 6qSO|rkk+ڍ<O PUl|1"_Js<>La4Qt{1|OF  XO3}%322b 
-]~[~ٳ'uCDD$//6ӧO$iӦMtuuqq'?V '"(wժUWVV~2uQ3m#e		蔈H|OqBе|WhB}xyge_dH(P(j*+Wˌ*D2.@;,QI}'>@BGF{3}@s?N9^vCCJ[bff&|DEEI<_$EEW^CÇ_|	Luu7oUUU+4ghnz tgX*/^#՗& !=SΘ^kҘ1왞`|D"L_kb{}L<==k&	}eIx_aX>,*a_ՉL9b
-z>+1W0Vf&	,^)S~T,b0f^^^W={Y@;B+ﳲ֭[7|;;{|=q~E` g#|yy_~e͚5Wh)]Q9shF w}I>K:+	$paxSg[ٲЩ#v]NL+@BvTkWDړ~$HMeEnhL
-
-
-100H9O}Ğ'	IgpK.\2YzC1o޼S*++޼yA@ǏΝ;OCoRPpAuuu7QYޝ6/VQ5}||hE/\p2R;[SPÄx!bg05Tٳim!	<Tǣ*EѪEIgI]֐,)fe_hv"*mZv}#;"	3g~~3gy9<%ѤVlm־I]TrNu5[c"taaaR9=F`.]joo妦&_Ћ|ss%K̛7oڵ^^^W^mhhy xY}}};;]IIyBCCtttJ $PcO)//&k֔L>HPPחt$^řMLjo"#~DiּS㒢{3M^d$ҫj駈ɮj=9]3O<ۓ{:%SN^Qw[|ZZի?Nٸǁ?<<\YYYII)$$Çׅ@ ȿ4775k<<<Ν;&@BXYY-_yZ֯_offv|Nwl 5ztܸq3%1v}^^DD(j777bJP5ɓq$<0ׁ>Oڏ8m{'c4l1h+~[wAT14Յu1l!HHH'Xb5f"UaH666,ظqcZZx;::~C B/.77O~=ia0---\p%3%;yp`yvVZWkQ ԿR?M8ѣiirsQ(ظ-/U:ݻwO:уO._;OsܥG;{4?+)":JTKJ&[6Ճ~@abee%,,I.l\ASSSPP¢˗/H Z<w˗$$$?Vkf&drGs*Wk܅M!ׯX~@!@\GGqqppx{{S/{\LGj*4iҔ)S@I%-CsqqmZ<5et6%GZg-9	M%!?o>w
-4ٞJFQw[BDꑔbT!ʂ'@PPУG@ sZ[[<xbŊ6j˘3%H$4d=tlN)Ig1)3NmWaN=5gݻݽ%+a|rrĉg̘ysP[T}|}XYYj`盪,]»Rj몊4{i4ʾ
-5218Mn4Skdl(y:a>}9Zr;qu6}}}EEEMLLHk5YJJ0==H;@ {YfMTTTc^t%'H$}}}--Lzt` uG[G[ZstuV~@>T-^^^ӦMؽ{w]~>c.tqM:8u"9s&dc[^kȯZsK[-oJ'G%-ַZp4Ď=U8ka)z垞wVUU Osig!@ cEGGǭ[O+...''񹰐In"LvƍkwRËFE;p8#`q_be~ѵK }zw[CǏᶹ	B洠ӧ_j˖-uGt%%@KKʪB+l>Wϒ?̠w1f[߾ ކ^ݸUuÇ[OJJǧi @ oرc򊊊j!zAJHHȗ{*|w4Lv~-_@gO,p[^>}jAw# J;w.6oBa퐐p)7d,,,֭KϠ˗'mO>jo"{{{'б}]ŋ;v߰aCrrWv
- @ <fA|'//teVVVk׮q?|D+~pˮa 9!~`m^o3x'.dJ8{jMBP-7nF%|}QAl۶c1H#1]&V(,%~m%W5R',,CMٸ`SSSE\\ѱv@ ϟNDDd߾}).2yg;w|qR@lGՂ>c^oc,wR{uіsLw:LoǮXO׵6|뽅6IK@0PWk@Xt) |BXZZbbbwx0kɒ%W.a[#~ShBZbc:,~SW+z<V\IՍh-x)߹sY:::nܸ痓́@ |Uttڵk]\\#牋a{}RMaΞ#5s>m$vN8cݧdOe~SMw_X۞xlǧPk(\))q)((3h:'#:cPX Mz%|h|ZYYtLWK"gٌjkhB7 ֱ\iam1
-o}Gǘީ@AI^^^zzzc؍6fub߼y"w=/Ƴg,,,VZu%́@  Dݻwo5yՁ^P(Xz
-
-3w)/aVGȆ}ZɟF>W=ƭRUN<<<)dXboDG:-\XZBGv6Kŝ(G>%++.	,>/,X ^h?O5~냺͛>@K/˲5޽SQiN{]T[nl2ڻy;8,^wĺPO G&TcM灧
-㷑	4Q5ČޤXZZy{{гC,,!!aoo_\\\SS hnn>v@BCCag@@Sy&--MGGGDDdǎ7
-	yHy7
-[H{CtYtw(^P}%%޾;bԩSS-AW!6ډ6'(>^C_{zegx*b;DH̯KŹk֬?ٲeˈD"#K~yXXX/^KAǄOE+++	Md<bjsg4i¸L*'0dT9$#MU\r̽yϕrssR
-$
-]-xSM>sls3霌afSwqnsyyEV^---www#/@~1n޼)''GÑK[[^Hx@PSS[t͛/v2>bUZZZ\n# PqD899TF|&6۵7}}[={<p.ɹY_3fy5R7p_Qcfƪk}?aggY#.ESSkV7NNNx	off6a)S;z!	3޿:aBx6-)el49AN&XWS]wʞUFPh)xƚoFu)yYٌ:E䨴oN˅f܀Cֆde˖ǟDӱ#liŋ;߼yՅ 񣧧'פ[iܹ!!!H@ ^ .55`ҥƿgd0>SwQeee`IQQG1lllUeiso}xs|9oO/Do۸uޞ%C=wh#Y##uX2[gϞjVQrƌ/l/'CCC,ϟ??<<aυnU.bIFxkkkvvvJ$|?THY|Sis/G[[c;Pu_&d}^;TgUϧGz+",h<jvUG->&16(!?^Lt.T-{0'9bee%$$AY@׃,--O:H_˗Ϟ=<9994o<UUիW!@ JjkkO<e˖e˖ss;SRiVTTܰaLlIAڍ9dz8M-==>^r+u$ٸ=fõ+"J"`.5ZZy[vKjZvr4 /~C^E111is[ffb0VV)SX[[S>tlB|&^ǁ*&MB}{kxn-)Gk"!>Yv|O+<:ASC4ՅA"sjoͫ?%%ݼ6;P_mt5Əgxi#~ΙAmiii֭SPP#WqDtM/僂?~ގ es玾>;;&//ɓ;}t//O>!m#@ ǏgϞMNNv3`iΎCH$R{s>AI-ԾZ1&LxVMmEoږu""Kw4'#ڕu[뿍Ɠ.++Z:3(dĉ|шr&>+fcc>g>))񢹸ͩMt
-KIexgggP7o6H
-3;g83fL#%yP<<SLLse:aĉ}u|]Ic9bZqإKx=iG\Mdl\EEEG,IB?AXXXGG'==իWH{_{{{/\PAA!((hΜ9SL		;wڵkϝ;ى@ƀZ
-e!!!de18CxښG6: pמa9sxkSܹyt҅wo}ӚjcW	)G,<r0i&<@7-;~۞8{YG35Eh-X{nvvS42F#֭Wĉ0(CzE8^^^POͻP
-!.W9r:)Nact	:%Ur&OfkLdmU}wyt<[-f<7J:yH< A4m9s
-RX0GӻM6-]21ݒ8pO:GօlYYYZ'00\OOo޼y߿GR@ #8E<{#p?ޘ<OGj*mEElQJC}˝ԁRk?DYXC\0oU:Y4}AikϜ1}Ĕ)de@ am~wB-{ԁԱzbK64Rc,wAsjpج^S(:SRN88vvv+qiѤ
-%|ARWW"kO?u6&CP_mUC:3fL̞qPV緡^p@c^M=C3q&%Zvj63YI|̼,O=}zLΙz̰w\[߽M X,^q*R<%$$<==<x ^H;_ʭ[%X>uԜ9s&O|/_-Yd͚5Oi{!49r劫G$o5 *Jprr^-^uXK5=sқm)̘1]NN|ɋ/;:ixo=]pΩB@͍+7~;]tu
-525f>_qsrO>i$%%hb&%kw?`Ao@{}%B],<?9O|HCM{{JwrTzG`xVVWgw/ V_BKFw-XlOtsQQQ,S			]6??ɓ=Gmoo9pE"""z@^@ ?A]]͛7/##^.$8<EYY&&&??<ZS^8KN㛨*RR˛P'v%Ӫoٞ8u5+K
-k=<<v	oӝ˅J.~f{-[R33'@AWC:SgΜ	~wccJt充6mbgg4i|>|^-|qQ+VP[ܽMn=ɧn=Ԥ&S]->F[zen4?u)nz;`Az{z"~}?kR	h틀F~_$LMM,YB*l\[x+!!^ϟ8>ϟ?p?O>M;v%??<77@ 2,o޼yIII?? LH`pĘL===YYY77o
-aXJk%A]v:UVCd9_>RAo 5ĭ^-fog.~@.ٞLo	qM}޿JDlho!CFrI^cHJN.߼y3u?G**%JLL%..^VnGC_>RdΜ9X~7=-bg F&X`P1fq=ř5[eh-ϛBK<-2̸w$箖CZ,Sl310:zD3;ݖ\yyx}\!^{{{[}}}+**Z[[v. ಡ%	?O>u@~@{{͛7\TTtŊG&$,(077WPP8xWĽt:t#uԎVMǂO4!u\rh=mˮn~\.N&u$Ϯ8efu7KYXXrgK\j
-u kjlI9~*''wa-0VVVfQg;G.i.#lhIIIPpi_]ZӗUrΞ{y,ἹIƏgb<WSL:|5wδk)]}/Xv-o-=4ӛ_omP)(mʻ7=;Pp֘rJ:vz-,,ܶm?a<lϔ)Shٞ=:"k@ YUUzjOOJ7<Aa-_>
-Q
-}|Zř
-MXb޿Ƽ{(J|9s@SC,cf(rW?>G" 5dTZZ:;-1MBٵk;;;$	L*DzEg@hs';[H.16smiZbeL6Nt"&eJX6řћ[2SmD۷>H=9;zdneQ6	O/3KxlVV=` ?7)6l={OW|O&uuu.]T[[@~E[˗QQQ֭rvv~Bt0>sRNNxPtBcԏxxD}~{#vIJ@]|ʯ=h:z:\<-{:[۶j\֫lcQh\bur%Kdܧ/)EEE:DF.]'.>>drP{?jʹIH?^;l:srTrф;N2.Μ&OP/~ʞfɂ+imf̘|SoMu =rh}zuXG*+***((ݸqi_k;Jsl@ ӧ111˖-۾}{I~><_qEENNN*
-% 3F7BYXX6oRouki%,y^>C'4Vl+74PijnfeoFk''y<<ZGY~뿷kdW-#d$\ɕ<p󂀚ďiig$|ϧ&(xGK >#=[>cX<z3muZ%L{c{Q{͙=P?J?ݚeWV
-5q1P.,OlWӒEӦqީjA$#-ts}2m ##'V'(yf!!!MMM4ŋv=ȯ-w@ LpD.u%%1~?߯`kk{(CS{
-9sx-*2~s>{y,)qWmyYif
-r2˯/*2<:?VGΚÛSCI#AT6U3*LPcFN߳{SAE__fP'!caϒ%Kzo ϐċtL7m4aI&95Ԥ?j}lZ]57hV}J/z^uԧͨb}2~C"׼_ώ531^'.Ƭ^<zvA>@`9TځWsG
-T+`h&Մ?ƍEDD\]]1:|544.]jnn^TT;=/OoO.ڜ\H@ dp޼ydjj***
-uN P߿j*33ӧH{bK+ٌZR'ۃS'"q	wQ[6}ۏ:h颠ô*FPűԀ&]:Vf$=+M[u߇~ȯUEzzz<<<ja-ܘL>2^cTcWY1avvv'l9ӍRMJfMUZNe=-:=8nFؠ#JsU.4<Hp)/m_;eٗ^n)X).LW>~x[湤xz;7<3V3Tqg=ykW}j{]TqݽٷgٿUݭO8!%%hѢ(=zE}V\tMذ2z@ ySRR֭[/涥3>566jMBGP/M6vC[÷
-o^l\u!)#D{j-eʏ O0Nnj|*O6ܪ05<3yVK=LD[dTOgLc.3wܩ	[epL?2!SLqqqc̽ܐK>hڴi[lI8!?ۼ𶶶k?>._`hZg(ڸ:ٵ89XXC/^4#]-gvJfԢ{>o*'؝f)ƽ>XW"1fj~iIۛkgU~ P#ĩS`i@/ڐ#++KzDA{s܃?H; _@ iyeffŋyĉy@~zcc㤤TĝpՊF:XO8Z"\ݥ%RlF,|u\Hv \^Ip: qߢW7N29(oD`koS=T#mTIA-+^ ->ߎM5;;;K]~>#nj<IbccAh	aPc8wvvaee{2k?jّ|c;lh	STSR]HGKbULjަ8jQzyDs*BJொ2㸭n};s]\j#{Tr<Mqꝷ}h}Ai!Gm
->_<	۪ۛ`޾J177_bz%DCP(s>}7ۓf{ a޾}	"̯8<M99ʚx<)iT9@IUEXD`gq~AV	Vӟ&>Ff[w/	Ɲ!<%i/5dkc2{jJ_;͞ŕioL|~_`mm=i$...[q8mh666%%hb"<==g̘>"w#}O߆~|MHj߇5F$ik!lI{5lF>5-uQGDtGS'Zi8
-P0KEՒbdddqݥ[*k׼|}}_	Ɇ8'@ piҥ NKC=֬Y~}oΝGVN30$Rw,JNi9Ԭ,
-\Th?9Hοq%b{B
-+AI5c9\O^#\389wδL
-ƏojjBamޑv&;[WWw	1HmzN/''>?6;ԯ#Ls]ٳgIz%B+pN7#}{2&@{YzN\\\MA<mD"QOO\\lFx*Sv77{)(f^ygϛ/co!{v{aMd?EY۬K=4^#VTwJa|S1fL,ZRG>DbFZϤI-|`4n3zdܹ,,,rrrw_p|(-[dee{b5F2'%&&w+,--w؍g8v@ 8ׯ_RQQ	)(&iOK;~.=ϗH̥Ƙk[GŹ䔖^UK޾z|ňiz<,=]0)J|y2T(c+P!j'bgM2@7e*6f{<j?uu_pwdd`V%ߥWRXQAAAK[#~@"V\NCA{@n
-VVV|rkk+AG;@ inn...޻wCR(	y}}}?/@f6]9lڝ{=(ff2OQ<*?b	͚7o*9nn2pb=SJߍa'$1Thp{kv4Ζ~~~f1&ۑv>;TEtKF&,YLDCA_/)ԮU9t>ٳzzz|||jjjϞ=kiiA70lO= a$eee"""RRR~~~1~殤$JfBlRWKl-!6Wtȸl,μ7jV{IQX{.\ĉN0{
-*7+YO-\hCRgKJBBɵĉ&e@(˳tRþA^*LUV@0DFCAu%9sf֭vvv2\&tuu-ZdhhHP޽{{a"ݩ.77>p@LCCý{BA C&ZUUuϞ=<-Bf6ݿ1BΡsKvث$fe 4;PEgC{Zm<xjz629&9%=W,en&]1񟛙,&&FkfC D$|^R(v9s&˒%K@xnn%eee?>)1B^]#7ubbb7nybu\iiϪUV^P^^Յa"i-|LMM{{rA BoZ[[ܹsС5k(((H9E&38"M6ȸ<*n# `3*+|bM~L(iN"*Ain7ۚRZ.ιc![M0C5spc֤{uE?
-FwguSRR$%%/,,`:SR|hϞ=quϟX#UeB"#:E7Rɇ!ZZZYYYt35544mݻN]6n;@ z~Hqq`Aa!a5,(\r֭[o~3 S=;53<wTZ?̔EsF9qXk(QI'.Xv&R~*½f{
-I=TO勠́Fhg=a`/U|<j%d[xqȑ<(,*:p +++777b^b:$0'Oo×O)_Јϟ.\KDLo㣢/%%emm]TT[s6@ TUUm߾opOmvvWy4J'+NX<3w?Ol2!lgg촉wLkуFOQycI)}=#G/ؼj+VJW?EJ`&%2!|||~~~M99H=<<hEϜ9s˖-"4>-|w9ۄ	,,,>OACGBxq+ՍX.//?ܹsZ[[aO.@ B':;;/7o۶,?-3yBqqqQVV:.y_GI-oNGW˝ήڑAs7;l
-J߲D,,,ӧO_4kάI˾(1L #A3rٯ;J#ɥ5f	򕗺!~I0*Ro߾|<:Q(,--O21x	off1yd_>>P.MLLL]]GWt{UUհϟٸ cl@ = n[JJ͛SS;RS,*:x𠐐SY]pLcD+OcRf色#QdH|ϟpM5uE<3xƖEy=pdzH٨!돍Wvة-pkhӦM&L4i;
-+ÀDq]~~PP(;;;6n܈ͣlj4
-rɠ:mm̰%
-ߞ+{(sb}iXm*vXc5ӯQmc>~UVb|%%%ǏGAIph4ZKKTgeeUTT=ٳ̡d@ 1۷			k׮ܶm[zjj[z:#B-f}}4#Vҧ7!Iӏl{^eUh>
-K$ɗ#[emܸq3fΈ>
-Y+uyb?/.=҇!t%+k1<xyg#~0p/_M0y4EFF˃T{"t>uUǁ¥@]Hii]o>U4נz83xЏ?,a#aizt߫6pyz$z7/ǃǇ~3дٸdeeW\vi/t<{X}d6{iض@ ի'N̜9SQQ1#-9;IPUUUޔt\i)|87)WX#T:Ksᒅ1`ΘNxR{R߁ӟłc!^#Fմiiֈ_-L(۶m{OSNUPP`eeڵk#qCh\pB}ػf5Ce5cg@޸ߑQ1DClSϰAg0Ixr=C~5L>|IetI<##KjkkP("@pa>hG@@ @ ]?RSS$$$HLy[N__5g#2>:xzmM&/on'CvHIEZ!`I&-Xpv8䯿o!rfN}jc宱36ˆC3++޽¯8ݟ-LGjjbb"x?^FF&utGrcWb/̰5̍GPh]4u8&l=?=E=Ē6&9kx:/\3booOl֘;mɓa@ 
-ZRRRSSF7~MH`p>//&&FNNN\\B5 2Z(y~[	n9ewG<wB]]8\z
-kl-mlv0aLm+4EJZ0a~69#mHЄO
->X/!Q}M3|>;HdC-= #CGGS^^>22|"Vb]v!p*))yyy]tv`}`FMMm( 566={YVVg#""4t<OTTZaaauFJ-uQxyG-1&Y׺:vdrJ2'*q={Bx3{-s6lȾJRK߀2h }wzh"b9]Tjk<|0ၓ/''E&3iӑK5III"ӱԿLGӧOo۶MTTTGG'&&ɓ'MMMH5f<iz?ж@Ɗ+W WZB&DSRRXxThBg{d	%Q	V?tcK,wKZJ
-]`#./I}9nKDo2$	0Ln8F@)Ozvw[ڪ;^6yHeܹ,,,)ʘ&))Ɯe˖pPP/c4&jii$33˗H5&eܸqܽf{=	Uo>|,,dL7yRS	땔_|m ~2J=l{&"QMMW{2jb˶bm},Z+K9s&;;&mDvlpE#P4T})>s/GmM՗HLLJJbL§,?˖-ӦMU/^xϞ=a
-"=.[ܶŰa{ІhMHKK1nmf8n@ C ^{SRR:ruBOe
-8::|AچC<du*s8{49ܕM;^>.5>d3L6o3gvHf_ԩS#N%܏]xhBK,i~C#/.2L#VAɥvPW,.U09kiɒ%!!!y=(,UϞ=ɉpK"Ucl[[[!!!YY/_vvv"@Qkjjf{2-w`~l@ CPWWw=oooZ
-pP(oә3헢W<T^lh[lES]ќ+ .tMj%0×kW`/X<4vvtI(iܰAbFRm8TMY)]#_l̤h/)gggP)ۢE@TpCc@A}W8,k`` Y7o @;4h=]aO.@Gkk͛7TTTdddQUI~x;::>(yC!F^3$/iSa^Á1&NMr(ō`+X^\W<foSFi[!)Ur$_yF(ϐ}}}tJHxPXK,Y	cɏpPPL(b%t%!!!//Q\\\[[ajjjj}{f{+=HSSSwwgϞ!mB;Ν;Gwppۙ)hy333Y[[\jMF<d*=~x828$!ZckVd>c_ǎ:"wTam'i?HLwYF
-l`w}LL̈9#F`k_Q'DKeG]teeepEp1	'ʾ},X 6m96'v邂8lff|XXۑvy   
-Gr=dr/w?|@ :v옊TF&yhyvvveh񈒩?6ӘN*k!􆺺pAuS;cT7PK6N@ĉmܬrnhk/[!J@ob..SF_@eȦzhJ)}gd$3og]I	%W544E|{
-#8B///AjMMѤ
-
-owh"33ԷoA{ C !Zgʔ)24l;#mMr ޽{%yyNaΝ;׬Yceeu|NGK*Q$s377rf8^04H)S}#jm7cnF`oEF`eeUZVWw=ԩSKDgߏH#?ked(MA#͛WϜ9(ܜm	O\X&++;iҤ'jhhwPPL"C\II} L)A@ ç_kO.nnnM@|@PWW_beNzzGZ`^P(nnnڸqcA~FgK
-#ScV77<D[$£v:YǞtBa֜Yk5T6(SY.?~ŋ|br3fΊ̼;Z#Q{uDb,\!m{O̖+i7mĠWBBsvvdd$x|@UU5*1\gf6!fggnذF?x𠫫ig>pf2|f{a~^x#,,l``@&gv+V$$$5f"32k"-UIdXJ!܉³s~~6s𲲲i8or210~<eK㊻lĉGgdȌrK|@˭pW:|,9[DI?YZZN<][[aυ(J^^\O3xG#ƓnA!rUc[Ș9&?6WNNnڴiRRRH{@_gϞ>m>py{{~C{PLL
-?3f\+9(+1~xMM{w
-Q/]&ȇNpcd2!cm-»GG$	?#\	qM4QQI)BB=6v:b#3#}
-≝)9?~DLQk	za0-YYaaa4%%%CCC>wAwߟb8n3tzg83DQF!~]A:}K^?gml6nܨ<pSrǎ---HA_xSSӟJ@ ?鋽=FA #ŋ%b
-w
-S= 8HM%
-
-
-˗/X "5CEӵKW-&f02`kKY/ћUHx6-◒U@uVZPPC}&\j۱~FPvJ18OS:SjYy`~=')kʁNII~4MBBBRRRzYF/xt9d!(g~;w^FF<:K /	}ݘ֓kpfChxNuioo-D+Ԣ>vOt ѣG03P`\IHHatDy8]$V^|l'ue.;GMsǜ:Iv:v˖@Q^!;֏
-Πʺxj㸭_̦<][.99%+aO+]HH<3<iϐA.Ж{z{v~KXΠeo~凖|o~eEe|W17SCWumC8f999`ܞ~\KNCg{hm{899aO.C~˗/DPUUUp29;;HBBbݷo߆ٞz谚drKo,]8jdy£X_[nn|*0W\N,z(tz+..?s\?q򔩡~ۣ1rh>Q~:%HįLfSCmn@@
-mKOgأ@xZTt5kֈ;;;_pٳg_|Cmmm͈k0Ǆ2Vd{c{D/1g߿C	zUd/Gi@ çf{ ^+WԌ~Rٞ3g3rv[6E}-[Rv)!hQ(""DC3:ZDQV-Zn"k7w[Lm59;<amm}Oǌ̦ko6_󽝄̚KDrOz*9tk2fLMN+.-baI>uvɓe\ʺ֝	)Ȍ#	rbJdSpwu>|;u{:bp?3Jͅ~޼y"""%tF2988X]]]RRrڵhH[  P͹0x.J3 xÇѐ[Y~ҥޔƻ=Ӳ2+++>>UVv>ld6|lLlzՄ'`ɈĤxy+_IKFoA; Dx=8F@D2䉋w+|A~Y|wro/1ݺY}4%S(!!^P)>aI9%&&&,,f͚bcN   nhka4nTi ۃkjjrKl 455]}rqqy{{WTT==PJN>wʕ+O>;#03q;[W3!|fqd']cKT/GO{9'7gD-2{V7[5JC4Wu8uPlURq7v>שi43AA뛽L켰ݻ[JKŧNjjjZXXSs<  667y9rd֬Y  ?W?'E_ 
-۲6oٲcV>%$TWW;99Lt>xd65GW4L~̄̚ا
-aLĉ-֙oGI՗]5-|].̝Ou{$L8O(賯	2]H1Wp7v>_;h\!OHά4===C<==_2p{䦒HwC566   #g[Çg͚5i$X ! $ٲe˙3g>ۃ:۴iӜ9sz:3p?2Z9)
-g4~'3!|t|=$ǯwKA!Z7X}}ԨQuL9I9y稂[_d+j.AVX+k;E8f.FJEۺuk#chahholl z   ր̚_3ՇZ  0r$$$叟ÇUUU^^^rrrRRR6l8slF[=n2y.\x1Zg>lY͟ww£]beM8q/,q3؝{mLB]Q[4[Ё#dDfz9XQ	+4p7v>kxy[
-޽Tt9]`nnnii79a}AAff^\\܃  `ח\  SSSp o^t)  @]]UVXA"Vr-WsqvJJǎlG&Jg"gA7T5?]b\Ὠ{&ɷc7GWZ95]d]P=!&1u)SlE@cNwZk6|"ȼ3W(%*QI_IN^D.ZvF!:I$`hhz700ooo;  yzz>!!!}$6_~ 9Z: 𢧧ŋh`nffa1U5558(n~~YubnĘ:.ccc%T/	Ycƌ]qgCWkZ	g +?3X9+Nnd*v'߸FƪW-DeT  BTT422ҥK0  {\\  "s 
-޿̀ YYYaaa;;ܞ%%wj#>dBE-8L_3Pਸ਼cRz9'w㥤g̘1p+Ǐ3fʙg;LQ&͙{\A ifJ܍ϼ1ѹ%kq?L֋-ZlYqn.#+>rJkk+I  G.$$DBBbeee}
-6gĉP a9T ޛ7o߿____DD<--DGyhh(''`DDDۻB4{8t8JZt2~BJN ͓킂|R9ٹ<:9Eۣ
-9gO?]pA̍oJ-r30LrT[=&ɣ-[kxiiܞ%+JzzEA_(++ܹ  wH$X5{0s{   X><zh߾}BBB˖-KMM}_PKݞμ<bPPPӫ̨l{AYt
-WYZʔ綾sB^__3OR*L&_X8j(t6aUPǛK_uZAzb^Uܽ='&:76%--򁁵?()qss8{lGG  dߺ	;   Xk׮'$$8p@CCCLLϯ%H:I){h)hdBGDS7.)l!?$o>}
-4Lo}70gYS[(Ttp߾A6䀀Ӌ⢐ 1xL;w
-߿Hψ4ߛrKAAAZZzݺuhSs9  &
-  0
-_( yΝKN>]RR2>>aՃlACCӦMO~N}\l*/ &:w]=[=\\u69t/sFϘ% "t9&fƫ4&N1c>CTV}V<Ncq)y-Azx6gdp#z.*snYL8  @BBBJJj޽W˗/{xx,X`֭+,,|   ?,D"q5Qs{ χW Cccczzٳuuu_0:|77OL[ã]W2Od;D?5b?iҤQ1?DOgz|ȿ4n]@rMCFq'oї4A7WRpwh[}[OOQ^O9R{KATT77wpp"FZ=KK`AYYJJJ^zw
-  `M>lll膣㗊3S=  P`)z{{<yzjŋ^pSՓ#,,qƚdG̦kq|.
-\ϟArNFX[˓*Ϡ7$	:ݕqGHfÞ;Q&\_ϻYmIW~Axb^e9rjK5=|c*u',E.)a䇥{AIJ;;;6QD),  SWW7x.*C O ,Ƈ>}gooFwY__6w{(iiZDDֶV5_%ENIU#tdSh%redg-~'"i[N,FP"tw̩. vn}sfcOYBA
-x2_V4a'S3@ IKK{{{,)a)M GFFjhhZYY:tѣG	   hnnfccz;:cs{&Nn   ӧO
-
-lmmΝ;ۓ^ZZjffhѢ+V:u+1&鯆]]ש<~$BxbVC,TPti_O1TY{VimJ5jiL6n?2)qQtr`j#7C߹
-6~1>vd.^sdU]R͍~8p͛  ~|<==1K'$$db>  yUaa0IUVV~dv=X`Qqq1+a&Ƀ֖Rկ*䟯37:(%71Ϻ9VJIGH\.9ӳjcȄ	cǕ_6~x	cݫ;oҕUrpLe`6oY&/qS3#ɹr+,,֛RTͭQ__ֆw  `8880K*8::~^؁  * ƳgN><o<~~۷_)+A;:w͢E-[F">vd>d6n43Ϩ~1<W!fBYz9'1lsP˿WPFyqLYSN=zmuibчޙ+@RHLyR:9(`c;<,+|;Sҕ~T>fY=yVXmff6k,II?  B`SwC$X̅큕\  |`1zzzZZZ=2
-
-
-gΜ4pqqZlY^^+&y`s6o6ؽ;Wvpvڴ~M86vX3qKJ\|BQhxUٮk߀pwJ812C\lQ:O0&			yy=H$A١ܨS[[ގw  `-.󏏁 nj455UUUԚ5k
-)錟)!ʕ+|||***=x6No]C6c!ia!MjsyJ>m/YƎknG6̙;_BN-Ǆ_rΞ˾'sFI24{X=(`+kӂDdb2mmm988̎%YY666ZZZ---x'l   cs{`%  TXg+((?~Db\tmJJJxᮩ]P]~S9)$o_I߾Z1Z%4g#ހǄ8qֈbY-;xVCUj~qyɉָZL&ۥpE$<yr͚5rrr;v(//okkC	  r`u{Tۜ  X7oTUUyxxHJJ
-\2++o`Ű-o"ݹ###[r2Zt$T&Wd5:Q?=^-aƍsߕ`b1~s9١c2vXYԃUmk5+]mOI(`{GC#bsC~hb&tÆ
-_NN.66AY(>VYX~zQQQ!!k?~T  PYGwQaG?#G̚5  >
-j׮]FFFzYwC_ͅh܇D1^𛌅0nt4OBֻ}3m=zڴiWX֗Bҷ0jԨmy#{]P[b68z:Ğ{s{6*;}lb&^(CyHdX}I^^^>>>gg碢7o   쇍zK{>  h `5냃
-n0n֭[{QVVVPPko){ttD9B㥢w$v2c욿}K';L2s܎#6oO3GQts?D:wVQsZ[s'S]+**63XOFՒooolY+>K4   ܌mY؜4i  P(]]]RRRiiim==@C]vk*=h-(0;=?+F]E/$!5W~݅~j`֒أso㶆UP7|wS^u>;[7~:1[
-bbb	n*)aӛt222>Y=   LB]]]HH055E޿gas{ = ~		oϸ*͌ ,,LTTҥK2r3$gz})rN݋[A/6qzSWDcoLqб9n7eʏM:90M1_ʭl'KLwrrr-rqqi$;wDfff>~   +   `)z{{;w:tH__}jhh$%%]~ŵ)**񹺺^xVa82vI?!IcX)M[qؼ
-P2Z?u7n`ʮylj*w?'SC{\\\2n1)LNHHPQQ={QFFƽ{   n  TXwFEEikksrrN``IIOg!;;%%EGGGDDdÆϟN}l:yUB|H=C{uz%zI^R!:rԨQN^qg>޶c(*1UA:tZ'mMu뗷~1ۈl}}}!!!gg[CIMm*.B	PUU5$$͛xf   ӓv֗v8q"  AC-\PNN.00"SSSѠɩ
-VrVɍ2wxҪJJ>^	!5Q0~Ikq唡u%Caa|98<uҢ͸BL%JWjQam]I	%-a9uIuuu,Xw.tvv¬   rJbb6{r @@_|^ʲVSSC㝏YYw{>fg.^x޼y666'N@#AG̦R.Nʇ[l]6]hkĞy5?;B:VMMvz
-} ^'a*}*+766FUTdޔBQQQ	
-
-uVgg'Y  աnNoj|s{   `)z~nn4>ݵk׹sp؁=.cVVNN''eii)+)U-uNկd/I?tnI^:v월}$I X01FJ/_TtW-@wmmLF(١sγg.   ܩ:u7u{  njtww?D"		mڴ	}2?촢-[,??ܞ{OG\2BWދ?WAG$_M:9 `}=ҹ<H1DV~0z.^}ӻsrj>feTãWQQ[X  ;!!!h$!!=  P`A={v	vvv//Ǐ`7%Ebkk+$$dbbRPPә.]%BSd܋]b(CGpPA~.<HM1a&6nڴIXXXGG'))DbPIH+_n'''{ee7o   @9xYY6Z;z(  ~DD5k֔vz0ɓzzz}+;:2?mc-md(L6^fJ4-
-QL8۩B#\䀀WToS֑	K>E~07m$**A"1l.P~CY:PC˗(❌  >0va=Ժ=  n466;vUDDD@@ aۓ\QQaooΎ}ާx̥׍!ld9WϔhkݏsRTSG[ HޙM:rO䉉ݺY}S83ˋKPPpϞ=a(UnnnW.,,|"fxgb   =VrAf  X
-VQQ)//A$amII)//_f//r\\\{KރSkd;Mk/o,ss?V_OxHV&($=H*+.Ze#e'3)3J5^^^OcKwN-2y֭(ѡ ޼y   L|+u>Ѹ=  p{ >>>RRRk֬!+A+""":ZIxONo#j+s.+{CMEmW=ts;_cR`Rۻ  qqqoooY=wdԻ}ŊwޥP(x'`   A_ܞDMMMښN ---~~~***}4^\#&&&//WܞAjٶXHpvΑp OS7nˣsij%W9A8gpC?
-S	}ma)W^377?p@CCCgg'	   HYYYȷ֨n&HFkZ$&&8saDK`A޽{W[[())9|p[nڱc
-OL%Jglp90|6ѽHz9'{t>װ_uI ?p=rjY[)*sݺyLoo߷owrrzY=))䰰0559shii%%%<e  X8q"a0͞CLF#q{3SXp{ VB)))߾}$$\rۛt;*)>\\l^JN0f2	myb` YBڤo24,IInwPW宫a*u	ٳ---+)I)ׯkkk䦡z   F s{pYBBR			dC$#988<==Y= `A:::´tuu###рU?Lh8&%%Ͽqƚd܇̦\w_ly!p^KqDm~'eՓ^EO\lީnL6bffE̎H4哄%%111(ihhk/t   n.PSSfz5;;#lll%E fsN\\ҥKuttoܸAIOgZX*((qZ3XYiBs1.)X7C/$|j0#rpկqz:PE$G+L&3Lz[-[ҚݻQ>;   +4Km	\Fu͔hyu{h,= u/Y/_ܞ)11QKKͭVq-4t.Vm͸K
-GuKZt{M:p;oj>YOROgFbY=H٫WWRR񩨨x   `(3iҤ!477c'y W͖Y=]Z			=`A߿Fd򾾾/^dlۃٳg{Sp2s&MyڴIr+WXKS~D=.0-\0UZz{Am_.P2M>r@Taⳏ}64>c>Qk;hg+9aO{~V0R<ؙǠ4Оeaaz8ydKKKOO   `(_PK@`ew[+PWTa6?=tx- .X
-rTCCy:uo%ç!abb;;eIIIOgCWRoW,1\rܸ1ldVlC4Ems$}M_jvPpڬV~V0zS.;88OLddY=D"q͚58;;;vD   Ç1g\ܞONp)++:::vj}!4Fp{ !>>~[l`S||tASSӒY^J]QOnizٞjxw}PyŇ\THt,/p'Ԏ^<XUrˣ;_=a $FӪE([v~J0zS6[GRR200aq'D&%mfffcccgg'މ   #G̚5k*̓t:`V	ca)D"Y7#w{zX%c` ɃH$իЈ'#nO\ǬbSSSnnnss|p{^؏1ڢitĠ/1Ko<ǞKQw{رJ{bCI6/;*>+|PEEE#""1A.Q EEE>;   5{rQtUBk _0lC)j=X_ppp: Ϟ=#RRR(ٺUVVNMMMܞl̮WOC\*/p(&`oݝ~膟.hCuէ9jy(}_
-z36r^)||\Wqx]_Op~y{W%rZNNNVV)>1LF222vvv?M   X_E7b`˸{^6E]5rk|5@ЀiE
-= kDwwGⰒȆ"Yr%??Cs2:E^=5fub<ا˸_?e$tc<3%%ۮN_(IO9b¨QPZ=uܭ5zǻU]GZBE/i?_w6DoXTTM[]Oj<%#-76q] .,Pٲe#2791y7%knnyΝ^+   '+SSSb?HFݞtt{@UYp{ }>|YBBB\\}ٵ3l6YhZbbb{K>XfSǻ+vx͚<yqcF[Fn1fh[++0!_AbVEQ&S Z78m$tＹl&/cfQfٿ4 cG~eSyh߻G8#""׮]{7%1ICv=2eAAA##vuu\   \d{raT{:	n_EEENNN666999FIO?qℝBxxxksL1wo޵DDxO?~L2AANs{sSqeEi\+z:}?vl$%ɞm)tDxi?:Z|#ŻWa.Nk7n75KuQ'58N0z1зm***UJJ(iidt4w\555IMMM{{;L   a<:[=ܞa,= 
-ǎsqq111!nOjjeeƍbbb>u=e
-}Jo5WMu7Մ83e_=y4mj	9)o>~إE(}y PQ1vhr/oM/a9^M(${R5_n,^EVcl./ۀndFMl1cF;`軪pիWW1ꨑLTWW_hr@@˗[ZZN    S@nà'_YF<tu{LMMaX;w*))񙘘$''߸qaVP[[yfQQQ55{޽{ _ݮ;ɍ¸h7:Evt`SQ:nl~)5{l~}"
-cھh׍!O8+$8;Ъ/Æœoo8DS`-8	+6chБ|r7NSRS+ɱ<<<جP   f:|			SBBj|5j'fX
-
-
-.[FROݞd4^۶mjv=6iiN3$$8{뗷we7^KsI(3iOi?f&j<avbgW͟Qj6ؓؑUTkii%NaVOҔ1%.PCl
-   0_ T9$$16ifX777SljjGb{fQK4ۃ2&z
-ՒBN& L= kQ]]%//F,		v{ [oooQQQ~~[^t;-^]]鮡C]#/qd]Jgl[W}*Nn<J^G.t*)X[>{zSC{8~T}<esfLۖYSB>{
-K1IFzaǻqؑuT>.\xqRRRg^f7gffZYY,_^^   |J!~YY=àH> ]j?.X== k͛ڝ;w		\LLLӛR-[Yy2䨯+mG5cd;[S2+Rg}eEf6_cBz+?k|hpJHKh#wܰ^U8qd}[](yidرREJ(/Xz5'''V_1VJDbNN;Ӄw*   <4gؠw/$$TOOOZ[4G111v!6'ȗ@H58
-	J$J ,B<<Jzjjj,PVVF)v{>%$ܼy344TQQܹshh=qdД)%Q.NtBPmÏ5>I~ឹS>\&%Ɏ6aON|i+0_8q:'}ӊ3lg1efM[kգ1Aj)*]b77 $HϞ=CyT
-   03iҤWr=  n477_r%88XEEeJJJgϞ[ZeddPܹs9uƢ?<z5a{ji0cgIbLĝ*	Λˆ'FRQJOYz/m]1X''Z7=ا{<=ޟ-mM]DBBB}zR79DζCɁ*77Çx'Q   ʺ=C n 0 ===uuu111FFFhk׮.0l'eZGGGkhhHJJ<y3.-Wo̘>dʔ	KNwy7u'On'%X_}a`-ldFC:ˍ
-KtFkd(/(ʹCXf``^=.LVf!lܸ1_#رC۷ <-󴵵MMM{nWWI   `R`n  TX󫪪ɓ')iiRT"(..fAE1CS'+voG6ÚOf[6iܾKWOC}89a.ʴiCyh*_M:%O{nɘIz|װM*Ħ+LOYKgU:Z|Ո=zzEkʎ®Y'Jl"...))PZڛ̘1+u(  `mm   |߱Q  Iggg}}PNUUj$MMYf-Y$??8xY[fݽ7fpk)`'ֻМpwQf5_vؙ3Q{${~ð&vŶ5G?Xt͜1D:[tx@CsNvv6()aXYY.\PWWG	|7oD	   0/G  }gL 	sNFF͛>ܷQWnOtA]]]4\|yVVVw{ΧxGn&S2noFT{nfp-b| mz7n_V-csz:Ƹ޾K[M?!ؔrSmٿI]O._4?JP;+Uɞ={.3hg||oJ2_MMM@@`ɒ%zj[[މ   `vF;  t]cl1kp{ ֤ǩV]v-~Duyyyh\Fv,5m<fopƎT۸s֌铱Ͷ|x)tZM0eB'RwԢt4Ī:x`EPYgac"M_>ׇPw2B->BgےE"*2Eau;066VEEѱʘl1;ŋʼ.]jkkM   ȑ#_  _Ì3OOOײ?%驯̴Dc:"ƻ==fff|||FFFiiinOc^ƈ\4wo7[---rĞOce`wVruɍ5Lײ-5&N~_h"w*sr,zYkۈaTn;}E[]^yj1>0E%(03Ǝ=u/[7k>ݏKII100@GssBJz:#RA||orrCiihh( XpEEś7oN   qA;@_ӧS9Կ|p{ ֤D"q͚5VVV
-TFrsI$QRRRZNX1R
-S89ynѺZm$R:c7;:(w=ឹpTӨB-D|66?,Oj6g߂4>
-]Uvo<5?E0ѨlC֨/gb^N]:@J233^|yZZZg^c@OFƕ+WBBB455}||Ν;;   |%@#ۃo/EGnذADDޞD"/(`)>cv6LvppGýw~&"yl/szp/F૧!ɉ
-12v)S& MOЅ:2c9[`lG?kZ^ﵲ5c.mOA7l"QYi(a/ZڢOp370'l.vL9FFF$6鋏]Rr!SSSdeewq/^@Yf   9|0޵h~s{Ѝ2GG5P(UJJJ\\|ժUh՞=?nkkrHXX؍7Xa%Ɛ93fڍޮntUöDG(sExnڪ=@<t{l[XĞGcnΥ<7[[J]CGEj9Z>u&?k_4X:
-
-LLLL"))RTĘu))
-mllĤ7mT^^[z   o:'8h8Ns{hqtto_5P(/_D_^^^hgv{XETTTEEe׮]/_N=}WvYm2߱=
-'7x4P2VӘktӇnݾ;n]{ݫ0jc	YP`vơU/_}SLy/ȋzW"'FIKDׅч첲|[[[55i~Փ\\L$$%%6nXTTX   |+3iϰSSSb?~= ٳ'Onݺo߾=))555^^^~~~}[+Z+0dܸ1j<z5svo/رW<0&':uR'ԝ7XKc^QCVq\6uK
-i)H۝rYHHHUU5**A	N)--FXXXBB!//Ç]]]xI   u%= Ā*5y]YY<;;&]t'#nyyyIII`|||.^tLLF۳wۗa֪mąs[WEW8}'NQ￹1
-`_?D<&cاbWS֫޹L~4yرxJw(LQ.ݴil@@Y=
-mmmЍ|	   +큺= 4m4~* ٳm۶ˣnXXXmmmnzVPP@-[TTTPRqu[='O>ӦMr?S9bQ:c+UNSbf"Zw.Ai:F[ϧ%r.37׌CI6MC[1QFzxKXE;l?(--MIa!R$//˓nܸގwv   PO0NOOϟ?ãxŏٌz>tRPPܹsmmm)]imї/xmޠ>)=\3ɽ[~]Q̫ul(5̀=
-kMZ5j"':)|Pkz:`;`-:XڪPOB5_>3
-H|;7	uFO$R_2~ܴi̿:~ڝ;#h;#y=<<ɔT|;HǏ_^LLnmmM n߾ىwv   \ 0I)= th֎f|ݞO­[899g͚TVVә{j|+U=5<SuߗO_nA?tnۡ$mM7Kmބ8Q?<kmTGc:EF+Smv/pn /<j(lkմrzb3SmH6a_ukkɰ;}m<p7zi:j*ܿ߹Ou-7E!Dh|L޽{)Sdꉋ_#wܩϒ%K<xV"   s{`%4lA|8sbb":ecc՛XP---AAA4f	VVVprr*--Б{zlOfrcѹs~3f4u?r;U
-	2J13hԜٿVR'֮y*p3j]PE]ש:p?J^w WP_cگ_b t׀.xBE!E(drZ09c:2^[oar1!T
-u}ӛxSaEIxx8싈؜ϧ12LCi)6(̃b@Y"(   UA;#eee  }쬭[|v@@ɓ'?2IH{nBB؊+>>+I<Sǔs~~1koM]ԦP|=50&Li_99qs`;jnc<F.
-0駾MD;uܙX}1cFWv۷VKnwy9zɓO6i/maL8NE+që_Ř#**joo."CCCs9   jp{@i̙Dߣ}p{ ݻwׯ_Y| 9;;Ⱦ=		v{<xonnN"spu3ѽ6+e9?vr-cǎfcarY./:89*JIϛvP#P	0scǀ2eL6mofg{Ձy4^sSq	8;8q^Dhkyn:VI	$&&jkkϚ);cVc
-S*-SRR|   Ak	XOs}tiLX
-}դ$srqq9;;Mc\{%$$
-,_<55;t ttD_8*hbENeE*\HJ\:+|->qdۗ>(MCϝwbm~tj;rj*ܫWɢ{հu=WwV		2:}F)ޛjzU9vo]O0P_fZ(B9مښ|voݬ4}ۚ#`JR@ ,Yk``pB|{22ɑ***3gΔڱcǉ'޼y   A= EfX ͛K.ᑔ\~}~~/>u{АСC˗/7oаE1j#Ν; }[c&'$cbb-[+&&ѣG?~V   Xu߶Omm	4񒗼Zhi(mx%E8L]R/-%̏yƙsss ߯g6sǙ9HM.=a_8ڞǋWWii3gbbbƎ+v11cƈƖ-ξg℄M6ͭww.9=:7QZađ#G]m۶wR=Ngb_СCtܲ2W tmEvGM&%MhOSNm޼y̘1>>>p	7n,JLtrvDDYll||t28hР%K\r$;QRsGҥ˂'';-{+)iRSSϜ9C PM.p0id{p*--ݸqtخ]1clذ!抵k)KII?~|{ɝ\xT۹#QzZxs4FElڴ%>~ܸqbz8 xnA8C&X^^~I&u)00pر111YYYM򘘴	&,Z0JVpGu:*OdĞ%vs^2W;g߼9))iʔ)?|x5kO  "CA= N.\e˖ɓ'wão߾'Np=eo~Ǉ6v n2̘1M6SNLI1FE9a6^]qc\\oѺuk#FDFFfgg߸q? @J ?/d{p2eee/^4dgmРA="""9l}]_iӦ<xPpGu4*מ%uԩ>>>b~89<&9{tM۶m{tӦM6l8`e˖ M.p055, ۃ{hx]BBBZn/d{\>}z-<==}U.dөO?=qğSRbc;GFnذ/)?ܹs&Mvvׯ 縓 =d{PݼysϞ=|I߾}hѢߥL6qɓ'{(^AԹ0z9%,,^|WwoT}01o={vϞ=" P	¾ Cõk<駟ۻqy*sСO>G;v		ٺu+="^6ׯ]vG޸qcI\v䨨L!44o߾"^!Eڹ> 	\d{¾ Ch,((ũY>}ڴi#N>ܹǹwr#G,ZG^^^vN.1"#""~=rȘDe63('b;x`~~~EEx {|'/Apƍ{.\_~Rg{gmL܉+=gu} ;;q3/믿~~iu3)9cT9᫯6l_׮]g̘!K.6]} ;}J 	=d{P?\~ȑ#/2doBBBRRRJ⌫W;3#;~xhhh```˖-_yG<͑www֭ۗ_~yc˖+WQn݅E[>}oŋ> !ҵ=Ev=Y͛7:dɒ6jԨiӦݻ+WfffSqؤI^z믿>w&
-o&FGGq]t	j0܎tk^zu^yOOɓ''&&={{  Δʝ\H!ۃ֭['N֭7o|AN$lϹs-[ֽ{waÆEEEt$G<QZq̘1^^^SRqy^DjJʚ5k|ͦM>䓯ZRR؝  k{ Ch?~_~9tPqح[ɓ'oٲE5NDD9sfٲen׮WZu3/;QV+eҹsgϞ=9u'LЩS'1bŊOu떫p {	#APVV%N~:;6:::;;ɿ%;w_=x`//>},Y$o4i B;Eɭ;Ǎ3wܔcTs))p!! 0"&",> Q&A8d{~qƩS֮]ܾ}vډ.8)̱01qٲe/BÆ;vtCǎ;zi,ivBK#9b-Nuvc%KJ;,U#RZ+&t
-hX1-쨹N4O?egg>|x͚5Çoܸ?<x;W8g]$..))w	
-
- %g{ =d{PƊӧOGGG3m۶#G\nǝY$!!66}biժհaF[o&0(u"#y<UbȫԎ5+30KCuUٷr-U_fTU9niYq]ں:uʨZ>Ү]_2AAAӮ깙:eʔ֭[<_WzzzII	? p!"l'NX~1cic۶mGlٲ8f.Wd+6mC51yDnRI5mG꺤+W[F{`4TkW.ڦ[JUlMYE&͚5{M6GFFn`0fΜ٭[7/\pW\q! p۶m< =d{P?;w...n۷g={/?^nR=4w!C[M+|eVeigZӚZڒFmǦ":4nY|-l2o贯ӂH,-b	muرƍ{k@@3.N{zqBݻǧy/Eݛz  .&e{ =d{P3gl߾}ʔ)-Zx|I)X7mڔsv;43U̖Tl-vͦ,iS[L)UɦXߚjbӝh׮]fiv2M6ّlyͮ!5p654>iiYllؠA8pʕ+FW  :"l[n7nacb1FE]6k&ղbvjlZu{~51۲	[,67Z.shѢAyxx޽> pN./A Ѯ\:gΜ}>sK7lp扤8{5FEy%B71EYl>CE޽g͚|%R= ڃlA8d{޸x޽{͛ׯ_???^z͝;wϞ=wrI%A+q`>hРmv}ڴigϞY= ZEzn_z?/d{P;ٳgڵܹs<XG 'NDFF2u;v		IHHpBaaa  ܅lA8d{l=rssw'gڵG}u֢Df0^}`XjՈ#ZnoFGGgeeq N.p0d{P;ƫW8p`KJJ*JLWl᪨KN^|믿ަM??#GYYY^  =`5v*++gm}]xx5kֺuI&͛]~Ib))6l1bD˖-y晠˗gddܺu{  A ۃZ+//_}U>}7n?uԍ7JJ{?$az,ͤ??z\ l_zA ۃh4;vlҥ8۸q3g,O<	pnW>|rriӺwݧOЌ
-W  HlAd{l=9jժѣGwԩk׮'N\~}ffHxԈ<s޽{wW^	\} 
-E[lj7n8qb͚5cƌ	1bx{y"{+"#+֭۱cǌ3tҶmۗ_~O?ݿj4]} 
-\C[lj¬uM0Ayxx/k׺ gEI\ÇϟߥK-[g۷ovZIIW  Tk{ ckAU\\~QFyzzj^[lYzzDD أ)){n޼y@@ԩSnzY /!lAV~~~NNڵkGݦMVZ0 ,,,==lןQYo߾yã}&MJLLSPP  ֒=E[ljғ'Oǋ;??M??p@YlC	{^/}qq4Gq|G  u\C[=Fxz?~۶m!!!,cРA?WÃ	>GddEt9aɒ%AAA^&999nr	  p0Ւ)//?sLjjjvv6Du)--vZRRRHHHΝpǻl k333WXܱcG999 Eҝ\\Cv[Z=Z9rdbbիWyr&$]-vYqΜ9{k׮RC8"#k׮7n?ߥKѣGZ*##z  up0Ւ)..NNN&oܸqŹѣGo+W|3g߮gyF͚5KT[g\%bZҴNHŴbSʷ-5RPU]qk*olȎ?x+GfMVn_+W4>W_5KY߿U.^XXX  vںu+Oi&GlK=F[ly7ݛ6m:hР\=~KNN~񀀀9sر~8v駣~uT|?mezN/s\/KdNu}rʙrGxV4`NMyX9x.[T?/^Xi֬Y<<<f͚% Cs{ lD/ܹ<󿱰˗w=cƌ-[85j{7}3gNטaNbeSviV>MYjvo@u\kdeh0ۋvi~--U~#vMUZ%K[Xɘ:u믿C]w޼yw  l߾]i{?~30eIH2QV)&IyGX,lJ[XVH۸4S rPU*(WGՂr̔C5E96mMNUKTݩJWOg]C~f-T}Tj?nmlV(<گ4-IMK_79sb2rIT)zrҔ/ĴV)3+&N]4!zI8wI4Ioi"y[т%--oIMMM3iKjڷo'|n׮ݔ)Srrr\}ESRRRTT?N4ASOhѢ3&ƦjaַUnң~N;-*ݣXڪU͛7l?N6ʕ+> Plެī{FRH3b4S,&U9R-U]UaիrԎ4G~|UЎY[WoUn
-*ERꖚ2ۻrܚru,/ T\RmL-}"Q}UeT[[
-%W.{P45c&R-툙RH3E/tFO5!&oH~iyrjEpks򫲼xB -~71S2"i<I	/ӟt>~(//wQuOZZСC5k۶m[?&i[PMB6f7>ŚI7nVnIe6Ovbiv<==y777//I&}> P=+e{xϏ>9y/nnJbB^"yZrIe1UnA5G՗jVlY9eIU
-hSՒ;)j\ULNueUIeպݰr]ԸTF.mVզ
-Qcf#nyCZQj έң>*^i?bQUnD?ws޼yGY1Ν[bŻ;eʔٳgQi5^e]iMzq Śak{6RG+El9U}lКT@GVlp#,X0mڴ#G~۷o2yG @w߹^ꫯ	UfsTeRSÇT6,l_Ŵ=ꯚv#(몊**r(^ڳgOoo'xA6m$&&(4;;{۶miiij6џ־rִ,͚m^,kv-ov#4fm_Un[i_ڦش,mCmh6!鷦߈h߾}G̼t| 3W^rrrΞ={SV_W4}IiZ.,/Ŵ3]X9rEmSzQhGa]eAnMՎHզv<UP.)c-m&rkEEՂUS5nZ:INZ#^]ji0ʊ1XD_fU:T5*GTg/ߧt(Wرc)))|A``O<w>ڵk&/_
-/^xZ]x45jhNP~um&=V6w([PPP^^_
-   (**\tK/G}>쳌[nzt{I_aaa~~P``uq&ZMQC;;y   qƖ-[ZhѸq~     n1AAA͛7ԩӬYvoUTTzh      oy[^z_Z    fazh@ma4lz,     TAǾ]=4      LJՋk{      )Cn     ~      PXe ^;䥢hΝTņ!,&T})H>1_[ӻԦ?~x777o+J%хH"ʋE˗/ٌ      N`MGN(*Ң3鄄eEܠ2?#M,SF奢DQVȐ     .g}Gʍ$$$d6]W#͗/󥤊x/RD,>|ܬ}+{W_)RhyeHCun.9dJ!      ggJΖiR+ckc,t*#Ϸ;ce( vTC%ITJ     d@W/QVܹs4_u<E1Tș;=VlS; UY:W:ɉ/v$      'grvMyqة!] #eQt2Qvd{]٦v ڴtar֐sss     ʫYn[ȹl6ce[=צS%]Jm\     p<f䜚n_[L-''G~3q    Zl*rGonSf#%?H۸     @mcwGN׽m!Ϸ~xOiwKm)Uޖ%||@@      ewv#kt~\"Fpӏe̕OݹiuƯUwi+䫀     Zd{$222D/|͌\,!!Ah[.1Q>Y٬_푇*mV4+*ieueJH[     YV$gTT0ǭT-)Aªfl grTw]s     U_.TER/&ȏ;V.拥rIQkꗶEkfT@W+     @sP-']m\      Ju4#?ǚ_     wlKw     ܛV'''Gf.     P\Wt,);                                                                                                                                                                                                                                                                                                                                                                                                                       `T
-endstream
-endobj
-10 0 obj
-   89869
-endobj
-1 0 obj
-<< /Type /Pages
-   /Kids [ 6 0 R ]
-   /Count 1
->>
-endobj
-11 0 obj
-<< /Creator (cairo 1.13.1 (http://cairographics.org))
-   /Producer (cairo 1.13.1 (http://cairographics.org))
->>
-endobj
-12 0 obj
-<< /Type /Catalog
-   /Pages 1 0 R
->>
-endobj
-xref
-0 13
-0000000000 65535 f 
-0000090991 00000 n 
-0000000187 00000 n 
-0000000015 00000 n 
-0000000166 00000 n 
-0000000515 00000 n 
-0000000287 00000 n 
-0000000782 00000 n 
-0000000761 00000 n 
-0000000882 00000 n 
-0000090966 00000 n 
-0000091056 00000 n 
-0000091184 00000 n 
-trailer
-<< /Size 13
-   /Root 12 0 R
-   /Info 11 0 R
->>
-startxref
-91237
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.png ns-3.22/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.png
--- ns-3.21/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-fractional-frequency-reuse-scheme.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,336 +0,0 @@
-PNG
-
-   IHDR       ي   	pHYs    nu>  
-OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
-!{kּ>H3Q5B.@
-$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
-dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
-b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGwǈg(gwLӋT071oUX**|
-J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!ku5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
-M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
-yg"/6шC\*NH*Mz쑼5y$3,幄'LLݛ:v m2=:1qB!Mggfvˬen/kY-
-BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
-+V<*mOW~&zMk^ʂkU
-}]OX/Yߵa>(xoʿܔĹdff-[nڴVE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-6U#pDy	:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F IDATxw\efDp8pG#:ZghZkҡZj['q֨8pp26d6?,6$磏>0rWޟχb        	        	                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                       +{        
-                    PEfwԩӐ!C&  6q     TթSΟ?9p@	 Bg.     ¸SN9s&?? `     @\zӄp>|ua2  q     <]FF֭[]\ObbP `     Sݻw۶mBjՊ}%&&4& ){     2\~]VvE$q86m?~z `S     @e7oޜ(r	!~~~#F			ϟX,h(  ہ     *d4r'LHaF(2D&tfff  l     N۶mÇCCC.!EQզMaÆDG> {     BΝJƍJ?wE#---))- `xh     H,XиqP@0!aa(8q"!u$  s{     B-Z<y2)bsH4hР@P {     B\.ť'R     bz  !    a=  q     T5  l     vf. B       `W     8FJВ  q    ÑH$5[ڇ  l     jk z  =     $22[㕔  lM     8$D"*J&dOdr  q{     F:NөO.7aL `     8rkyʪh,g6Au C    @k -P     PUHy  T     8"Nju:y%a q    ctHɁU*!DPHҲˢ A@    @t:]ppurbccْȲEu @{     JbRyܹROP*V[>  q    %Ĕ;);`E?ָ  l     "JrU>f3z  =     {!j߲E=}  l     "Hz=;VY_I$r@4AO.      (
-BHTTTTTT2F\y.  q{     Htt4;J􌊊"[LV>  `     8Do-aNGry٭0v @C     86jFղ]$L&nŎ  6q    jRw*OvV`f      DEEi4B!
-EE3p=sԫ`T*JJT*E@a     V#""<==cccKMU	=(?z^J$\cccّ q    NEjPd8^ΣPE{     T*<w\rrrLLB`V0:s<3jA    @Ⲳ>.Ŧ<(xz=jP     M"(JD"H*Jyc vZ"## Pu{     NRVk4FS;P%RT*JT*&Pu{     N<%J
-BPXr.Myp0.@bߏL\P]{     Hqyd2{WYIkg.T 76E;@     p :A"DFFV1bS  8=     HGEEiZ\P($IUV`r.  [T    űSq]STڟi	0Σq    cQ(111YYYlvh4QQQ>I$YWr<>>^TFEEPt    pPyZZV:NjZBHdddEج(PoϲCnB0Q<>    D"J̿^;j:sT*K&@P    ࠴ZFQl9L&(Ќ+ᄐh4Tq    caVe2۽~"lg._QTZ6>>MC    @4MG
-Eb xjuTTBPTh炊     pDJy=ٓd111"J     p 
-BT(=?!J˝,=     zhzFH$2L*%?UYf e{     V(9Bbcc
-ELLL?Ef{l98=     Dׇzr\&zV@jZW>n#jcz@!    p *zJe*NV5ZV(=  6    8ZM,cK*űc
-u=       Hb>,4 8=     Y+w|  l     ο^o^C `     8TJ*z^RYV0њ l     μnhVԥMy  8L    @JZj&88X*<ZKTsU  l     "H٩u:]I9ڟ  2=     M|6ad
-Q{P `     8"L&ɪRS
-z  lj    bK{(B -Cu    cgXN%H2sY( h     9VfxVcbbyk  -Cg.     ;f=RT.[z"""C5 =A    `ϴZ-ۇ+:::999>>>>>ܹsVkN1v -C    `RpYYЙ !    eGedNW !    l׭j0-{  l            EEEQeʣR]zr 8=     PU֠  lM     `d2Yttt*q6(i- B    `rymFe{  l:s    @Ua{U# @     BөjNrTP(6^h*W%HJ%-@     0:s=cz^R;c\DDDll,!D.#{     z(Buϳ´Z-!D"(
-L&J	!ZVԬ$N^Xxxu       fz
-ELLD"J.GFF'JFDDXC(^#`;0T3     T:s=3*TJe\\\ɬ翥#p l
-     tzzRittt՗jԿ<==U*U(8`Й     Fi46Q*UjaaaRT(Z}ܹ:|y5 T     @UYzЙ`{K+z^"'''gee8Zܹ      bq;WUƲu=111r}0&&];c: ==     Pq2TA[0#=     PUlQ;/Z6d2k +=     PU7t:]s;     @U=癑dj:22Jx> 4\{      l\.H$z>66q|TZx J1    c)6tUy>[V1$3#C     U= yfJ%FDD<5ap(B     `$ILLD"!GEEjFhdT*Ojz^DEEyzzV4]      Ue̅%LvRT<Y"ǇzZVр q     T3H$qqq:NV;_dRpPlllZT*ɬS}OfK*z
-;4|\     hϞ=3g}-ZcjބS#~>o n    m$ C     Ճi  l     T  8t    ڻw# p	fJRTTJRPۄ     h&}g;x<t J8r^jrL&j%{ہOg     s8d8^6M{     hB 84k6!      jf!    ^h4:N.Alj    <H{ JRTJ2::mb     @P{ BP(L\q     Tۙڥ T*eq     EQ e{     zP `     @U!Rz}ppuga     p@$..N&}\TrVP(0-@     Ն2 T JD     غd= PZ({      )F  q     Tտ T*ez!     
-) VU*L&je;     @U[C3 
-[#+==     PU ;3     U  =     P= `Й     i4@`O,*
-k q     T^ +{3cVVyp4k      ]̅  e{     u=H|  l     t q{     Й A@     UU3 v!    ̅\  q     TM  l     C0T3 \	       2=     P=E? -C     Ն  [     Y C     UgfL `h     "  [     -Ae C     Ն\  q       ]A     Uك              bz0- C     U\       *T  4{     z(B `     @  q{     0| -C     Ն  [     =  q     Tz  =     Pm}  l     *EQ 04M;p    wMh h@,ݻwR@ ]F     U=(p˖-;vl~|||q       3>߸qc__Ç߼y&L
-
-Dˈ{     8!aD 2ucǎ/_V(Ç]F     U\ ЀP9bĈ{n޼y7oLJJ7n\l     @UB,'{]rKO0L$Aa KF/,).\;AX'ɿI vvK-ݒ+.nVٖp8ڡKޯ|1%WXj%[r^vu]TۖmR4pJo%R:L֕=|ecWe}٥%0ܣYxUew]g#>R<-_=VtܯN %7Mt*6 A%V.J;:*9mՊ{Gӆ/y7osϹ$&&\2>>>44_oѢg?!	"L     {hn"e	)?P+D,P*xi]"*a#[Pr%Ce{{_G/i%.|dfJҒZ/TJfsAAA~~hxcƌYhQݹ\}f    ruuH$A(X%,L>TuVd{cIaMȿA*	e7WdKEO.UR>dD[,S5-fdL팵J/dVm$kTe- e*8حsRCG<JM~ٓsA/ :Hҳ*yZo025^3JrƳ؊^/W컣)QȖ<&i׮]ڵ
-
-vYE     (ooo@дiRL"}basR!U qE*Q]zJa#]ʽ,5k-KeJ&2-fm%?[)7(v)"eFqRJbҜgQ}gHU%lJ|ɕ4I%O<v!WEfIۡԩR*n+70*-<veO^n?ƶCV4(f,uݵR<\./ueh4fgg?~8===77йsg@`?     Uɓt'''RPP`4TĲ!NE̔6MLnHۥJҟrkʍ*Hy#e_*W*u[r%*K3W,}NՖۤU|)䕛#JRE"ZUiJ\њe۪仠Z'g
-ﯲ^6>+w`%-UVn[*&:O%\TTz#G0Ӿ}Ё8{       %''>|x߾}Z{Æ2dHPP/:s      =9tƍϞ=[TT߯_{K.vSS       [<|pƍOnܸqܽ{wDRQD;\       `233=Ҿ}ݻ{yÿ́A       abB=,=        v&        '{        
-                       +<4     Tlpݻ;u4dwww	 B     Uu+Vر]vG   t    *),,۷oduӧ,  6q     TիWmۖY\\l6:tua2  q     <]FF֭[_|wbbP `     Sݻw۶mbX(r֭[So߾DD  6q     Taׯ.]BΟ?{n^V ){     27oNLLdxE5idĈb8!! `;     @FcBB\	y<ސ!Cd2N;x`ff&
- v     
-tm۶=|044tNNNa8N6m&= F     
-%'';wN*7N*ӮSEѣGZZZRRRqqqqq1Z      P/Xqơc'NHiݺW  C     jѢɓ|@  =ð?DAB4 @     r...({!nnnl.         +{     E=%      p 6+a -C    p$IdS63B3 ,=     Gfq\  `     8HBHTTTll,Z ^a"v     "H$^PT2L&}L&=  l     hz=NtjӢˍ{}Й !    p UXΨ h     8گ 8     Ճ ơ    t:Vf.z0; C    Xt:]DDF>Rr`fJEQ(Rlʃ      t`\eƲ%?ek-A `0v    QTl֣T*ϝ;_	Jj]) @    Bbbbbbbʝ}       p,R-)Wc6 A@    X*V+-{  =     D"zvH$>Z݃ !    p 
-UGф4WԥW -C    @U*gTT!$66ߚdAQ @    H$xkt:N>"n  q<4    CaVhZ-ۥK"d2\^V4M y{     VJlSy  :s    8(OOgd q    Q5}0v @    X'"}ر{  Q    Nh4FV|\PrB!H.{Yf{-0(@C JRRJh     Geee(
-q'661@ZD"z>66688Xբex     &HJD"H$OMyc`.v ; ɢ	!&,,,***>>b     8(^V.]%Ga{vT EQ{ \.d'{     N<%J
-BPXr0`gz='{     Hqyd2TNMyP`7A|jND=     Dӱ?H$*<Vֱ{В v@RT*gRɎq    #QQQZi+BQ ;VBd2zrL    @ةȿӮ{zzT*kOEؔa u.d=     EPdee{h+}P `Й    AYqcjZv2rmeS  8|L    8:D"J::)Q݃ɹ ^/54,    pPZVѨjJ&=5ipI$rj:**㸃@    X|UqLVA[1j}`r"H؎C    @4M[f=Ea RSAC    U+) Xxx8!$::Mp!    p 
-BT}ioC5+Jj Ǖ$^UO~VczԙJ~4}erc S*Fk4D"ɤR)[S_:{ ufJEF
-q믿EӬ)1*aR)Eׅu>uO(T͒Jf(e'-s'Zs;RW\K%ppO=%-ocG?h=  j#""Jņ>XBS^?hI #bbbDpQp,3ߋ5Qm<N;cڵST7i(t"  ^rLZ5 ؽ{Y?~  ?ɤVw'i	طb3e5Qy6l0A Pc*z㣣cbbΝ;vh4jO`| 53 =zwiӦ\ܕ޳~69YGɩU>yɒ%JJJ
-  ':::22T7TǎSj03-4B%2LZVR=zh^֣RdF8""wxsh  HR*}ZwhL [͕m硝m RPP}O99f!#t9+]0b؞={>:Y  V峰WebG 
- `ЙNܽ{wI|Iq&QCMw;̅9?-m8hX;,.YW^Yvmvv6 1WۊF)	=  6= b9tPddbYB#RlH1&b%^z!iCT|r/MRT\ݏm&jFf*k{bxkx5F~o{w҅A @RN*9ײ^WTc  q@Cnݺy)<oKe󿭌1bcca0Lgz%c&''?y b10EEEBк\WW6~2iҤ+,we(z*~nȺ[,;>ʣvqnܸm۶Af7qk|@i9~v˒ӧϛ7o	xO 8R颣eDDEEӱWԥӆq ll6'%%}7vݯ~LӁC\MCŨ3z2_L!UK-=wSco'&ܻ_}B@BE6ngn$q}}E9EtxMY܍ֿ:l6+5?i/EM{nݺ}h  R*jZj4`ThZk/RU;4& B?@a45MhhG}4,bg3M!溿k~y;#O~'"PEm1	%[nܵC;3ggP@(b~#'N8v/I8vcc=*E6k~=p	^>4wnvu;ٌ3~Jq `$I||5th>*	Y Cu@?g>wّ`9-{]8^M^DHǴG{/9;3>xߏ^ȹv#WO<á(ĸlHzMalH|ͮznqmnD;9(hnCO{uW[	}SVxAϽױ^~;88|  [hd2BQѨ=,6)a  l vwyc?{hrL!W7vy~h-bgBM/=qu6n?+58:mjP2۵k/9}N3?1B<8qa1{,Y07Uf̵BhL?}O6ޚ8q;ހ  M&dj-Ŧ<z  l:s"v_O/}ȽRU.|ys6o?l9Qgфk]:K(́˝;5JS |}x}䀀w#uotc.qsRz=|wCߵh*ccwۿiӦ8qb  @.  _@ ؔŋwN3չQ1Вؐ/)'1I{?{&ap
-r5}f<~bh9Nn#?BH&˗k.4iPw΃
-~}}|=a$u?o;16Z|vtCY֬Yw% }QQQa
-v  2t	4M;v,::o~as,$~mS&po7ma3MK_;FIĿvݻf*((Z$f鋸\dr`S&1獷孜ZF9&a;{}w[  `ZmXXX!juLLRP `p_e2oM`rEbK{S]^b>;ir.*`>/piD
-̈́bz&i߾}^nK
-P$'ٌInmmI}~$eB
-\;kܹ˖-F# 4\l#JruZ !o0sڵW_}cǎW>ye-X*MNW؞Fn.Y
-(RlS./J(޿ӱ4ȄǏR\lJQZTҵ9fX3¡
-'</\'+5-^0au. @CjZ-!$:::999>>>>>ܹsV{C(
-  l M 8p`ĈJ2֥t|)ĭx;Q:a̾moDلb-LppwhjǛߧW;յ ?{<9 ?{^|ߣ'!6<//WVOx,}7^īյ8͐֜(]`_~F hXRpYY  4{ a?~6?O63ð3b>}|s'vlU㪐N
-(bynDsrqϷ={.9푩ooo.!i1{JDN"0cǴr1Wf'0\4#N/:e莘Ckfxpj;sYvG7	&߿6w బd2!Dr  ۅ4}_=,,Lبˇu'4 ŝ_<A^#j kԩ[xJO{#f)!.p~q1;Ѯ.}}KӬ,oOC#u]uSL~Cy睯:++	EQ9 v*l   vq@=2ͻvdJ歾D5}'2\ÍN/uWc$VB%!		ݘa`m	Ysɾ>F#Y㙹i<'7R+&׾'K~۲e˘1c=F pL4M^ !_L&;pLp	ŧs1ߖ;Hw5idͧ_~~fMh{cZDgz={/)ԭdT2Q[<=??ebUleBwy}7oޗ_~|  PTTU+<*^ !K$&&3&44Tب/0Tr7+DӇ;9suܵ$;'_,J{ͣmjҬ	oҋ5"#{vι~v__ur&Qş;w5jT|||aa! .{  6=  FQQю;VXkėRT?ًsǶv(gCR`7-ٴ183<cmyy'BQݝ 7Wkޟ1S{tWlyXVl[9K:vѢEcǎ6mZ˖-  F&EGG`J~  G!|vzn$&Q=mHc
-Sܲj~]ޞt] K_T$XgX?ҩy~mK.z*֮YʙMֆpb>!
-,X0l0'''|2  ث={̜9377[hlV~2<D
-6 5w+W߾y핷Dz_D<FDo={T=7kr3Jֿ48[oRkc
-Hܿp|o=,(66'.2vWGػ[?|笐>R^0Ժgx\nAqs|n=ȏ0|/0ռNLs%\g}8sf͚# ^!	zr <= ՖqES~1P,X!~q[HmK3gϾ:ϛ{b$p.##ҕ99E~⎤1/qZoq9l!`L6d6ˤ=y|'%+/^<ҙ̘͗5rnso,NZ/LCy~S-Z4rH| `A:s 2\T&55u͚5۶m\֏W̔~/sF]IoabfxBnәt.rZ!6os)M^FeّÆvJJʸv^:ꪭQ1S2xPų~|FeX-1Zf&%>|=}X\ he>,IGNjwzh;VU*( +"BEQ4M5  lF9x:tȑL4mE9\/hyr:#^hnޞtyyg|0oЬcĐ_>./ni.#lܿoݺfx4qK^̱rwvGg
-YVD!].N6\HA)7+_3ݝB3G*;ƍwނ|  T  2T T&77wݺu+WM-)"X~C|'-~FzysBBnӥ=>s78Х7-B^=S$h4L>zy<p`I_.A`ÿ{0IG!K~-|zq^MD"~=^w1i
-?}wб
-oyՒBLN3sЏsU([G
- =  { A'O<p<wOB#hI}l˃>>vsYQ~>^U@bx>;q,v/(1۷e}Ł5/N5ssf߸ ڍL]5^Q=*4qM(2_c.j]>]5͘ZfD-(Fsҥ^ziƍx H|@lllXXXTTT% @se˖Q5-r &ɫyIWp=:(p
- =z}AҵG,Ξ64'.sfYWinJ }lİayyqs(ƹ[A#*9̪FBV<S!ʖmu+YM[@dm|4Yfצh?qК>,!!aܹ۷G @C0:s't:Zt:\.J
-EG*Ǿ?%BH$8R 9= \<~xqqq]d~[^m	yL}.ۿ+cŭ[(RLHCÙ<cAkS/{MU4MkhiW5gLOJe_(2	:HCq_m\A<֜j[>\ ?^砧Ei`}
-[?i3u܀C<Obׄחj\i>t.\1j(L РQgL׫T*JUWl@󌏈ZWTqqq2࿅mptFQ߿{u|PMD)~ѣ_U=0<EQ'7ҋxBv/776MNr54WHєnӅTm.oxᕪo*'{Ǧ+᪗s|%{z򎝺hBhsXpaŷ=7~aj>8͐|qOw]ܹsfϞr)  Tz>,,LՒ+hd2T*%hZFS:ج}1Zju:]XXXrr2j| [{j۷oժUbxJ޳~5$m9-TٳggM9[N#!23&=ȧ]m[觏ơ҅"O_{\m[&<Xm|QB/XzVx7ZrWbXTo,J EdՆf]4iM#q<O$F~Ua֩fGDD̝;wС8 hЙYf=
-"&&d"###K
-M!jZ׫jRBΝ;111+V[ѻ-Lٸn7θ<mj]iC&2.˳,n-1"v݃}4д/ϐV~\}^La_ק=MAjmj郃mr}jkxJz<ybZ..{}c>>`xxڔio1㝺fϞos	 ayjg`T*JJ5RTl֣T*cbblUd="##j5!l'/ x03880vG}/;`'k}tsZo|o2^{mZ6iMW\l֞aKiN-?W9 sww王ZI7fK<=[֧eP0E_w%yڰJ.Ҷm:Sݍ<~yCkh4G}ͦw5=1k2QyIYÐlл'=x`ƌKqq1>  ^jD.`6`JU_JՆSTT qu**55Ѥ\A~ʑK;u->/CmGW=)bܛy;43X+5ʨ^w'}?+{CףDTU(z= ń+\֓6F	!Evh=/_PG*tu5ܓ=ɒy=h?\c|ds_VXqԩ7x#00C8 8kQS;sd26h4hh4lFT*>VcJz^GEEs߫eK{ ܍7,X0p).=<ٜz/<:vvݫy7],\>/M3n<fnь.'RO-/RӞxD'u76kܬܖݛe>4fW~瘐5(!>SRWMsC7\3g47E2;6,Zsx3c4n޼k_>33\  6Uq\.PS3v<z^"'''gee#hr+֕`Vx [h<rҥK333ge&de[trt9O^^񍛏o	ENҦyFםEztJwuth;X!ߕ۱SPQqQ\ſӜlݮн3o^ׯ]?+U`[{*_ѣssM5D8p.l^rԩqƵjՊ4m>>b'0ց$񲋔|-x\Ѧ Ue+ǒܽ+x%m[KR-RS^WrXB8NFFF~~~˖-[lw USEz=R066뉉111F*JB0T g2~O?|ᇦYYcLڿKtl׈"FBz>㱉_M϶pHF5P3~~TV.
-7V/굌ӷ).%Y,tÌ4K`')ʉ{9kjQv:FiOP/gǸtC!>!ӦLߺwۺ͛]6+5=L<YjժիW{yy݁ePeYzU5`;*Z ñ\r`ݾZR^JU*7+Pf2x<ޒ%KYUjNIe2YRN^糤[$IzqƝ:u[֝Cjo{N
-CzcYAF&f=.f꭪٢81oYˬSNN"jn]ߩuqIw=;ЖߞDNf[jQvݺ¯-8cK={IIǏ|-W%1GM>}@D/B1{Rɻ^5f֭[g̘ѺukUR]{J%"g%ܧ'X~^y 5@ 
-
-
-޽{1Qt=̽Ud*nܸS];Nh@:`E/֦]Pm@ӾmSb6vj,kSXXnڥIMNLKL?r^DqjQvbGqDN_LHvpXh˯m۶]Zvmn(۵jΎm[\\\>S-i:ʋ!N]SV=8lذsN0iӦx"UmgO=X3
-[]"еt:]]bccccckg3H`#>pKz\,h?\5Ch{>g}d]9g0bXm;=3gxհÑ_ȱc&-'w__PItSr򋋊baBB¬.f;5X,9zƪ(ݽnyB}MaȌ nNCg{LsBBWf,T\s&]x1$$dZa{,*}Se?|Ǆ˗Ϟ={ҤI-ZpݯbWT*ŝd2Z]qrM"""2"B. ہ쐻{޽{3g03P'ov%;7o
-rb`ߨjPá'k{e}{,·[Z4ç/< aOKo0Nf&]|uTwbp}]wy]|\`;qOfN'a٦mMά(333>&GS>C3h_7nܠA"""Znr8 u8PrD"Ub}T*}%EDD5D2,&&v 쓳s=$ɮ],6UwC80%%E{!ߞ{?)k.(ڕAGZx"W?hA-p<L|ɝt벩jF	!?[c'{P/TzO>p͚5anZo*7	E-;Yyfggg57߼vu~7 +ẽƦ6:.""*gj5۫Xdx`S}rvv֭5jtQ]O*0:}5	F4X,x~t~:ȩ慜w=G~0=t^{/v5] (H(Bүe%l99hf_Owнt})ܑR!xde쉿XaȺ#t}x5{pww';8%]يӕsͦEzmko>`//{Q\\\&Nꫯ^xl	`CT*UXXڡJ%ZGDۇK܅!H$d= 6N/ۻ]v			nBj׮ݙ3g֙GTzǛc޲"~۳IzeXf%3-K,r=*k9{=2f[]R\K7n=ﮞUw!ǶdLn/űSx[fq[1|]N<މiӦӛ[h
-P,"s&ν?}ѝ:uܹ3ZN!EU2TD":SJzfDvRl &,:NZRTTz}ddT*j&666..riZk\./>d PE< EQ!!!޾}zԎ渙ᦲ8'/bƉц΂1:\{0#:{Ptnݣ;:]Kb&ٹtu!]BrY'K>NylԺ,j4OƸ*ӠђSV̋ޖi\8q6~ݼyDh	WPOh&bIBΝ;|pP˫,oSiV(2J&%''GDD]3ܗ-a!ZV0h{ [{<855ٳ=zllqn34HKW{vb'wmGG>OCi/2_	&A͇9!a\s킃Zk>(vsO[9\kvVMܗd(4}^:
-mL8{_y)ST&aW%1+_DNq'./hG1E=#Pu?Ed
-s~#Ty:WR]vƌÇhsak:7fd1fJөjV[2pd
-vx(6632dՕL&.#GL`WV1_mX,:nڵ[ldc5]i[.EVT*Ni8pB?qߞ{Q5'*YY~:^m#s?۾?c)yoұ1[Tٸ~#RA-[>xdNM3DOS䏜>.$TdƝ_xq_0+wvpw͛\}*3:4ZŔ6	R/bTnJOų5kw|}4 ˹X53gѣZ3s̜ŋ/Zǫ_RN[}ʌ),T=r͚5ҥKbbbFFFN
-3BkǏ_*	{)[x~t_L]>|c[H䡿#_,04 agf=w jְd=G9:zuoi4X`0տ/om6 O6=>>I&"s_f?~<oaai04Ca/B*TUEJ=G*YUEKU"e)0LzF	
-9]07
-
-
-g!˨.zEa6>GRROZ4eK!.~-ٹɿf\~a	P;I4 -Cvɩ[n.\غuWu!Yͼ^/,87[;zΟ*'iׯȿ+^h1673Ӳ^yprq+*(	sO$hR۵pKGrGWgN>{nϏ611q/~n0|!1K췸/=ے9xٜ"şYm۶.n$l&*zyJri4~n(54M>hJ:;hV^I|Y؏ռN8K;ET3^(ivJ5cƌS6nܸaa8̅
- 8=`"7ݻѣG/^~KףLÆ]ڥKӧO_'~FyaLJ
-||7>KI9UOY5rt1Ӽu3wJ"ؘoj*f~Xw|٤SjeY{fk,B뾤w׮.]YDd̙7BQĕo#KM&RNz&8'q			3gNY`qBDKw61S2w|>i,ggt.m-i{zȼZtpoǅ}+$cɗ'ztsu\5V5t{؞57o7nĉ[jU[& 64}`[F**:HH<<<:u$):sɫ<3︷BNvӆN#Gtܱ LsO1NQE2CazRݸX|gi}nhgoH>ySG;UvմzR!ZLmZ7>b{ļ۩Sםc0Zj>qOQCW|Zؙv3zxQ4P%Ν۹Uvrao9U^Q1g[Or9G}TB!E\㺿ܳX~}}'qHmXmY{4pk*KѪ!}3ڵk#F裏n޼? 1iR* Xz^J$\cccZ-vq8OO@\}q[/0zHt钔t|=Uύ}KVfG	nsWwoݥerpܚpK<G˻`vZؼY"kRyyRϯ|>vӹk_iKfJ̧oz^GիKߔw"pyg_}w5kv\m݉Z7grXֹ#ݻ_70<__Oa!0ȏ;uR'S/p8̔I$o;iX0cZ7h_v~>]h̟?ҥK
-PAJKK[x1ϧ vc'JQQQsnvaAg.p^^^</^8kj',뉉cdF8	S<|h?$>itRXݒ<9}ѯVg_?wWQvgz19[I~Z3)Ymڜ>;"uNмZAt[[]&ZLx?.ɓR@ыzXoMu[WB5%^>y:m̨@	!X,"¡,;n%K3myC-\-kwK
-Fks=0R'Ce=sc[ӻuT*1@)΂"0ûz|}RErL&ّ({٨Q'O\^nAuv=l]<Ge_Sի`DLDƗ[HWCaVFnX[ݍ}uw_vY^D޶i}d=y/(vLnHH7q,~Z{i?*fRTӅgXe*E)>LJJڷ绕K|ıI6}z7#w]]ٶ㦏K#_sAͳٟjP686Kgu:~"LA'Qv8۶l?S1Hmg4{cM)SfϞ}qɄs  bFCKznv!G!;tжm[Ѹg'F_O5z?kO'gf_// "|_Ey[?9nb E&w1n5}˅/fǼ:o\;87n~/z˩70>5^+ߔ{yC1bD䪷<hA;텷fݺu+2"&KmׇGݸѧwk>wAhg9up~Q@@3BسKtûM>f,4񗺹9>j慏s޲1LrǄs%1]I{:*]iӧO8q={pكaj&b8h"""t:\.o{m7;Ҁ38
->߶m^z]v-5503EQ`ēa߫mPPٳgz-Dݟ*ֽ;w~3{KN=T;ku75hlׅC5qMzqK_===WɯEɂ/Ⱥ/\Ӥk}U@)؏~=uJgB:py\?..sgwk4Rtj!pvI^l[OerǷpsw_oҧS&^IO767t>!]msgAC52wl8:LFs6x´Y|D"?E"N9pL֔i@-DORT*RlS͎4,{N:mٲkNǆII3x\}Noo!s603N?2wkmpn:#ÇF.m)C*'>fhv]nW/_>yݻ6#8_[ӧOjj|zz8/?R999%^ڛK:pCP`c\ơhoQzFߤBQX̗x=<\וa|;z)337=(be g0AXv?Eqҏߒu\_F~#@ŋ_{aÆyzz_i PUQ(4v2AwiXr!!!ϟOLLve("j׮ŋBR>pҋ\.[f\7kؖ]}QesVd9ݚ[h^9EQo'χ"8}yy')))~_(y~ѣG}k$՘9ՁG޽ƽm@/M<!O8sS\]8oo_Х=q9	P!StTr~h4fftl풖0>9:]B}@mX' ͯs"2t{c,éUV\r̙#G+ vsZYR)`Gcquuҥˑ#GҼ[=[ǿy?u$mDjp,nFMӦMWŝ}zԦ;7o9۶mr.<El~W'&&F3{p	!Iz+19fN*%v9{-70##S9kGD|`2YDBb1dSqv5DwH~sXwbq/KXMW7oѣQℝOPHK@E!!!			'NhEhSfuҥ˥Kvj?#u)wf4P|>ǥq#!ABZ`xehkPߧu=i{}0-yVkݟt!XbNsg<&NM:t?wc\~|n޼٪UyΑ-z5R=^2wwߗO||UbeaBBB^oʺtRAe!FsFf|.!Z,L`UnxA{(C6W},<X{W,V[dɴi۶mSp
- @T
-p8ޝ:u۷#Ge\sp}l"3:BU~/DI?>t--=#Ҿ]6¬|Б[B!/O:CIBco׈}pkӲ;vh2_@aGN{MaGvtc'	/.}owmϭq.BO?87,(((5j40ӯ߿CCCEx{u{Btq3PD/"/	[hԹS|FCi'QAVM]WfBĄ{=Jc`'|)6|`.Q>uLY=ΔLthƍ'N|饗qBBaaazT*####P  PƍCBB.^xΝ˗/ʊ-uKc{nݻwzjBYW>!&h@fk}.oRo''Pp(iDӌévvc!dlp/?ggH?4ҳÇc8/[ykҤɒ;i5š'g6']+LIIYȅyUyfBS±쌌͜Zy+S50kzy_-Vֽ-C22Ijj;rBqc"&=#O's{}t6iqOc0<
-K/s D"deW*r\FDD(
-nv!B˫k׮mڴIHH8|6cBZo_vs6!V]NNW,xTR t={ff>ԪWPv|s
-zf36$kw)
-JW,2\]D)ύgk'(i^ѣcƌ	gV*']|ǋ߾}}ޚ!	[83_jڋCH>N(޹EB=:ul'f)5dPg?zB4"ix9xn9ya]-&Zz6~9YmE?Ym޳{A~W]J`_N6l̙!!!' EҊ6V*NPnv	q&M4yn*2Z(F;v옒n5'hfğ}ۊe?L.TdڴYp^Jjk﾿sʴ^)Ya}aC<<q/0ӹSS[83{˾/vP}{K58kщ'>bQG7?8{SSSǍpE~&z?8$$oB{Y i[EL^}z\3HPH'/B!l.,**vjJ
-(o/Z;雷x8alwwl8V֮.7	M}Ȏ^'_//y=}:}s9s'ٝ*ZjLV]c7;brqqڵk۶mZUwC-7vbٳgOAsCo_~?y>sz*.[-~ڤ>?ܭql5/>)^sdgPظ32zhշ?!=޾3C۵h^%\.lH{O&ɉo'+CpssaӱjxfăÅ3E"o1aT2/XT/>j o;OB>K鄐Ml;.xEJusk/,v4h`]]?pAll0e?~w]Ifm<MOM6eFc2!Ą߉џVoS(111Y{AD͛w] ={V^c-kn:uy+4Fs7kÄwB*.W[qUe,w֜fKu\]E4MCܻ߽72TԴ?Cv_MIl\ҷ?[,}sw	!m|sO^ŗ++?;]||Gzl߾k׮FYنv\EKn/(;;Q[q9ƌ`4	BڶiO-<qr"[Yl0^x/푑	I2Oz1H(d<4ox|C9k[w7a@En:*}KpkԺ7GDD;vǎ8]w"v M׶PZ*=zJb7;b0v8.WW޽{_p̙3III}e%ZԷo˗//^K90;Kh6[ڻ??B-~M3vDKB\]DAAWރ8f3uEBȀY֭3gS	!!=ZU2AѾf͠9M`uxo>?~ss¨f~f2qKv޽{СxYnGSm2hێ!rm{5'Plj3M1[xQolќK1ă?&cC+Sv~/!9|}E]GvhOxdߏ|p8O?]v̙3{9@%6j3ZVT2L6>Pv#6}& %6mڵk+W?k?:ͪqϗJhʽ˔]r%rn ~8TBHNnQ'ۺô&Ǐ7H^ҚRXhb߯M`[_3gSjVeR`
-y=[L/К5~K(r\<q_2}M4y7;(0s}l?SRR~b:/):e;I"3la]./ow	!dMaa[4oLH@C&'/]HުAڍC@7_?a42}Ƅ8wu=Lh"%d~˖-6mBpqqȿ=:sLm2SB@nfGlM ͭgϞϟOHHHHH!0u.!ykViDC,N>u:U>8g<4=wa^!}gSӖK&>u{fd-ي˭ޕeff).v.L;\*pBǼR*p3^ܔoM@s%bŊMHXգ;M:pO	3kzt .xڟ>jךw
-99QoxO͜޳5߿kK͉+O(ja:.d]MϹ̹X111ӦM?~7naݩ?Nh=ЄBa@@L&~vU/=Vht|ٳ.6|]pvro/]~`0+.6NNOI,*bB6ib]JƝY%o<WP`2XւaZ_BhԣBɺvZf6c~jj꒥??7\w~}>Y0޽{
-""zXVxce˖<zt7bQj܈CH415nS_?wkӯO&z\N5|<?w)h%W.7z>33: 7P'o"p שSv9rСCCN(\躾RH	35͵?%Ld)fw)m+WF3m|6uExo1rf_vk3w2?tWEEGs=+S'd~9#Ԭ?8xMm#W/&3,gwRdr8TiN"w]7nn׮[_jсxf͟?Ӌmiz9YG77cP}3![UXDӷnոOv/ܽxQWXZgYkBvm_=Ed3}B8fqw+7O??~͚5r8U ѭ. svd2ٍ7z%wgFhޭm۶Ze"(ffvycwI8vk<4<~CQ0be>^O.ӸW_?́C7nzr7f'<s;X&(oخ;|,]P`3аv=d-8`UQįNm|c/_O˗_<usCW)3i)))EQ{\_oZI&;/\~'VSȢl+}^M"ef7@Esxw+ؗѣQOsGhEܝ;mM8ޱaÆI&c,g7j j'==ݞg/jrhj fŋ˗/s,u_Cp}+?{wޫ,68`k9U`_>
-qcã9 *S5?Ue&i	req=ǨcrѣGǌp7W&!IϿ/܋6HҊhyк*(=C64-͛y43>xhe_EQF{})
-#ۯ7_hŜXP=q̜9}{#G:;ދ05 T&\8oz7ʌj<5vA p&Md7o:t}uN]6Z(/^ݻwOJJ|o|BLڕ:z*1oq]v}?njzQaڏf>|wڴi'W.'H7/Xf!uٶ#Q9o`_\rQUͿ5#6=u>	>w-2(6Ո7Td{~v̨Nn8Ʒ{esFoo9sZnڧ_V#nuݽCSɐŽ7??hРӧ|qv6 C@(ر#j|:_?o"ʽzP5D^lo:^\RzW)'i'=|p~>݌pK۱#?Q6p
-p8>tHMW䜵B:L.Os-="ܼ} 7'W_ԨXM削ۮ+IUO:xf-q7UmSy\9shNKs_(.iҤIs=rHqq1A~ǎ ! Xܹsݻ;99t[\K}lLyѭ[[ni/f7)3]:?27I\yrh233_~_L'^cͷ^)&&&<|3(b=yiv&Bƻvq)<Ƥ Wz;깃uIE;+|WfcQnvhA/i>הor}țHrve틿Ng\]^osK[Z/)6[/ӴI6ݧދ-<yΝ;V:V  8= 8;o^ٳOSWb"7fvAAȀ
-hyDvǘ潾u6]dW"#λbW}7ч񫟢/}O3>xyɀIΌ>RdMZ,?̒1l'0/hhINgafܳ8Bװm}%##Ͼ(1gzzۑZt4Lo:gL7|sرj r@g. q& ťm۶:tʿIX?>fWW^r >Pэ0$tI||g{*)r/ldȓ'OԸJ&W'/Jb5r0j
-oT9:bZD̷<|J^`1
-]\\N[y//r5ezykR0"-4EVX|.X8Q}\ {NmOܷێ|~Nr躿b<AZ|78>z
-
-
-PdX\h  ۅ-/^n\Cq܇8_ Zs >PlE!Wm?+`v٪xp+/:shnOK|~Κ~mq'FH1〞8Sm~3yժo]Vs,Bl6_pH!hc^)1X
-kd/'i0>qns߱?KiG	6kWQGC_^zرk׮MOOX,x0F   H$jڴippprrӧ۶#u/֋IM49um"<Ç/rj<O~Ջ/nzk38OQ{_-#vIy\&!do3>]⡷xoå(1T|l|l17f,mT\r	%8sgo%BMit͡
-{t'qov⾣zuт:bhWЉ˿]|9s1y昵M  lM PL&t|K~.8FO
-q@B8:8ÇPΝAw7?xb>}VtW=e=C|ifN[:}'7)iNc]QCH2jO⚧Jg.cAdܿX>fzvnG5tnç>A,GG"uIiv~uE<&myұ//JWΊ;v~w `P?bqf͆رqWEfʯ}XӦxcy@ B?_q8M3X)sGg}CZC*v]]?\V$N[I;L	!lÖmܽcPAtr?xhزHbbs̖SF=&<q{׼޴yԩfZR84')˗/O#|Bݪs&N55y5=ժ#}SG1޸vva'l-,ȕv*gMLy@\kiׇ*vI}P܍4HtbC:R;5s":U߇޽/X؅_4ʧ[܃7당ǎF7n\`` މP   hH<==tr˗/={v`o|֭H|r*1OqnTz]uϒyGE(s}JENe$\Kr[K(+bB{Ljz?(ѦhvRRR˖-g:(FhaH_si~-!_>BC!_}9͜SN-r?7wTyg%\[aQq!CޤsS}fn6 iv=^F {TD||[&=qmhY<ݖSTQE}%{ߚ2dF<-.u</ͷ8)2&3;V튎V*/rǎܦpj  hH\]]BBB;v׷:ΰ0\z[T&|>?+ZIgUɋ9}=Oݣ[aK%R+_ UkR3l}1H4q3ʾk<??_~uTjk׮F #!`scargOڭ=>b}֍F>'W$?/gIN-	!EE,+h622
-BҸڛvrnTӧa7v={xSFFwz$_/ꂿ@W>%e#_=2a)Skʔ){pu=  ٭[7\~SNM
-LӶ1ɁR98q6?ؤz`ƌgt$4MKs+>֭[SfHǏwҊI_;ݐGjѫGW=٣{!C7.1U6osnNA_yfQ>7=-s/nmaY`'I#H3}TΝ;}Wסz؟_={Θ1C&|UnN3d=  q@9BaFϟ?ׯ;)0sqa6zr/?}-))y9E8aW\)
-wn_:j\X,_?9K%v"1!N}eqc)20sQѦG)o^>!PL-rgZ؇Dv0d}!]]y{oOw_uE:t4!Ї0Ts~i!^?~|N/^ܽ{wgggms 5 Kdi֬L&k۶mrrV$g,`<d~xRRRc|hQ!jW_}պu'!(t"w2ٓcf=UD\(ͭ@0¼'4M^;|{fC1FE6iy%baQMAqS6]uFG,]}]
-qq6xs릩!=b𥖤(Ces}a֭͛7cƌ]veee5cXKh  i)J$jժW^O<IMMvsy&ex݈@[R
-ҖP][!v;$ri<<<ݙygf;#gݼy3fB	qKAITuװ?_x1uʸWq Q'm`zKpd(CTO>>ַn40xc&\#-ȧj
-h o53Y"Y`zPpU+][/{;܄8lŰO<r,nnn=M
-ϕ$J[<?L6s"vdț  г@9лyPťiӦ...iiiwޥl ׹s眜EIB,W9ɖg}T*Xy}  FoO=lʷ;6:r1
-^[T7=|˕(Fcm|F-iPZy<`Zȯߺ5<П;G.s\'3BuhH^g^:ADz]M$!0yeZV\9pM6IRأ!o7X @ (@ ( ܹS`fiв=Nퟚڽ{9t-!9Y?Gv?ߺjȧ EMt>.*<'uߚt*-3Z^v 
-q)(ݧB*B'x%*<'Z5ΣEY٥va=G0.G)OQ7,#&ֳLң˯:xk$	{7@ ȸVA9884kYYYiiiBi(aF1˳>bx-4#M$.#&s_gOZSCGlhԬ1xXe,r(]>ZlJRU+ݛ5eҌGv~|+$R D~3/)Z<֖<SGіy7)V~4uVQO?]Rvޅ$iIam4޿A&MdmmmԈ9dt@ >U awpV(	  H1 UqiJTկ*R\HԨWyjLJViP%XS{1j,՛V_O36LuRck1F,?ѿsss-j!&MSv=~ގ"C\   -<ZO@ɧedp:kϠaߚtJ@g674Ȇ'5¼@V5]YۈyM!Y-[K'Û_צoO81TvnSacV|M۱ƆF(yѣ~СCi48P@ =Ch4PgϞ'O	;fGQԻ\Rx5_j'FߢB'UHVM&\өS'~kpA +П
-ΞO3et=j=  D\bxNF*d5=Ie	6XY96e>qo%qxLbGpp{ˬETX{vg2?}M>lѣGw3!98cbg7nܸv)S?zH?Lp[.iYXH-O(jԨQ"FU-(TLV5X#$I֘HA	O1C\dN}U>E+WWګ(ssja)*R"BUTɕbU]ߩb֬|9{ðw>x`0 @(`7;v,==o.فNS r̼ӎ2t겱UV.)
-yEbfMZe2PИ  ;橷rV%D;Vȗ0
-ϓZp൞GB0(Tǧd&M322
-^7L&v|HX<{Νc0~;;T
-HQ8:_1oX	U"qEydS-ZE2x{\xΝ׮]wpp`
-&I"g4q7(*rE.G.;vLW>w0<UQI;6|RێIEG |VSL&c|6pE 0k޳cν3tygv"355ֶz
-ALhNNVsssZ{ } @>9sA
-
-^NISW]GxrodwEUjm
-4cǎ ]c[
-l:0mÆ'QDݬ	֎LL	r*ͻ`+5~תbҘ  1ܛU'ݾ(-, 1&+e%ffi7^h(ʆ4*)=2:|$JHKKɱaZ3(R MKKh4NNNpH ]@y?ڰaÈ#Ç}<k҈ %%?O<p@N:uBXyNb5{/}}}O<9b^F^՗""IxyU]yt;۔(I9JeͫH09kUpoHnSٝ3
-o>y38*!z3dxH:^O(RML&b1|B^xZ4n  @AAΝ;?;v7,il :T۰aGf2׮];>@)<)6iv``Fl/.YkŢ>ug!]$ewIABq4S@IV6:U@Uk,WqΞ e9#鳔7)Zojae=O+hih4i)\{(@#}}}CCC`pȿ@ y RN<y={n>ݦ),5iyy?@w5$6LJ"$;r֮39E ЭG-^z篍.3eTwRL8zRYrHz'7L&EǍZ bo"fLNmmo2*U=j1d;!t:W%XQ堠d2I$Hdcc.;B>4fwEP߿̘1?6'`@ދY}vW}7N(^vmoU2q| E&|;[n7nto^̬ԫׯXcIoXN#L4C"Ej2+J 9<!yvu BCoLt0}<?Xgq8M<աL_j/..rrr#R#@ Hcz@>Fz}tt޽{<yҩSӦ!YYf !wq ICZIE!b䨯bv~8rpyXs 4M#H7< 	,^"7WזعxwW(cղtF7p:ޡ05>~֩y7}]O6!aeM]GӲy$!Pt &Tp8vvvnnn4%Bj:@ {|\Nwܹ3fOBU=G:'gIhԩSݻm+rLOT~GDDdffxX
- s,YɃDoz-I.dgAA՟yҤה+qdpčIΊp'f?KzPHZ]Y|II&eYOIU*;ǙIb2BIR*חftد!: @ (@>V~IFi47}֭C /,\?qDOOϴǴtKo2]mԩRtЯN$Z 0iB_~<76eH"}՝:4/0  a=8gFluEasu+IK|z9!䞻υ4w>)afמky5鬬,ÜlmmL&ѐ6M1sA nVHQI(@>|T*եKf͚5{l t$a@>HQTi޼y6nJQae8)2>y䲲qݾ'  !!㢅 {](	;m%sjirU,c E&J{lbZQFȱ%ZmynYK\ukHImiM1سgX,׍EZl%Jeee>>>vvvp!>k @#:|jjhn=Ju˗/YDR={JVS(f˖-kٲeiiN0eGMg,XVn;'x
- wnǕ~@$*1ӣF+WUޤh5j Hɋ4xk  O # k&@"<pg#iEXC1cubQ`wVymۺY[[ÎPq!N^hъ+N>]TTP|h/^xRKW&BS(F3ҥK~~]nN-S	.d0(V  kupM;d7H\RyLm<AҨasVN~&UutK   IPZQL^."'fgkV(J,]\EdK8D8޼ysoɱ+++t666l6w@ t:ʕ+֭{CG= :.99dً/2$ڵ ׈VC(*T\+>Tnϯ~I?W`ӪSBx/*Ҭ^!WwWaFd0r֭[?.׆xE)S۵kF6DQh{lg"ޢWwkF'ϢQ&x hD}c]heI<U,G+r툃W2:bs
-s5J  ;	O]7Ț˔XY>Y'iAh;X.'ʀ$&&fggb;;;HR;(`S@ ]vEEEEݸqc޽zPZp(ѣGGxD"믇	а=~IRݸq5*,ubUǩQԘ`EGşוr|r/*Su.
-W]ت<z:(d2  ڴ)_쳳->WtٳY,V\\ѣGq9݅FvItmCԺzPMl?tJyNӢDm\8WlA
-eU:3-1-;u`{:'xDG_6ZI<îd{t9'9F`珤$3++d24(b{pPQeee(wapvHZ~!q D"ݻ=2xϹC>RSSϜ9s16nܸI..z `g׉YYY#F7P@`v!Aj}PO+*_i*R6yU5_r.\mR˵
-PTX5@^Y
-(
-K;v,==}ѣ})AmwɘSh'Oƾz=QKD !i]7|l_7رWn2D$p1lg3Zk]fXt;=VR!2sӝܼ|:#1BQh`藴hmrU*4{b>\h=z<   #$Z>ŋ\.ypuȿj A=/:1êFIWMf $_Ω%M/urr?+@MNB5FWe3S9+^3(VVV.L-ށUNUUz]U$IE+o-RUTxu]V1%xV5+uQiV+*< ɷU׵Pʒ'WAER@*W>F(
-ԧ*nlRUS-7Տ?;wu* -|e[Ӈ=~x111ڵ3g=/^>|xΝ<oEID'Uedd_yy dA@  bJ_/###KQԯ$Zf6}k4ASIK(>t¶p>w6?~l)NJ $#S'NݻQlk~KPG^$Ee;8M\Ԭ%\.h0J   (Fc21QuC;yKhZE)''b BJUx<R9 0Sg\ I<||y&EQGjVU5[+f'U
-V}
-\y^\%UU$YYOUf5Nt`sjS*'Uy_*Uץ_(TX!jZԪ[F4i>6+*^ycNջXyCucԍLw( }/*g8yΜ9UTZB^T[kW<|0111??ɒ%}k(@W(>qKJJeN6SwҥYs ȃ|.+vޭT*MeqAjCqX:~ȑ3	Y$#lZmzQ=3\ |־]f9fNK5İQI1?R0ԲzuH4
-^(  Wi&`!Wh@]&Ʌe:ߟr3tR}*--mڴ<|jCj}\U^n2SwEjg{WHX1z@UV"ڗrWb_2cj9zvUf滨R @:E2i~'z2Th.GPwJBUT1Jb>_.7XUr;!KeV4*I_C
-T5գ: jJhӭ| zX,*;U]?
-EzII܋\.\Ueo*E|uVL&ٳg*rP@$J<z=/,LRTrr$xYTT``ɨV9 @AjV!ډB˿ɓٳ-h:/#FCݾ}ðj0C2?Pfi_Mھrw||a>mR&sqro+!V9 ՚wEz8/SX5^bBfS[8MӢz=NL&"n_m$s>H{NJ.VTTT*]]]x<z uE{9%Mz	V>Bt0{TYXebs/uXDVKJ +e;a:CuV}Z`ji$afen AT^XE1JR&j wpp0`Z{ SZZzܹCvu^n@/9Mܳ	e˾pXqÂ~$-s>ðcǎݸqCӍ5R҂G,!YؔWo޼9`{w-nJO	Yv7ߟ]>O)E;TVG	Rh
- t3yV!Be$.)ѷZN{9/cYEHff&rvvLvgϞȻ痔fQx]ҶkڽJ9T־yB PvZ}^KRc/ TVNr:nsZy݅jXu,|8]QjH-M.TɯK*~7,o8k٬UQ:O:~Ծ	o{>*[YYYW^-..(e˖ڵԩSxx8{ +Wl޼ŋ_9sfPq1 Pyq | u uQ"b길Fϋ [:ce=z'$$#c'uiCr-ヒt_0/r%?a" [XGm^_qĘL&%iʷYlD /ֽZoqdӎ#eJgcq|9GuNB}4{r,V닸Xwr>I`2;;[ lllL4ƅX[[[[[[XCק_vŋ			塡={ڵ={`Aki[
-=wiKÛAV[~%bcc+_Q%kߞf޽;==}_['&xt$987@݈a'NӦ!@ltObß1^[I-Đ@NA(ɩr`yl ~
-C[cBXYq?ցtT닉 io  b~nn. >>>~^|xT˗/<x޽{z˫}}i֬ [ih6ifJ%Ё..[=;jP(i yrl7s6vŹK}XGtBp<,رٳgID,`q",Eю=:zw}>|3`vB!{YV
-
-9xmwF¤s{%I#z(;fӔwHQ~6{rssCظ2rT&t:GGG///+++'@>_X*((8x;w:tХKPXþ;h{H#DDGG^z۶m666ϟ?ݵ14bS(MjCXLGXѣ{vn:T(DzKKWyx `[&	i"!l<xpM[;v(ji|tN  ]~^'x4o)Eؘ'nY4>$TσOSfNo1?VA3<yݤ"&ed.Dу[nmN	4C :tSOP4.(27nd_.\yfR)V^ސ%1ڮ--Q\>~ܨ5r/E mGe׮
-ލ7V˝ju3WW;//)))	X@dn4Kqw1'-]0 c-v<T1VRKϱbN:*U
-ƜXʄ#v}s	sw#iZ-w999mڴ,mn۷oj:8::r8+!f=<<||||=F^}c6g/-tv7I.ߵѣG'Nvy@S2oB̒|UVSvvofnnGA,r𰔝;	_~MW;7ZmDBo޼(///%%c6qxeŇbNM1ׇ^tD.j֟*w])M[H-eJ렷NcxlUFI)}h=V+-#B}}>@fZ:sW4 k׮4OYęPI(x1n׮]xxt@  4N<w0vQ`0^xm۶hOOϹsr
-ElWTB$c2ECرcGF0XY-FdIw^9zhƻ맷n?۾eT|<N﫺7ܹ߅d2J"gΜ۷߸q̙3Fe2aS7me*`s=ulJܸج3( Tu5ӧIYߺ0O3w[בӫխ)O=bۻ* ! @1St:cO<>@QϏEr/IqK(b;#@ Ph={
-©SNuw]nC
-{"aثWSf5X/n4
-fҴ{wWlڲ6[N;yOݺ	,S(Y[sO \|̙3ZϔLB?2yE8Yj'b薿
- |}O=гEQ)(
-S   k?TA@Qܘq3/1P=No:MoDכWbX
-(P^?yBkkG4\ǽD-1`%%%JY"= r?'O=zٳ,kҤI%99 ?!Aq|4wV u{W8IvWHX(f2!r"*%P&'tJ  >MG.h?|ہN#`ll
-r?_7nXVVvK()(pgf2111gΜ1L'2V6I&z>qG>Y#5u爫מϚvbed꒓Y,`YG $JDR)
-b\@ ȇoHLLܵk7|UujJeF(**ʕ;cpF&Ql}zĨ_->gVs  zrXA2sutR6ng'`  ;[˯o(Ȩmk6Ǐ߼y3v,/ھ
-󓓓E&MX6
-F!>arn֭XCֆ"v`oܚ[&n: (sss]\\:v#H	 &P40YYY;w9xpw甕5d(6W11Ξm޼Ftc1T*d]A6Q#  :=!~l?N~X#:45=|؞݃x\AŘgqWFhd56B2\d?}ƍz}ΝE+m[l2eeeg6q80jv>|ܶmZS f	HQ9't&LD2-'	ե߿/۶m`0	 r0999?p.]77+.D.,BDWo<	QձY=Q= H97o$"  $	̮)璇j4/%F
-BۦwA4r Do?ܴi 6	Z	v)))7o|XPЬW/HmHYE$%.*vX3ߐ_I
-kDIPIq P8riqútyf1g7%ʕ+n:((	.悼OHHضm[YY#łu@ (@,AwܹөSuӧG"hlȒ主/vs...L;)[uiز/zU#"  qKhf: *hTX,2K?O=ҷOh+]ឯ=`'<=  yyeCh4IHACH0p,-I~{Ҳ&CFVߪwba6j>|0ғA-<xbm#q A$I+#[?E:aӵR+	W"ᚓU;w޻^AΎ/É1M^$$$xzzj(K2bx	jb^^CXXXXXÁrZjΝ;҂*TiP˒ݻ'?dg7p1_o_@@?8kYR\¸\0 plzL&	D2/{0J*-ik˟=;Fy59oΧ˾ݹ"!ҩ=
-&ڈ?#g2ywK--_p/;bjDj{_{mA!zP(<uԤ)\Ӿ-ͯVS
-2uFfIff)IQ $EtkkYS@G6{1 :i((s;9Dl -LZi0rEybRT°ͅ$)kkwwk])T*4//bӭQ z`xxxX,!oN;|ŋM&ܹra@ HcC,EaaիWٓݺuf+)A\)ruƍ;\Ehp)d7J#bS m1  \EݳP \]N>fRD&	TzՏ"Ԅg=ص'i +
-0_Н_alWWW߼ys_x:,s^[({v5D
-_  }(:{i?#F?Nkw3Q\^.WU5>q;ӠOq8ous'0	9_\"(H>M/]Iݪn@._N),Ti f% (no'r2x`sط+CQs/\;EFj5F𰲲D7"99㥥E˗/w%44^!R\G&>|<~緟}6Y&Cɡtvŋ?FQ/ϛh_h˱5_.i%+$kM>f楟nRDQ =SW^ ܹrĐSgS=l6eo#Gr|5/YOifs6oBT,&5r7mOfdݽ{711Ӷmc$RB6-z_/rts |,(-ѣGn-]icwQz޻+~w%Dӛ<=?<a\Z~?][͜t"+	70A,uv|+=8VFy}co/|0iTԵl˦.9}R2B\ukҽiSbTYRrḁ2'G={ӄ7771تU`.g鐺SRR}Sa}~~maoil@H=NIFsC%''ol.iӧC$-\8O7uoxyvͬ 2=69l  %3D^ er0umnjc-X2|= ډc3ƌaa8;[zpw*@'\C
-^%K'NTstY~?;IN΢Vx<޾}<h0ڌ	)@(S]\~Y3ʏj_"/ʊ  ;oo'1sd*/7j&:}Xsfzl6E/GRe͌V-jЙs8':k``PQ(oe|ݙĤ?{&&^6{BA4˭B(+\.;zǏp8  =<<RSS/^ضm֭[@ 
-P
-3g\Uܹ^\ܐ8:Fj4}~͛&M:v0owhߗj|*5!!,
- x('''  Dսk(C  L&ITV (&CѸ ݺ6?}	E!  ?LV 0*[Y2'G	B&:4//)-Mgo Jrr6i2{pBqСJX&a'#G4ܼrGbbRHH`uDUd*6BFCʊP8zI*SefgH/,)(T5l QT)AvmWӲ(N&%-^Э}&\.NFCym6=1{]د _egg[[[;;;2B(@^^RžM4a?RSS9լY3& Ν;'a-A H=w$::z޼yK.U*_=;IBѐۯ7߼ysʔ)QGPUI .t:IQ Fr R>9%C{?  stf1<.b$ t:앏" (13KTa  ;;!F,  JQT^6GM8Q?&$DaMMh;1D_ B6m `mSgRD}5Ý{Y*  sƏ',Gb&I*3qCGluM˶BZoWF9V+/iJdwf\'(+ ,Mv^V[4jvUvM"8  Oy*Ǚ,O
-OLj%áa~H])..>zǏ:t@qttݻ7ù~@ (@Bq̙y͝;W*Ν;	cJTvѕonz̙C90jH+}47 $P`2Q%%:XD &Mį&T8K7A:Y W,w^o. X[$ t:,  def~a-}iӦ~׮;:6@B1V"1cFNT*ձcǢ<K$0EVSyI$|DLg2  sv}]^G"Du,#lw2+_ҭd"n#66<B̼a2i|Ko %.$-^)
-,#i-#,'''--d2	DRG-h4^~=::ðCкvWZZ
-
-@0v䍡(J_~㱱vvvK,ae2YΎ$͡À>fJxc""  :"?_a%2  :}5C(DuӬY_~NC  B CQl6M 0L^n0P\  TB wϝPݾ}MJC:Z~;T:^$bMaX||Fx,UQI5ip_l<uN۱u C@b:	A cbF=T(tv	ZE	qw2Dbc{'AΟk":w1_Ķs'o߽IˀAN;>Ĥg'Qwdf"{;EQ:xûR+PZZ*Ei&0ʄ<ۻ `fH8~xAAA׮]{ꕙi(ڤI={\vcǎݻw `+@swt˗/_lYFFƒ%K..^<Y7d1褍C<ثWg,a3lV LD\1 hˮt:F`0R*5 JD/(
-tMқL f("])v.D{lv[)/gիH$?1JE֓lܩլy3]\\bbbEK| ]{ahhI(
-A/t:v~viּSQ-BC\$-sGF-Y؍ͦ'\s#>|fo*.ydb0ҫמ+wGR G3 H
-;`d4''s')r6E.$jcc@Nzz===i3˅SN-Z(,,LII14wT^zf9rv&"B&sC2k׮6s(@0<NBAPn")
-  0Q3׼[wT*7n܈a"@  &fByYL!d0`~OaЋ^,\zY=q}| wh&1̓'O޹sh4FXl0mm{F.߷gap  Ҭ~bb934,E@J#IJ*SpX,z֞n'FfɉSO<=}6Q h#!AN/ ;5uJxs^VzzD̡R3מW,kEvNL=SA043+**0M$x<`v11l1b n@ h tCh~JAN-{HΝ;oX7*r ,du~D6<[*{y  4ZI.d2E"ok32L&ݻ VHr''1eVp`~X٢ ,?JKK?Ma#gju.9Eы/޾}[ӍwhkEJqQ[ԭMXe?<x6tTy윲rP(8bZ#*@Cl:IВFl^fNx"v=>MJ.u'3[=)O/x̰PW&F@lll6m
-R<:ncccggaz uut:`  ztaX;wa2 `@jd2=~8&&f$I9rR掹*d޷6ml8&lEz XL'ɊBÍrvF  .ID @r\{3]   'WVh4@@!  '8VxWz.rٲNEE lTD^2bpǏ7V@z_B 5mѣSlY6,
-5{VR9qIhKno 0J/P=|f:{W9 I᣼Dl @n~7^/_y޻g/ HA۶ߔT7{{TuQܕg8Nr8
->&3==]Vٕ,!IåzI('H0UmZR[ |!B H,*A/^8{3gz}i^T4C)66<6 df /kdM!nVܧ	 gL#p8R/jtUz7WЩCMnԲ"pܽk! Po 0g
- Nлcibw~ݻŋh4ҡHyICx#G{`45ڭ)7K~sq"W2k`;p;wڼ5UKUmy>޶"CB[T*`E(Ba("uz -:w:񓼔VuaAM۷:r;Yy7ySG=T(t  7Wɨ-hyMBݻWPPЪU2k)EApT.xyy	8-@ m*TqTzѓ'O*vC\gmرԐ.3~ ܞ]tмD"LxXض Х^Wn! H Re O>|+  qcoզ  Sy{q {>^;"W~ݥ_}USBThNZTW/Î9ٳÇ4UI#8h3~|tuttC4d˦tƥ~S8rExY7o朔\כh1$éQB 9L&G7
-mZ{	  l6}f$Je2:uvtu'sOS  ++A[p@R$b\t@ZXT*mmml6ÁM;5+qj؀r$333Ϟ=UXXئM~4hkΝwm_>xLf<zc0餧_֛<)CmOIJap3&6Qab{Y$W%V:H=un  guZ>.G@`w屵x瞫dx*r+U;#5BcIɅ.bs obWk^b
-ݢEhV|t JJJ*--<&(WuѼY,օxL1%8 XS?]da֭<ꨏ؍gi\:U^2+upHN)s/+;ڊgδ][/_'SHWDxR 
-#O,$}]`dddrOO\3666pZ/%r= ;;˛7o.((ݻUтK}B˗om2F{\H:1sZ}cnޒvj Ӎ~_o2nRv
-ăDo)ĤA:Nc]ޗF,C DmS5'Je_
-D9HZF]3Y|v)=slᷡm(   6-7xWSN9sYZ 4JM(߿?==}Ϟ=CuC?8Կ @\cǎ}ﲢ_-k*>C"2jD8\˅goϘ~Ч\\<.B+-Ӳt+	ɤXM&䇟JTR=C=]rJax8EܾWrJ49<||@'iϋqKi
-
-[ş>d0 PׁJL&rD!](q߻W8q3,р)R bŢ	yx@x),,=}ӧO[J7Wnn_rc77߳
-3B9qBşozv Zz̲z7zVRV!%S:մ姿RjHb&a|  ߻/4'_,  CHś ֟3?+K/_M[-Po{jg\M[~zY1-Jڳ4f}WFQٳgWZ5닐Naes5srrܽ{&%%EEEtZ<%&#kN֮^PkmOWؑcno/ظۙy#/㦯}`<h]U2}j>QAdvt:y/گoj!'G~A9t:}zvNhwR/zt0 лg-KK1=7v4IbIE/ܽH/>}&r#!㤇UvM:~SVTTj.EZHD A
-APPDC%S5@ { 1A(s?~<33300~hc42\)ruɿb("8AMw߭V-z3QS'4MLu4`k<߲/{f #yPfļ/7<K/nlC-	b:wHzzlX'l.d#ALG6_z@ܱ#޹mlhf=1fGEEYF5iҊΝ>>sݓ'O8y\;Fy0!-{~W>cǎq9/+ɔ;4sIL*w觅R/]Ac]ILEi4BVk0o.s4q˶2r7_߳.0kF 5/9SosTf @0vm.D>=8rOpOoyiiǎA|}l<mr:FJJ5wq*=M&NQngzMT榢['5b&5QXXHD"'9	@ { ,yyynڿǏ,YA
-j'Mϟ_\V(.X`dqqA~^1aM\J}о
-ddw p~Kb@MVWQr)C{;9"=Wz/GZ?XXVRW=SZoR*Hl+n]DBء#:coص͸df=pΝ; ?v"˳t<t-;d2}|T*U1yM[}AYOop۷e-U@~0yw-.<IOy*M{^#7q%I
- bmlx!.ݺUʌHm[{&%ܼ G&SIP0n޼?t$W_j0<IRt:6Ng'GAb1`U x[-哖F#nq$A8N \JֆA;r%skҮKd(0!4SFFEQEaicp%@ҨJׯ_߳gOrr_|1N$bob;8l>f6l؄1BZ "Q1,:ؽws['7#A}R  iޢ@J+-XTP xt{Ws<?c9М+,z"?wșonECfJHޢE|5<0M2{Ę9|Ч`2ckz@ wܩh~86$I^\<>}^ROT!H)l| 7}˖-ORyɚ,Y,hM&$-CŢWWIx<fO<BC\u:#fƼFØLUMk$Dc5u5Ct.QZ1V;(
-{
-IϞ=p8^^^,u.LVVNNNBP$zh[p\AZƍgϞvtt\OP^\$z{f0`w C26;/  R 80f.k?ί4 E<G BX<4>=r|fM,<Tȯ[c<ws!~j,0ņ/~6/4jD8lE e۵k׮]jƹY~=T:}w7nhO~ .ɳol[^zu8οg 0|xFe2ic0u<AyEjI5J߿n#P(lAлR*> 垏JuSNݽ{W,ϟ?87aޯEURR2x=L) @f~㾂/{0+y$p_"fQJ\Q%R..RmFbO/˫*n %<f2c-1mWQEW]kcc?Z`
-E`s2c-YsHiӦ#GL	̱xtZii.W9fAwލ7C'Pރ7,Yx޽	Ӄh @;
-E#P
-Jrq+++___`0	 ^ӭ[NzA H#=8jӧիW4WTR4cڭ߳Gg/!/ )41r.*
- NVKa   H:5Yqrz{r};PPw;#G2zs_qtp,㎮[_7>ZcX;lWfXٗK%k׮=uN/V;bMHcbb>|hd#h 8CLνl?׎w`زiva4HMSC2{rlf$(FR	'''R^@ (|t:8111(FDD{Bϱݻ;ovD@4Pwf]O8N+NB	P ja?SBK*VsH1u5&+f8c-^^^zZqy[D}ETKO+jkwKOR/7  &hG~BxEt:ŋܹ('EXgoǏzլ%m 8@zGLI̗Q#VRR`GGG'''@܈@9P !'N8}4:tp<`z	Xv(..ׯiV9 BJN)}jb3@`
- VƼa\~!/qMZz^׮InzrP­=w1ן'ˌvuGT)d}Qx2vt:R  X4I"?w+V˗Qʲ1]l΄	"̙3O<)//e׉T}/c!=gguܹ3`OaP~uqq1 ёD'iYoPL$9swwr,Zbfҥ˖- L63E@ (|Ph4'N\tIkaN +A>@ԩ젠@4PIqM|eh6IE+{Ɩ`+*@*0Lq-O۫r4BB]}z_ʌuGLLcrB:̏]޿?&޼a@ g8  ),VJLLϛ7Eu~AteeCxCۻo~o_`_s]
-%yGȄEKf鄡CQh~~~aakӦMb!
-P~fϕ888:88@@*bX.O>=222,,F7T8@@3P@0O>=vX\\ ڵޮ[Yڰ=}۴i鯅M<dȂ ,6.UW۠~ Sh
-J&vՂBun8U~eWwK[(r_"%3}G۹cl{GŨ,]zGV^m3gH)霳MΝ;}*2$'IQdLX<իK5fb*aM/RrssLKmIhr<//`0Z[[;;;E7r猌#GT?mʕ5=P@ (PxJJJ\\Ν;
-ŠAvP\4f'X[yXRR	k&PDnRд@>ȯˮAh̞kW/qD>tJ_fqdg88xL(@^u̹aK_^{qc,Po_z,3N" (9f-U<XreԩK}|Ŗ=+kat:=***++k޽ZZbI'7/sa?d2,55u7_ I/?^(%FڶqEpٳg899R_T!{^^ ^}߿N4)-yŋ7o߶Ae\U̬蘧%?=ttu,fJz2@zѬѐ͒%TbK&wPr?~ٲU_w'b>Qs!sWnVd|ˋUOl>g-l  Qotro?Yq
--Kqh4ھ}rssO:;jhRR4o0| DϿK׬))`4<Ɉk4D2B5%ΪΦ$hmm-IDQ+Wл@7j$cǎ[˾+>lg7(;[lur+A	ȌT:vѕ[E>-:d]5!s@3Է6$8<03iJ}4'=E0$x[NFAQzJ;bdp։~JcmlVB,-Aբe<mRRRBBںuPTR4;;[&1lgG'Fa*Mhj/RSSs.YLl`?[[f=@**c޻wOV;99hтthH}SN۷m*8=7o<qDffϷ_= Z^nmN8;zڵ˖~֣E:cR~!|lwΑ,շoe:Zsۗ(*mlm>˪? AK>d|F/K!"y(6`Wö6K'>5^j>v؆jhvs6EF>p/Zm1ؾ4PBsXcǎ9rD1ybw7P)/) ZWׯίKIH
- d_Wj+07*p/d@u[T>RdƷ ^]FG_ GGG$f" $㸋?ł{rA^GFFFBBBFFx}`:FWuA { 1(Lv̙ݻwKO>dɢEPQVfYnnkmmmt1#tLTAi6:ir&*v=	왉wEȵ(Nvwk[vK$φ˔}^$ur 5X-/MzXowjHٵ},nԊ4lte;d1'2б%V#GپuOÆj#ouX٣Wfo_$)˛4÷o>{J0/?E2y.
-Eć$%%qsE+$Y1pY dMO*WŦrR3vʋ)(2*'W]񯓷*Eg]+֒s#dZ{a^g][PW HEp:n0222lvR7;'=WZZP(!3}؊#3GFF """<==k°]A { d***zǯ\liC{Ө6=~?h4ɓǎi C>6$_~ezoV
-cد;(Xh%mEbr @iIi.aA/g)Z5aÔsƐY.]vQּ*|y)LlZ?bİ0b  Yk1VfXnn1uVLL^4S0>op[[l!fZU+Es.XƻvPEEmHk^wr;WqrmԒ~-VZsx۩+>TѪX34(//L-1bR4))I.{{{;;;;::A^9WulbvYt5rʺu։'={/H82Y{(KH~@ 6lظQl 4J[K<.eC)̤VI& TTX,8*[*bǅrv<w5`DޘOZ?-^\|k|Ҧ~v&NRm_
-En-)|6#lfmW)ٷoJ助S
- [4_L6E$bNLo߾}MN1n]{1&,dΡ  ˍR+U;1O*v^@ܣ ,AHQQF)++c2|>d§
-fgڴiӦMݻw|´iӖ-[Psc@ (4R(7oތz𡝝ݴi&88pJKwϩiGNξSL<މ* y^o{qp
-0LnmOMqmLQh<.@+)b;ѽ	Y	>ͽd"]%  Bxk?r֣qg-:<F"9!kV]:wZmX;BGt  s~۲eӧU*WstUւ$l̙9ؔiaVRȿ`)t.hlڴi@@ Fp%:[l l޼yڴi K̘wjOEi@AQTyyy||3gn߾-
-ǎ;.74dINNgeݰ 1m@!tnV|Mpyۏ`W/E.UFu,/ǓWP	-:>ә}yB^nZ%wDZ)^oow%½4;rd%yfJ	lgr[vdEee_Wݗ!g[lzN.ZEQڢ2JJXYƌA۷o6`c'kS =@B!J2++ё$I8'ԈY멑:l@ Hc=\yhww!Ct(*B,Gj>Jk׮sg5	rȃzY?83=.^.(0)L!=Djmajn KroԤgN>b1X W!]ޙ4É?m(8|w>=TgKQm5cμ5Zo9l  h@6{޺uݻodew.1.<zHՎRre8sU@ hVVVIIhp8,ʁnY˷GU@ ;Pi,(?ŋ:nܸqK;t*-mhG"٭߶d2o~֌V BUpV/(U
-Ds]!ŠrMԠObn"RBXpF))(_{Lُ~-(KR(7Gc,)pPh8J׺B!6o  ^`;hӦMw%2|޼RY4_L+ٍbΞ=k׮G@ ~DH$f 5"ryddd_O=> Z۷ϝ;bF1ys|Ӑ%1YYCO<ѣǗ:;md$GΞO2d}vGӗobT2ӫܜf6JCbTUh]B]m=JЩ*\rⴍUz4pEil8G"Z?Z:nocÃM ̝-^fǏiyx0,/P|P,1?>33СC&ఈ tpBS0;;;///:"""lٲl2\^E񉍍%]dn@ =%**++(vyJv^%%CDGQ4񂂂֭[Z9#
-=Ixsso?1`Kf|3DI)8qQa^x+C) HDz1SoR)_|hS_dӴ;Y4Au,BmbuWJ[?:r۞]]İ hXٴ	L.?Ν;k֬1͞  cb_d2=ZZZz9[nN@(I@j{#$CKJJD"Q``+aʁʕ+"#####́lR:  ,,u}=0,4!=V[l9W`ްB?ԢEo[ @4P)O/&*ѐT!2cGiHiZV;   Mz܄+*`[Nnr.$@GIʣ|#	iѬ9?ն+>`'Öo~P@+~Zi&I_0JJ,+:	xbzzɓ' #@E$77'++fqp*䵈☘aÆ2T= nݺ>|Gp=8񞞞Z (448'%%9sfO>#zl_^5=klڴ5_jAh
-(>s.4oO"VdL3+Ng'AYa @,14!p(H 8Y66ϳ3]z{8?n||ןOHdk[u0xCC\`   @ׯsիW7n܈OODe0dzfXG9tJіG @8Y⼼r6meeeeera@j$$$&$$#7ⰰnݺ}^*vt@ \.OHH0?X̎111?g {Fu̙f͚=Hk).D̙7n.(TAfVI2?ݴ#XLpd;gu0FDZ
- ose8.*MwK& @^O ;Ҟp˶ߨu׭piɿ\=߀wץ  Qo_kJ~ \*C:XǏ?}r߸ ɂ>>'aT¸tdmm(HHH4;o=B=\ ۽{e˖j4PiHNNxbYYYXX؊s[taM{Ǐ{{{[S;BU_8yIv!01
-0Z6+׫yh	(KT  ;C 	ۓM3L ̴dʨw߷jʸy=ިugg*24
-mEa*k}᣷6o聆S   0i9?DEE޽d2};|WVeqۜEZÇ?y$..~cz9  PRR) |R˖-֭[DDv	E\MpU VK.<x0???<<|(&Nh_ׯ_ں}4ah!4PE3gk}2Kn ?`z3/= s,.;-ƠUHd.*}e2yiNY`پS!/p~BEOG8+Goߺqwe$O>e4o Jdȑ$I&''߻wcHynA BTaaL&3nnn,ԅ#G9rdoU@\c4PF̙3ΝYt ߠ˦(.7K͘1cH!^TVk:6BL.ѻaw[xz5\)aC8b6&'>OI|ne~  ]w(6|BQl1_x0`>P8yZqʤ6    ]~]9b;vɓ}Ts}Z<[-o҄6~o߾}"4T o3US*Krk*RBUqO⒒pŁmBjgfMu=&!H19rHFFҥKa4 Pqqqvz𡧧رcJrsZݠ3<22֭[ݺu[rvp@ P¼'=/7Pvy偹%oLjIϯO
-.hk0'EQT򖅴f\_ ֟NIOvBYӣGćĸ&%4ȯ$/oaȐk׮egg;;;K$*	BL.US{R$U]R5&򦅬c	kɫ`Rmk<^asy[M9UnJtV{<???%% ^bRK.]tiFFFlllll#GT_C H"#####͟MfrGvvիW#77CN
-
-4  $T*]) P Hh*p9+mfza>-K8VSq~]84 W:MiD)W^^^ֳaGƫҶ齇]!GJkB޽_6T)+^		iٲ妠ʙ$zCnn\.tEEEJtRTMy^\ץϩE
-K6!eeJ^7#kQ|0LPtOOO{{{H1<m4\~ȑ*\.R#C : +n~1LL&EQ[[[WWWGGG@@(Ft-
-I"$iee%
-Z-"܁*<FCUXCy0s~@hc-7
-(c#c=:2$<yJc0=Z?}t"MgիFu*p{|X(e!'O`7(7Զ#@
-jm.]dgg7y,&kwҥ"[[֭[yyyq8AH|CG
-E-֮>mZ\٣-_nTKVeuFX:UκSc5^:-|F6=qDgggbxڴibX,oٲ_{1!ți{ Py$IٱX,$10GҰ1&ǙL&EQr\CUͦ4Z%h>nJFJҳ9l:x._,=Ֆuk5*Ҩ!`y[v?>Z.弡cxo]ڱuib{y#Mh׬O<{H$6l0:PZfgGݻ{.A=z8pYyk7Jeu"}V2Op׮]q~=¯'66V.W=Ci@!IbjA8ސpGQTaa\.j 0@3UͦhF#AYvZ1S?mTohře`C?_YLĶE,/W4J"vjzY}K!kA;~ͪbCcc<̞vʨN7=ݺuD"0akz Yhk{$1Fuݺuxp@ oMFFFS|DDDXX뮭c@ (3\.f!Jsssd". $añ2;{SAtcj%B~rbfP7[@lk[kNrC=(a19>jd(GI#cDN~ V~=(=RZH/Lh-lC;}Awg;wvYRidMq2k?/^H'|ҧOO>D @@ [3}*+* I%r|ذa KN6I
-,  bi4  h$fl6E$	04Eb7+ւɤ8)-:z:xL^^J<! f JӲ%ybcsĎd>LuC-.,(|B^^^AڧF~omzy/<:~J2dȜ NAh=kc755:::''׷O>aaavvv..W  Xr/]Z@X,>|pjNnbbbMlٲʋI!gH4/`Xnnn(F04L'NjI"jhPhtD R9f}wܠ2)˔6bhin<pa[ P)yY@lKb2S^M\(^>kF(x_ʌDYq,&X@>F?8)9p?zJݻ ~Cm2Hr/_LQT{ղeKD@ \._lYBB¿nG8YpQ-5iF]>BQ$Ifq7  Hjl6H*znUP:+/7UA%4;&,U$im+<á_ϔC;KPSBh I%RGb+{[4\C!gX/=2S +geŅ=Y&11[ns۵otb¸,wwkF@ w'&&ݬ9rd{?`sA w'22qguVABQ7tAL&  \Xh2˅n5aH6pb){˹\uzh`z
-EQLfG  ַY/ QōyOoE  /qv5ڒMY;BVGsf.kpq1oq*--m׮ݬ@C 8:.]޵k֭[{xxR_DDDl޼̬߮.[+<<ݧ"B3@ޑaÆ V\	s= VeX9P59A튵Z-ieenĉ[6ݓH8EѢvjshޓ=,vo4G  JgJ\ wTKv乄wꥐՑ(Kgtw3=BZ|-nbB%
-7o9ҫWFrCtə?XZzOիk׮vvvP@ K`}IHHXlّ#GjP{ ;paX*_0e^Ba4l6NߎEQL&CU$D$P_̅!׳gF#A#q*?N]bp8εm'EqB8 %_w S-va{K!V/8pוXzk7O^a#n;0W/_:8N?w\\\a]vm۶'\@ F,{zzֲzN=P@ o͑#G-[9}tP=0Nru:x(A'J	E:A뚺h~ewv:U~V	q/t:wǨli=kL&A+cs
-V+St*˩c!+@_OChlFgF׮ۡ}*?5rm<xΝQ逡vín#糲u֩S'///^			GIHH|<,,uOw@ oMXX͛+{,2υUPp\ y?,NGp8AQpk4h4Ri9q: E 4zu~QWfzKiNgػ1NU4ԁ   ׎/OO[6Lk]$#e׾zX_6YbfbŪo^[AWWצ+qqq...k2a
-EM
-7ݺuٳ@ K`w9R%@OXXXDDDDDD-{嘽{`.xzzָ;;>'
-ǹ\.IPQE(~=BQ\.h4t:㲡Smˤz{7<1	%Q{CR(!#ȗ.c$Eht EN})reVVֲL,SbP%MݨSG뱐U
-|_mGW~	G22n\v-$$$""7I6cIc޿NjժsAAAP@ Kн{G"""h/#34bSPR(B0t:%W1ojF#F@UeX4C
-ԟ6|9i%XMV1pk;2?뫑^`$IA+ޱ.na  @c^{V(7~=~걐U
-<~B1Q/G͘ʔܹsVVVKJ"cd6͛			(vÃfC@ Ey; 4s {S$d2Y,a4嫏 JQh0T*REsi LAr`_aqf_Sw;;{*0f&p*I1lҤw(q/G.\ϵGhl+  ~Z)(d湑U
-ܬjbZ8hOf,ׅFo1i_N:d2;ޞ@L.qP> H޽woC 刈6mZna^`zKg| =xL&STtd0h\|>A iC!{NcZ5!wޫJhk̃4
-b?63'᤮\/RD)1?K$N*|aI?໵{  eG^/YoxYSfd#Tl϶8iSlw<x A'NҤ	?/a&+.ܾ}`0lٲW^Zv@ Q/c˖-r<66V,yzz]~}	]{ q($t{yy9EQ!Z&k &aL&S$(JP\AaL.B=3ئuQRO2uiR
-+WL8`IP&C߱KҰoF/x MIQI-crl 6'QZXGF5"ǚ}0r-0.=<Nӧϔ@aCi=ceu89ڵkw=z		v@ K0}ʻqE -["""6o:@ p9C9j8k4^/bJw|Sف>szA0`t{``J&I&M5&&컻I6f6idZ^C6c.F.c<?Ws%I2L			E~
-rqP.WwV~+gt#U7xVy	CI=7Y?H{n/g/?
-!(M{su>35=rv<<_|aF^M^<v7Nն*U>D^z+8'x['̻V޾zuǎ999-7oa *QVVzJKK׭[WQQZyz͚5^R<  czD#;!ÈT*,]]]Sey#(RT NSu`Pq	|UN-(Oc,N]$-~ߢ(:(JEIjӂ?e8MN5,Z?f8W|"+|H[3o͛7{͛)h39ڦ%K̙3'++ aÆ^<ׯ.//F7 {F(*(Fq$IԍFI(JgrnJ~"t;NR#S_		AϏn7=!D}=qɜJ˒x⽟W^?9bjWdBŨ~?Ep)όT!x7҃FzϼϱaPǔ/W^]`}436Yz믿~I&-_|X  6	!6lXn]Ĉ-Ͷi&e#?ϑ  v.NcFLQTww &I:$1E	l8eYax$u
-YU"EP}_ՑQ̴Ə~d=Ѭ3	B,}ٷ?3V&ZuҢ ?g+MxqϦ`!ƱB~YC$ټ^:k֬o|1HV>߁Ν;g2ʖ-[Q5  @&lKY_J#Y  &=#OE^dYNNNX,@(Q"1YEɤt#2McY-Pah'lߴvҔdgrHoޟhءd-!9b8BHץ?>_%Bu)FAGº)씹52Fө]3Fꔥ_oyxD\a._yuիW͛O~rFo/ؾyaҤI+W,))j X|Ap;s  \Q&H6`Q&I׻.AdhN<--kXsIe?
-P{ztQU߯(dͷ	aoJm<ހkRkIHx^uzRTk[nrW:_,]4\uҞ򓟾k׮yG~'&6`ӧ-ʕ+zɓ't?  ֔20 `,C䉢h$IbY^Qu:]P=$~'IX:1fFeZsSԗ?Fd%o~Oz{͂ L:]/+v]4ZmOwGgs}٩Aa	!׮41S
-+~'[;.0S7pV^\h36$$MJݵ*dԩ {6~~p8*++C|  2=#aGӴ,
-<aؗFeT*U pݲ/~nV8q	︧'8U#R-o)|J
-:suՌeR9!>)=vSҲ/Y"Q0y{c6ŵi9ٲeKRRs=	͊4-L8>~8q3g\`Ann^gu c<UUU˱+jkkC2z  >,>$IR&FJt:eYk\cyd0FFeYiBhB$T1qq:eOvzMrXѸU%^Atww%49)>]E	;Sk+Yӧ(B#rXֺ6F2Y'f~,u#8z/''[Zb!dKL|뭷vIQԒ%KVXaP1  f)yB#***~=  c➑GӴ$IVeYYu:^V+k15D(02~Zj6x_71){;x2Xݛ\._fW Ob-IRggs_y!虁v7eY"B'K^=p3D~o-HaRd=\ݻzի?nn͡Ÿzݻ?Y񢢢x hX,555k֬QZohhXKY}+]{(B qSfq**>>^e8Hӱz!:Nx<y{"4שx^!=\󹟾zij[ _Au!˞	h?V!Vs#X
-Z[ s,Tb^<9;RW]^ʋ/5˄|3_2rVlڦ-g?~\iӦ! uJtQBA^^^>= @@El6+9UteuO(2vodΞފ'VYRP>xhk"_Jh|mҔg?.q]IHx%zK#Xr?6l,T_?\U=?Vzuuu XbgO67hxڙ'n
-
-.\z  n38>  c:)q .YZeY\#oHEQZ`0ȲzEQDӗJBOlAW{vowRSs7xy^3){]%Bo$q}QNzR_29Ɉ9joٹbŊ?Xj{{g-%/oܹ1++tܹǡj     {FEQu: (J4'*_zEӴ 2QSć
-g4jVy%`\lZ?C'|Zn~m'w[G]btow7~SQ8W	7//Gsϋ_rt9glp%7ov8re[z$'.ϗ.ر֭['O...5kVrr2O  GYa=b|>|K </&IJ	!^c_ahVT$Y)£"p,qLo3#qI__?NzdV^7w?o`)}ysubA&۾U#UȾ~-?fg'2]//֭[v=pl$izs]^/\fjT h+++-޸q.(
-	> Xg)$&&j4V<0^Ƽw#Jzzz<d-MPSt:(J]]gOlF'~{,k̔1sUuS,]:oL9B4Nԉ߽b"ˣ^e۸{g?)_l5"=KGYhїzjAbzw\mm{iii~GWZ5qDF Ek׮Uвk׮l=  cBGq\zF0˲<32eY> ABSL$^edB2`yk>HrdSF%EHw)Yz_rh--gN51}cG>V|
-.I6wgΜ1cƓO>9MC[Ç_~=))i-@ 01\6l9qb!TWWc 0!yE)S0hAhkkh42;
-ݩhQtFQR@̻=X!8^BD͍?_e?TSݓ?|9)
-?Y(nw~%ɣ!]zOygoӧO0V!Y~7<ϟxӧT R:D,B  0 
-J%˲d
-]]]$ꮮ.I"t9%ʰ2ei(JQ4)'@S̯a'Tqvd~RQy궸h^*d?ZŒQ,cׯ|9?7n%ؔ겲>BUuv,ONޣVs'$I˗/Ϗo  cD[vpoE0 `C?* Mӽ$FaxH:MHz}>,3$$(bdO߿vk0pw{as|	cߴX4#XȈYؼz^+W0>Bԍ)?ݻw?㟎&!$`j7mvVp⼼<ш ;[s  cKQRDQ4zaQEQ(Bi$8B|^WYT}ivx()2IYs{Nͧ߻4bm;B-p߾=?eK&osR):yfAV\|f5fˮq܎;?.9sx	ݞ|  8=EI+&  iHlj:Ns|j{hZYՊ$!_p'%}d:m=~o[G+#ߪ?{*so}廟BF5//3g{
-KzoJNl߾]?㟝6c.[o:t	͛jժfdd 0Ƭ_C՟wy 1N)iiG8eYćobAVU<)
-YO*,q:3 CG_|zҩk"yig3x5KT!9S[A\/_͖X\WlǗ?ٶmEQW)$3Ӵ:s>eeeeYT x{Ɠ <pG,T*(tvvvAY!4{Iz~1ͲtoZCˢo=O^r|#1?z;.+?/f$?g2/+1̇|^ڶm[zSn݊.\aouV9sE͙3'==C b7l0g6.--l74[G/Lmmf F➨(JeVq||x)tWJLEfkjB"8U4MWy$;뗫tTNz~_~#X~
-;Qu?[~OpA{/[ouuu-Zhٷo"iYmZwرgϞiӦ͟??33SRn  ƚ<Y1+Geee씀&\eee֯_nݺa$ 0D$I4MVj@yeebt Pf	>K'2C}$B~_ny:Cm\gUoBZgh8cT9j~-?|z\!>Mݯ˗/^+2c%KzٳwQSS2eʔK! x(n<Č(++#X,rݮtz]UVWWW]]MX,֭C"=QheY5iAuC$Vzx<@@&EG,r]N.M>y{&O0i<v,d(ֈYy䥿9UwG%xnjj*))gYr.Wl'ݻwԔQVVlٲI&zT  @7*񊢴tT'ND+++S:"!\ ZgF(4KĲ4-F^Wt1Cu`Pk`oCz߽mזԞ-OU`i=/,B)p^_îٽc˖L"ƚ䭷jll5k>`e7%esG2+33s˗/>}: Xf'{UYYd=6m
-zFb;nWR	}  л'){%ؕ% ļu(RB(0{>Jhjmo"S*j(x/~΋}hP3re.U}FX?RL0S_O^'fSg6~3f<3%~?,}ܸql6ϝ;wZ-J x>pՕNRl4!N]]]ee2#i D(2ET*A;;;AL"[ѲLt0y^&,k{&&W	JwSP٦l?BteB%Q$RHߴ|}mS^E+4z4M?p-)_!dqC
-$|o}7w~_LeI)T앫u'o{O>t!OџdwWZaΘ|Ww}̙3fxɒ%  	V[[]SSrBK_SRTElp_ĉ+ᨪ"wfQ'Z8Si.d24rhQ$,?l2!DEt:$qF}4E3xTD(eY/0ؿfdNM5a(x>:t{UD);	="˄E
->QnYZt'?7pe~xgwkjjRRRx8MKL\gYoRAع{ɓ'	!˖-:udB  <wM/!>%goBm+:;Ųi&e]kVUU)]~4Nuuuee2p :=Yx<*h4B<q"ұzMqJbFBi>*M\8f^4D}ݴw
-dh&ʁAd*1јbT4Pû4Mt*ڮ9Dؔ߿'x99OHq۶?~\̞=dƌVU 
-um Ái'J׳qF%Q][[PUU5YB3Y,6TTT Fht4M'%%L&eANXE`0>>^)	M<y#lFz O$oO#^N+9;-ݓ|iK|#r7sl	k>1{D}	X6y98|!~f3Ħ`%d۶mOs}
-
-P1  !(TWW744G(AʴJǟ9|#`@-~_Hhj27l&N(|%K$I*J)!hEGhn-ҲL$IfYbřV~B5+Ӫq#jkwegYzɨ	e=$|!.Nk4:հjjrtte,%IF&&ltOng˯ٵkF)++tnܙn)$h}'dY={ŋgϞ xhb槲RcX	iaʏ4v="	 >mذAID{UUUk׮X,C} QiHDFAB0@%j(I8Nz].$kPGk>h:}^t)[i+ʦZ	7!drnҔ))&Ӈz3@TdC8N:s.ë?tƲVe͝3a|	6FEOoꯪlٲ<_;7=6Y_X<wȑ#N`EEE 0SXro15444* ZKښRʴAׯG0D(\eūTVK|R`0z UWzoj ILQѢ(B$IEieys'Pys.\gYlx0$<zƹ	!iqٙiia};:]`0r!EQC4q=gfXj\41ӛ?׿;Nsҥ-ZO>>`xرtuu-^xz  rA:wfC{WZZ:Pov"4a3 "4ޢEYyY=`P$eG!(JŲ,EQ`vb!,!j"]y/u._Y;=?uꔔx^|{x(Jq99	Ƒ-̶"L20#!j_uuy!ӦLO35v:}74BT*frnRzZ٬EYץm.=]>b#!?]{뭷zzzϟիgPO,FsE͞=;))I>  *--X,C{m6̗ۨ{ 4ޢ^eNhh4,|>%'$z}ll$FLL8{QDm~ܫ9qP}ol:mj괩)yyəQ#8^'xj4Idq}V&ˎ2gm;j/	ĲiSj6\vx,&f	М>C'&[1MSMM1=-)ɨQs 
->sᆳZzz|,7|fw]۶mknn^dɗzŸ6/Oڵ6mɒ%K.QF  r	su)S,]vƍw^zÆ_B+B-4M4hFc Po_jZjJRB"=tr+㟏lrB4nVashԌ8$Y	8d[YVI]c8?v|mBHvuvafJ)<ٹ寅V~aZͮZ_DNRXeauSJŔ.˛8!?=yFuo;%٤pxwG/ƿw[ZZv?>]X[m6}Çm6ۊ+,Xk0P5  @=PYYY[[[SS9DDȄ8:CFPeeeuuRTB]J00$Id6	Ǒ@ ŐiZP~?jg` !dyeS䥄2B;].^0ԡDݵo57Ȳ))Sh4iɲo'-W\ӏ<v!d$',sŀ ZNۗ/_{駋e9fYbںk׮Թs# {eX6m>oxܸq2rUUUuuuEEnWB%	
-̞ͦlp8֭[gٔӫ6mtYLCCCNN2=buuuJ&:4ޢHRe6YAEB$eiV&q8<˄ֹ{x^;y?ݗ	!*Sdο\,Ikmp{}AABfzuj954G8|:!$>^?(+;>ICG $&Y&սOMQ5,Qs.AhJM5OKNJ2v	ua^ә3gVZqJcӴ#)i۽{˗/[%K,Y$??d2j   $4kn]gkVWW;
-X,555J<T]]tYL}Kb
-  DeYIq!jY,2M;f*`𡭗WC^#$%_=s+7Y?8}kv|J{ (_G鴪ɓ-hԂ}kw^jM8!>;+ά}w!6[|aAɨL:G8sө23,^7uTI1͟_zܹsiiiV*OHд`uY>Ν;/]d0
-͛Q5  .4kxOǊæjhhP:(+v{D%?v=<C>ү'N(CB=zv;c;D&IzyJ%˲r8^[kVyVk4Cggg EQه,"z_V׻s\w:#_=6W0()yaK^eYfʜ>xֽBt:Ǔh-.ҥ˭oE15'ħ=Đ/Oo8p ;;'lV)&Y!-ؼyc8+**Zd̙3   wT}-Ųnݺ7X ˷GH `A-4M|>V+˲$IJ#LQeIl;d^VygFYJƑ\WóeU+eH\w|KnBHb!32)'1>^8}\~p))q&&Yj8A!$)8Ǟheη(L7`
-'s?ttk$B秕.ϛ7u4oŽǏիW~SGGlm>SNB
-
-
-/_n     'ZEQqqqoߖ$IR)QK"$B(T͒fhCU)</wψd6k/-M ˳kϕPˢ(&?3{|[B>nUTyBs-=Bnn~A$ffOKU^sQ$B:}eYeYieǷٻK?z,*79xa.&i265'c˖-{ndSccl4}ɓ/]t֬Y    qhE0,[,X8yEIR{0ǩjxJ9yWR1sYϮ?2g}ެ_~qq/}~0?orrhNfn%2MxuN<|:!j=2wBFF\_g69zb6kg̴{u0Y+m;(z7Nhiq^~FMS9Ĳ)Xa|hR7NٵkM˖-Imm1X08ԩS<^z޼yàn  `;a?fa& D$I~T*F|/t:3U`
- *a/r2!;dAN=;{gܫD'YO}vQFz\6\<.7\"_'uo;:%etK.yڝ;܄ɹI3^̼^ƪ`P{<.Oh>iBi_\0)'ohRO'{=}%%nwt2'v۶'NxӧL6-!!c  `#ү"6fUTT`Zt=})kt:B @8JI[S)'O4ql8.PP] G]yYzմ)
-3SCIϜm~OG._i#LI[/Ώz!dԴ8R)D%NZ}ݗ	!.̱%h4\-W3gMIja=yi+mѰ&ddfX.'D3W.4|YlJo/w4-ƭ[ٳ-##cѢEh4  Id@(Y,RQUUUTTu{ zAj(VaWP,ZysI2&i畕zvz'!$3bu߈tR+ص
-!`P?MEl03=N/!DT*6)
-t$I޺|ӭBȤcxs{+7	!Yւ))a%IcfNOQ0wt;:O0(?rF|~<'4/ªU==&TN֭[w>qĒyhZT  ۷oB^x^x'^%%%EanWI֖_ga'8x<,AϧVŹFs&TJ kKC>׮=Wm@15Ӧ*HЄ~Ͼ.BHfeB嶮n!EQFB,V.+ZW45=?u^*[wf%O<mjAv)Zt˦̞дJ{jku'w-Mj5;sF:h|xl߾3=6ECӲZh4ٳgMMM<#<Q7  0DzV|ʢT(QiinG@E qg0z}0t݁@ qY!<V_`s[":;ݯmCTR!wRbfhdJr}}gn]Ct移A
-II|n2f*!`\9sbVam:ASɛ8i9vPEӔ٬z'0iJ$'hᤶ7N+WAv659E>	oonݺ͛ӦM[zAZ4o߾͛-*-->}hD    @~w8D,9:N)iZ8!4MIZS.SEB8B.n!D	EQqqڬL찫srN!e`P#R8ve.KI6T^_<qQ$SD\B%*44M}ǅMBȄxi
-_Ջahe-Elov|9z !bPVX___XXjժOt|8LӧO566/Ydɒ%&M2L  ~&+~8eꆆuT?D7LjZ$J0 n6e6$YVT t:a !ⸯN3͂ 4%I$ɶ	qqßD7ΞkvC`~⅓z}{(4%˄)S;宎qx#!$.N[XcKP>sREQ8&ZꔼA#Y҅33!V}j)94ߡ/^lٮzrss{Ok[ZYdc6ѱgϞk׮Y,e˖fܯ =nr ~D#RwEE2<Du<zVv%IbYz^^1.	h4^n6~0sȲlkwq#I2EQd(J#x[/!$wR?;tyG,qAde=(}Z}!$#20#ުuP	!IƂu(\mWNTR!+˚pO1~Aջ{ٳg?%%Z[cZkÇ_xQ͙3g999  þsW Hn	!v# (*JEQ~OOOWW˲rzhJVFJ $Q}`P 8}5j
-(JmmoE-7;{c
-fOrwWgzeĉ3)iEt;xF7!DRM4З:џ:{muuuO=g'N447"QfM:u48  R* cfS nH$eFHX)A`Y6,$I<>cL&mo_	MAjr9{@@NeA.Eox=eS"$&eUk3'*Le(poxI1q)PG$|zk;vL/]9e{1̮]=3,Yb322jy  pwCi)(br'!DVs$It @bLӂ 0R$I>O MS^o04$=NߥmءFI)%閣q|&o5츳)JP/߷ڍ.BHzZܬ̄xCFrɲ|rmܷ HLˬL&iK8nҥ㻺bfNIڵk׹sh6mZIIIaaarr  
-cJ!FaEQ<e6P=O eYbhqNy֭[,2?hx^d:ǖ`4Cwgk\T$eodIy^EAǥ4uCپ{px=`uY%I)y^{K[^#h\=;;˪ph޹ris{h#2ϋz!$(c7~_j]ISŋrx06N/^h<ݗjݵkׁ~n_reIIINNNC  0 < GQQQNNNNNNhgxx(RVh4Z6<ht:(P%Fy^plLL4AIy;=?-3ӒbXt(7|Gw$$س秙L.ݥ׫j6dYnjٶ%s,!{+Wo5pxan=+<ww\t8|II3믟<tl!d*HO@ɛ54NN2NOKJ2X-zICQ	:/>|zݩ~BZ͖-OMM[o%v-++z$Z}ӧO;ӧ/_|Μ9iiiu  {o	 cbٴinxEEEiii]]ڵk1CqOt)kru:EQn"tl,btC	̌:ji=+ۭ(uw{zr۔似,kY,G%˲{b랽W}કS;Hiɱ%\P:hڵZ򼘚bv-u'.\^(tٔ^ص,CLϝ>KNOonw79yTK^oΞkol~HN2Θj6Ւ$wv[n;/]nr]y!EegYW?{=o:ɯU_ٽ{7˲O>gVp&ƷO<x))))..8q" n> tI+**!8!=Qt:d2uww+h<pDeYb2\.|Ï2FxDSSHr9}Ybi$)Q}`OR03}Vaܤ5,LĄ[%N1斞7N<)/Lb^pRDOAnpgYii/\l=pA	fH>k(7nP
-sEД(>_Ct:՜Ohcif^wIzm:::>񏗸too-LW.?~#;;{ѢEOOOG  #REpoب^~}CC<DW h4$B~{{{kkk0$,b:˲$x(J^b4M\~o\n([>zhE7sF?Vje~
-Ţ{d^dSkkv|>>b'YI9KL~biw;\Wt*Kn助s-qЇ HgϵPIH0*X(7#=.<
-'`MLL4:`Pqz{._7TI&54IYKL7w٬jnoR۷oonn9sc:lOO-ͷ,?k׮ٳgO<h4n  ݙ Mvvb?D($I*˱St:s$I9wmFEB#z҄H"hH[sL;yfw-͛^$IMk\|~Bvس>KMNN2MN>{,+yQb'LΜ>%/y4s?=7##n{AA3ZUaAƜ,QsOS,[+lx&GW'ȋ`4h,VN%Ϟn8ܴ'zז-[n޼9iҤG}tF67b\MWsʕ痔L6_  0R,Ď> o'p6qCqOTS,+ zh42z=8Ĳ4)sEvttY~X~ga)ySDRVn|ۂ?-5Z@54|z܄1d\Q6uETc)'_vZaaO<	Ev-k]f֖#O2b4a ApnՕb0qOtiZV$I^WE#cZA`yh4nۭVYejw^޶mӧ'L*)Fd4vXo77+z-ZTTT  FН=O2rA)--h.gD,N$),qEQ*A GhAz}zzVx<`^" SPHw˦m.]_bEyj96tɴѣ׮]cYvƌ/6mZ\\s  RE7OYN7(S&QT</@RM$ZmBBx<6lw}O<iX>}G뽩={Ν;ǲY/^<gΜd=  [D ц'0Yi[$S4Mx3/b[4#P<ϝم9dkߨ9rF?c19M{4K.B.\8eٌ  ^D4-(NS*J6$-&$ӴR$	!@v˄w5}|[/^1GiGYSTIE?ϕڀɴ%ܲeɓ'i1cƂj5j  sS ) ➨e70*Q)08+"i7E-Y%KROۯ}y-\ngee! `.Q}u1+Q01]0!DL&Bb\-Ax<`00 2a^9sΞGg{<LOOԏͲ|||Mݻ>eY5o<ͦO  ( л'DQ4L$$$dddtttDQ5"
-YAk4x}{ L]yܾ}`qq񚲲N't辄Ν;;vKJJT*j  %x_ qO/~Z0(EzlZw ѕҫW;o޼իW/d=^ߠV9r-==G?ĉZ-  bvW  0!^WE)c$IE	:XuG*JtnW5}l	oݴy掎fanmmMLL7oޢEu:  b   %_ \.;30)I"]׀^˲DQjg˓7ܛ7ovZVVViiz=ogYo6ܼyĉ[nf^TTm0p  6' `Bd2T*V+rOOO{{(JjcZ4ݣ>.G4	 wt{^;\|f=XQzhZ2ZWϞݻw[㋊-[6sD_Y  VB+sa8 X=<q`PV<*I`X6Y!$e`PHk	`(|7{lr̙'|S99VDвV{eΜmm;w<| SNMHH:\  K$  0wOt)Y8El6k4VǠ`0(	i4Z-rw]мk{{sv"Q>2-޻wիWZmAA%Kf͚%
-  /E& `\D,˲,'NhXAi(֥yט8ɤ,&4!j
-`W׸}˗/'&&\r̙֖tГEj]G^v-11qٲe˗/1cFBB  ] 1{KGCtbbbinnr|>1.MR^t|>	QB!! xB ow~뭷qO?Ψ!д#>ȑ#{=w,˖-+,,fY| hb< XBy^J%$I$)}(2Z{N|mmmfӴ@a0PYzSw?%e?7p䑾mٷAډs)]+o}ߋDy04>2PPn-C˪oݺСC˗/~ΜX]ѸO>|ܹ`08yd^XX  Fz   yCGGMʢ.Izzzc\Ib$l6\={9raQoKw8'/wu@}crDc߽)Q]_ /"=й7"	FA82@@6P:T;SryЪ6:D,rnܸq@ stvJӮ}ɓ.+77xΜ9&M8  0w8	  c(A,#˲	5ꢾsXRv^;޾oG{x=#x!޾G{*=dXRSwP=o%fY[ԔaYl˲;uʚ;wnPTh Qtgf, 0!:t:0Fζ6O9.$ɓzԩٳgL&vĈSҶHO4@ #`/{O7 bos2H!&@dd!xz!TqY(gҥX856Ԁz(!wvvNpiӦF| 
-
-G  =/Y9$bPx4NGPEY'̝;WY}ȠgP=e( Co2AP!,c${Ay>"
-9M_j79/PftkDV;ʲ=.6zkZcǎ=ؘ[RRh"U  uwp&  <_$FI<ZNJJjn[$bVSv{1e?aDdtF꜌>{iȉٶ|T Ν;|pww	ϟ?o޼)S(sC  N '-8Z9)))33p3wrIJپ=W5A!!.XvC?ښmۋfs,?-     A'u2H0t^WT͒E`hp\xС7553f'%%! ck h62p
--t:Y[0Zk8?  L,|СzF3cƌy$'',ry     7{NRL^x'Ht:%*ն͇ڷoߕ+Wh͝;wn~~~jj0  1lB 
-?G-'˒$j4JykkcВfɴeϞ=.\8.??gNOO.  7  <=Q'ZA3x!<ϳ,+ȲYCK1wx<{=~8EQv}ѢEv=;;[ =  :e%IZ&<V5(8E G/MjWBB{С.I&-]dҤIJ:  cEQH|  t dYVղ,|>VN^P cVcA裻iرcgϞaڴi%%%v=++h4 ؿI  ː5DEQ4Mp8hy>z^*)xдj<xYϗ7sl63  ].N mv@0h44M4-IF`Ce%^Cuvv̚5G͍ :  e{NEdYfY@ v%Ih4@@Rp yyG9rHkkkbbbQQќ9s&OlX3)  <@ 0a0W1CӴN$4$(q:]mmVk~~~QQɓp  t x081FeYZMqN"j4z ?Z32ޮ۵kWcccBBܹs,X  8}  2=Q'IZAhZ~0d&|M<DfѣG:t5NWTTx3fh4"  xP(?QP* "˲0u`iZl6,KQZVeQ)I"j5\ Sfɓuuuz~֬Y˗/5kVrr2q8I   p "͛7/\cT,{baV!z^YK%qӃS0^IZY:tFF3yYfedd0Y;  <h]{ v駟^pabb(CoDefJe2F#$ɲz1qxƲVk]]ǯ]0̙3KJJ
-     qIII{rʩS>OL2eϫ'(R&h4<{<áR\.d2Q<Oh"4![lm<CϢ1{vrעFl<)郼nvdC!?`zxd~r9P 4-:7o>|ɓNSzV\iZZ-> A9+2sDRȲo8pॗ^:{lyyʕ+qv~r:&aI>h4EGY7kw}={w{t0n6+䦤z䮯kㆿ~kax]C7[tXH@~W@@)
-9^/<%qZ[ZZΟ?o߾3gtww,X ==  2C  S(Z=X^^޶m^;v\rϱ{bAѨRnw{{{\\\cc͛9cFš4/Ek{uOe7C#a?kD^ PA*e([3HI"ÍS/ARׯ={̜9駟~222  4CE34@}*QIǞв__Bi	*tG:"E<t_=HB?)x	m=Gty0b{~JCs\E<W$_ ߛ~{ݾUI8om@gWQ##%,C?~ċ:	]] G{fWVeBQ}PGQS9#.A~@(x=5r:33sժUӿ/jjjJJJeee)+!
-l6{<vB=|pV .;@$zyjT>rVcD!v&o.轺1ÎP=b)Ryү|+)))< qpgK	w7ٻ*!)IjQԂUؔe9HP[5"lj7l#
-ַ	. 
-=K7eoC: 0
-oGl3+?dQZAN Mweo}k$"JTW&2CtBMDo/?Uk?P7(:tKQT?־갨#r/~~_])%|ɝrZxf+}Mk_ZD*7hWo#qԩg677ߜ={60{`	Y[[[ڬV	蒻_z1%@)Ѯ`Gi	mg2q0n[xիW# !4啶bNTfeKQ$zc,EhaIȇО#n3dnD9	{eh:"w&,%T1%,P$(d#0T(p	O"^`UD^K}+=<H`zK7Ζ[;:cpXpd+YxoE}5<e˖SN2%)955cNd4vF/A:MFea?e^3\b 㪆>[>FáuWdLC=JY8֖dɒbA  B_y~?8! ꓟdnS100bb6}:)BDQTz5}+۬Fqn~(7J4O7|T`DNg[[[GGRnn̙3fԏEQ۰[CyAJC6A}f=	^K; )>0jS{aT'xI=8V0JX,p xѡji6^Wuzj~#ZM1PAC̆~{yD+ܗG܍Dcw>[6 H۾m7G wh(XD'A.A6hMէՇ{8COy$z5$ 嗢67n<xp޽ׯ_eyڴi%%%K,)**2Lfz=v].Ìs}vF|R/֑Ig#=@ѭDJj[>     ___gϞ۷yٳgXbSLq'DQJG6·olG5#S"жQ?X4MT*=     cJooݻ_{Ǐ~ͶpUVqy{a       ,kGMMM]hѲefϞmX8w       g]]]~ifϞ?n\     Xee@Zn !D@  IZAq     ܨx4 Z     WZZZZZ  
-=      R        `<A     0ΕUWWQEQTYYY试999eee{p8YNs]]]ıQ_l>kkk׮]kZ-VڵkG[[[f͚ЖETVV*eXvmߧY
-W2      <݆b	KKK?UTToڴ)|
-;Úc?P
-qDhƍZ,ДF֭wʉ'7n܈+
-     x(8ݾiӦ'NlذRYYg>qĉ'T%Lee[nן8qߞ5C7ģG?T %*S]]tޱX,6mV7ҥ=	X     AnQ!flv鐰7ZJBR7*HNNNCCb"<N	uQBUZZZSSsOG3 jB֭[zԄw
-)**8򬊊A 4     x544~Ts***³ZMĒ^JD9CGYlGO@+Snݺ~rNhc%{O;     "b RD4CJI,K6N Y ~!=@	NHh?\.ZI`#`<A     lw_KW]-Rv.( qq     C-4M++**֮]᪫SƔa$3{      jCw2㭢w%DʜЃQZyQj     xF<EJ!w"	xdG+
-;ʖ% =      R;Leetp*|3QYYwcNDTUUчn+TUU2 Ʌ=0      xH)s;2%*++A9VzhꢢG$)k׮mhhhhhTIh&k*AᨭOC#ɛq18     !n:eXvj-**ZvmDݾq֬YoJaOUUUNNNNNxG'v}ӦMJ~"ZVV~^kK     gM3"oܸ<4i4b㊊
-YiiiEEjءb9qDUUU(lJRWW>PC"/ oDɲ       iRR![|ڵUUU6s     E~`M.      eX7      f      0)SDL<f9ZVQQZ``T        
-       W        +{        =        
-       qq              `\A       0        W        +{        =        
-       qq              `\A       0        W        +{        =        
-       qq              `\A       0        W        +{        =        
-       qq              `\A       0        W        +{        =        
-       qq              `\A       0        W        +{        =        
-       qq              `\A       0        W        +{        =        
-       qq              `\A       0        W        +{        =        ? 27Ƣ;    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.dia ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.dia
--- ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,29 @@
+     ]KoɑWU.e+#Mc{BKpM&53o|%VE`f@M:xgۇ77W?yb}/_Շo\~x?~믿voVכSw~@叿{8_ݮ\t~qջ\:zwחכ.xǼ9[>fwM<o.珏H
+MOu#j1n.N #gxvo۲lnӖ͛כ1˷חUf}8wˠc2d OוDc~sq(
+o~'g_.n.^dпڐ?1uk18_P4O'{??z~//8ͧw;~?w]]6/ח__e"xUSgexlIJ\޾}dDY]\gFy&|@;j_tc17ICD|L	1bj_vRb4n%NPRΠHb o|}uiO#'βjysvXOPv}3/y΄\fHN¨Q<]!jg812,aPܠd*>BĒxDEJ'iI91b"t[3IH53ӂ'LgtY eF&Ǡ3-+E9Qp
+Od ;NIqFn_b[֧9M=e>_=5d5: aыP2#FCc+4]fuE!@R@t(ۡO.,Hl0]CU49	]9C6'" C3]t$] ngGb!iTt{jqH~)b")SC)OFi"<YusR
+'FAcB
+]2#   {BDDj;ݎ!~hd8!iX<1o  
+ aJtޒQD/xf%xM588ײ=-俭//_`R]_Շ?f勛ϱ+,sXogy}xjxqNM(.3Շ𗺾7y{r0/`&(Mk4Qw!ԏU9X8eV4ňWMTI'u&J(&YHC^cBmS4OاSI!=)@O5OY',wA,ðzE!g8#_cz:Y)J9Lj)wVNAPw>^I_3s R߬6_W]r}~0<M;yNlN3!`#gT傣2'H,DQ'Hk+(B\z,ڨ)6J0!C9/ӴQ:بSQP#Ŏd֮N6;(byi=8jP'uJ2(^b!WyV8xH9ױT%(3,c`⹯@p),E
+@S[ՀÔsvG{( FUO&`Al(vAHHTw{>V%*.u98r؝vȽ3JRRhnBOzEUq*8Gע9( R"DR,H]ZR}ߙS#.	I
+{ջl>rιt #X0`B{!RgpOFL\'Ǒ/SfW>/+\ܧ؋<z(ܩ!9wtVc/uf΀ЋGyA_ַV&YCLXfqN'h`%sR}:Oy+'k3%8sSu;r*ibg_n/k00yܒC0] J{>ЙXLa}e/XHuUc8loW,	9hy`'?~#rꕩ	-٧>ڷ1,~wRBTcWy;>T2_Z%ڢKDuKΥeq'8m<ar²{q*kbN:Qf##!b2o;/s
+jNf9;Nu*kbN:M)btN'(9/JiNem\lzPT1ҎibMNgM%vw./޼\=洶Վ,k'Um˨-Zk'5^oכ=N@7咲1HuNwt9a9INac1/gEj!@꡻UHN-pBuV"#3B<sq3:Iw´SL%+5VG	;D3/̜31Kڸ姗Q5i9qfDNIe|sLA=EIQL)dxXq@pjldETsB/)7&/2s&/T*!5Wi-PmURI]zc[K	@sf.3sO;թBUFkevg
+*v0q
+?-٭so(ɹ4<ݽa#6W_7 t^4/^nˋAY˶EjFbfvN´/k[HԌFLAk>~AfĚ0!m/<Òe\H@fdt#9	SCq'N!Vu³A9ˤik5P#Shqh}9V8L3玓x%s:N9/ӗ$zid]yW!ɜXz}+~{Qgټef홍-X{ĝGTiV-c[C&wXpńf̃*&]dx~~s~q^ǻЋf29h73{DPLNe݃c>HTdQ[k`]"	YɎЧKpj+M.<Hwvm9bACA"J^	z1}@Mb>nϩi·糭8bp}zzU:!\;30"So.uD3{.J&mE.<Lb( ƃ/ O[&{\'d9300WV\yX!=oZ(`sLO["sgFd)F&KE&e$6)i*P=!hrJ\)Jf/6ҤpADх_Z%	FaGvKOv6uE~\jiL2؝be6 "pNZpPDyY=, -x"	:*@\p(h,&!kIvwnd8]|Xl"Z)dQMEDv"BRM{OC%b<mLDՉJQ	l/^ﻸ%A$|ew:eSL"\5h"H⌋.{M|E5Ne!%;H5u,:c6[ؘؐ?'miַ*<\#]Wk5YgHu}t)@<5Yctxl%[SL9 qKWqwJ;jR@B&-3J;Sx.Yy
+a%K1K<a	Dq}JJG$.&]k^ԛ=!RP$Ďm	,['CCI2R^זq'녁[ ȵPU;*ceݳT )# XxUʰ7Sov `;¤-w+HdM0XxT7X?Sj7=CZ>-Ӌ܋A'N*͒3f2Y{8&#!X0˳UC⾨t+L0Ֆ}=т``N
+_dYr=?D;-/;ZAS	au:Bc\!y0lSXI`N`'H!/lSЏr_!>l|$.Ym`#;.<1r\HrA !*#FeuBAeOmriM۩|2]3*dSHϫS󜩶GEZw>uM
+*N<q!lUAac˜:Su|oy	"^%h
+,H 
+cDb^Ns@A(ċ-ylr0VK;4PZ'-yF1%	(j'x$1>67w0Qͤ)+	\@f= JvFi.< 5P0-iCw'd+Ge'^v@%-fhBoWY/UM@hhv a:"?xK`6<H,qogx>k@ëAV7L-"LK әJ1Ԁ.j ?$Y,'EVȃ#1iX'F"Jůd~MYѡɄd[u\i-2C<kLrx1jUѳ@NIǸqNpl2p-MxFrp!lrYAb;b{h]-OވgL|*c%U&JZiʨ&N*;O)NJK2cV7Il*[\|pTUJ,qo&HquX}0} 0mZbmY{2ERL&VH. .MPc-făʜƤMCPZ^|(yi"=x'<-d	Z $h'36Eg\+K_y8.K!ՔDQw;W	!tGwE$|Jr]MUN[  m>-d,>(iސ,DdC⸄wvVAa|Ipèr=VT!敌ڤ@B<FTg
+m~ڐ.	Z-Y1L1@M bՄɃkG
+!%19CPy~VlMԤoq BҚ"	GBJ2o7I-B%s[א	FvYJiSKI^tG=X"SL^I4쨩JyF
+2dc2#zUJ#2dSeivgX>O(ǆvwPD؟a!rI\[NV/NvD$g^SrSF8:0!-К#<ҜZr1vML>$z8di	RPUu:@KOjxL/jӔ5Se1}yN[Sjua%)$~g1mq{/_ l¦-z?2ªƾn0q>̤<4aU8.Bu&6#3޲M*l45h݊#OQD^ R?mSVkJW:XH r%@<fS%=VӒӑe`}uF (&sAK ڒ3g5usu\4	#Y?!#TIfIs4#dClu+ZW|8d4bq=fE.L`?"L柯~worⶻOylM$p8ZKKv[CDb^:'{z
+uLqC'fi{A&M"7{.<MVkg$mϜ|~1>	n36,o&y	ho2 5kuSó5EUmd%fV9xO||\1@O'T-1m;}5>"\}QL(^8l:c[d&Ƹ"< 53*b,Ch@trFkL%]&BW-trn?rBQE*\+U.<HAa=`ْq΀ڧʶ*{E6Fr0DEQf\x^x@(gQ7N}\ro{z	-r$`F۽2遽m`0q*!8UJiY`+hg]/EMĕ̶&D$Qc0S"d]ICb2O]*c:Dl)겸+t$0q0_Fxa!.JT
+QrI:&yQL55VrIAKh$1	spu5R+缹	[Ĺ(6r7xTM  F(cD@#F@j6C	$LR}sZ$ J<TbO2%G]mnq<
+f;ۤÖl`r%6MdIaH\	щ`*HฮVcUZi1YCMX\m$0J <<sQ[[cݵ'!>ɍ.Ab3`;jˆקc,t Ť,Q|+-<0H3БEXpJ
+R,IB.,W*1ln;V.1!$c>y kAD5ֶi8˩k$Xl̅2bzIN﹢؋cqPG/6}n->nb'}'?&;`Sf*f_0X];Du/^&DtM0X X38NGQxwwP8A;gbWlYyȪ(x[*&^缻P_ xr>CQRdYZr5mVxdjvڲV^bZ.VA"1>k\-iΏz}.k3Dn;qAnwzXe02IAcT'\v
+@*{Tj$i[ϏjCDy|OXr6,<ƫ赞cV;Q6 ř&.3'l?3<|q;IuTK
+O8O]'K6;[yP{f	ZkKYZ&'xӂ
+'\:2e9̅Ⴛa^uJ5m^5岩1](|\J NǴI(QvM<&<Tk;YǚO9/Q|Jk^Q	G>>D"'
+Z];m&tX}b~K:F8S.lw,5Y vTC_U
+'y(M .53Ÿ]kGm\8E?z/Շ/Li 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.pdf ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.pdf
--- ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,374 +0,0 @@
-%PDF-1.3 
-1 0 obj
-<<
-/Pages 2 0 R
-/Type /Catalog
->>
-endobj
-2 0 obj
-<<
-/Type /Pages
-/Kids [ 3 0 R ]
-/Count 1
->>
-endobj
-3 0 obj
-<<
-/Type /Page
-/Parent 2 0 R
-/Resources <<
-/XObject << /Im0 8 0 R >>
-/ProcSet 6 0 R >>
-/MediaBox [0 0 550.8 248.04]
-/CropBox [0 0 550.8 248.04]
-/Contents 4 0 R
-/Thumb 11 0 R
->>
-endobj
-4 0 obj
-<<
-/Length 5 0 R
->>
-stream
-q
-550.8 0 0 248.04 0 0 cm
-/Im0 Do
-Q
-endstream
-endobj
-5 0 obj
-36
-endobj
-6 0 obj
-[ /PDF /Text /ImageC ]
-endobj
-7 0 obj
-<<
->>
-endobj
-8 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Im0
-/Filter [ /FlateDecode ]
-/Width 1530
-/Height 689
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 9 0 R
->>
-stream
-x\uq:XdaFZYsS13,PP45R!Sdx2TYu8: vae
-E<\wo6&6^.]6=                                                                                                                                                                                                                                                                                                                                    *))mۖ     piѣwѶmo     ຮ]{r-7twXXիW,      .~ڵ-5k֯_?^o22      .ŋs̹;onM6-[      '|׷Yf/bV铚ZVV%     p&8p`ӦMۢEoo	&;wnvv6W	     Udee͛7u=zXt`-[޽     nڥKLzm۶^^^!!!z~Z={vVV
-     edd1UVFĶ=K.͍lӦMSRRJ+p      YbbO<cǎ1	-..>zhPP#<r
-\1      gW_&''=.]ZRRRPPcǎ۷T     8ҼBTWRRR"|rFFFvvW     X=Sse      \4J3i     i.     Kzr      :9       .     xTt5]E     ĴGlwsr     iZR      gT*=<<|||j0n     SQT>>>bL&UT6      8@*PT6wOIIГ     (*      iN.zr          pNAm{      `|Lf1/m{      `f`d2;srѶ     (
-1zNn#6wgN.      "F=i&00)))     p2L:,a      #}kh"     pRcF???;0J3     SFiV*F<Ũ|`=      NEj#eWV;i     1~$lPپ(͌     lzJ[aI{      ^t     T>\r\V Ҟ     g1bOuc/#R*     4AROUGL{CCC'N[_ZT
-_}*p"      wb0j\.Vm{ĴGTt:1Y     h}T*͍sfcO.     hZBam{2Ϗ     4*R=2LEǩaAӉy     ā-&CRipc'lNPD    ORUqrm
-L     IOC     HXt?ߺ5if'E     'q-GJ{sf\     ИL&0>ɾej58     h$zR4}T*-|}}'WyErePF1T     K3jZ.W%Giv=7jI{     *zNvNgsqg놄GĨ>     ]iZ~[UG$rG.     %ث;	seJd7k     EIiOBضFiIՊTQq{     QZƹԶ%qi	>     pc$\bSaAPT68zr     =^o=0>vZ\      h4HN``RT(ݥ=w߇z+^     `MTJhc0rSVkswmKÿ)WNO      d2T8BSqN.     $Ħ;vFg-3ضӓ     8p'׀!==     I///     q{*h4s\=     IT*iu^o#N'.,]jCC     zG$+H++kSNO.     |F8ͺMv&g/mi     pVz^RE.{%''      @     N9     4 ѨT*mU6}b     Ѐz[Z]CIi=H{     @C\[!!     K[O.Q(:xzzғ     4JgsL&ј     4,1Q*u:ZG     !=ݸ$5N{     4     NĴlC!     nӞYJC     NSUͣ%%%=     )'i     pד0VJ5     '$="큫3*JPhM"L85U$Z9   z =!2J858f]=
-B<D    mi\hBVuT*U```C=    ii\.W*1_
-1N.h2i    Fi&qEFQLJէ^oBL`
-Gqڣjv&   z#=޴!q!b#Mm 6djգrJ8J8B{ri+=    PH{H{\ES^ћǧ]1TŌHeoVsr    @}JJJzrG&Yԍ	Nw:N\)Me    JNNef"=N
-𧑐Ҟ"d2Ŗ=    ri:% vPҡ{H{    Eѓi\.nӯ q)
-%u"    BCrij0nǍ    'i+"`N.q@U%    \ii+"푈=GWU戴    \4niiT,H8NH1?2i    mgVT
-:F???)bSt    \ii1:=^/(JV+δV
-]FQX.
-k-ͤ=    E㖁OJ{G.ۙi|ct	I{    e1J3iiiU*\.4T*3hG7(
-ZmLKFXigM	lG    @i7=H{)hi     CH{     m{H{ܒV"     '      wqM7yso{|n    '))I}{Jˋ"{"PH{    O^^^.HCCQ=    6im{H{(    H{("    "u"(    pyPu\    ࠴9hCQ=    \==E    n@jø==E    n0J3iE    {`N."    K{Ŝ\E    n0J3m{(    ܀4niiE    xz2n=(    m{H{(    ܉4'iiE    0'WW\    P瘓=E    q{H{    жH{    =$&&Pi    "(    p'b"    w"(    p6"    7 "'E    zr.!jܓ@     ض\(    pmE    ۠m4Si    e "    H{Ÿ=E    nжH{    mzrPi    '/OOFif"    w$=mE    'iE    [="(     H{(    8n=LQ=    @CѶH{    Г=E    =(    p'mE    =޷|<=E    xyFCCQ=    Ni=EQ=    Nim{hCQ=    Nim{hCQ=    I{H{(    ,'=(    ܀4;m{H{(ʵTVV8    L{ECQfff&&&fddf    'm{H{(ʵҞ'xbĈ[n2L    i4S=_}U@@@Vt2o޼wu    HIIafrd2رcԨQ2uLHHx"o    T!((##c=zhڴO>9gΜ~ڵk   hv%|jڴɘQvnջcJa!y$,63Fžzco_d}pq~twIۘ|,`~UY)֝w68ܬn}I^WY+UX,NXx*-n<Z?vay{ۿOlôo͏i}>b3exYNvW5Ĥ
-r_dob[;ܹCII	o     #<ҦMVJⲴ#q{[no}ii)    {tMM6]w%}*⏤ekҖI_#X]oŽ̏l~[Z^/-6OXlic/gꮿoi}Xc'i-~{-6yH뭯{Ic@,N5?1[hmϣ?|Zl>ϑYba},.筷z7,r
-    }=cw_Ϟ=K_o-*,_ͷşkrҏaÆ"Zy₴^ҷ ѬͯUeiqA>9XjqpY̿5TJ&2o/?㒾
-o}yͯt|g_Xq3̯AĽgml},pb[!67-m~OuФ/F'C>yϠZS__l۶nYC[n-,,}   @cuQ/\xٳɓW|	qY|{iJEGpiiGCU[,>s3y6@:qY|negvX%K.xm^ʮV֪UI\^UP3eq}o	GsI[<v^_S_ҹO;wT*ݺuZhѻw>hϞ=&y      PPPplӧOXX^z*     \|yǎAAAmڴiժU@@ܹsSSSh     ZL&SFFFPP#<ҽ{ٳg޽;;;     o߾rʔ,fZ     pi& ??                                            7SRRo۶-77     ȑ#5ko>.     vZhhh-͛/[ի\      ?t[n曛5k֯_?^o22      .ŋsi֬d2Y˖-8       !!'m֬/تU>}q      \dشiӾ}oR({ΝU     pYYYkݺu=BBB~ooర-[޽     nڥKLzm۶iϒ%KzZj5{쬬,     1bDVF%,'''^^^K.͍lӦMSRRJ+p      YbbO<cǎ$mҥK=#\2W     effFGGW999·)))bZRRRPPcǎ۷T     8ҼB$|kޓDXs匌lS     oo1)+     H{      ܉4Jy     QAlw11      HL{z}vzrsrq=     n='      RYC     TT*G&r-#"     pURlΜ\      NETVAe==      nq{      	      8'jl-%%ElCO.      'a0,j6Yml˸=      N`0H3L{d2YU'     3P(b#,zNgݶGX#mθ=      NEz	֭qM``i     T<<<d2u#nSYC      #}khZ      
-qf)ޱH{F_UaN.      g ҬT*Fy#,Q>RRRh     <;"qYV|ee3n     1~$lPپb///      U*\. ,
-+(      NEisC=      NE%jub      b1bOucqf     pAROU'11     	Z-˫Г     FGRXJ{BBBH{      VU(7L{     iIz|||d2Vks1%     p@s!Rvm\.%N     hݵDgsJUҌFv
-T*W
-C     P{RxC	m{P1Q*:N2     8E.[aN.XH{+:vpe     p4q-G(Ͱ`d2???     F}UGlIO.XaAӉ#D?     zSyRln(ͨS(\     `Pri4J3=`AL{H[    z^RYɮl"=     j-mUeQrr/i      ,f`$III     T+H4Ӷ*K{]' r\(     q[V7䑈0'l98p=>>>5  @U8pPTqsku-nr G.M}Blpfضˋ5ȂH{  p/Κ5KnGˢjzPBoRIkmWǺ̏y],n|}|ql.[llq͓8,=#]Uݥe/ԩٳ  zz.a||gN.Ԙp1  uٳg\i}唻ܹȑ#7L&h #e;pBa++]l(ͨ\.c\  JqqV}gG~$t=nb?Ӣ"^  R#Jeц`0şV#XjCڃn6Lf=  Ϝ9ZiF4ʊI5|ꩧ233yQ  bSH>
-~CO.TV{**0n  5S\\|wM;sqqqF 1-~63sr >'{iʄ(rZ<.>8tУGbƜHm{H{   ٳ]ҡCR]VYve}z;Nu+`)mذ!77 4δ=   άTuԩC7KBz&-O}4*eu}%K?6:5Q7%W[h㒏MO/}#Eﲲ2^G ШT6,h'lqN.Ҟwo{,@ @YfMť:t;􁁁+W\vmxaAB۵*[cgiӦBDDx|aaa.$$D*_lvAojcp5֯_?}֭[;NSgСÆ.]
- J%My؅em{<==I{?=I5H  Mȑ##Gl޼zw6VrMz7G}-EjSQn\j+gk܉carɵNX6&z
-cwVNRW~ù3	ڄ)$S|2dȡCv5Ue NEj#d|||5)7Ŝ\==  ^QQN<x&fژfK>ev)ǎĖEC^h˟jfoB),<)/K{35qӫFΟ79FvsP-KɣH>PO.yg O#Nn˙ :r-[(tK]4ꨬKW&n,~%>C2vUǽZQ:w؍?o{=jęS+BS?dy8ӧ=2|rI{:N3hР}IϯzId2믿F>  'U*U_r`8n=H{H{  SN2k׮wqL[}0wǎ^1RD΅SJEN:ؑЄ3FfR1(0o+9۴3
-hliPewloD/ߒ^\f. @e )**h4;v|W4y6he-]*TN >u}S#N֫B7䓄ٟ/u3Fd\u3gև?ڥm#L{S[AߝIͭF>qǟzb TГ *Ξ;wO?Й4iW6}}88$x<J訩%"kj?|-qYǽژѯ^ˍvr+MY>#6ݻGhI-[SOEFF^rW% ѨT*mU6V  `_YYپ}׾}ؤcr<[tY*M)Ik
-7:Id+IWrּ9Oi=_|6'e~׿8?JN\&2|r|K~uN{F>G`Sv~E
- .MכO%Q5H{?ʤ===  qո;\'#کؤ|=E{HltNVMӊ"ܙ5jg	5̚92t>}{02\#F,^/xi8e]4?X%ڵ[b# K\[mii  1LǏ0a?q}k.'E;aR1Q	o]~_L(ʋ:q(}Ew뮏wOWDzgNzGz0 h[9ur&m߾`Ϟ=}ˋ \^Z]jP(u4qN.ooo!! @RPP |j۷oϞ=)UVL	{oOю;ñg(-6Q1 2nM1'^OݻkY3别qF~6bXEyQ򘗩p㮔z
-O-K+۵k'c^ ZT*2ZG  P^ј?\bE֭wJs`nR<%̥ᗳMTT3?za9?wݕpSa-kHxyo}1u2ȧcǎzڵkcƙ(J:NlS\== L\|ĉɓ'k.B۔V渜'!`ޒV}'xABD#3DefITW&^_5ݻw8szNe|r?:6Nħ_ɧC^ Biy7.	iiE ._Ď;
-wvL[RMK}0w~I(?VNX>sjUe1L:4-Q9O|@sÑ|~AꤑOLi]tѣǾ}x@L{<==EC hlrss-[־}g/JH<IGߟ^8U²(i5=*/~Eyk6o\VAsF>E1;w޽*:i#x3ڵktR K=e3*gN. @c2><`mۮݲkC;m+W| mrsgV孓֭K'_-|_}"s/D_'ɩz]֌3bРA	ߞeiM_ԭ[{n׮]  UC +((?ѣG!Che9.>AR.ƃMPڶ}tVL٣SSۑ|wX޺!lI/4CgΜ  NSUq{H{H{  ܹs?>]^ฐgc)B2d"ucH'R.~oJлrŋƊpQ筷^}:I&7b/ 7 {vnk80Ѥ]Y8zƔ^+/Zxr/ܕ(d>^f"YM]5IIZϯ^V'u(/88~ UJJ
-  ϕ+Wbbb~W^yE{lƥ1!fW^C+&}嗺>}-NI#|Guw3ѣǎ;  nI'44z 3LfzǂF&ZȚ+4[VtjYDI~YA(g[cfz\um؝޻woޜ^RwSZ2x?>| IJJ{r1J3ii ݻ7  [nwIudΓvEpbbFFD_
-7g/'WM8wՊ>vZ":/u2$.S7޽{w%%%%?? p\==  uʕz*h[Fvڊe*&*/ϴUY3~+5#hG{_A|bR>sE7dy!2LTfff~ AECC p-eeeÇԩS{Ky_\=0gȈ#0;_;2~%ILwl>WƁr5#G4h/cRM~gL ГZT*w۷+6:q9Olұa뗮(+%gGjs/a^ݿ$ؑ|v޽pI#y!<̤I; AIe0T*B4#j58p;k~ʌZ6	t+W+&Mshi)Sޟٗ	'k`&MvqI~έgc/]`ץ)Su3]W/+_  \=mii+2JңrhZӐdzW=(**JOO=zK%Ce&_tС쉼v%h;mC1=ŸiҞ)oz9gѪ:hsًZlddd = !OS|||
-ZUPT[
-rذiow}Y@@@߾}-G`޼ƄS&SQ1BF.߼]f}wU[-[^k/ᅖ/r^>K.^ .ГǵHA\. 6i^66+SVP-gΜ3g4iWjΜDkS"7D/~rjUQ^orX𕾝>PZM7CO=Oוsu^/}#^hņf͚7M	 \.r=~><*JO=TJ{V4
-G͸=xqxPeee{<xp׮])́3m^3vb])kK#zyWߡSpgkw>:uߋr.g_ot7׽{Bޣ FRTp@H{H{jCG&UUZڈT*<_= "'''**[nLG`mxG1yuԪ'jށB䰠o,X||ՈEELjY3<gE.Q4M/\,``e>B8z(= %%%i?0Js@t|$!q闭xW7?2LZshڣVI{ ?<}vM1?!q4>?(duLk>ungXg|SקNe5T]ɹG|^\wټq3KNNuQ-Ҟ]U=R7g^Ab#|tJBay#ɪ{ ݻw+]tR<٥C?kqDuU.BՈ+6Lٝ<؛K?wȿv/5xUBzaLו^zw(N:/ibJw1_oNZo7-VӰƕ=>:Ώl86rO̙3z~߾}쀆J{\bN.Gi&jliOvjQAiꊋjuV|6N[>?49t8꼶1sAȒȘ6ż۽{/?uSD^.k^g}vMŤ,YҲeK=`<CVMe\_?B=@S2nUVi<Zo٤I>[CCC3%,t:MyCC!NnJFôG; ܹSl!䠴gSZ[hvN[+~47H\>j؛/qS-39Z5R6iF/i1ۅ7to;u\ƺSu	FOQڵ/VGeff7))).s==/PRJ{׬4GE" <yRSN»&D/mի	csukV#};wP@.UN߭[(RCUiAܲ0eӦM۷ooy)	PMZް#===[hlq*T܉r[f͹s?&1k<Ƶzr	o
-n0 iiOӞ<n5P;vxuaÆij^:],|)/ZGPaBko@>{#^lUǏ,}֧2Vq4}iҤ&&ԲV\;
-O/#bO/%UÇdгgw )5niŜ\UJ>00PU	)8GY.6ٳgo~|Mŵe??m!31<p@̿ϞY3޸{nA8rvTN'ǅN;ݪUf͚O]O%k6u]ф?qgMm>~3f:u#HgUپ*kHQGz wm۶=-[ߘV栴gszɇ~3Ϥ_ϬuX9F%{yڠݟŋ$\0xP5\kNoҤ|h,YX8QUGݻE?'2e9mLCW+_UUFKeڣVz TKffE:u4vXsҞuw֭iSu؊qvǌor?9A%\ճg[n-E|lءo۶gߨ[:Zx iG4ZI{H{\
-NUҡڤ=R$\ d2]rE
-o2zRo.&Ձ<̿@󞺪;xp_N-{
-+Ǿ8ns~n/RZU=:o}-7oSa7/4i2f̘߫7 ӱĺeKx~9r?@p\g>*P')7\LWJgRbw*tHX.
-k-͵I{cJc>@ٳ&Mjٲɓ58y.2dH:mߟ68RěC|mr-=@\+VaI	Q۹_8ڃ>,BACS;Qa:uׯ_bb" *4a0Ϫ=TcK{G.ۙit	jHcGW| @uW_}k׮7oɹ6LcǎƔj_&-?bkWO2w咏Fէ$?\X>{zEfw~'kWMnݮ4mKzam^#«o?=ӷrK޽Fls$ze򀀀ܹ@mooo'ujitT*\hFTg8R:$v{(
-ZmJKFXigӰ\ 6<yr֬Ymڴ:t&튃ҞϮ~~~{f~e*xdf޳fY%O<k݋^_νz}3sĤ$}~@]vq	>nkҤɸq:믿8Q}1+;GQF	{oUcv=ztͮXxFa|EG|F׽{wFseV5K{ صk>䓾}'K&GN5am~./ZG\P*+x{=w9?$~5{WD5y;7|s=4j;־W_}I&[^.l;?"ڴii$KYΜ^L	׫,dΡ*۫Uپӧw2#iG͚9vG߆FUfׄVǮ?gpOs={U\M{hCC hXǏ1cݡsE/KK.o{jYWrV존0Yҡ99:t4M^Z[Ox	G{饗6Zl)zM6m߾o4.]0rO#g+Yp%BjFFG˙'yُG_pa݅?4S߈<<'Ge>3G1p'x",,?p ,p˴=== $}ҥm۶u/f!Ǎ^<nܸvڥ_=?[5qsg,G`N;G<9VO?Q}ݭ[lom_`u]
-b>:ݧO&MLvA^czFX6_NfGǕ~6-s?0{#OefYlǧv%/jz3mbM͇e:jȐ!]t	_	ؗiOyŌ]=i 'OΝ;scƌѤ]=ǅom!=q\?*aѹùD轕0~ܨn)  @bm^9z뭏>認+zӊVZ5k,%i(2@~6KʺS׽s~.eNg)bSVuo}Qz- j2-U+YdO)v_Q|8q?@e\hv7CC ߩSΝ;GEEmt=[ǎOط(K	po.ٜ^R@lzxãgϞ;#N:VI&5io	<B]5AZz"Lyϯe_x]>\Qf~zyboCG>?vd=?8C3^|	2dHȲ%8ɨM߮5jԩS9PZrr7to{)s6,{TٳӦMk׮5iW8yϦwy׮r7
-϶ԩ{kn>׫gϞ<4oeO=%@X>|[Rˇ!룦~zړv%w9VDoח?M+9EW
-⬄?ѣb?F;.K;={N:;СCX=^^|<$WE7"`Gnn'|K/mVlH59yOѸq|{1zܣak ӧfνq=c6|tzoߢE͛xr}T*a9|C
-Yp譟.+́o?{ҵH;(MDQQP(P (&5		-p
-ػb&BrrA'f3m̼9Vj4&|F:jS;P}'N?< /oOĢE0$)H^zuAAׯ_a0 l  P@[nYFBB*33vsQUUi͹@<O6mƭa}{Z5[XX,H=#H]]+0cի?%|Ưq5ٓI39&$8ˇelXirdɣvW%޽qųGqM#ÝZqJdeģ#6ˉvssK;Sw/..nbb0p=z(  Аr$=666t2Ф%$$D<PǠ噅<<<ׯ\"d׮u@݊\vF\Q~2n7BrvDZPg5yt2ʏ4-h6NK޿zڶ6>8qtuvvN?agbXlaTmOX0=@8A  k׮0aCfA5FlҷԜ[VVVd@I]e!12Q'{ɓ'G#(w&Eć	?|${ɓ'wJOq5[6Mܛ;7m~ufCwDb7WO	=[EB̽s#:q`0oZX[ZZ ݻ?c+e{xy9P>=  `,]UUv=EM222ڛS˥9rI\\70/[KP1cƠ(<-++V[I&MTx1ظ,Ls#|ӆ"\-ܺ|ټL$k29Ѵ"~"󧷶7Z<U&RcG?;gΜ9cƌ>
-eh^P(   _.++ၝy1[yyyssj01ѾC<yrr>IYXkccKޢ{+9}66V#S|	:c_Zk^O:6߽Ps̘Ǳpkk觓G:9̫xI6ƌ3x`obŊh}ܻ=qzzz***
-| mP>=  `ࠢ"##	{/1nɏ{mmmJ&{^>	ڽkUxbgǙϟ>in5xf]sm(6&إ$ݸ}w/CKj~<uG3ϟ¢y/OuJA;)))VV)SĤDK2A;&MtB`F&L~+:شdZ^Kc˗Lz^iddiRO˘{ozb5u0#G^c)kЃC~'d%̝;wԩAAAeee04   4ܺuMZZzժU=o˗=h{@oDC(+M\nzcٳć=f֘|>7oc;茌PqѦޮϝ\a",$ʂo٬
-cGb¸qxxxqt~~C%ᱢzJHh¢]z+"""%Wi\6v*_<mq(qmǺ+S7%o\tI"B۲'=Zp5Т:m5j 	L4;;q>񦦦j1`O. @   r*:cƌ9s椧cFIIjW1xD66ù)]P6K_7UG}~{ggg3q4w$zջ:k8)Z3pr3vpw9V9*҇STT49j_eT[٬B=uՃ/%%
-ni؞gAZBC'&3qc.FouZDo3'hN;f~4:abfU2|=.\F-r`nn>mڴRp1\@8A  o߶E`yS26*LLLjd~k/+{Uo_>oculXll'))*VXT|i=ˈ<Y{zizF2ЛcN9/@S7/2f͚.ظ
-PiӧOI0 Aۇ&((1	YLMF׊vϠGl.MI%oDOXj>B9H$67x{{7?K4\XwO̘h%KR.co*<-	틊`lDil  h h9yO+kuE"z
-K%ZTޓG,7S`ҟ?mby	(66VOJ3R\4z4/JINfL#<uQٳğZk'`eeٴ~^CU> .
-
-%pg *$l˺߁ֿZFՉM54߽Yv?F8zh'o$RW~Eg]QׯF8"0ʊ̴KnܸR!C."[NRRի0~0 B  Dcc͛7dee3H=)I
-6n)zَË7 <<q^ׯ?}d:hצəZSv8^NlL'p~*=ೀ =P\׃MBBtJ_H2,YF	
-z{{S1\'L6mnlm;N{W8k+gu\C#DQkLSYkiUPQNM5&\BˤIB7EB/Q-y&blmeeu_=l{xx nA  >}"JJJ}`vEh///4z8ph]ieo>	ݤrM8ρN5&I4[4g^=B'-4q䥳^?7aUPvUInn2Е[Xf1 3~υS)1켷׭[%$$TO=ܻ /AeC|"ÝO쬪
-|5F^C4_[ӽ~!ߦ7-11<-`ʔ).<|pSS l  7otttG|:hsv@7恵=Mp=)ֽfڕn+,$2JJ0W^d(ch ,ПNiQgOzҳPlXXXN]pe研(w?rT*ewwޔzhq888$u??j(vve˖%brdhhޗwbT넎HY?HT?}"PDd,җOA͵w_?-0|([[SڙS-rssK>amRoBcBP]Bŀkl8A  ?~񚚚$N~$K2kVX!''Wx)i{bh M?ԣlXXXm_ﷀ![n[#`]t2̅;t(%ggMxsNNv$4:}I]e=;;ģ콅f^,/BBB6l _Ŋꡔ&ŦGmm F>nK!m%}kۛz0DYƝ"ymO[,^<Hk#y~_lIqfJOO0m{`O. @   b{{{			kk̂JR&=hM$"bT_aAd_nneyTor?VJreDLz>>}fL lG%МRzgl(k.fyo-,c@81QQQT:nOv]СC'O|rf"LcSn6(쇕k?b\O|&ػ̉Z%W쬗-[t(\onRBF,PwKJJc{{;ˀAd{r   dTUU3f̙3L&bbC-$$$/VdaeIvoeyTg&mv4Vw 9sct_	t%(<]I!rዘJI	Kj9A1锢m್V;;Yy/ϟ¢_0c_<om рN?nHOӊw	k*u׺?}ޜ.uX]̌q{ 'خ0Xl{eHP(   %lmm3k	DI)l'WVV^re\/ih>AX`l	g8kZN>~g	y2Jony:9rSDGwzpQYC7~'+ݖDޚ^b׺83NNvVVB򦚸fkΰ`gg%ؗSog_͟?yܸqׯ\j"C(TO|{hN8&W/8OwVD;[[-iBxd鲘h-8$xm۶x񢵵h g{K@   \3gTQQA}qs:KKK4OHHhoNo')n.̖;}SEyt޲mxgBSVX++)L'/'lR#d΃)ϥ}7=~}u4$,?靠k>EJ5[磏!ݹ.++F=K+º<_cr[I8$ܦCɉ
-[B>ן@_fq$h.aԛXѡ4ɋHHHl߾00l/
-l   ZZZݱ3I.hs GoB?ޢCu $7̢:hieeE|?k,4RW_#OJ|Wnpt_:yvl;;HB|2#*g޼y;BvPn|&(((]Ν;`h=l  hoomll4@=*/_rn0Uiii;L?z/{oQO=A;vӦMzoDtJF9ލ[n3CW}޷L$mN)I=djj***z_x  O. @   z4F3j999{{̂*R>&lOja;nS._X8{Fqwﭢ>yo}"eM2E<ٙMBBJ!i'mBȒ%:)DɊ))Il|2/טh_|SIk֬qttpBSSـb;   
-TWWp8uu9s椥ahSXkjjt kK1bDLZ0W䶖֖On|Fmii/[$$&[.ם|dZO;7@9{-]tÆig0|W˖-;rHcc#ڀ_l   >jkk/\`gg7i$SŜ*"6=imNJIIYZZg400@4ģ>ڕJ?~?vN(Ĉqqpp$[CZp.6x3h5zHbz.=4fd_re	ϦMDEEka0v~	\y	(  0(ݻh555]]]yO###99G[%WS$%%l3kVnIXEJb&\&5/;;̣R
-5@&18pվ'Y;{ɣ[gikăns4|LmZB
-6mk߾}0߶3, @   Ak׮˻fT'c-1󌊊
-Zs -h_"e{-fСCǌKXs񊊊hD0TJoʤz]:f
-1.[,c=+	DښҮ]N65]fiiOzKNN#lgg"P>=  `۷3fPRRԼXRR:Hw8C^=Ϡs^QPP@GQocнHOjiPafQӒ=Ӓ✂v7W}@E)瓚1h	r>q2 ϟ?O_"#G@   C}}}AAE=<<2
-ڜkg!99UV	*r[j5}{+pgرcQi3f'cZBJ477ggg}x܂,dhL"x\r{Zgtޜr8yUy'ݤĿttt"""<y9 l{l   0ŋhu<k,-zn"""vv֔`$i)HSΠg:w>CO<+k]6oTKoC~na?C]U]b$؝飡=zh+m}ު9rMy"&۬Sp{eee(lcc	V/iM:%Oכ%=={܄	o_m0|R_<ٵvSݧq>h
-}! ٞ@#`{l  ,9w܊+!G6s!0ap&tq?JtTBvm]w[ #;AV19q/5Sה=kGA^ĉ999tQN>5iҤ@$IuJā,%W"G<YVI "Զ.1{`O{h	۸o^fx{9EćQo2+%|||6lsp`'
-   ޽{V%K22RۣRUץsқkUQTcҺRWz]BQ}ŏ}|2|E󳳳kkk'L$hff_{a.rָ-H[8hb\Zy:#8|˖-˘q>ex999''K.l  \hjjBsիW+**OtǌOp[7-G;"VBf8{
-3.!=vob޹}\e^U?xv}}}$K;Cwtt|ׯ_aWlxrAP>=  `0ѣG
-
-
-3gΤ 2`%"{KDDu [M61"pL;xoiN\ŵHyi	cnjBAQf/ǀYjd{{{0|=<<P].]Q8q7<<P>=  `̙3Ǐwvv.**d`JfQ϶qơqp֬YI)O200@IKK?*=|鱌cfuFI\6mDW@QD2ԴKH3ؘ]\\ЖgG=`(  0	'O맥QZX hCCC^^^\#a潵+VRRxo&y8jO!ߪ7Q;tf+xYv/Tz(++_(Mu2!FFFɹxr);uVeeeJ?1|`{  FssSlllDEE3*	`2`F?>'%%E		lg[Dooo^^^AAQ5E3RUƣ3zQ+r̙|||xZ/J^N=@+;=ujjjgNJJz='A  ---ϟ?WPPHHHU$Ȁ9l04͟?nU|*RUU}d׷f<L9]ھD'-ymtÉ[ЙS|g^p6hr555+Ń|_LB]{=qI;BvL2ESS3..mmm0l  Ԅ4˖-SVVvwwBd.luШ7b777
-f])bӣJյfj{kʹӁsuUK:52ܡ:Z3drMs^h im$(N466NC·zzܹsˁz^^N`{p    y˗/UUU7mڔz؃<s'#󙮉?:9odL=zӌ{%k;{/7:q'Ħ!OYY9i- hhhpss=J!%~[mn_{4zB؝$ǡ,dTKy	zo/Yd1EBաwK``  =@8  +'O^2 w1uBnԅ(PHLM:egg7֯_σ=ddd &6iH[d滗=weP=~I6rƽo/kvYXXpppQ˰ԛ`aaQF<x  O.  j߿[PPpܸq+VpssOp ##S_F ӯ?*otڵ'Hӹmvwm^F&uuhsWv|F1~b:_HV]I:///---nnnVVV666}}}a;8qDT=ZlLcJ}e:Ǣwn<{b#uOw+oNYRopvv%b)ݫ'&&jqFSS `% |`{  o󔖖FFFIoRRRmv7G2=JF*_]i/SwS]ZC/1b//Ulvjm\"DY,||zkpEC5-,Os-fyĉ{p'Ky\]'y@
-igϞ3gH".OIBcFrrϟaJ  0/  ~<z(!!ANNNQQ1..!fz
-pȑ%Krrr.[,mK	q@͋/t {Vhvpu[c"ҝk=*+I}"qf>46 5IؙQ.\ //oaaqQ`{ ==h
-	4K@   ϟp8%%%4		<r@<<<Ce0!/ARR5gݛ! gڛpAl\EYbwnDUfp)vލ^)ׯ_ooo`{l  x-L^p_hII)qttI:H)ÊA%P]&"~5L]]>>vUۨ/_=9sWFf$wŭ~~CM%'eTEEř3gݻ򐀡mO1)<<\UUu)))/^g<l  ޵kKo޼ҀL .]ss]]]XYYg͚O~\<)hEOv}k&cP3&13^baHbRIơ"ur1cFtmJikL a_$yzz*((,]`  @@  AʿH\\e^^;#F@z<%r7	`)¼yP]a1޿/]zU+;:,GGw<`PX&QYIjǷqeooLeОII8eeeaa6544T =L  "4669rLRRYn.^0aI&b$LHGu\ML@z.c*b>i{3XJjxLZW	UU^>ݸ'~A8]<v$(mmm---tۯ_-;%|`{   A{{{CC\RMMƑ#RR. RsЎ;XYY%%%#0 _&aWDD9|[S*LB4Tvls47Y1~"6<ĂhJrVT8y4qiZ`e&:%W@oDS¦MfaaAn\D777yyySSӜ/_lxry	(  y/	3#Gh< G#""XXXPo0|8tБ#G֘)oVq]\9FTYl}"xGt틨˸@CU2Qn7.ZDP֮]{ʕz< ~`(dp=hUq Auuӧmmmedd,,,NdeA|RZ33XXXƎqFj1\Ufu|Sw6B(K4CڛpmM$c9O׊Hnh->geeŻ4BƵguuuxr)Qbcc%%%'O??=D|>{,//^ `y^f%K8 <oOP(6dccHz͍4P`62@Mٴdwt|S&@#s͟٢S<=q AQk\~)ۯFrHHeXfϜ9쬢bee0  '  \l݈D$첲aI `0QFF͓ӲgP ޽waXFvMǹ	ɀ^E9*W6}p}=%Goyry^=m~WtPP	^~}}}T^
-	 =@83ȑ#ª[lyfcc#b2e
-ɢ[DD2[;7Lg)g0}ew-O6j1Sczhۏm9LZg(|]ݶO^^^QGE##z&۸904P@@ަ*$G,Y<k<:6~OJgj$X6l_-Ľ{)**fddP`RJJJJSS3::ŋ---0 ǏCf @ iooÇmmmRqҤIh; 07ϟO&볳i' &&/""2aL +~阩윫2f@Fvg烮b*s^j駮){nCf(ُ݃ڻ
-ɉ'rrr逌~zsrqq:,dV^]h)&$$.κ>ESMqXmi|矚k\hj<~A?Ґ(P/w
-WTT\|yڹ$#<v7q͚5ӧO;wnVVVuu5( = @`P> ݓ466VKK͓|}} L>1s_|KI)Yz֭[=+[.ɇ=S_THL?OgzSKυ\{C޿[C[RLT)׊9zyyM8{ʕGBrpp,^8(@"q'OFҥK++NnUk.++q"#}cZ!J/II;vPnb}J뫪_ɓ'ыk*[lG\$KׯXdӠ_vNܹ;WԵpɞTz;Hӹa*s{s.||LV-ֵ*\Sc)/kajj;n.V2=xLvL@z/vxtۼv.k{*)YԧZǩg۷ďΠ;ѣǎ;t|oG{=o^BBB'((8|pu=}[Ǐ*..^y7"y"Nn3BCC>
-Sùֶ,|䒜˗sqqqpp̝;7%G)&&Fٳgy	1|~'l0<MC$'*]ݸJG|zz:>flOrP¼Ey#yD'B2uh9Et4]'_ѯ3ѳ03s1eJWz93OF1ɔk_2vH?ʸ1eQQ$ΗWC~tm2{(Gw0=KtNtj )ad#w}gMp9[԰^ǘvU{W׵p~=N2=stԩS/I$ĉG͍蜜fff׮]u /G{{cccg͚5}too99RRy訡W!) ? UVhxyyF<˳FCkjj&.V2^>LKeKzWM@O8ME5P"""P?H;K΍u.١鮡޽{?}s@@* ~~#x~LD?1
-#edOF	Lgb:OJչm蜒%ZS.F=$f*)fG:gJs*;E/kLe|Ld#8U=?K]o:]=L`zt;7#׵v[upUc]o+n{(S_vG[ŔsFOD @'0wd@ʊjjj= */_¬YTUUQ|/yp8*<?Jh200xo1|yynnnFBs#5r>eoTQQyxϯ#Wqik>Ab775W}m7.))۷Sn`m7.%%%/6554@   _,9¢tDܹseddƍyy,
-_|B,X u̵k>CeyNߴiZϺ>.˅	H]rsKKK1KWW@ʱi;X>Rnƌ.		k5ڷƵnݸ2CShj 6'_(((Rcz	7NllϛaG߻wӧ虩x^ѣGO:eeecFgP'\E/ۃFƮE&BsKmv(OLevm?&(#tkݪg\xק&vsk{hFK=$q3:u?pv{趄Tڛ&3zq}.h۝;wrrr|||444ƍ7vX4nݺ̙3UUU ޽۽{ٳ]\\n䴧?Su0zy[hk¥2sKS)mn 	
-0k.t>ϺRR{s
-}޸q˛!aOiR	ԩS,7330    o{p8###!!!]]݈: KB611AիW>N&?Syܸotܾ3o޼!C:w~3UsЖ-['N-F`L;dt&LˉmkJ[ҳWLiӦSJ03{K000srrtR}}=L9    𻢺SN+(({ QWWwIccciiiGGǫGKxH---CC+CD=ɥR~U\00HzϟAZO[҃מ={455SSS1܍uٳgϚ5+""0   
-4ƕZXX36o|)؛  %]rԒ%K<u߾yΝknn~fL Oê1332d@hС;wЫ޴i
-JTǰaÈIZ(pA@Fr``<z3N"a!RDZzĉ-[g4mii    ~W.;;́?^^^; O666hkk;i$iڿ?::5"]B>qtt:tȑ#CCCo>			-/	X-&sqq><,t#Xt+53W\9m4___j	q닋\p
-&!    W  .]&//x⌌{˭x޼yT*a/5Ξz$/\-
-\Y1VRSj+]\\ͽec/A[v&Hjjjhv>CIDqppۣU-zuJs+=
-
-
-IIIXE)#PI;vPUUEo       🣩޽{֭>}Eh٨ffd###CCC*aϯ7\=-۟ysjI,///...nnnȘ3gСCGeiirv$ cǲ.]>  ܸ222'bH.\ᡨdɒ{}"       uuu%%%k׮1cFlllݡCoӖAPic>8٠Vv?baI5@6Ϗݽy=w9s2|p98\(w#F35]#>  ߥS/vqy׬,]])SͩS`Y       ׯ9Ν;?|v2DVֲe˔krxNuʏIM5]<p'TW#6oZ)_;bŊmv^```eee]`@SGXX=g~t׷f<}?ݍ)Fq
-Vn\UmШ_VV        @qΝ03gFGGW
-xss9sDDDT}><pк{z'jQ$Sp1Xoɣ]~5zӆ|ԈO[קjJ[566VHH)KKRR.fg
-a3*96=ZJJ
-]&Z>{LLG-[HKK"`h_py99Eeddy%       >h1w99h<iiW^roŇe_-/"2.+ָ.u${Z%wv'9͛d*)I|&j >&O<dȐK/;|||ܚ"&{@}	]N%ȟ+_>f7m4,w㺗{nnsqqpq       5={uossۨ!z	58Ϥn@pGM6ysժ*^Zgݓ_	Ǯu>VLtj{oi={27j>iiibbbt_GK87֖UOE /AMM5uIMpSZ0?~_[`i%WQ_PRR"HIر=+Đ4ˣA͛grڵ۷<x
-    	4|M\\i<=={<w\//esK\]<{=ɥF߽MZ)6œLg~~{c۪<QQ,'q'כXv\STT2dVKX5
-U-++H)Ɗ!IyٳgDDDNokLQk[#AMzڑaKJ5~/"o:;%iśpcƺ]~~~FFF0t㺗rj*4ϟ??))ݻwhsOӧ666|||/^     իW
-EOOOFF˫,7UG"7wÆd+hkkcRO r51י0iNUeu9rd&u]Ix3k>O&!>#UXXX܌'|;	8q"z;Bv,|ʰ26H;C466Fu	ggEფSKpi:eY^!F)I+nlk/
-Gm8ög|t^@UT{K/1qKOЅb{]x	L[[[YY-[Pobu?>(;99]p˗/0WƎ͍f     wٳPZZȑysr6mڄVʖ%rڛO|BH=Zdjwr= /Μ>|x.ݽ=iB87zHƎy(k+,kT.ޣ6BrB3- ԏĪÇ}}}YXXDEE(0$|XYY!-%k=u_bΜXa2MJPp''.`ggUSIYY_ӗ޽QQqz3^0?5b-Trge;zPX!:yҨùƁkȑ<ӧ	Z+ n\
-usv㢱=WHQQQh~v ~
-jjj=,XPRR     >|6o<111KKˋ-w?σ֪h}kkk[Xp9m&tgzT}WL:i4||ò4Tmܿǯ)n-x}=e&u4kg⹸jVU@\A!;r{ʔ)9'oҤIt77DÉ\$nl7aq;MO:h9%)1n*ӿi6K7#1fZwFThh^޲w6~R{݄\,?:m5|H7Yku]$1Σ7ANn\7o066N>ЍARq(Hݻ6 z
-___>>>QIHH(""    
-4c޽{ŋLLL<u߾yj
-={6jI^ށnY܉J{ԉD;=8mh'ZOq:^:EmOyժ
-zlOzFAQ؞JLQ^<g%K	Az4zȑi(eXFɗIvvv\\\h)Adi[1#Ǔ/61Ė/B>oTy1cxQu6Vj/1*Ѝ6oc8yVn[xں/1_AP	de藦#6t7/3W\)))yfj1n\[s確lmm;Fm zƌ)))AAAAnAA0     <z+$$$yjgΜh"*ژ9uІ;<uD ح\龌W#W/*ʏRvaXރۺl.#R˅%[Se1z\,}kjj2??[5O TTTXYYyyyhO)&&GxU"-%*3ޔXxn"/'|gc̃2lǓl{p!RCQJeNZ=͛
-yuEz>*[sSghNaccE-NM{p;FDP_		yׯ_a%o޼illť?f̘aÆ999W@@ӧO%     ~'TTT<yVFFf47yƬD4@
-a`fAZiZNO:1QSoߛ$IKq5s,U]r%#¦xQUH
-:thzXxw8S2cggؾEff&''EYXXM؅@YZWVd!=1Q&BG]ge;BfL0bH^^#xde<frA1eI5cgg:mGªQ~>Xx;ePbSܿ:z*}7Q`,I~?}i z-[L4IKK+$$d񼼼۷o>uTkk+(
-     +VCߞ-xI$~RRRijC:{*l?~̗rP1I_W&Msr\|$AUeќ9P^7<HJyyKG:x94ZN*+sqq>ӳ>;:ZZZzrj``@JjeJE3fظO|=]ؘ%{Ύ3Q9lbSWW<l:ik~!uđW^ϵt'埔nO.3h5z4/~)*|i/#C6l@B$?D-!.<gTݱc .hnnRUU2eJlllOpppII͛AW     ^!"<yMRSSenz3gFFF6di|uŴ@VH}7<dQ_@c(
-
-*hٱwoFL,t؆X=I2SUV|Pb@FA'fspp\mnnY_qqqBQ`F&Dko^d|k&Ʒ!a;LC/%rwoB>	߶pԨaq|7]}aNy͛ƈvZegW-᫩&T\ty5}mYEl}U,  HEA RY@X@"RH	ГX+kŎ]v;w!gAI&$s瞗sϵT_t6Cbc1%.IPhfJ(EЭ4 )--ݸq#jMMM'N&L⒓;yd{7p    `؁:W\ٵkEy(l=˄خ^*^"HOWQJRR:[#riKI	M4aѢEst?=Hw,qw%&klR!'33:=%pNZ9s&uuu1Ǎ4xF-
-@m߻;V|	uu]mk#}ƪ7Wz~pj
-ߕi/eYRoUxʇ<9aرcv)+?y%LLLT3g;s{(uI<<<*>z2*tf*FṍFff&` L]|y^^^KKǩ=<066F]n   0ABB`0yșrGR_aIΝ*M:=%Q%5]py ?HUͦ7"\\\n݊ "%w=GyxPFs&WmM~~~ӧOG߻KF>x|1hdd:n8 l `ebBbwe,]zvlg,;{dIE&
-&bO=]ma-ov6銌<}D'Go{`'[2
-/CXF"tnW1ܹs\\\	q6[؄MMMaaat(((@8˗/1L~~~ee%zzIsᶶ6
-gllC    EDD$$$ޣcσbL%))sK+,APӟ?]>>Ϋ>RVVJ
-14'&,+kɓ\׷5vDsG+Zkg2X'EE\HHJ~S/wf"((%$$trtD~5UdN>Zԝ"WMҬ]Y:kcMÍ#4FK6KP3=9a3V&ԣUrDbff4n
-tlz,,T3qlƅKNNFWѣGZ}?nnnRE7߻w7iooG?IH??O>uvg    ~qZ[[Э\@@]B>g(?X^^~޽o_Fj`]WՎ;ݕ4"27nܓNb!Xލ?-=*Nz9ɉj9(֫Rg`/Ą*BLM9&þ%رcK,A_eEG߼yY]3sss{ciG1)"""h_|||Guioַ+?3wNפWc0O6y2	ci8qܤIl9Lqص?ҕrF-M{m޸OƑZw>{=V52S>c&z{{ikk01D"qӦM***X,xnĉ:Du{>wu3    >?
-
-RRRuuu}I"u2A{|@$ZZZc>U{Q(DgdZ:L^:]wdXcդG	p_<{6Ux9OznɈ&;+]@@ }YiiICg}3g@]2|2Qh>SS)#ۼqu=ڏߖKAʹ=ue	LCB#B0بT7dF{:[h5jB։R+;c0Wջ /%*6A7k֬={m	OxMMMnnnK.UWWC?     F]^^b
-QQQ;;g$R{r2}RRRwidOX{
-lmzZz?d)a!z^8~|+ӝg>WֆMĖPGuu)111]r2$$6;+],Ņb;sHۏv-   :z<JMMk̙ICU6VD8y26mn6TPT5IDSmo-OQ(C:bԜi&TGs,gBCCV'	װ~~~˖-yfKKvV    aaa<<<fffyyy>c0Om۶IJJ>G܂%LLLTg]oi15YǷ|A;?TR.TV})}nxO_4i t]ʣfϞ`_O2R
-䢋(~lKKc57ˠ@]v]?5fڵcǎ߃6'Y#Q멳SU]>{0a
-vtcR3k)q''y#m=?($U
-=w>NٳThʔ;*5.ZHGWW ɠg~~z^^^uuV ?    ueddϟoccs97#1%z"---"csǌ7d]?f̘3'<7Wt.	81gD}o=gGt/
-6jd=ڵk;w\???>8G"Ã;ycjC.6ndd2n8gmU(|Ic}ePj?l3u*>g?ޕn
-=RCW}RgTgff0uݹGIwz`K}SdkfH?*7C,+t3gL~JgOٵ5:kUPPnݺKڵ+$b/^lllL&߽{}'    ~M޼yh``   v牌 Ol#(&tп 6Rg7\Kۼ}ӏ{Emv.N? Ȉd---ffS7fg3n1c)T`y
-VVVng}7wU2k$m&%'[lܱUQP`R--ǯ]]3ǾfyngN@ﲵ^&.6_Fz)jA'Co12{гojJ%ޒ.Ռ9A&,4e;wB=*SJ8b^6KII]paHHH]ͽ_;tPQQ$ ?    5iooSbbƍ/䴤3yO$(ft4'PY),״G[:5JӬ)ujۛzMԤ]4ӧ*,ncds2	8q}]n.cj)Slذw*pkii9~x666[#~xneLաή6ӎF!q]OG:uY3'MʆN]2}Ġ =ZRPзKBsyֆ03Y|SR͚j4y^ ǏmҤ_}c'Zh(\!))vڜG17mllVYYVVV?t p{    `R^^N ttt-Zz)))yPrJ==6J*QQv({c(j>DzmS+(yyfpopMc>$we]gҤ	ETlC477gee<y}m^ceG-IDD
--o}͚5a(`&nԩZZZo˓>DoR<ۀ:[,TV(p(*AXttX'޴TAa.;m0Xī*)[o?X|͉~0{Uk^::s>}9$m5_^kBBt)wUHM{路ѯ7;HE{G'`UUUEDD,--Ϝ9'?8q"=    ["NNNG61<X,1s*#)ZRMgUF7:wТE%7J]D;oP6>9q\3hdGǍ7ydD"cnJV֋;vBh|M9Pquu6mΖ#6'.ӑʷ+>}`cup?&IK}X͇@&/zWSMH{SxaY)ZPLaB5d0mkh#***!!5םAK~{۷w7nhooi   _Ewm۶-^_YiiCσ"@99+W5fC`[F<I_j?	IMv[z*%)l=4Rncƌ100(#sdaaaffVVV'=Sgzt?sx#6ÃSQQ	уeÜ8qTHH]111_ׁ-    Zjkkϝ;sNYYYȪ|<-ZZZ0겠ߏ*luq~z=nښik	>#=e/}h4RB3]2|:3VZ5uq-[+A m3gԽ-Aۃn6lܽ{͛7V%8t755=<hP?@    Bnܸamm˫P`5-رc|<D_;w9姏MByY.X AYAJtϝ5OUU(?3ǘl@ZZ:"";xC|*߸v|_2[lBBؑ#G%Um֭[~~~222/_nnna\ S\\#n   !ŋwrwwK"1&^Z\\|MjilΕA,,,s٪JM^QCdԽHKcۖVʊv"of܏	Cjoo$4$ڵkhUv u?ZZZ3gTQQxB@`{ɓ'=0    I{{]\\.]***Lf|Dzj			ts䌺jnϟZ#{-[I?P\5)))"eĐ͛7S)/^xQ4QDJ4
-F2[~uN:qFNNN++VITB	pB; 4g@    `0wVPPwpp QpgnnsWEmk\9+iaa|T89/$((HM팏gSN"m߾}LLL\\\(Ј<hnittf$33y|)%q!НqŊaaaW<Ik<<<eee8P\\$;;;5Ç/T؇6'   ]NNN^^ER/I<>D###			{{ɝ-<([m}}^d	/:4ݻo]oⓓEDDP/::=91+2yΝԺ:ͳIx<(a2©Ϙ1(֋R>hK'K`ժU	cu6.ssstݻwYh P    ;w		͟?SDaF{,755۸qcMgy0T)%%׋pq''ǃCMUUk?JG*ɣFi("999-,,bb)ux
-uǜ0a65?*a_>kii-X .a>shmlHH񋊊oB	Ye |i    BP?~,((hffv>;a0dMnwAWH~~wxˆ}ܹ%$~
-N̙3Htqq֋>}A=cll<vX탆pV<
-DEEэ;xE{͛7g77ׯ777H.'=    0HߨߨǷiӦyy-}R^QQqgaʞN{S^kP$kQǬ˾p@_UCڵkǎ~9{cLD֋9sQR'iT%'L`b#d$!3IPPPUU5&'24zf:uꔍr``˗/a6.=    0n[rrSSRSw^^^^]]ݓ'2;&CuO<y$ӧO펚g${+d֬np@d###qYYY#>GG3(;t萀 +++֭[;XQ?5550aի7^`ʥ%@fy+G#|ԗ@uz~Icw?x6>K
-tO{z!)&zȘ1cnb}愻UVm޼L&yNx@&so`N.    tvv}-_{ӦM驩-$ڵkZ dfN̾,uSw)in:6YD2!++	Ӓ4Ƞ_/ڵjDJh} h㢢h_rpp,n?ЯUK;K|yW~p [~uk}i/ <>O7_D?	j=f{xx^}Qٸ$%%Ĝ\qԅ~Q&3Aޓ'OBn    8_NIIן>}e2ҚYژP)$h+aN;=j?YkC6:
-P4p}M?~<ۦMe4fg333˃qG7-HQQQH?\7GKSڒ~ۤ?~CM+gǁsiKu <	_v<}~^K_4ܻwoA'.^x(Zonnާ	sr   իTCCCaaammmc*|<+V]4eA<rܣ/++\R7n1gAas^a,ԩS1jKMCm++1c$$$'`GbD\[yʡ~ØAI|1es}R@ozP\\\PP;-100ܞ	&    Jgggee%D277QWWj1>',,LJJJHH(<<6⡟ۥ)l\K}d馍:NfBB|ܮk,,,n}r]]]MzYYhdZ32444Ǝ&##/hD*4?twwGׯ¾}.]DP`C`C]ۡJ3    |pi;;;IIIt
-
-bP^>OHHJ7y"B|6OoCW*K9ᙞ[MU.8h?/Θ;>N[@D}xɗڴjjjR&QQQC	O (ɓ6m{Ycc#>NNNq[    Oʕ+6sLjn`E^			ZZZ
-
-
-!
-Ŧ_?"&$4}r/",+1۬jkc8gl}t{̙3	B驩I)lONcccC򊿎{Q<4ĞQ	EؘUVG__@ C
-ޏۃ~?    OjٳtRNNNGGǏD"cQIM]r[E9sK4Ŀ?Y{Ӧ#-_*yYYYMMVU.ç1=((u:c\۰aÔ)SЮ-Zsθ`@J~]xxxezEHD3TUUSZ    @?tvvףݻ<5!Wiiii:::e-P?Mi?}A$!~ҤIwo6DHI?}ښRX,-qqq7ih׳g޶m[션	Vϓh=LVV%//dhhhyyy{{;t>Uivvvw{cC_اd2    ڻwﺹ4>#Ӟ=ײe1y~qf.ԩSV\<'^ڏ$:ùpɨiB?'ԫ*?-jI$;;;ӱc.\E%SO\70111蚵yt/AޡB}/Fr   hnn.**:t萒Ķmۊִ4<(*ۼy3>G|adgjOǲҵ)'66]`i>ffdg %6?/CRR͛tFN8"5\\\w>k,kk1GA>gJݷoŋo@/,=    @KJJ<accs!'=9SnQ}CCCǙ^hNv?lzbӦ_O]xS4om3!u4㳳/jƌ(gDڳgѮLbllC@z @ rss޿:]W)..300ha=    @O}}=}>|XIISWW +-5<󭬬V^]p&Es#5T몝R_XKna
-DEUj!Yt^SSSC?*Է('aPc0}Q]G&܃?qEXXSSS߾}E{M~Rw
-8q"ւ   fPݻGQUU.m`σB"q֭rrr7o.(nB$;mQW^Uz 33rMSN4iZA@`1p@?EǎbbbLfLUI$JJJ7~SSSOBQ),,tuuG|CC~200ba@n _x 	t,++UUU755NOoKKc[e$׭[NIuCFD+aΜYk4t)/AKƌ˕Mkciwn$EzN644?~<1ᚲQήwff{deeYXXHJJY&**V4	u_n:6 o,22RCCO[[2~mp8\Kagafff6ٴj.ݝvkڬaa#&&Pz?y5[V1毗dSS	&^aMY%.##~ǏZ˘;ml-ӥ͟~_IxL"**
-}0ૼxϏ~Zo}  ~eٙj{p˖-CAAAAt+dL]#)c̘1wK ywر=)&>ɃTTdk"­Fq]Vp@?7'99EEJff``6SAAAGGG[[{-?f@{71ZGMKs#z<~q8}no~{
-֭[ji][l)--P(ebd\ +=vÙEYYY\\"	{{{#o-5566V^^~ɒ%nnnQpW~33R~5Y??ByyњB4ǏA?\
-#duuuiA=hMXXXDDDnh~+?^3NsOO9"G^Ȯ{l-h+++jˡ'|_seH	&@f NNNqqq83 Shmm}mBB]󫨨T7|ړ444PѣG)W㩽vyLVڏF&VV<<B<eἁ~rQtbŊ$Jf&Z$Ү]yyyQ4̌B7ihKj=-=;Bz|Hv^<3fvȩ~>~?ڱ>Sӯ#ߒWjn_A
-
-
-3 RQQqI%K?~e
-㳲tuuwqmp{Z"[N^Q~~9Yo̜AMVN<ճGN|)N4֍ 8oW}u΁bbbZW,69)'''$$dggwܹ/^ԠLuuuwoj/?kUOs?яo1g#<fP3'iprr>UWv{豶 ?B7GSSS111uus)3gnܸʕ+[pk5XY̚5밦9Yl+ZXAwҤI/ݾyh%uP#t ǳzPCXX82D:|M~~>
-ia!  Z\TٹI|hUa$ n5_λw?Bz[nu3A;-((ذa͛/^qV(Q!!޲giASCczlE#ׯXZ*(-9x`K[c:w.+44tٲejͰF-"*~BVVV  @?\
-j C `𨬬,((AAnnn77K.u=?\zrҥϟ{>?5B7
-,x=NN܍lkTħ{WҊ9@ߪvJ2켐o]n.#z"ĦMf``k    vv<nٳ p{ `TQ]]]PPsN999GG¶!v횭(
-H$RG3a''L`sr4hi.ڿqJ[cd~+j޳2vx{m0Vn~iҤ񂂼oSQR544Pz8`gll%BݻqBBBEEL-  ݞ̷ޛǏϞ={ĉ0 QEeek\\\$qttpg=hŻw;w333)k]=%K_Ĕm*RٳK,7nܣ{p@ߑՓ!&&w
-srP补ϯs  Nգ2@R}hU! ۃԿ GgggkkkaaΝ;/\Ж6=8;iǎ-Zj3uƖM?''G'|gbT\ŨneZy S&u4/122Z`_ɝksrRRR444"##_|	V  >(xj ~+[UUE_vv' Ѓ[ny{{+++PeӦMYYY]#bZ|///			554cqESDtԹ:Ɲ~[~Ϝp^,:mڴ)S]vPKCv-go A<cccAAA'(YY8NKK}͚5ᥥps  Tm&5g	 尿͛(0744DDNXLSttM^ѣG)Yw&G8)*p/3f̸qR3'88fޚ֚5P4 u>GVw722*ʨV)++??_WW"""!!!njii  ŋX,n qqq ?B}}Çedd,,,233[ӇJG"WLLLXX8,, Ukc3o8㥒cƌA}ٳg;휕n7w"'.X0my@ 9iƍ/`d...%%%uuup[  <P{N>Bacc* 0000@5 :;;>|),,lddؔ5nO?jrQ4!0UCѕRKޕxRv-{tudd{Wh~08*/#;::>T~FF{r2K99p7n\   @1nk {r{  OkkkYYYTTԚ5kx|}Nΐdf#QVV^l١C*?!z*TD[D$KnT]z㪇ρLLL6~TGpAoF|||+k˷fd< %$$ddd\7  :	;@^@ nZZZݻ%""`rs9zʕ+EEE===r!zx׏j}ҌO6쓦OPݞٳf\K}KcMZaA_TcmbbbZь)/_B$KIIm۶_	  `=dp{`N. .Prр Byɱctttf̘!!!H.p+W޽W]:w`,Zjjjd*C}ͦj*lll2f)J"wUmE˕$k?APߵz?{{{KJJ9rUm''.Zh۶m߿omm	   =ߧ   6***̙z갰Dbg|<ݞ֌+V̟?޾salĉs67TQXA:u*++ر,mw[p]ŜIyoɒ_9Փsᚼ<FZ=d,(((A[[H$~n"   }>聵3p{    mtvvKKKZ*  ƍŘ䴴4uuu!!]v]~%a*lNVq탒&LQo-:ҦSZ'O_T,dt)S&޻Գw}6D쌍}E&F5D'jB>  0O??9Fhmm}uff%.[(aӑ7n633x"Su4Ǹn4ių_sإAvF-ZK}ds}~cGŻ
-5%iѫᔔ3q쐐+Wlذ!!!&  ` UUUJEEښAvjn=q{(&p{_ׯ_䘙z{{_zuhܞ$2lhhxM6;w9溨MU999JMBsi_wUIJd\kVKCaqݠǲA)5/7cժU\\\;vxF"1|tG"hjjG}ag7p  l_/^P_%='N9 p{@ >
-		HmΘ,Ǎ.\ь8w8C`7En?~q[kIIwVVVu5!uZ#D
-5JWUU255-a`aڼp҆}   0NNN|q{`v =(͛7ϟߺu+??}<a1W,^XOO/++)BgRnr{:(aa![ۛh|O.#_aKh	hWPќt\6zyݐfhh8{l		;w455  +<\Ժ=0 n0hoo=y򤭭-e.\:=(t%%%233;!*=c--]9{mXM,\ 'vgq&L()
-39ꅻ[BܲedHMYY(@me݋  е<_]f`Z*++Q b
-III++܎$|`JJJ)Gݺ=~^2\'W}y0s_aEsP#Igr[=$333NNNCCÓ]zRS3LLLUUU}||jkk  Gr{`$ n`tx///yyy^^^ӧOS`nݺeoop˗p,y;ZWRٳXCE,?[~^U
-"]#}-~@ylgg%##pL ={jɒ%xbCCj0  `u{T:9W@n n`ӧB'''		KvVnb))l{:#;zޫ5Մ[dM&-Aѩ^w܉z99HLcAAAӧOWTT  `HM:/aG̞= =hrrr,NIIK#:ӧƭ\W>~dٍޞ&ӧOGS\N;M&&t˓;?s4f||G𐐐E@3V5-ٳ۷o_d	֭[>}Y=   C-{
-''J7촅_J= = p{QLCCCiiÇQ`60n:ѣG
-
-
-򁁁9;|YK}nli\:aU]U./[LQQ1  *?a5ړnnna6m:~6  0u>gr5qDUttt477YFRRr5yyCSVV&..BTAnϰӧAׯ@Z-:`V<  ڜ>|HdLUSS633KNN~d   "zŋE n0
-ill|iLL {FFFvUif|ݞ@~~~gg[n}n@<_Nv^_5jxn[ `YYŋo߾Db\+U8p ]TT,%%nii{  H. =}IBB&\رcG/e˖ݼyr{^<6u놶Ư-UpFZ3bbboLf`R`̙3Z	    O>USSB񎏏ϝ;w:iǫܹ?l@xxi&&#_Y5WI" hVK!+3MSSSPPp֭ӁWpŊ~~~>  RUUL?nKnacc\ = p{QEggg{{;
-mⴵ-Z$++InO3㵴Pgkk[XX#n8TV9s5:_yhf
-ks>111W^p#GnܸAP   `)..r>BЍÇBBBJJJ(iKMeіj*3gΠHa6{SD]eH{SW׬bۚ།_KjAA.v*_~:#
-  6:mu>4r{ p{@ n^xaii)%%zٖŵ~z2ќ14Bz
-]MM-%%&scNj,,,Pz+W .  !lkkp{n n`۬۷	
-
-޽RHJ"FFF|||zzz@#R-7bHJJjIOg\^^+Vxzz^tp  9~~~(Vs9'''=  n= 0@޼ys̙-[,X`ҥ...OnKKK3>~NNN;%bh	9yBBBǎde1`(۶mvpp|O^   ==Ps~ik'O= = p{IKK˻wﲲ,,,PeeeE&	_gϞ\tFȎ4Af$޽[DDDII)"")+apoCmjPZߣn   C?>0V FN^t)5a{%KK0Q3?DC-  _Ǹx|an??ynnW>w1{  s{?NUp{@ K.9;;ɡ ,++1'amx񢕕Ւ%K"##ks @F߿!yzz-cLҒDڻw/jXXXdff~	:   ѻ=0 n0
-K$%%h+**rvvFlpppS] PCMCgDGw>!UUU7mڔӎ   `6k,B_   tvv^|SQQGWW799ë4Я]TTTNN= Ј;|r!!!WWWd2ò;wz{{=z
-n   ~zWn7zڦ
-h	@n
-m%yB  _GBBb8aA/G߿_TTTZZw-8Aa=6;**
-ukmmmD
-TRR;wcP;e  FTm=UUU$1'	R p{訫~yyy?~$F_LII7z24|@pJJJsY~<aY=
-
-RSSCʕ+QoΝ;  g=UUUT/t秢x@ 5999Y=_ 455^:$$DeBᘤ$??]_24|55ŋHLd{HD-ʕ+Q͛  c``PUUGtc!ZN+ ɓ':::BBBAAA<HJbSb
-]vAn4Lь'|!'-5AfMMM'MMM  B#hc1`ݞG_P_yD ܽ{7&&fڵ(,ZfMXX۷ '2)+Ū_~@Q&&&zsrĖ/_~ҥ>@  0
-ݞ'~5-MY=CFzlܞ_eQgggT"2~~~9997o224V@@ʕ+-8@K貽[BܲejR(՘jll.++tvh  MAAwT¡DTUUQw
-_Oq{h%1Rttt<~kiiqppxzz;wk${PHb,X~z"NI^V-[XZZ:$$>'qVON@f֭N  `rqH.ZGTUUъ\hP|5"n u8::^|5-u{999Db%_\o:tsKn|zN{1COł<>DVϫm۶JHHT)YY$	uEDDRRR***(
-4   'N̞=Uc`-~y﬛w{[gt{dgּ|2++G(@GS{r2㯎|##lp{(.%1!^hI{S8zyPl~n.|8}uzѻ=OߴAgƪ	LޕQ39OkW&"""%%\0oߎ:i lْ+h  F39NmV=AAA5;n0P(o޼![nD-{{˗/ۃvqF!!!.)_M;x&zqkMdarm7TtcmyIY[0jT!:z)ȺqXЫR3W}޿>\|$i;Nߎt==}cRa*?QwZVVVFF9:1MGGbbgbbbIII7L  0֑\2uum6ݞbQwhz'e ZPLD&nJqpp8yБkjj&$$4CݧjBڇ5ٳS`2&L;y2)ЃY3'̒of*d^Qvj
-gbbB͚%N7ׅ^}
-n33&钛.i?T͇;CvQRQ^ѥJ##RۦT7IK44(-"(^X0 DEX5FF,XboD#g]XF9ܹ3swΝ7_O"Ν[~}ь;L&d^^^5266޽\"i ?hѸ=m1ۣQA8_=]v~l@Ezzho>tPkkk++.qg{jԨѤI+W&yz쉉ӧ8ԪXx/O[>pE}{CjWr=&'YXEb_NY٤mʕ+&^RE]EϢn-%6GO)Ʌ
-}*^/W+;i|kg(gz-Zdkkkhh8xQQ 4i7^ɦM&Z33޼y3%% 
-8-=;O0;c烾tl@\~m۶2O>r'(h5kִy:ՏiARۢ/QdL|8o߽c.ڹΞbm
-zSۼ3E>'O>Rk1%{q/>3uF\,ڵ1ol&VZx]^ܒE]rz*UqTTT:M&?6lXr&M;v,11=  -=2K2+:3! xΝ;fiiiddԥKիW	<xȑ#kժeootׯNMGneZ8*V(agz?SG;rq4Ůܹ1@TPO䴄%Wha^I*j;vT3Q%W̜ڹI玖b+Bֻq6(]VOt1"mO၁͛7^z~oۦ!Ċdsmڴi5g͚u̙/^а ^+l"-ɥKVƬlO׮]!CƳg?{֪UK./^իO<9zhKK&M,\իs~ڴU߸|^߮%ݮ^'yʲݩ2<~45~IBܢg>)/Ǻ5}ʔ)**c_%ݞV^E~!^576x]߿-e\x8<ҹĿIwʷGbu*UwO{FHKڸiΝ;vcߖ-:k+d˖-kӦQ-^=4  oq{~kkkEG6١|(V|]d=d{ lϑ#GNڸqc33N:gRw)rq6iҤuۋϓ9͌Rr77vἎL+r/.F١F+'Xj\ӭcr~,nj=.(Z85{¤mz!56lHY')<\4S;vkhD#&2s @.=F?:L0!,,Lʕ+{s+g	3wU,+[gbd{bccDb_XX)oqe78d{AKJJ:zqiԛ4o)SXZZ7Tw"aуc51R]Ӡ/QK6##yYz`eC2X<}ߨ135|/ëU*_iܘٲiܖ%{u]Z%6wW=#zEիWoժ՚5k7oQo@_߸6S3gܿ?p Th%"H*Ke!W^=ybcc[@ ۃӧOO<9{M3K/iӦYZZ;ѣ6q6nGun:*_S>6a6kTPt%JB<gNk},>i	KƏqʩk'<0rFo,o	q^!^z9`]:=Qudؿ_~Z/mMG4aaVVVu>|Ν;ݻNc P(*]vuR2a";$]0hР+W*_&5LɎU,
-UOxgu!C-###99ȑ#I&ժUstt=ҥKwpp0668t8,'eޮyɒEKq̗[\sKpuŊ}idXa򄖗MUǩI6zb"E>2!4O`Yxh/i3Q3K7F;yǩdҍ6mxJxmۦMzmhhhjj*~T߿_c4 ,=ŊJ.lAgzyy5jԨz66m::eDĒ%Kի'NƌsСٷ:wBRǥr։zڔ+WLJ/_̪Nn]nضYʥ'|ȱfP@O$|vѫZeggj5է罋(r`©֮TjKo\?M%Oߴqh{iӦ7oҌ h9n@ ۃLzzzbbS.]ھ}{qeoo?gΜǏNʑe˒%K5kfccw8\i?MΤd".mCyz^XHkI%/^X<^+'ޜ{}ԓo')S۳}|4X$bW۷/ڇV~5w=pI7y`3/fWt5_|&+"^߾=}tL'O~(eH*S	ennnW^MII hзd{=(RSSo޼ԥKƍ{f_=/mmݺkddd}lRéQz}%ݤbӔy|{,Jr|wzzr)r`;Mٲ_yu{s;dWE;'I*~wA}WcĖÇ6׮eZիFf[4tp=;<sVرclllƏ=:ZﯛfUHRSS^zm޼Ν; xk=ȵn$=d{ 111Vٳ8kܸiӎ9jF] 7nXfSŊ]\\lْVN4|h#)bXZ_4#fdXAꓣWq-ܘ2O3[WZ97^<AٶGUY<3ޖMr=`<eYBܢ]ۇuhuU%IA<Z1N. S=fϞmdd7bĈQQ:UHg͚մiS@u}Ŋ.]\. dgǎd{P!_W\	ٳEG}7WrjUE')<|ڵ⼲s!!!S}Ι?H7/:XDn<ǩIݬ$Ixw3Q!/>kټVz7͙?a0My竗f}+u߯Xms{s\2efwQ5w~G͛7aÆjrww?<}}e3g6i?h  l>2W```߾}-,,,--,D]g{/Oۼysy8
-
-*P}{^4060gf+eĞ770K7ۚ6?H[$"IyxO)RxvmPQ+#yvҨ>+]كu[s4>ҟ>~?/}=fy;֬oWeZ[6mlhnm
-%[ҋX֮ðƻsw/"-[֨Q###A۶-#0PGz6n<qĬYϟ鄄n x_~n⽒aÆ=zԬYLӅݹsGٞnݺժU}ׯ3kYĐʕJIɖN,cǞw|vW2迲ׁ# ŖM=;<VhTh/P>/"+vNcǚRם먌.HkidNĿ:O,s''уc:*,YDLN
-}ZWF;=G2W8ڶm+ݻ
-Qwrr^zfΜyOh |){Eq6}ZZZ3(((~Vªi6ʪ}k֬- Wr=ݫN1/7al?NM5\4t颊|cdXz)BAybl<}n?-5-OFN.U1Ncf%,cS㗈Br\w>:QNi',zҭ[7Ν;_>yfe}Ϟ=dhh8uC=^=  =AlVr\=ݺu+::zĈk611߿xxx֭ƍ2l5kִ{W^} 4URZHAy.?Z_˾)TӒ%(V?Ĕmʚ~;h5x]ihguƎj&e,kWY&j˸z{}ժHϥNPz>LND751400iӦzzz۷O
-M|}DE[k׮>}}>|Ȱ  m߾]8ǅlA ۃ(###..nϞ=VVV}Z[oϫ]v/_v,xbA=Y|MI)3_ܦy)Pq#=HD9֜>YeǵPI[LrS'3a{v2\{{REƌlv4Mo/ܫv=߿_}iGU+;vTs's?"4EJ-i֭[tRdI??۶Ny@@֭}SNݺuGT  G}{!
-D+W@P<zH|!N8JgI^l8;pa,--5j4gΜ3gS>fAIqԫZFc@ޑy`<nMF51k(/޽9^!.1/P3yRu}k|U=J,"]5߫E^o{6t0vT][?uŗK>zVv&M,ZM7?󋋌0`ȑ#mv. .Sؗ\Eз ۃI.߿޽ƍW&&&ڵ[dɟ=cǎM8nݺ41cƩS>+R^.>zp̠R/>kH*:z-t
-oz7]iNNoW]u	]wޟקW])`oCCֶAU*[<b cjC577oܸŋ"#u4Zׯӧ6o|͔j @N)"C!`JOO={M֠A==='''qw`]ݳzS&Nhkk+*3u'NS>=.Zʙ|q{Uߋׯ#
-|1#]8395>C
-to)ا˃~TgNjze_S#7rq;0]*T1ќ?ÔF5n֬YOtɼX,""аVZApp7^zE+ E!d{P`ݿ&MjР8rvv^`ɓ'M;6e{{{q9vd~-#۷(^)W (w飣4ml(]$Zn]Di;GTLA955u$igΆ5^ϳn1͜@zue\իEĉ2jt< @7oF
-𰱱166ܹ5k.^H KQ	=XGvvv622rtt;w'^mܨ+N>Ynʕ+߿?#eG>RJ3'oJ*Z8vyFRC(gl2eS㗈0*6fRi|IC1%l41E,.\=utucicf*s~4>p#6ijbCDH۫dуc_\1i|%
-hr\PK߹%Rd9w5|:uꈵkgrr23  ׸'A <{̙3K,i֬~--ZtQݏz˗/{zzTXqȐ!{IO[{<HHʔ)ڴ1N~۞^WOyo{qjҺ5}Njا_<Y(Ӆ~]-kWBRi`uXV'OnWƩD9Æ8~'ҭ7S!GlCT"g}}NN?ٿgYoNNqeͫ."6MeM(}vuh)*wJ~{~GSSӒ%Kd:ճ|yFPyl6ڵk/\KZf @޳=\EpO.l
-7o̬e˖ѣ#e{oޟ!ЭsGʕJ}٧>~Sicáz{[껴eozn׫moK)SwO۽;=Ǯyxȡ4G>aPF[68r`|{ֺ̜]sr%Jvik~DZ>6qER>NŪ\PC|0.*Zg;55wZ3፻vcn"m%VWM!"ry0GkӧϾ-[2֯.ZѢmhyDD+$"e cQ	d{P`%''<yr;wnѢŬYݛi=~~W^k۶m:uzyW ۓƕY[tQ`QcMߔ\%K*"ZۢNQr#q3~t*I"WP@aͯH :$~͝]̿ا۞]w6Z>I9-9E?-\*駟/^\b..~u[EhXs=ܘ	{)z,--/~XL6vYYYif޼yW  _(!C!z.]ڹsgSSSq7tPo=7nuvv611޽{xxxjbh#R[fqή7UVPOK.ȱE]]-`kWrBihvW.NWoz%KWVs_M+VV\b͛ot{z^N30zڪjb{U2]E~MŒb--*p5aløz>_[W\٢Eqo*$D7gݎ1cFÆMvǏ  ԷGJ.+=(222RSS5ktҥr5k:thtttll%Vw5???gggSSΝ;&[ڇ/~9?-x]_rhaF5E4t0hXӹIS'-.wCiagwZ4ߤavo_#VRųS۳?ҔsJ/,
-;bxZ93w,+}xkg0Qc\Y7of,jX߮zZӧ8w´EtɧM|u...m۶]vmBDn2O?ԨQ
-*N>}O>m2  _з C^xqҥ+Wvf[lyիuܷGr[sUTqtt\j8-- M$5nܸrm۶ˈݤvdKvظN:ٱc_E "C!JKKqFpp^lۦ=˗mٲe˖Kn޼.#h:""-izX:uޤztrfF`CLSNfffƍdO<yM1  I}{'QpL=k׮mݺ\ <xUHȦMAe˖={:Տփ a<=åÜ9sEF,aÆ~YXXHEGG߸qT  qO.= --ɓ'7omll7nukF`>QQQm֬ŋ a${vie2\)HܲeۦM@~BCC=z$a @c{rd{P+WlڴiС40`@ppKt}O._۷<BM5RWzDR=A/đebb"ӧߓ9n9rdÆmmmvsΥ&v =!CAA&Nܹm۶#Fԯ_аe˖>>>/_}ߞW!!۹jղ9s됧\<5vڵk5bT< @72'oڧOSSSss={ļx DGG!d{PW^ݽ{W&Zj(QI&gΜO=v6lEѣG9rDzDn{^=j(sssqL>xddzpn-[v)h==e˶ifŊ'OLLLLOO #ܓ Crݻwajj߾}E8qMG
-:|1cǍwAqJAՓz̙3-,,T2dȐ?^pK۸`DĤIV}gϞ )" z˗۬YZlieeնm[//Gmڤ=rǏ1B֭[wܸqb)i="G6mjllܭ[}[dXN
-_'OܬY3kk;J9䤤$z  5=;Al
-Ǐ9rdܹ͛7733svvg*ٞcǎ͚5I&رcy>/iժ͛SCCut \<==[l)W4)~	- @gٞlA ۃK.'&&>}ZhѢvl̙~ӷGWr3gxyy5iĤ_~{J.a%Ǉ̬W^I9_mxK&n۶hODf̘qȑ\ ("Cp%Aً/?jJ̙3~gm:zgΛ7^znnn2,-qAh߫e\ĺuZn]J7  eDnR=[2?ܥKKKKGGǱcǊ޽{Rn +!
-D)S@Pٳ3g,\cǎJJ.xzzըQsAAA	,Ahӫ'~~~5Zxm^^Ώ__ߌDG{yyjL}̘1ݻwhi :#J.=d,˗ǎ[lY۶m˕+7lذ}%oŋ8OZjv֭[w-=M$
-
-NJ|||dtӫ'&&ɩdɒ#FyfJJ
-p t)::+d{˗/6jԨtcƌٺu뛁>t%ٞ[nXqƆ]t	H|uAh+-qStfwww+++OOgQQ+(*jڵ}^Ŋw!g<  ݣo(@._paŝ:u'51bĶmtqƍ+VСM׮]׬Y2.փ 4ǫ^'O^=׮]۰a4h ܞ={Z			 09lA֫W.]$N_^=;;\bunZn]LLLZhlٲN]y1_ HM۳;|ӧO%1,*J4Mh@D3"Ѥ f{`l
-/^\v-00_~666App;wt<J8sL
-_bEӦM˖-[~˗;v?8ٳgd:3PgF,sFIv59,n4T@O5LQ_djGdm*7]}7-S.Dԧh3X9Ν9~ڵkvZRŋwM]]zYYY^ti d{=(ryFF׃ԩcaaѫW_pAٞSBBBlmmbddԥK޽{۷ɤx Go)CڬHQ%G5kr(ˮJ9[:˧T֕e*UU~xv/S6<G.e5,aVQǈ͗_~)WWLgz^FDDGG9ԴCK,9ydjj*7[ "d{P%%%]|yÆⴱN:={\be{ty1XߪUꫪdR<ǹehdr]1稪9]ʯŞʋäZjeʔ_.
-]H~~i7d7j<tЃhT ;w/ǢE`l
-[n1VE6k짟~pB:ۓ1};۷_~nCX1]y7-bo)Me,R3qci(<KVLװ'e%UICJ\\*giW_|Gرcd:V=%,l߾}077^z֭p= ۥl}{d{P`7nڵkȑeʔiӦʕ+O>KB:3-[DGGٳg?dR<ޭF}"YΙ"Y.a]{-GEe725lzQ}krTKS߇I/ݻ7Jf	yvezn'd>j=5jxӥ+2Mtv
-	(y{{ٕ(Q<|hW -"d{ !--ɓ';v8pq.]|||N<l< ~Gy8Słc>mv=v]_hyXc߾}Ϟ=KOO9 W"d{PsDGGO2e˖uСq.O$٫< _ 4<9|:u$͛O8122޽{z  d{l}sϘ1UVNNNӧO\_T~hV#-XťN:7=zttt͛7 ^)VK=4d{Pognժӏ9J ˗/uԴ~aaawIJJ !CO<ٷo߬Y4iRfMGGǩSر#9<\(!'YgϞ}]PPХK J.=um=ztٳg;;;K"""ߌ	/A
-\re=j׮mii٫W/ҥKϟ? Cз ^gmi۶mjLMM*nl 
-n^,*jƍ={QF͚5]]]W\yԩ:  O!C$qqq.\[hQR%++QFm޼9!"BqKsX+WvvvW C+vd{d{P`/\M6n7nxs[.|	sѣG7n̬ENȠ ٞlA ۃ.99̙3k֬qsskР!C6lp~~DAؓ9~͛׫Ws>>>{\\& Cp%\p/^|ڵk쬬z)޾}+`_w;vC:uڷo?wC=|P.` >l}{d{P'%%]ti'w!!!W^ 
-N?~|5jhѢŜ9svTL oAl
-K.mذwFFFݻw_bɓ'ߌ)0A^l޼yխGcǎ7oҫ N Ccccj׮mddԦMoo'Oڸ`(p<xpƌ͚5344:thxx_H;	 =\Ep%AYFFFZZڕ+W6m$N,--7o`Ç
-	D >G8Q/}v@e7 |@w`oA=r_ɷo޹s8344tqq?Ӄ >and˖-suu5ԯ_؄ZH J.lae{oܸÀ/iii?𰷷СÏ?xȑM8&82/^jժ~կ__ill,2 t%}{=ć퉏322իWxxG9y$yf2eJV֭w4!c#,00p6tpppss[fͩS  CL,ۓ)~WTV={699Vy_uUfMq7qD)ۓ~_ "#0PXCHϬy,*f8BZUYµʜr<Aؙ+@-Ӧ@-׮Mk9+^Zi6ݓ~޽{gg5kܽ{7)) ڱc4d{.#˟={m۶N___OO%((ɓ'4Kӧ?_mmm=eʔݻw8q.\8w謒,k^vעq%稪ga\k<ەz#w!GoRR+ҾZ}ٽ)Z~0TTT^2ZV>\|HYDyJLL!~/\P|TVD'N/$ >hblޓ+55U 駟.lll<iҤ'OX7v5jϪ8ݻ?0f̘ǏQ36cr-GuPY˵VӲJ{-t,YsMHW[fU˧=ˢZ[T]3QFŌ3;O{ ڵK|.wvQ[oۆ?UL~^lWUUY(J+R/\*^u)Q.\>*%(PPLEnꅫRթ,TVTyi媪YN}nUJJo(^p*ݧ4ˏISLϭrQQ*e*ǔʱqȲn(A9۷o_glHZ6:Sxxg˖-+VXxq#GƾzF9&''>}zС%Jʕ+PR3SvO(z׮}j;?-כo[>nԧdnAz*WW^l?\|ѣ<x@c d2ۭLիa_Nկ^N
-ixU<4bbʲ*3U~U*GAb*ӕ̠^gewS3-*xvEev削Ҕ7'[*/IM}QPxv|QGR}YHv!K>QJŔ?{cU}guǎ7+SeʇP"DD?MLT<+Q$MTLZjr)g}]v=qDzz:<rj:uVE:u,ɤXe~ǢC9ںfr-ߵozLh7P=<[n['^166.YdҥMLL믿 >=^TE,Ytc@z,/)bN%LQYt驴ruPSfP_RjYp٤jX\y9QvkT߱e|¥ysRTU^jݲ(y͟%7]QGWb94/媳{L#mUyr,d*GʵRYV9QT)W]2SLRJ3+U"H-ZPB~x0}/_#GnݺjժaÆ9rSL+j#LWDmn-y\DC%ߺ\jcYy'05Zn3sK;bΜ9GիפIv%2# q =SnݤSfѣ4Ez*=P۩Sf͚UPhڵkC{iii111;wܾ}jeXӳ+M}fxQv4,O6?9svZ54Y[vorh~s5C-?6ZYN\B<x3g\x޽{ <zH|޼yɓ'o߾WJ%+WH3(ϯ"fS*pułEe+$jgɂ4rTT[gP~IZy[Pd9zYR-+pOʛNn+Vˏ6{I̚?NcAEGA>YS*G#e	v6\j85SyEΟ?5a;;
-*|׍7:u޽{?i#_w޽#%ݸݭ^AfzwM{    /^\|yvRJ5mt޼yNJHH` I_RRR|||;)ITfWo8    /^l۶RJ6<yCĩ:     >,r<&&յz48qݻ>}     =}t֭>>>;vxwZ    ϼ$r<99Y`    xio5;     #%v     =v      >d{      >&d{2+e٣RB\\l]v=uTx.)	&tm.)4tҜx**bNQ=ŜXXT"b~ʕ+D    6EzD9"4h Dkkk㰰0_R<VQ"MY&׮:ʨhʕW"ׄLXEN:%M'     sg{HXXةL3Hdt)"*(fKyR׮].ۣUꯨ"S[(<Jb,w"eO!      ]R\oL)%*}ZԊJEEEJ%lkԷGⱢӎJĜꗒI~A*+
-/      PΫ((/gϞ,/zOFʢdT(23hv2+R,=/R5     =E&gϿ)wn2{Q#u(2rreW 2أ\gސ+]4%     >~"7w"ۣɲf{}\RW".     g{!=מ251hQ     'QY"ۣ~wrň7yh^{r!uD     orQq4/:A_{.RkuG}zeY㭭G     o:!k4ܯ\"FTF?V$pTJf<kߺ94%˞H:3     %ۣH.]zʕqqqN2)fSQ&euK:fRYX-:'EU}"błʩ*!|     #/ٞJzF"J丸8D*jv=BXX"L.Ū     W;XiX'ŲrR"<G1ܱtbNԞL*w~_e*r-E".     PX'oq     (@=q{#     @f{dwu     @ae{bccmc     
-iecQO6^z                                                                                                                                                                                                                                                                                                                                                                                                                       @v? 
-endstream
-endobj
-9 0 obj
-77065
-endobj
-10 0 obj
-/DeviceRGB
-endobj
-11 0 obj
-<<
-/Filter [ /FlateDecode ]
-/Width 106
-/Height 48
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 12 0 R
->>
-stream
-x[S[OWëW5Uorg2wnnrovDP%n1q (&[H71&sOv.6oH !k07<\!R$˲7l\`ȈG>v	{'Z!oaySq9>\XKH9p^|N?vYS n$SQv{ۆj
-1YQrH`XitW2<::ފF#(}'ϋw9^*7}QN:M&O:{{A3<2sxx~m~/vҙH.)A2 0t8/9A@n٥r+dBNsG (d#4&HJ	~7iE0W2:Ⱦs9l1WRqC#Wqvr߾ pMǊkۿ[]]oOTOUϞTmnx{7/hR)lVE5E[) 89,EHD3	\W+++	\<m'T.-ggN_3&Tl[ˏSVw[=b'>xĝ=ɜV~3+
-Kcx(tk $KEtjػ8zۼ<uzV¦p9m>.Xֳ5T /`t
-ysm7h6N{7ߢv4۳S*0 $c$ $9+W;^<]__;T*Jd8Ӵjy6\db1HgySO1mYcj!	ho!4e=@QC9?m41-243:F'co푱<˝jokkUeFBz>|k!;36n3#Ns.y:Ɩ͙'mYg<ĕu$SSyUӔA$LBMw+##ZyCni﫿=PTչ#fo}z:ǰg- xF kvd+F!?i#ٖnJs'^1hDx{&|ɔmH!7;J&x=Le_
-SC%c?oo"{ڻTKeq+^4N4H90@Xq{]የz˚r3#ZvjnROu@*N#2?ih22( '>m<ADhledgZ%z>mb͆rhр_hl(JC$Z#N+UNAFfEV{jr,Ok@}  ((I$`AHF@ UUp!7e/z(_﹍^tx6>v}m;昡s)WO
-t*C@2#):$@r<lDϲi9:}!%;]	Zb
-hӣG3S"w/ :y74spjRz1vO'BQHr$IFg<?T7-kW/>ct9[fü@W09++ޮX,Vk
-otVC1< 88rma8},C?fN2*E4#뽏ޡ,±`qSw7DOŨʂ{mB/y?S[4I .EQ5VޤXe0(W阞M!DR7?:,Gȡ\Of!&]ä(E<+ĈC[qb#u*Äq
-˞.3GFi|fj-_gY-Q)S}X&^(@`>m?l<< ~YEdj1OwTP|owta BA]Ѐ>$bu?fa;uJrJaP,v5hE:@@+G.?Y w<b0TJ5ޠ4VzBT#`6&HGUS{/1k\6Xڐֆb:H95B	y;G+_wGGdiiQx uDFژt:9C7ȼGT&.}gQ*`*TUEyX'D"J=>_D9Ikg/˭H_&g%MD	PQXH6ە3(=/.W]NBs̻?tPdA|ɓ], <|im]3!/7!tB%"N o(9- o,g4d^zܿ\j!688GJ[(ONr	ɳR8X,Z\.f0Hs`qxY;{uPc5|B(PgʑӴffp]<Zvy*k(^PbggI̺[!оՅe1;Ŏ_9o-N쭯	|#755v(FŠtubeTڗ=>>4Ъ@hFl'٢l%.Aԍ+s84}/l:ѳ0K:KmŖ׳pKXj[_z+en?=gh2=c{[rh-H~~3G{nqV]'irh]#4$/wyb`:bnQCVJ(nM$b̭t;j78a0:N~P' TEڃ&`$4@4'PT˶JvJ]kP/y V ж"jIioqDY_ԃR(i j{ l\uOuIc6HH2IݱZ7B[jPGXcqA 9 PC:` ݹ
-*{k=9uDfX||s*fM@ pUd)O۞(<.ˡYv`%Ң~42`^o;?>d~om-/ZeQ~oX
-\!_`Q
-}}Cfs{{Gؔٳ Jy*b-Cר	r|,	oo.,̅axqM\$|mrݫ
-endstream
-endobj
-12 0 obj
-3483
-endobj
-13 0 obj
-endobj
-14 0 obj
-3483
-endobj
-15 0 obj
-<<
->>
-endobj
-16 0 obj
-3483
-endobj
-17 0 obj
-<<
-/Title (fr-soft-frequency-reuse-scheme-v1)
-/CreationDate (D:20140609020132)
-/ModDate (D:20140609020132)
-/Producer (ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org)
->>
-endobj
-xref
-0 18
-0000000000 65535 f 
-0000000010 00000 n 
-0000000059 00000 n 
-0000000118 00000 n 
-0000000310 00000 n 
-0000000398 00000 n 
-0000000416 00000 n 
-0000000454 00000 n 
-0000000475 00000 n 
-0000077723 00000 n 
-0000077744 00000 n 
-0000077771 00000 n 
-0000081395 00000 n 
-0000081416 00000 n 
-0000081432 00000 n 
-0000081453 00000 n 
-0000081475 00000 n 
-0000081496 00000 n 
-trailer
-<<
-/Size 18
-/Info 17 0 R
-/Root 1 0 R
->>
-startxref
-81697
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.png ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.png
--- ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v1.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,269 +0,0 @@
-PNG
-
-   IHDR       ي   	pHYs    nu>  
-OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
-!{kּ>H3Q5B.@
-$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
-dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
-b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGwǈg(gwLӋT071oUX**|
-J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!ku5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
-M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
-yg"/6шC\*NH*Mz쑼5y$3,幄'LLݛ:v m2=:1qB!Mggfvˬen/kY-
-BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
-+V<*mOW~&zMk^ʂkU
-}]OX/Yߵa>(xoʿܔĹdff-[nڴVE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-6U#pDy	:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F VIDATxwxSedv)e({,2Q!ںwh^!-e-ӆgy̯O-6U9I{߷(      @c      	q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Ш      4*=      
-q     @B     Шh(   ۷o_|y^ƎHM     7m۶-44488xԨQ     HQQQrrƍ3226o\PP@Y     kӦMBJR֬Y~EQ     K,ٷoFQM6ݹsիi 7D   _\rҥz^tA_~eΝ,S" p+=    (SRR222R:uԹsm۶-_jR% p+=    sܹovΝ&iȑjZѼy'[n۶mB    Pu֭ZJVO6-,,L(^;vdX,kff& A   Jeҥ'O6l؄	$IԩS{yy]C 	    UJOOߺuh:uhT{!IϨQpԩ{P1 pJ    *ݻwZl9l0N(BQEQ$I
-;vt%A ˎ   @ڵk7sLV\J}FִiS^O M    Z
-$Q+ p[   )gS     =    @M9BT q   qE m      4*=   qJKK; Έ{    c0.솮1\ wF   x|a7    
-!⒒.N- p7J    x`0VkLLLBBd2Lf2""" ps=   IKKZΟ-bIIIxJgB {    Ri/OEULy 7G   x S5   )R h   <b1Ee1e 4=   gX,111iiiKN̜ 2oKw 4=   X,Ź*JJJrV-=  0w   AYOtt֭[SSS]!::Za6+ q   A.Wè. pg=   g1JU?g3M=      {)))C n    j:ߪ+PdY G   x(!D\\\\\\6H$ 9   ;'cNHHB$%%T>  G   xjq;b8/:s @   Gq&>f9--l6;tQ.ι{  n    fh4:ÝꓝJ9{     <}Wd    xV^/5w5;0F1::h4x,{    ZK}j#I[=Vl6՚ <q   AFcll֭[*QsLd\c <q   #*>IIIʙTɘ   h!::`0R=nV+s d=   Z)))iiiiiieGo9g;憒$g'%%bƲx,   X,WSrȹ"gʣ(JvB$$$$$$8g[X=   8/dr<5=W|E{    bX?<.Δ[{?Ilb =   gr.Un6#""CMnqŹ ñ;   ARSSKq]LHHp+Y)& -   DEE%&&fee9s`s_jFFF И0   P;/7fYQBάG$`0$''WsZJJJ\\\Ǭ@CG   x:`4M&SMs9gq\N윎ZB] <q   fsZZZJJd2U)#z $$$+ O@   xgUrUM/s0WG1}t!D||<    <HdddZZZKj$>			f955M    V)ǭjk愄!D||< x   DEEEGGGDD\Xi(LD?z x   DGG;HJJJKKZiiid2FgOMV檔ht^ (=   g1111eWr>Ba$IjX+s֤    .jZFDDL&j6]PDDDUsXbܹJ ϥsa    <HBB3뉏.cXRRRRRRI`čԜP\"O^ߑ" 9%    <GJJ">>>66܈-ј윻b.     E"篜W9eO <q   Y_1\R)6 p_=   gq^oǐ. ps=   1BJkZ\W("& 1   8IJJt溰!]ι{ -M   <HtttJJlNKK7F\     !55uΥ-KEk0 q   Y8/4LQQQU< {    Od2L&SMya pL   =$1w 3{   Ϲºk).P+    3͑RRR_ j w`.   qf=F1""㚪 И    lv኏OOOOMMMMMݺu`B\}ʲ= Έ{   ٿSn.?/G$s;#   2L&!b; q   9nur n     Q!   8篤$$$Tz?[)
-#     z$sP   3LpJ/w=$)Lmm    YDD\j w`.    5= *W%   Pk 6ŒbX,U{Ziii_RCge0L   @(`.Z			.h.c_LLLRR"""b    I(i6!**d2F!lNKK:ybӧO\     pFh4FGG;zWY昘WeZi/S5   5sZf`0DDDX֤pgi/<:::99lsyY,KLL4L   @0dOMMMNNZbs_[ӧKNHHd+    x=iiiΌ&::}=f922yChZaYJJ֭[]r`=    jʵ^РYVǕp<XqlZCjjjzzzVVl6Wq   $Iqb0 ՚cX"""<5}=%&&:b:q   Z$z %$$GFF&%%EGGj\d2kr6X,r[   $Ib0(gfa2<vr2Lܧ+xr;#   PS*PF&vX,5;IIIjp{    Ԕ{d29HII#""jOm     EDD՚Tøy}XxVL    5嚻RHHHLm,KLLLMlJIIaJ   @M9EQ`HNNv.&UNBBBRRbRDGG;qcVk\\;RB    h䢢*e&***11s`0")))444...%%%-----͙mߋv]yfjW\s    )`.jF3Ljl0RSS###VkJJJJJ
-LCA   \(p9GY,gÎW&"\x())l/h4LWwUuIEEE9gfK]5    jhŊss#7>R%ϟ:LbLOOhL   @1 9    BhLFc||<u@#C   vA#E0w   Zrĉ%I6K$1EvPx&j    jJe!=0Ra%* $Og    5>g!v p_=    jM[      Q!   PS	SY q   r<= P=    jG$X@    )g@  n   @M9I" pg=    j ps=    j     H.j    5|(8 wF   =&D {    ?3R j   @M;> ֈ{    ) 4=    jE,@    )Wwm>MŹ|hP    5\5P+=    j\#   PS  q   b0 4=    jʵ2Ĉ 
-q   r$>P+=    jN ps=    j\Z!   PSesQSy 	    5ZT j   @Mɲ,.6 B   * z|~hP    E    @HxK|@    5 pg=    j q   ?wf(8}\S    5p8?sQp B   =&4 #   Pk- wF     Ш    )2\z@    cf B   =&D PC=    j\ PC=    j[y !    #I%F
-q   !z  7G   [D3    FΈ{    &;#   PS @@   }(8 wF   C$IblEQY=j    j{D 4 ѣ{5:ѿd    5zhаZ^2eÛ6mڸ?ʈ{    CնlٲYfk֬9xۧMֵkW//{    ԔJB(x. N6l(K,Y~_|{	&4ʗL   ?l$)88xĉaaa+WoWZu{N:Gލ%    !á<tv/UlBEQA,\q^mEt]9+{t5"sOwR5O|O}딽s]U2*\*Щľ◽eL;,we읗{e|[mZ,*굔;	/\w^qU܎垕i۔ƴJfUU5*p}"K>òewIUno,e:}ePj**^+^~U]+nrϹòm۶W^yΝ;~aÆ}ڵhOH"ф	   ~端: FSFW`^nj4ɓ'?WՍht    )NqZ~QemLp]\߁+P(w纚DQjPʝ=p+5탨6T|YyDQwUr۫\kyMQuFM^`-Bju`e_$YTqKlBY_u>rsgځmV+}U^UYS-#U+>۱牢(V՜w^ܻ.QDe7f[lYnݺvJ   SH:wܺuCQaLGU|p8srr種xQ@ϰZgQvV癕ɗ=ktKe&2ʞ-~v\|VuUعFr)`A^ep8&bnPiG[\r>/{',;㤲;VeCU̒t@_]\Vi`T1Z*{t\ź9PK+}3ۈrS}3j^V5ϵV|DKKKsrrΜ9sܹ<!DΝ{5    ٳgϝ;R
-KKKVʅ8U2S.ڨ41:t]**ҨBT0RJca٬:>r\͏*^VZ>rT*DMX&jvT+Wu㿊*.Yb+g>tU/ߖ4-US\\\aÆÊt}ذaF
-h4     F8==}͚5l.,,߿ǎ۵kW__Fz     ~믿޲eKqqqhhï>}6{     @(ɓ'M6lrĈcƌ߿`jXb#`.     Иeff]ݻw߿&M͂U!     (%%%,F8      4**J      И      4*=      
-q     @B     Шh(   ۷o_|y^ƎHM     G[?CnBBBFAM 1   @%''/6СC6m*((, {    _t̒o߿_Q*    ;%K߯hZmHHΝ;W^M !    xʕK.jcǎ$/;we[!   PEQߟѧO^/IRhhhΝm۶|rJ     ιs۝;wL#Fh4IZj5qDum۶pP( p=    TZZnݺUViӦuyF;vdX,kff& A   Jeҥ'O6l؄	TN:?kڵz| M    Rzz֭[FԩSFsuI>>>F0`S[RRRRRB h(   tkٲat:J/%IrN|7!:v #   Pv͜9St:!GQ^^^Gkڴ^\ &{    TIVP$g#w 	-         5j) p7=   qNv1w(
- 3   3qfF q   qfܵ2 =    $66VD5 b!v   `ZcbbL&dx5Q՝0 q   AҬVgbXRRR*^->>Ҹ5\ Έ{    Ri/OEUL_ 4=   ;a!v psL   vz    x"b6-r=, n   ,%&&&--uIىQQQFm)= {    bX]sUl[WS 3   <HBB3뉎޺ukjjj+DGG!fs7'    IIIBJew^XUS @@   xlTs6 q   YGRo    j:ߪ+P\=> Έ{    %+擖霤!]Q] Έ{    9!!!888..NzL&SU q   ACjjyǙX,$"".ΦB psJ    xgc6fsH`0L"˲`$ =   fwOv      <}Wd 4\=   III܇{ A    <Hbbkq.Q9w     h4nݺ5===111**yysgwS5#   <hNNNʪ$%%Uss;ce.   h`05qC 3   CY֔Fh憒$ ;#   <bq<e/7QQQQQQ(
-PQxxk_r>7P{    Rq^LyjrfLyhAEVl6GDDL&ٜ!@   x`00qqC%Q)/HKKKMM,G   x"lǈ25$I$>͇R    $55599ٹgȄWOU)(*V{˅h   DEE%&&fee9s	yZZZ\\\hhhxxx5k0=jMKKX,,   x(BٜbXfs Nlllś8SZ{Py| \z=   3Fd2`.WwsRd21{    e6RRRͧk2ulY) *2θE   xgUrlͨ)Y{     $222--%QQQ5_ݙH= Έ{    OT,=BYӧ;[bcc	p	    $***:::"")kfjF9!99YbJJJ\\$ . q๲ݫ*dL~vɿTr	^,˻w
-
-bD @Eފ4՚f0(9[~K'U`0
-!X{ s^z_|$ʬ($yDu,;){kUǅכB[=,lRq؊?r{U?WCZV-Ruv*0Ϻm6iҤwy]v fsLLLո")))***11R$j%!!!:: <Hzz}gZ>5%vz'w%~ݏ=XBBB˖-eY$ ZVψdZf3 JIIZTͨӧ!)pi4~6-%%O>􇿹uzdk:xk5z	&|WOJE ,!!gee'&&nݺ5==9'---%%қ;?Fm:ٜL)KwL	F=PNy<䶏slޔsؼZtS=3zÇ	 ƖVc4s["VBw8ɔ,P{Ffmܸqʔ)SLsq_uvTJM7h|Iaa!e O\Űr^*E͙LDA==@RXX/X`̹=U+[=^M7wG{"f+x=zP Xկ^5g4{Fѣ}+ȔSsl^HL5`/ʭjǷ-eע(lrY[o>ɡ, W۪f) pst bccǃo?*(qԊTRl4O4ej\?Uێ!^EBWso~!~$e'n.$-liKpqy6M^WL:-#VXcӇU FXV5!!yXs4mB.sS4,=@CGtۛl9ҩOߎ8qFq~(sVEQ~@ur;d,'Ntm`ݝp81(zpyyy63fJOϰrUG_:,W8WWTK.1qܷlޠ"^gfϞ}]wM6-(( x踸$o2'iiiqqqث<͗ŋ=E.F?I n߻w/lٲ_~إ[=|:ۧ)s/D"yےQ2+~Z#-bLhn>Bco\۹B_sysGĘ!FQ.	E=3덋6b0T1n˗OӮ*D \F)))f9---<<h4:yfkWtts}8 hҴaÆ=c|L[ȠzXoKk׏}~8A6W%B$QZ'9}C`wݮnMOUjNHt'
-qϜ)N>}'M%[ݔC>}bˢ[̙G¨ n`0ŒVv6JyE n8w;̜s~ϵ@ZG~gŹUKh+'9/3Kqy{9*$l6O⫽k0>싯v>poÖo~L7$xc̺}-uv6|땏:ٻ^j<^m>  L|>iiiM&STTTU89r pkC=tĉǒpCʵkm[O˖~׌kѾWKlӎ]g-[h׬;?xPGZY[Ƭݟm{fnٷtҹ馭ցM>bK^2|/7zNԢio&X}cn7Af"P(uH6b_1k֬n d2L3! 7`.~[^TاQU~Z{8%'{]-w-ɾ/y}}zջ{jqHYSO?^>s^UԿŮ]g*% r8[X'kp3/^xNQDMïo̚5?p8 U`< % Jff棏>گ_#YʂE['="[6iswfޕ>pGV
-/WFnm8s6Eߌ#y-	!Z
-<>{i[
-Q$C3͂6km.!G|CW*Vu]
-|=v{ｗǻ ӧq]| 1p,_>>>ĉՂ+9DA
-(R΁g-lB%jpoMi\KoGϝ8yI;"YYbZ<|-XM7^5{ ?i?Ȉ0צ2C&̕+W>CC~x 3͑OIIILL w2+((OL&ӧ_&|vuv,oymЬ	jT.PFשe-ByCM۽{\Z Nmޒv3g\SӕcicsB^$?kC኉qf=F1""µ,WLL <Eٷo޳g3E.T\:/NjuMգk$Jܪ >N'ǏtTvivݔ>%%ȑ}%I۟׿_G^ڻhhǐ\=J]͗V}毋n	Re]jC?z_W}ٴiV^׹ f,OOOOMMMMMݺu`BF!I (p^zĉî,~=o,4JrEAʺr%\5줷Wy#,Ǝ^k>"7k*UXsoٹ@}XfĘ*B;oď%8(kf< )T/Eˊ(q{zw}/¹s(2 4,rpYZ{ A .EQΜ9+tuqқa>^uڳCV(Rwϕnߑ'O˖Nۆ	jBȲ(`$);x{)ߤ7wN,_gȞ`{ ^<no{sTrYM'*%%eڴiVe.rr1LBrn} } N}ݑ}Xl?l{4jO{3g]w]}gc~Rzv\ y֭.B֨gpDx~J5Տa8yʾѷb7($8;ӧz)euhz街^z)++D$NN x,Э*@ FGv}ٲe&)::z5.mDwz>ã6y;o5\1f7ZlO~jPxа!-/+Hܒ>N8ܬfuKK{omYdrT<Jy}ꭙgӆM|g>&OvZ Ie% "''祗^2Lכ.#5yXo+P[=3M6!-yC_Ft^^Bo{䋜+w
-!DAJFQߪ{#naI{6RT7^1^hm> 
-*Pͽ/	 nKܹsÆӷsϻC'>c
-+ݙxeӽx8'=a~}|	@w=uښ/SjѦfa*ǚNWOԭ[@Eaͫ˄}qҤIEEE <" bP7ᇷzYf?Ah&(ŷ`Kzh1c`A%	Qh*ٺV83wά%K7MUBI̺V?zoUy	O8A=8.<,+K"ם9|pʔ)fj߾=u wc2/V ps=:q+lٲ+̸Wv<F):}ww	.&q7'dgq},y.$_5^;dP̂fь؏˵ۍsAщO_{{{Sj p /Ɓe˖o3mڴ.C.@+̱yxi M-}ٺg
-=)c·g7IWvko˖nܳx/8("?'XꣽUKR_;_[7hg}_<~8EH. pst _ڵ)lC\un޲yW;sBzT^j(>#u,*)z=OP7E>lUˋz_شu5o?~sjj>xUWi40 =@-n>k2N3Rx mQ2=7^ӭK5.Μ͉}p|eYzm<e/4rc?xji/j)Y|skz衧~6 hGDBId ྈ{g~#GΘ1˰~| db{|;K׾2q[̼> $8c+_Z*첬y!Neͦ{.I$rjImKyEv1GqݺuSN]reaa!uF pc~>L1- _CUptw[6_$D%	Q-l[4rӨ쒿?ۥ51C`G#I+zam6ߛ!las_ϟӱcG  s @@wP	Y?sQFBb?5,l^" +W<׼ilTVBX%VkɁlbpU2dQz9|"i+[v}uy96#z21m׮]7x_]TĎ  !DRRRddd\\\5ಠW~$Ihd`CX>{3UgHgP6AY[rK̼={XucGǡ[f2p=1>̈kn8|Ŵ:R]o=֭?~ݩ3 4t0h,KJJbX,#""FcTTTmjUIOOe08a{r̙ŋ'''1v*2nKQ
-ЎCGtuOI&ɳ={nH,^}됸GDO=Dɸ1w>o۞_6W:_ٴ@q_{111&Mb. h,$Z						h.:%%%&&j<!!!99d2.Gtf911qժU>m(a	Zo~o1oJwo},iQOn<oa]O8+)O
-
-~땁o?ĜSFޕg^Ɋ(	e;~xa֭7o^Νjb;  KjFFFfOd2BٜV:aXY!RRRfbLOOb?~E>ˢmjR~v͖-[n=8v^$JaTOQĹsEyAQTkY>ݮmJTl#3'?7e7O^6'"g}0/&&fƍ
-
- 1hX\YOTTTbbb$%"""66?(g$>}zJJjMIIf]0x#G$&&[s?&~Y?G>@mq֡5?>sjk4dmZ7yF\{O[h#\"ٯ4`//>;{FE_L]v7Gϛ7o<@XXuA
-w`4Fctt4			ά':::11Md8b+666%%EQqjAdY^z)SOޮ7~<l}~vGڗ6;xu'Ծm.Vlv_Գ&մWvv_ BCCoϰ٨%<W$:E{1("Ǧx;=qĜ9s>㒒 CVl6՚<<s_[ӧKNHHX_͚5oQME FW{	}!&Ol6Tv}5kd>}HMtЉ"HT/XS5p+m("G'O_[oq{',,)͹z`.<MKKsFIKKsf45l6GFF:oh4VjKIIٺuk=[gk.=h8p}5_]3rTm0n+H[:~̈́!!Oc\B[нkP{upƹyÇ9u*y;%$Q:r÷s>J߂}3[k5$:xwܱxL n@4a2gr5_g9j5YYYΙtfsk{ם_(/Q8ﯾjffGvk6Y@c{e[::D.N8`jm'Rܵ豼NF&<_qЯk{ǿxπWv3Ǧ{6UƍNڡCF#˲u}م?EqM$Qo]WI˝8//wÊ?WOj4MQUƲϪWWԶb>r-wrũUWsXn!T*
-
-ڷo߾}{ޏJ|ӶZ[ ))ד0111--b$%%			Ed[=@SG?~U*O<a~akkH:BB	ʹsMC};/C>vcفA-[|1#{.~ؑf4{ʥmv.l>7̜iYhѻۤI;)7ʠ/+&/g7ճ q^R\?ɿ}&4Ht)ͦhy晸8ޒz69OJJb,ksQvT&:::..ιz2c"A#<iٲe^233u:P)%z9Q	e{gZzӽR:whV@$	F};ɰ۵sr:zܾs3g}}EޕFwyӳg3X	tH
-KyIQTK$dɒ9stؑ 3\n(\C9j9d29sJV5&&RTY"Acv|6lzZ^P;p_l+;׭&M?u;6-**:qtټ5TV(e}_}sOѥKwܗs1P/[tK{6֓*@W}Ӣ_~?~Mֺuk|"tx+{=mTT7d210X,5|#8cKܦO̘bccNj֬Yxxիw5`߷su#(BkȘ_W,w
-S_U4A=g]XNNAqQرB[=[|J:uҳMut1s^˱y]]Ԋ6wˏرcǠAfݤ.ɒ"FÒj	'Ƭ~ݛo9o޼3fk^~J\FFFd29HIIՐƈZx6?qEEEхWW{2dȑ˗/߼y3J$9k]OyoRRT/i߮YQ,Iڼ|e]:Ow8#K琀 C-%f1ؼ?;t|6cEQXpBj2G:uѣcbb:vf'P*EDDZ)7`ƫgdJLLd{80`0,[q[nd֣F:|y{i*-{xT_xf:rӰa74r8ӮmCPGM6x@aBEL.}qct>d=&~wݵh^NNΤI}wPW*.9SS;RRRkdJMMeʞ:D܃׷_~cƌiѢڵkzzB;yo]I+3}}[e}		B^y[m\*֜>xٷn=9R#	ǈ~ȑ/,~͵MlK``GRn;v "##<Gtt3IJJr͈\.Z+`:`09H%$$[n֭;tu]"dݺuۼyIE8~"+$+hYģ͛;~ۻ{Yݹ+#?`zK~r]vOQk*((5k֨;@,:wݮ:wW+>>wT,!$In>U`HNNvMYRVBB%}pwDbbbddsHWJJ3 r&,l6'%%			+[Xh6Ғ/~Y.j5]y	5xJFI$AYCn&pRYdW3y~Ozs.>V=2zȁM@}~,V͛sͳ>=4g6&hРAw/QuT~֟m۶<4"@V(2,Gnyms;.g͛7?	ȣ,O檚9**d2pHhLjlqC))))))u|vU=Y``1c222l2`Ru[r4(m=]3؋u\Q@lbH׫j0}q=\Qi>3ќC(W=9u&h7n}a7%|Wz|5j]&),fr琊Hu7gXt榼>`Μ9&Lj7lC^ᱜ]o%%%l6\L&Sg<\31LeL&S|||qX/"\_޽{w-_|%¿>(ߦq_j'_M/"DVfkop{U9k.d㦣B^ٱ/媟M%ƙwy{{/fհ-ڱշ^zZQٳg^2Ç۶mp<W?6F.FdMVu:ٗ$dgg{{{|OS999mڴz ]:.m7m{o-Ϋ:  <paGhjޖ`kf{0=hju6ms=ݬ_~f(aÆE
-W	.RVN?٫gh+t:ߛ,ks V4`aܚwdȐ!w<$[4NMMmժ]w6 +)٭ܹ̙3w9e|dGY!$}	-IH?WF]KnUJPs狾XsΑ]zUOokE
-i%$	EQ,V#g=x3{oc ?;@O+yyM>חr[#A#ݯ_۷/YdR޷m۶_Kkibڏz3FwA~~Aa^Jȱk{eΝw.psٶDQl=lySeY娏*h{ץK}m*GϝE+;Gy>!dYȲ6HkdY(ZhZ}^bz{][6kn<"gԴ~t}zn|?>!!aΜ97|s˖-)(JZhl 7H˖-cǎs~H}9p]yB0%ą+,TBC۴n+**,,ajzzx}m~{jMߨ
-.4$+3L>}tttSup(978wyg֬7mxM+.f>d]GlPKߠucŪG^'O9o8G'/~/ߩܴI[{k۹mJTuvIS&,|7^s5u($i}=L$((W^$"RڡSԛ_ {?kc}(Q+)k̛իsoUZ,u\Dƍ{g6mO^[zxIlݺ_^//u{ۋ4%o=N?w[e!EȊ$+`y1C>ل}^|F,$W=7B:2S?f>QԲ&L:a/ݷoĉ|Ƀ TEebWU \>Lxe˖*j>ڒ?&{vԨÇ_xI?9VǏ6lMݠ*)^Ш4wۻZ4aSK=ĉ>!(PJ5{>7MkcAҲ~w1C'_*+҉JnRs87}ˠ}/2瞙9mJk7yi֜|9|ٻ^>]%!'TUO>w޽{_X+J%E֩,Yr" ФIQFm۶_ݱcȾv&Sγ미;woO5Ysbb_<MjXŭ~cFf>3zz)~~&iy	!k{ZCbn֦9n:5yRAJ8//B%)YLֱ/ܹӈN>F^q7F_{ԟ|'\=nw0E(RkǨŁgׯ_tttxx8r|}uĎhaFû	i{u\?2:\..pt8p`-OqGT_3ht۷mۘn-/?ڨfA^Nh>vAFP/,I*⸨'ˊ~5\ek:{fbH!Ċ_z7竖pi_f?PUtR9/AbU!̙-,Vk{wt3}y]}_Ǭbwboymذfc0  `SѣK.+VVu
-m,*fe_?c/lߕ֖؛'N]tH/YW?+pjxeرo)	!5]v>֥KfMyҁQnju1#[;6n>zs6C_NUq[amN8djݴ%_F?}w_Oh2}*@rGnz7pÊ+\C*X q<Vҥ۴iQyG[/g"Mtu˖-Q|ny7y}qqz&<m.kUk|X]D6espoAJ{f>ӫgR}z1T7d<knamT*%;Rѥs@`ϾVIRzlwsJ[4ׅص۾X6wws+ŉz.;SOEEE\˕ ;#t]vիב#G6NohQ}}}{Cq	KtM.؄#F{+.f;߂}oo6k5_/]Ty\#G֭Y&\8{6kXKJJ%MCΝ/.hG!IgwHBHMUNh{n5;w80@׬Y'%uW׾J5Jf;ߟ=rG}tܸq_}UVV{<$I\ DV4cǎ;w9|dECvmΝS|\vmܢ7UV=7gylC|uX?tM6]}O|2_ __ѣǎ/"*UleEj*Hql~Ӧ~,MO%	$yv˟żռUJ%huɂB{&>z4ԩgUz/42kKv+*[݇>/{\hѢ>:s<Fs90z;(aaa})..wSЏ^Z;{Qy\^}f[G] @uNx҅N{fhmWTH}>{OYH6[z:"8{.'0OQ*Cq.*/mͶ+~պ={,>$Z6K/9I^ťX\Yq/b^ysmu?KVCnqofҤI~)>^I8Ĉ(>P+,Ӯ]A[?6tOaEvUeؼG>}vڵwQ:I6֒=fGcGfɲRIZiS-#v<NWp7%]Ú/lvmN~䩜uH`^jcvWMA첲nӴqJnW+>::t;|zQ4Kϼkk~}gP$
-(.*"PZ(BB7^?V9x(k׮]VZB V]ZpȊNBj ˠu*HZ4ߺ_o7v4_+Z{W[c1inwM~3̚5k]taWg ˎ'$$W^C7x|xBWǘ/I^-啫ڽN;/ޭe__}VV5ΝZ;+?Nӽ[+wTNF\ìGQ5k}YVU==C~=Ͼ|b/?u_aaIYpCԹU]xaÖ$Ǆg!If;T*IXBh^vZ&@B8첳Z#hGSpDiXҧ~ooL[j:@?W>Jꭺݩt߾noeDcE LlrРA;v8rݻu]L%?"u_{j̈́#J~޾㸏	gL1[kT*eY)*ɲWj]_R8xiScɎ.!a;ኢǞiNV˲Ҽ=bx{VZ=rӁ$]o{z"Q/GE;o=Çy؅5l>j..hn}%mxwhrPX&fI=(u1R"##{3zeKbM{N_ٴzeĸa-v"MQIhŋnƮ]Ob$ 9x&M۷SN֭[f͸Nupi=$>E)w9~07GXnno˼<Lj2|:R!*6۶m?f~ɜRV
-оae)olȱ]npȯk>cGd(áX,~ݔ_~彤:5qՉS3nyڵ'Oَ%ϣݻv0~V*Ug,=RKi^6X%D>Y5׫Âzlݞ3gFi9}Vj!w՞:=ݕC7Un:ٮGwCٻ\N[4'NduԲQF~?ay>m?&uKBm'<;b1k>#22rs4hJlhh wFOV[j5z茌CۿD~[}<PC
-lѻgϞKtLMCo-KhSWϝ=]O\N//A}|t32w<V㵗58cտԑc8/Lv({߯m>49z Ze+RCmZ5\3<Ͽqٶ?ڏ٫,ϟ:uU#z%jKXO?3/4m-ϫZҹMػg+Jn5heJEŅBv
-BK!M|?pI:rX=3^t1_}w}k%[~xqeNzL$rk}}g=zٳ.Cs*5C۷K.f[*ϻX2pXȷ6~d{Ӧ~?2YO^^}|uߤlV-X%涩u8_R{n0PF%8u:wJ4a\vmk1DV?ҏxom;v-yO@@;߬o;zj~bzyys=/dҼ7~pղ6cͼgmz>OM]mvS%NSTM饗MZ4I?w+EFf/N/+:^>[;;~xYn馴4Ǝ9<j˫m۶t[lnXߺ_^<kO"thGf!ĕzLOou\/z涄߯,+lle9ϱ+
-!EtmĖ-pFfCB}peYl=*ܩYy$Ǽo]5OB]El?|}}8ѝUٵf>~q;Uu&_ݣT^K'u۴sFx{[';;ocNʲjNȲع;W3+'Nڿzì[vXk}5Ko|D-pи3eʔ~?s n\\Cپ}͛;T"I>qR({:tݯq5>r!EQ>|FܼY@orϾ,է|O7ʲ"pkI!W׮-9okT1d̨0g'./~bήUjСsd!PΠu~Y]0kV4΋Y+@Wzh^~"''뮻H]\R6/_>nܸG묛}?l۱E3Մqm͵7kTb}\CvmB]3Ѣf_|3(֛\Nοz	3[[ڵkN,ukbO9Osν+u:-!E,h@s(<Nkݺu߾}ٳm۶}u[[l禞=ٳg!tR\RM3y5_l<ӪeuSz{kKKep!;*ܩAEE6=#w
-u-Zz̨.5!]Ǐ5ߞ\Poi׮]>]WWҨ|v3/_ުU{ｷGT'`r,zÇE
-\u^(7蕓[[fyyÃEQ0uG>vGvo׶B;{$!]=ѡCꦒƎFnƢO>Tb >YUסŤ{FƜ^Okf͊cE;$` p#CJ O0pm۶[nݺuzLlu=KQD?bĈ{.J\ߧĆըqSFĘV-[(2xPǇi]`@ׄq]4/_W1AݑeffnݻWFw`*9?%۷Om.?=`jS><hРѯNVK֣.[oպu?-_\u#ؠ6?[,jFhߴb6I8UT[r-UP9{x#5ҩU#Cݱ{ks"n]Hu ۚ]`lt7_y311q֬Y]w]HH'h\= ;cx4^߹sgr	ۡ5RX-[lߕg		5J'ꕔN?w8#%l
-!m?u9?/>hV٣_o-,,>9IS9?-#=sA=JwN3h`4WV߀ϼѕ>϶_x@h/=ucǎEEE1}k|^{m̘1[|v@R!|ա-N6z{+DpZ6ol9|T*eЦ#U7Lc[٦*dooW_}o)20+s]?|>P|6ǿ4^zuuV"u} #+H;ތ{?hc>>޶:YbRrMO?ߴ篓/~Νn奕$ľ邂9DIn-EvG2|zYƎ!Ŷgr;_coŉgd.fF۵MNvh2pN>>l6#*Էwƴ&WQq`e_mn17,"pٹ͛7_`AA2+$yyyNjU6By3^E1k-mۏa)*V_B%ݺ|#|G{C>uMzOoN~]wٳ۴iVp	hJWq>%֭d:p޽{ܧ|[ݿ5JRP~]t1~f+[le{揚rMub>o'Ϝ͕$IQ]Hzm_2-[µ#uZہsr3v^cvWN:^<r4kİN]Ú_7N>V.,,<׸nLk8aKq-0{^;5yv>̛_ܽ{3owl{W&<Çq^%YU?+piv~r`ѢEZg2*|
-;ւ.aꞟo0gfm@UmsudomZv{D;|g7]>J᫯1cCCCƠ2;dv;xݻw>|/:GS+E鿼=CY8_lcYWUa+_|uλB<ܢn*_wMAڂK>z56mڴJ	zUEo֮];y?ּ-E}G՝8q>mٳ"pjU-β4'N~͞_Vob.'5{#GΝ;{t,_=;׸;w":P|O-w\\A% juVL&^rw~q:&wjWYOn˭ܹ[ɛnG%<2͗Y`Az$oO~?xǗ~s-Yeoޥ!##رc۷:pTQԀuO^<I}q쒣ߜWÜ>*Yj萻^9q5\~z6)6 ?@H޳gOZm6r~RkbVo_KQ3Lg~=JﯵǭYfO'=mNzG;۪Tl˥Ts,Nd
-!6oN?z5(7q5'G7[K~g%Qw\'㼽g̘1m; 3@!|||zݿoooRr;^.KAСC9q.\b6;IǇ~;?Ͷ\i6|w̼[<PTk?$sӧ_}m(e^F½{3~{Ktۜ/0~>j/[ݍ;x/{22h3-tʣ!!!>̙3b6.;VPs97Jճgݻ[,+Vhz^"|OWXX"*jM~cǎ}Ib~Q|zIhҤ=sJiiέ{|;vxG?hw6[r8pxṫF(^$\sa9Ml͓_Zs[zˡ;n}[sCCC)S+˃\@Mp)ץK=z4o<++oSdW58sמ}4IaϤ2{I;_}lԝWC}Col)D__х7mtΤhVg+yyŦ~g-z}̬RY(u9]ӒwD_ߟ"V?R]okc=^{mrrraa!9+3b "`1bDXXXff;rN]/Ūq/tPXHʳ;^{+crrr}3l߅ݕF%9iw>q߭znꭒu?]$$;OMڸ|!(%%6;goIW/*3
-]~/O+PZ [kbwܵ)S>s9LK($@N(պuM6uQРKu^lWoժƍ7楒ud-?\f̀~>9OߡBl;gn߱cGǎ1i)Uܫ/&gnVfkp9SRקeAai
-l7OpHPoh@d{>>>C'%8lM"}g!{[oy'Nl۶-ɲ,B@?,@YAAA&)888//bh9l.Vz^십^TBY޸E;jk֬=kru._k;'1yǎW\q	ܤɪYoO=t6m\웃5|6[+uJnMºty˾3vzJ*6÷cػ~gs7Gm1ߖ<eʔW^y%==MU*~/"6
-_ǧM6cǎڹsgϞ)l?ߋR['^û
-!LdYQuIٟ^f]?:U*Jo[+ޤ?SZsyj^Y!R9ҍ=q2%ܹ7mkTO^),G*v(pdU[sw}*_l>Iܐݮڱ#Su-h%yyEcFy+۴␠DIbÎ׽<cR!uz ͬ(Y~aҤISNc+^Pp Ippp>}lٲ{-[6šjjdm=tPnnnZ響k*MXjkSt̥SyY69}~.Z@ه4IUUTǾjW|UEuGR9sDB=ȶr޽{۷osNjUW^~EtcsDуݼew``!_]RRt|~gwգ-\O۷-~EӉ_}}%^5`_'k4Q'+?,Z}-ٓ/Q?Įu9@wuРAׯ߽{zq(j2{?<$e
-?g?WϪ5\ՃUك9[U|}Rm~TQo[iD*\J|d=>|ƽӽzd~&p=Yꔔ}~==
-Tټ܂7m[QZRe-iA[k4gm6:gnֺE+N'W=4sI&u(jYEDvյ_7to!Ch4  ?@%}7u^O46J!EѦ7	^Z͙3gȜAz䭧8t7[WxgL~ZӍR$$r3k;X(Uk,ч?6{rey]>,<>xѡtw8pΜ9&IղPG,d=Ԝn^oѢEXXضm<~W|MXb;ػwo۶mf>vXuo^W'MKܼREQ֮?%{No|!|-Z49z|vvi` y%F$g%=z5-L	G(R;m_u]׫WG}l\jfZ pkJ Tr(mڴ1L]tIOO7ab3e{
-SݻwĈPMeY/bǎ7u H9{._ekVG7nJ?vn|Uy۷ki̬
-ufϹ%x77<i'^0SIgEvn&?ѱcǻkΜ9˖-b8  EwP9$yyyuagϞطoo62p/#?v>xN?%^dUw{w-877y%'Ndj44bX{H]گaW,)?~:Pw\}Gwǒ_^־}i;I.Gb*Y4{m}'lڴittѣ
-aΞUyP| 3m۶={l۶7oެU|mio5a[~W)R=Uٕ#w>Wo iX
-KKKaaϝ/hT͚zTDA#7O67;pti)lܛn\uƅ/_6Uu>6--N<tp||^{>}M NT1<% |{T;w޽{@@M}aB*kc]Ȼ_`٧^pIڭ[?׿x5>jprl:;"ւBxlGAҧW],7LοjۯuKҤRlWu@!w&3nK/4u7x,  h$ ѴlٲO>[n8x~0.F;WXa0nց7Cl\j悷]dXϟscX*.QegcÚ7i-ˎ̬5,H7|~iB.?&o`8^{suW׏輪5u6}m<9,sO_x)S̙3'$$9/P)g= 糔 ZѣG߿i&.CokE,RbIVB硒RW{p캓r>IUBw^]duO=TgOb}>Yھ^7SU/\e*}ZJި:v}1t=38mwۧ;wݸ!qIb+'VRR>`G]4`KִiׅӶ
-;\HUЯ}G%Yy&e_{ݎtxy?*gGO~oiӦuY@ @&00_~_k.[oKE>(sfbO__KW%kUƪ|xWR5Vl6#F?Dz走Dڣ/YOp(o4O$X)ɮgl۪e-w:}\!{܋J*U$9喹+|d̙#D]}Wfزsoqmzݺuc+&2\jz2K	j.^XQ3fi4EnRWc9/e;q]B+Wz\Tg٧伷r]QTeUz\:|9pݛܖr]읗pnN-Xqk^lߓT͛7o۶D={tQ]RDpw?۫	#<>̙`?NB|G[j}aN	67of8u*noM?eΝ;wQI7;uԣGŒ]\\\RRR\ʃ=E}8pয়~Z|N{'oji!ˢVsK3WB8/A3;_ۭv۱^K|;/~ڵk7lвeMBdY]/JS|wDQgdV-}TBZ)ٶ<Z4ر޽'s4QS4w;Z5k֬AH$TG-((		1L۷'A%
-=@M (PΡCV\[o}O'Oi|mOu#\^vOnK$B+NzrΜ%)--˛0oZVT͊47yw>:~<~B[|\^1XS	!t:1o/Z~ޓ'O]v>_66?NnG0`>Dk.I焭;E~~~nZnMQ/%F)>P+, wyn_^^'NPY{s^{jLy}Q/Z{~n"/?aŎ&>*ׯݾv^VnӦYF|*vW$ɓ'=zТE@ٯB!ɓ'?䓻?0aO<H&Aǎ	8>3gk׮o:TJ|+*ٷfs{rk>:$=Fi*/+mرGF]dhNuf:(jT"TGZaaaoҤ	7حQ|v .77~HLL,,,?~G11MϝN2pk%%͎zdF_]VΧFQ,޽4~:uzDo/̦h ryO}7JmYՕjja}z9t:m|qq3ooN܅,tQQQXXXQE7R(N<iق6mz1;` Eϕ|z#G|k۞;'=JeP[9ؕWjgSRR2M޲&Lzriii\{:~7g7ibhcw*jun<xș@Vn]۵1o;0ooEQ>>>={T	Ge/uQmÆΝhݺuٵJPp3WZ_ڵkԨQoDGw8{VȠ2hpZ9q?޴ibiM2QA4Z/Lt׏BnKL{N͟xdL־V[nN*|/LqN[E|]>O٣m=H6U~zO7o޾}{DT*O?~-99y߾}{=+8hB}FW_mٲ%;;{ΝZvxO
-~LK%!ܓͮ,V[V:!DNm=={7~ѭWhsg;w]-sǓ}imM.r(ܹsXXVn N&wJ 9)((Xnݜ9sn}4iȐ~'NꃆԩnfϞm4<F[ߝPhk&7oӧN{|ɏYVpOyyGN7iVEEmse^=7.:NF^bSffyEaӯ_?ɷ>]R{edd֭[7kL׳Py/ 4ĳBY'{^;?"7߱cRQh,Ξ]غN:޻Yz9lCo;wnVV->/? N<׶mS?_Oocn$[V4	Ȳ敔ȭZz?x7/8v,F4+Rm%H.*՚եK͛Ϛ(5h@GFFƊ+_ZZ	/<'7w͏<ȃ>䓋ǏThwqqq\x(gpm>EQYc+<[^nA/I8++}ԸvB`WX*BtGk̰oBjTY,֦M^`o~Co>$$_{iаZj>O?tFq*((غu<0wӧO?rW9CЃM=So1cƜ8qO?3rאּ_=	*)d+߻kXly[o;yR[ZBJr;WRߥZճ=G|줢"޽{v{߾}Uy,X(**jѢEӦM  FFնlٲYfk֬IHHxػﰨޛ4,+5Jb$M]Mo7Eһ45jTb>v azc "f}>;ܹ3yW_={jPBfpX,/^ܴiӚ5kB믿X̫u6,22!#|08k~[>Ǜ?A7Om>J÷[mvjrͯy}|w}z}'x<V{ȑgϚ?T8o0999˗/7IFwQ&y>׿,.~OǋMp-"-"Ҕ\DY~W$bAYYNo!RWqѺ:sPZ"g</44]'Ά?DT>ǝqp  7l06nxС+W?>%%e	wkZ+{݃3gά_~*w}P.UV"fpbr}^Сa` qD7ڌx|6<eF Z{Q
-9]Hջhs3tzP]qf!>}]n0LX?/rrr֯_Oyc !;vxi_ӯ}">]`9EFI*$P>38@R`I;a#**`I	F5668\]T}R~:ovJ8qbtt]֯_yռӧ}ɭu/_޶mۆH3gΓAAznYfyl\!L!ڽp-7?#`<տoӖj~e#7zVswr/l6K;1kn-~\T׿{Q]=O96l(((X~w'tHӣkjO?MdNNΖ-[vqT8
- ,$)^&^eeS
-D|0Cf,G	
-˴>WF(KؔI'pϝfgΜ1={$\C!^vM,'44_7e2B]ͯݹ"A]|ڸGV3?esjIMVwZm?P[I0956S[s/}]28j6ܝ`ڹt}.9jX˃Yj\eqo~o^񖍉ںU.oUW?͖fk̎][qk#请ۼ<iZzy[s7AIour^"9oYh|nN8cǎ{1rM4I"={o6l؋/|7p]nݺe˖I$zh~l
-a8Oy> ࣵkLrw BS>[񏴴+WrqJs|njyBp˖-;w4<=Mқb]/~M6566Z1/W'0lqQU?;/"f(X0%vkER@\z8=VUY,W+Hp@8Ҏ?qeoaЍFΧ#i5?ǒ6O?|ĹAk~bj-՟Ų-)ϖpod{u-+3>oRjD`|;7zo4qZvD;nkGZBse':ӹMl~UL_hyڠr?'gW-ۏKj<EvZj-O6ϙ6]cyfos6x)_|U੝-m:}+**x~qw\!+JJJ6o޼iӦS=j9s) [/[6f̘?ySYP9t+yb{+Vt~:AdgϦ(*###''l6?샲DK2ȇ^?\WLp!{gk53g9ܯe.[3RluAt`;wX,X.R.F￺W^AAAΛ͓fs<tq͢xQ	G_&&p͛;h~rzbh_̎igwj|BCm9.m~:rZsZach5o=rgZDI{1g%qFG`lV{'eh9V6x^7-)\C,BSS偵:?FmՆ7p\?[j͢~zj[m*UD&jr8۷oiA wcYVӭYf͚5eĉjUm-*-u䇆~{l|ۣR 
-3=(_.୷e>3"-g͒dk׮=z(A)ty?:>Ɖ{S<3\Bt3D|P765]jaΝX,111e#jkku:gppD"X79a:A{a7C#):7nKD?i9+Unt:LHHxwMAt',644رcڵeeecǎ]VV*CB<xp剉~bM]v5nWb˺X\	ذaáC,c=/a.܌8b޻SÇO{_ߏC&PS(=C'Z.Ԟ.CXQQ@ D|~p0^z//`E
-:"&&BqDb6ӻnrnzC-7JiN:k͊p,j9mfj_ϨBƱ-_ehcv˸ٶ׿lMoUTim֦i͍VI"Ziv6+ws2e)͜6k
-\
-7ʔoy$/,7]GFVkqqqnn80`aFx7{0X@tUUU[tkצNIuuQv]`''O?
-hp+G|aÆ}kkj+>ݻwQQQ4ދfbKO6޽;<<eoHb@hF֭:k"08C8JN͛7o̘1~~~   VV`߾}wh4f_~Ǐ;vlLLX,/dn677wʕjW^bnw}j*>oW/ZBpŊ?|\YƓC/
-7o#kphc/_ф`CI0
-</   w1^w5k֜8qjFDD>|ҤI{we~+:tY&i߾}53~~uuíB?744gbm1ܣ'O*ǏO 9>,7EGsd*D	\2qѽ(ѣw
-Ev8 hx	v܉JNN&XpdO@5^xQ*8O>~~~0  q~c|}}M6wӧGFF=2|ɏ?/lhhpUfsduuZkO0<Я!	:R7.h4RC0,<˅DWfT)fP1^Nڹ밷Ol"> e[~/:w\ddd!uL.G&3N<x8%i  pWrVDH$QQQ3gΜ>}z\\ݚ=k8fegg-YD(;0u%_j;zD6`Pt*H7vmСC\\ C`<2<???//OfW`b0D3lxBh' LUkN2ħl	v=j0F/   ܭBaXXZJ.j=z>_B/Z@<
-}k3g<zgF3%fY_m0p>>~˲_$	xѣ7<xa{Dİ077)IRQ}֖lA\l@/_"{*p 	_--D;8%ɤ8cfTSyYP8lذD???H  p0$I;.f]r?/q;wk0F#rqB vŋy>/	XeY[ŴOv>`J20퓬.$!(1	fk'=j	EL.YrG&P___TTTRR5!!%:$F.^KW XFgFEEE%*+BCXhcF)..
-
-1bDTTi   2wd:~G544̞=1c65&bY+_ܹq}puo-%6/NU+^/;J<v_|ѲI84:u*հ>}z[1R"1.//^ǄG*8zǟ=uԩSXrR_ ">  $^LiiСC.ɅHرFV'22A    w;3g,]O>={G7hL7ׯLJJdCL$a0/տ:y30fH/`$0#ɿ/5jYf|!FPm!	رc6rPN9$\rUZˆDGv~ȕ#9yOǎ;zar:\e.ƌCE pMjsFjn|~޽GP((^    &w/_g?C=XI_6nܷoȑ_}>=y3t9z0둏_{Bjm(eX^2sDӋ/=._-I?#!o#w>|PDN®xE-C{	Ϟ={r.qz8ÇiŋZK/+HN!.RhHJӰьpϟ+]S7!B1eeeAAA#GRT   6ppe˖}W^2eJ4-jlt1pBq_wnާO>NIm]tzl.	AY[XX2#FשXgV8c}<['uO'K0YWr]xdP>0D%_xҥCXFV!04;thQ\\\ZZZW/JG.VDM,\vCˆ!%G54FR+Xrɓ'Zm\\СCa&   ppp^ZZw?9~1c3g"'Cq͚Я>{V$uڰ/7#z#X K}@!BX9+]پS:nÑ$"pԯk_WoZ<Ipb⧟w&$'Ӳk0[\wӕ'Ls}Xw,{⚒Y0Q.`C[_pY1smheYRe9fBrK+Vf1f"uL.e*G`M.pZ㏍(
-  ]{1SUUbŊ>رcFj\V[Z44tg	\FV+G
-:tD?Y\p 7*
-gܹ;&OgQ	FXB|?#6ZR)?[^ޘ2CMIEao
-	|jѣG/Ld6~9fLA,BaqqqaaaEEE D .Յq<_w|C{"0-.,MeY!@q[y=TbJ|YlѕOTV||2)\NF	Spe'z~~~jZVD"[R\\G-[ի			!!!&  rrrV^]YY̘1Q͇QV_@kؕ=99'FK<1wBX!BÁ{LpN{!I EǛ>º_yD*a</޷GC!BcFY{Baήo(77w'74 /4SRiJ~;`x{"t/#t0Bs}X.oݺy}+MV~z1PXT_Trq>)N/0űdAǚ,4SHeoW(ُɎ;Fk/TVW	Ӆe9OOIdPO] !!eOQJ+H~[`X֭[{nÑ1Z-e  /x*UUU_KJJϫ1zj?=t(gٲȯ|_BtFc|w%%!@y+1!;&gŝ۞(
-ÁZ1nwZa1|f߁3ere+v8P3: 8nWFO$[>|շ߮{)
-X\7q|Ŋ%%%~\66;|J +Beq۷o6ُPu~xˎ>S՚Mfu$~}^z~nQ҃f<G8ؔIj9ѱA̫74BH4p"#KHw}wd׮]šʐ3$Iyxx(
-pK.^iӦ(ڻw1c)Y   :Lfݺu7m^x6((ZCk[;o_𼟿oC$b2sVk|{x0ǟc9ڂFǗ.
-,f3ي)3˷n/g
-o[|xPH/_)B1,7ur?κ8&$4`¢Ǐ?^4th_!YVYZZZ\\|5U⇤P&c{&L3gd9FB'^:ÊpWξFyԄs~d}S;+*q\R)I%#f#676י}+?uj2HH{uM:XSJ3h@h^uuKk.\s1_`wohBBBF.[&̉lM^^Ab1A;w8 __ߊ
-oo>}@o  j t5۷o_vŋ҆4UY#1|s?W($#w6,>?|XoO>B9KSEB=R㠙Bbg7ib//OD">$!!v\*oefvcGЃ#z:菼1G]j!9g+>䛯^xcp/ߟtzvH$Vx5kl6ې	\P1b~pRbwz`Y0mwM!G#(Y88fdH.3mJ/+.0PH8ӦotZ{pЀP<"z$Cx<cMM#{Krfw7BقUUUaֳgO7麙\Ges&X,=V]6m$B4M]|yC<x0N  ХEt]v=b}nUUT];f4NÇ?֤LN0SwiKv{߾:}j02$'1!=WP]ӈaPȗh4+<!$Ica(YMMcA!D\|F]iNGhɷ_=5s_ju~U'&&655]ЊL%3Axf?l>\2Hsp)sE0#I\&=<7*c:kE
-
-+tv{ '!tLG o>iݻjqI#u(OƫI4|XGQG$)oj§M28 }WW<k{OO@wՎ0CT^^Jettt=B!t5Ž{EDDDFF:ujǎZZ	  >33s.tǏ&yV_o8nҥ7ouΙe ՘.V zQqj~5I>bPub^Ɉ1B"!)$b@gYh#(rf/*	$¢zǕWF}J|3'X,5[">T,55UV6d-o/d1'pRSSB_~mm+5mNVR)z|[̲\Qqg_̜ȱ_Q4aʷ/ܸmr{B8yR/į\9vlc`b҄8Е5OL?H3E?#eF_?_B践'.U皦ϟdtY=57ԘL&J!(
-
-[~ٳgj#H0ĉ"Nb
-  Դm۶K/spEdMa۶m3g6RDCwlҲzP@[J6jM=z(P1e1j-5ZD"eʬV{qI#BCR\ZJ3@BNSYG27,<pMMUgyfԨQz~Ær!.̪,XR~mOW~m!RƎUԥ}gٹkj*8_pTwaQx//qXQ˧$W8̑E%KZɒs9oID`¢.^-^o 
-
-
-8,gIW1#QZZzU#T*U $b̙111!ǎVsrr  =qgZ<iӦl7xcԸutRb4]fM6gjqmҲTJBla**<TrBF#m$?R7nRoWBrqB!i0K֨5lXaFt(de}0
-t̜5Տ+&"77w׮]v}$qVUY13e>_uVsLwkdXk3;ꌫל\tSG6wΠ}CC<4wjGYٗV<9U)GF9{e+?Y|\ELFZs/T(:"449|}dY,-qJ[CCRd\S!8 }}}BPtPaaM*++ǎ;a"B{1~9299!D4  qnb}뭷-ZTXXo~VqE;Q(xy\v͚5&Lؽ7߼VPh2BӨՋDBB&98㣋Ep:ҀP1쏛qGd)[!$
-pVPtw$WW_}UP/sMHK45=b0s&LP(llҘpK~ֳB:`s
-
-z xݵsO7'90hFE'N44+?H~}T*tȨWBb^⏲8EqB!h>zD>6%#KoY{lY4J-Betlv՗JKKP\khZ-˲=
-
-
-N<>}pg^3\(Fտ<f٠  +Qzիk֬ٿP(|ᇟCT[/[fر[*@.! 00A;XCd|--۔C_|~W~>bN[d	A8EC9P ˥ahIП 'v7ţj]#'lڴ	ðOx"9>G'[l9vnO$e.1=_Xç?8qGͫ~}5'aֻ[cc|
-rQq_0B(e3G 	V 8Hozԙ߷W 
-9U{ڵ:ѣ{hN;Q\PPR(6{@~dCTt;|¿d+0AAA<%.&r BBB
-D"qr
-:gϞ򊟟߰ax<^
-\96Ϛ5!s @M nb\xqڵ$IN2YڻwuV*!kuuѣjG9BwWccC,#" HK$jkD!ahR$wS=|L&Z
-  8h|`^7n/ru,`<0w>zbyPFUCE!ϙe$0d4*һW_ul巐FK2mOo|dsh!	\(|$z5'}?0T鵂Sgr.#83e.V9V=ywsH~=9WUUzyy]kEyyyq>(EQ<!伨pW@0zh///>  ]e M p8Ξ=zje~'/+CnH"h?o2$}IW	Bw_x+V@ G	*BQA"IlİfCp.*9;q(..!JjChI"E#
-TI޽D==O>ٿ+KڢEjk7N7`xc,k׮gϚ5?jx4l+;}B
-~EO3g<1%߾0| r|ra=s7o=ׯoи[z__Y\O?i΋4ۼ:VHy,˝>S>yb/B͒Zyb!ǦN5CFq}Whx'MGtu_PP`0|||IWݽLU﷧j
-A; DD"i}jaXsoL&J!  ]k M 0̵k׶o߾m6:uԧ	</ϷlKLLG}J*[=$!TV;ޓ$VWggR }E"ǹ6f(#zkH05"q4ZmǉoaBq\X_^R
-잻'8lR_7_}ш\]:e̙$##췕==2ɇ\geIFڗOԩSs-Vn|¸{^9v?&	:t/OIT	Ǳ-c0pH0rjW !BbQ79{<RUXs^X|/"26>z^՚7m9tS!zdV~$y/O uzĉjp=kZgឈLr   M Ziz[ltÆ{iܸ0p{焧6\|o߾?Vld]qG啍IQO@J9]5t!4fMBBNoC*B!?˞6uАA*8Ŷ~_1BJ0p]}`	w>y':KY,&L "##ʕ+֭~Ĥ X&S|zC3)p7e8_w9[s>aq=:tzDxxb 	<eF_uGyᚫ两TU#C	zovFHᨑ~#a+Z~jx}c=wڌFTT&cY58YPuUN
-"oV\I! @W@_,[PPw=cK,	_|%%DS$CC_h^x=?W%wz0̙RG	L}@QCC)fe9iЕkL`Rfl=Ȭ*j1s/ò,w	YOm7GYPP{}@{<Y,%%/&'^p᧟~:%1s8KFr->mڴ|͒6nJwgS{xztGcQ>>YyގʦGeN$,46&;Q\RؼaC#|Bs._+6n>s1
-!$~0qA@ҽyZ6$$$..1gI$///oooι&Co  ڈ
- !TRRe˖~;33s<(F5J>󔇷g#B=B`KWJ.`|ƑEB2c:d?~`loNz$	vX1| /m:tY~aΈ(8lPI'N?熏jퟐ`(--ϗӪPL!09MgϞ{j40ǻ{0,:'"z-6LH80/s,:$2ljGi,AJRԲVVk6GJyNjJ{tO~<TV["_;8}~hZ^oESCz'2p046a8㚏nG?k׮~58ۉM1""bĈ2v֭[v#q  {@UUUyof֭C1q2$ΜtJ+/zz5;'>YҍL6,$XǷKvzp\Jw;fGk3NzOs"ƷYcӽz
-B4M>=woO]b%SNi4shHht^FfBBKJJJKK) ((PdAyyy'N-.'<˿gl5[?wSgʊ
-/U]̫>v'>:x@rS*EEgw+*ip8ئ&+5_۸lhG+dNQt:Tqd9qh@d=R$s5.r8>[r+;w_~VzrIz$Gf&PQ~"hԨQ{#{l6Ç
-  蚠vϽa;vlڴ(..gΫpKNOaaao.zuDܛz}UGq-|u`EE_zs)C!>x.VTxu7Kpo{G=l׽MGD|Pq/B-uZ\Q|Tx_[liza :y&&țXTz6Eć%)dMwSWշw֜؝yZwQ6r8VU3lԕJ+/c#e%KXsЌFLvb^ըΪaC"ve]Rs5&(P̸rԄt(&	>EGyG{k-IƟiٖ1C#kz#z˗/$\	"IRPxzz   G@U^^~ȑիW={6>>7H!I͇a>?_W^y	
->xo˯~!>~ySx_,:q)RIEEGM~"yUSk9=aBsd0l~XVhP_<&e˖!;fTWFg;.lܸQOx,Yҋ$c"hժU?lHA_oB]ӕ
-pus+.U_ͯ--4I,$%iYǱɱC_XyhTiMfXY#,<s@bh-iT*;oN rE ðJfoAz`v;iewu:Kڲ]|\1GrQXXq\XXXXXq:=  /Ԝg뀮ŋcbb9
-n-l[ZRe@0}yd=x:`2V?1pX }`9{i*'~ҷ7Q\c߁D8|nxcS6^Ϝ9.-uÎxAM>EdL+JF'lߕjv;p,˶hu(X,vfW?I|>8|5V(e=v8/:2sZߠ|Os]eElA<cQV_Ţn۶-##zhjqiǎ3o?  ^0d:t333?zi8NաZwM~*
-M̼P
-!T~Ь~YʼΟr9_4#+c=!e/_|
-!Ko'fX=U)>D|˗	))qOyxD"ٽ{CH",.c}?߿9e?=avu*O6Ϻ%<uVa7ܹhINUVt*~ىrP0dN8 b  {	zɓ[n=~R|	
-R0잞-˗O>aB~5BUAPz??muZmS/U3lI4aW_0szuҏ>P(yq!Ɖźc㹹v}S(8ˡN62GČ}Œ'N}
-t~|O!9_Pã_~J5wZ-MA g&+++))_b .=w9pҥ~i<hE}=Xcɴ_VI!#T?7G]70AUفe)꧛Fo$Eg|<kKo|[nX,Bbm-63'(*++ӎ1a	^/R//Ǐ=ז
-0
- :X_VVVRR0L@@%tG?b{ffzL@D"9hI['¹  ]{ZŹ8NVV)))[]DgÊ'O^Z(C:#	//9]w oG,8={ϩ'tuPwDGIM|9o&++W_MqbqLC$8{cǎY,!|Yfu	h$峒?|ٳgy,퓏:QE&8@׀[3gNVUUƊE/v>77ҥK			h4Z}OtHAP   sbɓ7oy<̙3OL-/G񗡗LC _Llj?oRʠn	4#?*{Ww'-xk/TO8ޣzkEzkc
-s
-ŶmΝ;g6q<>9\gOcar9_vر^LHug]]B_@k4s"eE"D"	 z8-\0--mѢE[>9Av  ty͛7ٳd2M0Q+*Pq;Jd?nZRRχ#T
-Թ2H|oV"|ci@G}t4OŘɵ/21xLDvڂU+WʹΌ|;ᬤe?b5ko|m<9>8*88W^sQ^k;] )JRjϟVLQmiNꁈ  teKlK.mذ!''ðaÆ6,woF'xժ!C|ݫ=j0TӜ*y	A^?_TTUQikIr٠K_ڸT<ð|ə3g>ۋ/*DSKY,%%OH;WZ3p_tۿ87٢Dcvup;]WVVojIJFjrn@KZ7[xq  @ 8rrr-[<=vlϺ:́P.\{ p]*e!6lWPP3FMoɤHq fxxT(X:ujO?0*sC_MN(jƍ+W4 c)sŐ7?ˏr!;f/\`d\gqƮ\RQQaX@@@pp0q:h%{nT  -@Z%%%Ν;jSGX,D{MdA`w>|866o`ꖋY,hDp >~\oͩ4,[y5{u:L
-np f>̯y7EUUuP]#H\jUYY֭[VGz\ZJڸqW_TWo*Ec5**66Pbk#8Ū,T*YqXa  Fܹs-[j/n~Q#~9(hIV~]cG0(sDdu$ɲ=|XFs(V7fد_\`׮]_|'5bܵa&Сdyyy$I{h ?d/ͲqF?,Ap7,(T__+rOd
-ۛ8N=  -@)**:|͛3"ݻ9I~/ٳ碅/cűj_عXVOӴ;RӐ7ӣ䓏RB[i|˺t>ee/=ovڵ7LF	Ip|/6lT_cBC6[}a8_q,ܺs	!n/@{G|[:T[7yZhH=jwwf[G>*XQ8B,VPPPRRBtPPPll@ 5j4Btm}8!  ]{jjjm۶bŊk8cVCB=b% 7o0ags%}T+9Rq=CN)op3a埤8nƍj}]]eez>u=}v^?mdiwrq|ϟ>}:++bX.,6fZ.6jTaq+pZŦK]#tݪ7mnr2Esq6nn:㦃Vtvdwb;F]|Ӿks	0hnpl6[aaP(ӧ[hs;p^^^zpzϟHiiiv>p^  {p8jkk߿iӦ}ļL(ais$zٳ$Y\OIfP]]my1QhJpWgRի7lq{=Z⊊!!'ȑ#YYYV9y0$OiaJGhe?;s>`cD[<knqwzNhyMNF뷿o6NVqV=u7hWXXh6#&E+NTWW_pAFFF3C{$&&6/utgot   9rdW\	QD55n~\^&=s@)u
-Ȼlܓs188f#!P#|J>>HjժիWt~:Ѯ=D55
-SOQuÇ[,93|+9!?xqS!!r͡Z;}zW57<{Y)6"\V0;V[[k4|~\\T*p9c=Z699-h4ml   Eqj>qӧO54 c6RZVyz<@$BI54dR1;Pܥ8`UU5 ?XvtJ^H$^½,ǳ.6&.fʀ`]6&\zUH{vW^={$IR*L.ptҥKSSSB-t99WjQOI   ,t9Ǚm۶=zT.Ϟ=Ѩ(2TY#1T\oB)))OF$UAq#S\\۳H[Fi	o<?&+'W<X,^'yxX{ðG=zf<9	Z ta:!88ߟeY6;c=m`f   ]{V{ťKfffΘ1cv\_m-:-l?Ǝs}2ʡήӛ"{x:Sk01-YG8wʊUg( ZPUqBႯĉ|گ
-p>k׮3gΘLGLEJXLxqqq}}nD~~~@$AlD  Ahjj:yΝ;wmX̙pwzTt8ÇAeAu)43m^;w]><ۋg1ezJtXZ`w  n}Pz?~iipޥ%&+>s۷_zuӴz!M`4^sesHoooJ-ڤT*ZmZZZrn{  ;pqd:z;rssYfRQJKy$MvsƍɁ~@uAt}~=9W.<=Fa~aOԟ[,T՚-/='_={߯KM]Ưu~MMo͚%HvYTTvZc:%F,w hx<ODDi7h"V*ⓝ\FSX.  @N֭q|wsFP6UVV<"J!ӕUTZ;NS
-Qf4ZEBق'>:'Csn Sⷿcǎ}gO+lhxwT>~;v4z20@[co,x]]]}}B& `?hŋ5FIKKKKKsfNOOo^!VoTǙe  &#l6333À0!d#JeM.\߿?y,.b.jL&dJNzGѴnKCy0h`W_C\*y?h4'ٓW_ҽb&S MONff[lA՗ SB4.P-nDTfee=5<́PRRҺunKs @wi۶m[zh4iҬ㇛Dy9rcf3EEEzw7X)tP78TZֈP0q"|yӦ&=va!YL i^%KO?2jj^8Q _tڵz~dPa	 7:LT,/5BC,Cۀv8#>&;;[8+7+JZß{   2h,..޶m[fffIII޽{Qv;9Jd۶C~1#L8V]جLeUBhhu\?nJ$u&3sdm#siz o1v_W?/\zTT,5J lڴҥKV2g4^
-o57,*pxzz7hÝ#;{ =0ŋvبV{v;U]&yȯzo0WCu/V#BCl6Î$n9tlap8BN(6mH/>{?6nܸb
-(.vniڻAJuΝ;qܔ&D Bwz!$J}}}R)XhQvvvJJJRRRJJʍVjq0&11ph{{\=Z+**ٳf͚gzjǑ55vi/	
-=?&wxtPwĲ˗+BV\T8_VŲ=KJ*k5JVXxh,X7nhjj#~eً/8q驏MR%J>,u8!!! 
-Ș?}QHj9S8geev *vj۶m;v(**Zp2­Ӧ8=|3yXΣj/VRZ1}<</O		ϋA~UBQvw/?h4Р6lزe$~.߭&~GW^}}qbM"qX.1ΦCV/))oeqqX>:\΅^JӴRsoҥXH}k@Kŋ#-ZropK,_gϞ*+C[grN`qZڑ#G>Z|BR ӽՙL&˲FyN^R[nJ%"j~j~-B(7nO>|Bnرi??یf())	TTf* [}{#ywxG#/jEn ;x6<|6owr\M7)26UTT1VkZpfggggggddjܧ5 +hN󁦀p4%%%_r3gBBBfΜd|ʽ+#Qs!#BupO鸞Q@D<??/pvqxDDDyysZumA9jwǻi,˳ZʴZbtB'moUqݑ~vB!r ҆nNh?[
-G0 &}}}%	z@9K{jڌVqV$8*iZs/pO's8|>qoo`LFq'b[e1&	HVX74x{e9q!+$0vԨ|@'0<xjϞ=>>>O=L Ըg״=ރV"0eo*E;m?NnhP3Jډ2t<iM2K֑DFnht-|8ݨZU=Œ$0̩SBO<+pJejjRT*7#(@׎h4nI'PŲ@ `Y  ꢢT]m/cisjV+tPw0*	yezw鱞81>כ&Ɔ̬֐ 4f/9}vB>HQ<wz8D*8qÌ7pzn;'喞Hk/7v1[;;>ic4y=μlVsY/ 4SSSu|	=eY@`00DGhMH$UUUiZɄ;`䕫$7 !([qzYbJT]kE=o1?RΝ;mWy{g?A>xतDD#  mQOs ;FjupO'sBa겲2ۃ>!<<<Gb{1=bz{}&eF?$QlvDS(1SKǍ IHbyEɎ;O=Oϯssw0'M4p@L  mflj,!rA[h[(5h4"oDP(
-8sǲ,z;VVVGG)|QA%%էiBB !t5AsD
-ðsLfİ56m3fxgOQe%r{>k˙ѓ&MR>>>/  w:T*/^\PPpɅv<U{  pO'cY9@ xyyl6$>p?Y,rBnР/9s?i$BgozyʤB$+f34Z_^O8xiʽsBa{r<yxxx@  @gj-ZhQzzz=7DY'& @WnPgYV"Bv;Bn&!Bammmuuj8[3#Q̖pf3
-arvI&x2 &,n*"'%%4lw(뫪rrrCCCN:l0___D  _VVֺuKq!222ϟRҚs ZmrrrDDDDDMwUtsq'J_~Eap8BD7b`UxbnF㸏H޿,?ɣXoo5.W!JhيKMtok66446칑#jk
-7[,{)))	;v62  tK666:>i\ً-HLLl'\J5Х(J'?%%%eee.Z|Ν0$Esl6[CCCCC8D0cYOOOr&	{5ኊp3tȕR]УG5aa!>R!/t88&LG	-/,o]аf͚K.O0aر>>>  Wp}Zh4-h);pRt~a{z9\9nBcqПSPGMsW+)bKёaC{8jE4Bh["4
-4D@pHx?~={Ι0!m/RIQ;v!bرC9\  jJ2<<כ5'@%--y'B음 "-D"	H$fg;p48qGt]]b0bݍYYSιZ|졙j`K-ڰʂ%
-j|ϲ2;v,!!X,hsؤQFEDD8:  
-&;;;##CѴ|\V(Ӝy t#> Bht>XpeX
-Mv$u:3爦)>#Ann'-A ֣ߘhs-~+Bo((<F|@U~}/'''((pMM7+ef8qB*&%%?>&&z  񝌌VzjuJJJA9{p HZZFʂ@4-Y098I>qb8$$n[,!]55a*Aͱ,EJ8kj2hQyzzzƨA;*k|Ё훒2eqxy]
-7dg<yA=:>>b=  
--IIIIJJJIIY2 BFFƢERRRB/\t>z=qqbd;u<L&nH:vW(h0ϲ,cqM.<:!$#O;qhBA{6ew1uGb;qN((=|X8ޯ_QF	B  pۋ8a	> tjzҥ	{{:˲|>_ QQQA>_!6MTL"DC7uGcbb\X|c9o۶8$	u|plX(.dRYڸN4֭[|ɓUT)_fͺu08qbrrZ"  :)))IIIbu.\ D":(///a#XLn>R)0Fa:@*tS&O;awff9Ų,=zlͤiAa*PUUA\l]h͚5<zg׬TZk׮GlL0aРA^^^/  :lVT*juxx3?2!  6t>X(*44l6sg
-}|<kj0W(83!3M;TJDQ8Eyo'?dfX>~҇婬ux{AKVu;w(jҤIpBaǺ8`&N8nܸ}zzzB  i4\A,]F?5"lh[GӴj4MF*8Y0)MMMVe'#JK(丿,zZ^a}#ʀm;B=x%{{g<
-h.@KfXFzj4uԗA[={1bĠA<==  VMNNjLJJRZV8@ZF8/P[oF^F|E!`bx<'8pL&8lMݎΖVzy||wjｽյx}.cz0VV&c(G=΍kY6!.BfTw6,--8qA+*Tb}|6TVfggEFF5/  iiiXŋSSS[f.Z(###;;;###%%rn @WCt:ax<a(TWWǲ,#݁aYÜyFh4rݓ5x+|?4oO-o#|}$|>_qA(# ._)F@!Ul݁ݏC}jܸzz8P[q{1vÇ"/  ŋ/\Ռu9kZb=  еȿAӴ\.0iLF4n#Ѵ\.($I RGQ}R+U{X}Ùus'9,D"fg-x^֢YW+Zefߜ߷oWf]WB8nVvX,pL&KNN3fLHHX,  (,,D-
-6_'fsz?  5A1#m6q>>>JfaxNLrfF&9op,WԤ34xR<!k_^0s8cH&j_X$1B!zZǿpIzꡇzbqϾ-;=zL0aذaB:  ܩUۙÅ   =2S"v^Dq8d2X,64M*gjM2:RM>[rL)Bd<RIzL
--位_Ysrr"""1cJ45UٳJr	w_TTLt {s9`>  t!$4AcF ,KÈD"PxG{XZeYhwJMCFv:}_>EKBa{?oG<yXu:;;'ĉ<oÆ9\  ~EWVּY;   2t> ,ff$ItCCp tpGQǳlF8tJ+C2ּ#hDL{v/=Biqվ%Y۷o~GgJ{VqV&;NQ7o>qEQ			CA@  9K󤧧''';W^o`;S   >X,뜛 Jy<^]]N8*R_dD*
-GGr<Afwq,~31CQɘ 4~\\y>?r,77'%%i~e.BJ/M6ٳðQF?^V+
-  #RSS3224Mvvvbbbxx3G4JMMu& =qeU*IǉD"XlZ1
-VMc`a LUe|t7R,sW]cb9%Hh{+'O<7"_Q]3
-%x޽gΜ8.11qʔ)/  p(ʬ|йzaaaEk   2t>g<<<hvNbpH$&h4ZV=M!4m/Q7RR!,+o fﲕeVB=cO(SG
-Ν8q'%%b=  p9#>gZNIIij  @ pa\Xֺ:^I"{:e!h4Unc?xg{EY-&%B&_E6mszRUTf<ԩ;wZ޽{'''>  @Vju;<탸  t4AsN8N(Z,zhAb&
-%	qfat;+~JՌBn*-5ih{͛7׏?~ĉ~n85kSRR4` k      p5|L&ÚH$iaV m67jb`08N4@Ou#E%FCv9"!kv>.̶m۴ZmRR&D'JM
-ů/gffGEE<o߾>>>n \ay).R~=\Yj  @Wq82L(,kBfZ<,A8XlaԽ(9ov@ !rҝYܪjS'FknIڨT		2e|>t  )&99y-K:eUA  2t>:^^^@(:W@w8Ab1ad2L&	q =Ս$˾|HH7?1hޓQ sվ\+=:bĈﻯVbBf߾}!!!ƍ4iRXX@  ;hXO
- =.pA X, Ipwbe.q9|hbSTҡBNd2=5~Z{ܹiӦXAYv#G>bĈ@  hsZޜq .J5w>Ü%{4M466
-5aD"T*x6" {pHxǟ={6::z3	llti0mܸ177W$2dȑzH$5  pg9yZ-  @%x<q2f544,XnsHq0~/)Y^F<}B!{&I>>Ӟ='OdYVV;6..NP_  "OQ[mafr @\n8YJ87448 H,8A,˚fq w~IWٻwǔ)SQ( dS[l9vP(0`R)t  tJ#d +,xH$XL0XVaѰ,EQ!hXf3͐ EUߧn۶	&
-VWmuEeff8qO:UV{{{;<   2pa인	  `rP(b1EQίC;_ǝB!06e	2^/'w-L2gOy]{mRm>|ɓ4hҤIÇDp  Eaq	kKZZZ/y  h4+[,EQ$IR,&iXRB &ߏ۵ka'O^0tou5rCEvbxӹsgΜZqqqɽ{V*$	3 j'''/ZG  ]8aAtz	Ǒ_!'3L aY߰k.2yyiX|O͛7ܹS%$$187  kQՋ/go_0##ee褤𔔔[=6VjAi`ZmSRRl 5 q'
-)2LV RاOVܼ0at:"pgM65441b!!UU8'T+++ٳgrr!Cx<  t5IIIWup2VMKKksj3@D6-Zpۈ @`YqaP(
-6p$ɑ$pl6gfXʫ<M t_6uׯrȑ#?>=dV,/333++2&&fщ {M7j!T*SRRj3Fdggw<%8*rVh222BiiiJrп  {\q$IH$ qm6juw!ĲBP,bd2l6(S tG6-aÆ=>cP7A+{)++LNN3fL=b1t  Vc=)))K.m|RR	$%%<yT5FLDp  Wq\*:,:,˒$ɊŸNtI*bgi 0>;b9i^iӦ}>;k0ݰkN(4xxls
-
-
-5jرcB!t  kn:+--IMM]ti9lRy}Y"ZpE*nObbᩩP	;&pg%v;n2}tȒN D@0Yźu?>>>~֌ìV={(;,C:4$$b=  pd.g[*h|U*UZZDaVhJeRRVMOOOLLt  H$x<ie;u<8n] t7_,[&  `ҤIM4nnٲرc|>FӧJ  p楯RSS[jsRNxxRj-JNNvu"==Y}ಲ֭[Dh =BQNf3gD;ԂqBaZ-r t'9ۭYYYRtԩ)
-&IvٳwShӧϘ1cbcce2A@   c_I&?9;:kZRUPPؘ|6pOKJJRՐAXV$M&ǓJ!DQC88aEQ< BDj]~~Ͱ*((PP	^i\K,_.qFkX#qI׏?8x𠗗ԩSDDH*ݴ3w:q@ ׯ߰a!  Mi\Nپ2΄K6tN,ZH:<!Rxbgt	t.ViS {\E$8-Hint:a}(,K#q:ͷ~˶Aa;}oشR)6%a}G),;O,|pf	{JM5W5p?rr|֬YO++[ǴJ]v9o0`ʔ){ {~!8eWխRSS-ZTXXL}9oHg2h,ⓑQXXiS {\j
-ewlr!0eY9	!8D]I462K8!HW*E
-PT"չ{NhJpM!$X%dRAsjr;v]pf
-Tx:CYq$qg6S)UQs999 99HyYr~]*ҽ<y~9_~1  prZpQWvZPխ1-7h/^$r$ϟT*;>#--y]jj- t@EM"!dٜcL&NX(L.l0XN }&q*ʵZZA}] poJI^qcrPHuɾi:#B(*;&W&_l=g8EGy
-\I9[~BeIIcQqVkv/7$B*0@1!apnMz%on2ƍԀ޵pb5rGt{;vlbbb`` } o&@aaa'8/Ϊ.r-g٠EAS8[0;=0se.s&HXQvlhZʃ+qjͦ-go<]Vd9heY0C,0^o58FĠ:nNޥ}r''yPǎ_ȫB+己;/uz!a8FQĶf=~r@%'[5~`˖-:nя\_ãD"YyCG9d???  =\idddD.jVSSSҚK)<<g Y0xs:\8p8v;˲,IށXx<$1Fa"Пo<6Cw#!{zeصMRU?~aؠ@EDsfWf^QqB(6Ʒo@OIjulq+_&[>RXQلH \.`e:+5!d3E|}eO>>=n7=~^qmӦMMMMCyz䄦&drxD"p}"##Gѯ_?ooof  萤$2/><<y= \6^8H$Y,yzrb{lòY!DQTmcT\݄jjlq᷵'.!_Y8~=c}}2Chj&j~m8L0jdoIv2g54͒$Kk(8N&Q58%8Hċ-)fh3;_{ʦ&q%W7E"rVî]***F5^]3
-E\ٜQF=:""9;   EּpBg/];ddd,^X) pp8@ J6`idd܁>](8y<3!!WjV9ףeZ@@%(e9g㐇JbYN/xփj"(Ǟ+yB!~}|}d-:{^VPkށ*6M|>9iB\ʌ~^*1a~=vtJzG&Pv5N֭[+++j)St}Ur#GTTT?~С   3Bqt:Diiic.vuSggggeeAS jq-gl  XeYV.#B6;qac=vjB<Tv9Vd4B=p|rlLos ? ?UKfb}{'J$RMkf$_ՙ\yĞv҂
-єɽNhJ(FɤoR)\n@3͛7_r%::qnX]999%%%~~~<x0z   RtRg	􌌌TZ:#A5skڅ;WLOOO_nߏFDD8(JZ\)ܙڣT*aNuֵ,,--u N0xs!Pa\.'IiaBZ6a|$˒$㸳pVu8{vhN{;콂Du;oN0.eYNTf'hiǋ-Byx'Zi=\px1BSn6a$yHOhqO-F3G,[qܹI&M7kw{rJ5jԨQd2t  f͓/V
-
-ϟjWQ ++pt.g%$<<FA
-pnT9%%EVϟ? 7pf$-˲E!,|vkq窙f~KSe~:|0BK:erǝ9[mǅ={\Zkǌ9=fTԸ	G|&{FPX_B.lX^3 =IsD!
-RJ|PI.O4)SPYe9!fZ,{|D"ӧϠA"##b1t  'sup{gGaa3ƹںZnggg7?V[bjua?Ҧ'O:5g8W
-e Vd 㲑ˊb83Zl6766r7MoeC(JRDR__o88_:\`3$|vemq"kzhvF.D
-\\w>qB!կoP.]BH$Nrղ4^RtqIBH&z$/^V,_СC!!!ӦM,sK!dem۶E%&&5*!!&   Zİ[OJYV#  [AUpX,B8e95&iI"&]AΥ1^u5v2/l4I&Ľ`ߏ,9U{3/B^^@e/qY칊&v56Halo`B&4qO)Cy{IC38;vJ_}<=$"d߳ʊƲBWP\r'Nɓ'?*sO^M.e:}4BwcǎU  pog   # *ÈbBQUUŲ,sZA4M,BH"0,̲|Sp0ki6o=0\.9ǂG@FC)g՟~9saXT0dPXʌ~C{zmviIVBʦEyBUh0o~b1_wg]i!\op0q8qr8QYմൕO;^qGDGylPم?gيcƌy4*JVR➽ۥCr[O:2dѣ
-   hT .pBIJ($)r8cYwg$ME|\WWg2N9ulxDu+v;6CW{+yO(mx//,j8q"f{uNjJ+BTB-:w"\.7((Hy۫qZ\VPal/-k&Rw5Ǳp䤘6$b=į}99983!CkjtY4uiѧOg΃|2K	 I8B`ƞ==3}c5n[ط;qw0K$:T;#MJ*J*(eTV;y睭[3s  (P UUU K1  sdYFHDsd2,Kgu,OmؠyaQEI,_]x4IYQ׺S߂faΞ{褢?kRG2X<g?z<E))3yw/NV{-ڰ0iIP8w?>$Y]~]IodXP(69Ɠ&0]Zb݆or&q#E}}Y4}wjbdٝhUWw8qڵp8nݺֺ:ۍ>\  K¨ ف'4m2!(bP((I"4X5E}}4M,kYbEB"/q/NVl׭-jj,/*
-eYu{cU]6$d=Y##~Tq t&ϜOaYfccyu``켫vڰdUu.xOΞ{y+˜+/:u={ݻkgf,iho?~ܹsmmm۶mTi  dD  (Eh4J®vik+?v,ˌ,[VFӴ \'	_}|IBHyӳ%$_}|f
-獜-.fx&p
-
-Z#񓷟<&ol(w[6;A/!հȶodYFEe6+j`:&&A/$)33K3oZ	2$*կ;w7o0=Mٸ59׫?~̙+Wnݺh4  @jE={_
-e#
-=Ĳl(t<G"ɹ^KXV@}#dYuw!VnmqScYK&ɩЅ?TȔ9WT	!E(ZO~qv4*BEqL.m^SQuukfo^o{@R[SXbEݵAGf<?`"nyqKd\ɓ'bM@6V8njp'Olٲe˖Jٌs  i2?OsG&
-XT%LB9FmAA戢p8XX,f`0W*942
-q=c۫N.19ާ4M[V//sZ"<}pML(</ƧHj㟉xau|wųv=0!Ȯ޾!BaܰdEe2hۍkF4M
-m;V(OMF<	Kܟ?>44TWW;lE¦%f}ɓ';;;׭[gZqj     rLQE"d2L&5hTӖ,g=)YL&'O&''%I"%$bϣ_BPp+]/©нc<#y$	yЦ3f3ee[*!gf'OzÄښ¦rHӔ_z#kl(saYV'r9MX|pj)迅i``d}gݸqwpp0//o׮]vZjfø  S>;  3=Vm6q,zaDQժYM|d(^Eqzzd21<!RΟoEQiJYVVP(onPmmVs*a>MSBh8ݦիo\$8Ɔ*^}㝻z.?$eښ"AA^7#B\"[am3C2Ar~~Rg]z޽{g01t:[ZZv`  zr 5 pNA0F1ʲdyOX`0RFyWG=,ȲBQTq&ILL~o:LY*?=5?y2YVt: ߢ5$RgScYߓb!ֆ5(*<WRQr_1|7]xƍ2:Iti3{dڴiΝ;Ѯ  䠍W0	,Q{2)(I^$Ih4:===55H8ժAEQe*iy)EQG!,K8vxd:-$ccCC^t:z[KUێU%g.<$,Ӱtmmju響Ѕj+֯+Q'\q]:^B˜3i~EO	|w;ۛrex8YEc~SnܸڵkoАOӈ  `!U_T 9<g,=A+?\kє(t:Y$Y%>el6LTMDQ</%#a_4,P-NQ׿~Jw[65W< !l{ʫVAv2db"xg~Bf,-uZHR8O\b6x㍟UU9t3'̙3/_avx<eee8  TIQ> `1CܓAÄaeEQ$pǲ ,ӱ
-M0^e9F"%/ a^xXiyXʲ<8x$Y~79by/Ͽ^HmF"8yR/OER^lj(+/wbWP|W===,˾?x򦦲viY>s̭[hkmmmll,,,T_  ??  3<g$Ij)nۧBP,SE2tYeY$䤢(w2 1]]zm0BU+e2'ԇuhmK*YV$IVWV{^Գљ'O}S~6¡o2)(DNG'|.BFSYY2XzOnxymEEYG;
-m/CvBl6C˖;V,+~Gab~χOvomB,l=v_Z|ŋAx<vjmm48;  O7=  KRg2FyAd$	3(sOMMh0AP:e
-,+SK˝E6uhL^imXW_b}W78],&*/ttjDDixpievX쩈O{/|BUJy?!f345:;CV0rm6EP#zoysq(!t{jgkVOq
-n9sfff?رzr2;Yls˗oܸ׭[gϞM6  Wl\`qCܓY\XiDQT0$=Bh.--BX,&+LrƦrAH?w&0wv{oUhэ,+*w:aSg>:Aȓ'g޾'w>j[ݾ6alg(0tÆիGə?y;Bj֭-v:yk:ŭ`0VX`]QRlZ9YV&'#=x8EQwdS?ޗ&}}pYN/ygϗGZ?x竮nmmmiiYr% W| :b'㷆`0h2l6UEYl8Nf`0,j5l]i4;-,+#SЍÜ^GӔ,+4MIBHÆҦ5kEU+Unä1飿ŉCb"K]\do۱*(Oy>?_]|A֗Ώ畎p|GN&d%#A?doj?k~{o}i`<L?'NLLL477 =3M6C؝;W^lkk۶m[ii)  xys*  ̊bAeBH4ye1t:Y%Ib P%+_
-MS@T<zÁ@1at6/}݆ߪa]}q:M[6	D{`,VRYZUƮ5?|g}°;&0+|EPmuY#>JG0s9M-[W[ϋL4nI_X`3t6XƮ5[7ۍ}?`FO<9<<aÆo,l[۟:z̙37nliiYfjŹ |"vp:,j	 .Y6tE~uY6o:y2{#IMKP($If	sD4UV㍛7>y4,34m4yyym;VmT:dnˮ557o#QAY$N[µa}imMa{|pmM_2M5k
-_yџ7e+Vü>cEsf]ahTCO|SS!^x^ZNd05J&OWrf?Zj՛o¶%cnÇ]]]<ضm[kkk]]Ĺ WX(4 Xd4eѨN$IElZbf,Ų7ŷncELLLb1EY.30tmMamMK$roھjak++6/|_yc?Xl	!//?t=¦qn?JJJlR[[t:w   `I@ܓYFh4fmXdYÒ$/]"]E X`09tB|'nܸbŊ??iAul+	a]niiikkknnv8z  z޺B`X&d5&XP,EQ$I2L,<(
-˲EEdAӌ(JKKFc("?Wbɉ{׿Ϟegvzf:n;ww8: ?& uf|sKEdEQC4G3#("MY6Ue6n[zBг*x^Eݿ~E__|w5>TW1ŝ<u-NԴsM6! L<d=j%
-qOf4M{^YYUO4-IPMdTӌ(2CQT,BGfq ^;S.]2۶miMMx6%MwܻwR__cǎZݎ  2= W;"@f(L&z(^ɓ'cccEF#M*дK BbX0T)?K.4e˖œT\hlGoRRRq  dm  h=PQ[0ò(F1]b`0,gff$I"
->*GC?=y(vɮ]33T(GsVΟ??::ZQQcSQQa6qv   CЙ `I@U?BFc,ivlh4*fw/Z,`B<3#k `Abz_];}m77BtƷ	yy4}ܹZQ֭[L&z  #.AXVO}7aiBg̒$f1v&&&$Ib$ICV;sBNS'2jTs<ϷX~q{ӧO_r%z<;vz  N,aBܓ(qèsKDQ$Ip|<\s8G GOL_tuulݺw.z]twllt˖-۶m[rhĹ =U  3= 4Qe9R%Ll$B9MzY% mFyo?}rرw(Jfab^ްr힞[כL&  teXC!Rq[2q(b (~>R0<SL;%nh4(J$$N@@׿;vGfq|<Ί<l|>4tڵOv\YYiX  Y5uOƉhzhTezzz||<YMcO dKhB0&op>7|}:1񬇦eeכ7ϝ;Ӽݻwoذ!??[V  mf.TaY] KZd ,<q ###,[,YfCd(s@BcSp ?=Ͽ曒G?X,ӛV6}96v鞞Q[ZZ֮]v1  d,˨ òh(,5Q'
-$v0==B8.xEH`0p(JuЂwrف½{իD3eZḉs=|h4644ڵ\%
-  EF5.]AF)($I<\tHxssFocfS'$g
- Qrt<yo\##Yhmm˗w޽gϞ׻n<|  }E!  ,ZhݓYj;Np,B@ A4N~$(t	'B|7oo.\`YyssdBhڗwҥsݺuKQݻw766VVVt |E.X&lBƅa^/,˲,}(X,
-eyk"ؘn(Zm䎛Jxqַ(ujo!y7\W	KzSuɫuS0?S	mVNu{SOz9J~}֋D}Q?ɯufz%szIm~Yfffn߾}={Mlro[n<fXRR  P  =SbLLL4Nʮveyzz4{#ˌ,@ 055z.]0$I+'uGJEͬkSTßkt^XF$Z3!SqdltF=S8sAU2	GPP:.|7oތb?Oןzr24pϳξ@ zꖖM6ZeY] ?  3=EQT4y^(
-J]Ƨp@ MH$rʕm|?{^V<-Zh.׮Ϋɰ^˙J݄jN@\jD;33zu:]CCOkӮGs:݅_
-***6oxz=n  =s2ӡ`)BܓdbjR599966F	!
-f3,^qFFtrC	aP:;߷SOHOff}~\#EϠ,`_Imָ'u|RE/ޞ\O{2W%6W+NvNGQԣGxiΒ\n?sL0\v;ZZZV+n  zi	\ꀸf5,+˲(B!`2xU϶ί544l޼Y=Ed0k3W(3kܓN|"EכtI'H3dY$qOk55yaA:%danc$ށtFtzaFѸ+JC!6;z]~ʕ+/_\zukkk[[[UUM  ^O(	  =Pe*r(8h4AYeTX
-QO>e/nDd/Ubn_\a+),i&b$дp<Z?uXb۶m[nUVM  
- `Bܓ\PPP^^DQ!/s?,<+}~rC!Dt8TVvww_zutt񴴴l-     `CܓqWE
-`0EQEY<; 	ˎZ.\xn_~}kkk}}}AA  X<ҟK 7jZ@d&IQ< vwχnPXX!   xm0T3,Q{2NK^A Ȳe] 8fwww?4M^zF  ؐ i^ K4|]NQdY8(An.v} -nlFFܹòl}}7nXZZ>\  8nQex,9{2N$DQ4ÄB!B :NTe/Cs]z(x*++J  !y,9̕q:Nee0x8F)""X~^p\>www߹s'Z7hmm]j  `1W2KjEqD"e].dE2Р`Vex[ม7<KW\y(uuuj   `  x2(EQt8>iAxT,"X^h:r}/^yf$ٶm͛,J  S.
-p,j x74M4-r0bVK|ɢ-[^p  `@!8IXUEӱ,ł,!z=`k55.]th~~~ssM֬Yt:  ,!\ :se04M?BH$l~?%˄, rM.y͚5nO  $ Ҩ@ N8~?!D2 >wz>=s޼y
-
-  p,f{2NeDQ4Fh4<0<; fV^~~ܼs  ,WE
- XZESct8աvN#pg4E$eqs]V'Vk___oolnjjڳgOSSSaa!˲($  X& ,!$ݹsJFEܓH$B1]j.ei@ƻMM}}}a͚5---MMMeeez  Ki ,-H/{oǎ}+CܓODuf^o٬V ,+1p@.&]ޫW3aÆBd=    lqqqAAAWW׃_6U@ܓ:p`!
-|>^dBӄ	!ԋ2 upkȘfDypWNgW.%=Qpn72<C43Χy>	ޱO%bd%y(*4-Z,&ӧCC===}}}~_zz-e4q{ HsVQ%D׷*/y}[nq,˲`0oej@Q$IGf85~}^-og]vu'[L^,x(I^\nQz4Z{آB
-uUpӼmLQefϵ;ߋ$Ŀq###o>7|zo^ZZ["  ,]V5	 E(˵wޚ'N7/<xpΝ>Eܓyժ<v˲HN2[}ZmyìGꭧG0I`/ z%G"H'HqR҉ȋKB
--E8)ɇǏo޼
-6l{ݻD  XB!DǏ0ti}Qɲe6msC*bjV=W3CHOm'<įAM	0!;o7%Hu&+l*ὲ,4)eևJ~}8n$ϿlƟ҈/NN>pu	gD}%~/Y/Iquh?o:a;a**^TZByֻ\?|gg^c///-ˍ7ԩS?+**@xw:v=
-BpOOOr;Em4M3\ѭ$nK1+^%K'Yp:OQ:̌ EMQQ  OXLñoΝHiJYB((
-}*2kW]aro7)wR_QH1ڒ	%y߁*,qon)aW$K{Q[[̵`vODL=Pp-şD2ajė@8<p='(yE|u%,:gy%~8{5Wium̬Gs]W</N=;<%}	UYe_~ۿݸq#0{ ]ꀬccc.kŊüw/-gQeIs-<cJOIfIf:a&hXw;  ܠu
-UiJE*o&(b	ZbI}m	I I]`΅z'O~fI-GӖk$L\J$)55,P$sH v2a	[g*>в.U%U|ҭVnRsf֦g񿊿tw,zNCO>ZH[y8u3Y/>yOcoTmJК)Q%PD ڵkkkkHpqqk2Ry|2J(E#ddqI:,-)Fxyp-6Ap)U?yQ\Wή.
-!ƔQL|,|]vX,  7hyѨ
-( Ȃ7|QC':uG?ux^	~lllbbBFi6lȥs) J<ۂkjjqzHzļdC9NjdyR|3W 8_:f{5,d-,Fazt:  rĄhiba{fk$TfVƟ!3ukCFIXլ=WhH=QHB=6~àTgN3Xf7jøZɫHqu:6M&*ɣ)ϵAZ|W0S{ՓO$5:ߓG|oUEuߢ~{s=~XQ]v577lqO6@  0y6;R/W=Na2ёD^o28iS     ,ht``ɓpxƍ?S[[k6sr'$Iy^mH+M"sEUK*'i^    `Q9{|h4ZUUcǎ~l6;8aЕ      Pedd?|rqqq[[ݻ7nt:ꖘк       r?~\WWqƼp}.{      C> @Q%ɲq\=*=      KR7#,[     `koooooG9 
-q     ގ[ Q        q     @8zhGGEQEutth=tPuu5\GGGggg|>_bUۛWT~aGGǇ~z:[WyA˥.r<sڒEUWW:tH݇&eG9B     %K}G/\tj5vW^x<ϟ|IԩS	ۊE-mw^[O\$loN6|w˵k>+
-rZ      ,>|'׮]裏!R۳8p^vڵkjpСCjk300p5׻o߾Y[֤/ͭ'쿶jT$ѣj'x^5x:|p{{.=z4~?ۇr&b     Xʕ:"TUUUUUſxLM>00R3y!ȑ#jbra5~o"N9uֈFV+*7V{{Sum	;\.!>ЎTSN7477&lT}ׁ[,ih     =z%sSmA0ׁHEr|>eKsJuҎW}|0kCі3C.D      Kށ:"%D3?ZJt:FGUKP^&IsJp4zRؾ}ᢏ=&Mj_0Ӊ\K      ,yUUU/_KgJ¤Yw`Gud=c      ,k7	ҏW8pAWooڧ=       XۗN;t[en"uL[TG>zzPC5     ,GZYhIr0N}>_+in=G;GUԦ {      v9̡CRQÑ#G/:T'!	:rgj[OQé#G08vB֓M{       XԱ}>_GG9r#~emtmG677'$8*5I<xG=zt!u2m}^<I>СC	Ծ}_͸       X>;xjnn>x`BsѣYS>Hmsȑj5I^8ͭϋO(?lnnv\~a|zдrj     X,ۧ:"ÇۧZjooOUUU񋵷8pr%t^vȑ#ZjSUUF*	m߾}Zw6Q6=(EQP
-      *%EBN:&2?x#Gp!3      ,/CsrAB      ˇ~9 a      X=zT]]SU       RI,y|흝UUU&=        `                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r
-                       ){        r? 3U`    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.dia ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.dia
--- ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,23 @@
+     ]s7_R^uc ݪ=\զj]D˼%E'ؖ4Jd7O~/7OmgNO7קß|)s}8N>}Z}ӫW[wn]v׋OͮgW?pr.guZ-o?'7קogZ~<ͫ.no'ή_.}N_/lr>w&~Bˇn>|pWk֫⢛~+oi×khlyyL'>  #g޶%wݖܲ-ݛrX=&z>Tͮ]GėĤ'م[VX?]|\\n7+
+WmqzMpW<]-^~qvu.$|Ÿsr~}pezm`Ow"q=<_//dY~.V_}Lnbflyy'^9Ddqx=_Ċ:,AT^>ǚDۇD<]`J|3~?&1Wu6ݤK} ;Wb缒ݸFޥgqe$Ӌl&ǯIm9,-nn7~qew#q7=rLL%!9v0Fe-#FDȸ(Qpq`/$AdR9 "OԤܹ1bZ6g|53!',i2"@c49IǖmDhK1tVpOd ;ڼ"(v9MfY eQ1jC8΅)ac4tpD	ӘU+BIsPRƄ34]F5E&{@;66ݥpx
+{ j(OQ/67.QumT%)aJ= I,F9		Gu".x5Q>#|
+$jB6{/&Fo\m]Tiixj)bZ@<Q2l\gӖR$C"ZR&g袔{)$bi1{P<H֛FcЋƕX	4LW kJ`+?n(S"['>(<QxzS]uJ__`Rެ'fן_9;=[}֪@r1_~|q..`|Zm^zwN2:ػ`0B͇yK|Vy[R0_-=Ǘ[&*VQETrc{J,lVGTQJpS<*䤢PE*
+c-Z	1116)fr'$zŐ''3]10l(:P ᜵S7B݋ۛ7'1E.;+g 
+Ǉ׃W?iΙٓX|ofoSW~s=%&N`'cLmt#)q"ȹh	g.*s4Her$0б"ѤG20ʔ(AcR穣erQǨZŎdԪ;(bTKyi=S?W&'uR2(A4yT)VJ$Ɵ;q)5hL?CRSRfJT *ȝ`TSΥ)@5v_@=)FbU	Rk k ħc]2R#=\S\f	{TjTB1mOIgd;>(N#r"hZT#{E*Y]jB	R+ @j;r|j$%!InN	m Ls.mȈ&Nxȡ(3zM'ZN\\'J1E)=z Skq[;lmg FS2Zs21~it׫s~|lg뇘^+I㤝P;K.u\sJDJ,K;+/	&4TI;}V9nљ	N'6ȸ5茦`l'~fOjDʷ޿UT͗j
+l_f9IJ8(tܙ#CX=35Ҫ>mPBzdH
+^4gSd¸NU&٠>Lor6Qc7Rsi]w=%ӡvyΔQXxoRNei1j'P32.v^-eJcB3eP&iNei1j:$:QwO	;'ΝeH4i4N{N/O^-TL	sú i_m~=vy,&JOdd5B%
+)(v Rͤ'0q=Soo)k4nzV)F30%tytg%4=mkgr"DPLsLx6m oR0R}} 9ddj֔0`L2nF`&5Aި>FuQmP!o+m۰#הʹX8	¨PFuO&zM(eܨ$öզ:6mtFS2M30ɦfs-u@xA%dׄK!Hlϓ@>Qɢ#U)U)/)%Νb(;§JJTR>~Cs+-=zΎt\7Mt+U8L4${46w&B؟~q.,Ezߧ74.}+;.E >]=$] 6`'TI/5C? Nߑ҃l!V\`w	֧crm FtxbdoʃQ]#	Du?U:TA]rZH2t\>v][NlYHj~Q"qnYH+\1noZ0q^xk؅g.ɮ$kV7NM$٣Jvݐ=W0a+I.ܻث6Rdi$WdmRKrRAFBmsbH΄6g4?I.PI'ǐSPQkSڂP<c3\bw1=<SB7	M\?zw	#7%/}ZMӓmxO+ׂZN"mR{Q#!a뱶:f)ܻ8b7c7adGbVU5	]ČHT)(ڋ%WC­<Ͻ)D&;#F|hU!| Kug}Z#,C!Od0ЌAH"*JJA!h%Ŵ~]D6fV~BvD;(BUg=:ĈX"\o%}جϠs?FԈZjʕU$kSBJ:';tqu 5@hpֽV*rLOl(WZBCJkB}gsAZ5\
+kdu|Jڜ.P3x.dN%%z B1M0ۛ>J0!EJ!:9(ԛ0Rbq7>+9:'rm"Fw"@ojwnʛ6Tϓ Z:  9j7K
+ל-(O<r9&6mRQ `mVR<ɢv1wn*YN;\&~,jlUSj)YlHN(S<v~Gf_hKzr2P5X/Y¡a6% ?vQڶj|ΉS%{6(w͘f+<AvOa1R'@a$5L!Nu(z>sβFjyvF{Uc`HE}
+<l	'X~tGM]yujZmǸ,t}a#6x`PTZ[x='yVlX1z	xZkB[XkuXcBMiJkH
+=~MtsYoBC}0L:WyW{mjjzc9ڃ6(m2[[m1ߥZ=&cJCIh6P;.V>	{ǉZ{&	Yk K0k0Ow_L[<T1lg*	b	G"(zmp3fP3<hiQcUCٯW˫3:UtX_8	aJco'AhqsbZnFa@cm0B9VJ*IrKH*y$E`I٥mU
+)ܻ8:c7h;jdr-B s%A&:c[DyԽGWJ2LL[	rhUuvn+A뼨kq\:MѾB.ԧHwN]`MD߂l#I.ܿKm5ZDSD[]%I%WAv:T'~:Ց?EB~6g^<c&cdNy9ͦFh1$ׂETbD?P2Ͻڣ6ַ-|tgssR/Ta$.䄬3K,d!=$jqQ{K 3w1R	Z8-`M8!* .ܻګDvAg;[kUZ,&!MrhӴCutjчVP^xȎbDzKhaP$+>4Gܬ2Tb t1^}⁁CVr)ňfBԇtHPP)ܪxZ߆tT: D:ժ( *I`1CD1ѳɈhX*T"B#8TWAߤdE5& *V% JKZ9R)CнVk4XdJ\K<(77s?wժB:I+ḾNLXtSw1@s1ݠbvBIDah@bsr{4l	p!M:ޢ&!Y-k"6Aku>11jA}ڈvP+UܻCnƧ\iv1z}s)==:4 Vd UohmVdʂKM!(3K1І-c0˚ǚVPok*xHb@aS,T+<b,2CaA'czˣ%C0'?*Ē chM `~6n'p9]JL|',XQ}\5AX03@^%1fYU_U}K,0us  7fG4/jZ,'qjB@viԱQ!megUX<[n)GkC^|8'[!&e
+_kΕ a,SԷ
+>w]x7&kqSh!\mSL^}:pShq}Ԟp	Z{صH&{!Мg
+ q-Į1&)k(+o+$1nRz;h:ԦKoaQ!le3 x|-BVCz4#CG6sO=Q4|7ɀ iQŇ*
+H]pXAAFO$t7#sͧڛMr4;@mx{QH`0L-[XNb9`$(V$D9t@wYt1Lj%%{;F?jL&1Bb 4hCQ2We!pNo!Q$Q6DEYOJ9H+Q.ܻVVHzcA^$WG|/urH'ɲ!T9v."kA(.VE`=ݑ%8p3cWI%.r,3u~sP[	r޵T2r-HbL==<sA9ذ -$كOac䮒]r-V\ww٥$\U
+:lR/TrJmY㠅,N[U%Zu.3\+6/m`WSMVzJ~=XcDɣYsyQYy-/4TG6䀋!4<.hg5$)BA['rsfmtBD$yD?f.QńdGv=xkV(K
+G"EH֭Nr?DKM?G"vDkG1NBԮ-HC10B##%{c4X7adgbZV :Q7z݈\X5x.XCI=JJҹQ`,6I!TO1%ImK<'LQ
+XF/J6$cR'6c+q-q_"ONnN	U$m%yꐒ|"^b?J׽Dd(H=^pR%9C@t3ꆲF}m[60%qn]KO/te1ietG!m[׻[A
+ U0(ll[vAYpUB@k)&b{K^l!ݥ4!݃[phdmﴶVm*ޥyAuYQKՆoQU܏TxML4j)΋( 6ǽ506 cvcFkoMjBIhM:w.pg	eP.VyR;F3'jI@YްGYH}㤍)"Z^B1аjhnM2 ?%#̗5Zr C#PP(m`I-o7qk叓:_V}]:k<lchRïqo5YL6۵rqVU7q&Ә"98;G,4) ֳ;.FjhqVV1H2Gz>o>tmXbPȰ.Fm=}Bך	ǊZu{m4TĆ264Y+MZ?@I3u-mcObI&<A`}0PB_nmoVߩgR4-y'DYŰܞ":/aV%|)o	:RRm%o>S>` lu@飷!k\\⒛~|o{PXޮf*,ݽ߽濯޼Y=vnaqӓ絬O|9̙(ÞH_v!֫0V+iXʶy#(/}
+ˠ3k(E0J6 U_<&5êzy%s}$C- 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.pdf ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.pdf
--- ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,381 +0,0 @@
-%PDF-1.3 
-1 0 obj
-<<
-/Pages 2 0 R
-/Type /Catalog
->>
-endobj
-2 0 obj
-<<
-/Type /Pages
-/Kids [ 3 0 R ]
-/Count 1
->>
-endobj
-3 0 obj
-<<
-/Type /Page
-/Parent 2 0 R
-/Resources <<
-/XObject << /Im0 8 0 R >>
-/ProcSet 6 0 R >>
-/MediaBox [0 0 550.8 248.04]
-/CropBox [0 0 550.8 248.04]
-/Contents 4 0 R
-/Thumb 11 0 R
->>
-endobj
-4 0 obj
-<<
-/Length 5 0 R
->>
-stream
-q
-550.8 0 0 248.04 0 0 cm
-/Im0 Do
-Q
-endstream
-endobj
-5 0 obj
-36
-endobj
-6 0 obj
-[ /PDF /Text /ImageC ]
-endobj
-7 0 obj
-<<
->>
-endobj
-8 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Im0
-/Filter [ /FlateDecode ]
-/Width 1530
-/Height 689
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 9 0 R
->>
-stream
-x	xeq]eE.VPY%UD", @@n@JSnz@SD@A"
-.PTV,nYgc҆	My>tff~{                                                                                                                                                                                                                                                                                                                                    ***:v옯333     :ݺu{衇Zj~*     ͝2e}wܺuj     ~N:WQF}F     s_>wܿ/<-Z4m4   ;;     [򢣣_|EwwF͚5իWBBBII	U     PW>`޽4i:~={>#KKK      7o޼[n˖-{'\]].\дiS//{SQ      `۶m;vdk֬پ}O<ѰaC???^߯_f͚͙3'55     p|Æk֬و#Xmϲe233[hѵk2     #yvYPP/='OygVZS     pd)))vJOOŉ=-[VTTsN;v䕡      Yqqqvvv~~h,=quu+**ܼy3999--X     C,ӞҲ)ک     H     	i4n     PI=I{      :9     :     SFUow'i     #^_˝      EL{juv      8Ry=U/a      R>2L.S>     PJUbzr     8R]	b      g"EO.      '=*ZT*     5g0Z1-Ѷ\UP(L;	kGv{#XYSI[     p{yMdarmsP*V1m(
-    4{iL&2'm{XFFxIBPպ2 &8lLI     LI$^/[rwgN.'&E=«a0R     3]4e#:>>=NIL`GvڣjVlC    )fY&I-qnYfkJzz\.X	%#Լ'@    %\zhM)iذ!i3/+5KKc@d2it3E    %\7K{qz+Qԍ,	x-	?H\)
-e9i     v"ݏ+J4p}̐8%).b+8ioA     tmӍxo.ޤiSF#/t(i     M%8(͌dݸ
-CIݻH{     ;zp-˽CabbbH{O5NH{     ;z}6CO.T9`
-Hi     v%/rZ]GJ{-Je囩Y+Wf{Bq-I{     +{8=Ss R)t+sǎiH*HPwxH{     + kNUGL{\]]0Q*Ck@*P*
-E%3ʤC=     AV*>޶GJ{J:vBW^gvjL[%P(L'*\Xf-ͥ=     uMeSh;Je#<<<x}Z)ӍMӡ&*%    hZ-Lb~rۄPT	5o6LKFXieM%	ToG     	UYLjESm     [nM%<J<VbO:(r\[    @=a]KR*m{\\\     @jVGRFi     :pYoݒ4Jc"     8ޕi#=9Je#s9     &>2Ź;`#>vss|+&     K+JGRell#VK     	Vryeqflc      U*:]q{pN.rx    Sjf*3bHlӰa:OJxUk     N0;\jsTa     dJ!DlRWFi$p      'VZmHm{ܜ\      MKl&,(gԹ\      NO[e:?utN.      g&e;JRP?ʊvӞ{Pz    %R)F*ʬ`oZmKiOq+
->XJ;     K&QOE#(r+EC     t<ZJg.      b}X;n#=     Zg===     T4,OFF89     :ARIӬz_t:iva     8H&yqssVV԰\=     dddӬ쥴!     J׫T*r`W\\;ii     p!     Dq{H{     @-P**u:Fi&     NכN%QU==H{     @\[!!     K[N.Q(U:=H{     @RTsGe2YF     PTGTtb*==     vii7.IM     ZAC     TU >>     "ۦ=kۣ'!     wNSUWGef     4\=     	0J3i     p&RCO.     hC     	m{H{     3!!wr\T    =H{*^oooR)t+    p!DL{JPӉ5    c5    "66\=@Y=2Ã    NGXt
-,    .zr U"=
-    \=@i\.זau    p4==@Y    p("    iiP%=    q{H{H{ʰT*oooj	    jԶq{H{JhpfJ%+C   @-"!l`0t:    ]"l`0    @bfH{    ѓ!    u==    @#!lKR	    PH{H{     3'    alSLB    v\
-
-    &miB    =
-    Jll;4P(=    B!    L{EC    `v
-    zr1niB    =
-    ԓB!    
-iB    0J3iB    NI{(    p&"PH{    жB!    g¸==
-i    8m=H{(    p!PH{    0niB    =
-    SLLiiB    Nq{H{(    p&"PH{    Hm{B!    
-iB    EECC    _?iiB    um{H{(    p&111==
-i    8P(=    iOq~==
-i    8MC
-    )miB    =
-    ?OzrP(=    4bcciCC    Ӡ'iB    NГB!    
-iB    EB!    H{I{H{(    p"PH{    ГB!    gB
-    27ΏB!    
-iB    ГB!    gJ{hCC    3=!PH{    	0;iB    NГB!    '@O.
-=Fq     !P )..NIIINN.((    $==JJ{CCC_xaÆm۶-55h4    LCʹ'??׮]^^^͚5رǼ<>    >>QI{(:;w1B&5o޼ׯ_   @=@
-UPPf͚nݺ=/ܹs\>   [{yG}FQ@Y|(&.f5tcCYnlPCWZ?JjwMMgXb<nĘbw}dS,B\)<v~%r/q5f
-˦GZkVmtp0so}g%q*JmX>q'h͎oz=r_VU ncZeEmVn򉘮4,˽ʭՊG.ظ2r~koLm۶/KOn0   P}7͗KƏ>PkڢL,^Z+Mo3qwqiFb_6k-0YSBf~J0}hc95cŕ 3<ӢE	+qYFRZO?c=}cǎ9   9pB~neˈ+L bz@ӿ"|w[Z\iGMJqf=Ai١=reWħl+-O@ܱ3;rf}ri[Kly32]Y2=ױ}-..G+0"qwOp¬,>   7|ݻ;I,,?Mߊkrү!C!ߚ)iK˽.#,MĬiY@\G:?-S0;Vx4i%G5}%߲zMA:٫/m,ր7{EL:1Ӛ7=xbf{[֛n\^q+6b~ZM+˭7+OMZif4{}j'o73}=_cJ;֖(|w_VZ	f.eڶmm۶|>   7'O4?/]tΝ;'gϞLYOT|.\v<TEŌp37=rOܧ,fvWfǴ<;n`+oY٦m,[nV'nyVZEoz*SKV6~9қtqJՏ%QTie陘Ukj]l=e-/O?{nRٹsI&={Oۗi4     N<ܯ_M>#z
-nݢ~      ꐛ7oܹǧE͚57o^BBBvv6y      ј3tuΜ9{MKK+))r      ꢴ;vZ*>>>55     4јC                                           )**:v옯333     :`0>QFB      \&M<C7^|[     :~ԩ}?QF}F     s_>wF=PF&5m4   ;;     [򢣣_|EwwF͚5իWBBBII	U     PW>`޽׿6lPPG7o^ZZ     PWΟ?yݺu{'\]]}}}6mwb*
-     l۶cǎ2l͚5۷oӞK~5klΜ9     KNN6lXfF!,=6\lYfffppp-v_\     pd111/Ν;
-
-bccŶ=˖-+,,<y򤏏3<jժ2     #KII	ݵkWzz0>>^L{vcǎ2     #+..7CӞ\EEE7o&''Pc      uiOi     @]D     LQM
-ZT*     vONWŴt8R
-	aVфKN85	WeBVgdd2     ^_ݥ\\ԧP*TǬIڣj,OC&U    Ɉ7jz[!^!nnn
-BNteT*O{-r\lcz    @ 81)H6Rjzac`R8     8Y#ɤ&f*GE|xU(
-{&
-    @sGG3'3@LVV=z^ji##<O    DTzWBE}d==DU#?Ĥel'i     ¸=NIe6Bb#)
-iL&    0nSҞjjM׋QlK[=_    `0d/'3F# eiP=6L{cL    )`6VY9%㔪Bt()BUړ!o֠    `0H閛=q8'=I5n6O{RT     z8嘺r)UcN.q{oooU&itVte    Poi;q8+ŗʕپ2C%<푢    e#nSѝ8m{UUUUf=j     +;teڣjiSP(*T&I#E=L    @E8RcHw94(JV+δVT¥"m,\-¾aKa/a4DsiҘ(wt ^5     !Pr\J{eu4x81ᒐVf24hB=ѕ<     c#K++ڝq{Rr	RiHf
-BV1-X9x     !v% )b۞      8^o~CEXi}/Fi     p(hޝ     }r*D     PFj#̸=      BtZ*>111=      `0j\^؇\      .##2QTn,=~~~=(JT    O*;=222[T
-?zj    sc.Md2V[.bOڃr/*R*CN'?     #l697֛aж֙=eܨ     ĴHWT\Qae#Ʉk    N&=nnny$uR#,t:1]4     mu>ߺ%iBĴǔBZ     +q-+GհaCFiFĴG.k0:     wd#qqq'e9n     zp{nTrdfXG    #0jZ.1Fi'E    @-*rNvNW.R((WEi[VFVSQ     ؐV5U{Dqqq=~Y^E%tss4p     :ث:	{ll+=P=Z     Ҟ*<ifz<<<     RZ-+q{#=<<  '==G-;vh%Trj￯uȑ0<9 z#zM}܄BQmOÆI{PU*J&Y
-  TgϞ-|ЯBM(BCiT56+McYLy]^ӕf)wlc#W,=y0[(XP+RQ..6~dux텗o߾.] pcsrzZxu)0n  r~u="DcRUo;ҡCÇNv%F P=]x{{+J4VVضŅQQ%Am
- 
-Z+2l\S{	mڴ/
-
-
-x/  JRtT*Y
-~\.GԶ  V\zu֬YO?ͻ7ј^c-[  d21hq$Ba='  TXXxȑvYsClI*5fB"""rrrx @}&6ݱ2j8JEv_8@ @-n?{l4etR^9PiD駞zj'O 942,.\0V
-i \tiƼm۶޻1w
-ܗ3{εi}s éj:R8~7fffжB pd:}m۶n_5ٚj^L.[JLtiY?Zbs\w5[PZD51QI5o3M4yw>zEay222ɹ*@  {HOO_vm6mG$uߍ;ޫVZn]`aAB	2i{=a!((H<ۀ ?'VzzzrX?C CZqYz6jcÆӧOo޼1lrG):sA۶m7nxP PT*iu^o+N'.,ضŅ  [V8qb7Vo~f
-=\IHQ#m(X@m,Sp6ӳUƵ6]=UK}rT\VτagRfrRV\~wOo8"?>hРGr5m Ej#deܤ5)5Ŝ\==  \AAN8p&fڔh;uvɧN߅R鼡VRX8r7FЕkK
-^0_ܹ.ߝtbߤٲLNUbaܑIE3-}CCC  pGf\V&g/ev  lڵkM-uTT"ׄD~ˀ?Grʺ[^H^v5pd
-.|_҅._ÂC~+
->O#W40MRM:ǞdnRR=  ^WT޿C`}/qzr  Pmϟ4hPN6>fϙ
-̘lŲS'o⛝_.FPEԓsC'^Y{tL߅ÿ?/0^10+=hv^-JIk<==C<PF>!J$(-CCC Pf`'! z
-
-
-4Mvz-<IEV%=US^[ŬOޝ:]c~=|uS*<z/>}NA)R~Lz'T:iX~|ϸj2m'"t˖-X\\̛ PQCO.  *)--m޼y/_`]g$fm港ＹS
-sj=VАEC%e<a|mc?|gȷs3o|zzvu=LM{Jht_׮]4l lKR'l2888++w% 8RioY*ж  JJJ<اO6mڄǞR'/٢y_l]WA"^/oTOJ_^iWoڮ|_yo>nliSݸ68pRT;]2ns{o[4ZnݷoC	'oR z[Z]GLCC n݊h׮݇I6qJ	=9~ړ'˦SwG"7O++~[-DN=kiz~c~pEf-Y<zkO>ٌG+roo &|~2i֭W\H> PISKKOU[ж ӧO?o*uZ=wy'7KB0N)z}ٵYRd^	:wGG9o׎%yC|^?u|j3t\?'۴i#۷Ony@-VZ(*MՕq{H{H{  	wͽ{޽{wk>REeS1ڱct<XEC&(Gl9	9NX(=shOso1#'3?Yg]&1-M{#0zpZH*mݺڵknQT½Ge2Y&!!! 1or͛m[I%ÿجu.9N?|o5vWy7g}2rN@c~-)k9CHx,l2ȧ]v=zسgOX# 3Q*fu:zi=H{H{  p_|I&n:HۜXb':)oukBVqMSc?#3TeVQU2z[&߫4Q{uڮ]^lF>^ꫯ	I##mVqHOO u(1e PH{  U"|i׮pfژ`$ܘ2c5..FάQ럝^Xx~uM16~9CVPAvC?2T#`!6i`ܴxǎuvA P?zr  ˗i9rژ'<ǳ>^_bv-*L[ۦw#doFnTDsF>awڵ*4.YT[^l| N=UUn:Tʜ\== h4?~_~ZZe&vm+W~$/ir+dzimO<бËov5>JׂoTLӌ5lؠEYq7?uܹK.{  UC ?ѭ[Ai/=ARn|ӑuIf(Z=x+'uyH>1xyyPoۘ`F>[,n۶ŋ(  TU'e%a srOWF'/ٔh#^{@]҉KLh{dq.JG~&Dcx)OO=z|4 FCC pnǎ`Ν;oVcȣIZ3rcGs#Jן\(-[2[x@VcF>^}Օa;Jl2]׬O=<<|}}/_ 8x!! 8^z魷j[Ig6EM:#JBa(fozF'|\7zт<4<` _k~Ů?tGnv-  8%i>I{H{  uhLII={s="&UT4I~kVlYVifE9sf|[%oN-3kadfN׵qo|`Ϟ=:2W~4 +bf @VXXx//Ν;o}<,9Obr%%aSٌ:ȹ8ϭ8a~:uD46/nO5hРh[4WS'FLϞ=;v 8_CO. @ҲeKhgصV.E1A`kj~J_/=sWr3}~:b7@vjK.
-dͯ褼~2LTy AECC [JJJھ}[mҽ<o`npЂWN7fF%]ٰG7oc{LCEs/c.O>_~%u3="! 7oܱcW=cOJǞZaJݞprrĊf͚~;:	>V/E9T}Gk׮iF>QI_~':u pŅ===  g4^j*OOOiv1Ѹ.*~s:p.J&^IX֠AC;3(۵}5{q]3y}F9gϼo_ ===  GVPP4rH{K6iPѸI_<}YѥۓWL[3¦(cn.ܝ>]H.^ThF>G
-?iӦ3fHNN...# H{@C /˫w]=l#6u긟~l,#FT7~x̿Dsj\6>b箕}wB Ѣoc֭7n hCO. Cxܹs]]]ZI̪9Eo]4-U*فMЦqzߵcD{7b']+f=z,X\F>;.:)ʍ5;v3gP:ߣ\.W*#! CIIɾ}ةS_%nN,L[	7FDdOqA5ʭ?xs萷)g}2pY}gN{-nixzzǞ{vݕ>}t5<<<??( p'##C;V*O2z#! PzzzHHHΝG`kP1iMg
-s߁ZZ1Vв%CB&1y*F>yהGH>[,Z+('O#  _llX%=JR|#! ę3gO޺u3D'ۯӖ&)gÊ	nhJBIjX\~.WVye;d'o8xvjy>y-UT[%+v#K{Dx>|{={zyyEEE ,..(fiOiY.777j P{}뭷:v~yneA?e@qnQVp+Ba-ײ%CvmvV޴ooVG'`BU-[裏t:gRLJ?+rrrѪz>4ݸxgWn}ZUl<-+'bK x^?x?;Ҟ;ed2j P=jYfO=ƍc[`y?g-_͚:y1?('8lauzǍys}TKMͻ+߿並ҥK6m*|zG~taEKTq+spG'|q,czJ	l-Pɺ2=Or?>.RO.aA)
-== *)((ؽ{ت'**jcNiĒq5i$0R֬<qB!CMrJ@G|8ZrTd-/5CmJ4!>{｣G^>
-ŲFO!uQ駟k+R(Tii &Ν;'|o߾BpN{BF5cQ9̺e`kVΛ3X?ۯoS'ܹUNfT[8/bylӦMwkVޡ!Æ4ioRvoʔ!trs=v+WFcIII}gW)M{r	oOm_'! \ffΝ;tҹs7nJW󞈤J_nW4`=	MÄwzw|άK|Ç&+iWW>gO^MEJɸիWFW[q۵k'
-?WJJ*/]AAn  l+55uΜ9mڴ7n&)~Sqmwão߾[lX3=rr=ypdʹퟏ=%4phf5j.*>f=%
-|ᇅ)|ԤDQO2EL9s狋o؃4niii .u_}զMFEEmJ,ST'ˉ60Ko!<zOЭ۶^xTt_ZAERhz<==\{Gs8cwKTKNPlԽhq^xɓ'>}NIm{*3J3EC ŋo~̘1}ҞJ\ܹСCicr7;ziÑFwݶufnfg\\\&}4({w~}}%;Z8ꫛt"άk$Ŷ%P?X)ZI{T*75IC *јj=zPo>,=_icy,	wz4qṙo6dFnmoB74iҤqA}5|sbGyAF<<KCOǮ룎/}'s	96Q\gVT2$ii z.]4qĦMN4Ip3ݚRt2hРhO>60F{>W\9K|Gˉɞy2ʮ%?{rDqt}SO-RE$PR;!۷ӧOLL 5TQ0: Pm۶m{;unsE&M]vGj^6L\`ز#׭hʥWQN|F/ue/Ν;_omIʯ{Dxm槗^zٳg 7RʝQݎM}N
-[5pݻw_Ij' @;wn-Z<x&1Nig9\!%a1}6Q#3/GGNN[32T}^u<}~ꚵNd?4;v]zw_yê^;m:~%1bAJ>wB!2rX5l~kÇiv>B>_+fvUܼy@  *77?ݻw^¾o\Ǐoժ҂5)%yAGޭk'f]gQEv5i҇ӟu9Zӹ4h޼`obhuϮ\K-Bxv/) %vx3_r|h߲ӆ?eg<iXӨS6۬lA_N<cMʨS|o5t%<<֭[ж PN>=sLK]'
-9Tcǎ{jX׼ [ڶͳ鿭Wm
-_i&NSF$װzxM{6DW?ȟBOi}ׂƏ;~\B`s󲂄&jpNfPaNrnE^wd͐{
-<y\^D&oԿ^x!  _ ,pʴ=== Z$|;q;uFJ*;vl֭m`.0ߕ#0'ܳOUQEv齕U<HC<PiBn9R?BԇwzjР	{Sx+d=[|~4-?@i)vl[`8>o;o+Z[,U[%?3ik#VEW>원Au_'`]|||ӞҲI @;wn޼y:t5j&1+ݚĝ{ｗ%fdU~VzÙ#3REv=n{KszMKꫯ>M+D	Yyef5jXKtokrRSCOIV@?+/mbE:WYx_jf熔UzoC]Yj`K#OCG/.\ٳ*RAC w!$$dFْ?f̘^zxRD91oidRQMI%k"b|IKQCwGWﭨ'NlРѼBɽ2^Nwe-^N݌ravNyw];>݇+?䗔\]5y{wNx\yj4_h|i	9y#FO:ĉ,݃ZBRij *rҥiӦnzܸqĬj޳:t:thn;pݰaCv:so<{'f̘W۵F݅5i҇hJc[E'A~q߆t;=o=qs])]E˳҃
-n(}3mY[֭ՒC%F3gNǌsQ,ӞY޽BSm{k@E233?7xUVfcn{
-Ǝ/>{(=_~^zi][#[qev뽵^8~&M7nooSU+?WˁkS&Z~т۶)ɻݧ}e|o}۽Ͷk>t:,ʍe@߾}.ZdP1zƌ%&$$ !! p(·ǏO46lp&O;v>|xM&8h9s*e˖{Ok8VTR͚5gΎsGCǍ'!OO_y9w]TSIDDEiJRDAE:
-BoRSiI"*`wB v׊&Bـ,.~瞜ɴ7o̗{q7ߛIW9w64$ӻĪK!elXmmmۿǿ*΍p˟>oo\ڈY /oonw^NGXmRRRh[[[S*ǱclOX= l  hhh000M9R^;;;zoH%,Zgwo~~~!!Sahzk]zîW|ݛ͵#A{|.dK{;hfT=n99rhƾ{k"={;~`8;ٻЇ36)<.l'NhllY =! l=  ǣxڵǏwrr,ƈ!\sSMMmŊ_I]e	13?SG_ۤI;XWPK	ƍndҤ	ӸS-.ٮMl];j>vt弈0}9ݴCbG$z|Хsn_kNrq^0P8ũV666)'	`QUU۳gǏanl Xrl=  *]CC<v=EM)ޜ|,%%-/(yplѣkjj~Dy@zޞSWW5XGv''N,."B<W&ݾi|n]f5rZo>!Aε	hQUPv/t޹3[ۛp[T'Oy-uժ...CI{яxʮ3f褥{W/%= l  ?v횧v=/ɇKAk>2dҤIW{y&]fa zvC\<Gh@GlOe!\V4_y&ڣG$"2[XG?:inśMڈBV=z =cSch2'ST=`{@  hFw!~Khoo\r%qݫ"B:Ϙo4hTiPA{kE.+3GEy*:ND.iڊ26}/5?~,Ϝ7oQŊꔂv˲'OMb҃6;Cv
-O8xp?~|blkqEX?*C./1\5lL}K==aͫ*ݏ52>v>"G1pܣn\b
-Q|(9sL2%88Y/f`{  7ܼyCNNnժU=/e˖=h{p||CNXfzb3Y35Jf֘|67o4d;ɶ(D^NhSOw|MI^n.&*Ɂol2e&GRyرc$t!!!CN<cE&COO-XoTK.G-VTU$<jQ8
-~u纵S7%&l\dĉ#lǲ'Zp烌/н:l9r oW=MLLz>1|O-,,;?880~b\ l  (//h:::gNOOO)h{Ojɕɯl[c҉\u	sƻRrubѪ.&<ۨsp#gNx1ɥ9eЫU'9MIάՙ5bPڱcd*[(?		+"\YPnmԨQtdYYYTVHoKV8=]%,0}\`.3W_w+BtVŋY;{TlRyOL&SCfׂ"iŘRNNm۶Rp?1\ l  ohmmu떽=̋!|Phhnn^)K3'xVWܶ r^yh6VMܼw߆y!f{3^=;MRZu#ÇgsQyu^qs2ՙ_`N$z1sLtfffOVF؟/))r6mZljw:tH"")9.42axl.CM/$o/8Gk>B9D$67ZX5߿I2Lgj1/
-^T9k;::)l=   
-
-X4._\EE%=='غVWXXTҊJ{ؚe܃yM]HIYi<j`N
-Kw0c\4j IIe.#}PY3z'ش~nCU>!
-9jQKЮ4aaayDR$SSS޿#&u]Mjp;;lk߹Uv/N8$lo_b?](HX]+ڹy`}&i)AK,ٸq#C·RD^nە+W`4``{@  7nprrRPPpuu,#c***ZZZWl.=Z `]NxyEi}]c?y|2
-LL\k(pΛFrpp1/p,,wp=6<x4(dZx1c/&J:u*mlm8ijL}~Wx~1
-pU=G{1OO`$\o_4T#wE4ۛpn'^z!g^p!2˾^@A{ŊgΜ3LC l=  ?ÇAMMMUU5))l;-򕔔.BM^+yS"7TńwbP:mI&d']cȡ+FȟODQ`LRQ	#..nL%PxƖpNm2{)SPn	X*v[I֭-'?JފSVɠt2~Q.;ob7/b./G|'}н|=Ю'-Ԝ#g:߶}ɓ,Xpȑ&l=    ,|ggg%%%GcJ.h'ʁޔp#2VbcPb(Xk+&&rH|i&M)oFZǔɣ
-EMrC=gq780vXnn-.w_jǏ9kҥi04uD611AO{=wOu3_eb!bFhş9$.>mɋ_Z܃;1/FuhCk?}[[SI.H>amҮbCUUUQYFŀl=   -޿㵵ON&{[%f劊T͋Pc9vnBCtPQmvn[g*;`<*a?syQLMUe{S>	-͎AdRW%//O=7go􋨨(Wzĸ)))T]`w)͵WcMR{_ѹS40ikzq`e~dUk\8Gpp]b~"la***3gLOO0u{L.`{  [455;::JKKfT0QAh6Turk=us*ˣ{ܙ2cQ*ʵwcKs
-m5seAG{rkPmkJb7n>ǻўn:%$$PnӧOnKM2dȤI^JLeƑ^wۛ >ֽ*Vr_Z)%Wl.]J<D)ʶz4܈Da^ 8`{@  UUUAGGg
-%/h --a$lF/[!!>MJ+ˣY闦G?-X Ic1lRY	t珂9/Y(\#PE1eQO"6AFN78@'D@pl:w5meii~CyqppU-L˸Z?푘4n^o*F|2sݯ}koNbggCbffJnwH}	h>}z\\܇v@K.`{  g;::JJJgޓRN؟rʎùӊK.V}YҶ5V8;NԘ(7mܮ(s&-E
-MRt捆f[[)*Mj]#rqqF.jNdw=#ɼ5=tĔu	I<<\eM5?͔Pakkť@97.H_2~s޼yǎ~zU'< JF'o0c3Ū44nrWg$BxxؔM8"n_۟?
-4=l=   ~\3fPWWGԑp:OLLloNoڄǥ;()n3gϒ3mܴqS]m42ަu?R˭TUħʊ(*ʌURsXF^t΃K)o2|thIY-T%X}|'A|ٝnoT%UgqC}3]AAz6+2z'i>Ǧ08$ޢCÃ[?B>I[addHFq?g},,,"i7C鶓Hϗޱc3"//`{  *))yzzbޓ\О@;!%%eoo?p^b]~J:fyo@u+VP.`-#$Ϝ9fffz ۷9;9.4iN;w8<[!z7wܝ;7Hq>i씕׮]{m7\ l  hoou\\@*-[~nPUicc&;L?v7goN?G3fӦMZobHQ"""\\\tx?JEމ
-_E3"V}Jmק'A-I=CXzu~~ϟa%=   
-Z3==L2eٲe@[׋SZozs49k-hɮ\H)8x~
-sz
-~l޼kl_z>^ͩ5kֈ;;;?	l@?؁  0 P]]O>{촴4{
-k-,,TUU/?C'{j\<rss		Sح55>ml:<{d$es888\Ϟڶhh=<IK,ٰaCY9eҥK=6=Crl=   ;88L8"zOZa[S666^*2'''G=zejkkƍ-;#=RdBرc!8M-?u2صKNBFj3D\2$SgӦMpz?LK.`{  0 ͛MMM2zO'SSSEE+A[[%WRdddlYX˳q{&NJ]]]BV"=)yR~"5I!A<sY3UO۲*s_[#z>C?~Flj	94*dԩ׷{`{  0 xU;;;%%%wŵvl%eUWWG_p.n"""XodT٭r2dѣQKJ!>9fdkk+LկSy|4<,^6_MM9!mkuBW}%?-,$PU߿ }\ l  @xuBBj\\=fff222ETx0gӲ444vyYzQeeeeDHT0fG%@zjpKe'"6[^읖sex97n~2?|R/MMM-[!sO%3| }<`{  B}}}AA2?:kWaEEUV
-S+RqZj5?{+hWژ1cPn:::	LK(WHVVV\\\
-
-
-Q4YP~V:	^w9w
-
-/=7\/Nqs]bŊx.9;Ĥ###?~9 t{   `x̙d2G u{:Rl!HR3OkFv˴]V)=fL7uV=̇.k'f=Q~ZZZ|||F"Z;J[{#F٥#Qbr:/AAAvv6`oR)nqyZǳG1f*?583Χ)k׺9%~=:cbb毰	2`{@  555){26s!?~Xwyߊv͖C2ɻ̐zѹVlaa9fu\oEVkw]3p	<<<:{PăӦMCYM818<zsmQB&?K'MYz{ΏoKJ%W/2|}\#iX)ڕyxAA6ܾ}|80b{`{@  o޼IHH@ӧ'''SZ	"|2/~,,dHmRO_Iݷ]V]MUj{VJO*X׳BU3/e_"(j%$$ťG<D)c) YZZWYYt8{XR5ss]ܹ",<,<ԡ6	Zˌ`_kk-[P/aᓏ]\\.^;?g{@`{@  MMMhmzj=  .~8j|||BBBhGL0J̌bXoWV7&%9-Kmq&pGz}*N*f]`J>fC|YK>S<b{`{@  >TVV1cC~+)}[tX$oڴ9Gbzk HCuRHJ^^5G7TWdh++U+0x(SfZJ/3>KTTuź:ɓ't^  0pY++qƹ?%o{رc<8sL$=䓍QArrrK#%z{-^nmj"ɑ#g|.Oל:a+P?D2vppH@3بԖGǎc=l=   H<~866V__(--ZHg}*#G=tq222vv[I=^jϟsؿ"UtNKYjE&yd4PSSSOO\<VB޺uqvvvee%Xrl=  `@vvvP7B!++д	d$___`5PӅ3TTRU&fݻ^|)dƌ邂Zh,-Լ8333GGGDj)Vzzk;455g͚E$߾}>_=`l=   gϞ+)))++'&&.j_Xotv:t(͛Ga+L>Gihh<{K3N.Xj6&-(q?JB}Eo|_ `x}"vDН'O֎e[[ `{  ӣ	-i.]陙Tu\ؾ̳YoT̜RcNfj8{kgh\>}|kTScu+;tusOw]tG#im\/N133KC·vF9s455ˁt`{  0p{^x(''iӦԣ)w.rphby9rEt[ݧev̭'}zdmM]+کqy&&&hSSSKŢmv--->>QF].$@Y3tދ6aV[|pV.w2po2QrxEp{/^hѢu|s$%Pл%((he  `{@  Ξ4izu|}^˴22ܺMg]7A:gRwk_X~=˃O恭"Ґd7/g怜ˠ{t6:o^h~kemm@FN/jnCBBFw}X :,  0~=___c._ˋɀ?̄lIXzywWoeXvοs [q_qX+ɂ.՟5yiqؚ+Ν3i2VHy;דfq>>>|||622"Q[ؠ'LJtDMXi+|י;66}}=<<dwZ/2iZr9͠kZ3\]]䂂wH|]}%%%Qׯ_ojj  t{  <QQQhK$k_p8gϥQ4|WZBz
-6_>hѢÇZ*=DfaehB׬Y]W	>R>sXeߺGM
-ؼtK޿<vp/|Yf͞=t4吧 OWWWKK+99Ǐ$ n=    ~<|011QQQQEE%>>avz
-pŋ,]4$cK	]G͋-p {Zp^Hm[c#Q鮵^KTe~}ᬟX35=-5HHHXYYQ
-eϟwrrRRR>v=n4l=   gϞp8UUU<zHCe0?QFFͳ5Agɝs.̐&5}-?ZY	N[դ'LwzXLAcvC<.qϞ="""~ڵvX `{@  _P(,PSS?tx~-))99CI23!+QNNMd kW§OWJ[U:?UUĞ=//GWRUfIHz`&h~%e43f۷nO19""BCCc֬Y)))ϟ?{,  oQ]]{n]]]޼y3A 2 L溻
-
-rrrΜ9  ɹx4RlvLǀsg'N'--niLttezK'N+;QK;G˽*	ޘ)++kmmM)4.0@VVV^dA = l  pLMM^S(!,y9|p4	N>=KCnr0w\T҃{X{ 7UiK^edo7oyNs7D&86T'JRS]1xh~e訪BӞ;Db6NMMMLLlÆEEET n=    =jii)##47y@T?A"GSo0\\ $$$J|i&
-?KK=jU6T'ܹf&+;IC]*6gU
-퟉4e_<v?q=GAZKKp0;Hhzzzן?K0N``{@  hrJMMM''G~II dK;w䔑LTrlii]qqۚRaosPkB}*UEEԱmJcz8.5ח+Os=-<<|ԩK؞ƕOPRR, %=   ~8SWWw`~(]@  |@dd$h7mJvvv2dȈ#jkLuHWL׸/@'w-26RV		q\3
-<zR>>>AaGQs|Շ+V())эi\}HRMLLTUU׮]{zX< 	l= A¶6x ?Ϝ9coo///omm}2+Қ$++1f̘7Ҋɔ26SǗGyTnhބkkNو~Z]C].huS}e'''.53{O>/R{ԫ丸8I&gϞlXrlb{Z[[>}WZZ/s `<W\Yfŋ'|T*<XLL+=C} M///@HWҒ=?vL<>:4|<5/\S9l~6RBCC.]J6YWWWuu+Vepmm-,! ݀a= 24H$4eeeѓ @D]]]qq<Z'߻e^@~iٳgߞ=CӢ iz $$T~%v,ٳՃvl˧FN*^uŮysUff\f\rrrdLGPYׯrJkk+,$  lO455=zTOOOLLLCCc˖-7nhll: 0PP\\'OFW
-|tl>YCXYC1;3/ؾ2;g.v[䚭2[2zx/g6lU矘|||hG700@3#777i)03C
-<x]}U&Id[h恽y/qZmvc#ǥ!OvszJ4ݏҾ}455UTT2221lW}%++XN 'K3=8ǏGG[ŉ'I^ @?ׯ_PSS7oB{B:0̋V4kϐ5UyvNeO֋εbˍ5u[1Cj+ڷZf.&Lyy}I?2112de)">VV]h+.**n>EhS&KNwZm֟k]kk?d>ECp3e˖A<c7xΒ֬Y3mڴ9sdeeUWWÊ=
-
-
-o=3KKKtuu:YVV߿^ @ZZZ3fHHH<ϗիWlݺჼ7or{ۍE[]P֟93BzRJ{Mڿj>m-fKBV˹7g	|||+W;@(<|L@@{ѢE:zGEL4	MK, K;-+z"Rb78W}GIb޽m/?X3eddvI$fdd~XNB/^!r]ug#n2$lX_ҲFfͪsd֯:gBUe+,fYÖk{>֥!)_	yvJk|
-aO_;8y`)vyw!_5[11[`|vٽ'l݉8<يfla.6bklc[[!(z;v񼼼c@p[0u +++44M"""ÆSWW_nݓ'O@ WxRRR***G~!!n脅U}<[6\qJçB)Yl///779spX>]hF5k֫KK}31Q[<T=4AZjPhvhBQRRJOOÌ)Q/XW =1bĤHL>'Kb#dFc$ga3CҲEfd#ɌV1pO9-k#~eKetAF [a>ou!N޹wd;Iѹ3wk܍F+[u;l2gql!gĔ)S&(yfadO0aԨQ|||hciiyUp^ p?{,..n̙ӦM%%yZZZr`-
-ڵiV-zgü<[[[4v8|P	hnSWWӌ/x?J>ZdZo*|8	~jUhY[[NΌ;88安ɾ}>|k@@݆cktf|ם5[[YlጯT9ց5&[ߊй8TB̖9[4FU\xBBB0k0`́5CRЧ_`9[<`@BY2K1b[4Frdee;a؞ۓe뺬#s[i,>yuk\leYkŖsغvѹK=YFr~~~...NNNtm۶x ?
-h!'0sL4$?=xm}|| r(k_e^ȑ#nḢOx(	MtQQAynm]GHwۓڪ_U_E?KVVvǎEM?\UUMMM #PW5e˖YYY-뀥%X[[/c+#Ɔ+lDV@׌`0b gDfDgZmM1g~gfȌLˬ2aT%9>zgLh3gرc;S! xS磁vڧhL =σ6mBYwwGe=IWn9994ga~pCCy@ tttPYW/%i&{)]q!ٳMG[XN U?lNQVVNMM4.		Ao$}}gϞ577b(//{'OPxţÇOeeekfs`TE>?f&շJaʤsYkeefnl0~b˳s}1Ȯev٤=<;"e}YkîՓV&r݉qlw:
-svڧs2n'Zg{݌TCY۷oiii;v̘1hܺuٳg= 1޼ygϞYfiOK{*@pWW7s& )4hƌ#OS\___	2\κ"9>HO̸BCCΒPJr<eD,,6    ݻ8TTTTXX 22 !!eggիiP<ztǎ&&&hm\|غBnș;wAP=pL>e	&l۾N`L;G\x1ĵ5ތcԩS%)=S322%%%]\\.^X__K    >r䈵)S
-
-
-jkkA {՝:uLNNѣmw'**JWW#?s/4t곳#""mFc*KHH(3{jkkbxC111f͚9sfdd{`   h+--Fo͛7>}&  ~jkksssW\)++x?<YYs̱:sP{3h&nUXZZ4H\\@ ffMǮ9|x׮]7mDe=tPq{K=HH	
-
-RRRBo3DJVqQEիWO0aҥ{E+ޖX~    g鲳ĉp: kcc#'N466=p1+ybbbPmk,gg!C1",,޽}ᓘ8%򀀕3b'//a6HR1sʕSN`{WZZ竪`   ~Y__< @ŋJJJ-h޷j:p ΝEZ[S[o&+E!A++'NJme۠AlB}ⴹe2#  iT7*jу݌+t4(++DN㢖h;wjhh7@hha       tuM6miiioT"
-ĄF}ncWMxwOzg1i&Z寒`??&Ǉϯ>g2dȑ#mllRN<-p̘1K,We۶mh$bHΟ?奢x}~"       uuu%%%k׮щ;|y22Tq|||S݁o]=݋,1nv{RSi
->ro:}={AF)I1$*xԨQ8U>d:88cww200<y2zۜ>}       WhiivZ***jjjڵcNNiPNfe-]TMM-$$/>1mkJbc~>+j:Y4>MkWyz"|n*,,+jDލF1*s$L	111g͚/xx WS4*++]̸(+۷YOEE%00%       ZZZ3f̈<ѣVVVgώx,/}-Omӕ(6B<SǶuڕM|P#>1~_>~+mM8QQQlllpHImaa!,,(YYYth{K3>/MӶl"''gnnr~¹s眜.\+X        zgϞ,iiimf_]>rdʕzzzr2~wH_T6._㾨ho2w滗_3ST*S{~LNLL4iҠA,Y4.n
-
-
-ikk'PciIM)'2NWSS{+K3tK_W>DoԩXugnQTTtss;<q       5>}urrrssh!~Up͟IۀQLvshVU$1ZF>%  7_	LîuI~+7~'{fnU?'|$%%N׏#.Qn=///*ZEE%!!v~&*kʔ)MRZwƤu	p__+h,d="vl2)44MJJJhRq^\zuǎ    ZFz*>>^OOoԩOσýsuu3gϣi9R8@mܸO~dr\Bwn0Vˠ+/UHHhOٞ7wn_O>ABB,;+qi	i6րE?ґUTT[xHRG"v0#GDE+((Q"|(exr~֬Y,qqS'݋WbsmBK}$袽9\}U/*|qƯVW<gz/N` %%ejjz]biªUt<o<"s
-;;;AAӧ_p    _'J544)sՑ<ݰa۹`rԓ:emMxOfuk̛jRUY<FI[1Zd68R+;'qF?sA%2/o	I&I)J ,%&&1.?|eW,kfx_-PQmjvNN ?LP0*&Bub_>9㑞lKKc%6ۃ;͵	d7
-
-
-[lҌ1)+))?ӧOV|ǌǇV QQQ`    /7oݻDNNɩysr6mڄv666%Wsڛ(O|Bh#dnwr=MYIΞ6lXnN\@7)ރ1GʰڿKjm\84BqD"U9/&&!!!m6U	s$SSSNNNwHK	\Oezݧس'[O+5855&fRWW7/B蜞ތ).1{>*|Ӳ=gvn[%1iaxʍwȈӦX[i\T*s--N㢳=jjjh~ΝvX Ś3ϟ_RR	    _޽KKK;wͅ={A{U?500/,8ޜ6 H)tWC\XMM+YQArOyTiApY7P_I_n-x#K>O&.0Ѯ BoɓcNN@@ĉZ7I@T|wYL*`uvJFzU	Vb"lZ?@_zhOe(7TШQdMݧQsm%ts1Y4:ǫn3}ʌe703ڌ͛7KKK%chu|ogg'!!h4Sy󦭭-_PPhV    gZ1VWWٳgѢE:yyj5kI^~*o'pss1`M	bc\:U8Yj[/FM,z'ehQUCRȠ~IO("23:SWIЛ<ryTxbY?~|LLL1srhCE11ZnrˋOƯfk1v01"7moQPSM<oioJjOy<ÛF=Z gB`fA4;捆L#T`ΟY[)s]H(a}ʕ+edd6oL+Ќv<gTѬ@ؘ!+++""; s    Ocǎ-_\ZZ}n{6;;""bƌ.hk?mX-ϩעO=2Nz'npac$.>K]X6V;nð+qw}G0l3=e!!;v4deͰj:p@ srr
-888	RLM(+$TJUf"Ϸ)/CCIQSލ3Jϰe;xt;^?,67*/'z2o纯q^=QV§kN*.s-Uq]>=y`Nm`|ޜw^}}}]]]GGtZ1y۶mh,kii>|ϰ7n033522=zСC]\\P     ?***N:eoo///`	<OcVVRRZ~uJܰw .wnGݔt[..'ejjLڿCsrrko_ǩǔ\p＠7{44+ӽ=LF#)!EޓL*888pss5c_>тt{2<vEPAE{bE	F9r(wN2ՙ,>~<Ç+ȋzy=
-bKg9dTf1|5j?LjbFJN}VԟiӸϟG$̙3SN511ٷo߫W`9˷l2qD]]q	ر#22RTTTOOӭP     ]|!6<<hK&:\o.VM@qF*(xmZ}etͩ.΋n$jO=|,g;JᾌբPit7ojiH58VkIeQOOO^^aÆy{{gg@KKKG=gȐ!ƄD=vԛѣG_ϧwQ.N||C-KIU)y0ʇ{3kN:NtqlHom8ap*sp#k"ǥ;L%5J~b.sٲe6l\&QbF={6*YC477geeihhL<9..СC'$$TLLlV     \!Z":u-uuuSSS{e3fDEE5de7R+;6Dgo<~Ȣ*q֨z35esk܈4Iz
-S\UVPd@DA]-W\:74|~74xyyWp{㩷1#|nBcB5o޼W34~ڐ֓Nb3;E&_Elj2rPX]6?N{Ν^pĿ;ݞiToeJw.1AMfM$??w'=uhM$:ZJ\"͸ݻwTK@QZZb
-BGǏ7nСCªp8ܔ)StttN8h1     0??ݺu***d2<hydEfttt}c7C<y׻̗ k"XP@A RXR+J#B脞Z+6P콰]40
-><d23drUcnϣr֐4wIIq̛7oƌ53m9s1WYٝy8'TM77SQKK^glFƚ5k~QF܄h888owoD_+9o]KSEo{xﯶbV]=__٭(^:RZ|W^	F̴Z]w~</dbb̨lPogg͍#bl\"Qxniiϯ9Wót즦cǎa=lnnug    UUUv1@MKAQ]5:rKƍwdG9oj+,옄ʥ}<Õ7^],e@=,̿cl,;@*%`^'L<}/2|B*U__uԨQD!? EHY#C;g
-J3LŞGw]4[^݋m1yJtc=($8|92ChnX~:7齃x]]^ٸbocccՅ"//0?/_$999eee1ۻ!;; 338c    0(/((xJ	gŘ4
-ECCCBB![*"kwNjc3{;>3rSM'Dee	[[[SSS@lnOYHCiGפ;;kxVd>X'yy,|
-_^nĉ^P|pfy$  %((x-txH~;dN<k5c~vF)V֎,իц!z"%ıY3ODޕh1#镜\V033zW{:6mf̌:786Tf"%$$+WZZñ>Ș+Dgggtݻw{֚LBƑ\---=zӧN   /NsssAA߿Bm}&
-rrdee5mvuvT]YI#Q<w"hXE8`kG%QU='!Ω+h~:el^LLL$ I	S{3d{iH8r*))y[996m6cp...B M0*,1XXX틗و!馎HI=yl׾]53gtLz5bĉlǳ3cGΆ^۝+)]:-GoPxtו8ZZmOޥbJS6ZBx8OOOQQQMM͜u?JnܸGIIH$_;󹳮#    imm}q@@K=:g>jffz<vP7	8qkP]E]wJK	n63 DکH^?o:z?6ѯO1zmnɐ!#=}bbbޡ˳F۶mԩSYYYQ o߾@>(4FsI>1Cۼ~yX᪏_Kf!.6sKbbBÂu	Ĉu$7dF{85+t׊`v0{ЃanÛUVM>}֭1'od:***    t.))	
-
-Zl35!zN$>O371Bf͵O8qBHж^D>FzwNXMؽSkasmDgGQ]hݵ
-LLLW/yU2TDg~ϟO$NKh4Gwqq2CPQQA:uj<@sy}usaY3jUK/ޭMcYɡ4TP:Ʉp&edc̀B,->s"*,M4iƇ>+**{oJ}{dYYY7n455AoU     ~Yڞ?"//mll@xuV			##wHä_p͏irMMQF+xyS2 <tǇ([H5b	<dU)aƍ9gM$b)sLE0$C)U RxQ@ǖd|gϬYܹeB^V^=r=ScM;EWu̮g4׆1K1gάE|bk;~AP6_q33̢	Fo"2ֈxV^^'VauxxxTUU#""|X    _={Ŭ8Kkkk+++kffvh<wx? %#F3, ~0rb~mJ#jgZ̘1?s]VWFI2t.m9sNJuuu?~g$Ԇ=7ڸ>˨Q֔'y(}5eIq|1gDWߕxזvu#Wa^ՙLen^sR߫TYY,2pCrqZs@a~兎|qYsuK](:F	l\yyyk׮]hΝ;cǣOwD"QEEe޽>Grasr	   _7oYYmd2<4?ڛcnC!?+]8{ADEyGr-mnps=}.z-ŉcz8WCCyĉ...u\µYY>>>X)SNDT'1`aaaee5444|WyZY3ǬiS-]`i$4H7)89$%a-3VӲ9~jq-c˥YiW/ڞs;z1RN4z:v(}]ѧ[ҍ+pOfΟԭB3_̞c2/OJt٭F}NiCveDs!1DQQ@b   _O>iii	oذ\ffSJ
->{*EQW[[;;+1n8'Lgn&ҩM5=P,&8DNI7>2yR(0F^=ŜcTges-dfa&L~z҉HW
-llllVS]KΙ`k!db(}<oÑgHok;M{066&NdCoǖL<6O18
->l+zFPsmZ>	Iq<ct hG6n\`/z>ȑzU>J4ĹJHH^:333aƅAKKKtUTT$eee]      P(5k̛76SSyP|rmm$#"¬Q,tPT~wutз[.Pų^fMAY!_˺J"c
-нA\VOk}5ƍ)zh	++mll$aaa(DaUVsDkk'233khh-9͆_Ͷ^t29.%EeHj+m2
-	yē8(E ?x_ynvͲG
-3B|n;*i<wouݻrqV_LA[=fǪ4f]<\iRi{C='>>>'PўǑEPeeeaaa33SN}	@r{Ǝn    :}BSMMÍgg.##00P^^^UUH$6ե@xNWuYZmKj"겈QgN7$P{F P𿷜bc+eQF?=ݐN z#G	)b	NNN&MBC;}txTW:Tcϧ7tU$i	ވ"wWևvUA]#t 5eՖoB[#vFEEwu{G\re޽\\\<<<nnnׯ_ommi   _Bw[.X _?%E/^|y@@@]UmrÄ%zS `I	ak_Ǐ1bn1eޒ|"=]]]YQQ1{kff'%aKJJ>>
-[_)//Ge%FFFbz5̽=    ϥ̙3;v쐑QSS/iJI@__=>TZbiUpշ׹ppL85n!o.*=>᠆4ZNQwiIMN^bĉGdɒQT|ƌLLLw?7n_^BBb׮]7n܈y2Pc=|||FFFgϞa\ ϐ=n   Huu-,,xxxsrڣqy9TeC?z*))?}0i
-UٺVjk̎A99I$|2|rRSQʊ))0me2x0,$t#~lѱ"Tٛ7oKKK;99]xqnOaa=P    ~
-ϟߵk??[ϳrJ111779*5Ն7\c 3rpLE|T%'Nd/-ֆ___ԽHMNmINKOdeeEFmg3|E}͟??+#>}ЯSWsNNNΎUa8׽'OjhhL:UII),,ŋ;"mo?~8#     OZ[[]h"WanQ(+WG?V)WU2wnlohH$>ɵQ㐘.R<tEGgemڴ	+`7wĘ4QXb
-FR}~7N8aNNNsskVIDl>w5khwA	х`gg6     ܹsSNNNLLֶF	>;EE;vzPXȖL4/\lgHMrEx,&::=&çF۶mɓϟ,}*!!<k֬أ^%q!Нqٲe!!!WWJII۷I vvv,ÇSWWק'z+CFrH$*))K   ill,**rqqYx,j9_hmd2>T}}}qqqsۛ? yƛԶXڶr<SwݶemKL-$'$$>//odddkB>ë;v`uuf͚emm}<!LHD~HHf2eaGCu<|]2=	]+VHKK}5q+]EE]޽kmm@E|||z|;x ,,,@K(ʷǒH$vq#B  ´777߾};00PPPp(O_ 'HTTtÆ7aT}U`r_/BDo7RVn/'#=]7Pkggnjj}0@1o"P>1cvﲬ	.3Ɯ9s/ g}IE
-
-B?~ܷoB	`A6r{6XH `cEEEcc"Z[[mܸVaN{ptA:gϜ9Y\p@}v5sBNQOG*=ys#b&)Lȑ#YXX'IbPଠ ""nā+SXX9k֬3f8;;_vFr?Vc^
-;;j:pv{(
-6b   Fm//ƍeg7Q(x<h4yyM6J7?E6y'<LMVHX%7i)}QV^=rHٽ{wUv6>M;=uT##"OӈD==ѣG3p]Gx{{{eeG7׉',--_|	q?Э]]q{avY`_  2n[BBj׭[Ԓ>_{:gZ[#U7qs͝<ybg<xM=}2j(ssw4H󳲲xaڵQY5u̓KD##1cƠݭ\2_xpŨ៿.]ϫ#>6Kl{#}T߯v;ȸ鲻<OR_ODt1bF{b
-M6yN@oxB];0'P>fb u{>Z  촷}D"-]kƍ)IIM))xf[qūW>zhs}2O;1GlJ6vtzIQAlAs%PD()caaaee544D8>-ImVV``4]+++%#P6."">)鄗=@0Z¸~Wv2@?+}a'm/ }<>w'}"Ɵ}5~~~t1b]]]>sl6.			QQQ{{K.`u!tyjfwǏCnϐ˖BơUh#e   Hssׯutt&OdɒtyëUTTR!XY
-
-5CizZy3njrj_o_Fƶqb(YYYfff^ti yথ~.""biiCÌҗtJ_=}{;rO>rJXH']Ǔ۷#tY=ǯ}d2}Ϟ={`+WhR@w>{naNF^^7T¡l"c11u{˱_)  W^%%%			ijjcG1Uy*]]]-[zjP_ϕnw|̞={ԨQ.~b1u1+~Z[[O8YCC@aHWKRѣGQ:bqqqP"BE~+߫}햿GQ߷G<?9o{=?z;`5UC.$"ѵf͚3g|R@w,,,vP]r{-=3f=C	zLg6///ϡ~CPz9  FFDDef~&			ʀRabRUeqSMk;daay#NT]4i$wKOoiJIIMUSS9r$t`` ` @!GW\qqqAׯ޽{/\ øt	=ؒ"q<ݞoxBa\=2e1z  t>Ommɓ'%$$PSn>OPPR'Ue"LlVOo+=%qd\<8evp@_Z;ãNdvjjCkӒyM""""<oèǏoܸ_MM-$$ٳguuuгzt{#n=Vˠ-Mѫ|ӥ Aj/]jSNEjKih}yjhhyzzV|́(~@S.)yb*]I&e+K3X{@bgƌLLLJIJ'5!!'5U[[횛#A~$<- FEEX]>:::
-zV@onܞ/㲰/Mчw}ۃ9D@P"  _
-|޽{ѢEvvvT|QIJ^|si	sS$Ŀ?ភkƦC~͛]*Dɓ'.MO]J@@ D			=z-.Zv'Lv=o޼;v=ԯĞk׮ܹ]NNNϟ ntq{˱(4Cݞn}t73w I{{{MMj	w%)))''	qp_5''&'YVVV%ŴMPՍ+&MڸaL?sj?Zm3nܸ;7UIJ{߂}Z꓈D"///-͟?׷B-OZXXppp]O>}֭njh(X=O"w	fff<<<%%%z^GAX677ܞ7Ʌth f`G^ _;w8;;jh&$tNdɒ={<}<Qkĉ
-޿EKΟv8[t=zP8W)!!5Mz^^^EBm`	fmmv:rȹs碨t"2	zuYSS7o@Gz}l,Gnb,t`$Pke#@=0   
-
-8 ..uB*99gEUٛ6mB7t++w3(2z5t,9}-9a'z$PZ9){67EdJHHӬYܚRRhHT*jϟ~ӦMC=QAg㊽Aܻw+**mt/{KDۇۃ%IVNfgg2pn.=]tr?( '߿\ffkBSna>LLL/e5Cl;H؄z[ۤI.bO=ztA/C&up@ߥFrFz<EM299>hݻwϞ=z	Qa0'({|Bt=@O¾u{HO觇w臻=]_4>`ճw BMM}y{{+((prrjii奧$%s+'ܜwʕyQ4! Rmyډ:J5ʿoT[r.YDxZA_O
-@?`HWlB}{SS@xOݻ+v{2|@ƅz!!!sKJJz-6y;v,ւ3~
-ME$O}e]]]w̢hŋ2Ml/%nFw()V	0 hPΝ;RVVFj'󳲚SSqyPTDnٲeś6mhiHHv=v>(X)\>fff'N8n8?~ާ9yn.>W/!!1jԨ~MEE%4.|1>$+++  `ccbZ}}A9߿ܞ!oIHoPor}CNNNzp{>wB  8::ZYY(#%%9)"#i4{{{tɯ]6';!AaT3R֒Y ,-1bL:@8cWsFz85_$R}zz`` jXYYQEQQ1!]H쉽njj*!!jժﷵACkm<x(?Fn25Wrrgy뾤7$xC
-NN>ʭ 455jjj,m݆OAAD"5R nz(̆WީzU,,#DEnk?kZ~-=ǉ\##1cư\JF?lGYddы-bMOR!C?v#?d?翈{xy777II	&$%%Ag 8-W> ۃÆ1?  {(DZd	
-[a>uMܴ4t#FPUUSDpuŃ#GDw-5Ogg$SWXjy%;'23>			(D.irrrk֬\̀f'4:Y5UgGuޅƿ|~mS=nkGǾ>.0n>r?xvYaڵ+V@=tQr͏=jhh.+H>loۇ^_as =*//n|||h4$%EGG.\ٹc \tfff^ǽ\Q?_+++R1C:ѣP3ǖk~WJپNHHPUU@lBBB"wB̸kO:Oڏ=]?Eucڟ]w[rqqqVVV컸@O8H1c@f tS:Xt)))Q>		jjjCCp{tѤmW鮹ziTly`}=Y|m2y	ssSnn.!Ap@?DY(\lY|||CZnYKr}mΝh<<<YCmjiQg&---550>ty..[vzOh]rZx$6?+wivx9u-1>[{?5j聣#<o-a?v{666 C `@)--=~UUUCCC?~wYf_drzzoݺn`Wsm!_KCϟv[,#MS!`ǿz!)I?i^kǍs7"s߾}
-
-
-QQQM))~xbAAAkk3gμx񢲲ul***ʿ}c?6X>a?}9eee߿n"ef%NN
-Bf   !mmmǅnFFFYnω'֬Y3u6\ts	A(s5ӦMz:2lP	-c5nܸOBn8p!׽vkPzPCHH(~MTJy{{+**[ZZ䠐  B]&L-=5J3 p{ `XݻcǎYokk{Ӽnڴ1jU})~拞ƓmW}AI-WteoqE%%mnSfW/YDLLu##qkh""g/hnnX   |õ0PBt4JJJg{  ,///\1|٢EΞ=	
-n}z6{:*?o
-_yzP+e%OoOabbYN/}Z󂂂3\QQI&fee~2   	=&3}tp{ WeK  "mmmyyy;v쐖^x]~~~KRO@z
-h4Z[#A'ǌamÖxmXgR鄺m=(6Մ\l?nh7}ZPۣ˨Ԡ l04  t{3zw;6}cH. \^= 𝔕]zQ;;s}&A;-,,ܵk̙3.]ڐ ֥sK]pޣ{>|nTX^*~pQF=Y=Y{)?VB>>>--ϟC  YXXt̬ԟTzfAT9??QFFFBBbǎΝkIN	=$;m[b3u<ם-qNvkt?8mu˂5Wˢ۟ԁJmsg3̙nݺWѸ]5zzzjjj/_  `lNN\ 0E5 N***n޼驨B7wrxxxĴ'C;s-"öS.Y"+pO"&M0aa5ՆZo@}67Z(H׮fXZZ>3DjHO'HhV
-}Q]]\   BFǧ5ܞ1cƀ t-Kk+t Ѕ7n\OOqlIII%%Ç7ԤC$;_iΞwĸ1bԨQIhSPoMcղJ(ڛߥa:jէhii BXX8((͛MMM  0РHH$~9 `AP\@ jjj<x)---((hjj֔S4R<(***$$XK`v.ROG~7{wyAVV#F|)gN:XϜ9mرs|['E|N۰aÂsRS0ߒ|6#+,/..XTTT]]  GLLyyy=acc* t (uuu!!!}}toY(vrEI	JPj5=IZkdd}W<o~8/*)εC}xIIɜքVVV(۷oa.  Bt՟=p{   aEsssqqqDDĪUdrMfOӐDQQqɒ%(@v`a!.a!4k\/8c|eW}P?m۷^Bo){&!·R	ҿijjj1118֖oNMO؈KKK_tn(   Aؿvv   O޽!,,E ~s˗WgAH;x<%qS&>yLM4=ܞӦ\t{K]e>ZjZA*c߾}
-
-
-QQQMH|ʋQ[nEqׯn  0nW<]VS_ ɓ#GYfʔ)⑑nɅB6|r>>]v~njU>*-ä#HEOW,,#N oG`+\AA\cġCl[nϝ;w޼y[nz}ss3M   "HPX+=`X=?%!R+((̘1cʕ!!!/Ԕe˖͞=Ʀs	Aرc6׆V`ieN8uHѭv;wŜi{QpCzy9998hjjR>M   7GWWKaggG,,,z+ =p$%%DJJjŊ~~~ׯ_scZUUUwyڵhoQ;XYG]8K4ap˪O۶h?^Q@)'L{V CP5$	k"lmm?R8
-o~ITf5	  @SXX}.2>}d`srn477~:--F,Yo߾GK-.ݑ7l $$dll|yjkrv4nܘ]<$%kS!,'5*M55nsۋujNNpbTkCDRPPtvv~OgJHuAAA˗/^~}lllqq1L  toGIIA{{;n n`Lccc>>>OO˗/'>>77WOOo7n<sL{cQ7(srr<0zfS9'Q'>v'bǎA[Ma^:AA/(G-IY+V?۟hUHuuunnn<h    ftyⅮ.*B;v,V~!++JHHHPPER/^lq:cƲǎ300;wfNNN[#a*2)ZspѣQ:waeeUUTvτ5F*uPOVOFz󍌌p,,]ͭѣZ}   '''fV¢f`C޼ys-[pppݻ=m#q+X]|p-IF={Ͽ`Tmyb^{dviEo
-_
-G]FH_AfPx[c3	ayY7}tqq񠠠۷oÍ   ϸGe
-`.n7Z[[?neebYYY[[s5]pa۶miiimqF\2efSڎ<YXXvҫ`tC@`^5z1c")n޼YLLxZZkBn-R}z: LMMQ۸d:q   Q = p{aKYYY~~>
-d-[&!!annngޞW^^>99!XXX]ס͞=Saاy_/,9gΌ}?9oj'inp&SZB366;.Ӓlhh(&&UPPPUU   큑\ = p{Ikkk]]ݥK<<<deeyxxLMMO<ِ͛666s]t)DNw0c9NeJ>٣.|(cccø<L^NcAShxZ=OZ[[ϟ?_ZZL&pH>}|222nnnϟE&5   p[Yrlr/ =pӧO-222JJJpaB[[[nnnIIɠ{}69ikozw+Cu.eaaIOIp5TCȿ^رedd23qi}vaaaKK˓'O  Cfu_ˣÎL> =p>??/3gfbbbuVO:"#>}nrrrY(wM]n<yd7)ޱ5wX3118uY@ѽCp>cVwTWWWqqq4R(BɧO޶myyylْ'  Yгw0899:agg/-3 1=Fn֯_]7nÇ}}}dee2!tbe}9;mhuͽzh6pu@<uȗ,Y"//W[ք;T36uƍǎ{=&   ~M#}L9Ǝu{ p{@ ÊƂUVIHH[...2;Pkeِ3muPCZCCi_CY|,>UWoo2*7=:UnUTT^zY=   >>>Jxwa= !uuuO>@w*퉌sppy&DKo},\qhkz[pB
-Y`mJi4Z!"'g߾}h"""ƉwSS#   5tFr'ObccpGw
-:j×,Ykmm}tz	N[꾰ff3j7*הyjKڶm\Hh4 //?cMM̈́gϞ[H      n0設}ippQux䘘UUU!!;v\r)']Y5~aN=\B~pކj)i[lycVO\ﯬe˖<x𠺺   ?rq[ͺFr(9zyddd\Sr{)2>++|5tMFʗy}ϩ?mQ{F 8oVmT---!!!ccB*-.6#rʹs:t  ),,drH6CЍÇIII
-
-
-(iIJhINNMM]bSP$ >,>kV|l]-pކ%)//CKKud2TgeH$_!!!yy<|   ?f+;yEjj$߿?a𖤤55[.771"bhf_200@׻Jbb"&s]f&jLMMQo߾K. .  Naaa>@ =0۷۶mصkЈR@CRMх7&&&bWSSoJIX@Mϲe/\PQQ   ~:>>>(\q9'''=  n= O޼ysԩ͛7ϙ3gѢE'OlINX@@@GG'33!bhȉy]UUU9ҐS;C 4edlݺu\\\/^   ~<,競vq455{.==Ԕ_湹
-WG{Lӧ-Z1>BchY=/ivVPPOOm.ԲrC-jP{   q{q1ư_Ix{{n8qZHHhѢEXӑۃ}339s0D"5Ԥ}n 2VOI1ё׷2;dr~V0IVV֫W>w1{  s{;* = p{F[[[mm/^ ccLΘsyssɅUeBECswwAM[3OҔF۳gj}	:   1=0 n0\\\$$$)
-~e4E"888XLFF&00:bdhh2RRRY=Oh4weee7&''?}n   C n0hoox񢻻<77VBBBG%ܫ4ЯEDDd=е|ȑK
-
-
-:99-{Ls玧4//Ç?    _<oFr!^^^g!Hm>|&"""%%;&D РUWgeeUgVOL3_AAa̙GAe  `n mmm׮]sww_t)FddǏQB 9;;u/@W0cƌu]j#qw^@@
-jܖ/_zo߮  `=+++\2((DWi2pLBBoΝ׮]koxVObbʂNRCCCQ˶|r7nB   n 466>y$<<|͚5o
-[l??Ν;
-
- jk$h]]s-II8M]5|  a=K_ŋp p{@ CsNTTիQXjժ[nܞt"gccs5F6$\144HIALNN611]t˅>| >  0t{ƎGnOyy9
-Д_N
-"2>>ŋ޸qЬۃnVVV.]jo\B"͛Qxц4ped$%۟>}|   p{zt{yyyg n0ikk{1Lvww?sLH.{PHH$̙n:*ڐ 34[97oFWTPPPMf&~VOf&B177d˖-'N(--  `r1c$Ws.vvv8{ = p{N]]###׮]'--mggwdԧ=zTUUSWWJ4$A_.yMOo|[C/ԅ>}^:]Omܭ[{yyQ4BXXXPP811z  aȟ9}4ww{P/TLL n`t EL		_ -II999|EQ܆F%Y>8;N]{pGnϓnKpOS[(5z|H/iٸY=8m6EGyW^A  0ݞ/Ew{Ѓ<. 444yBlٲEBBJ666/^)niVVֆuuu;ܞdև>E7=br:zcUx^B?[q-P6gĈ=t0SСFW$fn)]x8m+?<D6){U᧊P222Үhϑ4mqq4KII0	  p#S(77w˖-XnHΐzlllS]
-=2ͽh;u׊()̝3i̘ǳN0	=6u4qF&~@@s3Y&&&Բ)/_xMcu0շ\&ǅ^bff2(UtÑ1>oGhkuhH+T4lz~?KsdddP3bggWLGG4zL[^^~O<ioo  `8:t{tuu) = p{!Ckk+;vl˖-bbbffffW[Y`Hʀ8Sty%qz>Ob{7XPP@(-"({'`؂XPDDa1QcKlĮ7ʼdVnT2;sٝxN/O_[>`E}_T]z|ܻv[rиˉ*r-o\)&mTlQnJ/g.FmwMI;"O>o)Ee&oqtyƉYg666>\V7FƍWS̬}>>>7nHNN{|.Gwrq@ ۃRuֶmۆblll``ЧO`=FG	ؽ{[5켽_ĆJjZ>񏳝kYTe?J(d@[6>1ujаz5v]lv3kz^l6o[Izh4e^,aC}k|դagvm8J+(OW+xa/FbS^}H_^Gz(^^^6TR&MDK=  ! ?KOOΝ;fiiiddԥKUV/#G֬Ynɒ%W^}5ۺi?Q|qǦFk巨Wcf<?gDU{~7a}09v
-|ڿ_s&/V{]ڱ&fܺ:{N-M:w{uN5BO,thXTRZ>6Ĉx#^7o޼Zj;mΦU(̙Ӵiի;88̜9ԩSϟ?c Cd{=ȟ>}o߾Yf5lذf͚]t;fX_ZuĉѣG[ZZ6id/_flSNrR)XՖ-vg?)%.N˄%)qc=N~]d?֭Sta?/^BknM຾?۸<~h܅3SD	/8&{'=lOu,YwO}Q#r1E&nܴicΝMMMEw˖tKiȨEҨ8t D5drttHlAnSLiܸYNV+۷O^8qbݺuğgϒ9͌RJ}`ns&;r/,ZF,n{kc.r~Q&/n{<n(RԘ3uq_abжM=z:6$,Փ*;E%/щ l^^^8 C*11ȑ#wtt466n߾zf؞ɓ'[ZZ7ɓ;v"~c51R]Ӡ/߽lFz.1e;)DlexQWcfhy_W+#T\S[߾>GٲiW^?
-%yvwZ%vwW=#zEժUkժի6oh@6S3fطo7p dN.-]Ed{=p=yĉfjڴ[d|_ttԩS---MMMǎ{ȑ|m8I\17~V(<imVPxR/(U,1c2M/?Q*"l|bg?XJO5؅(P|_\.j,:ғگ_?i~۶&#`777++u>|ΝwMKK3 eg7&|lAÇ{yy5iҤjժ#Gt}^pa޼yZt/۵1/QtK԰!o13-D*\SѢ_Cgh#zXPχ9;U>ɣ?X֪$-\8yn;L{$7ĸюmdcq'༦M.Z虮R="o۶iӦ޽{4(44޽{3 d)Z;lAӧO{zz6jԨZj6:u::EXŋի'.ƌs9sS;wRǹ՘ot.[)WUݺXܰmkʕJIɓO>C}?^,Y]'GJiޟUʈwܛ.O|-!RHǚSk-֟~b斖ޯGd/_Rh覍D`hhسgM6ݸq#%%n Ul>Jiii			K,i߾={ct$ey$lٲxf͚Y[[ٳ'-)0N3cj>{3)Qs[_w}zܛԿeRŊW9;];7}l>[}'Kh_,߽!,Vl!6I~HnvRE4оws7Iz1ј;5inIw}gғX"iӦf4iBg=CrHHTT<]]]/_L7 Вald{oܸq#  K.&&&7t{I_^c{oӺuk|9<cSy&%nϋIJ+;ٟytke,JٲEuzro<e4L"sܘ#w_TuJlǬ_mھ+~1yBCk۲yjUH33=:awGܾ9vX+++kk_T[xt(,LTjooojjګW͛7߾}z  oelϫ'vq$A ۃTRRRLLʕ+{).7n<uÇܸQ爏W^XBgg-[$Ǉg?Hʷj֗/L{;#U)=a\稭;b`{;v󊋼umK"i1#IXm4 &+.ܵ}X玖_+_lICTįU*?dcumŬYFq>"Bg
-:v̙36m*:ݻ/_R*t ر#lA.ҥK={_ѣoN.]M$YI\Wv9(((%!UO޻{!SE|"|Oq?'t#%IjT/7߫?3h_/eA]S&Żyn|}#߯TXf{ܘ9ǹtq|V-wOE̝;aÆ5ktss;<}|kמW(f̘ѤISSSgg? h'd{=%%%_}<x(:۳lYJH͛w.+ŕ]@@@ۓnlQ3^:?-/3%~pcULz؅"zK)yw,Ŋl|Nwғzj'SӸޟ'oۊ{OyeWcf,۱CZ6ٺiƆfT(_\z$heJkk;O]"6lҥ52224hmu4gǏϜ9i޼y'O!\ 7_ȺTbbb6lУG5jk۷o>ۓޭ[5ko~|reRbI)ҩe!yටϒV:Vڿg֐زi5jJ-k.ۧ&nPCӵsmޟץSmV-LtO{aTIKc;sbߋ90BϙN)Te7_?yzٷvڶmۊ{t4jdyU֠A3f߿ɓ't g{cV;^d{ r		8pIϞ=n,Hݴ)44O>VVV۷_zkɝ\za#S0xס}+Uy&_V~U7('U͍#ϑOGS񛒞sߨ]9dB8^8O[,
-ȕbdVF'?4.L!"4(([n;w^~}:>}aʔ)|z  d{lJzyfdd#jժebbҿи[u?Kˍ
-ŀjԨaee%.._*eU~蜷R4rurs~8?/>巢]})1R%JQŊ?U!!$|UXoJVZAΜ_=]J&F;#ox1vT3)SdYRzW\}V
-}.fajO'>)	M6k߾_bh8"bݺu]vie dۥlϏd{=ȇcccmll+.l؞AAvruu-W\Zϟp'^3RfFZMR2y鱃F7.4r1m凱'kǷ<ZNj;#e%4Lk/ܫͩc~>׿_}@U+3vT3'r?#4IJ-q֭[tRD	kkk__۶Nڵq[ӧvu5jԾ}oR= QC CA><|PA0a
-|fYJ爸ۿa,--5j4{SN)S~ݲ2yW4Ǯ=#xxs>jHsר^NzƜ+ynǔ?{4_>gq-7>+}z(QHkgzܻ@:PumUb'*jkZ4ipt376<<$$dvvv#Gܶm۷ lOѢ_r'A ۃIT޻woϞ=ƍW&&&ڵ[x=ʵk=:au6h`\/90f ;)g5kb$gZ=9i\:
-|ڷOf殴3'&ַs;Oӫ3ء]?!k[ʕJI[<l ynS1e#C577oܸEbu4[UIׯӧE:uy7n$''Q rJu'lASZZڳgϢNڠA===GGGqwɴ@]&VEGGO0F4fʔ)ǏW&c{ғ^83ť[)g駯Y0V	/<vp\_83ٹSRbϋIG<{vW+#kjƗO{&?5tp>#^90)09򟑣FS̙3GD(ՓqXXXa͚5ŋׯ|^ =C! ߺw޾}&NؠAq4'Nۣۇ=:yd;;;q9v'=۷(V)[ E]ёc66nw*SH.V\6[4LA965u|4mf_[y~SgLmm_V^ݪ+}zpsb	Dop92RvnR=_nmmmllܹsիW?>!! l4d{=ȷ>ddd0gΜǏܸQwr<yãnݺ*Uruuݷo_z|ŧM=7_P1ɕӓ_,rRFIOZ*M[,!kT/''47Kz&JK5A[K^X0՘bNgؾc4#vD]o90eg.^H&OEFM{ʕƏIHYk׮Ç׮][ޫWUVIII \\lSN-^Yf-ZXp#Gt?oϫU.^a``PB!CDEE%~=ݛsiv$Knpk-jğ>`^[DO\ϔyw9oTxweJ_~Y@*^A"J$>Ir>p8\(gO>Dzƀ~rK7JJ,4kz[WgtPS}Q#l7ؗ@?sbK3o\ydkI?lȰx?IW玖M_ԴDnnn1
-F,[pV5kVÆEf͚sνx lwrd{=ϒcbb͛׼ys33-[#G~ltppSΐ!C"##S7~={s7vhYb>T5盯K4ml8tpC/\|t_OYzMҥig|go*JQsіMCJ3n@lۚ:6AU'PӸV4ozGk}0OT-խ<œ9qnuvcSo{כ03ڎ޸kfߨVzeq}(TܯUV>}nْ~nw\sD# z!1-3 -f{ CAtĉe˖uܹN:-Z9s={R7mi{e__߶m֮]wޛ7o~=)q_5d`Ok82e|uJKJ?PdBһ,*z׵!778JϮ*yJJiQ0A^0AEsfp/r|FK3٧۝911%'T_#?b
--[W"Eے.E#+~q_MEp)ciiٿc_T(͛׮];++6m̝; y{d{=ȷ={vܹ%KtT\:T|=Wٞׯ899t=444%!8_<)i+~k*K(iR9X˕5G<eӀ!m*WʼQ^͚͙i7SDBUʈr#W.ժ)[hf]ܛ;bwcUA9jB	QK--k0a<o-o[WXѢEqn2(H7܊>}zÆNzG! 
-ilwrd{=ȟSRRիWwҥRJ5j:thddktL.Qݕ+W|}}LMM;w"UO~$=)u}=f2Ⱦu+S{;9ޠC&{Lj/~8?6\ja"6WӠ~Fڊww(uuZ'{q>GsJ/XwƵt猜>]TTac]iXm55Mv
-Z繩'UV9;;mv͚5aa9+?SFʗ/occ3mڴݻw?yDtG =l.XCFFFÇ߲e˃^Z=sݺu;w\ʕ+ei>n"9>$  qƕ*Uj۶8_&{P,YSNƵk͎;/R= HL.=lׯ0N:VVVnnn!!!Ϸm؞e˒CBlҲeRJ5ogat"5qc^zSvھS=:g3B!jԩq
-Ǐ_|IW x=< CA~rʕ[o޼9)4TקˠM6IK.}(U/7AvJy]{{ٳg?YR7>,lÆ~: [3= 55Ǜ7o6nukOA4kEoa&QCmee`
-nT]e˶M(Nmр~?|P?t y{=sJ2--ҥK6m:thlmmx]?'-0p-|݌UTO
-qf|ڴiw
-n븭[FٰaC>}Y̙3ɢ lc{=g۶m1bD[l}Eݏy$:߿f͚3f8v2ŏޛ rF;VZfffF:\V72'mܧOSSSss={< DFF!d{)ʗ/_޹sGP5k/^I&>>>NO=v6lEѣG>|X\{DnG_9j(sssqN>XxxZ`n-[v)h==2eʴif'NHHHHKK #< CJ;wnjj߾}?~uGJ8tИ1cǍwqJMՓwj3,,,*W<dȐ?""^tMݸ@XĉTuO )"d{/_x~9sf˖-ڶmyȑMt|(;6bqqZnqƉ'&\zދjڴqnnْs914_4iRfԩӱcG)Ȩ z&O`'d{=zsi޼B<xnfP=zt̙M4_;D=wV]]]7oޜy
-G˖-E"~.Eڏ? ,Sd{=[J2!!ɓҬEjf3f8t=K\$:uӳI&&&&۳gwrD7).GGfffz
-Lrƛ
-W۶mE"0}Çť t@u'lA?jJ̞=~Wm>SV:}ܹsիP(R6{DG[n]֭+W,~]EXnR=ʵko*?s.],--Ǝ+wJe[ C CASN-XcǎswwH	VNsyxxV^sIq,8AdgTO[}}}5jhѢ۶Zꝟ>>ߎlժ}̘1˝;wRSSi :#N.lA
-{ѣG.]ڶm۲e6l޽Isyq}*TҮ]uݼylAd'_bŊWXD	cc#F޸q#99{  ɝ\lEF*Ub̘1[n}=ч;s˗7nаK.k׮MxU/8Ah+5aSdf777+++#jyf͚oVOOB
-ݻw3y 1 CJe\\ܹs-ZԩS'qبQ#Fl۶g{||_|:X[[wu/b	B{LuwwIpTϕ+W6l0x3gϞ+Wzj||<}, ?xjG CA.׫Wv111:~&֭͛СI-.]W)2nxA*^)!QChlllnn>mڴʵkus>݅4D!:эDt)cw "d{=ʕ+/o߾Yŕcbh˛6mZL/[ѣٳgO>}*,¬?&jefBS2YTf2-<RfZ~ղDXBӰ7~蚇aZV\̓U2촯)>sLLḺc֬Yӵk׊++VCG˔ర7]+ ?0 CAT*ӯ^Vvm^z_ܹs,[dcc#N##.]ݻo߾O?zgj9Tyc-9j,Ұvq3UZ]TͳzKҲ9vines-ځׯ8GKqʸ(:",,22rȑ:tXx'RRRx: ?p'A ۃ|.11ŋ6lpsskٳG7s|}W\WH**gP׹mZdzr0稩9:\z[D{9#S9囈ӤjժK_
-(PVS::U}}S7nT(ǏoԨӏ?xө [;wfflAZRR͛7Gacc#"5kO?;w.}z)aaӦMرc߾}皡?TU+fC.6,Aa\Vt+5jIw6R³r-G_f\m-Gyv0p@q֩Sgرw
-Mw^cWVu֞틍e nR=l-Rv]v9tmڴYbɓ'utKlbݲeKdddTTDePޭAs|LjLRWԿ娨R},J˶olRZ4Nm:={dLwAήo<Y>G-gZ]ZߎP܈LݴIgˠ
-mԩ?:t wrd{=;v8ظK.'NHi\^y(Cņoݣ{e>X% ;:P:8/t}eƽK
-޽{>}Fw
- x=E! ?hߏ<yr˖-֭ۡC//=uF]^HWڵ5tgTϡCϟߩS'Q4o|	w%  Cd{ ;w۷oZttt6moN⢒ +D?jmbεknܸѣ###oܸ\= 4oOѢ_!d{ofjժôi>L /vԴ~!!!oNLL !=d{Ǐ;s&MԨQaʔ);vH
-%|J?
-ի{ijjjnn\p  !"d{WzCf͚$zNaȯbŊ=zԪUҲW^.<{ blA /_Wmn۶mժUMMMP(n%V=ظqcϞ=W^F+VDGG3 ~blA Hbccϝ;?hѢbŊVVVFڼys|X%9-󋰰`wwwKKJ*9991 d{cV;=l-Rpi^\m޼)Lo[n=qfff-ZKOO ٞ"E C! KJJ:uի]]]4h0dȐ6?//A䷁=aaǏo޼yz:wa >lwrd{=?~5kָZYYSz-"޽{رkn߾9s<RI	 P=!d{%&&^paw...AAA/_N%)ǎ5k}[h1{]v=z(%% e{C! KNNpzmlllddԽ{˗8q=>>nzt:"ãyժUSΨQvqF  >d{=@\\ܵk]]]kժeddԦM//'Nܸ \)>}zfmll_%$$O >lwrd{=SSS/]i&qqgii׼y:teP/A|!tq^E  lae{J%ەt֭;w<CCCggy8p -0	#9 BtRvZ||<=$ Cp'A=iiiׯ_aL-=
-swwСÏ?xM8	#tϯ\_~ڵk |;C!>lO\\Q^BCC>|̙#i؍7_ɓ'jժnݺ{Ie<T(ذaC{{{WWիWGGG3 @ :$''WXF\>}:))^yz_uUFq7a)ۓ~Ovtk-!3$GUuVj+gvgIjkj<~@8ͯ]GY{v\ժUNݴB?DYqrrZz;w ;v0K3A=Jӧ۶mo?~Lǎd{<y[ZZ~Wuԙ<yݻ?~sΝ9s?huZ&7<=hi9j,hQ{ۣK޸_Y{Y}
-9[I*~edVfsŗ$;ȗ,DVZxqCC	& 2oA@ɕ"AO?,Xxĉ'NckۻwرcW.⺯w1cƏ?Fү1&WEZ _9eI>z8,t2-Y{Klk-fƦ۞iQo,kj.͕şQFֶH"┷>}ѣG ]v?m~mÇE!D|'Bm5:]m+ˋ\YTfBPUjZTGyPjۦY!WSNm[iyS5?Lg9fjO@͏[hCED"~wjj|}WkBy
-ԬN^Zժ25ۣZ"_._-ӐN~"/DFF^o/خmdP-[VPXb#Gv˗/aRRɓ'ZxquTAuz5bQa/_Q࿭O!ŏW_wwK2d?r]]##jժ)S?'|2z >
-BVtjUˈ0/+~W++PxWZZ"_M\ZG\DJm[~ߕʑ~VPkrO4۬ U0#}Q)ͳ**Uw'U{joIMslRxV|wԾKM}XG7/moͅk:UT)[lB>/k׮ǏOKKGNm߾SNUV]LjZoP.3=:n-^+;;fHWըw]kkkcc%J*UdС+}  o>)S%KREJ*,/Of֔*AmZ]j˥_% _SVЬNm+UZVV+\m5Z6|}RUm'%.ZSX2Z#jTtieQ-<ڿKzFQ,Y?%3h.T%Pm|ҴoieI%k6U^BjUs3Kձt75NUs,MLy(駟ӦM{<r͛+W6lȑ#'M4Yf?fZkvq7Vf.NYՒM4Pk+gZÔ,dsNw&ߐ7~IQ%F̞={ѽz8q]ğ h߿oE%Cw[&Vm%R:囫#_.)/AB*k׮M|vMPY]l|VQ(VѣچjABPl*_ :uj֬YgUVhhhrr2</555&&fΝ۷oU_kYZV+4=Z6ٛZv?3=9jsVZ5YG2踽j?dctҴ"u'N:uwe7 GÇoܵknܸ[n]Ɇ˗/K?%K.IU+W-i.J^E6#\zUfQYբFryK2mv,JS+GzKLq[R]ZjCՇ:fzHxՎk~>LZV_l~s$Vj{$?rR;>_LKrHpTY~ʫvو~ֶ|_}UƍLgϞgϞȑ{?wܹVGKK!qOûn~%udxwCMHHHKK/   HJJ:eڵk7ߔ,YiӦs΍ E_bbb\\\;!I|us(E-(Nv<   ۶msqq100XbÆ'MtAqο     >,J2&&ťZj40aݻ<y     =yd֭;vx!OZ    ϼ$J2))I`    xiyt8     #%v     =v      >d{      >&8f		?Uw~foEEEZ׮]K$?X.~-NRbAJ*%)^_E4W)ZSU647닷VX7
-     QGIA֩SG:$$D^-kUhg_ZujQhŊw&׮]o--'     sH2HUdr)"~ͨVKyV׮]U.ۓگj*S$OшSy)#h6åe:R     @Tw*9)UDmLZQʢHwZe`Tsfdc{UvԚ$ԼL"RT*;      t ϫ7Wa,JI*3lO6k 2U7diPJ|l	     29Q&ܒiD (Z2rf25UY쑷Yu4;J*w	     ?oZF>:HLdZrN=21D     yxeA9]g{מ21h׮]Sm\     =ljTͧfKG{9*3y4f"m6.     uGѾ,&y~w'66VaJs7*U鍷eIS      \g{^3eK܈ǪZ4_ҒLG"ɩFqVg      KG)UԊ+bccTcfTHY͒{62'd_$ۣjtLįXx-\;·     ?y%Khy$+0Vj%Aj+ڳBBBT9ۻTUs     xHO>/NV!m(#ѾXG5ݱZbxW**ړ_{VeZZ6=uK5۸      T4۸      >ljޞ<      @=I{      =׮]      5DǢcI                                                                                                                                                                                                                                                                                                                                                                                                                       ?p:J
-endstream
-endobj
-9 0 obj
-76902
-endobj
-10 0 obj
-/DeviceRGB
-endobj
-11 0 obj
-<<
-/Filter [ /FlateDecode ]
-/Width 106
-/Height 48
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 12 0 R
->>
-stream
-xZYWZTOW~JUnIeeɲ$@0 a1G%K:d0[auw8[{I[XGޏqyxOo {~XXX(ג|H;99X,<_&½wtzbbvg$ @y.CRzNsjj*LB{/~65=4r^,%9Hh4NOOswxxx^s\s~:>?Ü|E|_aow74?k6!jv^PmJ9eB}{
-HCj )aA"Y`)"yH@NwzB5l2{D( .H=շKZð8t=a+fJ؞%{@b
-o 
-PxY_g P EHȿk{x9cfAi]*Ly|PBɹP8<k\6* xWƼ 5Pա5ɓ$ձMRWyWsWY 0\)"_:'ǜNG&eBEm|`,/?w%Y]]1{Phl6˥Ν3'|$YY(Vȳ-Ryz)9䌛\	+>(O3NIN9&TFb/_^;9<KsGm}i/=)~:*$#٩D!ztƙϞ׶["hG#h%iƴ/[*8+~RbMMMEAFu[V? wVůi_Y޼qrzki$ TBHA@ Bo(-oSwނ{D{L&%g 9ǆ~
- pY9\E6nԙmrj !O yfbUX\MucEl9:6=9 7n0n
-LZiqk.BogNfw~dpĘ^=dNζ>6֋y5	DSSldO	~BHFdi@)4ؽÍ#Gʉ	Guk!	;Zf_:{(Qн޽.rRU
- »h[6^V;8RE:G`<iQGg{_6kw~P#
-곔b/hj}oW82N tV:S#'^3,Ŋ\ߝ+PA9UŐM~ $(l=,unyexn꙰qu1ݦ&ݦ)ij<594SmQ6aѾϴP@6EN]##I8;#\k^	7a@YdMU 8i?eZ4{aKc d؂ nr$,.(v(2@ϊhR@I(>5>myTzsk\cN@d$80@%:$	@MKڀssײXn\-,* Hƴ[Xoic $[&U{yr[z%ӹL|j*Hp&9>?ٟ{>Z]B(<KTjQEfeST?[;VA&+E3IN쩛xfxj-{ֶȬۖm+2AK[ǌ:g&e/4m=x<~.kR-ͦq:P&!- JHLAw1æ1\H>'O()Kt,lB~\<_(_GJM	
-M/o: 8N(p)ꬖU+MW%o%X\Ht^$ PBA>=Q[/>[]~Q@BȤr'Ti58!irD(ܹWۻ]tP<QGAWDhHgv&&9Pv=-qP2`PO^&~qFͿKk|dHŴ<zV'Kk:k}CdE"~ZBo~LGjxS8|L4jwPE0=Bdُ}Dh+ܶDi&YZZBo<<<\^^>ω HY<YY5>;DQ<~goWNtQ^	L?vRf7aLcQ#f5n$M*Ǝ+/n[`pp度BBVurr2LKm%p<6f6VP9ǀgʜhQ=J~=dyMO	I:cL.LRe$@3HN>%,%tWtη_UBg>ZlnEMkk`e2j53mVfO["JJ"kk4XJ'QyR@B1vՖP\^5o%)
-Jeŋį&jj$)OO|8uvj!C1
-	AY	u6шo,Uൾ"0ʛ7\o?e[B|_v	"-v0P&9{<okm`0a*0#iǆly?R9mȼ./X{sVIw߯(<ϣt`4oC,ZZ I8n"]C@CQF(HDӼzFZ/y?a'ˋ/Dݔ"
-ޞ;ؐ*U3+ZNG!i U8oỎ{Q@IQg
-<[{	zsN>)=-("O*-Ԓһ+w	]oE4bcOֱiXV	 iB!pFt2%!<Pt,=N''wZbXPV//Bqd@KKZ @nC,C5yTpisP9st$ydU =gr[rj$	(jdg@($R	oh{%Lym`exdaΎfTU)Y-5,5VeilSީ<MyuUokk|lrdYo@Ew<NO|^8BG+IvuuM7M_P@/WE9CTQO>x336ےnCB4_ޏFxr2b@S
-endstream
-endobj
-12 0 obj
-3497
-endobj
-13 0 obj
-endobj
-14 0 obj
-3497
-endobj
-15 0 obj
-<<
->>
-endobj
-16 0 obj
-3497
-endobj
-17 0 obj
-<<
-/Title (fr-soft-frequency-reuse-scheme-v2)
-/CreationDate (D:20140609020139)
-/ModDate (D:20140609020139)
-/Producer (ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org)
->>
-endobj
-xref
-0 18
-0000000000 65535 f 
-0000000010 00000 n 
-0000000059 00000 n 
-0000000118 00000 n 
-0000000310 00000 n 
-0000000398 00000 n 
-0000000416 00000 n 
-0000000454 00000 n 
-0000000475 00000 n 
-0000077560 00000 n 
-0000077581 00000 n 
-0000077608 00000 n 
-0000081246 00000 n 
-0000081267 00000 n 
-0000081283 00000 n 
-0000081304 00000 n 
-0000081326 00000 n 
-0000081347 00000 n 
-trailer
-<<
-/Size 18
-/Info 17 0 R
-/Root 1 0 R
->>
-startxref
-81548
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.png ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.png
--- ns-3.21/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-soft-frequency-reuse-scheme-v2.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,282 +0,0 @@
-PNG
-
-   IHDR       ي   	pHYs    nu>  
-OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
-!{kּ>H3Q5B.@
-$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
-dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
-b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGwǈg(gwLӋT071oUX**|
-J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!ku5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
-M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
-yg"/6шC\*NH*Mz쑼5y$3,幄'LLݛ:v m2=:1qB!Mggfvˬen/kY-
-BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
-+V<*mOW~&zMk^ʂkU
-}]OX/Yߵa>(xoʿܔĹdff-[nڴVE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-6U#pDy	:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F TIDATxw|SsGJ;^)K6E`huOuQBEd۲l){^Ie|Qқ{ϽI}sΑE      *            x      B     Q{      <
-q     G!     (=                 x      B     Q{      <
-q     G!     (=                 x      B     Q{      <
-q     G!     (=                 x      B     Q{      <
-q     G!     (=                 x      B     Q{      <
-q     G!     (=                 x      B     Q{      <
-q     G!     (    @-l;v,[GG
-
-M     M6o߾=,,,$$dĈ	 !:s   └M6dffnٲf 7D   V͛7!T*JZfEe     wϟ_hѾ}4Znܸ]~7
-|     %%%+VXxFi׮$I]dY     (7LzVT:tرۗ-[fXh% p+=    jrܹ~׮]FqjZѴi[nv A   Zeee֭[rZ2eJxxBQ//ѣGƌիWgeeV >{    T+##c'O2dȸq㼽$IԡCcz{{]QC 	    JOO߶m`<y`P{!I#wԩRZ ܁&    P]>͛72dNSE(($tMB;  G   Zmڴ>}Vt%Ir>#Goܸ n   @jHD[   @m9z  n   q'= n{    Ԗ#qLNk "   pa3s ඈ{      <
-q   Ѐ8a^JhI pg=   @/>\t wF   48fH] =   @'ONNT n44   pz^oXbccFhhn%d= {   $55b8~0LKHH2q=L n   h@婬)= {   $!!R,! wP    j*999***>>G 9{   (##l6gdd<i dr|022`0DGG_,Kjjj͏Ԓcz}LL	q   nccco911Qm0*?fX@
-}BH_    HFFFDDsrʒ5qqqKuX,QQQfY룣F#3ͩWS'6u+@=E   4 '&&&&&q_~x=erzYewXgUCR	<j   Gw*'ew<XM3WILLtD*111)))峞+1Ȕ㤭P%   a15}Rx*x=!!!2SN,+))))))\:s   Kw&:z}<Ljj_zfsTTbX,xɴm۶:ܼ =   @ʩ?39rY=<s+Q,^_jUzzzvv l6Wwl{   q?_'559Xo]pFrrIJJr-III58p    HBBcĐxyXX319E7
-gNFFShWc    ԩS|'##ù@dddJJJuOg88AǉTԈWq   а8ٜj6Uzh4FFF<׵cxZr6q   ЀfwjNvaf<L&S\\\Y]	O
-=   @]Y+p\`!qHǔmɵ{ \6   48&)666$$dԩ)j9vX,٬###EDDs~q+Gj[A&!D   4 IIIɹ>$g.јjժw8+cccLpᢑE   4 7۶mKOOOJJr΢}A(n>9ci{jO'%%9:%''ǛLTGT>㋉q.<uTǘߩ!!!Ma   !rncXw&Ia2=tőԋ#pkh4:Nv8' A   4hzQuRm=n;A|L&SFF_ɐa2;_
-p9<¤ovH-9ŁEr"L    .IMM-co0[|ٳ{G}TѸϾ$&&&))a   hX!:::::|iFoEQqP!F#= 4d=   @[ǖht$Gܳ#( q   Ѐddd8~qqqLy){  {   bǛZs@E*   4 VJIIqL%0L!!!QQQڟ%r_    褤lG̕Qs㞣8fUVǗ <   9l6L&)##l6f!D\\\8Ip*ivQ$`. 
-=   @CCtrJLLtva Gu   @T(q2E?PSNB$$$p4=   @w]?n4ݻjT'11l6ZC    DGG~.vgQO}I|L&S|||tttbb"!!\    !YC5Wh4&%%9I    蘘ȋ>=hP و{   ę}$''Z,T^o46w3s@B   4,f966l\GTs$Ikf. hh5>   KaX,㟑Fbfg Y<V˗/={Shˏ{7 Gu   Ѐ$&&:U<&)55d2EGGװwy#*57ɽ)pT4   pL&!DBBB\\\[!%%1vOڝ(0z   h@222D+sʱXe q   а<{}A /   aq̿^o  q   Ѐ!D|||X,*s#	zu"   <QQQΙRSSVץ{ ^`D   1Lf9555""`08
-yfWLLc~0v 3   V:uc
-p9hЙ q   а8G#q<h49| m    h4)䩀{ 1T3   r0v 3{    a9^x̕Q q   fsTTs-ɔ䘗"0T3 3:s   .66֑HgQOllsf '!   <lvJHHHOO_jժUmۦ&V= Έ{    Oߩ0	]Cg. pg=   <*hBddd\
- wF   x>G׭.bZ wF     Q{    /UT*|     -Egr pc    `F1!!"UθGQd q   "##/qT*1T3 3:s   -z   SB# "   p     C5     Wp`0CLL`Y\    \ jbf^iX#""f3-j=    . ԞhLHHXjUJJbM\     \Fˀ   @m)zX,{    Ԗ$Ić\ .bIMMȈA\    \ IILLLLLt@q   ڢ3-0<{    ԖJp .`p=|4   ZrV0v 3      B   = phW`    圖Ԇ^OII1L=     U+:::))q{    C5+RT    -gg. ;#   p q     G!     W`HHH\     \4+03   bfs{    Ԗ,b"[HFt   P
-L$[	 p_|F   `" ඈ{      <
-q   R1f$6 q   ڒ$0K 1    {     -GO. #   P[?;c #     (=    j\ P/      x    L "   P[Ρ    @m9af. pg=    jYCg. pg=    j ^    P[:s;#   P[:s;#   P[ q     G!   P[, {     ^    P[= P/    -\L          -:s@@    1    = ~{    Ԗ,4 ?    Pq &    pAg. p_=    .$ q   Fu 3      B   Lg. pk    @-vt wF   $ {    \0:s;#     (=    jKQ      q   ڒ$њ    -J{ ^    P[ @@   )2 p_=          }    `t wF   Q    @m1; =    .     -Io.:s_Ee쯆C     <n?zhZZZXX`t=    jKQP\7ߌ4iСC7n,WH=    .g HZyM4Yfw1eʔΝ;{{{{.    -꿣2T3zD2DQE_ڳgOttqBCC=r{    V@@jPH2~+V|+W<x`ZZɓuaL   
-ʄgkrJ]aEQr( Y+t
-s.XsEdW%IRB\c61}cMӹL;|-R*C:-5Ɣ_a+7*m嶪\YU*Ua_oj\yW8V*fW8´*fU]kTq:+#巰iY]yR~*TWh[/V
-
-
-*[?,[ѩ5+V~[n}Wڵ[jՐ!C6mh4H   ~嗛o70/H!I*E+qyHw;(wK*~]­VRתaR巰&Y"kUVAǃOs25΀[B*
-l"Gh&N#WV{FQ   Z(/(/z}2r'\U5AE:RDjGTMFo*K6D
-ǫ
-Õ/)
-7{*lU'_ҳr6,5<BVJ{j.qV8*TU8J:Uxb)c*;*aZK.ҥKΝ]V{    4$t;lٲ=g7+;Id9Bvǳp8*7tUvת=nG[UgVy'_ʞ/:U(R(T(s(,](/]Ã79UGB'*A]3*y8ʱa[JdYvIO<ǳʇ\u(%Xe
-JrT!r~pUZӠAr*BO*CLG|W:9OʯYYYnn3gΝ;/رcϞ=u:|\ә   @-={ܹs>>>*߿1O*TqeBQebR%u
-cT9NuO5UF믐+U-YC-Ku
-5,SG*_a@A^9U(ԪM+հpukUn:9W`U~UnY/]
-`UFbZ_GaKJJ2337l>|XQ]2dĈB     JJJ׬Y믿梢};vѝ;w3     dyyynZRR6tЫW^~~~SSq     X<yr7on޼aFշo_^_]D@g.     ɲ֮]{]۷QF3zu{     'STe///z{      <&      $=                 x      	    Ԓf۱cǲez1z蠠  q   :zﾻdɒ.]66 7Dg.    R\\믿ZCm޼f 7D   Vŋgeel}2 n{    /ZhFՆڵ~ q   QRRbŊŋzyyK믿ڵKe 
-q   (~ɔ٫W////I:v}e˖Y,Z	 
-q   ;wߵkh6lF$EǏ]nv;    @֭[rJZ=eʔΝ;;h4G6Wʢ }    VFFŋO<9dȐq!EQT:t;vڵk>     Pm۶ɓ'Ǵ$	!|}}Gѯ_SNb 44   tl޼!Ct:J/%Ir|M7	!ڷo #   P6mL>]t:!GQ#Goܸ n   @j%Ir=B G.          -gQOyQQQ5<љ   h@̪U"##/z%xɔ|022`0DGG_,Kjjj͏̱1h^ϑj@   48}Hyrьb$&&&&&V#uL&SllbxbbbJJh!   |)ΙI,KTTlTF8aRSS/$Nddd8!L&lȈJOOq   Ѐ%&&:MAz')qqq"##:udX,&sq   Ѐz^oXbccFce>F}yYOLLLRRlUg\\dBT   h@RSS7Ɏxw$$$T8pљ81			lNLLtBz>...&&ƥ}> j@   4 uz<3l6GEE9h0,b7L۶msVP   h@.v:Laݸg1b)))ZdGɏqNv&    pAz<UI%'';zkHNNv&&&fdd!bbbԀ   !pLh-m`A1)hPb@Gq	!z}ԩ   hX222bccfvN<GCuFck1ȥA   h@222"""j:99QS+΢O==jCq
-%''VSNudLqqq+   ILLtp8α{+ HL&Y]	OGP=   @HJJRοHzb$''2q,o0\7c/əj   `08kx.=ʑ8uXd21N8UV1dPK=   @RdTxGXbǻn#d=3   Ѐ8$&&V+bU>YCy'FRRRTTKdr@3!##l6''';{LLcdg0fsjjjrrrJJʥOe6FU	}q   ЀDGG''';n*559Hsuθ^]h4:h98md(┯0%{    HBBl6͉;CQg)))&l6\Fc%''`0FT_׋U~JI&y   4(eԩrLIIV|Ŋf{'y   4,n8aVzQQ.2Y=     l6pd P1;   ЀǇL:1    hpL&SllE>n\ 
- n   h@ݸ.4q ps=   @b0mۖx1T3   b2RSSM&d2L&WυDDD81if0h2   hz}LLLtttLL̿.Tbf^iX#""f3-\fT    QדZ('JD܃Ƅ!DjjjTTT||Uhr"   gSqȹ:Йi4.?   MNN.ht<`őPڃڳX,\~=   @A2qrCKfA|L&SFFF~p   ލǛh^_JD$&&&&&:~qrbf.   YjUJJJLL#1L!!!QQQڟ8REQT*n%P蔔$   ܭxRRRvv#qtJMM!qv梺5pͨ=Bg.   rܐ!c8Y1͎yoőP ni   __{ =   @e6SSSM&h4k#2ڳX,SNutM "   GUqXV5)))Uƅ9L&S||NB    HTTTjjjGk?#${PǀPzhP\=   @'}Sc:s$&&Pq   ЀDGGDFF^sfjE:u"!! \ht:]˸ɯbw2,{	 9MNNNMMX,zh4GO$&&UVe@48ϟW_yG|q܌"KʑGT,ȲݱL.t_R~*Y^p5W#UUP\C*qDT*NR['Liӆ Pl-?#B$''GGG'%%UWSO*-sМ(HHH?R=@Z,ُ't]Bl%fȧ6pߓO>ؼysOAY%I \eX4l6; dX+pV0T3.hLJJrp5Y_ڽǾ˵
-!l4'+I]Cƍ*wܫ Kz*o2RSSM&Si;;.`pv$p9i>}GС|9YՇfi8r>f̿Ooô	 d2	!*TX=&k  jnڴiҤI&MuC_u[R]*1>NoS~EEE4 4d܀͕9~X:t$\QwxqܹSϾol9Yuo`xc._駟֭ VͳfbGi">=pEt/zC=zt/^uUYr<urBջ>^֢%⼚+<n>}1V~]^HI7iuǹ4 4L׫W(v  7GuP=..n?naBR{N$*JS^H!邊ٶZn],DIkZF;HuYX%gsNgto^j˴>hGo|'|W^| `p\~$''`0Tǚ {*;;{~IޖB:5W_:"{Ǐh4oEq(Jt\:HKMOO?{Dց=&!E)))r\~~~@@~ݾO~vڴiWXWԼ~psU_WY2,8fWT/9~
->"
-|_]r3gμ{L{
- 䌌8IMMwL^].ǟ6i 7G36---^[t-KmR*.j!E)f?ަՖJBV32KJ$oֵw젷ۅ4mjL4ߛ^Psn!^ʵz]
-˴]{Ϩg\lY|||>}Zmnvu! 
-1Lf9555""`08
-yfWLLc~81mQeeeCygƾY.o[kZ`맸g?Ow N'R!(sN*ǿ۴kEjUK'$Q@7NingΔp}u>S梭rJeܟ4OOМSsi6YuI\|}Y>q8d nHׯZʙddd'!!~^ Ν;Gg7?^9v֞Yq.b`Gu2M}mي)_ߙ-^1w w`Z$ժ_}qcÿv?|}sb4AJ8zԌҼM!7?cX5~I/wʕ+~ለ:/ G(IMMu>h4T p7=[}'N<R%/n?͛_7Y6:?_?!.M;wjLfګogθs;ti~p/gֹSƛYG4!_oj8qC9|eDuKB.Y}3z衛n)((7  x6h4.Y  wTVV_On{usIP2{_Wkmlքq6ڹ7uz4H٣#E&5?g[;ge6!$cfwQ@]<ii'J*fv6.`%s"򬺰{Ƿ~{ƌn o hdee=}9̝mcsd+^(X+V-/ $8G*R;̮]ZeqlNf~G5Bht|Ξ=GWh"TA'ٚ6	>vҤ%09>1l`^M+2TOvu;>|ޕ ,K|||?Nuq( wFg.-Ȳ~'N<s~jXžZ̘J%
-qoK[qn>21Av#G;q"4ZaKEEŲ"{{-%jd6`mt{も#<WOt4ǦXG<xp ܜl0$dJJJеQ w
-+,,ύF_Lwwwo_{Lm[_<y\Z%KC(Vҩe#mBRyⵃLݵkׂ<Z`/b)}$!l6'>(狏Og*R/jE=N68gΜ7|377F+66֑H\QC] ?Pe߾}wuWy͝.qYg/eBogҨn$QV[X$t]O)+S"oԫ,D>$}i%;>4'B)~߽zmK\a~6l&|_N2~\ flB$$$ZjժU۶mBt0BI  n}w@ YIIo6~!7>:!onVhZkka"":sDQ=J4^5#rREGeEjz"ĈF9Bsyk'&GWyk.Z\VD?8|ϝ;G#@ߩ0	ZCi =e(ʙ3g^Ν;֧uV6;㫕g֫|vb}4@.E(sz|;uں-iACBY$2ib;o;;geޝ/KƌR]%I8+Xu3Z՝yoM&Ӕ)SV\)r=}]4فh4
-!222. /dY>x}լd^%)AڒSvGz=Զ^R=_ yWqf!z!Pkm8^Z*|} ՁCM{?yʶaじ;pU{|$kҺ)󙿥1>諯]D$nN 4X[U  p!ͶtR`:V;/9S߹kz=rQ[yyҽC5w("uE{tOKO8nX3eeÏ̹ktL2X5I*xע;w[^oՆ&NvZ &Y wFDnnj4[o7{b mo_iK楧>S]'U\6>6ZX{]wcYڶy{!D~-rs
-
-YV&!zV+J7E|YHp'~&|RIP^{ըkޗ_~> @/UTF$ 9.)k׮'2īY?6\+^+vxgkx0?+fBW/ӖZhRq$QvxٿuϯL
-O\
-sޝ=K_O&LXjUqq1 F  En,YwmҤɍ#!J\۳~Qn͆tЫb!<%[6
- ge͚hQJ!I"(HY_O?le~7OenpɥJmqkG4iҌ3ڶmK;1			~Ku 9R8q__tՓjj;5/Q}BC
-
-a+9"?7;WFf~6zκ&I%׌;wK>#hyV6kdsV^;Ǉ ɨ 8pnzLiyp3V:oɷ/]aM_O4|hH=NLK[ܸi޿Np]/?o؏Zr`fU/IE]ys݀a_xW^y42 x*GQ= Q\[mڴ%]\/䧵ܿnٺ;z`z!ʄ(kP}xΊkE6kVVqi4qwΙx|j~I{n]j#<r5h4 Oz .n>g4O抇>;9R3WV8wǗYҞ[t]ۯҩP5&Μ͍{dlmeY|}Ғ||EԜF[>^pS"
-Ζ!Q?=e> WDBId ྈ{gZÇO6Ӑi|v %6|?k_?z׭ͦ`[LVdYC:ʒCx]Di(բ;2cɫSӗbnݺɓ'Xv Bu 1쁚/XҒY_"i£~HhڼF!*XyeVuCnSw':u`:4i=6y̤ЪY>hΜ9ѱ۷0v T UeyӧO1bD*4Cb.3.*g\|ƍrTR1GAaZ,ؿU`Wڞy$q(N]>'c?&Xy+̵z~3Iw.\X\̉  q?/^<bĈǾc::8߂><A;_x㜘ju!<I-[UǏgw2zdhWQ5gRMO-8^xhd  Й qKӧOcƌYGKK>G7myi{?>SIFT*7Bns#|Ugf{yI3o}B;:(3Jt=Ƕ%.qVmˡ=7oޏ?h#B wF܃lƍ3g۷ͷ]ony[跥U mqoW}S<m%QQ΁[lئxw8q./qw_C?~~։5oh6Y<KAs̉ۿNl   q.Ųpg}6I9uO[?ݿG[νfp#
-\!&"Ν+/Җ.ӱCIɡ}./*ڗ⤀ҌK,/ӆ_t₍{rr8 P_љ 3s!:rHRRһ;brd/AڒCk
-><}ƭ}gO%C֖*g>۪e[e{ϸ>f97|H#
-y~~-|兙M0"&ߪdms~sw9uԇ~8<<v_;sEDD8~0!&&`0n pP݃D~mҤISNmwۿvl-σ9۾;sk3whۚHjݻʬr{toc*",,lǎL욱ڟ54ܲ\Wh;1ĉfJK bf^iX#""f3- =h.\`&MD?8H*bQt|tPVB"CplV&1pڣ=}N-hu7<tXii*0 W?l|q]1Pny?wݴi	 ܚ_;sƄ!DjjjTTT||Uh@ <;p>8bĈOyc؇ZZ]o+X[:~낻
-~Nks.ZA+9E};8y|V!N:w I,~vЂ+ܧ?#yebۃ}|MVV n@)F ?x7|.7iEkَK[]kBys~flJɐ`KKK`JWD[Xg+vu{r^6,3_Zyj		oڴiڵh4,;o-;.8(s *|S?^x'V|tAQahW巪ʽڶr߀
-@Ʃrkcp*󅅅m۶m۶-GJ%>= @\<g=s*駟Qa4Kڇݻ4Dr\Q@Fjn?XNPPpf":8xnp+x_2ztՀ\b֭[RVoՆi5;
-jrR:|mEpխJr\)u6mUeVHt)ժhxޒ|&qc2222h= l{ ͛7ѣGVVN*YBUBّԕ~G"Z9#IBFtx??wDyֽ{3m6m̬Nj5t%=n۵kי3gfWQr?}̙3Ts^RTVUEI?-Zp֬Y۷e.Fbbbbb瘘8> ˃Fu9""bٲe6l6*.{Į_m#'Ư[٥y;~3ڷo\\\|8~:mٖYZ&(4axgϼݩS~ڗ{)T,ϒ?|	dUEgZ魾edQկɫǎ;gΜ)Sl1HoG믆psyּdttttth4ғ .3x&MDDDow{]%P!;h[>c7MgY֭?[XR\uy!DamΞ-YbS:OurQ̵z_tjEǧܹs3o*ɒFF>%E>NuΝw9mڴ6m4ݯeW
-2 p<PPPРA^TTeoEÅVuߨZ?TZOסb{AAi6Me!ie+vt -b
-OM>q۶m{͘)YOzvۗ<(###&&wfzuwpRK{z븓'ON<GvrC%* pC=L~~~K.Kٷ#>lQH\*+ٞ|lD#_~~:vː~2|<ӦuC.'ٗu_V逺ݸK+XeY'ys*zK@nds_͝0a<o>n J)  nϯO>Fj֬ڵk\PMs̗+糊
-J۶g`cÃCCkޞrC.Kn1?»Ό\ᑄŜpq/\}86^馛뮝;w IbbbTT  .EW.]:tA%ʊue׮]iK)+Od{zg-+޴ohh}|T05zݙtָ47;w(--/~<䣑n1cWi(16ӮckvĉwYBHTPz>%%%&&322hI p)x&IЩS{"_ئ1_ZVRG׉meJ+bfX*ȗ>;g]ud%J=t۷R=ϝJ/_Gb^|q`,q$}ͯ~qٓ&9sW_tR.*K ::ٸhF p5xQF{֭U*QZu/sŁ~oA`lUˀYGVsL̏g7U5Uyi=/]|#xб{dQDN8eʔj%a/vn8 p߿gϞݻw-[6qR*jD޲~XGB";+ͷsͼ%9]66U"(Hm)r!Z|{}||NbH%iw.}WSe̙pݨ̿į>|p֭*^jxVͿL柱Q+oLaSjuIINޱB__ߜڏtS~3.}*<=77UVoZM'#|<=og<ЬY{k-\  LVjժW^v:|ك>M\S>""bÆ{KO7*&lKc@]wt\,p^>|РAw(G4o^jժ-ZwO㡁=ʮ]Μ9s=FȊqKRӗВȊ$Pu0몰L԰U{=W;_7;vKUfl_~Y#.x3j$("ՈÙO||-snobi}e>ZySN#;.Ci gǎ-#gZ,xBfn߾7W}\Rcَ~i!!zyyJ.rXu7k׮{WQ=̌n+**t~ةS}{>h"W/'Wy)W!eYȲnVH,REmZJwo}>WMԛe>.1eݻCߺO~LLL5k֭ڼy:#EQEQ>OCu 9.>"͛74hPhhΝ;(y!
-2;w3ϥ(*RZlYq'477\f/^l#I"PWN<}tLLoP+?K|@?c͛7<ҪEj>|׮GW/:uھ|#GK7+(oe݆WVNn(JVu]IvM̺}Iza.`0$$$В R\H{)Iҟ?}#
-\T}\`כVZC_@ͼTk٣BB|i:WZ{<֣GlSZ/_Dďy7n;S	$Y]WԴmӏ{޽mG{=vm4%?acT~mB(!IOZ!vi&J|pO&9ar	O*GQ˚pw6{߾}Ǐg<PY%gMKKA			ey޽;xf> E`C^Ҷn/EVu0{yU4~~A|pձ}z{=W(*_\n87	Ś]j_TKv>rTkEkgo۞~͸!!cǋ,9IooB҉SfMշNac=E*r4gm8;-3}3g~=c5m#s333>wݻw T&IҩS
-
-
-x	V+rܻg>8nG 4jhĈ۷o_zΝ;.l.|m^W]߮]>HZg3ǋidւTU!6o4iCn*U>z⫍7uo$iy	!kz}wFWlcH޻n|jp*^Bd[o82eRxv^W4|pK:sя[D	îrn?/;=];ƊnO0E(RK'sՁř3gӧOLLLDD
-tǍ}t^Fûr^WR_錆"((͚5۸q8Zr>F]z}vvF[/>zɴ[0`k)MX/>X>ٓ{`0<ܼ:]2ʒ$r(~:--oFNttvՠVB
-/(P-^rq&"  HUt29NWP|e.̙ܭlVcßidxNf՝_λcV:juAAAr˝w޹a  @A܃׷[n:u*++[|bq-M7?X\̾pS0_~'_9J^U֚۸[^zq
--\3Ww<t۷߻%!d=:ujޤ6@:pU{yvX:Q[7m9zcV]_O5;qkƪOef
-ۼ5wS.:Sk?Z4/$[ex"e^V-gΜyM7-_3sW ;#ACj;u4pVZeffgպjmN;w޺uyG"t4>܊]{cw~ݘKm=XS~?zGAAyn|zU[W?>hܘ?R4oJ?>'?ioZ3=7)+7գ^Z!ń{Nw	oRyeeS }-Ε5kk{qY6sݸ=K~4}yF<+V())|CLyH{ t;wѣǑ#G6Nv76>hCI)StOh\a^nU2ٶ_ww4iKApIo]}ny7>vȑukKG*=9J%?ơΗh+$W%!M*EU5;rbIMde;_k$hn^kj?xwdV&^{Jeb{>9|'xb̘1~mvv6g,IdY mQh߾]rpQ]tٵkyG"h|\qmڪٕ+W>7gYK|᧵[̟=z͛7_{O::@rU/o|'us۫CB0J5GYZB=[иq:bB
-W	!BC%I޾#c+~5o3kѼR	!x9z֨oYYYVV8ԩgU}z|ETã7,;J(*k݇>vo[kf]?kO?=sG"u '4,z*))+){Zx[6^:?϶#\AL|yMy~hiST.	Om7g_>]IhGf:/Eq\nPFT6TGWPP˖ou{fj4[kXvo/nJ.)OsKWϒzh -+_\Dm^Zug-wM0/3S#c"v48mڴ0`u.wRlST6Y5֫Wݻw/['2Omң,L?zr83lYVT*IU7n߼YP.8\x=sxo٧w+!ĩӹ_9y*I=>?beڱc96׌Ԁ:etcƌrЋKgČk]Rkj2y7֬~`$
-n/)."HZ(BBxy|hݻwY4jEQfZuY.+:ZVv{=l%Ca}p}]o긵56_>/`??cƌSvԉS= {cǖ͙*{_um}<M^2֦;u|kB-9ſqKӱC!.t%|Qq^]4s<}'OvbЎzEYǟڿOΕe^ӽ|ȯ(Oq^~~ϿaԜK('6}ڳM0ẹWZLӮ|s7|3dȐE)!9s:$I"${PJ%	DW6zhUPdBmZ+hW[XDYxgz;mJ]9yTv:}Sub'/\n8!z ~	h7o>`;w9rdϞ=NR{XeԲO߾}믴ZpD/;v]=
-3輼4*d˲[eYR.y]3Hvl6o
-!	gWu?GtZMo ~oɧjѢ$7_x'J>ۀ￿NM./i>sQU{6!DPusϟ/mʧ]Ѓ};6sV?KUpNƾT*q>Kdff]wmwZ<tKk<D9w>iS}=ok9/=57+omqư1C]bOcE(0q#5|Mtt7ܹsgIx*zr#ACԨQ޽{waݺuk֬a)sAS,{t]w⋏'
-Q+yߟyn[<	-ULTj!D;<[Vfj>6:$1?965s-n3Y^;zdxmbJF c0~CƝÛ5s\uT>Zvĉ> xU8>ybݵk;kWf2u3&!UBU{^^#GŐ[Y[A=gN-NkrsFosذMl6'۴w`+iuдYS]n|Dv=a䠀_0ZTnTק$yƝ?Ǝ;{TD 34DjE#G<tАwRPݻw߷oǲ5'/dv/Ѭi^;{?weO?߸x.oo}}u3v:Vn3:ܹoQ;:L~(={ۧu>4Y3~ ZuۑeRZ{	ci?k?gkmG7~
-
-
-&O|͜(eYKQF-jVF9B :ܴP{vot":{
-첬QIhaB)o?c#?_y߁N>7AU+޳7'.J<x_˙w[cƒWVtСۤr>[F<]w9sȑ#gΜٿNQxG]Y 9kB߻wN:fHwC5tݾ|bn}E;7qzK|?δ}]_9w/swwL.*mU~)o?v
-hTBSsi$Itiz*M^gc@~m}||bYQ)جG*ˏD?=o?RkW/{W|_~yGV.q>.]>{%N镞qfsBΝ|[T;:ߩՒN).}5K?6rD׾ElؘRI#wt]Y|5J:uǂjyOO1c-ܒjZ9QQ3; nݺu߾}u:֭[-?ө]r[jZѣw-T6ڑＷFqnUg;W++z #i-ˊ.ڇ:JueYvseي4!Ę-[ejZ?xPZ}a\ٖ­ێ
-!:vhҥ':z"h^z>k耋諕mxfFwޏ%<3\%~p#~?Z\iu	!:up}[O=ghpu|srw<vt,V,]{$6^^ʉonq讝<|}rngqʔC[~7%Ml=_@XI&-Y?S n\hcǎ-[6J+[dٳ獷S?KϷ^N0(6g>߬ia6	VL-B??/;>b,+BǈλB{w̑_iF;*ql6yя;ÇutU{۲5S1_WG
-gzb<;Fs)3pxkOpW%ɮ%eiS_lٲ1c,6}PM"n#/9}&qcZ5gkCi՜]YYy6&mZ6kحYS*vWp{9kM}m[o/mӦMk:HT'=nzg;s=Ϟ=ꫯt4 ԃ Nkٲe޽ݻ}޽qGKެݻwמAtR=R[2y%l~TnA7L-+**IWѱCA!1zީ-[3jQ#:f
-v?~"K/ɅEO_t9u%~/z.Jgy~eZhtml]mX8>w'53pAx2Gn^/o-E.v?رB~յMBFt譒,[,w$]mi7T<z4b6eeUȪ}&?<{7ߜ1cFtt?g/{$:s[_h}u֭[n\Vu;u)(6?i}cVB͙:;Y'sn;({t̿-vtuҼl_\50;®,
-7n>\Zjճe-=T:r,`R;vzM(U8Z[U9|n}f>:Y咬G]w}e˖߯,F^cfϟ~ȴwTk4F-fs?MJf>>sڨ"ٳ%g6iCk:pUb;w[pm^Jq-# k玎Y$%%͘1n2 pg݃˫cǎF144ĉC?j$X氰[؝_G	1g{N+-~pfVIKvb)Blqla(((8|W,VTT?mc擧r^W1rxV-/^(=c۵kȓ^Y~Ia~s333ӫ.ȱ]|@x߯o>cǎEGG&5}i|57|sԨQ[7Яo6>Pf'||GE?Qsv͛68|T*eÆhV{}3E.{rM,\{ovVV,˜ps =hG]t?~1Jr]_Ȋ(FO} 3?ԷWN&]+7u2UұC-$8]XX6kƠكOڥ٘.ޒy$疮m}hI}
-Jyr;9̬oۦѨ"Gwn='Z4:dV}H,Jݳ'U\3gwWLE~Ё˯ؗ/^jUӦMΝNrKFedUWz-??7AS6*[U\"ovܾΝCk@HK/?z#\5vPH?ٷIW};S*ş|70sVZjmB1 .MϯK.Fiiiw-}g6)uN:O4#z63KhsFL׺o5ݷ9gI(.WMs͂^yaC:{r3ee6//o!W]=zaC:tozä:cXlc3AN%%֠@ztdLT:?}鷾gϞz=.:9YV$0C]%Y5>?0-Z;JB%vSxYe[q1Pm뼔F?ֻ|fB~u}3>*Q|ӦM:ujXXc9Ԡ@l;w|3tЁ7g!N4hc|s`k;>sJPQ*+loOsKB_ߴ-%-ܲ(ߴZSL4wMУ2^nڵ'N\嗞Q{Z݉S1sF[LNs߷uyȡmn*fsYe?!={>|]vneٲe\s񸱏΋rtsӃWĬN*4<	..梂& ju-Fk*K7--m_Bh`k0YOo3ر)oG?>מ;wn\We=]ug>SJɶXnک>33رc;v:pTqƩ[fm͌Fo*cd}}5ĉ]w]LLV+ 󧜿 { !IRpppDDDjlZ׼9JZ,]]PGv;v{>)7O.>@kKٻƬYfС%?eV[֣.nzkWܜ=1U"RVl|pc'[=vޒSOړA9sb~m>'>_LJϴi̙rp9c' wF!oϞ=㓑Qz%_wؤs!8E.3-C7>i=_X}/zm_=}ӲnY/ݢ*Kcm$))ivlyz@Ue+ȒSҎKtǬѯ<v>.X΃釛۷_Ӓ3.IvyDhh#<2}~C+ {*Uݻv횑|r\ࢮw;>Z_\Kˣyoo߾nuv_zk߂xl5jtG5E=V͹OznΝĂOp4,]dκ~/x͈]ERwvdsqYrMS^]ǋ[.ˡ:lyϻxI&L"jpeЙ .M 8wԩ[nM6.;/Tر_w_>FҼkWZu;KT۱{ٸqzˁh6KO{q{w%wwk<M/1i=seid۶˽:M;檔VZ%%b|G⇎3\)))EEEY2+י  E?^?lذ𬬬;wjB%%17t?PTD*|7ssss7쎤ŭJԤ{~o}˷zTE=~SL޸6@:
-b{ijMB5ᚡYBReepv?4+>Ju;Qhm~}p>>4i|9!q8z ܚ& [lyN>p_/Kl*}۾-ZشisCU1࿎m'k֬ׯ}/{+W+[Om}vپ}wj=5E=ec?{7~Zk9Ma3gsKK}z5/,*ֵIQu}0__.	 +jw}e]g1Qߌ!7l/|wy{g[fv,˂\ %4P^pph		󴮹l.Qvח_m+*!M[#F?f͚Y1s澽&O;Zo'ܹ󪫮z8(,eSϵjj7fQp@J^~]V<xfSvi)]-[QUWWRɐ%O{82mU/PJ8o>vGJJʤI^t\{TU?|}}[j5z]vunRw*ԴkT˖ɿlÇvBuJ%ɲ(?ıdǝ?TsQͷsUs\Sjs׼mmqjڡ%/p4ly;<>>'s~XǮ]~ؤn/zF%>d??[ouRK"JV&gϞ[owl;3N?5vL׮]X_<jOv[ξU.	$Jrwli
-U}c_\dɄ	&OQK  qPk֭{ٺu.ֺM96C奦j՚*Z1&ݨ2sn{\u궡T¾T_6	WҶ֮Eu֣RΜ9SZZ*xuEUzkdM/=sgZZZ۶mkv	/"\U믽.oJ"qAnٺ'((^.-->Es[~`ނ֚iKzx7Zr׌l64_Z_?Mt	eʒKbbbnݻ9%N-  ꓀Ν;0`{G]YvE->9,e	?w5Tgu+)d{*1T*_(*J^k~n- jT-0G4tSzpС]%KfۿL޽{:	Ti7nGQVZm)i[j4gV:wncm,_ֱ6r:}$߼Yp-2p[neРAW}cT ;?P>}DFFرcӦM3:w#rFJCqIs$g;]]N5k֠Y}%,K.g>tЭpL~ZR(4$g֮=|aqT.׬Ig}!a酝={tu;i]>(F=5p|}֬YFQrPG,d= ֈ{*xyy5k,<<|ܿolj.lgZ_swn:;[_DUi&7&JJ2EQ֮?-={Oor.|}͚5:z|NNYP ye+=
-Eݺu1%\	G(R۰X7УG'xo߾~~~\jfr. pk YQZje4;uꔞn6)X[מ;5--mذah뉍eouFmW^y}|:IW=P\=W ˲%p󖣛6;~jM[۶iyR2˙u[ȢnЯi׽l4\ϊJ-m9]^Hy}{Y.]!ű%Z =@Uݮ]={633s߾}~]XyZ|xϟi뮁(A6W֣Uy[Jݿ;n{1~9}_zDFÆ4)-6ҥrUR[AA㧳-və:k6p,嵥m۶9'Ey=ЏǞyƍČ9288LBP nK֭[w޽uܲeF.Pqe᯵te˖lxWo9تH.H;y*77oFS۟;_Ѩ4	oRB{^i2rSТn7&엏~]dUlnkv_r?\  nRuرk׮7o޾_Cg`UvQQQ|w!K:pI?7ҥp/ꝼ|NHpgA>V-'^XѮs˧
-Өf8gÿm*_H1YƌzW'Oo?~\e  r]A վ=4͛k۶mاHq1+Kx{/_oCpA2eK/Ș3g+/bzTSثghvvݧiڨ,۳Kv[`//áF֕(4m^maԍxɚ:~˾эho&M4k֬PX@CP ~?K 5Pݺuڵ7oiM^ZoE"!TXBqE?TR*ʹΕTXO$Usi^a*W^]d˹XrS+O͛QV]h#8Ban7+LmR85'/~={;f4ozpo_Ew|k.??M*fષrsvmy߅Cz>Vt?䩢vmh.w*S|TO<󓒢vhnl}lACoh?}]wݔ)S:vp @}_qwFԧO_wVk])r)oq;،ݗ*ajj
-T*jckĈtvasYwwyBn]z/]9xxƁF!av93Ch<kv^S?'q{QI%];'6{y=O>}?-*^7[z>xoK.TĴ\ 74P]}>oFQiӦk4򱅨]⼽w<Sʹ@k,#,W烎*/\*_9T1Y~k_v.R7Wsnse}9pMoUH9.
-U9ߩp+MΖӥBVoٲe$ݻcZ{"\r|??o$jXJK3grCBtwK?<E;t:M>iSy6[K9fSuر}BHVСCn222rrrJJJJKK8򪆦  ]8p^lN{gnii!₆3{3VB8/EkpGKȱ;ï|ڵk7lмyaBeYzաE9|(J|s|wKdKNI>*!DxǀۏY;vh|}u͚o$-dNnFjݮ~kM4iKhde="IVѣGCCCFc۶mzPũBu ԋ СC+Vj~G۶~'N'6Bo]p.}S/nuD,ԩgfzNRSSqwֶUY#<Ǐg}qtP`N+ߐ啜;fҩ:|U_!^^9_VFnGׯWNQj.I憯;UAAA.]ZlI㣦Kt itM|ɍ7޸?w-7"˽ϟi믿^VO7~,g.<r y/?dɒn* ^"H.)6U"W>m?fl_XVdf/NI633300o߾ W IH&<yѣgΜ͚5?x% F!ɓ'?{>7nܟO?xFǎ	Ɓ>ԩӧOZvw|_fW).HWT_otmŊGz.+Xl7Tee<Upx^^~Y̈́?z(5*70H.wpnFsl6kNѹR(V=zb۷QF΂{ |A[dIRRRQQرc?m|t-VZ&Nh4_ڵkeY|{jU߬˒S=7/Yze_}Ӷu2|>}~[!Zfˊ̖_P(PT#خi3Η4]ȲOU$"qIܸqK> Έ{p,[l>|S_9QZ.ّ#O^}Zv$>1#{`hŌgⓚz}@xB۟&̙Fm[}mvYZn㦃G	
-f>ڥs}H֡偻(.<x׷{*awY*UgY7lpܹȖ-[g 3\򫯾ڽ{#ގiwIˠiq3c>lB4 <)j_?9Ǎe!%|cO?>eK?]3fN&bfL߾%|]>OZݫBK{$ ׷]vM6m۶FU"FQ !Gú:)))SRR׳go_yٳWѣhۭ[̺gF!voפ0m7gr``d4_[%p ܓզ*Qk~A:!Dnu鲽ݻ3֥7syg?wM+-M{O'zKvٜ\*Ye/T>ױcp ~eE# bf4ˑu͚5o.++'s(-}P:ߥ̙3N|7Bond;ӓ<lY(#6RBboܜ1uJn]Tfe,[9++|܃TTvGsQItLZݲe&Mxyyq P)Iә@+4$q<_^^ov=̙3G_1X4 ˺gl9wSN}{[SKK`"fϞ}|]8`~Zn淪{V~0B|juhlK~iܢ#vӰcǲˬ=@|~meR)*QX,ٝ:ujڴ/.F P˗߿!2q<>'/o˖-?#<3ߌ;ie99wo}W9vAwyEnB'6?G[
-zKX^_q]#DB轃%%LB4m+fH&}qW.##jjʯv0xmۆQ8 +WΛ7^Ϟ=5q<Saam~ٳg>}8Ӎ7^sA<:'gNܹF:q_|KrU{FC=~wqJA9S<8Z-	!$d?w>Slۣ{={RxIڴ4ֻwoU+K͚ٙ5kܸ  aZm͛4if͚wyg׮]%%< %C5_/^p?<Owߒ6CرG=$I(|q,Yq\FT[_U*\_	VXz*4H-9܀srǴAteƍv*z񱞝sv}_|EAAAT-EUv[[+o<33X_>Ĺž'N~־~G}ܼP" @۬YȢśΝ+j2ֻKWj:ڵkgRiϞ=G͛7oڴ)tP3JǩtCQeѢEׯꫯ=n8O-k%PeΝux 3q7b$w.mTB:߽RwJj@	nmc4.!>ݝsfgh}JIUroF'.A7<p5#,78΍D7s\[hCh6z-&tuF"\m>5zWk>8vPg~WÍ)VD"Qvv5khH*dȎ_2z)e?+r_}:N&O`4ZϞ-~\a=vFd2[yL9C4,t1tFEE9L8=4&Uj5,' 	0F3~;vYf׮].]ϟ:uj\\\KnsE\xq˖-k׮%Ir֬YABaw6̘1c#
-!>kõ~Gkm}S;\UܟDΓ[zky݀-~\WW̫{Q}Ok׮-,,fw#rH#jkO=Edvvƍ1T8
- ,$^"^eYsi*D|n3C<[s
-˴> h&~/Kؤ	wppNX,ݻw'\C!_rE*344_l6#tn_u=ַ ewϩ&5o괹kɭ%	]+ɷ^ff*q}[^޲[6p[ݟϱ,0qIk}9qAߔ_&WumGھe18'3o֟G?!xh݀G]580㏐jb[׼h8AA9[j>AvMvR誛mI۶mkmuC-
-
-
-0aL&;}7|9x^x!88+p]reՋ/d<XUu5rp/$l@GVM4鳏(e@ } :"⍴e˖qqJs|hnדO7n߾d2Y"ź"C1#/I_ׯojjZ _= ð%_~Xb5H$R͡o6`%y%v+β2H	\z8V]UŗdP@8ҁM[!^7J_o˿eG9m01lm"!WXH~?"\},˵uwzݫ?`g]^x)aos9ȯ><8|5ڼO6߭zwOzZ?ηzǟLL@mO피hlfɓ'Ϟ=[YYݛ qBܩ8+--ݰa&OZT^@υ7m:xȑ#?~OuBAgJ${-]TS%%*f6F3gRmX|~E%WD|E/.޷o+~}:8=&Ӈ:Z-Mzvg:_0;kVkll,`)Uڢ]ZأG OOOe \Od.ɏ[B*8](?"aimZ޼m^Ȳ[5ᚳy՛k3z?Evhȷ~ǥ-/WTmR'Z_*z[DW%LWl>kq|> f}NbѦtTfN	˿-)q\c(BSC7|{m6^%t]}ȵ߭m:]:Ӳ'òWL=u:]^l6ߎ6M:0t:nrp Ʋ^_rʕ+Vj:TV=Νm\GBeA*B⃷ƍvO=lZ?1CPZȑ#ApS%p'MRyKsrro_n:m0qaw\_\[KvA9sjĸv&~~~2b=~~lN	6<0ψL4H-nG/oyjRtu<3za>⚁kFDF,*	kh&,#UW63fK&s͖̈́%Yw8zh4""##Ai4;,ظm۶UV5jnrrXy3z
-	=K$%%}BK!n}dF cǎǷ/S^Xߜ7Ə'bڵZ<r3Ɗ'}Z@:th},[ZB0$p70=4^=JHD8Dm؊D@$tCҥK^^^Py܈sΉbe2bwͱ}㯗8&٤n|6,j*Pk>\o6oغ\ocvs]Mz;ߦ թ(mb7Bf$\znisj'kl^vO0pLmrm]Gzm6[IIINNξ}9۷ԕ=,{]hѕ+W&Ō	~rxvvv||sLD7?pͷ><x:Ѯ?p*(={VXQSS5AcXk6!dΝ;]~$ fd}^z豩# &3;dvvvPPГO>9rH???   ]f+,,ܻwΝ;,K޽ǎ;jԨT>/d;@]]]NNβe
-Z/<@>u9(˓'mz!T
-n;w{^0{Iuu,_Y!CbҥK'10ϿW,oذ၇WǏQ  XŋGtt4Bkb=Drâ!  @f0ٳr\1dȐ	&$&&J.J?l޻wﾻvϙ_p}=t묐栠kjύz7'dz p|CXДsqر	:ǇeFch."*Մ8K&a
-.:129uۑ/w 5qH~hѣGa,Gj'f$Ο?/׳gO???  kr\IIɷ~{Q__)S̞={ԩBAtR&i׮]|ɏ?/Lhhpu5fwd,_O3/<Я	!	:Z3fti'0Rl.e4&aUUU/^,**%B=5J)ի:q}b{&ZXVqs3g"##
-Ԭfr82w:qDddP  @WDdQQQӧO:uj\\\WMiйpg۳.\(~7#kjŝ{b5kt:ݣzg~F%Gk<x0''O"hL##+**._ph0)Bb6<!ď۝}B f6K<^VV6p@jV%s:rh:tD".   Uⰰ0V%;f;rg}/=64ݹvo,֒%NzVMv{J̲ڳh||&='A~GФ<pCܤfFCYWWWQQ/˃2sAć=|'O}A2(V( _$T-^!4j(2H$Y𲼪ӧO'%%Aj  .0$){~ :^PP8Ϟ={2		q8FZJ]=gЌ㷭݁-|'yxZug%BI-GKtq- 77ȑ#QQ%[=
-I߾ťX3\l@o2p8 "> eD(9}tTTT0B\{Eam+))	
-
-:thTTi   l6={O?裏gΜȑ	vU*R֬9s̘1c>p6QGs	!od{KɬR߯_<t|N"MÆvw2'N8tPF3gO6[\JJ/--u3wŬ.d=O9qBltr/">  ,]TYY٠A.ɅIm۶V322R @    ]	{mCS-Z'̜9{a2	FwfpR.7׬ٵkWrr'h&	mxy?|X #ɿs:10$8Ԥci
-qF0dpҼrH1lhCN$LCbDG`ذA$z,h4`(((tc"*#;>ʑ2L' ѣGk9bRu|ݎD
-,ށaȑ#Iaq΄])<{P(LLL:tJ(
-z   J ng.Y>x>Qf#ۿc[kaÆ}#B3ϑ\㌇>~^x's![a~Tpϑ^Z.=.Q(@??"Lag<#A~O>tPB{ݜ!C4]YYyys[p7@s$Җ:R<Xa;p7
-Ϟ==&Wn:B8brrr˃h   6ppŋ.]4iRԩiZ}cdfںgϞ}2zU$0t&',av)dBj｜i1N:uÇ}<=KWt}5vtLa
-ڙYC3	,9&.<xf?bP	AΒn~Q?!rA.G wlR'O<T>h@oO!8,]`\WUU5|p/lM.'n-t?~\4(<<fr   ]{8cFŬYY}=bWv+W~{'S%3!ĲiGTJ!qe_Q>bm׷G͆3GQޗX]~)$I%C~ޞУG	}Jzp~~CNVU%:>M{lb>u,{ҺE8@Q.`HC$Fj(k<~sF164Ͳ,ƲM6a9񅋎2	9r$κh&BU{%b&S?655(   tJ.0LuuҥK?G>9sRJE]pkym[PPPڇ͜!˚;[slPBaërB`tYWVϙ3[O;pO}#շQ2FXB|>-6ZҨ6hJ%IȤ0+M,Txȑs1Y,_99X\RRRTTTYY 
-Q(8fuaOi4<y2k}Bdc)ið,q0a8nӖ~?BFH5틗Y"J#Wa rZWcuTfr9;lEEVj=ঔ|G/tRBBBHH	  tB$4p+VTUU=#*+Qiw4$}r/޽]PilKyf
- Mfylb80JO{!I UǛ?_yH.c<ٹ/3ͥ#Rr!{.uCaΌgN(|_(''gy&66"/4SZ)j~;{h|{,t/#v0B}PTnڴ'?˗q]F|~uM8!DBS%OL/0չpǚ/8SɄeoS
-;vX5[Ξ1rn^a`+**D"QBB3"$UUU ,,,66V$$\`ZW^sNyGjZT
--  W޷o߯ZZZ:`{NЀ=SًGFF~国16;3/ |`A0+._XYB;j߾YJr:խ~fuۉ%{+w/A0&^tEݣcvfQɛoɡC^y7|0xs Ǘ.]ZZZ33'ʎ `ޗ'pu'S?Х44ޝn6;+yᓧ*t:b$޻WЋD֫>Wv ʴzj4Rp4GO9:%{Q#B=nl=;vWW!>0DB(RzoOnqm+WHPreH׈F$<<<T*t)ϟ_~}cc#qEٳgȑ{C   &sW[[zׯ?X[n-ɡʕWq}߷O1[wN3=`Ozu BFȣ1u@_ǡbł!$\tOʴM[K[Bb1;1H*d2|Ͼޓ@X,Y^&O	⬓cB}M,*n:vٳg%H\>eEC=,eee%%%W\T!~H	e
-{B,>uT OR0I7.]vwd`ڜaLN=̇39~𠈞E\Hj-oN..XѾ1|kzk>!"nd GxK+Vo[RWP}C{7]X{|ueM*__(;Sfa	G߿T
-tp~۷sGoeewϞ=7  t6:pxȚL[Z			iiirpa矫TW^yfB	*6<uyDO!B>ҋ%b9\뤙Bbt詧W7a|/OL&g?0!!vLIoG 	u(y{Q}bЬGJp	߭ozy65\i^_&-_+WI"9sA)?GI~	BiѶruއi;k~/>7|X_E|dX&]( ΔI	,=R_o:xpb1@@Lv}Ρ}Cy^#9C$M3CwK҆!ǚ-9ϖ.:PPPEx!bŪ1޽ЛtL.́r'Jjq6mǎׯH$!.^sA0 '  T:Fss;y?R>Z=ujޝaO3&|C+S&0Ҍ.8^E"!tTYYYu~a!Wg=T NtLaMmbPP:
-0DB'yB1Qڦ"B$!MM2=wn~+**Քҭs=ܼjժK1Uθ=~>npulQ%]q
-38)
-ɖE0#I\)=<+c9kj%EW
-닊5A׻gB䩊k@ި=iݳRIiPW_{9ynR ISvO?:p@8A{/-]v!Q;wHaB׫nݺbp程/fdd$&&
-B""""##O8m6N  
-{?аk׮sΛ7O׿;hnvn|}:t'\Y3|g5Art$Io)Bv>t@!	2H$,k29BEY8Kj!$I!altt0qf8 >cY֏?yy6D|uu
-EjjV5Lk׮\Qb\O ǩas"ǧlPk2ُ6Z-ytfD̲\qIg_fOQ_Q|4nҷ[e9*x$\=zb}`j¸8Pc%f$IOOCwKWm5iٳg+++
-Ehh("]VOCᵵfYDDDH$FׯYZvС$Ib?~xDr'N0  {knn޲eܹs_|Ś_|qُ[SԽ?e˖ӧgУ(NlP@54Xj5ݺP2)e1鬵u:L&e*l6GIiBCQ]TF3@B;쳏MMMeo%gj4O?ڵk}z!.j'Νh~mOkP~bAقҨ%FDڪ[W
->CEuZ;8*һ=8_8rKGFNҲ?y%knfe!D6;**nض<F㸸z
-th3eee.]r:>>>
-B` v"b111\FjEEEٍV  y@p8lX~}VV믿>CZYjk::h~1V-\hۧLbaBwpmײF4jBbe*+=4JB&me?(׭wBɅ%oWBJq~v4MM)hYvN*0D#z}0L5D55T""''gǎcSSdq"VUY	1=%>_i&]g
-XDYN]3;oכV<ffb)zx8i&B2we]XhމH1,Ud7ã/=rx31ѿlN1,jT=Wٯ|O Qpg:һ+ǉ*썍j:""Sp,rMf˗Ropp0B4TTT~QF7 q[ncǎ߿aF"  n;7j[/**zw6ҝTZrqs%ba͝߼6Xl6BN'Ӥ3H$bBfp"8pYYeDyha8i?YJ@6C"ǯ!}'k>`+R~6$%2~qƩT5qK.Y10ٹeffޗ{
-
-I03췐BQDF3R#+HxG^%Y,W/(`N!*'&ˑc%'IQRڸof~f5DD,=2
-.[q,00e9u6.Hӱ,лwo///(n\aaçNBD2|>}TWWv-  de0.]r}|n$uu큞BUjkkGʋri%B]CAIc,!
-!cV}A/<7n?:A/\ "!NV,+r~h2DB 0G$nw}PuΏH^O֯_a'=DL&7=zp8y3bxӟsss|زWfVI%8~4jj|HDi \Tܰaә7o=B=/DYΡ+WB#G;Qv4^P-FNf-ZS;_Za d	-D]]]EEA!!!*J&E8ѽ{_~oe.3f@\  Љ.5	߲Zϟ_jUVVI&MzFA]a˷ZSS3bĈoQPejltJRHDxtrH4jL&EBLfPHUTt: DڢbPHEvA3]@Z,#A4qpxoz믿^n]cc/4Օp8ܹȑ#VA~<eVV<-|ꇴϞ=;k$iTw8ZCEesiYP*o"1E"e2ُ喬plvph!	\,B$ӊ~0sމ+'N/?SW>Z=jdBmnwB«꼼z聤bѕ˗+**(!b=?E	R."hĈ^^^B  :x t>}:33sŊ,>_^ܐDКPx~+//8p`T_Rʺ^xl6HDΦTBQA"IlfC@J<aǋ==Bh4$bXd41@whzmn}'{jM?x]][Ϙ!vqi˷ctOHpV[:>^|ԩǞb(»\R)2[VvACiæ3{IwUuH+n?P!M-k?nK$TSP11,ܧY<~l\L!?|p0pظ[46m8YD0q|܄qq$yWWp:F1((ǧt4~Kl6// RAAdTV(rb  йr֭[lb&Ouu{=XƍIIIW)B]CB<BM$xzKT7@>:2K"ap{վ4Cqi4BuӨkЖm|18Pq!-(F@vOǛIU;vkkM3K'lφ>]&edd췇C&
-r,{	z8qb>{TjǍ{Oc%G,!0Bt/EEz)*qK{@0281$0qL[m#$nég*/Tz{䑣%NWDvβ~錵'`C3u#ɻy7๹UUUop=t:pODDDLLBa9   6	@4MԬYfƍz~/nzz~vŋ{oFVv@/&!_>v'E2d*awF=X?a!Qz!6<L>Eh>,kk۴d1R8b.ow>رcy7T*qޥ[Ŭ຺QPPz{FLB?%I"X]^z3@4v#S+/s_XϞWlNSHqܐgzPHIYTu`N>
-XL;%qӖ5CS'b.\AyxH׳o;փXڼn20b!ΊjzX,H$p"  t6PMdGYpahh7u+-%ݷ$y94{!|URldi^Ebb aN8B(<L4iӷ-B^T\X@J1X,˩PH#
-0>^GQBݸC3yhBY9˲tNo6py8ZKK_=:%%%00ܹs?P,=0o)S_7/ʮԕ)	Ϥ;,DG<`HmUWx$.<*&-)-mjAQ>9nnEuNϯF)O=?HvHӅűUy`
-?}t}}L&a9s2T ΍ B7n|w5`wyFjun//ە+jK}	o&bі
-f"a|aCzGKB
-c9/v'|=G6pK.9?=qpʤ,B(6{R]`wBE977ٳLtt??7|56[weeeYY˗& qLESfӧٽκEGD{^XS`tn3&]$!L \fkefs
-$IkfEfźfkPZYjF],~2aye#:ʧGw?4UUH8UUO?rU`Cu:f[0q-{Qرwޒ^$&uD.ls^^^SSSDDСC
-1?qʕM69C8V  NzÆ|ͦM""">y9ޡݎ8mQN}las_|}@O(@6|S	!|83 _rٟ*d@!TߟqwVTbM_~s؅fDCvOWO3xĉ<KhhHdrVFfBBjjjJKK((((PduADKʄG	]r@@k8[m@NgtTyqIcQQ5Gx'Ւn^|N\w?ZR\h>ybFmn\(ݻ+}uNhEBAEltF>I*#gFǡ}B||n&kոB,vtE{
-o˙YDB۫W{8㎭[cǊIrL.ftc$%>dȐAA  :'sby۶mׯ/..p*ݽy]p'6SXX؛_<ގcwg87{_l}Ap^WY7濖/z($"jos_߈}uaKgh]"2u}o碢sǎ۸q#M#f31YEF+V]V*!>|/YhJ]9bXTĠ窖ݹBu~+\(B }mV'q&Zo6j/cΡET"pҌN|~|UfPm;v_,t6(PgI
-grϋ_XsbMtX7	>EGyG{WV'Ii1CN'h~#SNŋILHH		1PTWW$R<==ad   % s8|+N>믧$UU0|/T*/)$]}^F$	BB!c?2B91^A/r7_(l)["vjӧ&ˏ6ӏJ!e|#R~[x1B#G***\]YMoo4s<wܺuøGFz\QtW",_<UmD2]R\`:s2Bͥuee:&Ie?KֻWPUq;:vЀs);QV[k$p31u6F#yq	@.,Ǘ(FU%v;PX+sGp|M,]	
-
-TVo/yB]/_6!!!zzpcqĬEEEǅq=Î1(  D͹qjjj8믿?>&&{R	B?E7nDSNR@6@&SN'!^!8l'|W\\?~^?j{7Oy0%ߵM߰b
-P8}׻.ih'?{TIV1-n ֖7666E1蒝jt,˶h."u(XfOPH
-cߍ8CBEcN'"F{.uI,+I_lOOO'GQb,k˖-8?'Nj8(C۶m{'Foo$? wafnݺk.
-SΝ{bx)S<dDTz$E>0_,/xrv$YT%@c4/%փbY⥺	K0^ӗZg͘ Q}2lɒ%K,1ϚRZjj}Ls΃$y>I/ee.X]A<طoCz&&
-ÐuPH̺)!h.îs;λݕp*AAABm	sb8((/  aptA  +Ǐoڴرcj^z((H]^pxzZ-Y0u愉5UC]C.~WRo5Sߠ<x>aHm4.ҸSCpT}PJgdd|29>dcT#;v,''pL>U	'`9FF䌘X;	9Ih8@gsav޽{*qGt4M{xxDGGD"@ ] [~X  :9tqF?Ӿ}'U{c=Nf_l&LxbvRVPtP;w^p0q,KY̶6nyy~06[ b=wyr_~MV?TWM~"(<y{#GCs|3p?˱cfζ\^"1 :2p:7DG̺LP(Hd0>hD8  pOeZq233qOIIy_?ߚt;=k.8qU9BA7"R!ef>q,7YHuBgt$^y^o233_{ǬV46N<(;w<zj2ƗU`VKV?#g?>}G>5ac t&<uxuuull4L	Y2 rrr.\ F^^VqP  :3tA?~|Æ7oӧO4))f_^
-6_~4i3=*)
-C׹[V^GGWYctt|ޓuV?)4h_}1@ޣzkEkcGŒٳU*Ֆ-[Μ9cXr>>1S\GOcazYɜe_vgKMH#ug}}=B_@k4sbe%L&J"z͛6|PjjM   :=t)&hÆw6ƍ{epJTR`#
-ŏ6sA%Au&B2ǅH{鲩g{@[,HG}tٴ4ܹIٵ/:)xtLjժ˖OM|;~ᬬf?b^}kG pᕕ=z"8UnkhhݻthVjN3gNZZVfVfqj,XpG  =]npڵk1<xCpfpR	//,,8p߽-C%Aa?4.(k'+LoT =$	R6O>9u'|bThnvV15Iܶm˗/_~^p_t[?4N0${}ޗs3	p\_^^ojIJNt
-n@kYYY:wQQQQQQFFO[`5=Gx<r鲲i}RRRá h{l4xQcny_]{ܹ6Aǅ.Bs'v¢ 1W{XH!FbŢщ',XS󢢨zWo:ѣ)Zn]IIɲe=ԗXm1$-I$~~Pk׮_G\zmAUװΝs8FFD2.8Fcs믃ndj9CktiiiiiiWи hx͛A =w0VZZy۷kY'Z2N"/w<tPll߄-Zd@|ļiYo+wyN:A8u# _wv믙g}=>^R]M:$˗oڴf{huxΑyi4u}O/>Q51 ܏a6ɤhbcc	5Ƹ&=øvak~~>˲jeY{0N7z輼<ZNIIj|M^^^VV֍t~|Vjy Hjd۷oܸX~⋽Gk5ff9jbna4){e5$Y^^O;N+(*)ڱc_|axpyi64hL&[bE~~~VVI'%KAgF,yu!DDr|9daᅆ___YW}xCCCUUBPTAt Zb=)))-jᕜ|[+Ǐo7zh>	= \{<ŇڰaCqqqTTԿ}wBd{6'ɲoݻw?1#m8V6uVm۷mhZ^}/-37b~QX,^v~k47eOy9bYnק=߮\n:ٜpq4vq/=Q"hڵxldhno-Cr[<FB}߷x7dx?MnvZW}kTG@5;/oj[E8B˻vR,t(!+,,,--i:(((66V$\z,+|/:q.)--.ZZzV7o @q\mm-[.]ZSSӯ__}>45zlFMHȗ99.7o#3Qffÿl֘2c~T\
-GȰOfrnݺ_f}tŲݻ|Gٺu`2{<A
-;8Ǉ83ٳgO<y9TzxTe[3n30۬bj՛k>d<G);xkKW7Vl_H;mgw\?1k9$Z(^TT${쉤8,ڒf[cc#>>>JF܅9s洞Ӻ03_zp[В],܃
-~yyyiii-վU׫ p鬫۷o;5Φ1|?'I'9CFYܯRr/Od 7mɏD{_\ebE|L\bŊkrֻrNHG	8|pfffo=Z9#I/z~۷oD|Z2oDh\hձ6Av-ܥk6o;[oW7i;sǯ~>5ǹf;MMO]u@ (**X,Y颯 jjjΝ;"##!Imc=IIIE)?ל&I=]RW7iTǉt:N?~FF]:.==Q  ;RIIÇ7lPPP>Hjkݜѣ4/5
-XX:vT)DEd?`|X[MBNCCUчH$˗XB׿S	UUv!$}R>EQG9tjM5g3ÉV=!&{rK(=cV_ޙm-w^οc C˪L&SSSP(Br}jj*_RSSϟv1_pi_g?rt:Z^z56gΜt>EUu222ډH x8tZnɓ'}||RSSgI{1~)+[6'| !(s;1dVȥm36 @}Gǡ}FieHLyf/21م[eYaOOgY$dee_AO1D(]lpY"ʷ9=ztޝ$I\3E?Vn/r֓^As2AhѢ-***JOOX,**<!Z` \{:,KNNΖ-[9T*gΜpTOy9r~*)#
-n;))hwʟ&Iq׬}jܹމVɥy@|zz}VW'8n4t	G0ȑ#G)hpONFs 70^_RRϲ,팓of3BV&!+**:d[2@ -t.:-ڵkWhhifan_z~ԨQ/>S(G:z9SuV+ظf3<tę3KWj0&^~W|
-ڟ*x,PcǎSNEjX!񒒒!HD"D"׻l-ewh?K^ 
-.X?hu:]^^_^jΜ9jgppOg|۷ܹjΚ5kСh4K?t:*ThF`6}}8dHfg+N&DP,Uر,s>PKK47OT|fD[ntҒ%K$!h<I\Y_+22[@ˀkR:zU?gO@힮st~zK^=%%%%%/4| p=83Gٶm[NNH$1c̞=C*+QY;V:s̘1cޞ?1ЯRNnh4lzyweK0OeC<d_x܆yVB.j	Ȇ^/N>קչtDssf̐d۷o/..^j9UOx#; \UTTFODDiד>|N&ⓕRzy{Oȸ;;T\lVMMMm) &Ndջvq|ĈOFZ֯0`G+@OgVYUgٶmߓ֣!"dIĊ/xV~qqe]@4JoG/=rWBp͚5۶miԞdap'k1**...88 ,XǯƏ3?($''i_7^b~xxmYj `(x{Ǐ7/Ν;ogn]8P`F7>z/"2!iөllnjjGѴQ#gW7ONTz>}~iN9<=]Ul3z}TRRquJ 08a%%%Ӹb1hgْ^(99933$a>WGm87|>P~)(iY9HWˆ64}ܹ-[Xd2M0aرC,qhI/W(..ѣW_ӿ	ʠCAeM!Q8Bpg!oIG^(.c ǐ:iIӯ~}-\~SW["h͚5eeeV2RcH_`uEEbRuZj[IƯ{ IMM!#,X~MrrrVV_@gѢEմ48"ׂ/bNLOOl6d*))ٲeˮ]JKK}9Fp˖~C8V	tۘFڸ߼D4MW&x]ƚ3g+hEBpp8up׮]_~e}6Bmw7|H$Z~6oެ&/"8sgWg: OOO-1pOV-Zė@NOOHMMj|Ч"dus'ubzzիy,("""<<<%%?b,kMm5zH Ü?>33sΝMMMZ_pP55mOxtНfGPht:0!0YLۜN'B|~ȉEfSg/=ͺu.]t:%%,M{ڿZ^z3g9xe8c @N`0 roTT\.=JIIINNGѷ&d.,(,,3g?E_z1><t,~:RQQ{zjH]4h{\=Z+++w޽rʤxb
-Ǒvi/
-?::	:NĲ+BWd_P&8_RͲ݇JK~Wj翕^_z{	?Y{,yu9CadY󹹹4MO~d&IavpƱ\uuumm		DP~|>gΜQH,EEE|M<\OCYYY-ISNZ`W?r)c-=Zj_HnWq8[lٶm[qqqTTԼyS(n6I%ڵo|||~Y*TtНKo8>jd//O10BSz億KF~U%BIgr14lhPfDknܸqmDon<ڭ+V8r޽{9Kza,woᐯ͛t{vGCYCj>}ܹK.4V[h7i-مz[jz޼y?Y2ć222nˢipKegg/Yɓ3gΜ)/GF[gJvhAZÇ?Z\B2 sg7feH7	TrFD:8;Kp(tp@٘1cΞ={srx>mbxKKK5Mm
-BHF67~5fwm<xl?k5o'\6nSe6gFfD0H~޼yEEEYYYYYY4 .iii-RSS{@+--ݷo߲eN:2}5g	`8.222)))8CEpOQ+Vv_7DI??/tqxDDDEE3%VVumA6:fիo߾ǻi,+u:jmB'߬;i'!;!m趎萙)mpd;hnn(*<<W&AܸTJ_|z_"8 MJJ
-?͍rpOs:Bqoo`BAq'cV[we1P*fHVຳ,jhlϋ[uBr0GHΡ0n!xWc͞~<{n'xbHjkݳiã@&;{w]]ZmDDD"0e%t`}h'G]hhgeĖonn0.su\nWv"#[4-|8]ZoM[kK!Ia'N{,00NVTZVE脠pQŲH$bY  ꣢4]mciZ(rl6tНa8]M"'P*FSc==pcDB`,C3V)M276B$t2Y֭[U*?E	R<#7رcÌ3{=rS/HkO7n7lDFn{GE4[ВWm=h^j <Cj  tr`,ˊD"шaD"6F&qW]]f3BBv; #.5RN\$/ ooq,EFsM!h?F={lOOzPXqǀd24  .Q֏)))m?c  @'ǕJbar	ۃ>!H<<<do#1=w0={jy{Iy:G<PQFbq:L&PD1'ƌ IHjyimۼN=ZOϯsrv0L~&LЯ_?B  lΜ9mfliZ>sS>X*Bt￿!4o޼Th(:M(:"L&BF4ˊbX8q,BN٪(?R5<BH,!.]n;QV"Oaؙ3fz-bX5iӦн
-^(,Zv]ʢ'Lj}||_  ~!Z`Ǐϛ7c=PFV^ќ緞	<`,D"QHHv$IF($f7tVlf91\MF}XXB |,e"u^
-P0LtbAJH 7f5ek֬1Ǐ">^E9X={p7zqW@  @GterNLSffZ/u݅,d2XLӴ@9l=AQX,lG@(pT"Sx0iV(tYư;/ٳ/]龥j쒒ɓ'<* ?g񝌌9sh4ѣG |&XrǏ(ÜN'BEv:@*Bm`2s8x[INeqz{rPFDi4@^Rf7K~[qWWUjݽ{wiiihhQ ,ZϟNܧB3jNq#,X MqWKalD|؈8n:gXӓ_l6CvaF~qc.(-=r$",!$AбcEN'\'=\:??ܸqyЊ
-ju˖6_ߕ+WpBppqF  p>Ӧ|O^^322"GNzjh\=wP9XLSrr8sc
-EܥUE1_HA_U^l٤!@ņMGBy'
-4D|?n>{lgUSӗUEQ۶m&bԨQ
-9\  jj:<<[$@/##cZ6--mΜ9P;AVU*ZVL.,0aop܉zՊa0dUUPHsZjdK-Y`zt3g/N|e%<zhBBCSZM+G0l%%%Ç:  
-yyyYYYyyyjd@% V]hQBힻ
-{:T*Ey{{{xxaYVF"BR$I^4%p sGr8&kP&7&Z1߄0≁>aEw
-
-z&:Ds{*ջvc@^  hSGզ{ #_suvp7pOǣiZ*,a?8I>qR4$$pXV!sjn46NS(=cY"ql	|{Dm/U(.-.wA{j}{ꕒ2eqzy]fe?~1">>b=  
-GjHJJM΃  3pO8`0paAYVN]/f6E2Aw.p"	,87ٔ
-3zi{)B"6,>x~nnd9,6ܶmɓJwl9XС<{=|0X  .ukQap!64-pOcYV(D" *++IևK5#snAoR!Nhj4%%u۝XN,Z얭8#Ieok7_>- 5BhsfKo~5͆;i&P8qć}}n:aJW\zjƏ?zhV uRRRRSSF_஋8|4m=<4­pOD2L(zN dR)f6qra0LMO_5{PV{&u80$we>,=|t)}aPuuA\b]xʕ<cOv&pϦYcǎG}7n\_  uZ
-ygeet,ZjȄd   8cYPqn/uN'GBPR80pqC54ZhکQ#)Ϟ^hw`Rϻ	w|%f+V7n߾	&<tW<<V?~>~1c  \-//oΜ9W>E]/z   'v<=84m2l6BnZ*
-OOOÚm6rݙX(+k(r UTڞzzA71!@H~W_0큯vMAkZRb
-N7y7E)ZU/ڵ&""bСOV5  R:n-y楦q_i N{:EQ! Z۳7q44M3q$١8N[ZVV{{jjxm6c0m6V1H }K%u,pG h$֮]VVV6~{WV7*//>|x>}_  t:Bhxϟrs9i>  ЙAvOcF `&(2,2m032&N3Yml}}כH߲iO)BG&
-=^=0BbA7 B1j6~|A3&=N,6VRf͚˗/wmԨQC			E^  =222B,7o^[WkYb=  йȿAӴR0iBA4p hZTRE$ANe);QCJTJ=,[c#G*z&`sӾ5BҥJ b9C5._ܫWOOwS!yh4۬փ;wNP=zȑ!!!R  ܣ*|5OӮz?  9A1#Jv;q>>>jncvLrfFPn8qXԬ6xR!ҫK^;qs"B&-ϰIccbs%]Oxro/_ܿ'x `Vl,**֭۸q)c  _9\= N=$d2a0	=NBJ&6~]:]s@B@aEg҇N|*J)6_3ՄlAK݄Uu.;;;""ilDs{`Ztn޼jzܸqsOTTLt [0  :1#X%Ita$C,-=,l6ʲdr8EGw*3M}B&˝:},_%¿,/
-Fϯe4b~>uoo'i\w϶힞ssss  BϿ_u:]ZZZ	>  ЙAaZqX,v$I	8n7L?wCއ{XRpdR*p- OMc'܈Ke~.ܺu?<].ܳb 
-1ڰaCnn.EQ			JA@  y[/jy)]  ,X&r@P__9Ŕcw:
-L&"8;	 N;ZԴlȯ~X+dL;&[db݅:9㓒򔏏M'!zwލaǎjU*t  yyyYYYIII|"O^^^T~}k   pgYVѐ$qD"J69m%Q[40;TYmhhx͇xgJRjj,VWbψfk͞?|nϞ=Rtĉ#"4R]Js)㒒&M  Z̼֋,ů~=A  tfx|$<<<hS18XBH"D"l2l6;MF!4eP}FAY6!7 -6ʗ/_zGQWT'T[ϜͥizݻwX  v|ćO>Z6%%=  w`t(J>bP"A$hwq` TXԻG{,;]\RӼ<ۻb!dJ V322vرcg衩tSxP۷olG2d NBjvyq  ԡ	hO8N,[ֆD"ѕhAb&e2qaq6z!A*+3[hh6444;v~uun8w]ZZܷoߠ k      p5xfÚND"iaV$v7fJRh48N4BOAKM:oK,Bʠ9dR߽Nۙ-[tƍpO˛U_/^ܵkWEEETTԀzV0  >
--Kq1ٞev  tf0x|.T(beYÁX,a	q@n8CN;Z%536op܁DB!PܽXN=[buEEV}bhm3I5ٗ/_		4iҐ!CÅB!t  .yyyGnYxh"~]aD 3pO)Db_tAK۳{wl6fz	1>IAO>>=w).Yȑ#C}{zt_yN*5Tjk[UU2f̘	&D"  ̙zZ]+4ϙ3'<<r|   :3`qAF RH$"$II܎q'4p8`Ŧ;J`roTJZ,<'UgΜ2eJ_=Up>|{Ȑ!CX  ^yyy+dddB{  R0dA"ڦ&Hđ!3D"nݞ^ pOQӧOGGGϜ9s:AMM:uH$6G2  n/>"\-ٲ;  =.!8S(veYP
-wwc4O+#Iq8GXZ=yyySN.ܱe
-}qeZQT* NV***kKC0  :=q\.qt2Aat	`YbXV# Z_}{Ϟ=&MzH'փ]-oܸѣbo߾1  y6Ò= <\B 0#ɤR)A0c{òE!L&jX,4CBЅ+}OٲeMƍ$q۲yk׮\3ydV͟y   t1|0v  p`*JX,HR)EQϡC(D/߃|fX0ngY!y}Ν;RIfuﮬw϶͆C?aX'L0dȐ@w} ?>vOصp &sfV!DQIE!o/1MKRF#N0 E~?rfǎM0}kj*8'HϜ9uf=ztbbZq   ] ;{\8@aADǑ_+ 2vߕkwaZ'Nn%sÆ۷o			CӧO@@ z  j,W/-  tZq	8EfFj-3NCn^
-
- a^oB`Ev \xY:gjwzp4]vݻ{G8p`PP@  &99֪28  z M
-,80bn;N$QnU{FjBnewzXݴf͚ćƎjjrO(J'%mt)33*&&fĈIII 
-w  :-Yq$I$e2H$qin0sjXV,KRT2vC0;v3##|N6hčFwl$={dgg=:99[n2     N&s
-ruY%IJq;\.J|i 0>Nr=hzzfƌ6n0aӜXlR_
-
-
->|Qb1t  mڟ̕#<<<<<<555<<  {\///p8pCd@ub!:;êNV^ٳ3MlMMٺUf<xDTwРA!!! Pt:]^^ZNNNtIIIyyyn  6q!La@ iiZ]qtrC~؜0a	XIZ6l7n<zP(0`{hk   \"Xffիu:M  m *Eu|fш3r{fBF^Xj p'Yn̔'ONQD6IZ2={N8AtϞ=GP(R .I#WJNNj  )bH4@.#f3EQInX)50(@@M!"}^uza5jIPZFlqIcy1ER*8,u/ǟ8pkɳ""dUUn:yzfST֎"wރ  ;Ӹx7*N{   *qoooBA$MCW@gYq4Tq,0;|o_Z-2)a}=U?ˣ7"={rEs抏n_:tHTΘ1peUrKh!cl߾}'M  wBddd͛7  =bD"˲"H(J%r\!eY.!Q_oj%MeMÒ$qe9jJ)h! DBuld$7ǟC52@!,m'vZBDp7LH>H/OYx?g&dggDѣG?,/GXR.s9ݻaz	  w-jz+-----wjj  }	hD4MK$n2(t,EQL.b4YN}tMVJaSTWt:˕#A5qbRIra8cJXLu`lvxބU(쯺zMgvǱ(0O+1S+Μ*-m*.i,\$!S}Bch6-L?uV<f̘'sOJΝ;r^OLL5jTRRR`` } o&@JJJJJ
-BHL.  p3
-0\!~fHZo^9biZ.+Ypvk֝,h۝4Ͳ,aE!Xe`q#IPC[7'B}8Ʉ}B<( c%B*m -l}or8N00 0(ز܌
-qfC/nܸQ׏1Cspzxdˎ;x`ccctta  {p   p9Nft8,˲$yb=&H0pL&FDBT>^䪌5NR#/6C#(աkñRaU^^ݙKB1zzzZ6s˶sfPXq
-fzʪf@@DEzJp,/6WeU< dy77781bqL{GFF:w      78N"D" D"qVh4rT1۟XV$BE5˥Mfm~[uBQ=7:'(P8ęLvb6;.]T
-"Ɏ\欦ְ+"M$'DdK@c)!>7NoyyƏ."{{{EBaMgV.:{q\iYSFD"jWdܱcGeeß瞞n0aӌJUT:}:;;:<<|#Fg  \9  @WqqH#v;`YddC,8.
-g{wł+/HY!$Qz>`1ɱ*dYppH4,i{ϸ_KQE؝]!3G:{Oz=5j-Br¸id@  9cQU$#B=zr)kiiB$jNcvMZImJ冒ÇWVV;vРA2   #_<;eeeeffBc @ǵ
-AA,˲RDvwôzf9pl?|d#{?:ѱ1Ѿ-1Aatm,8D&&dRmq+$_+-<4ROi;iA*dyerKB
-[VK`2ЌfN|Æw s[ǪV﨩.--۷   fիWkګM  7)J$if!{,I8{t:ݭ{N&Dm@@$iCysܸ1<3e9ZSk7Yf[fdRWq͏+9|!!i]9Pc%!/Oy6O!|FEBH,c~~ʘhoo9mhx3g'L0U չc8n2ٳ@>|qqq
-  @\j^攔V;ghI  p)b!Ij,KQBj
-BN(hY8G6;_\Cr &=a<qܩ[۽ҥ:fgIĂ(ã$&&\q:K˚Ba*%ju?pވ
-]WIhnəU!D
-RˤBRls'L)ròXwYwxL&ٳg###R)t  Z&saEv  plƲRt
-FNX,MMM&Wt)rL&khhpyjpW/*t8Szͱ~Eō;vovБbkdFD	\Xgebwn^'O]XD"HLrղ4^,X{!B=|2{\y/,])S
-V%փ2zx۷lr1Ç  i  ЙAUpZb8eL4a${|.]
-N ~)egr]\臃.4IŽ<w?,w싯ʺ`Byyɂ"<<g*+M&u9bc|T
-89TtT9BKG%oqc%W
-u`<ٱ{OeG²BGRBlŁ\T:qBC+;֝'OD%&&5Jzxx@  uAn5  {@UHRJU]]Ͳ@ C-n &X!$K5wU8y6aVm#i ќO.`V.2Rh^~`U	͉:{uQPua|f130T*hםhE\81CN'c:lEc%	DtϬG	E]x>ۿT*9rQQRl!T*nt	GѫW/??OV   @j  tr0s HPE$IQ4˺;$i(J(Z,z|vʉV2+}3/VfUF_GWO>6FG<G@aʢFp(bq^Wx^!Fүoh`_gV9ZR*Ž{oyu0t:k+Y,&fث.485:9f=X+	+}novv6#G||@Z7<<yٳĉG  (n,6  ^C˲6j
-H.J$p7glcBp455Y,iF@M5VE"!3hn͞}v:	R?@sP~_'+!$bux`5mvg&UH]PWoBEEzoכ2XOs`L&4z!SM|A"Jª:_ؼyf{g^_YݑvG+'""v8~bѣw	s   Czn  W6.I8.HB4Mv٬0A8
--|Oq(RIQn0!!.#Ǌ8qT*۫g!rW-^zR-B[g꓃ޛ&փɄ
-JϐUx{*I6d)@QѻgPDHDJ+?*!޿[XLn7-'Nw¯ՆHDzL
-T÷ٻsrߕ$v$Xb1H./]U[˝{'B?L=LLca^阈遙jvU1c HhO-gs鬔$L	#I<?_r1:^_<z,˻vv\11!,k67.ׇ~xm۶m޼VϦ 
-,&b < wfS%9ޅo۶ÇlPUveY\/N
-~Υ;wUu5O9_}w.dOE9;h4ŗc!!b2eedڇGn0&XR_XUZJm[
-!j}k,pjHd2y2K]VADCÁ?)MLD_رySrdWo?zؘ<9&J}~xŋmڴfqj  IC! M=9d2hbpbs=1F!^ёB˺jeڦM#ӟu8u[o S]]T曁Ѡ>B$I.>$|j_r^޾ǾD,PjÜܷO!V,/_raKwX f!W&n5y~WP$~b\'_Ѹ﷿;r`SS߼|d=Y,=.׉'N>}7nܸppn  Yr8[KG.
-?QWA$"t:G,hEbI-~>l:";v>eԹtIiu}UպۃH?'j,HMg|"<:))v6\^!D>sj;/B֬^d2:e㱭|ɲH`l%~{7r`"߿/9&S
-GK;ݻjժ7xc}"!aӊ}ȑ#ǎw^uum_z%ũ   
-qOhcvޚfiK!˒Zv299yaEQ0	-sqܝӟu	!4MHTTd=
-GF_3phc1AiylVӂrlp8,[ok[bi艉ȑ_+mm,%_~j}Ӎ-R^Owv`Ͻp8aP"<Ïb,;onjjzl[=w^S\\cǎ;v,Yv3.  Z ˈ{rEwEUUl0D ].fk⣪Bfs"!	\7PeYRUMU%EEDӴߎ\5ڲ~%
-Ŧ{$IȲiB%Ÿv僚p/!lMUu%fwwz܅LU+/Z05UHCBbb=1U\?sҥڏm}}y]s8N8z[[[wx   ,_xpl@ h|yùsyC4jZGeeD"XL4o|`pd2&IRE{A[QY|uc!!%ojߵ<Ng>jFԙlڣ(Oouu	!*k}Ԟ\gv_PQVj\SY^]CI"ۃzA9kj|%%Oۘ}('Ϙ?ܾ}{ݺuߟI1X4zܹn_~ ̺ 0WPQ٬((Hdlllddh4j9jbq\f9'	UUB9SX"&lz&'k({Fc1h7mۺra,vÓo!L&Cʕ+lHnū_ZObϷߎ
-!vӂrwu`gC+WG/v#X"^G^zd2\r˖-L x5H sRUUjsrajUHo(jZ}&MLD$P{=u%M\>Fc'iڙWx (-qo]c6wFϺymu}
-9q!m,ZPJ6DS}h{?w8/_yǏpB<_z;,< *%I?C`.#!
-L&S"BX,UUQߛ,'	`6UUD"pX+7,KP,9jc᯿P|+ZM1IU?<4$}hU+w"]!*m.)v'i_38ѯ	UQ]]XU]egPMWo;wd2?mn.Ox>QǏ_~]UV555/  ?P 0Q!EQS񌌌h4ib>9dxoxxX4!
-L<r}]K=!h鮺%UEU^ŨWV7TUSU_YQ)J'?뵜q?vsj=M4MCK0;`_\}pLf34VS~7VU,[Zp<qCM	U'yɽ9W/_׳Ѡn\}Ғb'⧭
-[Ò:{x^ysȈaᒒ.?̙3xyǎmmmV A =9~eZm6[,Vn+b3R"?22H$Vk<4P^*-u&A6<8ccVW{+^hoDCC+_<*)qoyakaXhBӴ>(mzBp8>6u{AdؾuiKsMj399W~XtIYʒbG뗯Zm,zh{soR²2p$x۞7;ʽb1vZײlify8P'&&:::֭KOrWKvZ~z  ϠnIO. ۈ{rK+ʲl%I
-BкG!,˕`PFUP}u,fcMox\y?(hĩ_3by5"Moi,t'o#_mxfэj!}o{Fzb6JD}o~ph8c+5t-MqM%䌍?<r#
-!/+_[d{Jյ}2.\XrYTU=[$k?\ÇzwOF~ye~~DqqgΜmmm/f B3 ˈ{r+v4MYl8b4^힜pE)rY[7-L6,=^k1eYRUM%EXXѸrmSek4MsuKJEv=B>a0h"SB>8t϶KZ$Gn>hmSo~ٙ;zfu~^b.~{}''N%dIQp8Ǔ-Z^ruO?QG}444oD6ݷ7o^xqhhv۶m7o$ <=@ sqOnEQժ"b1IU(yh4(J4$Z_՛͆,K}ght449ްKIzkVW_mHa]xMLF:/h8O[ImoI};}iM"[[dO&,zz$ƪۖVUA>uRx8K'&"Zn7Vm-/smzyǲMy<6>OQȑ#k֬yqXz<__xuֵ.[rqn  OD}YBKUm6>$I9۰ȑ<(,E"FYO,KUE{~nEb2"CTUU,lbǢm[o-*&(-qض̽|Y}}}H<9s<XE|kVWX^jeEBOЊW6]<uP(tZ~m6sScD)Mӊ}ｲHݻ	J,p955^nV,/_k=[(RoF{-YW^yj5aJQ=o8q֭[5557onkk[j  G 4➜r$1$	rC4u8dh>u}艉h4i/~A6W,/ꂔ|>u[6n*VUW7ojTX'1!//]]]MMM:>æ5m9|ӧ.\q+Vx^9H  ܲl6p8NUUC(E<]I$
-@bFM
-i7qY>zE/eeS\C>{zm۶  G{$\5@ni(nWU5if2$I2'yS-	Qeefјx&b~G_uCCÛoa~
-ݟLL\ph4^zEEEF#q 3ߦ=  A=%IRQQ>hl6x<H$dY󰩪ʲf+))ѳ`0p=3xiSg/_z?SSop0p**b'N~h\vׯ__UUE EV Gܓ0MeyttTUUɤeYQ{˗p~OlH$$Ih4>]ęyGϟ?oZ7o18,=eĹs_a֭+Vx<d= ܡ' q\W0Hvb65M$I&'%ɲKx\F&d~Y4W<<,7nR1<,>l~,_|YիWoٲu M 0к'ׁޚ`0LX,f"s%`ZM&S(PEhw5ם{ȑ#ر';v<l=\Tt:}Skjjn\SSp88; 3 \`0!l6[4evG">zk~ˑtZ`0C"x 	۽ſեO>dlllWohwɓ'M>\6m7  9
-:sGgRv!EQѨ(՚\BHh'Z	O54a)o:u*xi|\%%O>?D"[nmkk[|l  r#] e=9._1X,Ů($IC#p''_o8qbbbbӦMoƖx<?YpܱXΟ?900PYYq͛7/^fqn  yUR 0pX,I]F"Iv)Nf~||<L&!k3+{><44$GGDqqyƍsnڴi۶mvs :s-99L$$ɏF1XLRUyDBߍP(D4MÊb4gNÇjjjpq^{.]R[[t:v #3 s{r.Hnl4MT%I0[wͲݣ>cccj5	Y&݁|M]]+y#˪k'O|AqqqKKΝ;׬YSZZ*
- ȗ\t=M&S,X,x_UUөzJw.b@B#9M@6ђ/r?~Z_h7l֯x`O>9w\"hjjjmm]reII	p IUUm hݓ[z֣O599(ZcccbÅb*ө$dZ-iNA1x)O?.//ҥAHx˲f;wɓo߶l;vXvmuuu(  yQeP 0)4M4EQbXqqŋ^o"ey%{wcn>AB$8S@	Iב#W_}uϚ5<4lmێMN^ptΝvZzuII	Y Vt) hݓ[z;YKKK^oooo4pXyYCx8$Mq!d!!Sg;}dя~᜷BȲ'O~i;wljj5 <Z. `.j!BlN$7$tjK)t)OLLx<In|f[hfNAJ{rڗhJ@:/I}0uJ[rMӮ|ꪦ+LDrɩ624z3J5'_a{ҧO&џLitfgz&syebbƍ~ٳg'&&vחj\Srܹׯbe˖577755-\ Ѻ {^_A944$˲>)ޱKUձ<TLNN8qAQ꣉9yyl!"3m屉FfڵQc*ϴK:-i#d3-3qbltF?SD(CEeҎ:F~{ڵh4뿮ǧU'KJNL'|ҥK[[[ׯ_dķ+ r) ˈ{rKH$k]}Mӂ`.S8\@GG<88p8z}zxvǞ3J;uڬ.hWɰ˙܄jM@9S?zD;111::j4O"?zƸsh<}ԕ+W`MM͆f3_ PL sqOId$ixxx`` !4)T5XQʕuֹnY6HkesOlғiey=?SgPfq6mܓ9ݘz2Eo2ɰ3-\lgXC=^L'Nh$Ν;ccc/}|R>ْcʕ+nںj*ŗ* J
- 4M3Lz^IFGGjXL.T?qqÆ,"iCBKl]o', ːe=ٯmڸg䱑+m'3ۤuڮv#)d3clE!M3KRe0hO!>__pgҥmmm۶m+**K =!P @brTUfUUU)SaiOSϮ7ճ*}VZ3AϤPھO>1R4BYNqxsFGG-ZyM6XB[/U 0P 0g
-NGh.++D"G")s'+0OyzB$>={ŋkkk[[[/_xm   `#9}+ө@(J$H$C5j'}-Y&SuӧO߿^ 0wd?( y^dPvi[,bB( Ֆ-={j^zӦMF#<   'CܓsfYQ}h4ǅF#]fx<gϞ=uԭ[dY^t***l 9,BM_iE$j6ğbcTg>wĉ7oL-[[>\ Yt9'EX,Dp`0(F1iVey<'Ox$I۶mknnZ `u t9ѨZX,[,D$IEx_X&KJBgϞyf$Yd/ֶd=  s$I$> 09(\4bhM&DB1ب1+~-X,^ySYϯ]H$VZ\SSr(" ܯR 05$I,'R/r<bPHF)""!/8s̵k7o޼aÆ:I	 K-B {AA,Z,˲j F.K_xy8}ٳg,Xvڍ7.] 4'E1LFFV5f3E8bEE/?KKK[ZZ֯_l2mR < et9 ˲ a}dqIU,U'ˉvcN>ZZZ-[VRRB 0/Ш Exj&	hX@`||\Xd=@3c>߹:;?SRRaÆ-[444  r ˈ{rNUUŒH$Vf$)b1? v_pٳgv{KKW^`J $Iܫ 0hH-̕s,C5{<(X,6M4EQ$U`~.`er]|p]v׮]k׮-//7L `>^5Q EQݻw:0.qO>CKۥL1(TڵgϞ|rOOj]lYkkڵk o= p8?CKKˏ~[WqO>~Afv\x\UUMB h:;;/^e0֬YT^^N   d(++;qĭ[\xŊ<qOIcZx0fyrrR_@ux\ȲBe!H_OOY8˓ȘDgz<Jig+f^ؓn72Yfm=y2y,x&%S(%,'!{Ν;wq=yW}>f 0sjF. lnkk4wg}_ڵkw~WKJJ{0{&)D"qm0TUjJ(J'3s_%'jy;u+/x5?ѮTcȰũe>kLM=iF'+[rJH@|ﴙ35Y$)S$˒i2oI$ټ$ynܸqԩ/rttt[l+ 0\l* 0H^{˗Go>[nݼy7lhh(۱=yzb2́@`pp&`0(e]N{h82o=<ⱑMϢ 339F6DM'd\gUhQbqj2fs${kׂ5k~kUUU|% `0(P0?i G?ߣRUu͞_ɻeǩ䪒5ild:$o!m?ˤ<dYN+iLL
-Vݩ"MsvjYVUUYS7ñL[J=O{N=if4>q#u=L}[N>I= ǩNlԂ/3YK,d~?O-a>`]{uu믿t:^Gmkk~VSSOD܃lb1x"
-;wnUwg\6@$wyjN3,~<-D<{^o]6q̬#i~I&&&&&&$Iw` PBD?BYTU-B`!?%W_,ewMH*}K0diMô?%_ywL݁.t`걤OkPI]Ur%iɵL럚tua<'"CafiHYH{/D2L>3g?<M.+SI<rʕk׮uq?00-Zd0ۻݗW3SlC9xs4r˲$s@ H$NgEEx @aHv
-zte)}?a\,ArӶPHK.O90m,5?
-f\8-(ID]Z9I]:}Hhgڢv&%%ѦszJ/)fndӶn0Hz||`򍗶^z҅GL0Sӳ?%?߱3B$[KMکi^z$nwf8)55R[{Iڦ$Ii+Ok͔֌h["Rx<\rŊo9d?nЛ6E+P&#Koe/0SkY	zЯ*qZ<g~x
-YCDv1e9z>d555;vhmmu:| 
-C'/G"q
-/={(STbPiaHZL҂)XkNחВ뻚̇n~lLqS{>Xl|||```hhHFiҥk֬)s%Fσx<ӣ(if}%L0>n6Ynz4+y1<L~(|dOtrg=,Nk<gYɗL&f0fzL ($CCC6Me
-]MRCKW8w35ɰ?bh8iԕ]劙ےLHul
-S,Lia\-۩HqVۦv,HV6a֜8ݍ,xs&_8IjMt'3]es8g걗E"o̙3'O{iVjkk۱cGKK.q{!LNNql:OfWY}E̵\td{'l6vŢ   "Hww'9
-֭[}o׮]+Vp8vqGܓkb1!YN/gg~$bj0t#<mϽIel6    sħ~;\x1mݺ_ollt8Y{g잜3t     4w޹pBEEŶmvܹn:;S@     PFFFN:uUV[`&\	q    cOo!4MFZ,zt=    0/fv==    0ﵷS t=    0ﵷu@L          (p$I____/=qر5٩3m[~펎~;lرc|>o߾}~;vlϞ=%%I߿={ttt<xw
-    +_]&?ݻ7dsssﾛ?%'WxѴm>ӇJnIЁz!zdԗ\tIPh    /^tbz{{^tҥKzpfzkK.޽{ږ5ri=*Lms!}wGGGtСCkNsݼOP    E$	!Ronn32Y{wwwb>OP[H}};w^owwwj!y!ѣGhm>{c=z􉶞\g~'x뭷GգG6JjiiLۨ{5Z    wΝcn9{Mz;Ik޽zG9~_|>irI쨕<NUoִYx~'dcfG!a"v    ݛ)-B5I$^7mt人N}bSGzz2ݻ:'Mz_0KO.    ҕcr͝ɸG    ^hɁod̯ݻw߾}zNO=P`{    {lLLgjm=ɄH:Ѡ:=Px    ^DOiI&SÝ1wR-Ӟr8ds!}`@    Q{{fST'-	:xgj[^ssN<xP9ñ!=hڃC    /(}bѡ'2HA99WzrC%8:=I9vؾ}ܹsΝanO$9о} ;vl	ݻ=y3    ꭷ1}|}inn>p@b{sδ)/~gYn477zo|~;W`=4AAbf    ,ۧL;"vޝXޞ6޽{Rkoo߻wK[tM]]tvvͷgݻw';=bk#AA4M     $!ѣGD;x`]]]ww7\    >`N..    fN.6    ܹS__grTi     fI'm9;vn޽	P      {      
-
-q     @A!     ((=                      B     PP{      
-
-q     @A!     ((=                      B     PP{      
-
-q     @A!     ((=                      B     PP{      
-
-q     @A!     ((=                      B     PP{      
-
-q     @A!     ((=                      B     PP{      
-
-q     @A!     ((=                      B     PP{      
-
-q     @A!     ((=                      B     PP{      
-
-q     @A!     ((=       N!d    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.dia ns-3.22/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.dia
--- ns-3.21/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,22 @@
+     ]oǑ_!(̨뫫+${8$,Eꖔm~DrRCCjMu֯ŋ_֛_B^X_]=|?^|fE/W~j]ׯouqzzw/^|U7_Yۗev/_1<gX[٬W~?f<zs?\]%7><X2/lW]E~_eK_|~VFܼ_mޝ_>EyD/C,SV}'ɽiK-M[rׯ?\mn6$\]]WOVQuDmc?\Ubw Ǳ|gS~={{^Wyu/o=SvB'JCyڠxֲ'']꩷~ݮ/$.V֛r~l>_Xݜrwrg7[fy|ڼ}?^]|zwuk߿/wg1>0og.(	Fr]<$CT޼OdYY]XB33b<GC|/33p%r'y1?4tht9|t%uyQGB4򏮴ΑEs~ïI,6R]ѣ=+;W,gFT/$'a&cT:(k1:#D!P'(QpI`/1K}UC
+.Nq|b'Dy>&Aqp|L3~^ĩLS4$?#@S}'tBRHJxNqWrDQ]6y>m=8+FyLa&c:	pDy91g/09g'jFiAޥ{
+{<&<}zIOܸeir?B-k)Otc d>4C,T4B%.Befgw^":ʧ@̞Ǐ]̨qC^jO-%K#}PjP*Q%Ӗr$,bRa'Qʜ,	sH҈c	Pd"}ʬBpN0=4}b%JqcаXc_n (l+ ԧr`MJBu	ru?7<QӸfu;xAeG
+-CU˛>r/~Z?l._Q3Kw?,o.D%wiޕQ2:awiV.߯[#
+8ptBMTNVQ>e4RY	TQ3OYd%X<ߠGbUԐL.*UT(>qS?gZwB!5pm'ho\?ᢟfOCY=g{06U=	vO@(sa:3'(D;;B?'1\/uqteJA׃W?i͙'R_6_b}qfd*'_4q"`rN4Ol7qKI!ΟԦDrGH,ĠL.I귾BIE#Mt= t}罆K 왋Y_߿>\><NTL	DE'z?NH8+(=zsyPعM\TZ~cϾ3ɭ	/`$tJ̚FJ3<9W9Z]]|	8vHfjVCasBTghoK=RK~ƎR@R^?p܄*;%H9Dι'Kyy^\tV9@*$'(" H	IޅSN,r}1~>.#MgRб:* W"&4PrC)PQ^>R 4
+,H]ZZC͋S/9`Zഇ~sʴMm.(]PZJC1it=!X©H9>|"0-uf~A
+H҉gE~gO/-سno0M!T!ǨLpn܆'Q_zhK'ZNI%%=FجӒ== KkqAa^U(4NH
+@_quf/	:~XIQ|/v:F4P`!>	#zv"Sgʞ?S?⢝E;}>\`prL$Vs-,	ȩD9)f\+Tꪫ_כ^u5fu<{ZpR8S}ݏՓSG{﫸1$~:xJӄ8ɫB+Āj>&RY]=sW8	1!fi+v.]$B%Drh´_+guh)|$CBޞخ9[B.F>~{ǒ@}n	^I\2ǘ?rDNY @stɝ.iPt|_Ji_b2sZB)
+{@˭N@Lk&K
++NALn2Uر?!<rRS4&gϚ⒂hcgӧ+[[J┄PxIC,4.~SwY_?߼9*\/9੕tVΉeԅS.xtZ(#^2.Ega1
+!e6(A輂}c)/cK8UǙh*=IypfIqV^S	/k]*tWz;fݜi2uY{stN;Nbr?Kw>[{F0j'ۻ'lu^Yȁpqd{>a<$Y*IO%LHZH2R$%I5	
+#V<sbXHI&a(?-ɾ$O_(54dT}"$I9p+Iw1JAl%Q;>ULhcd"Ipy@#=̾ O!XP
+w),.Boi[ad}	PIIvfKI%Jd)&t ܻ8~yjȳ>Uv#c"p5&}dd:-`h#/޺丕_@XĘc"Urħ*BC6Z8ec+yIꛁ'C!9F~4j #^wopl?mp)<DKZAHDgvw?ϽW5%&!vP`%w(,["Ĝ2iveZ9DC<BhkE.D-D:&SG+?$˃iIVb8nL"zP+Rj:T	9]o'JaRIەPxyt~6!
+jYOQ\ޑ$zGhV`߈8XL9TV_)rfu!M|!),pLUCϽMB^ߺ*Biiu^w>*+[*h%,צBd>v>n(ry:/ ]F53W?6v^[ϸ&pT9[ߑ&ӻ>X%Iݛ+0JQiRh1@~,F;$ɰ:|!yہ1bޱg48BOs !(uʽ# HsgSw0mo:!(X_@x Xގ\:?yR3~bb+<d+ȆEpX~Gsqo~1_34Z*S)[0H%h2fEb@~?CfAj&{li-=8w\*4)!Z 7Q5sIIGw4י_u,a%U4~yr̫2;l!3uMancS4G8߮kbGEHt	49DD As"Lя<ҨQ P<+gSZ SѤ;0ǉ>5;<s?DsmB"V)-YD}4E*{,kH=qCƺ58tNZ	!t6U_i.B0elˈn{EqۨAӍA]KSq6%ZM	or9ƷI/BM?B/FZ$pҭwX	w5d\RR!LeRGۏnyˇV,dQku+5Rφ?S*\VZEM5.6y;KqGlH!#
+#	7_2WiG 	N00;"=3=B>M	RPGX],'Qo3+,@& vVE5^z$ɚ c'H23bI(U&M'C</iAMoEgk^3d_I[aA_$^Hi>{
+$O7T2	L r\Nv6d9G,fC|H#ܻ-݊=VEH5Ũ)#x*r,JCI63|#$[x>G;{B0홋Uxk:1c5ʂ/N\
+`xTi"ʵ 13	TM7SW+܋$$qF19k{<rhkH9C}(MDᠣjXą<8CD\E5蠙=sbd_ dB+!8`3!-|H}PgdABx]feHbDNWU $7񳂒%zJɈ0)͜!0/F+(hC:^q9MNV@GB4nt#<cD(o8mtHt0֪ķ#RI˧ё1aܧKycH5qT:Sj&Q7NN1g',Yjʀ9- R\Iǹ⠣IZ_f:suʙBp?uAAk-'=N4@X Ԉf!Ӧ.@d$D=]kUwzIퟔ)'OW%睖MX&eJQ\]L_p2IU*# H^gsV&bx ož }kQM:R_|1,%|z 1>RgFwqa{:Z5.SM)Jf6RSkWMyP´z	f*ْ!$!T hM~`U;U-5b,(NSݷV,
+I4w@vOa1"̐,-*9רrM)4+Z3v>~ژV@n(t8nD$7j%PYge<Nw1Z],V;&gUBl4+<FݥMZn
+ RrH=Y'uь<2s?'\jJth2ƛ_ 4;;sly	?ur
+;k3v
+9rt 7ظ<=˩l"-f^~GYzZwrETރr-)7;~Gk4X&bHW~<6:H3=@򙜷&bx )Be1p,ؕ4!e( ڂ|Ze'e\>FELQ%@xw> dDYVjIیrNN'>XM}ŜfN9w̴QgN)4 R	pޕ4Td@@G>$Qf$œJ+Qw1Y::7h(bw \}%QnsZ	tBY4CJLQ{c9nP}+&> ybM8$׹:ܭlpPm4Itmy$Kگ@+BO.g.ȡ #bVcD!;*I9ϥIϽ!}蔩T2h0P)($*I2)P@-$9ZN*΅$m.B+Iqr.'j2?9g^,  <QHs<r!עsB9e/r79]qIA@aL$gA癃Z.TScD8cD y^L0`$!wf
+Â+$]dMeTtbZ{~0k!{QbihܯŒ$jj4A. hHtN=o.G.7D]Zr~	)ɑd`)ÚZU.2-PH+U$C,Rw/, pXT+֖͚w/-V<%muq?BBYCH=aU5D5WBr{HU^[IuX/ZI^UCqC5esI 37ӮC,-)@X<q])<*$8>6%(S%//gFP2sUs 9x󔘭*l%uF%۶)탻py၌{2bkwې AHV4G	ZU:uE\nl} qۏ)#v	PZ} 2	M A*slA)	1Fp1GSvO'3iZ*UR.H9_T04;37bAQ,C<_Bs/Vl/(i]т	(6(v$hwŒ9(-406ƈTjs.>ϖn\Ffتs%sFeպJI&Ad	]Fdͺ9xn}UzZ(92$L![lt5i,;2f[Z9u2˼ksEhTrN}>T !5^/`G7:_V|Y+p?E"JX)MJB9qhmj`F-N24 :QVZ%>h(B&ML/Q@	Z/d@!-#E`bvIvXX-k0u J:::;2v3Y zaV~x6y(cntn' aţ@kG~E%l/ .3|X}Zo~|mVs= 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.pdf ns-3.22/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.pdf
--- ns-3.21/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,372 +0,0 @@
-%PDF-1.3 
-1 0 obj
-<<
-/Pages 2 0 R
-/Type /Catalog
->>
-endobj
-2 0 obj
-<<
-/Type /Pages
-/Kids [ 3 0 R ]
-/Count 1
->>
-endobj
-3 0 obj
-<<
-/Type /Page
-/Parent 2 0 R
-/Resources <<
-/XObject << /Im0 8 0 R >>
-/ProcSet 6 0 R >>
-/MediaBox [0 0 550.8 248.04]
-/CropBox [0 0 550.8 248.04]
-/Contents 4 0 R
-/Thumb 11 0 R
->>
-endobj
-4 0 obj
-<<
-/Length 5 0 R
->>
-stream
-q
-550.8 0 0 248.04 0 0 cm
-/Im0 Do
-Q
-endstream
-endobj
-5 0 obj
-36
-endobj
-6 0 obj
-[ /PDF /Text /ImageC ]
-endobj
-7 0 obj
-<<
->>
-endobj
-8 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Im0
-/Filter [ /FlateDecode ]
-/Width 1530
-/Height 689
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 9 0 R
->>
-stream
-x	|eq\Eq]DPY%UD, @@n@9JSnz@S4{,U淂+B
-NCg6iC~=/^d$4_                                                                                                                                                                                                                                                                                                                                    (Waa#GmۖE      hܹ?ܼy
-     nݺ5iҤ
-y&     PC۷T{e0f35     P\zuz|iӦ5
-Φr      jؗ^zaÆx77nܽ{b     0?c߾}իףGxyy;[n>9s222%     "==}ܹM4ܹҥK|I//7jwϞ=EEET     ߺukvrիmOzzz>}4nx֬Y     KMM2dHƍ&,ǋm{.]ִiN:%&&      \Y\\܋/cǎD1	
-
-*((8~>rʜR     +KKKعsgffp3!!Aɵt;vo߾=5     ʊfsiW```aa멩R     @bNN      D(ͤ=      n@L{q{     MD     PYE      h=      .N)^_ݥ\=      @L{Cv/sN.      +bڣhԶ     T:ud>     RjL&[rB.Ky0n     KSjŶ=     p*ʯŸ=      D\      nq{      \htdE      Wc4jYmܗ=      .h4J3r;srѶ     (J1^m#Q(eΜ\      .Ez	mq_'&&Ҷ     uԩSG.K7mq     p)uԑdM۴Gݱm'i     +hd2y{{Q     \4JJ2Li,F=X!     p)R,/eI{      \dS.aGif      Wc0jB+%,7#     pNӝ;'     Kp)
-FSGJ{I{      9{*0nl.OJe4    /GZm9-Wb1
-
-
-"NU*    4h4
-Rm{ J%bC     *6Qen(̀G˴cL&f     J Neroooj    PߕbLfٰGuE9 ']b#,z1     %l59?*+dfĴǒRZ     vXvy{{
-,'bڣP(t~    pGRLVG(̀Sَ    }VϷnK\3     @~jdf??4Fi    Pb#+>OBBBÆI{ ')/Ki4*
-    ``~]Z>j-6lEO.Id21L&xK    @$h4
-"i8J3m{{Bӑ     c0jz]q{W˓Q}     Vt:U#xzz wBS    `jNΜ\Vr'    6RSG"`fnte,Ÿ=     F~6VԶġ%T    8	G&	J%     p5v.a|aN.      b2d2T*Ri+]jCTA
-   @R?jUѨP({u:]Ӷ
-_rw
-i    r\z@GTy8'iP5=     gG蹼\bj i    ?6sm\T$    8f0;P    X=c2ɹCO.jH{     Vi]z^]X.swf`    pR\.+%ɤ5)'P==     g0L4e39{	m{!    8`P~P(Mh UC    p5    j9    L&JeoY UC    p`9DTPRCO.
-H{     !M.ͷ.>mCTi    RkRYi=*     TZ~y{{^.WhTi    TGRYbJMJ{hTi    ĴǲϪ=Ti    H{ A    >12!Abb" UF    >Ǧ=Ҹ=AAA=@e     O׫+Oث̣ǋ=    zrU@    p5RO.WhT*5'H{     FJ{XFQV+J?NW5	Gh4FA    p5bAG1L*ΈU8R)Cb"    jhX&[LTd2Rh4Rj^=NX=     WS
-BRFL&[ʹ`0XfP=D    p5d2J2Ԟ1(JgiNOLۙǁH{     FL{i'^O\P&ٌ\.TP(>VAjߓKWJX q,    BSR_I&Q{LV+`3"1&́sr8i    ǋi{rY=r*ԍ	+;¿z^\)Me,    IHHhذQGXba".b+\.XmIH{     "sri%Bm+)P==.    j*ޓKP#2zݸJIw,    ILL¸=Uq{	i#    "
-sr!G=.    jH{He9rE H=.    jq{j**5d2i4fG&qA=     W#3nj5YRy{{KO3C=.    j*h4z`gvT*Ngh4Jd6V(¾aKa/a4Ds	i#    h4X2L
-L[[CMUBH{     "4GS^jBgARYf8"$}$Q*Ʋ#Κ
-vڎ(i    ՈiWzrv#    jSBڃڍ    j߶t.ji    TmP     \Mbbb @    p)OH/)	)P(/=     W |0hI_
-    6im{(     iBC    p)=.]LO.
-    P1nB    p9(    {zrP(=     7 a
-    6i4S(=     \
-i    zrQ(=     7K{B!    i
-    Ķ=C     m{(    ;"PH{     n@lÜ\
-i    =0'B    p'C     /mB    pqqq=
-i    m0'B    p'PH{     D)    ۤ=P(=     7 "PH{     n@B!    xbzrQ(=     GO.
-    6hC     2	\ԇB!    GCO.
-    fim{(    ۤ=PH{     ÃQ)    ;P(=     7@O.
-    i=(     iBC    p)=^^P(=     
-    RE     	m{(    ;mB    pE}H{(    {=P(=     wJ{E     )mB    p=
-i    3P(=     7K{E     ܀4;m{(Ҟl6S    PfCO.
-f)**JKKKMMϧB    @"mBSdggGDDCٺukzzlZ    B!v۸qv͝;ͥf     11Q)Ҟl6gffرcذarI&}z*   KJJb
-OMM]zuΝիK/͞=~u   ڽ{^#uص}lΏJ܎q7B®Br^}-7<Ɩ7=	H*Z>-gXR:2ln[gmY=վ[byx|{V/ꀶ/:<+b}[
-E|>
-8ue	Vk,FriKqw^˕c! \oY{J7q ]Zc2.-OKt֭=zhذmN:h4!   o !-%˛6m*+V
-ҽii3MKYe,.Or/3NzOPZ3<?C)#G9   ٷoL&իGyDX/.J]Ҳ-iKͤ#Xz,Mq/#[V/oۇKzP;[j3TnՖX=w;h[ҾeRrKZ:IGz{j29zۚ^}ѥgmz"V'`ֵ<1۷[C}mk-geYju-ZFgU澶^2ڳ"qwxO07n9   ٿ?Ot?Ai0p@aYr{iYWL\P(, vd@VZ)iK۽,%lȖubUK₴,m .H#CjiN!MdY	/q-_kyI
-o[ ՗6k[^һEL:1˚<xbVo<q//ml[oVpb[CVX-+ˬ7;OMZiu1Ze>5ۓ
-Y^VҎm
-oFͅO3RZںuk^^    jǏƟի.\8[gΜ˧O,ٮ!*x>sI;G"-Ϥ.)YG꘶s,6((enc{2'/=qwՋXfWg[VEjNtQX=#˫Ro2_)}Ky;UZoy&Vnڹ_S/y~]vT:<4֭ۧ~wެ,<     @{񰰰>}4jG޽{pp`y&     P\~}ǎM6mܸ9si     PTg}SNfڳgOFFFqq1     Peddl߾}ʕ̴     Pܜr                                            Laa#GmۖE      hFqСٿ?     Psݺu+((A?c=lٲ7oR-      5?о}OS{e0f35     P\zu\.oԨQpppvv6     PƾK6_oѸqݻ'%%SE      5l[^=zT*ݺu{G̙A-     smҤIΝ|I//Fٳ     p}[nm׮\._zmĴgɒ%O>75kVzz:u     RSSҸqaÆ				O>ҥK6mکSĢR     +{}}}wؑ/YtiAA}ٕ+W攢      \YZZZDDΝ;333bTXXc۷疢      \YQQQvvv^^lnZ*,,\~=555##\     AĴ+00PL{JJhf      j"      w"l      ^SJWmw1      .>     -1h4UvN.      C*N:2ji     KQ2Ll#
-,#"     p~~~u*@V;sr     JW           p'     FN?&Dm=      \hrLf1)s_     p)FQ̴G.WdN.zr     R)&<`m{5
-     Q4m#+sw      :urm#nS^C      RNL&ݴM{t:m{      j
-qf)ޱJ{L&wEaN.      W ҬRL&e#,Q>Vi     :;"qY^rey3n     1L~~~u!%lP޾bOOO      b0jB+%,7bf      b04ݹ#      "R(
-i     K8J3      ѨV-TG     FFQ(}     L&mVXJ{I{      \NS*wL{     eIzd2e\EL{H{J2	    D@Vs!s`0ٗ=0L/|𯬔O     %V?}Fi܆T*^j    jIL&x#m6ҞҎ]'5    5U.ےaN.M{r75    58~~~i#dfaA׋<-    @#>rm{<<<tbcI@Z    =Je2dfmiBЕbu    p'¯<F#c#LO.    PZm;'^/s)af#    mUdQBBBÆI{ 7@    jN߰aC///zr5]yi^>(    pqRSG"L98 6d     eF}Wo=gi 8<lȑ#+U$=^y >
-Bl#Jey3KĶ==fT )^:sL-J(5[",R)Frql1︋<q_b8e.[mluE'ouVe>;+.,"ժr׋WEiFx{}  +v.a|W>srQ |PP Ν;קO.]D'ܐl_Bq"ڶm;t~f+ d2d2)STJ2VضÃQ7Vr  VAAN{Wr$9z\˖-?| @RkΪNP#XjC+)K1n ˗/Ϙ1gYiFdЬY34.
- \.6G~O{+Ѩ@ (((8tP;twyB^5m۶999\# PMwgubN.  L!g=㧨bSry(uJN><~8 ΰ<wFjC~wP T.\6gIVBblHB\c?,3ìp*[b8{ÆYYY\8 PkҶp+=Li 8IQQ^oӦMV:oؔ<mrߴhQ,,wJwdIg}?g7lJ+<ځ脓bR
-g?O5hw]\\u 8nOyL&qr6"H{H{ 233׬YӲeKՂe)ENwʕ+׮]RJX]\ \[5v2e{',|@_aU.؞3Z"ݴ~s,Pׯ:uj&MF琗;PZjaÆk׮qA@Vi]z^]X.swmi@C "YuرC>cmopL[K)9>bx77kN*N47]ِsU])`\ӫg'[?ٓH1uAy;+)5wygi)yyN>8|pAA߮R\ R;"\WJ&I+kSbѓ9  |^ӿm5ʹ1pDYO*Vs\>FX\;kW*ak~^߻?,Ϗ.[]p3la	=C^;'
-ŜQe7yWroN)6g+ag >4e39{	3==  W\jԨьO8QGy%:huT/"ϱw3ĸMfRWe\;߫6~,+^8f+| pyhީ2=b|Iۯ_q>Ѧ8^T	\捻8 ZB!4'@C Uvo~㮣Μi+&`Ҵ9K/=q,5ݏ/1sZQ3VxpиKkN<=`o!kgBwK׏UM7?ږ8oSܮ>>>_~#%[RUL (3== P5Zu={49/ٜRݟtEP2ӵŹQ*ɻ'kxʻGRM]v^8xOz})4갵
-s͘t}0K>dmRCD'l֬Y =H{H{ 222̙/:u-mM3{RAN=O-zl>VAI[1GX%_5s1[YaV~5dŲq|=3֦=%"6&SNڽi %%K5kvJ p&IRY*o֭
-=H{H{ իe˖Q'4I%ypUmtȢ+4ody`˷smN{bK/ɽ4oذѽrndLڕ5a!b&_5ibrLxFԢE޽{8p@xr@f0,ܒh4*=2i@C vܼy3::u*'8d];%*؉Ӷ'*N݅]^޼iJ~v]:[mLavę3-ҽ{Aw5煥_
-Y0o譬GZu%䩧#|[;O̡O.iѢŊ+ j4iuiu)l == P|ɱcoSN[;^wwމ[cK#\0NICʯ١BX{+b|ܹ}~qn 7N]~ܪ^xG*>}@{0!-[~ݻWxr@c0lVZ(JMˋq{  
-{ѥKo/V6dsuGh9?ҕ3S-4uSד-9u|6s}޺zӴ>&zZNVBE; ,漍v5$v6{):h*EW\*EVȼ\/+u4mi@C %y~+V4ivl'J)^;&uЌ3kD@>_v%zƺqʾ]X}ʽ2㓁'-s1煭Z1[ɼΙ5Ƕ\}ｿ:!#|ZnݵkݻwБ|̥8P;Je^׋m~Г !P	O>=a-ZjĦ]vuhkP4wc{'/nQ߻
-rGY7.פg6v_ϯԩskvk땯84I=OV\ Pn\I{  O֭[?csL[ڤkY:ϱ7hܩ1}3	Ϯʽ.a	<򈧗7Cٖi:wgrH#$]G۵k׹ss@L{<<< m-[ֲeˏg-M<Q?o^Ӻ/>sAqnzƚ-9W~57M(%Ϲs#];VuICo-ZXt)| F=Uf:T\ iil6=zO>͛7_eFv/5[W3uqnί^'&Mx]ۗzq9>JaYW
-nT\Ў1_~]r@do~СCǎs-> V=H{H{ ;w0`vB$%6gɦ6Jmr?^ּs]bBmϟekrIh%%oҰVZ? pAz^]y^vH{H{ K.}/TU@lJBP~uW/kK5!HڷxDƽ㭮T$>LnH6Gşڵ_M# po= ii vȑСzAA'<↏~Pdѭu'	xLV^>!kƑ8Ob^{mEbL5 oo/  *11q{  ƍ/rϞ=.;VJQt⩍'9ZJ^1[>oP\0o4;!|OoǮ;pwΝwO  pKҸ=AAA|=T5l6͜9X鐉+ڔ[kbVnYZif9afhgN,5+22cڰ'1[n»zsJa߽U_xy O||ؓQ 5ZAA}|}};tq$g<7T-V/KgTADε|fq6ljŘ:}b-Ëj<խ[v%&&1 Г !PCݸq#<<Yf?49V>M9N9o+i~
-.9}Wb:l7'21~mǎ,ސWǦ**-- pRO.@R\\:x6m![mszf+Gǌdш}Kg˦S3NlO:tP~;2Oի_|t] Ni=\FSTvր@q۷v5*&y9OT뗮-΍"g-'-oܸѢYW׎SŸ}EG.̡r;ĵ:uޟiR070W^?~' 7H{<<<hXFQV+J?NW	;
-?Å#Ycjd22 Yf˗W\?ũ6$$Nx_+֭[wsB~i?T[p
-C8\8qT޽7>O={u  5=mL&JU|w9t24r`"!P#秤>\%xiP޸)>8p{n݈-_G`l=~q1rrt>.p;oût2{᪘49T񬅍56mZjjjQQA @C-)2LTj4})ZwqKBX!-|H{H{ w_|ۣGo/Ft̛w9y~dΏ$FPc{쑙>O<>1ؾ-~Zɺ޺Nc^oV׮]k׮Y 54'CHABp`R`0F˕hxH{H{ Ϟ=kʌkgN1aBL=nAJ~vGlx԰g6;<p}EouZݵkyKêGbSP~ѣG:u% qiw=P(**:e#P*8ruSGCݻ۷_Ub'δtmĨqՋw'6iPn^[÷\Im_מ{nĿܤvqOT_#3o/իSNQQQyyy|Fۤ=&IT*CǑj#ԤF]VG|MI{H{H{ :7KN9fCΝ)ȉ!"z+a;17C.:q3߿_Tѽi_]`Y!PeR<~8= ǋi\b2 M뫓3+Z*ie\.-{{{;5h4=== \ǩSNڢEŦ9Ӗ6%gݗan^ӖGT\:/B;KOߴa7;>il^.F'W֭oLLLFF\ 6lhfcL&lAŻ	+;¿z^\T*ms=rg p={ٳ]v_ט<4T(hї_݊&
-pT9o oK])r➄y]x,jYL17*8{Ѫؔ<LוRYf}ٳgg,XnJwvmAmuʞF7-7.9ٕYv*؞mDz	ϟ7Us9l\nRS]t:m#뤴y *@4n駟ްaúN촵˃?=oOGieW3&Og+	\?~SG:s1Z6*uꫯ۷Tdyɒ%5l_t<3˖7^ڦ\_?B=ST)SOбgk{
-֕yZ[֭[Wx<AAA|wYzr	z^l|bji8!mn&JǁiwI{H{ Cv[lH2;)ٔ\<f̘$ӖSꕣ>/.K]5~^Lݢq9ubsӦM?AmL6.|F{Mt'S(Exo[o~iZZ_]XmBP%J娴Gx)9]v6m_ڤkNj~$fk׮Ǝb-Ǘys?Xrtsά·I햫OػC9Yҽ*E˂Ukٲes)	W69{А4\D98A>Q^P<k֬t`6k×]yp5%\Rb?xԹ=bk"f pYYY;vرc6lذ1Y{S_Ñ%H &Uf]:uۤf\^ukr6uuO銶{u9z\lJn5{oE'lݺ:44!ew,˃.\ "i}UKO])8rH#P(xH{H{ Yflr̘1ڔMŵeyoo޽{eo!p`62oP?ՌϚ_á3۴y!~\*ꮗ7_ژI)Xf#<"M{2p:e!ͤIӧ={oCq{H{Oe9rEH=R#|2\ii qm۶k5٘\줴gsJ'|+$XϬ,%}{g<_Nlr#w߯˚UJ*n[L[OռvMB_X8QAݻG3_8qɓ'8Զ"4S]d*>د"%W3h4D=== \SZZ۴i3j(wҞuJbvСirĊ7:vaáE#w~};mrEC<<<&|ԯ0{tr%%W͆͛kO#8!A
-=jj1Je3CI{IH{H{ |N'|uU$'3rW^y?lyʿ߿[ANgv>)ۜ2b]:_ߠA{,TÞoJ.X裏֭[wĈh6&8cu1G5˖<Sz:v_CT'j5)7J%T8ӖFSYC
-BW^KX/\G84eīFC޺p5j4amNkޣOرro8l}9B}[0L\N޿@SigVSWN-y[T3ǋC(~[u:ٻwohO?Put*9.YܦM^z1PMѨI{,L&Bagҡ&N#]iUںuoݾ}͛7op\S
-̘ߺuÇ"K5D//7dkW7wEC?^",_8~?7r^mn7?eKJ^uO/߭[D2gTwbSc+#׮]|KI{cCSfjBgARYf8R:$(JFcJKFXigӰUTTt̙3g6mtNJ{n>x{{_9YZRjs~Xࢡ{͜~~v>vt*y{9Ο]Nu9%L_裏
-ϯzbSn}2wɃ>XnѣG;uw}W_۷|0Uc:;.ѰaÄϽJU?]^BXާO_}С;DDgk:ujׯ_Zc ֭[}Y=wa3';vlͿO֔#.N)9ΝZe^ayvԩu齷&LOSΝӫ;~nݺM4Y.x;B6miâKc9qPΟ]KZ7H]z.5vU^/[pX3uйgRcxh&N|6T4*6+]*_b^"D2u[C;FEEݼyKim{  ɓ'O.QɹD'j׮{Gj{pr.iWRE+VZ	_㧨S{k?p7|sѧOgOSNW^˖-/\ۇϺv%tc=4>VXP_|5,'+ 'TXN;.
-~z{
-8qB^!1?9+ٜ>bgh߾}_|~AfYim{  gk׶m־}{oo퇝7zOLJѣ[h|`=T~qո}.9i{:*rJﭼ~G4ižLc~dˡg-|G<<<JfCDi?{u7ndnvmz
-nX6OϮfǕW~6vyS+,^k3?;vk}{ںҐYz;2E&z|SE~>`v|u%&&V3))H{ Μ93gΜmێ1B|#Ӛ$BzP{=l:Fz%AóPEN;fW{ju.%^zx{nyO޴qO_kΏL95}1tc݆&e^^#mO՗|F:Yp_h
-/z/3zYjl+lɉ>E6lK/4ӧO	3  gȈiӦM۶m7:m-)yFz__OJ('-}衇Y9:@TJ踧zJҥKĮ3s,bu|1Q(UΦPs^%͋ib\&=ՎI={߹}I,(ʉ÷G>?ql??fS3]~0`@%9ϙM߭6lXÆ'O|1@[			u TÓO>I r)Shb̘1ռg7G۶m;x[7Iq6
-===߶u5I՝{ki7̴ib6ҥX&|t->Y3yL4alJ(,5iO®IoyN%rVLcgNXq#34frLA~3ֻX;w^^eч#f͚զMQF>|w ۴E}
-shpKT4jԈ %++>{77oj7$ּ'/}ڣak#|Gw]{Ju78ўUVl>i	oРc=wO(SY>3gSW	!k&Ȼ.;s݂y÷~9w%Pu;-]IleIJ*RE(}:3fl3oThB"{IeϘoȫW<9l{~O-N٭ΞhKP11"l%9fe
-3'hN8lH?Fݑ-
-@.PT\!y{{GzՅ?    ЯF7nXfUVG6JϻjccXs)ߥL6m^E-%,,puJ),cJ[Å5j?׸΢-9{:4$ӻʄ!enXirD#{w6T'ݾqœ"4nʈD9ۋmߙggg~˧:?_\\MrK8r]	6~ /GcccffVҌbЗX`&rT777iiyVQ'//)W1\hv"YCC*֮uG]RMM.(Ц	W\d-uCA{-dM{=`olL=n99t`㒷/b߽ܱdAw0N|l3bÙrn``pر&U'< g~{   ŗ/_JJJ֮];ai7{_*zzzYzC_ɓX%G&
-
-Hvɓ'wHu5[6U;6mzuf#wxb7W<[B̽u-&q@0YX[ZZ'+]>~}+U{  OP[[h}=222[RSr\,$sppz+J1zhe%޲eggҪx֑qҤIEAD↪["6mX.͓墭皛[iTAA"$ȱ->>M+->{jk{3nzSo\M[)@.v#!c̙3fHOOt?
-K.P{@P{@  W^uwwnykRyyyssX+bc|2y䔜+ܓ.ƆnEVJGh K#n忪=%hpy3j_eokA5G!.>YHh,N8a^8=z ld{+VĦPbeEGSQQP(=@QXX   QYYʄ=3z{lmmJ/{?
-޵sUDbgǙϟ>in58z]K]Odm)ɱ.*P`Lͭ(C/OݿGQ#YgccϺPٛ:t;;)SbSceX-A!'Mto<	'LPpv+:شd˖:ͫ^P~&Ku={422Be@Kwozʄb5t#FߥB*v>8wܩSC?Cj  oq㆛UJJJ0R{H_P)˗/-^AEATVLi*%rg=j5ݦ)G3#=}>6oc;)(DFz|I>BEx ;;Je>NƎ˻%${oef28 SJBt666mmʷ`S^Yrح2Lx0zŕpxukWdmJLظtI&EYӷeO!#$y|i׼THbȑMHo_env744󹅙 rojj~󃃃=z]-7\  
-*:cƌ9sdddc潧FIIrW)Xه^nt`COhԇ~Oh6m>z4ߩcqiIԡ:kdqN{sSkfL1wa(1rsFrthJXo.|*Yr5jz	;/AJJ
-H1=΄ZKpϢnhk5Tތ+<iO:op~m.Evk^cl4ƚ$Gӧ-CpȄpj	fssiӦAam=  ˗/7o޴E`uC
-6ͲLLL>e}mSMe臝gU<mSM\98lb;Ӑ))"VXT^mp==\zN2ЛcN^.N3QZ3<E^=˜5kdcc^J/j#-CM>=6-Cw*$$Tp>QMfx+g=6݊o|EdEB{ЛB=H"|io62oǿd@s>bc|,YD4&L/..nkk[=  PYYI&tXSS3%%=M+VPTT51&W]h,Ҟ8f'`~~nӖ.W<h죲@FҋFC1ɩ֌a.<{?JƉ"6X!H		qppz5hG $L2B˺߀pQcMRs-n6m6-ף&5wgz#$_{^ܻchQ""vD;7̽Ϥ2+=5hҥ7ncI֭tqq|2=   _ ++UTO*DI-lO_$''gffP=';LO|r³c??7J{=@%
-(spro6_C32y*:y$[x1]!Btς<wރ~ ԛEk¯Y,YB)%΋$M6v6~i~a!jӞ=Uv;JmoEgkL2RI>[h0N͵f\bˤI]]
- g^h2g;o++SN}`ﱶ   KmW]܈Iz_gB?+m<WP	:%$hcȡszȋ2Q`жULRWIG\8ծxn\%WUtys'jjjJ-,zԩSQn
-
-
-	X
-v[֭F#axfd&ū-T|gUW⭭{1z<bAxdʷ/h/'mkH=v*|CLpC577C/=@ =    hii~<1Fs9Gh,?9պlT;3lc-̕H#&Oy'=	5݆mQgQrEV&GkAݸڛӎI;v,''^J;/Glٲ3DM].z]b]L})+|{;vuY7!wv'Q}pv4<Cڭ9ɤESʱ6HaJJJnb]jj=  x<^SSS]]D"5vŊrrrE7C+{n6+566|-`0`˂m,ܵsݝ\@bR៹Q|C訲9	`ŁHMG뫲988ddd(f-6|]~A6/c%Pʒ2bQcw~iRIk[tڤog/*+ӴSb:-?HlcD>`ggmeeߛz0EEYfeddAwk{`O. 9n8P{    S477KHHX[[gV
-1Yރ&D"QAAM"+,hP\\ͭIJIEL(}/^XϽՌ(Sn\mB%~eo7Z?{i[-z9rTTT妮lz=dȐɓ'_T#=n'7a%bB|kcuZEܿgD.bgglٲIrl(3P^߷C@k{`O.   3	3̙C&Ӌ0YC5$$$
-=)ˡC9O &UKsm{۞oof r1Z+t~ೇAЁly$:E|,TNVn٬
-6HJ&'*Td͠nFm8882bhq8|666}}ʷ`	߽{(K#D~S{D';vi]*e?}ޒz6Yqۘ-rMI@z\\܇`v@Y\@ =  {{{111[[۬:6{R	{W\ٱ9}Z:":b)݅2O3[zZjee<R.Ǐ07UڼQose9Y)9r({D►oDvf_CgA~OH7`gg#$.om	5c{rX5̋v;v)Wڟ|#%˛؛Dt81Vfi+xm}=iffjj,65r;''AGGGFFf۶mϞ=tЀ~ ,@  ͹fΜzF͹---`>11%u M-u	ɩn.̖3}qSEyt޲u󂟷/RWX++)L+/'lR#dp΃Iϥ}7=mu4$,?ᝠk?̰5[磏8!ݺ!++VK+<ԋcs[98$ܤCŅ[$XHJpuqu]a}$
-Z_izoSSȄpuPy$$$ݻn   ZRRbmm-//1qqq[[ہ9W[PϭС0s?sqYYYc6-'Ϛ5k>֯ᣲh?ߕN<y{@[%(ymNNNI?lccv[n:@j  hoou\\4@ͯ/_r*}̲4G]*fӛH_'ƌi&1(!!!\[S_+aNeW[`d̈qzn}z)j>iMMMEEEW^]PPg`    @ߠшZNN>TړVԎԩS/_^	V8 {ju$M\\VqC?GLB"zz<x`		KEa%KtRݗSRdy4O1>>>z5֬Y#""xܹfdmP{  @MMSWW3gNzz:{LMM/}M7PqIÇMϥ	zjrrr
-ڒH)Gjj4ݖnb"!1r\]e668'zݺӯ'1yҥK7lؐ~C͇|뫪lٲÇ755AjС   ?Ν;ggg7i$SSӬj"6{ҋv)0{VWfnTZZrA/וer7n?vF(ԻȄcrrr&[_q	q.6={#x5zHObz.=6ef_reqϦMDEE¾}0,@A  y&&&FMMMWWD"a)=˩s*[]&MB=!;R՜r222(V?aSmRHЪ6~Ht_o,Gl5ք&:KE?D2m-RRhTȴiPY{mhhhook{C@o=  ` ʕ+666򮮮Y5)xiK:&\nHEq!!hRvo_
-mV92d˸Ւ|J^QQ_SE,ׅAkY,_"!Σ M9Se}	;XɪHH==]>^\@ =  ׯ_'$$̘1CII)..=ƒF4xI-KUUu穧?e\RPP@DSobНHnmW||?oŎ))NWϛqۗDVp>h剙qj>72 O>K. ,@  -*D*jsVZK UIݲV;[A;ǌr1c~_3e9-`x$g1q`{Pwd霗OAޒz$yU<y䤿utt"##=z9     ,xY\\Ϛ5D"rnwG_`5%#1=51#-N>CC1;3X2;gTiRzrRnzvKq=F3u]]֪)F]YQ><<<F"V;*k[;..#Fd%`:>'AVV66`oYr1T_Ok)97|Hظ$=Øٳ&Lw*l˅ӜεkPCp}]chhCZ	2~ @Ammb
-4uppȺ\bbb"""&L0:{XYr>CT]9y23>:׊%78,=lScv_^v7U0'N5
-h(I&Qn'c%N0Tr($g^>d諧0ۖ4+=>J]<YOO/2!zB2)ohhϿaÆ[ng FjXr  ޼y&)))/X	>Y>dgY-2q˪s}꿟C]Jɵ[`WE{Vh5W7|BqC|_3}E	ppphkk'H"fffWPPs3<?x5nKӦf.s|6Cڵ%A+߾	0߲e"fO9>FNNйs   0܌ƫWVTTD'$\yբExxx|H)'`d'..NjoLKsD]_.)@st{WWBC+f]pB___r	mO/^g\@   D<x 22RAAa̙=  -S	{ӭDDDh[BAڴi//sŶ@`cMRHJnn5nFs6HKhhssU+
-	43}0Y)+=5H__ۛ\sq&.C/?^^j  `hoooll<}q㜝AOf7l;v,mg͚| r$T2c}DOe+,t6\(6r,`ui'z9ꗰ:kHMMM;;D8͒B?~=pk{@P{@  QyQll~zz:`<r8II;:}뭁ħxLgQw¤:\3jdd'YCnݪl``SUU=>G\@   h<yFTT9 {4qRRR6a|'$$/\5Z4SQQ:=um}U
-ٿSw%CfT%A[b6Rs㌍	)eXӣ\%͞=;99۷~BK.   "Z[[>}.//D`*9tPΟ?nVr
-RUU}h</.3IOYprL!q]&uqhԂ^p!nw<^2vBSLԌe[[ P{@P{@  =ѐfٲeY 5 C.X Çwss`ܕr'9.#QYk֬.>4WWRɣ["j^Ԛ!{`oRF>KZIq_j>ԛDϝ;WMM-<<4@  0p<_ZZZUUuӦMi8r'#yph́wb9H8f"2Gc9֓jt>=ow2{&߯ģ|CCCԱ*++'Pc4[CCgԨQHm`5y0܃&ly5E5vSbSE.~GݽdɒŋǦPa1BsU~[ݻz@ @A  ə<y2) wx
-,igu$=.{A:gRWc?X~=}7zȀO恽D1)2n钙oXI^IY'C',]7t(ݾ\ֶΎrQՋON
-		9rϽ{` A  h߽{[HHhر+Vpssop #!K9sq`9L<wd)~L29Kw2ܹI;_>#9sAS,wB:`۹t0agg<x> ]J8q"*M6al6P7J^gb8ֵgN[,6Rt7*FkZ!5AAAD^|ʝ={鉉] aO.P{  o󔕕EEEAorrr]NW+G9{E2i2B6?<xÇZ*HfffhB׬Y]_+|$?[eע斧GI
-ۼl	Lݻ"vRp/Iڷoٳ̙C<D^'OKKKCC#%%Ǐ0$    ~<x 11QNNNQQ1>>AVy$>d>>>..e˖'`Ms!yՕNpO-	nkJ<,۱c$
-KϢϟ+8k;搐QQQsssr	;>ܹsGЍڃz #P{q@  ӧOq8膆V>Hy؞~//ښwȐ!g98OMDAGX3xz輹3x'FH{3=?螚 (KL8ֵh,Acv<N]OիWal fm=@ =  ~ׯ_*++58 :_35"7ё[GG'@+LNF7Yff puuU_?x82q_iڒ-%%-+ndooFW$>****Μ9sϞ="""TUUgϞ3 W{K.P{  @EMMΝ;Xzhݞbp@tsuuggg5k~_>SMA}:u>{kFkgOO4NBBT{"u&K5'MQGõ:	ޔ)%%eaaA.p7.k~驠t744 A  8TUU_FFFd݇ZuuJ,v2vzI¼yPYa6ܞ/]zU+;:,GQ@Ww<`XT*IYIjnʌ^II)$$zK=sp6l(..nll    >lff&))$/ .+ss'L@|v)7v,QQ˩_[H0flm=Ϲ{#2ƚC\&{5O%y}PUE8hd^khh'bz^~g0 }vP{@P{@  퍍hrJ555kMM 8Y{ۥ%%%#1]@H233Cȹmi0ll!lhn6},=2."ԂdFrVT8q$aYZe&:¥¡	?7PçMfaaAn\D777yyySSO>jXr  uϣ3??Çiy
-}"##Ə-z+$GG!C1bOV[euqSfڇQg뽗;ۍn\7N2B144TRRZvK` ; (,,jϯ8 ۠ԩS222ǳ?䗬$)))661clܸZB"c巙r₺xԔ_Oòp==0f\[3.0GGhFtJ6U@ZdX{;}vvv\Ks8jf\wVQQQWWI a
-)..NRRrx<ӧ0x \@ Xr,˗/O</++kiis `</_^f%K>
-,,,Qz 777H[+A)߁SLؿK#MyT>f	%Fq]o_ȡ˖-#`iY?}\i
-		@HD]vvvEEl=	 Dח8::Ƞqݻ[w) 'u׮=v͟?u-H?gכD???`L+ԛVt~gqslv}=%Gy|y^<m~W'tpp0	ӷx߾}_|˗/0 ڞLinn>|-[_ @AcccII	~N2\dr˾}d-""biiЁ(}203cvg|ewΰ.v{䘥2{2zx-g4lUSAAA^^^<<<}QE/'''z$۸9(,HPPp6Y0?d}7\?3UC>%X:tat={)**fffRaRfLL̳gZ[[a8ǎ/@ =NiooClmmTqҤIƨv ׮]SVV?>Ln{LȄ	;0^4cϐ9UyvNeOεbɍ9q[Tסs{Mwy'rqqꀌۼ>zĿ0442dYډd=T42!]eY}9uTF/'0jKtu^)^S{=}M͸"""/_w274q͚5ӧO;wnvvvMM( ݣ =ZZZⴴ8YJJ׷~	FGGkhh̜93!!W<_SSKssW^u+UE|:D{0PS!=)̿WJOk&?5nva$^r8q"ʕ+N$466\xq<^&G"&O:KVUNs.Uk.++a#~ūw/c[K/fcM)ױuHRUUUׯ__ZZ
-]ĉ臅{*[#]YȥWF :89:˒92sV#39sz``ʨ*Ke10g\kؓ@Y*e0׭s杛8T[83Wkaj;ex{r+Y<;nڐ9wXҏGqȑ|ѣGYBz48@Ku]9ZLqJsCRP
-0אQsFx7_YB̜H?H`4Bvvvhh(nݺǏV _ÇUWTT:|+:x+/zƌaaaTb0<xmE_i'Kss/_9w\ܞ
-O<ygϞ9lmH`,<^h.7U|$ڪuFP322w1S{qKpԁ*((DGG߿E^^gcc1WtHĩSF)2@Fs4zrzF8#%-KdO|!OF3D\i+K.[2_EuN,9|/uSSvc/kҘd;|9,s8,7`#OݦNƁ~}N #%@W`Ԫ3W=劘v.eĉGÃ\\\fffW\u /G{{ӧOf͚5}too_SS^繗訡W.)גּ Y]x>|[[[.555wa\K@3GtZZZϟd~m!UTcR.#p';sbU)=H?CΌΝC]CC={|𡭭=DPAy~LDǝɈȁ%,pWz*朙%E\K*FDfɜ%$g9˵wSbeN3a-K_ K%YJd)}ֺu0;|Rθ˅Tew@t0Gc|2Y"z,ٲe||É]\:keΙtX
-yyy988A@@@mm- 
-h '0k,UUUJ~<|<8D{xxyyyUL=GRR^e~ȑ#fḢO9!@z7eܿKWc]ښoó+sUڍT`` qQnv211QRRrqq9|ss33 
-  `nnnaaz #%s8'sy2g;3珀u.K\UQ"fiiɒ	QF}oܹ222cǎ퀼|vv6t y޿OP,X^̵k>Aeu4OߴiϺ>,σ	&]yyQG[և<#eee-})7cTĕ)_[Hpbnv%K3.];]fh*G [R/(((Qb		AH:::qqqO>mii_QQQqΝǏg{?ӏ3BP΁S1 <z􈑰sV+(5gIC?ŒgkS󽄌ev٤=<;?E,7F^3׶VOZ?NcKrEo=])HtC7Mړg	Knߩ_yFnݺ㣡1v1cƠ~p֭Onooy ͛]v͞=[XXfnn{zz<Շ4wvvu#ManA.?5hР3g^8x<M򼽽"LpD0_qiQYSL)ޒ
-wWhhyi"zZSz8uT4B,6    Ν;8h񂂂> /)''~W^]tP;:OÁhl\rW{s͛7h Tgnjܲe_ĉ̦g,Y.s	qmp͸j?fL6ߟRxʝL111''.444    +jjj:daa1uTaaammm??º:X =O8all,--xᶝ;ehhx!pBOQ}鋨(Jj99tA+:($2pn̸vޭn\pŏ={Y"##޽c]    @}\YYxϘ1c'O	 _+WJII-Y>:OSvvttܹsO:+[7fff!_=xpǎ2227mDengg9tPbF
-z K~i"ˣ_Srv'PIW8qevލF0    
-1c***`u Eצ&N4 o߾y틉A޿y'LCX\GG!C1",,}'11QVVvРAÇwrr8O$'`=lذ𰍰쒵V\9m4___j)q닋؜;w!    g  }]pM^^~ř-{[1y444Tjk_8okƝ9fixo2\}"̤'r\\\óec'N[w"Hjjj\\\|||h~6CNDqrrۣY-z ͸Ro@]Brr26VqQ	UUU/@hh{`       |ΝuM>}ѢE	olT/YYd2АJ~nkGuxWEizg1q\`>?XӴ=󙙙s2dȑ#---SO?fvvK}d2j$Ș7C鵜p9EE%Kٳ0       /--]v3<m
- >>~/7ChNΝ	nomnw#[hYTMu~~~<<<5߲gρ={̙3hРaÆΤr;9$*xԨQ8Seރ~c,;;;)))___vٺSLA6'Omg       Z[[^ƴrrrjjj;vy˖-SVV		tËOwCύ62X͵,q&|EAW/G<x&0ܸ;44TPPݩ+VTѶs'zP, O"b*'|ڂ͸ӮPAA@ P`eEO _&n۶z卍0,       n
-И9sfLLLy6773gNdddCg_t!ͻ7hm$0dR7].bQ{
-χ<q$s&W/lڰo.k`X[5SƏ廼>zRS䘚
-
-
-vc39.#FJJ
-]&>yHB-[MLLRO0\_wpY99Eeffz
-%       ^ӧh2w!!!hy/:rJmmm__wk1%~wߜ|6X㺸hn4oڻ3$Ys~,LLL<yA.]^˳LR0\M|fx,.?Boߴiװ܍N]o˹s       hiiyIHHIKK{{{kRz=NNN_1uFE82l7W2a[|||Ka>jNs7-|my0Ozz}dE>˳FE+**&$$Po[cߛʚ:uj4}ֆDDǯ)s}Fů/_)]PRR"Hة=KPˣNGzʕTWWC     g#_z=m4OO'D;;;ϝ;ay^<WWyܸO|drlп|ˤ'Y@@`W=o^$o߶zpN?룲WkuC***4HKKС>ڥH,PDG
-`%|ٳQY"""'%5e_/^-u	A{'gvT[mM߲'NM^i܂؁~Qکd͸$$Z
-uONN~XCx??A     
-'##U#>۰a[y`R6;mxOfu&k=LkIU{FE]1>xfoqc$'Uwvۭq0ϱUUU#>/}||&N<y>X-6H?M466Fe	dǀX!;2qw2k,Wgm/O W66V-
-5;;;~Q *6+?ž|r4-#ŚnC'9:-u	pg",[[[YY-[Pciu7);99;wӧO0VǌÃF QQQ`    7o޽PZZy*rs7mڄfʖWrۛO|Bh=dnwC; /ϘN6lXNݽ=yBx7Kgǌq0{+
-,{T.K#lz\Ό3- }Շ
-P`(d%Czj{?Ş>BeX~..A:)*7eyLgNzɇoyi<)sj{BMɓFƍ8t('"7#xO0W>λqQ(khhbMDTVVF۷oÈC())QSSϿ`Rx     ݻy扉YZZiݵu4WES]]][[ۢC-Du5i^^e;:ğիgIrb|òO⯗X޻qn*Z3'æNxE6ԗhV<yͽPrnGS)S!\??I&Wݸe#bN<ܜ/<lcs?vW
-a:}]A)IWi&ĚE]EM\i<]ѣֺ<QnQHxOߴeKhuta@jt׀^yQ%\fyuu֖G__aLf\u7o066N9Ќ^r1(QO͛6 zJ___~~~^i񑑑uuu8     @#ƚ]v-^XLL>:OaaagF50ޭNNι޿I8q\liDk>-xә׶B)O<͑gP!jhfRH($4SS_EО0rG>,[d	,O0!&&ԏmFE1>l2("ΎM%:?z+!tataDz8àxޜڐXSY7*<=z4*J`FAt"F^JT`mϝZ[)s}PxH<kקY+Wܼy3C3.RJJܹsQYGE6^ =GSSSffEnaa!(     :rȊ+$$$ٜ/YY}DDD̜9sѢET*KSA/opsh Z\I`r2n\o__ FFZRQ;م^S{nstlllЦl͵x7녿a5E)}Z5G TTThO&&xe"*M%뫲ޜTtΛM^N	Ϧ̃}|=YhPUEiP|	(\]mrI񦞻nmHlr9ɣ34̎[ /5޽[GGGKKQoaZB
-@ﲆFhh>@~ucccnnn}}ѣG:	=~~~>|V    wBee'lmmedd.\I33!XiNJJB4P(wamhKV+)qyb?jӳngӜdii5&TbJ/ww^\]>2UiޞQ&CHa"cwvvvhWϗh~~~I9;"[ZWUf!{bMƏ@<rPtsNۚo2Қ1Ed#x畕6;*%Ib!,~ѧj'},, ,:RnwZ`A~~>VƒSN9;;O6pϞ=^1稨زeˤIBCCǍ9~xmm'O~
-     UUUyyy+VC~=H$4~Նhtd]o3nOu>K&ݸmP6qDUiGrnCi\ӝ ^)@	;m;z&Ft`?QsX=L*sss6ӳ!'^t2H̔r?zhTq_.Agdq7K}.;Ύ3yP>Ŧ֙%6yPNek~!u謁tT.cϕt#'F5~):bi=.kbbb6l _"`&+<gTѣG.hiiVUU2eJ\\܁jOHHHii͛+**     @C4D<qℋ4jii<:O]t3gΌj~lllKhR;6DSo
-	=Ȣ:qƨ3x$TU$wo߾9yG7tI丨6"l d =Ꞟhɹryy}篿Bo777.nw<fMbhLAϟYo|[4&uiG`k~?W۶9#4; m(RDi"" H#%HbŮ;vEw y(0gr{?sf&;Suݩm@e3vj*|@%+SLlq&	_-zbM'dY{tIllݺӜ?ո.j蘘GCU+4&9BBB...<@r tӦMC611A'N?&LS[[%''wɎ    `؁W\ٽ{)::22T32F˗	]؝}E =uܵ[)7)GZ-i~4i¢ENz$`g'埙\,X	'JLP}xOgffJSkm<p̙3S(s>'gݺuqBテ`4: oF;qZ#kSh_lq/55V-fWFJ\}{UCj*|WfA]F+o-cǎaffmTYy%LLLT1g3c{(I<<<.>z2*tȪqF#Z@@@CC#++b0L&._<//HPPPSb    0+**@)$urVOOjH+,4iҹt>	Y$*ןWrpqsTUbY|#B^Ny۶mȁ
-	h{*)[Yx@sgɪ9\k4l2|9o{}(/&YYYǍ'##CLH~~K܎j96RӛfϚ>DSZg)箣-Lyt:"c0O>^&qhGavآYTxq^RSb7pϤ˸wk辋ΝⲳK>ոna455â 0</_`0UUUɓ'jo{{;B322ͥ -    Â梢"			OOwȯ %))Sk+,AzJ͟G?ՋAnm~*iooonn(lMt}_5nɮ.ڛ"幡mA3ub!II6l0ujw?]!\BBB]GGZ>PE{J}'L)r1,v >8:0* 0FhF#	jѼ''l5Z9a@]Z&NJ*ffIX|MOW*FZFJ5.\rr2sedd=p3FuuuE*z8p޽{---0OGGGCCPEB\	~h1    ikk+**Br~~CugaxO8\Q~}޾&w{2iD67nܓ=N:m ?](}lxZzTUU
-5zwDN
-5DƍT؋y311{ӃP"SK{4d'{$;vlɒ%[l5b877!O|1v
-u%<H	Ax>sFxФHK-<}|^YnWc0O6y2	ci6qIX[sb{eͻ4+hG-M{c޸OѺB{=\W㰱5S>c&zyyikk41D"qͼ***X,jĉ>LU{>u   _Ǐ)))ʺ$bc3> -,,5ڎ`j{+DMZ=zy?S-N^&/TC}YU"uV#L(gQ_f;C^n^:Z2".  Sqq4Ƅޡ۳Dڱc̙3YYY#ynP	>Q5Fs)~m޸Oabj:_KI dYI)6rY1`}P}L6j.fcfśr23v7/{NVZNL;)xoU]ŷd63swc=ʥt۾f͚ٳgo߾=d,涶tRMMs P{    `!!!+V}F"u$'3^繑obb"%%FFv9jc+k~ԩSBv"fqL##-mS+w~ƨ͛ĖPgum+111]RHnbIIOI$;;;4Gpssst=5s$&*js3-E8y2v^hoj.G̵FRPTko
-ϓ4D{C[7
-PembԘi&?ΖXzΊ&TqO"a-[&//yV -K3    /KggyxxLMM|`۷o411yp7JE66T]om11^ǷxAWvwoB=|ĦcW#&Mp$Z<jE($#)T
-ݼȡ@c{Zcg=ϼy޽;*&qy0k׮;v|ĥ!iUFmVQΫ|n#a.a)S3k)p''y=?$$؝
-=w>NٳfThʔ;)5>HGGG ɐg~a^^^uu6 ߯    eddϟomm}@LLd|d{{{yyy%Hgû1_8Y׮3	UX~y*r^#ZrNJ?Vs̠iD kɪ(IF=GZv-~Ν @$sqqoLC}H܅!|YXXƍ丽:#{l
-JM4M|Ne^ceocuUןzVͽj^Kdn*{SՕzPkCRdcf@_eZaAF73&Q?J%޳lۛщ)5q_~ҥws?=`X55ŋJ 	m&&4    y&11Q___@@ -$:xFDFVH'OduƎ~Jԑ ]:IQ^[xgr+,r7op/<{)v=:ũA1YKKyԩnnnM99	???j3fNEU'W`aaaee566|FWyzysJ%fNRXrYx~jiZYz1̦ lh1~ՕGuϠ1}rBյgND{X-/#?ˉǡ]Ş>hG[.nR`r5mNY0ꮝ+;;ګl^=vs)rSS/[.\0$$$.fjb===>\TT=R{     ~M:::>~#""iӦyh,ƽyΖ쪗=2eŚֆSF[Yjyy6=>RMUBSCuYxGsw߿27[&=}:cT1 T{LUB&NhggWO 0^n͍2eƍqXǳX|OͻX[.[`u2526LLݩ-v4z}NJ)u"ԊZԺfN:N]3}Ġ ]ZPPз[Bsy60sSY~SRMkU<cOt6iRwu0-0vf>9R4$KJJ]6777QUB5z*++cت*! j    T333׭[h"4LIIi`΃Ѐ+W&&&SROlECQ>u˝bb"/7or[7bC	9ArI=Q;M4Z 4ȶwofff'OcLYvԓDDD ׬Y\ΡrfobmmmN̬<Sk6)u!8Dγ	]\NMo2
-dn1{ċC?)e ݍF+x_%EVcM's!zaKgw7x~'_AGYwsZa=4<{*d͏ﻏ路ѯ7;DI{G'`UUUEDD,,,Μ9G?J8q"=    Lqrrjhh=z%3`)''88XQQQ]]Ŷ6{Nk6D	>UQuΝ9hfI `zRA.
-''keջ|33qM<Ș`ǎ4t%1...ӦMCC'}ztƄԇ<R6C74yT<HV>mIEjh5-D)u!#tUALm>: <lgĈJHHtW3dosss8pƍP&~&    :^]]z:o߾}NK)<[rePPPS]8Ƿ*+%bvѧeucx￤&;_C$qOhkk;y1c뗑HNegkjj033+++nUev=*RRRw`HmKrwwTTT<}tBiP	0'N011B7cLLׯ:C    ?sڵKVVVCC#22:?:Okzz||l`eaV:E؏cV/ui{sq;M1GvFiBz׮]Q>]iiV:uq-[ f6a͙3IJJ^IV|`ڃ7nܳg͛7U&87119<LhPߣ@    ߸qʊWII)  :?+6:O[Zڱc455<Uy0~vwGs锟>
-6u
-Maa|SML_@Ѫ*kiDܹݓTUU?p@&+++r
-#""wCݝaXXƵ]-2&$$ˋ9r_2TI{aoݺ秨(##r喖Ы=ߣ@    )477_xqϞ=BBBnnnoI$Ƹx<W?p@ջ|6Ftc sgrpDlTNe(ved4HKc۞VʊN"/oC&܏	C"u4÷4&޽{jUNVsi--3gDDDxBW{X~Ijl    FquggKzzz"31zj			tac-%	]7?㮵F#[5"h>]\u)))&eĔBa˖-Dʋ/>q &6q!H	FBHF[}_ZqNڴi''e!$*\puH$Ree% NNCvvo| o    0wzyy)((WH?Asgffk׮W0
-]kL9o+enq|Twh~$((H튏gSN"رcLLL\\\ш<dnittV$33y;(KLB'+.oyܓk׮KKK<xI ???vvvj''__؇Vfr   PRRR&'''//<$R'`yDXIFsm6>;VV]yf;oo`d4㋎HNfLL޵k5μylmm.bIA"#LTF8
-3b=)II...XjUVVVØ!efft555tWVVvtt`	ϯ!o    5]]]mmmw	?>rÌXobb"&&iӦOPy(.RJJ(-bK7NN%އH}l '';ݪh$:Ced0Lvppdfffgg777="7qQEs	{X~L
-2gx--_~%gNx		A?~QQQ3332[2899yAl    )
-ǁʂsroL߼yV41VUϓ놖;oq8Ν;]BD`O~-̜9ӳ)'1DgggjӧoܸKdbƎbll\.}8+9JJJ=^^^͛3g[ZZ`&    ":::o4nۼyLF<ѥ$-[
-d0+{NyA,Fa
-/@}J֮];vXٻwo]^cJۛ/z̙&&&GGIQǏ0aS2UUUcr#JשS%$$_|	ո    Pmzzz6lHOMmOMe|<_d}xyyuttNlɓ'p/>}j<$_!fMOMv&=}L644daa7ne%):Bq]^ÇXYY~PUkbb2atիWgg8Zx9vߞ+bn1t[+򎃾Aa?kHul})ـio]/"> ""2f--C9.&**jժUt[l!o޼/^8'@M.    tuu}-_{驩pkoI$ggg99kŵ5x;A:{1W=hݻRV`6ÔXXXXYYΘ@A^tjUUՈЄ!rEEEѹ'X/=QR/@k]\߉:h'_b+_<tedϷ顿ODm&  cƌAޱgE%)))&&x䌣!u^s2SM<yb{    ikk{uJJӗ-[֜xz!  @YYYMM-66)e!AxC˻lu4mmVVD`IǏgccۼysyyyfff^|y0~R?pQ/ik>I[3}1/cx^t}۫I{] N[s^g#}~^?߾/{xx۷/aŋW^JK=
-}=P    W^kkkcw2U幻Xbڵ>k{de[#X;q-_,(2̂c2W~O:u*33]"À)]qqqoaee3foB	&qzĥ1Z-fЛ}푿bo?Rm>=z0d9]/"TUUѽnݺsνRXYYQP\\\PPylZ؞	&    _KWWWUUD233QWWj1>',,LJJJHH(<<._ۥ9t\kCdMME|XXXn*&L6ɴgdhhh;MFF&88_4``#KO777t*((߿ҥK
-qCzh?W{kTTT4   <OD٠ NL			Q!00*_jއ+߱]ЕgNxQSکF>3sZkm@cx4ȗ۴jjjR&QQQ	Olڣ'On޼Y@@@CC#,,ٳgMMM0T{899{i;m    ?+W̙3$RWl,uy%$$hii)((xyy|/+~DLlIhřdE_E+,,1ݢjcm0gl[!uط>3gSSRؑƆNx0A<J(ĬZ
->zzz0S{P{    !ԠG޽{.]Hd4<+WTPPpuu('}jWyy:٥丹!HE旿
-;E?}tVVVU}Ӕ͍qqq|mܸqʔ)ԋ-ڵkW|sݻwŋ5E3MTWW     tuu544={:]Qkmiiii֭䴱)/#}j43xڴi7Bkb&MtOSm$?/~AoT,Ǉ~K\\\-VVVԳg޾}{션X6'{l^^^IIh}BT]]MeCاd2    wﺺ4z>#ӑSkٲe{<kԩJ+߽Gk.=/@)h6~%V`ad5{{{w'	$-:رc.\ܩ'\70111577}EP.s@a&    GKKKQQÇ$$$o^L$1XA^Ua^ޖ-[="KKv|-:)kΞrdccKKލ+˃eS}ueHJJӼy8КΈ	{@$g͚eee{>N=Xոnb/,,,##|Śn>***-4    gbIIɡC888/v$'3U100@~YBgKdM%M~?uǏ?fG}m68|Ȭ	Z컬~Q3f@dM~>cg$޽{ϟN=e##۞D&<411斑	~[[/R\\积OKr o    ЀF_JJJ:::繝oiiǷz3țvYcu.;܉z**oXvUTd1@~«yjjjG$#j~j tjuuЄ{j\ht&//pBԷoB``gН/BU{&N    4{#GTUUŭ
-	<u*!m&''e˖vJ*x>32۠ຏ
-233-wv<uI&{-CرcYXXɌ鸪@IIqojjj!;X),,tqqC|cc#b @l    '`YYYll*??INzz{ZKnEGHׯ$:L}FD;aΜYk4uu+/Akƌ˕]kciwnC ~l``0~x4744dP5gg]YY9$TfImnn.))f͚tvvCke W!/qrrz	0imm-++mnϯZ3o49ƛWݭv65,,cJvR"o
--KɄ	XYYW^ͰHA?lGYttteL66ObL؃c	&6ŋ2ehjj*/\-???\_%@l  u)NNN/{_ 3-[=ѣ1yMkII,tcƌQWW[Bwu؟}Ǝأۛ#kC[<8>AEE6>jj>ȣD.(Ri
-
-
-֭^KvZ=h~9mO/_;Tڋp/y>Ӿ#|G侽mz}^_~ժUhn
-tWnݺBHC5  D}YPP@eHYYY\\"z{yyUHzsԞ+//dWWךSwu[~+33R~Y??Byy5CL5Ǐ~l
-5duuuvvv4H@لEDDD{遶Lk}`m>o\?Ecv;S:.h+++a$|;ԙ\&L,  |gbA Îo&$$%??JHHHx#99//OCC=zjϰ/M@\c"Q}54P7o7a߆P4){C兼+V$%%Q֛= vލˋ5ԧ6333+++###2mߚڦ]zt2GMfWc8}~/}^`63f[9໣_] gs?5f999hݞ7ĀPc{`&  ߠprrC Ñ'O/YD]]=<<ǌNLW8#,,s۷o3ܭ1∿ԩe[̩yxɓ_=y^zDZJ{Inv~k=x𠔔RLLLkz:>'=<<䄄lmmϝ;ŋZ4~&v:5GzC)~'1޽{WWW01jT5rr2334 jZ(((J :;;ш=MLLCCC<xԞSN[n̙6mrʧV8Zc,-͚59YL&tΤI^<	}%K;:C}qAh7ACzaa:p
-WYYYBB:??Pr  {&jU* /l,0 A=XYYA ÔǏ#:֭[]W{I
-
-6nǷe˖/vă:Co32	o!W!-0PyK_v5nmofk]lÇrs?EG3{K"9;;e~~>cA  =Oעzx??AE= A=9P~TUUX[[ 77KFG^jaatRj>?}C7
-,x-''AiNKTǷVҒ9}uPi煄|||	FFE&M6ׯ)  Bz/Ы=g =0utvvڵKFFFNN=5'`]fcc#**%قuXۓ&9:6FPxشH)2?u;<7)6]8ixAA7AӁ}SR544PX^+6H		(!!JK  @g0?gϞ8q"  `TQUUu5ggg.\	c|l:iqq={Ν|򬬬J28ڮ\dee
-J[%J/cbbJKھZjz%ƍ^(47D2888WA"12XSn.r=uttRRR?z   ~[23&ԇb{   =tuu:;;JJJڵii?!$vܹhѢUV:=N=ؒ{k\ϬY욚jK;vg֭
-^+zt`_e-s,XaÆWdrWl,ܔ!!!ȗ/_  0t''P@M.  GAUTT8{bP֭[^^^UټysvvvLQ:?SBBBMM->>9akΟq_2y3'V*N6mʔ)8lnC,!Q3wZFFplξf͚Ҧ&x   )}ܒ3aP{  }&g/;;'Ϣ͛1700@D,Yttm^ѣG)tQgXp#y3fܸqIh3hMk͊ZH6(j}pDnhhXH tODeT՜[nB`  P|.,Ejr c P{BCCÇdddͳZJDpXXXKc&8ښgϞyoJn3fϞqSvܹVLȺ`ܷЀ`I6mZxn~F#3̷ɡ&pvv.))
-  Q\\'..yM>wAf  @V`ØMMMaaaCC쟠<  K@@ 889pi5],%)<[m6kó?NVHpqnEgoA}qWyᥤ32:Yu&%]͵AO|޸q*p  m&cZl=  |'ہv mmmeeeQQQk֬?%o%+]e>\.ׯBEEyN_q+J\n\u>	Əs~uoKUe?ZI&*&9;;KIIihhǷ10|[F"NBBBFFʕ+@  
-zU`"0 '' Ckk{"##DDDttt0L=ԞG\RTTã .w!O1ӦPm*&3{֌kW|4F8f͐_k9x𠐐RLLLkfhƤ늏/!奤oߎׯ_  `՞yz=P !33Y y{aByɱc֭[7c		ngB.[r%??={ȟZ![pKΞ~QKMUVP@Oq
-0YX̜1EYI=-6hdGHw^^^⒒GadՉ߾}q-ھ};@x][[<M   ,oh=  P3ӀIIIJJJsYzuXX"+>jO[FFzz+ϟoggWTT0L'57քQ69>uTVVֱcYqZpkW9ߒ%߽6+'744׷6/R+29
-
-
-q&߿   d}}}j;;;Z/9s/b{   FWWWyyyzzUnܸ*4HNNKKSWWڽ{׻Zc:ҹ߻}HR	EGZ}ޱMkKʞ̘>e{znp.Ƞ	\]dIuD](<G   pѧ Z  (_ׯ_geeYXXe<XZZ\ƫ=艼i&aaaSSӋ/Bl0ΖW-&Mx֍~}#R|U:)9N'42Tkmli:`ó xwdhF0z$p8%%%)))WWwD"Di)''$$dʕ"""7nLHH(++"\   C899YYY?heSc{@ [#=ׯsssMMMeee^sԞ$2l``x͛7;w%h-Q7rrr+\si^wgIJĤ\{VkcPmID`X{sj!cժU\\\;w|F"1.|t"hjjG}aW  j_/^S@8q"  `T{`cc#,,,$$<˗/31}ZǏ-\P[[;??~pj25Ieǉ5'XYYk?Pim8`zHcZHOTONv*I	u兇hhh666  1prrR6f򱲲@
-  B޼ysm۶qpp߿ޱzŋuuuۛSQUҍjO'%22̂9,d[G3-2KnQֿ~";[ΟˡzzzR"	4ٳgKHHܹs   dVFo25o  `QWWwI_pg 'ҥK;v쐔lIow8Z53o5lm9u܋ezE(`?_>	M0(Zrn	q֭FFF':#5gg#˖-sss+**jjj   |q  =92+V$II8::)**uPvF 4dJ+?Oλ@a<O_EsP'I; -9ʥr)''ɬ~QQ=ii⪪EEEuuu   `w==0  P{IGGGSSӕ+W<==yyyO>Mf|l'֭[vvv.\|9kw8z.U*+%=YiXmW򳱱_P =CǜltJ=Ommmdddx<#[23Ϟ=kiidYY\xu   `0Լ=婮b  `BGGG		Kv;V+yCW游ޞGJJ*$$.ag]-~[ǎwtceez͚k/gaaIMOJHMZP!Q^wڅFMLLL ܹSDDDPP   )ʬ"[:h?g٠   j0lnn.,,<t萜܂SRR	SVPP& aV,)Øyojs[dbbJw>sk#]-О1C%]BBBVV-Ξ=cǎ%Km۶-//Ǐ  EPT遝O  =(9VȻٸqclllCn.
-Щ==WPPlwY0ї˦~lU_&eC#9.JֺyǏ{   ?]Y&ĉ!o   Ζ5kHJJnذ!116/#WСCUy3۠MV^nb	AYA~0=Vzbc_>>>jjjҦɯ^  _b???G/_x1^P{   455=}4&&FOOOPP==###43>oOttCnn``??ӭ[>b^_Nv^
-u=6-0d`YYŋرDb\/<x]TT4%%nmmg  L.  @F]]]'O455pʕǎ>rH DFF.[͛3iSlloY3jP
-6ʭ)#&&FAA{ǎOdM&*I$8gmmgϞzH      @v466>}444TMM;wLJbӖ.,,k׮?5egO311ik.3\JnZ3455mQ=x|U~~``* WXzx:   DmWuk0j  `Tс\8mmEz{{?%%3kii!Ʀfr;u+	{S|:mZg>#,,ljjZL$v&&2@$Ĭ^zGqB  Hqq1}-X,  =(=޿jdd$$$Tƫ=iiV066>sf؛#B:#eЭ櫏6j-9:::h(nhhXH tJ_O p8t^aaaEEÇ?zBs  B+NN|6@l   ^xaaa!%%zOٞŵa2ْ1I*B022BZJJ
-#E\~OUUW\	\   ?KӢ}A큼=  BZ[[߾}c111AA={G*IID"АOWW7''0i]7ffffHJJjMOg\^^+Vxxx\t&p  t$..zNNNP{    ɛ7oΜ9u,]iitǣ+155$_69yϞ=BBBǎdg3`(YY99۷o涷|ǏY   =NNNPc~h'O=  NZ[[+++eiiI&[23YKjhhthNlI=e/I{QRRhfX.ԳrC=P;   Q{q{j_F 6***N:ekk+,,tRx'6ҥK,@n 4d}jlH=e$gggnnnڼ<	;;;~~~333իO=IY   0ԞǏSgrAf  @F.]rrrCNivvvSn.NsEKK%K(((DFF6傃6R,(jߒHp8t/H}]yVVǏa  =_K3   |ҥKnnn
-
-
-KAo8\QQdeeGXK8|+㤞'$:*:͛Ҟ>}	   fr+bUTT5} @<<<:::ݙ4~%%%nnnrrr	=@cǎ-_\HH̰N<ݻ^^^222|||G}9BG   FAA׃X큙\?/^fRfa5_@+k@ڢ"ooo		p0l=ztQQQiiitI*Zq)	\Mu9QQQhoccSȨg$R``ܹsUUU;H  0=lll󣨮vrr Ίj `r:;;_|r^^^--Ǐ#/jSRRZ@/?b_Ҙᔔ̙aÆB'ϰmʕhΝ  F=?Pj)VVVX,???ƫ=hKNNN'''jTUUUV^"giԣ2!wLRRׯ_jlJ=)))jjj/6008ݙ0z+W!͛7   hR~uu:=2#k%ZN[@F3---O<\nzPPЃ:+Vؽ{wQQSlHzzzhXx!7=5AbcbccuuuQf  F3~&#sޞ8 `=wލYv-r֬YvٜbUUU_y{uPn大3LA֔fff&&&|r77K.:|  QL8qwrr}BbU ~~~ j j ڃjydrrr7odkKA}͕+WZq^nۻ%ĭ[.EYY9..Ű	\M99驩FFF첲gϞ   Ԟ^TWWS''''r
-
-
-!mFU&-ڃSt:I@F3?ZZZ222ΝbX%%lذH$vPw^R[XZZ:$$!7qROnnff%O۶m;uTEEt   ǏS՞frQZ&=Q%#ZPҒV\5j!; `4888\|--y{999Db;%_uNەtƿ9V{SӇ譋J<IRϫ۷JHHx{{WӍ)$	$EDDLMMSRR***(
-t   'N̞={,ͽԞO= oj7쒙IW{qY#Ӧ /_fgg!9hvvvcHNfL|}}}CCÜP{").%)1КpVWː,*\fq{^I<yp`FI^Y&3,^1%Oo0\KTpppm^ä{ޱcغuk^^ޫW  jkr}prrj|C-yKEj\/  P(o޼ܶm$._StRi&!!!}}n9kv%3:yuAMqsMdAr5VpayI[[0jTz)qXлRs26T}޽-x̉@v<M5czODiYYYwwJSt4c2	ե͓o(  0\h:Ո^MNBY_hM~zpѠ WX j=(Dd2y۶m{{'O\=.~~~MM֦̈́tڐ{cR_/̻p	N:exdhaI<$盚Ȥ%U--䙘Prɹv-wBdY3} }ł]}@5-{G@(]b(UlbA b_"ׂ} 6A{ao6Y<'g2sg0wpXn0uh0З"Lb̔Iz*>o۶mȑqtt|btuG,ӏ?#6 %#aj;L_ӌ}1wldUUUgĉvvv***s΍(wgС>>>8ܹq̰]o׮M5VZ!A&ڴiMW5Fz|µykr*&:wuݚ1offٙ:h9/ѳx;r۶K:cj'713Nzvޭ.))p;		l4OX,gggbM4ٳgeeeh Z8䲰ۯש䢖744t}׬Y;= l6ŋqqq-={vXXn9sVBBBSSS~roM3=޾TQa//!$As<Qk6mp\*:C۷,iatҞ޼ٲi|۶59%u5йyt>`gѰs9سxڵ譯+9Tax&rd]5ڢ=6obFS!|UvΜ9)		Ձ"jkk8P__ƍ  2\_][d{q ۃl|sssO:xb%%%)))sss__O=/_^|a455^8>3θ]_o.>hy!iw/s^er}}YHgj'hdgm'h۶\RU_M ?JjT*Vq&cd̦(	>{ʅ 2SG{pG*ԦMk]߶٧ ###QQQqqlm۶ѣG:TGGgͩh 3cd{Οy5r0= = = D^^ŋl٢=l0sss??4MNN^r]?~=$2;;3<kM{vفݩKk++]Yi~;2{2b=7-;s+;ݧt؎*/?؜9;ql[WW@
-/H#aFBխ[YV5QQjff&++Kڍk+Y?^JJؘSXX&  (t~Fi(UUU:gPg{M7%_ ?Mڵk6lӓ:u/9&SڵkI~߿ls+;w咗kǔʬŧfLWo"wJfmTi*oiD]v}<^p?Wl aR삸$$.6|ƌTqҨ(zJH35eup4b)C{  ͘qwwGƀF~Lu!-""u;3恥 Rw=EܔlOff&uq)BNI]d{+))~Ν;I*--=i$rUf|,_^IIIFFfժUofܾE_v0ЗǮ5Rτߛ%Q]z {.]~;+vQBd+f?AԫWgqYۘiy{ܖ__!ɯ_~K.L6UN#=dH s\4i+DEEǎ{ȑHʏ?~i%\\\.^  ?Wr.VGá/S}١nՔl=v47! ߿ONN޲eѣk_,q{~~evvvVRRutt~z|`u;޽Z|nEta}cuUXc׮ OLq.9ԙ(ڷ*g+vs`䒏{-ѣ~j5GsIQowN~I|[GuY1666ZqqI&<"",,VEEeK,9uԫWИ  ?4󐙙lOGa͚5G,XüCfSr@$
-'U"O#""= kGi.--viC_^$=ZZZW\!-]v̟K&@]xNB4i&cd¹udukƤ-^Zu5X,Zqߙ9kW;vl"8+HRZn@߿Ъn|TO,yG޻wGAzHŅϚ5KRRRVVkҎ1 :=;wq%W  ۃlܹ榫+**_[Gsy{ݷo߈#ȩÕ+WZfߞ8MQ׶TtfzUVj={v;zuVQ4\nqr
-SɓVZH)ő,?'Gdpw?yo<|uH;)"zG>fzSի啔<==kzd/_iTTxh-i$%%ß={V^^f   d{큟UUUUqqqJJ'MDΡ455nzMI300PSS?{lUipy\659!ϝ^z޿2w0.]ړ#33;rlۍAߪUVݻwtwT_,zJLl@V)꤉
-TTŕW	u1R7R7Mc(u5Yvm;5q[~/7nܨQkݺuoY,e@6:  eeeh G}{  h˟={dnn.##GNΞ=[(=qq^^^ƍ#5oٞ9E1GKZ7}}FKݬq˼{<N\'Eٳw0M4=ztrf6'Y݅JR$Y1ǵKGǌNcc4LtHjdfGvNߺWODGGG55իW?MLd	Y	K6%++;sl  _o  -ViiiFFÇȩk*CCݷ+++ȑ#}555.+hQ%,ӥ-]=NbO%.Ciqv6e
-<bjiS[W̭/Eb'8iԺj"=`2@Q'MQݫh>P]hA«<܄l̷NfmٲEJJJDDdٲei		Ž2$͛7o=z4iO~Сtpl4  P'O61]8  ?(ѣ`+++#G\ĉ5Wr	jU:SuQr^iffR^ܫY?TN&*G/~W깗r*$k̿b2jڵc4,$КIDV'K~q&yT6#FeohmnLwX߽5JjqxKرcalmmSt?rqqח555?ݻWTT  x l=*--̙pBHf
-:s`yDDddy%9
-
-jQ}{?g;fHK2QƦSURs5F{unm[iEIyR)O{zS	.]O/=}G[&R{7̺1EϼEK7y_.vLӑ!:hظ$ӕ%=N]׿a|ʏ=pԂnUWOh[6oެ#--mbbq"܄  ? CUUUedd?~|ƌrrr.""";;[ٞiӦ6lҤIrf͊]4p@7*2uRbܢ&vyC{t_?.6yiI^3u؎͙=y?[t$;f30LmeSv7:OU]z ,%~!smHj%'۟J:mۺGNVg;2ߢWO0|O~96:(H@z&&zxx5ҥK߿G  g{:uje"+d{VVV͛+))XYYhVFTGEE͞=[EEeҤIGl!Wrr9CJ\ht/emzqy#:hO:憊"cPsͦmNS#'wa}M|y>RuCO{xv#dڱR};ݺC1ԧiӦ)((FF
-,{wwwCCCIII6\rǏ    Ul6==<11qٲe222s΍*(͕,k޼y***tǟ}[Bs` aj ܶ~ٔ߽t9JJmZHΝҥ=y!De@nCz_0OnrM,ը슁ԩEC&WP"%Ł!֤捾뫷?ft~:A͜~b;#^aG4i_ITn啛p1hhhlܸo߾Ű  'NPٞ[MA AZ${{{uuu9sSh	9}u^wܙ}y̌hM)]vU[:כq4rZekWwn͘knup*q1cϙ?Pwo֭r'71Ҥݠ9JyԛN~dz̵I!"=WMnЈ:Rj%111BBBjjjqq_7{leeÇXŋ>|@  1q{큟 ۓC~tttTTTyVpppMWrwҥŋ+))nݺ555]s7wHGdpwo(Kg7%ؑٺ:ԘC{/m{py{on'sdUTHN9o5>aBB<&s\8ucA?͘IJVTT߽{wM7?Ώ7oⲳq  4.ӹ󯸒@hlׯϞ=j*rz%##3q}߂q㆓GiӦJO{_vX0Oʙk@_{z1X:m۶3{D֣͍+nڑtם70cT.HKS$o}
-S3 B4)Xz޽{4ZoiTT``ٳTUU͛ٳ24  P\  -SUUǏG%""bhhHn߾],{|}SRRIe6lp-vO޷@TI51C֪WV {AeL*Ǿi=i1yΞ"҃kjGi^-n۶5U2}hnaYWXy܄zj/6lʪD+  @=Db ?ׯ__xqڵF"Z&&&;wLNN#؛-޸qc|ҥKe?}[|m
-]>={vg;BҲݍK]0ZOܩGNUHiTA:wz)s<҂=כPu}7z.zR[1|az<Lc999i"D`R=5#۫IKK9r$--3  4%ۃQd{ڵk&&&RRR:::۶muVeh}hmm}|}7V.ݿݽGR7MeR*WT #p+&b^TiZ's
-<9#9duv頄ԍKNf0KȸLL*<eKTm!&+;B_zK/;̵ٳggj|]/[Dpz$''zG,Vu@`%QQO^d2̙3}}}R  h'{r!o>111ccݻw_~]|}𡫫x߾}-ZTUӷm3١tqj]HZ眗no=r_/\塞=vdcz_ w]ڧZ*)׶TiCDz,K-Sq)e ٮ[&zMyeG.xNV[0Ga8`MG֭ÖM_<Cym<q\M/a,6g7YOvleݚ1]_'_fSH+eeelmm3X,9x:(>emmm=z>}B  MJ.}{큖,##HNNn̘1Ce{tttTUU-ZXQӷ_8`m6Einmڴ{'4ZOn$^:Pew޽,+c||D)C]7:|޵K'Y<nxyq]7 zӉVo&ݗK4g뫙[A6MF6]qRiT=b8ZY#V2a=3eytڊlnHŋt:#7h\'m'+**Ξ=|ttu``串yHZ搖ԁB-°  ЌҌ@ ۃlX433SUU566޼yٳg+~	g͚Y=moeF`ѩ?Q
-uցzUQa22PCܬv0]Eᗾ}-2;)Aw1Fh承Rsw^O/\]w\XIܦMs5&mhve6x*ٺu.]ٹO.Svu[H1#;k[ƯFpD~n<QRR;w.X`,ĉUTTƏcǎ+WW  4zd{d{Ǐ<ؿ,9ﳳ#?5}{211>}zTTTyqX#ROͶMC[K\VA9Lm۶#o{vhȠuC
-@_j扏6r_\6g!CDzr]r`xt耥={v62>`f`r^n2xx/+D0pGSqf
-1>>>fiiZ"٫^$&nڴI[[[JJ޽C  ͂C\AZ{9r|vvv'ܓ'OMLLdeeJ>E}.j	-jU҂=q2qqce4uHӑ0#3J}ڱg\!gg}7W.ܳzXc:]Ψb6s4ȫ'Yxl;ݶ.uwtRR3T+β%zNÂm3vieFfJ\LAr4HQcalGכZ(74SxJKKO0ѣEWgX{ӧƍϜ9{M f== L<YJJJMMmɒ%o߾+=رcfff9|09-m!B0QV7p	&Xv~~9,N*--LZ'O?H  @3Ʌll=bUTTdeeϛ7OUUUEE6"" .N}{,3fQMhl把Ф3Q3g$_1eeeooT@٬xb-N:UNNNKKkժU,+77M1  4#oɅ@4:l=+//ILL<9\padddiTGi		NMMM8.s7[/K:Eunݚ/nQlmll f{r!ۃl@EEEnnndd$ufkkZS OyXXBBp%#&"nCC]ves&߿8::.<|M*`ccC4  0nl=±쪪Gٍ5JCCc޼y邾'WUp'.\@jVSr_DR=AX%##C7n|b.]|ٳ=zݲ2 oAWr!-9Ύ[lȑ#%%%ǌC	!s6l͛7~hoF?~܊+422,,lٲVVVh~ ILLD@d{%cٕ/_dXdpذa]vJMMO=O^xB+W^vE ۫'+V˓Ԓ%KnW]})ѣ:\\\\UU  ܓ@ 6˳gʊM4iݷnݪ\AAW^upp^j˗*[1z=MtqqQPP4hТE%$T]z96vڵqwwsN^^^  p%0` =ӧO.\ؼy1cTTT&LvpaݼysٲetV".D{@4"Փ:}ӦM;]$rITԹs֭[g``:e*\RR^=  AZw]vm۶mFFFrrr&&&ʕ+ك#sƍ͛79ɓ ,OOϱcǪY[[GFF	b34)4)䫝  ԩ==@fo߾MN͌ɩիWkJ.r榯/##cccsY\Ʌ@40KHNNn̙%QQ:W>g'L@RM6]vM.   }%==@KVPPp۷;lݺM}{>޹sgǎ#FfXho{|ʏ=vظqD?
-&bJJJ:::[+*  m=AZ]vM2EAAaĈ			aal??_WWWCFX4?z
-?x{{ݻ .7zyUf'&;VNNl?|eEEZZ  oB AZ2rӧ7n8p`	={YxK߷'--O8رcϟ?G'J>E/a>{{WOFFeˢ={VVVk  @q%+(**z𡗗CLLL@l:'))inn_\M.H[[[WW׼At"[IH8zo&""ҷoӧƒ3<   xۃ@ ۃl .,,|޽{NJNuuu-[WөF/CM<YMMȑ#c"$ekooI֭{"^=O<9~GEVVV~iQQX  =[&"ۃ@ ۃlXdmܹ#FИ7o^PPPFFE6cǎM<YFFb>^];@ ^E$?ƍs%$4 iFHcBҰu 0ۃ+d{ɓ'666jjjd"888;;[43ǒC=G#G<x7ݻw;wֺS/gַ(	rRIj],Qy<1{XG!TTo:a[,y0X%wfddܼyѣҥɓkz]CCCEE+==ÇhZ ?oQfWWW?}4((VYYYAAa̙<t򈈐uuu}2775k֜9sfZ1Y|ם@lWҠT9W{]Sz-mY GU;c^<keccC#jjj+XZZfX)6611q'O޷o_rrryy9n  yWr!ۃlp%%%><~-9mTVV:te{y1ٖÇEDD:u4֠Z/8)'[s5boPUt\w9Eq*k2dȐݻm***]bV^+//obb}+Wy*  N:E~;v(=@VZZ󰰰e˖H={<x:0P}{bc7n8eʔ9sXײ3C#V.Ϳq4\{jĝoGxƣ/{1ǑK}s,3y&x9VνyϟOX,^qybˋ7ŋ  s'N=ۃ@ ۃlXl6*++˗/޽}||n߾-KBktttbbbRRҙ/jgpdRRZ<o*%ycWԠ_1)ylzٳuV]9]ǿPȣ<:Mf_ىXgVX]vUUUݾ}իW߼yîv  [= 'O?grrrUp =l׵r]ƭՈݻk2s~4zFJ G2$DZ^kIrss355TPP?|^^^UUS  =@d{%#ho޼ILL\~1c>ydww"4T'_@ x<_z\zuΝSN%S||W  d{d{޼|ŋ6m;vƍ/\Ps%qR@  퀯o6sNSSSeee==+W&&&>{c  ws_A AZ.lٲeر222:::7nvZyX=*8ÇSL9r}DDDvvvII	ZQ  @@Pnn7oެ/!!aÆ'OFE<h{b9rJVVV^^~
-
-JOO\  \= |-WNNիWlbbbB~ҥQQ5#hQ3cEEE%%3g?~D	  !A pO.d{ Jrv%OO	&2DVVΎblh뛗jee5tP			KKK"t  ۃl %??񇱱TTTVXYKNp΋@a?Ɔ+))8z  Gt떉 ~!ۃllvqqw5~xyyy---r~Us[."-o/^ǯ\ROOONN5%%-'  |ٞN!ۃ@ ۃlpG5j΢E?gDKSzj###Fyzz_h0 GJ.Wr!-\AAÇ=jkkbeeExWr!-+Ϝ9訥<iҤm۶]r۷l6&  (A AZ;IIIKKːǏWh9Qv-[hii:x֭O~]yy9L  =ۃ@ ۃlpeeeǏ5k:\3nNpWeHȝWWW###QQQUU+V<yٳg  ?
-  PXX`mm(%%5~xwwP#-˗/oڴ@RRR]].**)..F;	  ?\Wr!hɪ+**=zNNDDDvyʐ#?}o:o=5#-ip.  w`Gq1` d{lмJKK_xq){{{r'))ijjq`Ԍ@2=g8`ii)S&***33-$  \Ʌ@J+SUU3TTT{.66^SSSEEe۷ovZEx8N8>lcc3rH$O333+  ?"J.A }EGٞBooo))3gFEE`Lh"سg/ǎ;|pSSSWW׳gV`ؓb̟?_[[[KKȑ#)))   ۃl=eeeos;wUx͹sV^M>]ɉT$HP<Z{aޫ׹J6|Zt}|uޅS%%yl5tM|q0yWϏ[O|n:4v9|%_W,1k,bbbrȑ/_a ɓ'1J3layyyqqqiPPPnn.vhJK.URRݻϜ9s֭?xݻw:^.{ΒT;Eo_.4bE˜Io(<we|#>]
-sNFFƽ{ûv"?"Cڵy	M"  Ю\q{d{~lAgMMKKK]699F{J>o֬YK.uppXzZi/YT5̅JFUjka{TgɼkG<[߫WڔO{E}.}&?+V1cFNW^AAaӦM7n(,,D{  ?ӧOM#!fx;H[I&Lbeȫ2fŽ0)!©+@o*vۢaάG	3yXu.27ǱǺT/̪ruί}o9JGo7c,a~x?tO8H?skQ1V^嘙]@|bu"YY>i-Oّ )5Mz9)R
-s̊?QQQcƌ۷o.]Ԗ/_YYYF?,--}]׮]guC$j7M?mf,;:8uzn3_-H|#^ſh9V'JII_~!VZ\͛7h 'b_;AB\'yI5~J^fsQS9Zr,|*C?pTc>c:s<̧+ydw/;Žz}EչuL4W>G<*u8ZqL0w\ǛХq|U7qqZQ~ԫQk1fnL3GŘbց={'x]/Q3G
-ZqԓYU]8tٳCmڴ_-,,nݺUUUvĉSN2dr-4SЌE}w-\[м[tZh;d.EȽwU555iii!!!aaa;;sΡ ŋlOtց!i2AMS%z;%яt	s81zJ,Y׷ 8֢7ca9cuK2w[>uST2r{9*ɱEwY:?9|#{
-p|t+[nµbNPяL99dJ(:)i;vЁ<v}'ROBB%9֭ʿ@ZűCDޱcǶm۶nݚLlܸӧOhA?~ŋ/_|ݺu6||Z4M\er̽:gS~}[i*<*խ4PV˯@AsWlgOW?$|~Bo֭[W\9s̵kמ>}d  Ӹt&Ŵi,--HMP3903%0',,,2sc.=Y>AA_js395Nj`` ''קO***222N:uĉs\=ƽX}|u[p?ݯ:r\ߡq@5:~\ǡPA71cZ|ޥ.zɩiii^o  !qϞ=}><~zPӏ=sb3bnO>W.p pלY:].tiP/q].|e[~S\:)wS&y;(Xǉ{4Y;q|?u̚ppǷwW֬YѧO޽{mذٳ?~iA
-_~M~
-_|Y%4xmUK:/k}&{K    (--MKK;xĉ߭[ѣGر#%%}ŵzb.!1w_0[l?|ɗy    MAAA\\׭[wr       ~,l6;##RTTtԨQNNNgΜy}uu5       111'O     {^? 
-.--      V        pĎ!        lr;        ?d{        ~&d{kEDDG/U=y)))|,,,RRRǶs(k֬!#|~NI/X@XXZLbK$գ$&Ȇ:W!˓|||      ?:=LP/-XJOGDD0K`DO23s(Teǆ|||W*tkM-j:33JJJ
-5       r#)>ӝd|*Bn3bdu*OB^m\ϭsԟ )bhyfʈ,CD֭pY:{
-       }1%}Z
-GoEs}{ t*%/%P86JU^        ̫]h+&%%y/y*RgRBgfs2+Q&}ANt":E]        39IRg{$q:PYi¨Fd{:L
-Wf}{uuE0>K       =;p'p,&_&#q1Օq      wzP#|l7LG -33q      w9#4%{*q#:2.       4:CqxA?{ϧ.[w>},񪪪#B       e+PяG̙|f䅸խn]ݩ9uDb{}uTg        kJN秤	Zbtz*]2um&s@ff|nsC=tUcBbɊd:3UEv"       ~4%󙑜qK\a(ͭ8Jg&8(ϭ!"""L]q       |W;XZɺ,0dz^,Cw̱u2J/IJq-^_IiuQwݢ{2.        ?>Q}{p        `        -6       dff2mF        ?@ǤmĐ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
-endstream
-endobj
-9 0 obj
-77022
-endobj
-10 0 obj
-/DeviceRGB
-endobj
-11 0 obj
-<<
-/Filter [ /FlateDecode ]
-/Width 106
-/Height 48
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 12 0 R
->>
-stream
-x[WHg{LNI:0%/8&	k`0ě¾y$k[m0@	{.Nꓰ~ anX} [f+<\Al(ꁍl:z7^6t7crY)NU&{\Nx<dۅ%<[g%{Hh4NIՐW,LՐ{8CjVT*Ţx<t:wwwjgq3>t^i^}qrˀp'''VW|^t=hÀPaPTi0c(8Ya g{{.H sK\OHaϡn.! HfmiqHT!4 srV-k\v-UxA%tQ ȼi)61IB+tX}	{G
-|KC%-WgKU82&>}Bx}ZXB&H^Mޖ /	afXfv,0Ue'A]`llliiۯVx]ږ}Nsxl&s^90L7z?8ހNTz->M|۷wY=/E$➐$u|+?wxA3xGv:J]WXGl3u]>H 5en^04?$4kl`%EYF f?J' (+=-y4ҙuJ?r@ I],EB!e|ͫ#Ao.UktL&V@JYF
-(9KX jjG{m h%0PMм2Y͙ӟx?7a~^6VU%;/evQq:W>W	%;{Sok+.mN urAID^fH>RSR
-:#±cԔ'=[Pfy#r߻~\t>n<.--.eoJʱbi e==INiK/u2foj-Ap^ i) /?Խg͟1 i1%,<{s 4%q5,S+%>he\U	\:Z j (P&
-f|U@
-K{<Ti	Hg)Ϥ+>o	.M'E+6݊б*b
-@CT@ !WGNKT!-Wc6mJ@@o,W5HEY6"|;{l-n(I~"{X9XJǊ*>V:Ǜdm?kt^2*.RyUB?+Ku,ň\(Pd*{n+@62«V­lBcҝGu-N/,ҹ̾$"KNbOݵ>ݶ<|m/qu)"lE{\v9wXu=lY@nTr!UQ8s
-dinFloJ|yg*ӮuٵΆ ;~qs1kown^͟[&=Φ,''FJVVǶEk/]cj4%YD+CM-ke@9=xxo>j+{^fN|3veIҕ2-1籉瀩`㭒,Y覠S	OgK&x[ 1T_=aX62Қ~;ކbňH9ܣ?zc
-SB?/a>\+;5$K5CfJ7J\ZEa4@<H\ZW<<o 9ZT*˽}M%	I5Ocںdg=;hRo#1,Ƕʍ<v5ATC;y
-f&Y\\ɫwvBPT: m'=Hr-s:ϫU
-_<#YP^^-`eFbES8$1ID:#I6_>
-=`hh買mEket}wKj9[:Ɖ'fKكZZވK!Y[:K'T/:GT$ygQgUZ}Yo	>T&fh(7,LfI*U^Gyl@ɨ {ao㨣)_Ts*lo\ֶcߡkgɓ-WDbW(JY-O{W%RGBN .dٌԀ\bUN"v{G~dB&&&B!wt8F"d2\;u7^mB!!W0!jJ^k6Xۍld~f,`V/D򱿿XbrZ>Sd2i[p{zqnw_Tavdq 4 CLG0"R	$Fr##?Ȥ?`?z@'U6_):(ӦQ+KwB-0/j^nۜzqO_:nfk۫0:8{ s_Ws `0ʅ#gGokωQD1^n
-/ۄ'm
-T/wy*ܩqUI]P|*wj7gyC(4-_o%a,A`"
-'q4ABL($D%nJ&w^S=ց)A`W7(Xr]^mmeGG~%֘Hȹ\^+cّCW`/?26Nhroy_/qsS9׳r
-ls݃pWF
-k\u5z|P(tU<`iͶ[0+5\
-=.ˎv[bѦV_iìMMjupmmrro	>v|_@vK|.|ry
-h`xxR[t]oWaϗFQy.PDbhۯJ}AQx,t:ff>&x<C}ZVC^_
-endstream
-endobj
-12 0 obj
-3382
-endobj
-13 0 obj
-endobj
-14 0 obj
-3382
-endobj
-15 0 obj
-<<
->>
-endobj
-16 0 obj
-3382
-endobj
-17 0 obj
-<<
-/Title (fr-strict-frequency-reuse-scheme)
-/CreationDate (D:20140609020217)
-/ModDate (D:20140609020217)
-/Producer (ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org)
->>
-endobj
-xref
-0 18
-0000000000 65535 f 
-0000000010 00000 n 
-0000000059 00000 n 
-0000000118 00000 n 
-0000000310 00000 n 
-0000000398 00000 n 
-0000000416 00000 n 
-0000000454 00000 n 
-0000000475 00000 n 
-0000077680 00000 n 
-0000077701 00000 n 
-0000077728 00000 n 
-0000081251 00000 n 
-0000081272 00000 n 
-0000081288 00000 n 
-0000081309 00000 n 
-0000081331 00000 n 
-0000081352 00000 n 
-trailer
-<<
-/Size 18
-/Info 17 0 R
-/Root 1 0 R
->>
-startxref
-81552
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.png ns-3.22/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.png
--- ns-3.21/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/fr-strict-frequency-reuse-scheme.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,272 +0,0 @@
-PNG
-
-   IHDR       ي   	pHYs    nu>  
-OiCCPPhotoshop ICC profile  xڝSgTS=BKKoR RB&*!	J!QEEȠQ,
-!{kּ>H3Q5B.@
-$p d!s# ~<<+" x M0B\t8K @zB @F&S  `cb P- `' { [!  eD h; VE X0 fK9 - 0IWfH    0Q) { `##x  FW<+*  x<$9E[-qWW.(I+6aa@.y24  x6_-"bbϫp@  t~,/;m%h^uf@ Wp~<<EJB[aW}g_Wl~<$2]GLϒ	bG"IbX*QqD2"B)%d,>5 j>{-]cK'Xt  o(hw?G% fIq  ^D$.Tʳ?  D*A,`6B$BB
-dr`)B(Ͱ*`/@4Qhp.U=pa(	Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F; 2G1Q=C7Fdt1r=6Ыhڏ>C03l0.B8,	c˱"VcϱwE	6wB aAHXLXNH $4	7	Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
-b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGwǈg(gwLӋT071oUX**|
-J&*/TުUUT^S}FU3S	ԖUPSSg;goT?~YYLOCQ_ cx,!ku5&|v*=9C3J3WRf?qtN	(~))4L1e\kXHQG6EYAJ'\'GgSSݧ
-M=:.kDwn^Loy}/TmGX$<5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ?0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz %gA[z|!?:eAAA!h쐭!ΑiP~aa~'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl{/]py.,:@LN8A*%w%
-yg"/6шC\*NH*Mz쑼5y$3,幄'LLݛ:v m2=:1qB!Mggfvˬen/kY-
-BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
-+V<*mOW~&zMk^ʂkU
-}]OX/Yߵa>(xoʿܔĹdff-[nڴVE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-6U#pDy	:v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-    cHRM  z%        u0  `  :  o_F VIDATxw|SsGJ;^)K6RTp0UQQ[ݺ'ںE[CZ-+e6+ɽ?5~,}=>|ܛ{s$EQ      M      P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      
-q     @B     P      +=      &    PM6mΝ˗/ѣѣh pC=    kͱ;v			
-
-1bm n\    0))iEEE[nϧY     oٲERT*՚5k:(
--    ?tҒ%K<hjuƍw޽zj
-|     EEE+W\tFi׮$IݻeY     (JNNNOOիJСCǎwر|rB+[!   P/~w6ÇWBM?{;v4     *))Y~UjɓCCCxxx=h4=## A   RfyҥgΜ2dȸq<==$IԡCczzz[QC 	    JKK۾}`4i`P{!I#wb 44   tu޼y͛72dNSE(($zB;     @ڴi3m4VJ}<==Gڸqc q   Jj__*$ A%   r  q   OJ{     .G㘈  E   8f m      +=   @臕z+%    ^}    hpL&S͞H] 	=   @#MLLJL p7    h8z^X,Fh4_h4W ps=   @jX?fٜ\~
-GD {   Z*ّP n   h@΢ pg   Hy N   hfd2f.!{ N    |BHPT @@   4 f9,,99Wy򿥺    xG}2DEE	!L&SOwV ;#   D!DBBBBBB;Ы q   аG	O {   {UQC n   h@zbqLUWzdY G   4 B2e>A ps=   @9>>>(((66VzFc  q   Ѐg#1fHxxxٝ M    4(d2L&G.^o4+1v     d2pdBj 7Gg.   
-
-2eJbbb3W\ Ψ   f^/9v>9~0!**`0,\T    HBBsr.!#zI{ WX,&Iׇ[,İ0ǐe!   }H㗕(Bg.uFc\\\JJJRRbMp{   I$)))33|X)=, c    ^z9v\{P=   @ýLNNNMMMMM-{1@lO$pd2%''昘   hXf3)`t\#QEb\U?GEE&\=   @R~\HyaٙuIǓ\   1͎z}LLL5S'GCiRR;W   h;LH^_g9{ <   Ѐ$%%9OG,Ә ඈ{   %222!!!33ӑ8:sƆU0jpY,2o3   @9ud2L&!Ds?;Ip^Tx~ɱ   So0Fcu:s9F3"[]D]&   2LɎr'Xaq;))>>9P   aq;[7]U8:s1|2e"..?"   ҏDFFV.vgQpǛLA   4D89{#4!υ    HdddTTTxxx=\eF1!!O#   rjXRSSzh4꬇`08?@u    d.=#B$&&FFF&$$T]; I> Έ{   bDDDX,?ÍFb1L (99bT=,45ssR>q   Ѐ;U<f966699955599922MnYW)8  $99YSǖ`HJJrSfv' N    ,J\Ws0N3 9   az*p]JE 3   aq̿^oF n   h@"66Z,xb9EQ q   Ѐ8ILLp̼|.]    HTTTrrdJMM3B嘟
- wF   4 z>%%eʔ)fsIsz( wF   4,Q}Fq q   FXB2 P    Q#I5> Ψ   ?Ωz}uc. {   zd2EDD8'rHNNNHHp^>    sю`0;zC5    >3L>\qqqiii))))))۷oBSe wF   g2p9YI    ʏl4ff+ q   P9nVi 7G     P    _llTWRE+\Y 7G   A ih   3qqq5xV;IdYmm    Yxx\{ љ   @u1vO[# 7{    \6e6flv>n0"##/wm%55GɱUz>**!=    .(t-%>>©ͿEGG'&&
-!É{   $ZaX"""L&BGFFF 0L5+ɩ2eʿ q   Z`0(G2YOdddBB^w*<<<&&_*,{
-s   e3b1Lz><<b$&&9hYϿl6;6,!!h4   Ng.dX<x=!..2LSL_8IIIIII]t   BF2RSSMTTTzL&SDDb8۷`:0 n    ,깬,c̿8uX,z>%%%---33Qc2*@E   ݸqaŒm6i
-U?KLLt$$$83!!ǌ @   2T'>>>((("""111**겆AӢ2AZ    @u9zWddd#0_FёT UT {    TJU~l6W3s$&&o?"   P]j݃*F111bxxxe%<TQp"   -<<\[,j=eC &j   P]α{jZRHmfstttuw%''3$3D   A(U$>z>))1]T񉉉fBDEE9q},Kll,j=    jYdddDFF&$$>z>!!A!CBBbccSSSSSSPX-**ʹ)SL&bIMM
-
-l. c    .ggXeƴhG*)))%99999P    ESG7ٜ(qh4%&&1F9՗c8G)PeTSddcTiPNל   Tӊ+f͚O<el6#""hL4;pIzU8c    <C#   pyd"vGK    <WXIKї   @u\rPc݃    T,B__e<pupv   Pտ'bW$Z q   &t E     P    .ȯW2; Ո{    T3! wF   H= Έ{    T3K =    .Gg.I q   Cu 9    E uq   CO. ps=    .e> Έ{    T q   {"vs[#   P]ON 5    E uq   G3 3     q   bf. {    \zr#   P], {    T N    P]Ιh
- pg=    YC    3 9    Eg. {    TW\4 /    圙\ Έ{    T,˂\ {    TA 	    \. pg=    .$I wF   Q    ! 7G   ɹ O4   j( wF   E=T #   p      ^!   P]!{( 7G     P    .G]r#   P]t:   @uQ uq   #I 3     q   = Έ{    \6
-|     lT ;#   P] @@   ಑ ;#   P]>\$љ@ݢ(,j    .F P'N8p $$`0tz{    T#衴@RXXjժz+,,lĉCmܸq>     L6o޼I&k֬9rΝ;'OܹsgOO{    TJB(B. uN2d(K,ٰa_wq˷L   ?П@"IRPPCCCW\߯Zȑ#4iRnݼ[&   P]B]9reUtAEQA,	8/\Q*]**a.Og!R =:6N2W|ʷJ*>X~Ɣ^a~+/٥YYeڶ|[y,*⽔2ɹ~,U.+߅i(,G҇˿ʎ﫲svٲeeڹ-PTZBsZ?h,srH+[n}޽OII2d<ЦM$E    _iNh߾(<hJC70VYCWK'Ve6UJL7L*ʅGel6[AAA~~~IIF}Ѿ}   P]~~~z>++ãe/}W^2+BK!D]Q*(reKWTp2u *|z2Ao1K(8ۭrM?acIQyFu`%\ju*LO+*;2	BM+=+߰2s-t=LVْ$Y,GKZ22
-|-)˜OT+/STQ(Dwj]lY.]:wJ   $)88Xuرe˖9ˇ\"nwe#!WeQG&巰ZSǍ#(u
-KߵVL2E
-2e?;L|V}U979K0g=XWvGE4QTa.RaG<Zmذ-_z%,;YCʪZgIVء̡R&n00*-	Gʼ\򕽵҇AcX[+`瑩V2ﷲ~΃+:_RR}/
-!:vسgONWNt   PM.\x񢗗J-((())g/"(T6LhĤK0ev|
-
-QQHɕǖ^a鬡:np{*쉥˔_mMZ͍/|Wa */h*aibn*lmUSpYg
-^>>+{UL-XQlxEEE7n\vcEڵ!CF_oơ'     \QQQZZښ5k~7TPPзo߱cǎ=s>>>ҙ     g999ŋmVTT2tkW^>>>4     Po)r̙ŋoٲyÆ5jT߾}z}e:s    ,##cݺuǎڵk߾}5jTo&\q     E)..eã==      &      O{           z     ^!     W44   jl;w\|y=F@ "   P]'Nx~.]66 7Dg.    RXXoY֣Gnٲ%??f 7D   Z߿tҌb:tHQZ q   vҥ%K:tHhݻw^ pC=    AQQʕ+.]V۷o/Io{nYi" p+=    (ʡC{!IRHHHǎwر|rB+[!   P/~w6Æh4$hbׯ߱cn }    TIIWZV'OܹsgfFl6     2K.=s̐!Cƍ%PERuaر֭sP n   @Ҷon0&Md0ӮK$1bD~Ξ={bZ ܁&    P]Λ7yCt*0$1`*h߾W q   JifڴiZV	!=8~9rdhhhƍ=<<h. p=    *V}}}<(I#B9w       
-q   rFi    qz%+Q q   =ё82# q   L+ysf. {"   !Dlllbb"    ^%:::>>h4VBO. ps=   @jX?fٜ\~
-g.:s;#   
-kyʫl,gz N    +_	cf     =   @Cd6M&l40si    lNMMu>Rz`x!Ddd`(\GCu 9   1aaaɹKLLtĔ c    H||#뉊ھ}{JJJ&§ @@   4 B
-'ew<XYC @@   4,QSl    ab!Drrr    1Vy_
-pV ;#   H!Dllllll2Ԉ ͕ur= wF   4 qqqヂbcc!!!άh4V6E= P'    ^OIIq8l6QC nNC    #1L&ѥK
-ggweYГ q   ЀL&wNv  u   $666((hʔ)U {   '999::c @@   4 			ɹ>{  n   h@CLL"##W3qT0T3 9   !2QQQIIIsĪN. pg   4hz>**JLycP    h,Krrrjjjjjj[`0TDI{z ,,>**>   a1Δ!222229seE3PY,n4M&SbbbbbbJJ?P'    HqyF#η0qqqBԈؔ    AT3qrCK̇{   b:rDFF?W$^`"v   IIIIJJrL%v=(((""">>YSGʣ(JŭPOX,hN   @tSP>+V5kVvvSO=裏j4t *TZ~   4PXGa2fdrS)o)yh4ғ>!   :^o0F?vr\@`0q   2Le1FʲL"   GUGqbO p=   @Zz$IbX,SLq111QQQI]D   4D\@]듒*89$'',w@   4 QQQ5sP@8!P;&c:h2338_UO~51WEqdY޻wo`` ,  sHLLLMMX,z1t{!>>>**Ҟ:hp.]k꫏>JVDUE$#(Y8ec:Wv]\?>UBJ	b\f2kU?WC壘ZVԎ=Rqw* ײv1a>M6 L&Stttٸ"111222!!RiI2e"..{$--m޼yeWl~[>{੧o޼y}z,KD' aX7d29dŒRӝ=c& @gZs/Ny[_ZӅ~+I羻N3nܸoRz JYO\\\fffJJJ\\\BBSSS+|y#4hg::vL عs{:iݟg[h#5h^뮻;F  9N\\\LLL[!))1vOcf.2			?=uzjLsʊ(0Q]A?sL2gΜ)Sx{{2 `fQj򢢢RSSUN@=f08E ꕂqܹSͺoslYXupxgǮXg֭ VճWgbGiUd9-8q;	W/Kkx.e[:R_bL'ZȮn*"ߧˋIi뮻Ȁ Z  %>Iώꗘ~m un?bbbv>)(ԊDR$W4ꅤ.Hmy=(bm߳y6$5B9sP1VmW[5A?v+V<Szbj hPlMHH([X?| uqPWeff.\>?ߚoUgKVK;|?vm(XE)㟎Ae)sXiiiN߲7n;bEQ<<</7_:ujV(=Uoa/\UW,߬cYZ3T*FsK?|Vuw<~:e3f'O3 DTTTlllbbl3Xturicf ps=@c8/[앏?6)4*.h!eBŕ~S-WoӋݹz/s}w
-[qT=s~|:vBHbwǛ6jtq/P푇so^ؐ/g[=d%ڮ7>gm3F._<66O>Zv7 /JNN6LaaaQc2-GEE9窌; @QRR:dȐg}vl/aPliOi^cz_"5:m$Jv_9e }@?զ_.[),(V
-||:!CΜοer::߰m'U-gġ|f&͕mT.ƙ3g~gΫ¼- z}JJ31ͩ|Uϫ4 psT uŋ?>`漵6ewhYVz]iTg!
-{<{ζ|Τofgdʿw39x8{`<Z$ժ_{Ɔ~G=ҟΉ@I*vQj6|fUϳj:_D_|UV=#aaa^ p+Q|h4FFFV6j#)a n{ _=cOz*?Iإ̷姵n?͛8Y6:o!;ݵ炟Gf5/^VV>ؙѥK۴c?zlƝ;uleXޖbX84kVyaި;Wn!Jկ>wOzL h4111,GC n\;*))ow(W|@q!g[Mo'kͺv.κoyz{{hvxIc/]!cǖ/~]]طٞ=*|,Kh3g, QI׍.?}dZ47P}E񜢈.$wޙ>}Mv;F @; n|@ n%##'ӧLe_%]B\t`勏T۟޵K+,_j'xnB-.]ڻDJ-*I:}|Ai'-MxYH6]ص:]yإ|.3[wGbFmʔ)n\5C 3:snA6ŝ>}W{KVwM-􃛖zwh7}~+,ĿK_
-mvҔH	ʽ<?q3
-]*((Si)R%kրß?ygWX=:۠z|ʕ+{W=a< ͙L2C''''$$DEE]ڨ ;//F$M{vvw}mۦ8fy\Z%KC(VЩe%
-mBbO<k׮y9(,:R{IBl6$}@֗DLzMQN^a.
-z<h
-5pΜ9oVvv6 uWtt#1ikPC] ?ߡ(ݻ/`{i_K%᧳oX&GzQ:Hح$ ;@$OS9ݻ9URD<WqqI^3|xoIC:pDH#J
-'7W}Te^
-sK!cW_}5yիWu. E&d2	!RRRRRRo߮ɗ{#$?
- w4p^zQQQCny*v1[յB%@9,?y'w:˒r3[w	wqYG8X{6ǎMK{xg?@;uW?>!5r
-
-)wK|r|"SsE"
-|hGwy+/^nq˭ *QoFΝ%-o}i}xke㟟
->^0GIs\;]i9;m۞vuj!,ˊb{zyJJxC;/O}g+ޝ/ċƌR]ԺhfJg.˷;]켸o'Oj*Yǐ4X\NFQa6k qr,9rhEϲ %@[tv;pv4ՉVտG6gl6BF})#gSKU>Zܤa3gm<u 򂃲?eRhM[V;e>:{233\H	u  \f-[h4FEEqZjsVYzwt]#*:VFl_^j@XA/+H⒥?e7irsǒ[3mk&$pǒ{/^޴+/ɵjC?_7púuhd hdY^ qٯh\4zb mw?OK}>z_@:mN]l{f^,Km<="7yy+V*)B ZB[#sU-(0ӏ~k1}{e>%v(׃כּf+R| qJH|||k^ qPEٽ{70dfpgg^x C?g֯?C|s˧w@/EvNGgYr俛ZjzKJŵ?Du+~жe:1@>}+̶zvC/?O0!%%vvC# ۢP;~{I&<Ih"(rMp%ݺ5?L
-(7-ٲV8#gp??%KɍTBIe}r㟹vTlyXVl\st'>ĉO޶m[ ܍h-= {+u7xcٲeNzkV,׼F)<u*~7ovNan1m9jL4 z3ljhrm7Ȅg;vM #<<Qqmv]3'OiФpVZOɵ-[!ǒaKAY>q8{.oµ]Zݶmןf}Is~̔KW4zM*z[/ꫧNrГ =e]xoݦMc?ϒم˵B>Z~im}CQ"DIjSVZ(װ!]32
-_W=ge_F>a}.cb#%%G4 @}z 2.n;c4d?7YR3WV0{W^\rc;)_5&_ȎytlmeYtS⢜\f-2b=?ynꥭjh)Y>]{w됈{2 WDBId ྈ{fZ׮];|Sv2]ds7Zܓvl[﹣ٴ[l˗j}\,]qTSYM(Ztw?6%@9w+,<ׯ4iʕ+
-
-hg A 7F=P܅_)K	!B>Z*6o:?:QPJ*vNjݾGdevN>K[jO3vCηk6]XBgϙ3'222::}3  u=@dY>tдiF
-tϐYK"@#+=7=۴q,T^BX,K#oﯾf`U);ҏg2.|%թ+1f+\aճMHݳgmݶxBl ?H|YbbbDDDlll ߨGNNիz-I,jy;@u9~=|R.(MtWn={7׋2wn7sjC W֗JgxĢ.OG_\~9svJ;@](
-jlNNN6f`xx`ܵY,Ԫccz=@K/Z())qVpI-RoGw<]۷HX7@v#|U.dzxH3Ҽ 5"(3J?쾧c&?fg+YaUrϟ=a&B-%>>>>>UnhR$.ЕLUV=1ߪrDZVu?5lĮ^B0EU9ײe>6Ƕn=rŜ@V{o_33FLqU[Ɋe~zeΜ9ׯ={vǎjb; @fX"""L&h4!dJMMZa6Ycc&l6GDDQ	=h\x{{ɠ"|v)lf۶mw3;\%Bd(7٨(Xmkvmǎgi݈&r=ץ<ڤ&NnJ_-ц^L|񳣣̙3f̘@ ":s
-gP:I	H111SLINNX,QQQ8!:~xBB{7އeh2/ҩw5U[*]hղS咽ҦٿYSK>*	z~M0"J|lѶ??7-={)SyP `0(gv xG&[e4؊INNB=13YW^=q)S;߲;Nx.Ё_ݛMu':m.,V+Pb{hܣ{U!!!;w[U%׍$*z)ȶz>}z̙yqq1 b1Lz><<b$&&9r`0UY&iʔ)߂]u=h233/^p&MD[PiiE_CBzlPVB"]P6ff݉^.jI7=]P(4Ukm6븇rKjEd[̏i?6o23 9gQ?v2#551xJJ
-蔚h?dp<`0X,}vm@BuÇϛ7oĈ暱jiuA@m܆m;Ż;]V.ߵs`vXKC:{6%MtId`gZ.|Z+3Sk1(=rȽ޻hѢ o$)SÍF#=e8;uX,z>%%%---331dpn\yfKTO%%%k׮}7322f?a߲"5l'NXgmAju><XE@m?c[ҟ>u&(P=x`'s;~_3k}V*w茗W}\7o4iRv4,[#*H:/ҏq<^ ]f[U+*ڶ|ހ2-@Ʃ]WqXf!T*եK۶m۶m[>\S,*SILLt$$$;LHHHMM5͉.9>>l6!	 5V?U*3<c50{h멍~Jh涛;tL%BjŋmO]>yY͛xQÉ{åkL}ƒKnzdVmP[M3/X?lԨw@2KU5;*[AJS֊RUqX#IٳgVFybccHWZ1OrrlW&g2%6QQQ	k}tgݐ^1 {P/A7oޣGN'TJ%3SW-]
-hZwD$	Fs_a}ZKٴQ3;մӿ)ݻϟ??W*O>ܹs3f=P	K
-S󼤨CK~^dI~~̙3۷oO W#\xg(+e4O8~jbvzu{PtΝ;-_|ƍBnJ*D>|xכ{ʢkWffqFCK?8@~nO/._a}|3ϾөS>}%W-[pOK}1J@[}I;v9s&OܲeKx"տ;{#%###E(F@U0lG쒘xumʔ))&&Q{P&MV^gϞ~uUdEo۾Fb{\g	E'
-}|<N$Ϸ͸ׅEW=sAG[]}ɷ~~5j[VJV9^b]0=v,idT<,)/wz׿gϞ:uj6mۯfW_d0`4?$''_VOJxj7VvEFFR9=4|˗oݺuxŒ:|o煟v.Ư-mʒSܣi|us;u8r49mujl*'?{ͶnOk=ukU%**jЬ	PRK{1ܴhߤIFݾ}{5>(?;j&<<\[,X`0\5DF1!!9 ~ׯ^_ljW-Gq1|ZTR)(=Gku!B}U6l:ߦu]&@V>ݸ++PeYꔧ}szp'F>޿`vvv	z衃:wP[Os6f9:::;
-\_h40dP~ӧϨQ5kn:O9E/T`s/.k˥¼"O!_,3B5H[6Œ8r'/3漵.[jV?<?>EϷ݋}ڡmD<__[o{ٵkN#""h!DTT#ILLt\G.I	#d=@E1徢weGሮiL%+BkץK[84OOTԂS3}|==O煕<ѴwpSh؅{쁁tp_#lok契Onϟ>} ,QZfuѦ˭sNx#..gϞP+WYBIY'%%9Ǧ)->>3z}BBBDDKWrr# r$,fd2%&&::***>>ޱb1&)555111))ʧ2LR
-wUJ.iK$0`͚5?লЦ1CE_NȦ\VVq%ɕQk,xBo/1SKLR%Ͼ9?niySI_\]k֭x!qpY=ua}36m:gΜq1pWYЧ
-i4w!0iiiю.ZΩ+(qCɵ=+*{	N A}0jԨm۶TNŧu!kS~޳_^}`5:_]KǃzGNlaUKKOdoLs󁓦y=>QUyhU澗cn=|#nw0C*"vO[DelɍOfΜ9n8VK5tn8fd/Qe6M&Sh4)qC9j4KSƸ?Rb.~ A}۳gݻ˗/abʳj߾e7z{eWB"3#w~'sKmy	EQ	!Lkևr.Zx۴|^bȕt
-Z{=(ʌ3sݨ̿~ر֭[+?!_}U5Z~cVt:Ɨz{{geeyyyUқQ)켼VZyk-7eӏ{]E=Pf믿ߟ<PP?ߖ^zW1}{6#A}V[jիWݻw_t&}
-mܯ}XXƍ-\vGtJLKc =ww\~?bРA$K4ŅE/HIIiѢ15/{*)ޫ޽7qlD{Y!$U}	-IHUv#I2THYT\IrR׋6t1"'ؾfCAA#=.{3,&IBQE8_b\tϹ-h][G]ky,x|0{)S{bZ. pk=缼s%KlÑ_+.\ ߦxӼ;vVʗD5f7_?ky{xxJ.r7{,k͇8(֓yblI궲bUE]裏:utpZdpGV^MȁA\Y,4ۅզh5sYEŊV+ڴE?}d^/Mź.f?Vd<̷YgOmoTt?Ϝ9;h޼y#EQEQ= @i޼AwUpFq	UW^޵'W%$U˖',UaAAqv6C#y5#_ɯi#I_WrܹsQQQ^Yή\sopVCI|mhztUݻ}lt^U*ds.?QTz9k߰b^}[ga[oɍeF߾;>ݑXUP_Pj41~ܼy7^"IY+at 
-@"	ѣGxx$I~K乨8Ϧ<a]]\EXfC5ouQAA4Q+.	ݴѣK+-k9Ѩc{ƍm;I==۷kSmߙ?4]MQn3]s/BE"$IH7]qnn2nl~p_$87<;Lμ2?gj?QԲ&T>~:x}#GpZ *#˲* P[{ ʲo߾]=.XGQ:ЫWlۑOgTu0zx4|~j#>=¬߳Ov歕Z׮];pG|H?K&4Pj{oժWK"˅wk>u2Hn\۠ S,EQ\פVY[;g*rTSo<o*8(k-{Cf꟞YBל]F>5禧>|ܹ{ 'Iٳg|IV+L-ZLQ451bĎ;~]voS\<ݻwgG6w&+}qvtSU-]\=ɇ4i55oU:p}=fϚB:nGoJ^1!Zzޛ疳7LR	!PIJd'oq@7v0C=mLx?;5}@m~7]?g޽oǵXEjiTs94}ƌ}􉊊
-CP͏ht ei\P߿Yf8Zr>F]zcF[)򧩷?>`ד؛^}}|&$`x=gvd%IVe-|x7tklV5Z	!Vv403>/O#}5~~ZZȹyvviԈgo3e؈7س7íޠgI>kRfwj_}s^Ӭunٳgoܸje0  Pg֭[NJJJVXX\umA??O,,bf_үS,qW姵6~c<8Sֹfͦ7v><2{iޓ:5oX'>|A=<;-ZǨ-r웷f8UԱc+.֮s*t·9qڤsh+ӎvY}lKw÷QM)u/$Zcx2i~V-g̘q뭷X"//#sb wF܃BviZJOO/8u>F:wm6Eh|'{0iC1W0z&oG^xM#StܹQkS4oJ:5'_i߁s{toRR"|WVzjR=%J噼d?YR":u>x"IJ-JpbIf{r7\7Vcqnyc8.겏Ma~a=\ddʕ+8`9S
-Nܹs=?׏tͳyn$ 6lث5J7|pۤI^~Kz+rǏ_W::pUΡU*qY$7x8++Eso!$)Z}w`.	!5nV):ҬMj+##⥢ ]&v˹nFFoU)nU*{Ȟc=cƌo3339`I$ܲ"AVCCCо}ݻwgYt{n<Ex)ByOVZoYGk>[l<6x\֭ۮ$*eEj"PqB^>LUW%$yN[ʹtEfJ%hyę[F%%%R`߳gFVYˈGFo\q[;**k>vO[g޴`믿>;<ةF' #AګWC~p]Oc>ȓǿ.ޱa#Z69J:p~pF3̟?DKrIxj;,5ïGYrw,ft _Felv1./5;ͷ3yk4SkdYvOngeK,*KsKWyx ^ZHm^Z1;L&L_R郆љ14&qU0;6m0`6m2xw!6UAeE@nzڳgρC}{$QR_IMi'NZg8)ˊJ%iƍ}7y:eoÏ.tW3n%8{.;lgf?{{x\s+W8y2+P'̬[o255u̘1w<u\э=Ԋ|~ON?rHv>o%6j&}^+  `D>gB!4.Պ"$!D^^m꼏ܳgOAEV%V9 _UӪjnfPB;'.z/ݢ;M\2_V˭y5p}_xӧO2SNh 7G܃'88G^v֕ϙ*{^s}ڛ?OYM^;pKyB]w	̷dcC\ss>O!M7ڥ<s6{Çvf֣(ʚuG?lu=-ʓc{9oS|'^xè9YWP㭕OoL0ƹתZLѮzkݢE$):8(KI+
-9|$RIb)BѦM=Z+c9BMv|x\Av-}}g!5Bdgݯ%Qڡ乧S'jYˡR<{np5Mŋz뭷v[HH$+Ɲ Myصkݫd,-U-w{k̀#J=~ݹ딷q]=8*ШT.˲RXheC-#7=*ԑl7nBұ?(=/M'||tZMo >o詧nѢ,7_P%	UΊ~߃>sZ'צ\ǎ{y1{jY//&h~CKŭ[yk|h_hFgd~K9(t2RK"==뻫:]~EKMx{X5zٹ_}cac4&PgcE(qK#ٚEEFFvm;wD}EO.qFݻCׯ_f͘7($>Љ=_~2'[:>K{^τʦ*|NQuΓ'Ϝ.)i@vm_B~NMݹwϖ^=zdhub|ި7Om%nСqfW>7Ώ׭[w7LylaݿU8^Ԧ<9㯿ڵ\3W:}^K]*!8eUL1$GI?;bFlesDfkgs윑\;6i?M3muە/vдYS]v|tfE~Y/'47o'_ҖTnTۇ$y܋ƝMcǎ5kր
- Έ{-Z92==ѣC-*Kzv?̘>99E~fM_|Y3UR~şK4XzƮݧjյ㺽!`ǒvZN1s`w*ҳG˾}ZWQ͜>;ժmۏ/__2jXpڍ[>zҥ_~{5N՛/˛4ius"$u4?/_F뙍e	a|uY:ulyț蚁RteYR)6[aQQAByRp#~F>Ňy"fN<Yw_CNp(]Ih53GOСC`[F<=w'1cȑ#g̘ѿQ ps|ׄ׷wޝ:u3L^R5"c9v}Ŋ>u>jKv6n㪟{>.yǜ{j_,IwwO.r %{w\׿_ׄh4*!s?[qci}Kj&oؔv߳_X[//m=>KOg?nCa4ѪE㫑̟Xk__yUh(TŴb^i\BtݺNt:Mawl߬P#GtOQ?*4rxG7{p{5Π?y@&߿cl`k:|:k~{jjj@E]DtHCq(OO֭[Wm۶Ͳs%vɯe=z9rdϾ|En?k׎6^|ŋyỻ_oֲ}TSe?'OY< ޹ev[|6՗wʴo~BѱC.sOzW޻9r3_qEol;~޽{?XϨrk:pi,k޴G70v~;j뻕7Bt꠹>[pѮ//xgeuYZ	YHm-=<gl.8];׶ʺFImew/WK]z!'N駟9\Qw=; ̅oРA;wܺu%-;']''R˅[.5k?bXǦM|V!G;?r,+Bǈ{Bzv̑gCF:*ql6yɏÇutU}G^ܺ-]1_˪S{g>bX|#ﻒu%G|gokZdt2I/|1c,N}@+Q7㮑K>}&qcZ5嗓ckCq͔v]Ȉ6BMSo֬j_;0;zx{9:Mc],kӦM:HTnZgo9?'̚5kt4 ԁ Nkٲe޽۷cǎ޽qwKެ7۷oAtRR-[Ӆ9E՟l믴K)9ݢy{{yiKJJĠEtxЀBBcaC;vjpmZzԈN%=NkQا/;w"5KE/X|y-zn-/xcǎI\^(O푝S;zzmvEQ=YO.>y⣄FtmӺB;z$!ϭ={>ޮJ*=\1捛jSIr|zidUm>f}n}?[oM>=22חu=!3U2	Аǎׯ_~nS@kmwR'661.h5@/!.oޒ>U;}&k㊢cڲ{ϩ?7s+_w À˻s˱b[-{hY.L'&Fs)zÃg|k\㫵eInαcpC*d="/{-[ܴ~AtAz=lNvTk4FfZ3xfaa3//9mT~Y3Ҵ5Z?1x]{|.'0]UT岟ɵsGG*zwO~7su-+P8*GǎFcppӧGH."+·m!!!۶m۹'.;bXG]q7Fʞ
-K_Jx,=%vl!v<8ɔU]:~"U
-J3q|l/	!FتeuL3_r3vmէWV)O/ٵsfj^ -<[͛v/m3[o5j۟/["Q-jL{//EߑhvQwܾ]M.ݚJxؐԪ|cO?&lZiSkZUŵa}h=w̛t׿;,sNܩ 3ѣK.k׮?t\,ʵ}#+P=>ls^^Zbjxc윢/nٷLk)ڱC-<=$>_2sYOڥ٘.ٚ~<痥>dh\Td=w>syy>5iXzƢk4ѝ[ ;?g}y1jf:~<CzlU*,
-lt>yWЁ˧W/JIIiڴܹs{Itɨ̒\ӯs;UY\i^EIKvͯo;Oe.,Ro7B]:'}}gG嚱޵M6ޝ~7|3ZjVp		@M*h|||tb4>|zgFM
-lݧSN&ӯG{Io~_L'<wL9$)n;k5n\yW_iؐ8|腽:|1m=䚐kus^/?9lHΡMo[s+0ǘ.m9`SQ5	=:vh2&cuvA;^ݻwml>5Nt֌+_{رCNwgWIVfB//XE?B:pNYnw
-m?p@׼<;/#u+.*#mSg~o.jl6,S˟W=)yUrO~ԩSLXp5h&-U9HͶk׮wyg޽Cx+9/BJaoA3;S9EQW؊ߞOiۋl5ߺ$޲Z'O4wMУJׯ|nݺnagS؛W_iӧ/9cz[p]s}9o*БC^Tq(~ZZŦ{>|֬Y]vne]w͏ptP}-ۿ|iKgGwt?ZݢE^襱JR}=pBh`kW1YOro]3ر{I[q֣U	O/x{{ϝ;7bɮG33^شi=z-kǭ];uЧ<yrΣ-,8`k,mMoo[wT9.G%KtkѧO6l`Zp?Cq $I
-޽Z6LZ9OG0h{=Ɓ}mmxdni9~x1k֬:ttE3qk?/JU(n9a!֭i'N^d/d}@֜{W~<Iq%ڗG<5u9s]}|nY+.E!wϞ=e6S"ض_>}=jڕ]Uf}xj/]?,wO>05##;BQvTOLygY%QY
-H$_}eJQR3]6?߬yڷ$+'\2`5|>i~碢"v_ TàRu޽k׮fyŊZ9E]ыf$|ЛGsox}o}E"[J(y?xdlw5jG=x5E=VO|~׮]{{e7]v0˸~t݈]EPvvLS3ZMn~5i`I-]6%9 [-{oVHHC=4qj3 ԍ;\ pԩSnݚ6m;Tر,HvyBJJʝ3f?9ϫc姳^ܹ?{\w@_O7nxmV1׿jSrs}i_]x~>ڌY涭<t7˒F]ҵ/mUr_b)AwOrQC}ٛn)))"\e:s@M ^6lXhhhFFƮ]rNk"U[tm,(eo>b;![UiT"Pp3*((뮻frgOZ$!Kї_~9y?v4	AG!PXh/.Z}PMnh^|pTEE\w^)&w@u/ιgʏS{n}.gԲ[Ccn
-'N'\xngm\;UE!i 	 'OOϖ-[mٲS<Pb"J߶o-6o޼oO@g5kIjxkempϮ]ڷo?ޙ6{D}oO^cjk:>,b~BvqO%ݺ6)(nrO%Am|~}w_ߴ˽OSr#ZELrk֎wxw߽Əߺukfmɲ,(O  Y)e	M h4rssf֞ues*p3<<<z{A'-!xmަ15ǩ359v5ZOްk׮kZEYd,~UVnxsAu;ԭe#l6kYY۵ܺ`Zy5X{u%hb	?aw+r6Gx9яߝ4q7x#--] * *ޭZ=ztffݻwOVwmUMj5eիW?86|hg!?_T,+8)sGKC:|;WW>??~zVv**\BGÖoWα
-wݽ{OeYkkTWZ-;F,+;pdU.kK	{>|:,$nfSڕWٱcvQ#}zۺPf浭ZpIP$QܧXΐtoan: ZO]eO?޷*^ͪ~i	&M
-e/H| Kzm۶{n۶mDvUck&,ѣGsrrRSצ0af9Nuҍ
-3ʶ:_y8Y:lJo@˼ZKT@U'*.*ojeQ]T!^[Y`ZAOl=gg8pm۶w3Ɗ]Q*V?o!okz5z[0/]kiK=gkZm뢷_5>7ͷ7Zrlu#xOwBIӂeqqqQQQwygt  u_ΝaÆ{?L]C2;_C^ϕh_S*V(x*+{^yRɋ:P,N*.ۻR~~СC>4ųJ\3ͲwV'''/ֹDr_.Omt6^BLKN+RJ`sskfo8waȧ_\ΐ'r裨em'u7uśo~hC-R\*ԧO;wn޼yz{PVHXir!h6$|lg:n̙f,W{ѣwqG]s[2W9N7lHH`JQD 1ί[w8++ҥ"I\Y'3\bܺwٳӵ픦H'of<п3gFV^@-Xz >>pk=@<<<5kcǎ#G:tȻ565gfVֿhݺu}[_DUh/J{=<<~	%:pb%'DQu{zBys[*o/mfNUOsejϼaI?[n=&*Ejc6쀝K|=zx'^@=T3
- ާk YQZje4;uꔖf2BV)P[W͝raÆ=coh,{foc۷߲$\u@arb,˖-[Olޒvyvuݢglۦɖ22i'kAKc@XIHr-?+*Ety13g\lYff& 5c۝K -{i%ӳ]vpBzz}˳{_ߦMl6=3pf%zT*gk/_;7_E9ŧOgh4[o0lHb[p#]!4/.:u.b^YS&x?Lz}Y۶m{ ))dDPAw9g}qQQQ#Gd/r/T W!\ҳp֭w޺u#GlݺU#83mjm/?n-[|[*f*I۸-y%%%/h4&BCT"?ߞ+냚>|xhsn5`w7ǿmxT[Vյ*J[w6{ 1jqqq7tG}t9ve*pu <T;v˖-;j ܸp~:+${C|.]՛oWk4notAeڲJ:wn{ɜ\
-|euuc{;Ö&ȯ&ʦmn	/q1^{I&;Ne  @=	J?M{}#GSQyظƿCxVXpAek{/.0s|QUG{۵!M5e{Ffna8ץ|܈i5C?Oݳֻ͏e_YSs:ѳ4/-8q̙3cr&P ~?K UPݺuڵCliZOE"!TXBqEJ?TRʹΕYw$Uri^f
-W^]d˹X(pS˷O՛QV]n#8rT,2l
-Ѩ<}h{Ix{{۽.:?ݻwlޘϨV1Wm-..Ӷka#7}̗4ZxeǙ\Hߧч|g%I~F}d[ٴ{x72{W/~oɓ'wQB @&  O>.ܿ={T'ZWr\sE\ul?
--TՌ-\)2Tʼqjֈ#梣󋋋!!!ݺ]vrƍ}}uB{~`->ln<kv:.:#q{QIE];o&9kE}OL6m_?݌^\v?|wK.# 74P]?E)2u@FS:S'yJVx_>(}xD
-W|б@+\CK:.mL$ʼ;QTt92}9pMoUfO9.2;U>)M-KZ޺u;%Iڷo_=Jp{a?3?LPgz$!D^M-?t_;wt^^ }P&gsls͵ͦ
-رcN$W}ܡCnݺ欬b*)c>/,_\=쳷7m{eqYTsy+H5xQ|dg_^~ti9cM<_[nƍ͛7h*X.P=Zt+Ŀ8;CSX$[Z4V	!B;hoqjݹFkԧ}&HMگy:tI&Mz좬GR$ɪ:qD~~~pphl۶-Y*S{W& 8zʕ+?Z}]wݶ̙~W,\9U~kW5[C6,!9{ٙ3o677wڶjY]C5+x|}>ԩ/?Ϫ[w%B4+sCA:Bi68s朇G Ͻ{ߟnil=.9rĉ~ymv#_uҥe˖4>:`De\bUKOOnO?[n?s4-7"˽/]zy֬nIVoXx.]r>r <O?z׹yu낊C&@.*7V[:ޣO6l6[ѯZ}U&rh1STMOO۷U;HIgΜ9qz}fz=W"̙3_|矏7n3<ѨQɓfqn.ν1eʴi<<<֭[ݻ[39ݺu[rM]>uFI*7/ҥ3gN-iо⯴K'ND{Fegh]L&??v):WU*B'NX,о}6jԈ%8B >;pk \NNO?PPP0vϢ_(=K79unh4|ͺudY{jU߬˒S=7/|ETyB:p-8wް1ZbˊĖ/PTn
-#Юi̗xyq.dYÏ
-CCCd+?tJ8sj
-
-
-lܸL숆 pg=h/_xC>nj}t-r񧮽VV;`=\0P4bӼ^JMM=!8>Q#}z?_o]VVsxyl79>M`ӎn]9ݽ{w,{Q37nxbxxx˖-KT# shVZ_ٳgĈDEpAJOeP8~1cze!Ĕ\QNdZo|'e!%Rc<1eK]xy̹Zfj'\vp7Ʒ߯vSZa_׻3}tPEɪKn׮]ӦM۶mpQ uѰN㏤W_s8~A|ģ}j4ov۶mYYY3ld5)Lsۭ<qzJ*bG'MQ(-|uBwgѭKs.\̿{bQVZ=vҟ˻9Tʞ;v,''cǎ^^^Z-ʊF m1T3)5??3gμJJJ>zA>-iu~gv2cpȑwK:_Y{4|Ν4%?gʲ7{=斤?8ZB[-){t8+_g;<?4#3k-9rBO>+MRy-[6iÃJMIr\@oU܆kw܀8CzoΜ9B>f̘>'OJBfYpa~˖s={G~o_RZR\r-.Z6k֬;z'O\lݺZVė#woVgZrͽ7xO,͊Ç===}z.ɥRT@eX233;uԴiSoo2\] Cv{zz+:TRR2q}NN֭[xG}4'''g;9)eQccchѢ_S.]ru=}͛(ʃs>5wko)IbæK{F	o#{꽋DI"hDwOԐ&M/(2JelZZi驨]8{C<m۶?NQ|o(,,\j_|_~>w#A}Gyd֬YΝ{<&&[;:+kN7oQF>}/+rU{z?y7J^9љ]waBkZBxxH*~Rnqrk»G6{2_'j8`zs`:333==Yf7b Ot7h͛7id͚5ݻ ՌpK.]x#<2GwwaQ]im;7i"X{Wk#)L7u5mwIFԨQ
-P,Huƴ[?&a	 2#{w9Ν9}{\$))#FGaqq͏wG[}ytn-sݾS:OG%jӪA:^4f}m'x<V{s5}+.IRp|aVXa481<##	x]UTWM	ZM֙E"Ay)mHHłݝJ)ooզjkdzw#x=qV,''XTxyy,Й x#F8nӦM^jUNNNRRҤIִVqgϞݰaÞ={T*{\.@}zÇj7@8nsmy4gxwrhrjLջhw3tTC^8^]]mZB?G_	7f^YYY6lizqT ɐ]@;gxK諔o~7lDn`0}p~|'Aߟ$S~|)1"==T*,t1,nGDD8=4蹆+JXtL*v  a*jɑwްaCzzիWsssgΜs%9K\|y7n$IrܹOH\A|-[fϞ=!r#õܠG:xb_o-ʎGv^:ظc~vv[i{Tmf^qT[sƍo}**~6j3ϐ$uV65y;K2^	W_]h%A">wǡ&54۴>WF,Kش)S'rpϝfgϞmjjݻ7X
-adڵkb_~:!Ʉbj^ͮ=	osiI[M ewϩ&M7uZݵjqlNDB%vpðlǿM%nylmZxӛնepo>r`:6wk}VmV˲,-o塶o}&k[u%+1l_koz-V<-Ν;['-NRpED9a؟:xͮkj~S;vp{ө;miACm"l:  `ʔ)ܹs~mFFƈ#^z{@wڵ/_\"<}?׭+((6m̐K*!w%|IdX?RRRVZq'IIA,;­[ڵh4>I_uFćb<_K7oаz|?o wðE~_}dvDbŦkԣ@ ڭKJJA@@ s!XeE\D"=HBjm?`B1n2cDy-5?y*:װqkՁܠSXe<jd@lw޼)-_x6^۹w4}!=cͽв#:hWk#-{չԲئm6?rh>mPG$o'RK/uPk7Nr*e(RsUgpB-mZmcg-ijZF:(y26xԼ3g䔗 \CToٲeuuuӧOgUu5*-uq璟۶,_>nܸ/>}]YPt;b+Wty&{LwҲy!Y%gD|~O-?pÏk~{6π3FYF2R)X:vw^0]{fstt4dc)Y["\]Q__ߧO wwwyЁ\MMvGyXEc	G_Z_4xS[=yӮ͎`k5ztV6>j7CPq[~۰@ch5o=63-$\۞j~%qlљ7 [	k|z'^jK
-4kVuD[@NfwD+Zu\WkΖsBhC2
-Q?Zjmj_TNmr3ǋfjjmM20dw|p ƲN[vڵkfɓժTR#fϞ+6l[	B%Aafz1\k֭V^u~f2͞-֭[w1 "u|8}%+|Ⱥjŋ sGhȅo1,^W<lrL.+QSS}||$	z@'Y,vzAbN\ːD۠ORH(	0av?ۖlqj=.A D#^oaô*ct:]uuumm`@xLpa;w[tBJK]уPEPW[">>o^\	֙ݻl߽jTi)bYgr1y2A7n<|l~GT%	1VC	j	uȑ|jp$jQ!륇EӍpڲ+,,իW\wAgDEE]pA(8.HӻnpnzC-Ki5xί*#8;^M(]?oDPqllY:[嘹mEmۗmI;y
-MEi7Z%tpju:z߭nߓYnl7gm<m+\/Sotokp5{[X,EEE8nРA#F3fL||`ESTVV߿ٲe׮]>}sSbfCSYYY/<7-6!z14;;{ĈjD;,񊀀[fMUUUDDĜL`5"-{	mCB1|E###'&hb3YYY7nt  b߿={4MSSӀ&N8~(X|_=@MMMvvUj:T\>u1 3gN Tn;rH.zͯ333_2i55-[^#Bʕ+yy"''11-_(nٲG?'O  :˗m6[dd$@sb=R"""!  ]L۷oڵ'OX,aaa#G2eJ߾}b]Jݖdڿ{ｷq-XO`m-fw鬐ƀo/|/%: p˼<t#GM|!;;ةSʉsv!\XXIIIAAAEE?
-RpL(d\dJ/8v؎FGyN  !]v!#53/^JׯL  pw~r\QQw}wqoo3f̛7o̙|>np覌Fczz~O?yxx+<XYY]:em퇫W7663.
-i@@.&LH,.5pr9n8{7$|rAA7솄UوTӧw>/ aY?
-ϟ?k|d5ő	?ӧÇ(N	u  ܕ$IDDĬYfΜs&4p^8Z)))K.
-?"\y$VOϯ?ڰA>1w
-ǠLRbnQFÇ!+RxxxYYY^^^nn̦aNf
-и 2@:APA@ mLkO6k8m	v+;f0BBBF+   ܭBaHHZJnb;v?_B/Z]_O<J}{Ŋg>zw3%fY;Pe0p^^[~xc5:t[X؈7)IRQԔ抬^_o_"̙3{*F,p 	_疯HG?8)ɤ8cMxܹsBpĈ>>>  .aIE;w݂jr'|W_8>o޼` Fb%Agݺ/>裟<|@\#߱ʲVǋ)zJŭ_d2aʧ۶_H+CħQ,~'O<vXSPЈdrȒ~2hРb
-Nq</;Rs\N< 2?;w.""""1P!g^B5MQQQ@@Q"""N3   ppL&SNNg}ϙ3q76&bY+op	&|Hu_-%,V/Oފ+_+Y|;dp/sXqwEGmgO>}ȑ:jD~|-(T_U[[\\leBHY]ɺEʣ=cϝ>|,1P  B`pdj'­$]vY]]V   	{Cٳg-[駟VUU͙3k4Wfpbq[6'$$|da&0alO\^:adr$bv;f0Ƒ,M|>rSF_JF
-!p6퐄q`}"=|Hs@SS$I^_rի+(+GrIo+W?~DC2u't7
-C>߷oQF)
-   	{bŊ?ƛLBl>&OiSGcm|;ϱُ~k|?B+~c	|c'_zewXo?1tui(/@yyTnAȑCBpv+2n>C(|ܹ#G!4bH?n9RO/^4՘{x4Gr0iuFsXyB5fK	+S7!ÂQ٥GPT   6pp˗W^6mZ̙4-jhp1pB	ow32ѯ_?IJkݤtzl.IA-]PP`SΞpIژѱzww5ǟfNL1C!{2d|gc7aAJ0ҥKηXpA$ai:zZOȇ0_r̙3>ӝCNKpDkk***ƌV|eSNiژÇL.   "6sĉq}9wdOR[uǁ9i௿w4V$uڸ苯6{"X0y˾{@!BX9*^ޱt<b#IDh@?ϫ̿>qߌX"!Ͽ슋'Feaցj\9"77ȑ#g**N:>M{l߁kXŋEEE5QXߋٿԩS{2.Pc4˲6r4"Z=儗.V bܸqD(뤙\!#JOW߿ C\&/F駟|}}P  % crʕ~ǌIr`GIp߹3   'H%ݭ&b;,g+!t7~Y@
-!77l*Q*;vN2 pOm=w'##% ؠ~%4Wt!R*q!A5IB&E7aq((dꕫǎPZ5yr@Sc6d2,	~2NY]3Μ9|؁!A94qaX8a°.pm{w?̽TTb+ZsB%Ia t6ZO4Mhhh^sL.Aqg䔕jZ- nJQQ|WA  @7DB *--ZfMEEEbbEbFqPзd^ݻwﯾx%&bWfiΙG DM/Iqv;b431$	 Q /OSQpgtV
-oo93)Z>V-Z_h''tTq{3f(=''`0<=<՛QWg{pGE="˷mp~r1PPXWXXrq>.+0پt!ͯ<]H%oP(9Ν;Jkr.TTU	Ӆe9wwIx/`wvۮ2@G'
-QEE		$	M0ׯ߳gn;~Z2  <poCuu=5>|yxx7_5 Êm1'B葇,Z٪ړYw
-nG-n7oN;O0t?Z`ӽ	6u,EP;'ozO9;ԾޱY[C8r?-c:͏w}!:;vOPʜG(pod;vGϜ-jMVkI+zՕcՁ4%=@?JcӦI9[muȐ`m_|owznerD(o/Y\_҃g>-qg:}5XQZ@dHHB. 7ŋ7o8}7n]u  d.ׯ_w͡z1ڥ%9t]8΂/zwI"&nj,",^_8H=ĲE9tP~	C|徤ʷ($
-9o]b1&]Rv}q$	e?gXn~usLPi'N_$rDHirw/)))**vԢARL(y&ٳg3'yAIzwMa;kպ:bqozܼC<:#OQĕ78&GA~~mт&{twt#[~LU:y^aȑ$ꚵuf0>jȠ>}|kk.W_XrqIʇfo|IEݝ&Mت\__!CŉbΫ_vqA垞  @v!k4wرnݺ/ťiGbҥ=_|P(^{)	F+mXVn=s6o䈾n|PC#u!}N3S'#4h3Ϯ>,f>rDPYM{zi\\'BU^̂	#	F/5yzP㣎ԨCrpVlt_"-[_ye/T%%"HV^}ŵkZa9}bђe-x8>Ow`Y^QʞB(/8!KFQp2q55ٌ&+GJoΌiq<V[k<|$B!G̘q*]!:FsFD<fFC8566e-xs.T,]vʕe?+>aMfð޽{=Il8*%3|}}}||b1TgXv޽yfHi:$${>|СCt n.ʠk466޽-3gjk]yF_qg9r䩧ڸ6ijb5zJ3^\epЙ%%%C X_v4q AÅBL&yF1(Pa!N9CEEȪ!b54JJtpYfU*)yW^x!>>qݺuW`*0qN7zԳyђeoIqt1qPHuǱq~_4AA*>l^$0e2M|R8Z_XT_Pw-RgbLoBgΖ]\0Əן}7p\M|}oƫ	#GyExI}aCC	uFqڳ(..vwwG|g0dGeee:NTFFFK(B_._VTTԷo_>aXXXXxxӧwܩj  [p]uuu.\hN{~8qLUðx{q-;r7ll7Ƽp!'XCWH#-sG"		__w'>˲F!DQ#+PloaQNO $I!08'pU۹O>lOX\$djh4nܸ1c[q]?CG/럞y~[^q/h=~H Js"t%f
-?*kFrZ?IӾ{cѦ;/+©S$~jEMMULr"IwӨ-CT*\4?''\&#i8Z]]m2T*UXXH$((:vÆΝSգF"I0__ɓ'DC>}ah(  > n]cc.\/WUU{\g/ݒ;۷Ϛ5+GxH=IKKB~~*Gv;WWgP*$BҠ5k@EKĔf0L5WhBk,XlE!w7Jqj	 eZ8{weߟ0̷~&__hlR=cƌ7n;eF0YpJO<NqWM!R4~l䭭u-6ӌO>>RP]W)#=
-#s~}c[>%a\ng+,._"3<<$̬+e'J#
-
-vȲzx8.&&ֽ%5ZƌDIIիWvL&STLf:t(== YfEEEk?~Z.((ʪ jqb9t͛333|nnrT]ёJѸnR:cƌ]KJ1S)&3S^覒(2i*58JiӁK.].z矿Q$e;h
-IX[ۀ mʉEhN==BVcp_~NY_NPUB!x wmf>3C#`]_a^/۶m3Ϳ8Ǆ}L&
-(َaXLovcnָf46dIzpfr/U.8#=U5K2iǳ{y|Ν/`s\7>w<B+_O}Z~#Kql'(+ʰ0LƱ9Ecyyyb;00!EA'l޼b&M*,,t qW^'N=xѣBA@ =~{o7xb0bǬu֮];iҤ=;^}sHȯk
-&!d3ZH$$!dj:~t1!0\WBn*>ys0h,#z!BO>k)~_~
-r~Gw~ҤI
-";;{MnszVHMr{~s$}s]; |8ÌF-dPqTq}ɱR?@yyJǎG|-A(.V.8pvY$O#RMN3xDQqy:mFYsl#X}kLwjZsߟf9y66@ղ,7` (:/??ԩS3gu9"h̘1͵ZVZ  ^vGy^D55偞|u몫Ǐ}r*";	p8LqalN:&-|ǑtKX0
-B\$	ZpbP<Q"k~͛1'Chz({)>uǏl$ۃC	9><kn엓'O>X^M`(oB(\XT7JcYZHaCCU-7P~u[?}9!!n~
-!!}4K_Vx!4vLDl?'kUJEbtngk,6|Xh`֒`GNoc&  $Yi&  B!HEݻ3b׼aͳgF\  Ѝ~j@2/^\n]ff&IӦM{NB]aJw
-VUU5vﾞVPؘn!s;y!!R)"Aa2|>TDbnwDݭ-(4Tx//8	)G$8N|&^97M6+*+]97<={;f61?3܍w`hpѳg~L%''gR0(!ק}b|e%MM6&/pZiT PFɢM[ΚL6-$O$^Wg\T\cDf֜._{l%޽d'>sʣcr'Rծ=	_= 0=;ʚ>} >sVt-/(///  :/00(!"Ǝ  	@vs222֬Yò#<T~I-<=?aÆ.M(Fkp/Ob!TW7TX2^H42"ȱCB$G,baPb<a'O!PIi`!Iİ`dB*8{hxc}xlNYxLM[oΞv}ܹ3<2ه]>!Y Adٳg^9Lu9>rp^YW[?`BBM,J\^ѸcGim^[u+^$<Μ-:B!DMHvic"!ǦO#U'DGyB޴i٬WhxS'LCtuo0HgݽLU糷bA; DD"i}jaXsoL&J!  k M 0̵kvر}v2}g\\/n͍Ǽ=*[=(!TZ7֝$ 7Z[ы&'aDsx}PG@4fT,ⴽi5hΓ~98Pa!r!=wOp9R'NoƃF#rvWWfI$WX/VFs]]n%i3o=sӧOϝEw[Izw'=dPL&=%>>Fǒ0tpNonqE8&	BƎشe*Cb̱Egϕisi46BAGgCRO<YQQ1dȐ*GN܃ѸVu	d0,   _6lذuVN7bĈ'LzNq˗oGŁH_PnnW3Ç*BFp	*JI V邧(iӇBcXlg
-#a/7ð%z7O8wr99uXSx$ Ү\~mM	@]?%Q_>+W^><˟"wS_y奱`seYۧOqW{.VZ,v/h!0\s>i*aCCd!FmsG#;b¥.]B|ߠAv.hd,9g283t>>>BP$uiŵ"  t7PMɲ?to/U\L468H2/8EGӻ?|^|/ܬo_Ξ-pPh`ԡ?45!bxexaa}mb(e0ʲB4B5k)CUU[~th7B5C|aY37~[Gݜf/\?[	Ր9%ù͜1cFccK?veM~7uHĻFs#zCi(Ҽi˹{gyEcQI-%'c3O74t/СWnnEM[^̭DG7w#t/d6^AAV
-
-ay~11ܹskP  77@oݺwIOO:t=_`}=n60J|vR>ހsP(ؾ#ҕysGJ%Ap>~|iabLFF{Y,vXV+3>n	6p<C*sԟsN_#1Ҝ7)
-g8hJYɓ999Ld|U8gyyyIII^^Vb9a ٨H$8w\־ǐ<ݳ/a^a.Wl~heB1xKh.Y,v$I @d=r@txT*E-khM5z*{?R	?R)MIէG:4p_**u?^N[B#=qMc#Q޽f$&vD.66Q4445*00P&܎k׮m۶f5jذa  @tS[lom?3Zǹ0*V0lOGq&ݴ#!o>N}t쇆
-/XӬ6.팟ĠƊH,B<ޟ[9g|u?>ӧ!DWf?q)ùQst_Tl8}Fi
-N+ÈtALPPUUUqqqII	eJ^}( 77sE%1<S#cnjámw鳥Eus+/V?QS)f:Tzy8vbz(¢zәevlccӥ+ė_ߴ\pW؟+dNQĖmu:Tqdyqh /Nd>Z4c5.r89Wr־+9o^F:r)ێ;zĉ$G9g&P#Qvĉ"h̘1}		!=VuȑÇp  tOP0LccΝ;7o\XX3f㕻ziOo琐6}ǪNqn}tCN86oO,~#ޱJˡKJ+YoOozۥGǍs8WXd}F1^#CbP(ܴiӗ_~ǎ:s-./!"B`ovĉ[4=v^ P]<XN~eT*]fƍ"ƻ+ǎ7 B'_<tkExͲl8hVVL&cuR}hAivC>!4c&!.[9fT*3Bh:hİ鹗T_ͫW82n7=G/]t*2K(AaaeZND]hiux{mSlv˗I
-
-SmTVV$P(CCCad   # s*++;z5kΝ;o&$UQ0端rHIx`?~xq1|~Ͼ:y銩oo^<՘{ncM"yU]c53nRcd07X}XVp@7_>.˗#;nTU-Ds.lڴIOz<Q҇$}A"hթ?,O!oOB]ӕ
-p䈰u9幗Քhm6$qudQGʌCC/\8rPs@3,I,>(>__4*ݷ&xRe9Gy"^yiaXRd7 B^[8n`vd	4˲\G Ng(t:<//d2j9)Wcő3_pq.;Ǡp  t5:;:tovŨBoh@K!7,+.޺u@ 9s<z`DO>f3ikt,NR>;8S>ߗj(
-k`>HGp>w7[֬Yg͚{`ouux<ސ!Cf>y"^2䕍ũGyS!VNZiYe[^fcfM؍㫟$	>Zq	QѲJcA`9^oQ9wĲT q+r/boߞ?<uTZ8mڹs[o$1  tGpuW0c2>cǎt__ߏ?`SƕGbpg	3f<;?X$Db=#e=<_W2^g\# XBeWk;aHoRzٳB!s`Uҏ?z@"XbŊᓹscAUnn/$Hsa$çcŬ	G_cxtyEE`}ͳn
-GxՅa2wn :x{nQ:.   ::=a6L(1=. @O {^?uԶmN8T*_yG.>yӊuuu3g|aA_P%tP[n*vϏMmNml* &6n+f"n=]Y
-?fZ???9>d}XÜ8q";;fz@c9FF`{ɓF?-[ۛDs t7GOrss0`RpNp*VKӴ[dd@ x HHH p]`0\t>p<0?2RQW6cws[i2m72eʔ%eUAuׇx1WCUv`YdiMɳY3>ebH0z5^;b7m۶_|1YL3ORqǍFQ0$'N̙gMᅁfs t,/---..fuˣ}m3j2zL&#IR"Tp. @7ុlv,xRR{WU;ٸreMMԩSV)J*?_CםA:ˢ/{F]$j|h{y%_{ohll|גp3S_?M8ٳfA݃AYfu	hs?~s}<ӏ>YE&8@[,gOUVVFGGCE/6.;;ҥKqqq~~~h4Z}OtHAP   sbԩS[l?x<ެY.+Cί񷡗LS _kkkM\ OJn
-u4ԼıC:s^W#-x/T/N<ߧ~{6Ezscy
-ϟ?Щ~zg#EϋǏ?⧶_y`7E wCkkkB?%S,+$IppX,aѢE)))/F%''q{  ۃp]h4lٲe޽&iҤI[^\yTzL&i۶y!8蠮РdF8R}|AF>㜜OŘɹ/<!p,DnݺիVϲ̊~d 7c?f5o~c6?#~9>8200O>sR^(Kߝ;|||] )JRj,XVMQiNꁈ  tgKXK.mܸ1++ð#F,1"wmF'vsdaÆkB1TӜ.~IK>=PXXY^a	rِrgM_ڹT<ðE~ٳg?SK/%+DcSoLLΝ;V^@Y:oBD޼7戾8pE_/y$L  wZniiiXX%)q+jʬV?L-effjZǿ
-
-
-
-
-ndɒv= ==q4Mfee-_xf޵=B/\TFqⰁ˽T©Ælܴ??  w$p+Mf$B#ƁYR`~|%K?̢ٻ.*z-1M6Zdz`CҢcx秧'/?wFʥ:`pf5x#qg1rJyy9a~~~력N^-g @ bvUsOe6%6E_sȑR/[Nf6#"	}5/4|Ukxtv>:A0s|oƊ*+EF$zm۶Y,я¹.92=JiӦO'p cX^Fh4ThB1I0ޡߑ˲RdYaiF%K!  z_SQQk׮[_~shFr@Ҍs䣷Ə6`P%V7fȪj=I?g8JiySZ	\uxi[ݻwרQ2箚L&+ÇK$5kfff$9`N|n,˲ǦM|\9>l62?R]]$LQ>e6[&)
-OOO d  @ ឞȑ#[l),,{=YڥI}U޽/zq8UALMh4|]z===V|XEAp^ş~,
-7nwΘUZX֩*-}O~k׮mڴd2%<>FI]=CMO~i@ ظqcZ溺Ƨ$Z[!jc9w_wHX!tݗsyA::*[w;O˶i}v{n-N8}:s./===77788XO9pX,??退h@ kr)((h4yC  3UWWo߾}ʕUUU~q^CfT}}pJwwE=>[HA.VWo0NH~惏Vq+bz9?
->FC>MqܦM~7Cy;-|;vlǎz~Ƽ8㐧}999gΜȸpX,n9Vqy˲̓`xm
-ViRmwڬz-'S4npjVoS0n8xkuHm3ÿ;x5ǿ>N;>u%ðS)ZB_~Hom"Y__㸗\.L׃{0г`GZfNIIA%%%v
-   nn9p͛3UΦ1/H|̖Pd-BMGwj|0whlBo۞˫01J
->E_}>G*YfƍǽAί../_$|	 =aX{ZH:CK5[31x
-
-tmiƭ;-[mxڹmovNVqV=vu4+((hjj
-Rv'}0QUUuV0I=:߼8W[E]R   ==zt˖-W\	裏UD.ڰA&=Csu2C)n
-Ƚlܛu100zǎ]#!P3=?>Hz5kty&=D
-OSuر#G椹zTrBû~8ҺB8C xkֹC	wp<lkn<[{Y])2"V0VSSc4|~LLT*p8b=Z611ɋ/h4l   Mqj9iӦ3gxyy%''#c6ZR-~O$DI7dR1rSڭ8tPAa55V?XvtJ^H$^Ľ,𘻻s-233sss7!r)fʀ`6zUp[ҝ6O>{&IR*L.Vjj*BhٲeS+_/W   {㚚o~1\>gΜ""JKQE+sQюC%%%%?.!T	}tLQQM޾#;=wS3g&ذ[TH.\(7
-tT\wx/8pl6^}:S˫f~qÎ;v1՚fq$4Kh9t@///___eaL5  tg^Zŋ-[Ή_G%mպ_t:_~BVPtP7tzSx/gkf&:JRECa_Y,]ZC|*j~3F(\_<y>|>ZUT_?KΝw}YѠIHI#p#	/**l"G D"hpߜ5--  z:tNڵkמ={fܹsV_@Jl^Ov}ȑ?;׳Rnfx&c#Gxz,VLoIj4KJmvQ5LQ'N(%i'd2\w~Ʃ
-ܹ`ǎW^]b팾G#_ pG1}^YX+<<SRAˀv)JVn%fǟA  	 sqg2;sl@0{9Wm3B[w	&xO9BGPC]W߾#oo֑U+^0w7y]4rOh牓u4yf3!@fpxdH$o|Νjkj_qpc۳gK$]v[nN%<KA ڇs8Fceee0E$%%.^Xնdff6iޔ.ֵ   5z}QQq;v#\(p|Cxtg5e}}B#Pɏ-,,yz\Vy|o_~^[
-bߛ>oذ~Ν4Mُ8$c13^[[[WWP(bbb	 (ڷdFhRRRRRRSSS_Gqd@Y(  ?	՚i0ԤIq&@'U*S7op1Ausg2L&Sbn8B-6]R6sX!OswT pGp?Tzwo^]SL4 1a={oݺ!4xvcHHXͧ1+--)**
-i\BZ\Rx衇kr9ry=$ n=Fo߾f8eʔ'lj"ʐ3c֬),,ӧ_;dJz)ĠrܘG4a,!ɛ1=K5pcHd6׿f.]J?̛+J\j~ud@aÆuIÅQ$c0Q,I(bhGGdffj4GfRV>vv$  @w1EEE۷oOOO/..۷=6f#]:'Un~?X4n	ʡz
-G[D@tiĜ<U(B|NM 3̜n~OOOꫯ~xԹjWy1c͛/]his'Kc j 7Vs#*v{``;~p}&448   
-\x1##cϞ=j_hQUUmo]ΝǌxtPbj=B(8jmA6aG
-L;v;Bbn	f6Y,jӦM+Wzᰢ"=KJ^2DT_YYYM{|<NĈ1  p;뫪BR;""B*BЁŋgff&%%%$$$%%]oq  ;pG+tyy޽{׮][^^O8.;:cԉvXr9BhKJx<k*YݻHqqŏ?wz۩5jܾҏe?cӦM6mȑ.دGXxɓ'iU^!cj)p茴l @';
-qVYY};wFDD,ZLZiSX\Ezozg>"Q5A=No-.q|Ba|ż+G"!Ԡ_V߷4
-lp@'K
-7nݺu^sTjVU=ѫk֬9v9K$	a,wG搯Ջtkv[CYC:uW4T*cbb[l#(|q=В jQL8ȸ噤 YYY+V8sLhh9sĨJK\K Xrф׻!l&ĲQQse8֮ߧRIHWnW{@WJ&Ls̙J-rUeeX|,..WTf* כ}k#ywxg3/ɷjEn ;yv<}voǙs;o}xnͶ:lL幹è[, 񂎄.ZhѢEiii7s  %K 233/^ឞV:{lPPЬYUvuq z9pX裞34;b>K.#Bb1lc4VVVv|٢B][5ugX,4h.3,RVk6kjjt:]ICճn\whnA(KKe%3SZmS">HQThhD"X<ǬdV*jwAEp jNpt1qdqB!f6PXcY777\n2pW`eQ]}#G~Y>J}\9#
-kƌy˗kjmAkt}OOPukvM]HN[SS9tPZ&0cYz	b@Pt׎h6w&@:QA-n:i/Zg6n;\ov[8]ZU=Œ$0ӧBO>+pJerrRT*7#( UZj@G(eY///@,AAFD\_C48NZ,蠞a8mE$pƾY3pc|Ro2Xff3B3N[Dt6|6gǎ
-⡇zxpBaTv'0arNM=^;nc"#w}\Ǐizy=ZqGE/ ^m4MZZZAA"T b,
-aH$r<Bwl*D"8R՚L&(M=#\($AWμϏG2Xtzs?4LU5 n~GJ5o޼y. >3-'СC6mС			F  p
-
-
-<-MJJJJJꠊjs  VJJJJJɎ:> qbP(djr|>ƲAD"777G7Ǒjes.{yOs&@؇e22"`045m6\")H?3%ƹ$[[dzxΝ3g|[PU]sbq7{afSL<xL&~ [`V3j#sS3,X*B :qq\m`&@QB555F!pKeBP(q8e!ijH?& gkGpyUUZB(`>"Ο/45Uݠ߼y^={ѢrW K=<_^RR2nܸ)Sj///  (El* vp1Ȅb,: J$# v 'l2XN}ԣ7u!B&g=8tُiI%2P(0DpJYS4ZnذAO<Xb=P)/o߾}%&&N:uРAnnn/  UZŋ/^ڲp.ɂI  Н5YH$Bi͆lɄ\HE	*qQVSgKΣ-Ь3gCCmlUULo/իE:X4UM|999			/YJʬӧ1* X~c).PZZڂT*UbbbJJJsOU{`2  t4A8N*:(0n#h݉oDJb1&q/Oi#		}]qGUk>RRB*02jMa9顣n1bG W 3n1[\\<~Cmd  *III˖-khhp}233/^AܧB3j 2V֪*ӹaf2hjGHWJZy,Xd2AvO0\aa=>}qCR\|옦,$!*Љv; ?yF,u}nnIee=-k׮]{ҥI&?b=  O~~S-Zh4ŋD R+SBBBFFFrrŋ;?tz9X1f	Bcq_Sv;PG=MsW*(bK{$bE4B-ێ!44D@pHx?ӻw﹓&ETUeV*)jΝYYYA?~ᡡ0  \0$`fI= tFCCCa.灕AfY,fD*HpGvx4M֚f)=N|>嘫Ռ˯va<<T^,|}}\?p>'Oon|z~qqqΜ9lFVGð]vEGG'$$3&,,̱!   gh4iiijzȻ ܾRbkAbc=,̈DwPhZl$9G4M)!H6Y`WFEJ7aB~`~~7_>=lБ44ޞ:/YYYO<Thlt;Y>=ɓR4!!aĉQQQ  拉*УV:^ݑ{  B-Y h,bBq$]?8XdfFag(Aͱ,E~J8kllgTuEsww+,.,RATT{?))i2˺,c*n<uEQC;vlll,z  333[>tS7ae. HIIh4Nឮq^80 83͜LvǱ@dl@\:fss=EYq?oefW!4ztS'ONJp#cdy;wM>QsŎq
-/
-h480`̘1!!!B  ֢<A -^8)))%%!d X r$R&Zz^b!'5czGZvǃ	E|ݾq$IG#BD<|4@&eDn۶O:1oo^y.bصk׮_ðɓ''&&j  IJJJNNNHH-i Zlٲ~ ឮ'$	tEyxxv+AHbdr`'J1TzTB7Mw7uo,C|+&sieY$屳窧U(	V!*+k-=&Յk׮e'߫5f7ݻw;vj4hҤIC~  i^955533Sfff*JZHLH ܆vWg]=]8e)
-njj8jxyWW`p#>P(pgC8|9PuM4mW)Es.jEoLڰ{{m6)eWlf-Ylkڵ)S̏*	%nn/^<xj<y	  Φh,Xr5.G!lٲl @3E~s hvTqihXd2߁8Ʋ2ݽb`,WrDII#EEO-<fԈ7^}gB§DO荇|4܋u1~В*VծYd2M>ݫknfbK^^zzz}}}޽G5dwww]  ΦjZ?jVh4 PZZV^Tǅ4 ouo{EQ! 1<;s4qn7L4M3q$Yz-.PyyVj<+aC[,L/pzհ?C\ ͨv!6n\URR2yyCxyym,--3f_  RRR%K$'')((XxqZZZfffZZZRR8l &rx<EQ&eYF$Gò9h{&mTx{RiWߝZ{>&Fy{I|^Qk}GA]Rj8Bض	auupB6k#G
-
-E^  5BK,YhQ[ׯwiX{9z  {#i\aXCCM2ifCi\NQIAvz:KyV.9,ǳoےMLqY^^bDY<x<lF]Z/3XN~0mÖ:kVZ&j|.dqb  pԢ`s[?96kZ  @ឮ0X,Zyyy)JՊa;1əaLuqò\=RϝaW^_YğD"05,uHM%s.1В<K52d?cfkmigddkҤI#F
-1  J.W  @7ឮdfF@v.bhiU_c>Pm(,\}ǈseRL!&3)d*+BK5_|)+++,,`9i?8wR4i}!#] Xzu!  z	M,˒$iz=0"&ޑe-lfYh4裞D`=jN]:M0B1?~ O2XF+YqC<==N:q5:y$:t#a  ^hh(BhUզ4oH =] ٌxSSj%IznG$8(gZF#sqʕrWZn{/}W(j3uleX`;B1nݣWrfر%RY1YEmٲɓE><<<\,}  .(͓XyYfffL邼  `!ǲcnT*x:8PH~9v]&I$T*8c!!I54MVcPḯBW0E-c 	1| σx=_^^^IIIxy+*\tR*zxl޼y޽3fĉjZP@  h233CCC<yWrrc}vA^  tz8,RH8N$bł	P貒hv0TVX{|z[b㪪M,x2¾}bԩS煅]kF$۷ٳO6->>  RC9Z/((hc=ݑڃa  @wឮc4y<MӎT>փDd2Fb!iڠ#fL!<[T*lABp |UիB?QQʲ2Rb'OizС			{X  q#q<V:=  #@	+gF.;,VE"Dv:nOl6a0ETAgY¢?yýX",f!'´4:qĹ}]T3׹v],K߾}Gz  PjDA  uh9&pq'
-fs]]qZd$r e1
-㸦&a -+plx/PIivi~ڲeK]]ĉNSS㢈3_r޽Ł			
-(
-      g잮ad0nD"aju,X,4Ms!3TRXod7#/
-Vk~=l߾]&$$0iRxYkb=TڨPvrzzzYYYDDСCV0  9֛R*c՞ev  tg0z\.ɄB!˲6!Ԅ[,? px,ZV0dnY
-9	7qBH Cqb9neeejɓ#Z$mP*7geeM6mȑ|>  FؼCZZڲe,   {c@ 
-+v htyv0hll4L&8fAbe|1E$$Ϳ0CDTGьj6Uǎ5j3_sbQR]	&L2%$$D @  `GyuGZd  @w'x8 @X,A$iۉ;28	>4Ml6X}P	L*TF!'\:Zr?;|ll3ͮ r.ѣ#G5j?z  h49\-WXoIKKpd  @7a=AGށ0"H*x<juyz 58$<s^/Ν;9gΜYA64fJu6mڔ-6z>}H$  <j  M <8LfZY,pW9Fӎie$I8aApz}F	9s,WW=k?ySN,VǏP(/  tmSxj5B~[b\  d.l8zeR)v!8N˲MMMf# .rﯿۻo>77iӦ=P\AȪR
-nzqP8hРCFFFJR  >JeGnd ;,xH$XL0X,aѰ,EQ!h6h./!5{4MO4iN@eˮk(*==ɓ4M8pjq  pq{0c]L   c~XV.BH$)r||=8(,
-Z,K _ %z~=gX<mڴ{kk]ojˑ#N0lȐ!SL9r?  ,^k'=))) \ [	Ҭ8n6BE$IQ#⃳k훘bJ
-vfaz K>?z~M:uUUq
-ϟ={b$&&WT$ RSS/^# "w
-x<aA`l6' G.O|u_0vCݻfԩS]V9\b~lٲk.N7jԨ8H  EV/Yu_ж] --e섄Ф}5Vj͵t|0ZIIIS q
-8
-EL&Bl./FE.^
-n0:$&UU7o5jԂaÂ*+]qN(,P_ZZڻwaÆx<  nn*s8\]Eզ;{qqd-%%$ŋ/ZB ;=N,vP(
-Vn'I#IZ=Vl6U++ 蹬v56lpʕѣG?:qb@CkBɬX;`@zzzFFFEEETTرc!  Mhۧj5BHT&%%jGF|JNWqݑUXMѤ!RRRJE  8$ID"84mZ-c=!
-bX,L&dZ9Da'=7n1n0K4:r߾}YYYƍիX,   nVs'))iٲeCBB	$$$:ul>FHDp =#.MଖqTꈳ84,K${'FD.IRXEG D,'؇6o\\\ܿfozv	zo9\Ǐ?~|>}    uRRR׷AJm&Z* A	hqq,Xf&G,0<90Bt =*NS_GNNNllaٻYi6>|H.4hAAAB  57zh-fz=7UG<C_T*UJJ
-Da  @ǉ$	a<醆:iNq8l6<> z/^-F7eʔ)XI6alݺ|>СcƌׯJ  ЊVh4J2!!Aզ;X@楯;T娤T*Zŋݧ> =BQNj5gD:ԂqBaZ-r $Q}ݶT:}$BP]}dٻoӧiׯ߸q㢣e2A@   c_I%p2c;Bz-5ǿ:κVU*ɎWkwm.Hт= ,$IR)Bd2QŐ$NF2sFQ#inJWK3J)
-W*Bh-,/-8%|wk$..闝>}ܰ0I׳gQT'O1bDll,  1ˡOIHHPՐs=ϗIMMu$-[,!!e233
-
-RSS0xbFSPP<OT.Y] tqH㸧L&#Iiͦpq,e9q4Tq,a[zpsJhƴP<JAa?uTIXCL[*V4:?נc/)wףGg~*4T^Q\8U޽}РAӦM۷/t  ܳnVI@ϱ(Zn(H}9oH7$ $8b,
->(,ˑNwYeY8$`F\TP\0,IX#I\)BJ
-PDTFFNjJ~Hu!(P%dRAsjr;w_Lxj
-TxZCiq$qG6].ny|VV@ HLL|4<\^Zd'certçN8nG0`;t  ܳEoOZZZAAL}/jU Y?iɒ%L"G',X@Tv~ N$	D 4-BVձ0dbDe)rjjj2,'>jl_{leZZ~]m poJI>1rPHuadmzֈ_5[4c^!BMWbgϕPQ\PXT69IB!40xА`787F;v0L&Lxz Ϛz8Rcǎt}?>>>Ҿ  ^㝭	\M&99t2IMMuTMvk'%%%%%9-^= qa+s!+766;G
-|Gf555YVl_ZyΔ5ZvfY0pB,2[k8$1dP0{rI$A!n Er+B~
- __-}ǮxkKm!d`aA`8Q}74_IR_ߺuN;vcFչaws+HV8qѣG6b=  p+Ƶ{1G frOIKKԧ8jurrrJJJs) @77gqe93Lvf,˒`#I0f4!!z
-Uxæ34?rOOtJ,PfMh͕U'WyxK`v#ww4-M}b|eRu:!UX5\Rm0XB6Sh_v[C!B|c/+m޼qذaL؈L/K$/^ܿaaaxxQ>   
-i HHHp,ˎCCC8@78N$	 qf`0pX1@ pjFQU+WB7!w^}ݩGzBK'ƧwOhH L*g4Z&v5O\&3:\?$rj}zefIΥ'Ns'	bktNoL[$E{
-M34g-ȹPh8՚zHă\lUnfؽ{wyy1cw_?]kFם;UYY:f̘cǆ9f  _s"-rX^`enjOZZڒ%K\| Y ,88.Rju<Xsf
-8|3BGǻ5kOXI!$P?		~
-dY8XS"<7JJPPj@ o/Yˀ}W:گJ)`ON OHHZTxD¸Ȑ`?}bK|\\%(t;qc}۶mjzδiCt:`pžJ|KQѣGCCC'N8|pD]   qxָMiiiBq233t:B)))iiicGps9b+A,˲rQZ]y3lz~BъĜ"c(!խ*m0Xd\jhhq,*һoDo(Ud#I<:;:[  oqn* B4mj'B2ST`2Ќj|˖-W\|rb=frwUUVVVqqϠA
-   ]8ȀP*˖-s@NMMMKKKNNVՎOAA#\&Q=ǱV]hQhhc~, ,,1OTjjR	%)`DB0\N$M Z?øH0%IqGVk9Dajќ.ww!wߚ4iBߧbYN3WUkkMfMY31G-N=Vrs
-R,Ҝ}$"4^#|mH$q54㘏<*S
-7fT]󑑑SL	jj\ozz2wJ5f̘1cd2   ͚'suPYT_NRRR\TV,Xj2^fdd8Ciiit\PPHBCC׭ n=NDlfY(l.p8Z5l~il48Ge_CyzHM3oΐCBn?qsew^ػի5V0Θ	yDLH6c3{/4 Brasl?xZM!֯L*t^%'T D"^2 @)CT,'=rB۪?.\;eʔ$wwAE]BTn6ݻ_~C	5   Zjf+ҜV,X -+((p$8V[wPխvCCCju@Zn55#JHH8ucXsFcm5(@XV,vq`jMMM+[n
-RT"YVa8s58;)ףlII等>;v^8rPk^o1˅Q^5.W;qPH+̣Kx},:MTm<ST\I!n>2=μbp+Vn>|pPPЌ3\Av[۷o?qEQcƌr  ?/1LZhQ][i9 PqfP(8eYGNdi0Dȵ	>W|Nc)egr]ͫYKV+MI1.w4Kf_z:#BC&.-՞;_^^h4Zd-SdW8.H!O@uy&qO]XkWs0l{]YCXCMjg)V9tIX<u'e=gΜAwjb=   r   w{QaXP(*++YxPc=	EI$aYO{Svfz͖m˅GZАdכ_#YWJÆ$=8`Pw7F5.M=.bG\(/hlY!TYߵ'Y#ZuO%fBo3׆88qΘZs"x<"2kF"N^W8xX,7ncb&oviаaƎۿ?/V   @{  ts0s HtssS*E$IQn7˺:$i(755֚L{SN)]$ð<1P8!cfc֥izc}tB8aռ"C|8NQDSZ4%G"T*A)?v!$P`i+Wbd+)m,&kEj^MaQ=ca	Q37bX(z_^p7nSÆyVW i(*##̙3v_~SN2dA7   :E   ✈eYb6y<@ p|/D"pgl}\ٻ(_̬R@$$@%$=gf݁ycccc/?o⽘=ཷslO۸{mlA$AK J?ҤUR$Q*p8DUV߷~^7(Jzey۫=-h{<F'ΟRG2X<>x8E))3ywώT{-ڰ0iIP8w~yw|"HY`gzgWXP(69Ɠ&0]Zb筆ǅIxS'|Fz뭿lm"hv'l}՝Ǐ_r%[v  v=UUU  dpu:M&!DX,
-|>%I3iev;˲XhBhBt\7E1ukˋ
-KY,+7n?]{o}n}筆bp6adį*.[@w	!,ll,rjǫKVUw{{^oX+["̉8^sɓ4MٳؽvfB;VƻV~̙궶m۶UVV4  ܷ@2o"ya' 7P#h$I]B5V~XYZ6iAԙ^''	!eNƊ%#I;ʩ!v!$I!O9[,\,&~?L8VX@GO|x:,mt׽orWÆ"ۢUe%Yٰ4Ƌ6ahTNLKD/\6/ϼmk&ʐ@7w?z4dZ]矟:uj|||ʕ[n685  EQO<!Wկ~X⑑dbY6
-t:#q\ed;V@#䥘T׽'nBVCƲ%&ɩйWȔ9WT	!E(ZN~hT$(r*]ڼZ#';DMSzm߼/QBHmMa"[Srwnl*ghZgAw~xoߣhTqsc6/EܓޘO81>>{n
-дqVkWW׹s=zT\\e˖-[TVVf  H٬:21U(@n+]QZ sDQt8,Z,|0b˗eA8NUe'^194M[V//sZ"<wML>%2ϋ)g"^oXǝgl(-~]1L).06}op7/YQǲ̢*vڧMS(B|ێUcc3Gw_w\婩G<9a1XH1?{76"gaӒvĉCCCmmm֭Z85     9qO(c2L&ښh4iKBӔ,s&q@ѣG$sq	!B(r8宥pj*t[O!Dy^z<<-IrB?vu.-*mkYֺdn虙艓0!n34!+*\ffi#l4?[.i+ky#A|aQ<K]G5OL&dv>|6۵kz{{vڵk׮UVl6̧   E'Sjf8Ne^0(`Z1,E(NOOL&ax'D19Ͱ(4Mɲ"JJñJEy#j۪wX0t8'PiJQMS\z]]˃PV]osXŇ$,S_W\[Sd00eHC<VX`[LGW޻wO##Y]1Cv'&NgKKݻv; `AwM ,BB,@ܓڝ `6Fc0eY=0`0ͥv=<{EXeb[QME޾3zctzU˭{j"!~:dtLAEk#I&!eΦƲ<9'7B
-JkhCQT4&ܻ?TAv/1|i 9x7?EAet4t.Wg,smɴiӦ;wVWW]  ,A  ^@{2-(I^$Ih4:===55H8ժAEQe*iy)EQG!,K8vxd:-$ccCC^t:z[KUێU%E'g',Ӱtmmju響йj+֯+Q'\q]<^B˜3i~6bz?ӿ\2<N1ɓ׮]cYvڵ۷oohhϧiy  /5H eY`0srE"v-EN}7K$˲xǲf(ʃCޑ'Eߣbb$"<rfw%)r{׏	!n˦ʒ^ zOSyJ:NLLOdOیB	QaץKf+*gvn&?8Ü:uŋ _~׮] *)J?ڇ, ;4A0YEq˲ ȲLb$BӢ(2eYFHD7 MS0<,ʴ?r<E``eYB<EQ,?z웜
-KO_[[6Z}EsNBJKM<Kzr)ru'oL)/w65;1H3(^b᫞e_y啟{<ySSzKY>uԍ7hkmmmll,,,T_  E?  ^d ISvnOMMBX,(d2>9˲&IIEQdAb}` %xVJeNө7+ڏTH'3Ի7dC!dwSEQ:84ENkϝ'le0ڳz<}Wb}]f(":v^,rա"l-+wvYp/V_|v_7۶UOMQPqY> x<]vVVV  X \D  u+`4y`0L&Ip8;C:Ԕ(AEs;aYКoѺAɲ29tx]}IytX	_?p-<KlƁ@t|<`6sDEQ=>-nVt!0z<<Ͳ=iO =m/BYaC;?zG\!lƲRBg
-c}C_u?X՗X\Nf(
-~A[Oz.<:43%pcOڼfu.%㞌~ԩcd=q/^v_nݞ={6mTRR  %zrRb4ML& !9!Btiii("b1YarU66dtFd7uc555.ݨ6Q7u{HuFndY)/wVW&	˿:u	T\dD=<=udpWݵ	cs8uOQ6^?Jt7!fMabøo7Fձnu%%%bɲ29yswq@(pg=͞
-\KM
-?8z:77Xe'֏Ο?[[[[ZZV\z  YA ➌Adټ^(PJG$Nt:m6[ HeHVC֕F#qcP۰Ȳ2?]>u4MɲBӔ$)(?=!4l(mj,_@FQP]]v:LjC>0t,&EZʈ[O_w45_u{0hU/@ɱD=QCSD"|$"hLM͕֗f
-?~|bbwi陙,lZ[,nݺ|Deee[[۶mJKK  ҩ	z  ^p{2+Y	!ht|||ttyJNGĬ΃dY$)	@Q~^g*+\4MQ^7`Q/Ԇ-?,%4mX_[V?úzstl^1=MX$"$µ:]k~aw'M&azGk77W:&-aE"nlWRG|`(rZϷh &f0l6Ca]kn^aq.R~ĉ6l߯¶e˗O:5>>^^^qƖ5kXV  XC
-."WKPwɲhTc(Ȳ<ysՉYI9(E1
-IhB>4M:dM+z|3(M7,Ml^yEe^ێU<,G۲mMafM###HTІyVpmX_Z[SXĞ/\[S̱ySe͚abFlSsjX픢(y.^+,ݾ3
->_xoj*ϋVrpcSyYdbqLnhM}CCCVzW_3tYضp޽{۶mkmms:87  L<UV ➌t4t$h6V+0Xl6%X6u虙X,(/˯C3][SX[S䂤\.mU۷U-nuus=k6mZMPuQZ\ܿc4?yM+F~s΍lٲt@
-  9
-) 'Fh4nbȲ%I2^@!":AZ`0r= Y#HyǏ_vmŊ'3~Vڮv577;d=  =mC]0 3@ W$I&IeEaY((fSM362*--5P(3 	^tܹS__;+.>y!"6ۗ33/^tׯ߹sg}}p @Fj,RR"p8Asz=0 (ҴaSeYivլ'
-=Bgpy)ug}}}NFxR]lw|WW׍7t:]SSΝ;7mTVV  2TSE Cܓj4zeYfYV?EӴ$IC55t$SM30EQX,
-=]řX
-Yw~.\0۶myMMx6MwܹsR__cǎZݎ  2 ROD!@2oAQM&qz^Qѣ1d֦FTVhZ%A!X,*w5ͷ\p-[on.2*Fcf?Ӿ>ׯ_}pv   37hz"
- {2ZT4ð,;===::hFe1,ˆᙙI bw냡O8(ʮ]~kW
-eazܹgώVTTرTTTf  hM  ^pgaBhb4MnFEuNCKb1PyaDQT X7Wm۶իno[zi̙3_(j[VUUL&   C |dҀ"(Il60nlbbBX,&Id0d3!t:ur.!X0'эg<ҲcOYzq:K.EQǳcǎ֚^  |ڮUV%^D 'EQQb$(Itsdq\yyyѧp *ꚙٺuo](fpBooXii-[m۶rJшs    Aܓ/BqEQj.Y(EQF"$cѴ^W`eYBU(Ǐ;611E,l[Xݼ3::uֶzɄs  Y\  mס(@(H=<O2(Ѩ(HD8M fB]رco,\Ί<l|:4tʕǏv\YYiXp  יJ"
- {2NEͦF(@@(hl7Ӵ:viI6&jñ?wޭzWq:zhZXF\~̙3?knn޽{q   Y*
-s к'A`YyAeb:]6B%ExWڄHЧ~7ߔ?X,ӛV{6}16_ҲvZۍy   dY&`)vJ!+к'ԬG+HdB,TY,u !q(^= 1Y{7W;ǉ(fx˴qyy===gΜhlhhصkWSSSyyK   K_4* 2Fd(H|^^ʕ+N(4M77g{oA5pl6u0I	q R%Gg޽k߰52z8\x???{Y~F  F  BR4t:cX(
-HBiup8#E)pЄK@<\g=w˲o/&'3ޮBӾ.9sƍ444޽R8  <ϻ\ xqpX׋(˲,jc,qYʕH$233366f)yhV[?7/Qeޛuj/#y?%iO%,9M<yU|gG7-j#I6VY{m'g}jZ \sR//q͛7?={ŦMl\[g%ƍ<ϯY466  { Q) ɑoA211AӴ:)ڱK,,3lԔp0$O'J)u2C%"smeD#E|3ԨbރJqsRμe;kD?Y=EGJg35:G)n4I8ꄂt@o~z,~ՓٸZi:ve3}}}@`---6mZj˲t ~B /2=EQT4y^(
-J]Ƨp@ MH$rҥm|?{>˞V<-Zh._Ю.ɰ˙J݄jN@\x^N~Nw٫WB͛7{<2^V  xՌ
-  /4=GQdbjR599966F	!
-f3,_qFFtrC	aP:ЗSOHOff}~\#EϠ,`6kܓ:H>_)"E7Wɹk)֐zOꂗj4׉S_(z+Y2:+5ruݝéSڵkwRWWgZ
-  ϗ*-  EaYVeIQBd2<OU϶ί544l޼Y=Ed0k3W(\/I'I&zY^'̚y_	;z&Y-z;ΈN=/4+)4bӮ7/]tիWUUU9| s% qϲeYZ,B!
-
-
-Fc0eYflNp<Sďu#"/AKoE~.\a3),/HŲגBӢjƍ׻bŊm۶mݺV[  *+rq{P
-
-}>( DQyrщY,,=BDReeww˗GGG+++=OKKKMMn     ,w{2NbC<(h4{C5r'}t4aQܹs=ׯomm/((@  / Y@d&IQ< v{OnPXX!    Aܓqz^$uX,&!De/tZS1ٳݣiz՛7o/..6" LY qr"2qE^/wscҒvvld֭[,o߾}ƍ  /-Ag.%ف'$I8NE0L("DE1 xiqܴE(t̙˗/Sx<Oee`@	 [SEEف\dYv\yA83h(q("&pOݷn݊FVzWZ[[WZ('  xaQ*+ځ,9PY9S%,rL&(7ꫧiҥKׯ_ETTTXV  
-  K!(iZEÑhp8Lb("M]ׯ_D"555۶mۼysUUbA	 rE! ځځ"M4M˲gffbj%Rdl>w\wwdQQQSSӖ-[V^p8PB  \ qOIĲ(:eX,eY6XLQD /RSs.777oڴi͚5N?  2- :se04MBH$l~?%˄, rM-ܹs.y͚5n7  ,Q @ N8~?!D2 >wz>=u޼y
-
-   d,ǉh0F#EQhyax'^vŋ&yΝׯ/**2("  X.ԟ((o Ө?/SctŬlu:!8Ѩ($I,# g?eu<l榦={455,B XkB! YF$IuVuuuUU%EqO60c4#!l6St}deQD J6o75uww5kִ4551X;  ,Ϛ* ,y<H/ۿ~{ǎQ'߈ zfYVAdYV%c\M\/_gfÆz    ^B\,[\\\PPu޽W'?qdEQ=AP(z} Pm6JMB&Pe@JD©_J#cuV2*s|zꕧK	/Oq.XZ`fa4{#w,'͒Ogt^EJ-	㡡>߯f=2x [SUR `ꫯ~__~}߾}Fǲl0F@l6adY`0P%IEY7k|A-og]vu;[L^,)I^\{\sm7g=klJ6_ռ;;m\Ϧ8Ei;\&i\z}9y~dd͛gϞo^oQQQCCKKK  ˗jMF BQڻwoMM?/޽{nzwsX=YzxZz>;cǎ,0$IT/EYZ>̚qzyļM/ S39F:DNG{Rd.	qϳ*(85II>^FGGG>|xP(aÆ~{޽eeeH e-
-B$Iw7N2MPP7*YѦ~-iVQO!Rʵ;xp	-5hi:f}0>$~gW&ߴW%mrY%Ve7űzs\ɏzgM>鏣5Wi$΄3>oKh4g%\I.tx	הOoP{)yRk>,,寿bvߝ<yeEE:HNnBqBH8Iu-?i"S3ןTmi6&zzKd҉cκńS733333#EQ]TTC  ȁ;[BH,&7g'4%ʬm	!EUU_NѾZE09KzZmYEݫGvL{aSګd9>O;0WE7 %߭9=L$|ijk?֟UaX@ig!D(̔5?	S]F;L푹J@{$(y<)_2u6kNߕ2>EJ'ىR⃘p3!0_>̷_I	Q/VK,>EJro2SW^~lܸa=.u@ѱ1˵b
-a]2oPY\uSlCgh
-rK$30EQX,;w|7  @n:sÂbhUw-E%V#VIrugZ$ھۆY[ǤXѮiX0	AIB=_䛓'߳$iϵEv&.%QϔKks	;9kma(-pOP{%*aK'=>HJx쇩oݸԴ"%Mk- 阵yWB%[h	ʬvhˊB'Lx`OE[|w?,j$fJhFH(`HO?tڵڧHpqq[oe2Ry|2J(E#ddqI:,%)FxYbfgwgfCc4axcJs(u&>e}>XEEŮ]ZZZ,>  7h_yѨ
-(O6'.^:9IS%$ImkzZldY>z/BRwSǍ<&&&iV^aÆ\<Y $IӼ-&VSSNC fYY8Aɓ6IϬ/[P GRwJstEӚ ieF#0zt:NL  d|||bbh44mXڽkZj(	Yjs5O!I$j+?Y[j(n$aPl3'ԙS,3Emjg-4w>Qm[|YǦIDe>M)v>u)Xx51"ޜg$xr'Y7=x6~Opkjުoho=3g>|(J]]]kk]m6[ΌC'` agYzg_)og=N#-Rue#=zd2qG4,    xADс'N7G?ڳgOmmlεL$y!YF+~3lg4H^"]Ϣks/xiz     ^(333O._Fv744朼{=0r       <|/^,..nkk۽{ƍN\s Z       @.:{Ç6nܘ3q     2vСzwQ> EQb,|УB     +us;Kc      ,{( P!     Xu 44               qG(CUWWSOutttvv&%,^uͽ	ۊD{utt{	uut\.>/x;;;߯-IQTuuC}8x`Kq[ G(      l5eNVlooW:p'O&l+:m=as	;Çk:NmHw}W600+W>|(h     R|?rO9tڞ^ʕ+W\QS3R[x<+Wx}ڲ&}in=aP&9GU8?Ç۵tѣko>O 7`"v     \(BHUUUUUUGtHd\.5CњB9&&V8΁&Bㄐ'Ojhm?R{c<yrA[֙>rB}]H]=yd|# MsssoooFW8p e=      ރ:(yg=j)8F*j?5K,ͭJ먥ioow}w֬<m-7f\     $tDJf!	t&\UU۫.-,%IsJp4zRؾ}ᢏ=&Mj_0Ӊ\K      ,{UUU/s%t0o~8in}X葪xz{{GY=      /5m+k8xڇWS\c      ۗN;t[en"uL[TG>zzPC5     O	'rp'a̝x	|Gz&Hw=.M3      0JNGG9;tPjS$ȑ#jEl=}G9	!ZO.4܃     %U:::Dȑ##(ksk=z9!QIJgg<xCa-ntA5H|OۧRoƛr     Իﾫc|t\Lhx><x0kJ|9R]]]]]f=x<~{.ދ?X@NP      ˘ڞ%uuYGD>|}AU	C8p*~\:+W9rDKmH7a4>۷O`&ֆr(
-J      S(Bɓ'D<rHUU #t     :\      Ü\0v      <xP]]SU       ERI,;;;8M0{0T3       @N=        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S        =        9q       @NA       S         Pp"1    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-dl-power-control.dia ns-3.22/src/lte/doc/source/figures/lte-dl-power-control.dia
--- ns-3.21/src/lte/doc/source/figures/lte-dl-power-control.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/lte-dl-power-control.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,8 @@
+     ]rW4[F7QTfjRYGʉw%ZM(o_ _iI$&TL2Æn M^'(_Yz<GQ:q8jɇqDW㫢>HaAaGhyXջaQm::_yveUYd.L/k|U?o}.<
+Mnoel7Mjhj4_Vo<Uu u/tǌMR
+`p4Lw/\/\/\<"b"˒(LK",gab\-ZXqE/dOlۗ<MW-jzWOUx_$QiYt8~xKo({s<ZnqmjzZ5;6v` !WzӣRQ8+ǫc]7+c(tOsb2x~<7y=XΌnMRRh>K%aSEP..ArcF.1ĩ244Ќ m%,͌cӗM3EB`D0-xqUԃA@(M@`Y>mpR$fp˫"yU2;pkD"&`$'VH&Wb))0.ò%~z]Zn~etz&?#eHYZTGu<
+x,,?[EE<_`Q|}{d9!!L2H4JoW#Je0ߏw|+[V(	{Bd@&,ᔪ ѪA ߅?ȋ!75003lV>IBB1Sr|A>קg|OQ<kPh(i EQ@ZQD$	\@i0qqId49D2a^0ʦy%="_C?/ڊ%ͯ>%RLAL<%}NllbAxٖFf|MXo@&+dS	]7Ø=D:{5Z73 	 405kIlQާ<F,g.Q5^9hjnQ	q*RHv*Er dꏨ}~ RE-: ]수%4ʡ=hi$Y].WK@5C% 3_6qa@ՒՍAHtb]ѰȈ9*5&`1648NJnȪ09cĹ(~QO߱naQ32r"+cLZ#v 9Y@T~wK$0CFO_idxqrDQ.@V N@| Y^i*|3(VuO 7ʯB="&23OJ֔xb`&QA=vP\~i b`vGzBH\kz"LCjs^{#w_\I"hujz=3SQA@&ʱU5gggs^L~xWZ"&*e3ml@U@Ձ%Ue+
+=P"qOTuiT&Tz@ՒӥDLuK=՞.E$A.LBӝx8ھǻ+ )EPN=슖>E'tvg<JΞ&VVPk:Log7Su>&νxq/޸qzl!* >LH;! N͵$HB46kn*1[l=~OwRχyB)`Eijj9G1~_kg]X"ڿ׳Z,xA_nJ`m97J0&7q@K
+=Țb0D}{g& adѳ#0$$8WbHvV7#~ߑ+.\_H5:'20ղO4>$M	(h]@@Yt
+r,c)aVAuFֶE9|ou\"u+Zq_htN_
+}ʚiy/T0& D㠨Ec&|F&^mgMڍZ:?<o^$JoBl.QU[WHw'Vp	i*G0 JCWvVUi!3uYyቫ/֗ l5KD	81upH-2{kջn(iTӁ_+%]USew"̅rH(jkyj2]SÐ	pL.]A>enN(ɦg5ef5T <}ޓɇzޒ  
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-dl-power-control.pdf ns-3.22/src/lte/doc/source/figures/lte-dl-power-control.pdf
--- ns-3.21/src/lte/doc/source/figures/lte-dl-power-control.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-dl-power-control.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,179 +0,0 @@
-%PDF-1.4 
-1 0 obj
-<<
-/Pages 2 0 R
-/Type /Catalog
->>
-endobj
-2 0 obj
-<<
-/Type /Pages
-/Kids [ 3 0 R ]
-/Count 1
->>
-endobj
-3 0 obj
-<<
-/Type /Page
-/Parent 2 0 R
-/Resources <<
-/XObject << /Im0 8 0 R >>
-/ProcSet 6 0 R >>
-/MediaBox [0 0 588.245 290.371]
-/CropBox [0 0 588.245 290.371]
-/Contents 4 0 R
-/Thumb 11 0 R
->>
-endobj
-4 0 obj
-<<
-/Length 5 0 R
->>
-stream
-q
-588.245 0 0 290.371 0 0 cm
-/Im0 Do
-Q
-endstream
-endobj
-5 0 obj
-39
-endobj
-6 0 obj
-[ /PDF /Text /ImageC ]
-endobj
-7 0 obj
-<<
->>
-endobj
-8 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Im0
-/Filter [ /FlateDecode ]
-/Width 784
-/Height 387
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/SMask 15 0 R
-/Length 9 0 R
->>
-stream
-xM,W~.JrrAxQ[AD!\IcP\I61tӐQtBVu!*%kb!x_OSuNuLT~ܩꪮtT̃           ?OG9f...";Gs?^w^s7x+>ϱ77|~_6yg6xCߎ]y9lyM>^zWdky{駏(cXC6_衇(/!o^~}Cz	^Kz	^Kz	^KzI/%^B/%K%^Kz	^B/饱A3GSzT8w;(,>rŷY~]zɢWs&'.<0Rzi%<4
-SF~r9 ɼ$u|vR2~Z-2:"2ߚlHpL⛘^Z{]nb偡K|)='sUgGKziWzi;E;GzId?<p*eZ*R)nB/mv'>jq[\K=饍GKo1GTi {ugΐzI/\jzyw q2=23T] ^"+yz1\^YpTk^V/-è#7To饶RNN8fnҚy)}+TfxlziK>K!/VpM
-\g`-tog|)}5,w_ӲSRH/m9A]U/-=ټT/m\kҊyR{):|Jo?#L_&k.nK[%{ΣK |\Gzi;G^rmM#>N{wNWʛKM4^j;^jy/rGz&K%KzI/%KzI/%K%^K%^Kz	^B/%z	^ڢN'>ײ'5|~77#lWڦgO}pC_{y'?϶?iCgy|g̻w}3nBg?Iz?x˞K/o6_y;eOCsj߲SO}lٓzx㍆3jji}eO귿q]_@-wܹiq]Z}{%z	z	z	^B/^B/@/K%^B/^B/KK%%z	z	^^B/@/KK%^B/KK%K%z	z	^^B/@/K%K%%z	K%%z	z	^ڌ~7N7^mt64z	Y]jcݭQȡkRqnW/^B/K˵JSzh8%zic^MN.0$9,bJF,cN)oxbzکzz	^B/mF1ƥ~1)/	RLLa:O8ifBs3ɑ)^B/KHK1ƃ7ؘF{f_g0g>lI38iI/K襵R85.m4#+xcz	z	8lRB%x?{Ć.eک&^B/6K{C(e)ʍT/nJ6DZ]L24Z\F;u/^B/K쥸f
-W׻zueYf$?ŖۆA>.y9Ook
-?_K%ؙ^ZaPK^B/Kz^t:a2%z	(RLz	^B/AfɤK%n`/yGGG}z	^m{iooO/K^^^B/Ka,=pz	^T/bI/K%(RKz	^B/AiKz	^B/AEa^B/KPM/K%K%%z	z	^B/^B/KK%%z	z	z	^B/^B/@/K%K%%z	z	^B/^B/KK%K%z	z	z	^B/%zU/~CvpK%K[q֭'|i]zw^B/^
-Wvs=z	zI/z	^B/%%^K%Kz	@/zI/^B/z	^4u:^B/@/N*ݳ^*.gz	^z?_uuŽtgz	^KzI/@/e~9^'K+3$Z6t<B4@/x&,@
-e^Zf,*Z/*KnJ/%$x%Ǘ.[^U_KK4Ah)P/l[rH/%K%Ko]+9Բ˶Nr%^6Ka^7 
-o;J6O<^*-;߀60?^K%KziNinKM-YJ,;FqyJ^KzKz	zI/z	^B/%%^K%Kz	@/zI/^B/z	^B/%z	^K%/.~oK%zR1Fm}/E/%%~^^B/^K`8hKOԆ>z֍JegY9^ CªK.;^lZm)n^K%Kzi>;6Ji}0ǃ2TlԺ٢Fog'|EKkPKz	z%,kIaHǟ$z($K|zv]l/V]Xwr^B/^KlEKE(|k^_z)%{)쒽lKR^Bm\Κ\m|)ˎ/E\/7[/%%4bݿ黖tA{)ez)le/eK/%%q%/uVNKRn]Rnl/gNn^K%K7X7KzI/@/%^B/^K%^Kz	zI/%zI/K%^B/KЭ[^x{1K/|WU/@/0K%K%%z	z	^B/^B/KK%%z	z	z	^B/^B/@/K%K%%z	z	^B/^B/KK%K%z	z	z	^B/%zADopˇSdWu9\z	^6i2QJ}T2zm
-&^B/eF/Uù&K%K5]JFxmZiҬLz	^B/5FiJk/U߽ϟ˸L.(K%^B/5`Mx|q*Km
-&^B/LQ0,_6xw%zI/L^Jǂ^eT-#Lz	^B/5f1/(*<VH-	&^B/q{Q5FdD~}KRrl%%v4z	^8z	^d/bI/Zm@/@/;tpp鏎^c=V
-nY%zK{{{a/߆<^B/q{8L&㨦K%n`/qvv6K&^B/Ka2%z	^%^B/Kq23%z	r4tqqaϠK%%K%%z	z	^B/^B/KK%%z	z	z	^B/^B/@/K%K%%z	z	^B/^B/KK%K%z	z	z	^B/%z	z	z	^B/^B/KK%%z	z	KK^K% ^B/^B/;dtvz	wvW;CO#AUg%{+ZOa;zR|rV
-Nï8,r5v/]kϬ9l^V@/h/O˝jtըo\9lvn^B/Ѷ^R9+Ty*δh7]FpRsSޞhɲSKKnRlGJ	UWp2ϊw,ïE/۽]ߛJ\Y~䟕ӧ0=={&^oa|).pULR9rz	Dk{)}vytR=3iLdV=ޞIכl#URn/|4K%>T9>ω3*{5{&4mP#z	^{)qeRũr]KgEZ^x-soƗKb/΅r~ɐEH^~=REl؞=Skj7K͕ja/f{iE;zKI|7*.R{S}ԫT왚TsZU.~x6iK616K.]qrrrxxKƊ{ixɤK P0z	 4K&Dz5 تB^it j?쥽=q 7c^d/cK Y,% {)%^0}{3% (LK% K K K K @/z[vTo;^B/oV^==4<3zrWݞ왫xk=z	^b['a0:7[Otk확<M
-wچe*%*r&]5Z{ZatOmǃ^B/v/NۃE<V4`̮D#8)oO|m4cbd%7zWʣM*oh+8g;
-xCfѢMM<k7^DK1S{Bɍ&+<y0g+LmO|Yw{*LMR\
-r$Jce;*C":6mj!W3]a@/	<s)
-+Ώő׹{fzqӘȬ:{꯽==Sk7KFY?_iW9odW܋[s=N/^"{,3gyeTt̚WK=SkVKW_6(++ԋfKz	CDk&Ɨ*N,_=+xڤURnkqğ{[Ulz~|)%_;@/쉢pH/4=q>W^Kُ_SgjmRf{)RS-la/h?Z/wN|n`2[J/%KT埱<y4:TzV^bܤ͏/e7?p}lˏ/|\'ג7%vnK^:<<<99g`e{Cﱑ/%v4aL/!wJK%B/cI/&O/ KXK %(ASk Uz^K`M0\8(gggdK %(RLz	 ^%^ڝ;w߿o?_|ݻzv8NOOz	^gK%T%z	z	^^B/@/K%K%z	z	z	^^B/@/KK%%z	z	^^B/@/K%K%%z	z	^^B/z	z	^^B/@/K%K%z	z	^^B/^B/Kz	^^B/^B/KK%K%z	z	^^B/@/z	K^^K%uv&z?̠W\>$W|MG/@/6i2QJ}T2zI/Ll*WU\KXլDjߎ/J/:I0%^b04JT\k|x\er@z	z=3	c//~=nAResI0%^bcte/-xWPz	z+Ӵ屠GYC/f7¤KXS!͚c^<KQTx8YWK^B/^b-ܠ=h2r^JΜ<z	K6:999<<K%\C;jv/gLz	^(RLz	^H,zkankM9::
-%- ޞ^B/т^
-cX/K ^/K ^Œ^B/ܹs}^
-cI/K%(8==cI/K%((LK%z	%z	z	^^B/@/KK%%z	z	^B/^B/@/K%K%%z	d?K%K%%z	z	^B/^B/KK%%z	z	^K%%z	z	^^B/^B/KK%%z	z	^B/%z	z	^^B/@/KK%^B/KK%%z	z	^B/^B/@/K%K%%z	z	DΛoyppT|ӟG>Ҳ'o~gC7O|+-{R/RC?=\v?~eOj6Vs/}K-{R?[KJ]7r|k_Gy!믿ؕ6ַ";	t-u$K9ַ+|=^=z	^Kz	^Kz	^KzI/%^B/%K%^Kz	^B/%z	^B/KzI/%zI/%zI/%z	^Kz	^Kz	^KzI/K%z	^K%z	K%^Kz	^KzI/%^B/%^B/%^B/^K%^KzI/%zjn~X/Q[^KziGĆh?!w]N3=XC̮6rؼ8f>я>                       oS
-endstream
-endobj
-9 0 obj
-7740
-endobj
-10 0 obj
-/DeviceRGB
-endobj
-11 0 obj
-<<
-/Filter [ /FlateDecode ]
-/Width 106
-/Height 52
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 12 0 R
->>
-stream
-x[nWe$8#
-pqf8.MӖi3v&'ccf{~'mjӦEHtyMaՊ@4CK4-CdT:dv(G	Au*_bLJNQs&SfCPX,rhVir\gIt:,:PeFp8T(
-NX)qRrb|>NTFY,2
-N@1Qa,;9Fܧ"t2##4I˥2߱;z<fyzPѨFzݮjFކblիeYIB>j{4xW 9j9u{g'L;;E551jx
-.2gFͰ]H($^/̸1>X>	Hs!ID"A|> qQS0IӀaT#HQLo	`l<rbjVXLF)H3!0`"11Av\eHIgZ,8KF\.x54
-EQHO^Ʉ䝅XZUWIXp 1uhCnۇRI0b/jvA_1)z
-arKIݵ;ϫY]3%cZB3AR )!A<"/G#4E%cQԍ`T8Ѭ,s{{7`$IJq`lc޾}ygE m׽3Rc*,^ǀntNr#Ӱ>5DZvTLR\V^%Br?ՄUn;9WIT͵jYY[GlFY^t&3źt_B=z+\!AϦD1eJ)Mdr-ԓ'7DDX$iQ%ydLPOI7v?eݵѯi׍v6Oq!qC,d/ QV˕2JY-
-J*Wr" 8EQP4A=n7N8:0<hSxXސ_7˵f3}&r zbPoWh*;;f/eKcw"t!`)cH:9h9LfjKKKIAU`Bq!O5"tl6DjBO:y:yw^A}8 1_[zyPVZ:zV+]vMZ5Z}r	G5u|88cq"!H8Do.<
-pͅ&&Qv I1nGlEK!P<>j2_8Ad9Z91Q1
-@B͂0CHpHDXBEBISvCX
-"x1,.*nmm)Nn\^/⬈0N rbG'7N
- W?)^Iw[ϻw ʾ3qPJnR.ʕ^>!]wu;dvڰP`\uP.@tB! $pZKl+,ֽ|\_]1lnm;jB=v[jwue6ysmyKq_NޚFj2>ͥ{f`q޶bj/f˲	\)fIvyPF]ۍ}(t6`^ċ8u{PaXnć:Q4;FƜnN̋y-.s;fj왼~bB!HfhȲ<9!RfTB~Q:yx1I>CNӣleXc-ԛ\.P|=`rK%X^Awt'ɜIlu:B$ڦ	6y8ʿz8L 3.^Gh? BKKrD,Հ"rYKI&sB9lư3uuHW(h4fŻe HHOHljŎeBt:_զVLMMWTiHVᲈElz"v%f=zt7nܻwojÇg?}4>Ν;nݚZM^~e?~<1ǣ ӈݽ{ۧ{;ׯv~ޞ?Lyb&=Fڵk:NA˗%bE+
-/^xωgϞҭM>y]A7od"/H
-blĖ.k[p\
-endstream
-endobj
-12 0 obj
-2404
-endobj
-13 0 obj
-endobj
-14 0 obj
-2404
-endobj
-15 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Ma0
-/Filter [ /FlateDecode ]
-/Width 784
-/Height 387
-/ColorSpace /DeviceGray
-/BitsPerComponent 8
-/Length 16 0 R
->>
-stream
-x   mH@                                                                                                                                                                                                                                                                                                     w
-endstream
-endobj
-16 0 obj
-316
-endobj
-17 0 obj
-<<
-/Title (lte-dl-power-control)
-/CreationDate (D:20140609020309)
-/ModDate (D:20140609020309)
-/Producer (ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org)
->>
-endobj
-xref
-0 18
-0000000000 65535 f 
-0000000010 00000 n 
-0000000059 00000 n 
-0000000118 00000 n 
-0000000316 00000 n 
-0000000407 00000 n 
-0000000425 00000 n 
-0000000463 00000 n 
-0000000484 00000 n 
-0000008420 00000 n 
-0000008440 00000 n 
-0000008467 00000 n 
-0000011012 00000 n 
-0000011033 00000 n 
-0000011049 00000 n 
-0000011070 00000 n 
-0000011575 00000 n 
-0000011595 00000 n 
-trailer
-<<
-/Size 18
-/Info 17 0 R
-/Root 1 0 R
->>
-startxref
-11783
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-dl-power-control.png ns-3.22/src/lte/doc/source/figures/lte-dl-power-control.png
--- ns-3.21/src/lte/doc/source/figures/lte-dl-power-control.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-dl-power-control.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,41 +0,0 @@
-PNG
-
-   IHDR       9   sRGB    gAMA  a   	pHYs    (J  -uIDATx^o$]&$%'%"uLyc K]y#YCԘIzEiPna0/3/|!nC^Hd6f{^h<1^[U]=Nw>PtSO<ߪk%  3#    0  (L   
-; oos'x".\fA1?3???|;0mo/s[V>ż}gy&?=yOLLL%Kg??S<|yx7|}IƯT^28>8)~<S~8{*/@s?y	F|SMzus}vZ|\G?q  &@   	  @a  P   6buf,br[Yj>0gZ^v"}cg}-Yױ۲p߉.oLj=&"Wjc{1{+F掿8ʵhZZJ}z̻ѬETK[ױkVc&.i%)w}JZnˊ߉a"2>;Ǎ7ތjyRϱNյ_#@TjQ+T\$[gc~ulՙ騧b+iUxrBa;bV
-8pvoI~!1}wRv.lr:ձ\9?竱~lU
-CAeqH:}9y-'%}河QӻkTTF#Is?RQkZR=㱅nFqM@a_
-7i:_X3/c;5A(G}vVw'FE}U%D˷m3zz{O?ݖ99i~t+}Mѯ]z]}8{m~ϐwajDٔڡ?jv6*yb`jdz,'Al6g;+k/ľ!5xz!춬G1c`c.r?y(GC9m7FXˋMYDIZviC+VxrZ	X{װ_Gɱ]>C/oWqf)j4]<82mXzbv}ubTx:e탤BW(GN_Hfzhe){ԜH~)7%Z-w7,65/`vރN";&m߿9fKՉXiݏ-hG~a^=~8{_ͧ??ׯ_K`w7ST8hxxG(ڵkO|"{4sss7{"=zǳQ3c   $@   	  @a  P   v0}{ߋ/%t{w}K}vܻw/>%w~wqs;s?o}[yxꩧFzg]_ZZKg?|r^BG@moKH}ߎo~Yx8@ſstmn'nwټdp˿KM>Gߍ^z)y晼____?ƽ4KHy+++~?[}C__FǡۻuV<x {QpQ>°sNv%5}QpX^^!  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P 1B&cllg\Xϗ.3IfVM;${};gcL.   1jʵhZJf-Zz!b@˱MF| l|6+ͼ`HUjQ+FPZ]z  Iz,L~i}l2Wcfcy:/}WbrcXLדEDyr4tSZ]G(ZWg%Q  FBH+Sa\JS25kk1 nDt#.5;^PT1N?0$ŕ=Qm㗯Fw;m/yA^l/8]d;'YZMgS   1j(uΌ6Xj6وJw;QYy8[XNϫ7ڨJWZ\\,~b
-73~9/Xvls1{k%JkcBL$!9  F5ٸg+]oƦ#N0M$?݌d.5cUecQ6XlD/ 04oעܨͮI~O;,Zk{.mHpxZRÞG}̴v[gJ՘X,o┆|DF `x,Sӿ(SM[ԧ7YWiW1 :3騫G\;ܼ^_x!iw[(XMSq%z6cnT^gV;*]J  FT֢3jk6޻UVaŧT5;cw*;*%Z-{"llF'|$~=uQݲM0hXgR۵r:7R-]gLՊ: Vς#u֭xA8\6@c&Zz7ވKΟ?F#{awΝw^ŋ=B`__ Q#@ &D  ؇t|K	 081_j|3^z饸}1c 5@O8 կ~5/8||̙3_`d~1޻01һ0s+ė%!@0jH^{~z^ طNxvZ^ 
- F vY F  0s Q%@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   sȭ[#bmm-b~=s;wĽ{G/^R1 דO>gK`w  '@bx?>FE|sz+{d8~@   	  @a  P   &@   	  @aXͬs  P164{fN| 4YV+lO1/:MNƀ D  P C(;?|fu+z,L~muvZ_|<Omh?u  NYf#J%Yw7DXQrm.{)ovYc]v[xO瓧Ŵ3Q=Չ,=~ OA?kVnR'AߍF9^Ofڍ&Jkx?64>;s; Jqj9KwFݥhFR1uTm@kD'eb T `H_z]jDe~6_f@rԚL^-rUc=%kT&@J#nތF%0_^1@՘FEdu7/r#7N%/,lF5 8	w2JS7hTl~B,nQF\w6]ƖJ3iˊ1:;.wbJ>~Q-mT{ Ziԭ[#h4G(s\[#Ν;q޽Fŋcyy9{+  @a  P   &@   	  @a  P   &@   	pJߚ}SV 4NrlqڈrSDvd pTjQ+B5娗k15 xL8U.h,馴\Q7d)f^|ukY2mtj}Wcfl2Vb2{o<{n']gqsy{:m}:vi}1;n3 P Qn,Nv}!nqx^Б6KQXVMZLR<o/KJ=;dkQkn.oݟOY#c>{߫>m帒-_J$۬J%Y{}7R|Jũ#f @fr\-7b)OwQO(Gm.ig磲>ڍQTX{n_$t> *+=Ӷ7;uJ^_^{޿#f u:Iͬ{ݥFTl6{5Z36aqS6XlD/>t{gߎz}Ǳ 0Z8d{gnFQC{SvF?jLl7kwqJ򕉤~.9^_꨷ F R{O^\I涑wuV`wT4;DzGκWc&}gGNl3 P T֟?=5W:ơ.CS~ٸ]+G}S~#.uF]OƖJGc{75ԹQRt m^Hݺu+<x=2\Ο?F#{">[o=2ܹa\x1GH  &@   	  @a  P   &@   	  @aOƟɟ
-?G?{ `	@^_z={6/'?G>0F A?( 5   
-     0  (L   
-     0  (L   
-     0  (L   
-     0  (L   
- ؟|YˏLmV_0Qi&vNNzp?Vg? 3jDV+q΍~;+עգ3-Th[6kCr=*JD}v Z`<fh?gxX_J\YZ 0Izsz,Lvw\hOד~w)+I`WQ  $@Sviɞ?iH(EuZLO.$K+Hߺэh[4Q+:3ĕXKo|5G 0gj1^ڼʰ~7mȳnB{\1{fՏdWbe1ݲ
-jKǶq   ޏVǍ6g98usuR5Vj#⥻!B  DಳL9j+i߽5ZK|$-TV-Py  (,7ʔwyunK8556ʫB6?qX]~nL  N/zz+v[ZqckQkޏ٬]nFmky6m~OD'dw<>_ҰRu"VZ7z/;"Rݘ՛  X+uV<x {H\,..hd0ܹa\x1GHq:   q̄n5fzAO-
- `Pt:]y}_O~駟ΟC.L]50O8 ~뭷ҶwOs0z)!@0j	Ǡ &&&_	Q3f~@ׯkg  -cv5! U{  	鄈g%  0x> #@s  `  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @aphz?>    &@   	 ?|ܹs'= Gfuf,i2B  dHܜ& ͧ|ɠYɣq#75[jݏG`0kldj"C6fWc&iOJ{Fs#G01S~6 #B o|6+ͼ`Vg6򒶩Vܟ=e-Bc~۞#uȕ/E)z"@Nk  jd,.dզ>:邳qVx5٤i$h/Ym_h/nOmWvtROwow{_ن/t'4QZ}9&㣧J3N=
-WoGOs @ G!+gtQ~YwNRT'6(ݓ6Xr\<um_t_>}#.e}I^XH޹i[߬o^$/˶=}4etvXWZNtv$R5lF1dOWuڨwQg0`:gөn*+Q~7IcqnEip/՛QmTbS+Qz,w*+ѩ+Ym7>;RM[lQo7yPz9_Zn~{`WyH9.#oܟĶ8ͨ]gw ɒ7$^#qMI2i ~?ې4W
-U6 8]r7{+]rţmST'tݧ{r~);1k߆Fn엪1uV@gs[r @ h wWvvӁqSsIc835mN˦d]J}:wnspԯm8߿ǽS;mqa8Zl~@`	orgJT:wI;6Ic~-gmsy:_b1z;7ooލggD0p71ͫKc8{wec6WֻH۵rԧ;j>~6 jHݺu+<x=Ж^M*U'b5:MthdrEsIx?z/r>;  8㳷]M-W$jnnN`O '$9=	pE  n>A_ W_|3\K/o61~y	 8||̙3_ q 4]fffvxxWK_ Ac   葆^{-_& pڵz	  d   gn|я~ρ  @wB  ܹs3؝   &@   	  @a  P 0Vgbl,&ca=/~3	YI~3q
- dHܜ& ͧn X<~?q^Z?}p4^s.r-LZDtj$Xi3VSH=~qa<?%Ng3o\ (Ha3>f^3QOǋSyIb+Ϟi!1{?iDmϑ:~ʗ?=}p G_;~N^z6v2Vb2wҽc5٤in/Ym	n/nOmWvtROwowFw_ن/t'4QZ}9&㣧J=}Wo({?#]L괝>]~ڽΉgr}+_iov>ǫY+\k5UN~++|kUI&U٪V*{[ngo~Fk=z\޵ܥe޲ֿ>-0p%5l
-۟U:7q:-;ۿmcgϺk쵍SS{v?8k}/#&@pЙDo[dFVXOCsڍy˷Cl:nm|iن#_6[3볳}e=̞u۶ԻgԩoTͲ-wi ͨ1=mdI#WFTK5ީi ~?ې5^Kr\4q0}ݢJFw/;	`$0Tcv-ʍjݧt)ʱMSqQ_m's)k߆Fn15_pixֳZ9_xRN(v96v4H0 `wڵ5~9QjY;c5p:g`k>lM]Jcky7s6
-ڦ~=fWa0p7ܾSQCtx\>Vc&ٻqs+y\o}zsݥultt=+JITv
-.wIo]^)gF2iOm.OvS{ZםoJ7:{dzO{aobj1Wk]SuX+d˶7k!YߍTKI<㷲2.FjD|v:6O{'٦HØp@cG֭[/z׻R
-pҳDmZ۫^]`0]x1GHqB077=_44 `g	f|v""O[H 6c&< Sڧn>-R%`Tq:c y}_O~ KK@C8 Q㭷KwO< n> AtD=!bqq] .L3]~=^{8sn `8hk׮	   D0Ο?z>Ν;s GtBٳg  <	JCV  2ℝ;w.  G   
-     0  (L   
-     0  (L   
-     0  (L   
-     0  (L   
-     0  (L   
-     0  (L   
-     0  (L   
- C{ 0  0  (Lacc1O3yYIֻJ&79NXXLG @j̔fZdjƥ;7\fVδSmUV6^۬ETKT*  `QE9^cSj|v>*шͼQĕŹ,A  `_]Sy=&	uN˧vZʕ$0K pl
-Sviɞ?iH(EuZLO.$K+Hߺэh[4Q+:3ĕXKo|5G Ia1r~/m^eXKr6[Y7R=Fv=3IG2M+טnuq܈c8 mj֢q,>A{u_JfzcJQm$[t7D 8z,|<SZs@gwoG}xR)?iq3ImKq^a&@Ⱦ{{ͨ62]zv`zMͥj5`}yV/ @mi%6MEy?fv}:Pٴ=p|iloI:JՉXiu>K ݾH0~KwcjTo(k9Rn݊d ;wĽ{G/^R@ 6z pJLO7xEA9! RS}g-n
-%D   `B&Agż<3q~>Nꫯg>|^D(1~1~y	 ?q\ۙ3g#E q`waW^w#E1 4<kq`t	 NxvZ^0Ο?z>Cx J m={Vx ؆  xm s &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   &@   	  @a  P   6J~^BÇ:Ν;7n܈wy׿^__K_|np8%t4wG:Ξ==yO^281st[ZZ__~:/#HoV>7: *=\>Ŝ9s&T^28?j><}/o@}o|zBڵkyW^y%bwsP]wϠz*xGloϟA1O>dF ?c     0  (L   
-     0  (L   
-     0  (L   
-     0  (L   
-     0  (L   
-;ThZ3(1èc+ 9pxꩧ7ߌ1os=ET*emɴݔ:|8hΝ;?O.i??gghozgQ3r	  (  0  (L   
-     0  (L   
-     8S    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-epc-x2-entity-saps.dia ns-3.22/src/lte/doc/source/figures/lte-epc-x2-entity-saps.dia
--- ns-3.21/src/lte/doc/source/figures/lte-epc-x2-entity-saps.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/lte-epc-x2-entity-saps.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,13 @@
+     ]r6}P)64Q<$dI*%͍,(3~o(_EJReMvӸכ.͗|v>dl<drj$K?Wyr3ߘ-(ߞ}LI14%ta
+&IV&EgE:%72uogaYjUn<]2=~gj^ԳEr^iW}?S"_W{/3,R/֊~VfUjfWA|SꋧnIlfZ>  aHk,Bg;ep~~by됗4Mf%jߦ,]lY-|N&_?Fۮ{ǵDM-_Iq}U~Qw2Uw͊`߇-V&&]nIf/t*v._k1M|UO2=Xq=\={&_'+?lyLK0)&mCr\bi(#Da* h4}@Vhअ!FK%O%~<.Efjތݐ	jRzp-$E/)ZZ" _L68}!<}p˯(o?ObY,Dk t{nHK8VFt\Es;s=VDV[ɹ+@ږivu]lJiS EPN9mH4ZË9Gu1I8+oo1	(Jq'R;8%/W>@5`Q=A_ s?bx<	0J\VT%9JZL@c	D+K(&=74kKUre-(Qߌ$@Md&X{nD6]	jܵm>;48Z@ 92#(P}x<LGx-!)@HyCaaeb+9Jۑdঽ7e JOpl%F~oQbIKa+UDYZQ1ErLǫ2os*ۼ0ư&rT76bQ):y21][l+ʡUy}~G]|n΃$SajG֖IfxgU`r]r
+
+V~\$yѩ.?Ch2T(wy2.0n5ƺ]]hÊUQsȹcA&aheƺwhB 7J;^1lZ֨Qף¥܅U~K.$VԎ}˨)3{u?u>|:a&i?Eq6Vȑ7CtrlRܨQ#RjՃ'L0=깱O2|3f/&$wlט\W#lT=<Pzte]TeQ1i(Q׃2̜7N$U_9gMspN ?/L3umqeXT^_ZL"d W;<IK<ȭNm?*zPOVMnqE<MxT]%6>(k
+m!ãGA?T=7UNЈ%z9@UmuQ{xar׺b{bgϷ<3QU%8(*]
+QpOd2{z/W;W8]&r]es>+@M6?dŽc%i~gi*3&*"í[ImZ{>`Q\0퀒iv5I_SrGB Lvs6mwCX^cUt7\'}ZƠ[l4ZRqǶp,ldm{c:tptm,4n1RcD5'~Je)#F=֩w3ݞM#¤ȹGv6mtpt+)%>?( A?B|ή\N"'}ЫٴsGZ톑[{@$r#TZ>e
+G=$=Ny17|Jl{H31jS-lDBB2nf%GBUX~7#W#Wjw&"-U= I"͈K;TqTL2T/j5^IIʴNrqA#JJ::v_jue1n;Ng@[|FLr\ii|NA=LI@VZ+ưw(EsB3o$-sƞpnu9]ipo>oɪ{VV,@F{P3$¯kc0s$ɪ9#YjŏU٭mՉ~Vl:8;cS/Jy{̅2s8E̡֜(a64Rw|ّG~ԋh/v 0U¹-U"p0QB F[0.;5 * օe &	?eZ[_;Z2ؕv
+RH4m罉Pl%=G"$y` *$l]3cPG>|eP u=\*%Zk,(f6S
+Bsf]`4حco>#%Wkv{lk ] O%UwP>`0UtԸd_кΒ^
+#bM>ցRq{?cPCX{L-ً"erii&7ҽ?!yi$̷A+瘠e#c9c'mØgV7=dDmGFf<TmЫ.t,Ez.O|&7lcl>RÎN{~Ռؐw̓mw
+c{tǙ@cq6cDc#	nw`^Blq0ÍTe}17A9m8[5	ͻ!E+hch Zc6'819HnS1yWAxn$w%Ҫy0kJ<̈́hĘHP=f F5|'k$89N[~ ШSp͒ M}e7A&Q/<foC[Y	nG̍@>	enI5ݰTr$cFJ1yөMMh0m-%3Cd[-<UʭcJAlaúð!ZG׍fVnN(>bPh$m1;m"5(nO݌f .v;FtA,!CE"-'tOpT wlkǸ`et;Xﺱ}u5PLIfAB?ģ.YJ
+$ 7Kt\h`TRqAۓH
+19L'Pf6"ݧ:xH0ܝԀz|A:19̘j\}:A͂.xݏ8<J5P~w*j\*7ust BDQG<uG%m/:u}7:Ǒ딗>?~(/U|?AI  
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-epc-x2-entity-saps.eps ns-3.22/src/lte/doc/source/figures/lte-epc-x2-entity-saps.eps
--- ns-3.21/src/lte/doc/source/figures/lte-epc-x2-entity-saps.eps	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-epc-x2-entity-saps.eps	1969-12-31 16:00:00.000000000 -0800
@@ -1,2753 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: 
-%%Creator: PScript5.dll Version 5.2.2
-%%CreationDate: 5/22/2012 10:9:48
-%%For: mrequena
-%%BoundingBox: 0 0 469 355
-%%Pages: 1
-%%Orientation: Portrait
-%%PageOrder: Ascend
-%%DocumentNeededResources: (atend)
-%%DocumentSuppliedResources: (atend)
-%%DocumentData: Clean7Bit
-%%TargetDevice: () (52.3) 320
-%%LanguageLevel: 1
-%%EndComments
-
-%%BeginDefaults
-%%PageBoundingBox: 0 0 469 355
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-
-%%BeginProlog
-%%BeginResource: file Pscript_WinNT_VMErrorHandler 5.0 0
-/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
-setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
-ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
-def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
-rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
-/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
-typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
-def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
-exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
-/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
-{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
-readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
-(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
-/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
-tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
-xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
-tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
-{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
-tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
-rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
-forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
-/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
-$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
-ne{grestoreall}if initgraphics courier setfont lmargin 720 moveto errorname
-(VMerror)eq{version cvi 2016 ge{userdict/ehsave known{clear userdict/ehsave get
-restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}if}if systemdict
-/showpage get exec(%%[ Error: )print errorname =print(; OffendingCommand: )
-print/command load =print( ]%%)= flush}if end end end}dup 0 systemdict put dup
-4 $brkpage put bind readonly put/currentpacking where{pop/setpacking where{pop
-oldpack setpacking}if}if
-%%EndResource
-%%BeginProcSet: Pscript_Res_Emul 5.0 0
-/defineresource where{pop}{userdict begin/defineresource{userdict/Resources 2
-copy known{get begin}{15 dict dup begin put}ifelse exch readonly exch
-currentdict 1 index known not{dup 30 dict def}if load 3 -1 roll 2 index put
-end}bind readonly def/findresource{userdict/Resources get exch get exch get}
-bind readonly def/resourceforall{pop pop pop pop}bind readonly def
-/resourcestatus{userdict/Resources 2 copy known{get exch 2 copy known{get exch
-known{0 -1 true}{false}ifelse}{pop pop pop false}ifelse}{pop pop pop pop false}
-ifelse}bind readonly def end}ifelse
-%%EndProcSet
-userdict /Pscript_WinNT_Incr 230 dict dup begin put
-%%BeginResource: file Pscript_FatalError 5.0 0
-userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup
-length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding
-{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end
-/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div
-cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end
-%%EndResource
-userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[
-(La impresora no tiene suficiente memoria disponible para este trabajo.)100 500
-(Realice una de las siguientes operaciones e intente imprimir de nuevo:)100 485
-(Escoja "Optimizar para portabilidad" como formato de salida.)115 470
-(En el panel Configuracin de dispositivo, compruebe que "Memoria PostScript disponible" tiene el valor correcto.)
-115 455(Reduzca el nmero de fuentes del documento.)115 440
-(Imprima el documento por partes.)115 425 12/Times-Roman showpage
-(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end
-version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse
-%%BeginResource: file Pscript_Win_Basic 5.0 0
-/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
-/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
-/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
-d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
-/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
-/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
-/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
-, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop
-languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,
-d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld
-/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix
-currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit
-counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b
-/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~
-d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put
-/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq
-{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `
-/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped
-{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}
-{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~
-itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5
-ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform
-nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -
-neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0
-- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool
-2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e
-{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
-/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont
-{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1
-dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d
-E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1
-^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2
-16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}
-bind d
-%%EndResource
-%%BeginResource: file Pscript_Win_Utils_L1 5.0 0
-/rf{N rp L}b/fx{1 1 dtransform @ 0 ge{1 sub 1}{1 add -0.25}? 3 -1 $ @ 0 ge{1
-sub 1}{1 add -0.25}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
-snap + +S fx rf}b/rs{N rp C K}b/rc{N rp clip N}b/UtilsInit{}b/setcolorspace{!}b
-/scol{[/setgray/setrgbcolor/setcolor/setcmykcolor/setcolor/setgray]~ get cvx
-exec}b/colspRefresh{}b/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo
-{/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d
-/AddFontInfoEnd{E d}bind d
-%%EndResource
-end
-%%EndProlog
-
-%%BeginSetup
-[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
-1 setlinecap 1 setlinejoin
-/mysetup [ 72 600 V 0 0 -72 600 V 0 355.46456 ] def 
-%%EndSetup
-
-%%Page: 1 1
-%%PageBoundingBox: 0 0 469 355
-%%EndPageComments
-%%BeginPageSetup
-/DeviceRGB dup setcolorspace /colspABC exch def
-mysetup concat colspRefresh
-%%EndPageSetup
-
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Win_GdiObject 5.0 0
-/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
-{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
-/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
-L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
-1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
-/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
-{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
-gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
-/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
-MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
-M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
-+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
-/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
-GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
-/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
-makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
-/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $
-/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt
-~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0
-0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b
-/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +
-: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~
-XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S
-GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix
-currentmatrix readonly d ; ;}if}b
-%%EndResource
-%%BeginResource: file Pscript_Win_GdiObject_L1 5.0 0
-/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 2 d/RepsV 6 d/RepsH 5 d
-/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d
-/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d
-/SetBGndFGnd{}b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx PaintData
-imagemask Width 0 +}repeat E}b E d/GDIpattfill{@ ` BGnd null ne PaintType 2 eq
-and{: BGnd aload ! scol fEOFill{O}{L}? ; FGnd aload ! U/iCol 2 ^ put @ 0 eq{!
-2}{@ 1 eq ~ 2 eq or{4}{5}?}? -1 $}if E @ patterncalc : 4 ^/PaintType get 2 eq
-{iCol 0 eq{6 -1 $}if iCol 1 eq iCol 2 eq or{8 -3 $}if iCol 3 eq iCol 4 eq or{9
--4 $}if iCol scol}if fEOFill{eoclip}{clip}? N patternfill ; N}b/hbf
-{GDIpattfill}b/hfMain{/fEOFill ~ d ~/iCol ~ d GDIpattfill}b/hf{: hfMain ;}b
-/mpstr 1 string d/mp{~ @ length 12 add dict copy `/PatternCTM matrix
-currentmatrix d/PatternMatrix ~ d/PatWidth XStep mpstr length mul d/PatHeight
-YStep d/FontType 3 d/Encoding 256 array d 3 string 0 1 255{Encoding ~ @ 3 ^ cvs
-cvn put}for !/FontMatrix matrix d/FontBBox BBox d/BuildChar{! @ ` XStep 0
-FontBBox aload ! setcachedevice/PaintProc , E : exec ;}b & E ~ @ 3 -1 $
-definefont}b/build_pattern{: GDIBWPatternDict ` Width Height E dsnap +S
-/GDIBWPatternMx matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix
-GDIBWPatternDict @ ` xOrg yOrg E matrix + mp CTMrestore}b/patterncalc{` :
-PatternCTM setmatrix PatternMatrix concat BBox aload ! ! ! + pathbbox ;
-PatHeight V ceiling 4 1 $ PatWidth V ceiling 4 1 $ PatHeight V floor 4 1 $
-PatWidth V floor 4 1 $ 2 ^ sub cvi abs ~ 3 ^ sub cvi abs ~ 4 2 $ PatHeight mul
-~ PatWidth mul ~ E}b/patternfill{5 -1 $ @ ` Ji PatternCTM setmatrix
-PatternMatrix concat 0 2 ^ 2 ^ M 0 1 mpstr length 1 sub{1 ^ mpstr 3 1 $ put}for
-! 2 ^{currentpoint 5 ^{mpstr S}repeat YStep add M}repeat ! ! ! ! E}b/pbf{: 14
-dict `/fGray ~ d/fEOFill ~ d/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d
-/Height ~ d/Width ~ d/mx xOrg yOrg matrix + d fGray{/PaintProc{` Width Height
-OutputBPP mx PaintData image E}b}{/PaintProc{` Width Height 8 mx PaintData F
-OutputBPP 8 idiv colorimage E}b}? pathbbox fEOFill{eoclip}{clip}?/Top ~ d/Right
-~ d/Bottom ~ d/Left ~ d Top Height neg Bottom 1 sub{Left Width Right 1 sub{1 ^
-2 copy + & PaintProc neg ~ neg ~ +}bind for !}bind for E ;}b
-%%EndResource
-end reinitialize
-N 265 10 M 265 544 I 3791 544 I 3791 10 I 265 10 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol 1 Lj 1 Lc 3 Lw solid N 265 544 M 3791 544 I 3791 10 I 265 10 I 265 544 I C 
-: 0.668 0.652 +S K 
-; 11 dict begin
-/FontName /TT35224o00 def
-/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def
-/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
-/PaintType 0 def
-/FontType 1 def
-/FontBBox { 0 0 0 0 } def
-AddFontInfoBegin
-AddFontInfo
-AddFontInfoEnd
-currentdict
-end
-
-currentfile eexec
-9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853
-046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0
-3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2
-326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317
-a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7
-553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022
-79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f
-08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938
-610bff26bc7ddabb1ad5fccecd57424a328981db674bccc7a683d13c9070
-49c13ea323460311be28af8da5bbf4b2d911cafc818b9ffe12bd8b169d53
-d5a78e973cf1976f17a5f036bf38feb5db48155eea2443bc093a135a9442
-f8752d3cac9d85730cf5b61e72f8ce77ce1e88ad1f79cad09e047152fb28
-cc0830bb6db65d3dd7c8212de11f62ccfca27362a8e3ce8e18e54227094c
-21c3001c912939361bcd0f7af7a7cc0c83bcaeb5c6d0ee313ae910884402
-d618097897e1ab0db5ac838219071f8e17fffcdbcdadbd403ac6f553c916
-72d4544dc96462882396c2e09a6bb4625082da1176cfae26ccef7f6bd7c2
-871a4c568c319d1358d84c408db99eb5dc6ddee3ef649d0edc8d623ea846
-a20624d59267d7cc1e9783801967a9514d45a2b28939f473a05cf85fda84
-efc9a943e4d1d808cd8b2690e8af47abcabdf5b99a34a0e087dcc1e985b4
-64c8ee1a45889556ba082fab60f2fd57964db2fb6e09c1256cfadc32a65b
-d8550c53a7bcbe6242bfe3ccb2ac9c19bdb5ea69cedac85bd420e22acf8c
-084486ac7a7ec081e11876f90adae302a0539d2ca40e3164a1c858bc783a
-978e83d465401290c7d5a4c65a65d5bd361f1fd26f03142bd82683eb7394
-c84009c33110f054274ed02c4edb52c90bd9ac1b3083c7cd361f2c6fe62c
-3dadfeb15815b848a7f0ee96f5e211337e2c55d50c5d3da4f48707416ff2
-faa061125d332bf8f47de24ac76a13c1036da20ab05c3d52ff447c01005b
-e42dc980bcee25a75b9e5032fcac41d8d3ad9c4f1c680b707503bda6d8a2
-81b93c71563e309f7cd081ae74f7ff1f81c4ef7e4f9fd194feb20e54ec09
-0b0f65c1811c88535a2c01e2756eaa8457493a10fe7e77a7bdfa0a448051
-31b64489e514d7478a791fb525f3e12a2366d90725828299511e81fd7e5a
-b705698f4cdac749823794dcec19578f3919640a688c4679c4c87c56f92f
-51f04fca9e0e243b5a06cb58f4b0e1faf23306b15e929f059061a97526db
-442c397c86750a625b103c6666db826b9b61ced138579f189afc49ad631a
-db2a9de72112aa9e8004bd651ebb42c769c204cb083e59ba9edf39cf4a03
-3f527d73a362e001eb2ebaf6a42acf43081b6a633c0da6bfa76bbe2a10bd
-52260dd6b534d4d9b6fbb375c6ba7112900c9ae79545485029d1af065ab0
-55559c7a42a296fd6c1beae2913eeb583339607e08b28be16b48e0a7f495
-af27a935de15d0e2a1b5d8d62415849b1ca668aba544ffce2d201ab552c2
-24ec6dea30524cb10d820000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 1 /g367 put
-dup 2 /g410 put
-dup 3 /g286 put
-pop
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Text 5.0 0
-/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
-/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
-length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
-{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
-/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
-if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
-{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
-StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
-! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy
-put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM
-makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0
-Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N
-/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT
-{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d
-/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `
-/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d
-/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont
-Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1
-add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E
-/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $
-FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255
-idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector
-Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding
-length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2
-add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs
-putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^
-256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E
-/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~
-definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix
-makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ !
-findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?
-{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
-get undefinefont}forall undefinefont}b
-%%EndResource
-end reinitialize
-F /F0 0 /0 F /TT35224o00 mF 
-/F0S64 F0 [100.105 0 0 -100.105 0 0 ] mFS
-F0S64 Ji 
-1800 307 M <01>S 
-1826 307 M <02>S  1861 307 M <03>S  
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53d097b637ac1ecc1b963dbbe3ef440e521771300a
-9de5d4ca5747aa69de2f233d8dda7b57b0c1f43fb4045b8025ae0b044b2d
-e4dd39b8c86de9ee5d8328ca444d05ee500b8c8a64c426b83790625df29c
-3609484897f3731ce169d7907f0e67fc98e27cada492c0444f513bb7c9a3
-f242fd94cf9d8443e94f39947418bd74af463b2f57ed097d27452dfeb6a0
-dd437e0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 4 /g882 put
-pop
-1913 307 M <04>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53dbba54e9f1d259682aca36719215f1923a51b3c5
-4dda45255f2b7d5070a78c57603b92f641056d50eeab592b9b3df1c9d964
-95b30bbd3c9ec28cfe8dc36b9a742504971c2fb390d4184b47605e25b36a
-d4d7b3d1762839ad19c1ee6be815be7dd3c53411dce7fdae64bbeb59a8bd
-19e0b6d7fd078ddc923366c5f6e100112c8e0c0108ff5026a5027352935d
-83d461c1d453bd301605fb6822c7f5302a5e72dde92d213e9a423c06c384
-bbc587dad9d7b832d2b64e1b37f31e70da26c8445e65bcabc479cc6b15fa
-a68cf33904471c945e70943b12aae21150c4fc251260078fa9fd5e70ec6e
-235ec0711e862580d7afa78760b328a12663feb7bbd39d88293858892c65
-0f323429eaf79910d111291da12cbe910c59dad8f07ff7f3c02fb0b3cc2d
-e15b24ae38a975fed81d9c7ef07b3cd2814139a4bdd0ac5a2933d244f2d9
-ec192106f7881a8373b7cacfbdb182198a35706b8083fb97c17b4ce34fb8
-584042a9a825a957173694c8134bf863e460855d3e860cae869b05293fe0
-865231bb12a0974fc614a361380964fa5c11eba45027c442d3be8b2eb895
-8133e3e602eade29feeb93fb17d3815e0e586b92e89e2effec3dd8599622
-fbdc72cb2d1428754529eb537e2c6fe9da0758eb22cc455e789dbe83fc68
-331fd9dc3628764230725c3d6f0e1af3dded4cfa9a255bc1e5614082a003
-3a3d1b78d038feea4080e4a7a6e4d25c02d5936c7f58c42b5c045c02591b
-6f79557f36d483fce6aa695ae7c8659168c06b3ba50ecc8ab7dde0f9691c
-47ce6f9308023979e3d7f5a991cdaf824043f0802cf36084b6ff46b887e2
-8d4a5ca18998b9239ad0b78d29778db84d5f86d1fa613289aae84789929b
-2aea6b413a9fb65801966786f132492d283cf0b401d9fb3785ad045c6efe
-b143af7a86447514603228d7ad7141d93f38b3ea07b817661b40bc42eb28
-69c4d7301a262fcf5ccdf6a56dd42b4ac2c4cf06b92a61528861b9b71e0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 5 /g374 put
-dup 6 /g271 put
-pop
-1945 307 M <03>S 
-1996 307 M <05>S  2051 307 M <06>S  
-2107 307 M <04>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53dbb4bf522d1f42d9e0b54219e97c13460bd72aa7
-a1d3f7aed03822ac8c016202cd93e2d87930384efbd0b38cf2e43f2ad034
-5a0def07f2f09c2693e93054a8091ada7b1e1e7a310aca90ff9a7d23be2f
-df0a302e3a477692ce931ab8fca78ed4f31f063e652c44bee3e288a82d88
-f70b4090ae16af2804f2a58bd67637d18a2088a8eaa46f208077492e3990
-093f1dd3a4e1aa92198b953fe4787eee82a287f9d7c2d46d089c8c5adff0
-23ae43ea0ef3033c7360a2a4018a30b09d1d19b38a80d24ba2b892654a4a
-7f4a6ebe814bd3cab448b34fd1a22b9aa1ada7fe5ed30489b8cf4f9ac288
-5b01c70d2a666615c5a7cf3671ce53ee3ceffab2b42602c81b9a246c5b6a
-dce1703206313540fa2e59de7ea301decdac3cc727356a9c59e59f0a2986
-433db692b3a3116b2f2c404f299edbe793ac61fd8fd44c88b68d2b961089
-251cd4b4e079545898606e1487a6b1f3de7ff416f63491c7b189d42a8957
-f8868e701a90a5daab8fa8fa0570450a1790c27f13b3e659359d99245693
-52cb6341ece4de260d7b4c1db4350f935a1a1a8d6040b663a8a8ae41e197
-58e16ed5056f1d002c2a611f11e06067291a352895d3ffc02b2f4ce7f147
-605ce31ce70b0e06d6351511118a3db7ab086a685a1c6df93f72a9332225
-cf893c72e7d7a43795b90757679cd78d770709fe75c728f5715cb394852a
-a81a745b6ee776f059eea15d85562443c159227f0a5135ba91fb8971d6d5
-26933334b62e676901824009a33ddfbd7831ff46ff24a082361514530cad
-7a90f0cc1d7c352308cf92e770add97ff7275a368f1469189f21e935c99e
-e575ba5f7b3877c96b076a1fff2a1caae3850fb45ff37a825666f85e3acf
-c5d47b72f3c056f971a19317420ebdca0d353279433ee05af7daf075e241
-f8d8910ce29ef0facfc8848b9b02e0d07042d061a9efca270a9e8698c28a
-0e11f8ff6b5470c1bc6cd24c59d06e0b8e59f39e0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 7 /g396 put
-dup 8 /g272 put
-pop
-2139 307 M <07>S 
-2175 307 M <07>S  2211 307 M <08>S  
-N 264 1136 M 264 1610 I 1845 1610 I 1845 1136 I 264 1136 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 264 1610 M 1845 1610 I 1845 1136 I 264 1136 I 264 1610 I C 
-: 0.668 0.652 +S K 
-; 
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53dbb4ba4a940cd3dac89368136e7f83376e8093ac
-1c822b3887d0a702a5b8ee3c69ecdb3f8c219df27044f8f7ba8fd26b7e15
-fd5ee1d87c8cdc7afbfbbe4e94d9c6bf9eefe3857c8b6fb00c1f2621c410
-46872452bf8ea1a248450dac92562e161dcc8e2641f8894e822cb233eb49
-69b84822f1c0bdc3555af53cb4cfbf1c322280b96bdf9e874f1dd4fee53f
-b2a2426412c8dfcdec26ee58da07dd3f44578ec4f0fe1ea4be651c80b3e9
-af4cd13e3e537a56d61dcb56782dd3b9e8282e065dc81c04df1718c29165
-560921ea565928154bf87194453c5adcb4827c4799de4aefa2c84fef3921
-10294e181aaaf209f26cc0a78ec4327c61ac43d0c98f2ba68023ce8b2581
-6b684c09cdb77417268523541b8fc51345d208324cb68af9dcbf3f90df78
-d5efbe8708a5e10013c1da0b0fd3a8efb5e0a3ab8d798a1bcfe35ed13ae3
-55dec9b76e1d6fd01509788ba04f28a1ec49f902d67a7923e9a478b15733
-561547af4306b9a7aa1261722fd2e107c027cec8f6ae2a29addeb9c6aabe
-72df257e7f1b220f1a16a89df119763b7b7a244e1c5947824acadecd7ed9
-600000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 9 /g393 put
-pop
-914 1403 M <03>S 
-966 1403 M <09>S  1021 1403 M <08>S  
-1064 1403 M <04>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53dc699ef61982525c4576f6a86097909616155f38
-adc3a6c8eb45204c274cde5ba085f0f7430d9e53c7ad5334470d7400a8a3
-818ea35877c2e55addfc2bd31345abe36aafc52dddaec60dab51b6731f33
-d3cea4942736c31b88f10f013ca66af278d817d639ecb9b5411adeed7851
-fe0d2903bf7a37abd17f7548805f62d300c4a1261d65e985d745224a8d2f
-f1ba67b26967e5d78bcb60a816f5802d5869edc3f230617f34d17f4418a0
-0ebad9ee44118b942660114c3d2dae8bd7af5d835a0f96d1c7aed86343d5
-a954b07697e5cb46f0e807f09f23f4192b9632c1c120629967bd263ff975
-07f9f3953940e8e95a3d782b2d7c5c760e814087970f0c3fb331d86a635a
-9d1cef26a80ddeaa137324ca9f71baac0eabb8460c06ed0803206f8d6321
-7ae46581bac4279fd507f72eccbc02119286821d882842f848de5e6ed02c
-cd62dbc611e598aab10000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 10 /g454 put
-pop
-1096 1403 M <0A>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53d9c032b276daf7e43af80e1861c4af6ff52a716e
-7a19130562a1a01c7c936b9e878982d5975b72a5edec88541331e33805d7
-d0c0d841e6f2f0c5568f4fd5b3758d61050b64d0a3b313ed3db2a6d49e39
-d534ce76b28c1e79b94258d025873364f8aaa5246d10989464910a68110f
-469bb278abcd328a927e9faa3b0a23192d6fab6335b61f3a578aff1ceed9
-7aecb9debf1ceb4affccbae0a1b9e1c6db76cde2762f8618b07ad4d7ca94
-3baea974807c39696fd38cfc8310205b61aa7e2b88d20118bd99aebc8e5a
-362f6605995a920b3e927c6679e61ec277bc8111fa1bc886f68a343281e2
-d44c0d0cbb3ff37423f1dee6be2f384c6dcbfbfed53a51af01373f469841
-f53a93a50e8f2913a9b34a33b351f1566e2a9f4f93a82d7d1bab1c462619
-abaa6e638d9aa84eece57101aec2e6a59e99cb39bf0d5033a673fdc91226
-679da8604a3d3f7080fce356ffe67bfcc2fb0c2f421726d49e3d0fd85761
-3d33a4582d878eeda1c49baa9476f2d6f74de32879ac55da9ed20a8a4604
-6eb7a7332e4a99f2509332324846ac75987f2beee0ce5fb482a5dcb260e3
-3f0934bbca8b3bcf260d0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 11 /g1006 put
-pop
-1143 1403 M <0B>S 
-N 751 1106 M 751 1103 I 753 1100 I 756 1097 I 760 1095 I 765 1092 I 771 1089 I 779 1087 I 787 1086 I 795 1084 I 804 1082 I 825 1079 I 848 1077 I 873 1076 I 897 1077 I 920 1079 I 940 1082 I 950 1084 I 959 1086 I 966 1087 I 973 1089 I 979 1092 I 984 1095 I 988 1097 I 991 1100 I 993 1103 I 994 1106 I 994 1106 I 993 1109 I 991 1112 I 988 1115 I 984 1118 I 979 1120 I 973 1123 I 966 1125 I 959 1127 I 950 1129 I 940 1131 I 920 1133 I 897 1135 I 873 1136 I 848 1135 I 825 1133 I 804 1131 I 795 1129 I 787 1127 I 779 1125 I 771 1123 I 765 1120 I 760 1118 I 756 1115 I 753 1112 I 751 1109 I 751 1106 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 751 1106 M 751 1103 I 753 1100 I 756 1097 I 760 1095 I 765 1092 I 771 1089 I 779 1087 I 787 1086 I 795 1084 I 804 1082 I 825 1079 I 848 1077 I 873 1076 I 897 1077 I 920 1079 I 940 1082 I 950 1084 I 959 1086 I 966 1087 I 973 1089 I 979 1092 I 984 1095 I 988 1097 I 991 1100 I 993 1103 I 994 1106 I 994 1106 I 993 1109 I 991 1112 I 988 1115 I 984 1118 I 979 1120 I 973 1123 I 966 1125 I 959 1127 I 950 1129 I 940 1131 I 920 1133 I 897 1135 I 873 1136 I 848 1135 I 825 1133 I 804 1131 I 795 1129 I 787 1127 I 779 1125 I 771 1123 I 765 1120 I 760 1118 I 756 1115 I 753 1112 I 751 1109 I 751 1106 I : 0.668 0.652 +S K 
-; N 854 1041 M 891 1041 I 873 1076 I 854 1041 I C 
- O N 854 1041 M 891 1041 I 873 1076 I 854 1041 I : 0.668 0.652 +S K 
-; N 873 1041 M 873 544 I : 0.668 0.652 +S K 
-; N 1255 638 M 1219 638 I 1237 603 I 1255 638 I C 
- O N 1255 638 M 1219 638 I 1237 603 I 1255 638 I : 0.668 0.652 +S K 
-; N 1237 638 M 1237 1136 I : 0.668 0.652 +S K 
-; N 1116 573 M 1116 570 I 1118 567 I 1121 564 I 1125 561 I 1131 559 I 1137 557 I 1143 554 I 1151 552 I 1160 550 I 1169 548 I 1190 546 I 1212 544 I 1237 544 I 1261 544 I 1284 546 I 1305 548 I 1315 550 I 1323 552 I 1331 554 I 1338 557 I 1344 559 I 1349 561 I 1354 564 I 1356 567 I 1358 570 I 1359 573 I 1359 573 I 1358 576 I 1356 579 I 1354 582 I 1349 584 I 1344 587 I 1338 590 I 1331 592 I 1323 594 I 1315 596 I 1305 597 I 1284 601 I 1261 602 I 1237 603 I 1212 602 I 1190 601 I 1169 597 I 1160 596 I 1151 594 I 1143 592 I 1137 590 I 1131 587 I 1125 584 I 1121 582 I 1118 579 I 1116 576 I 1116 573 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 1116 573 M 1116 570 I 1118 567 I 1121 564 I 1125 561 I 1131 559 I 1137 557 I 1143 554 I 1151 552 I 1160 550 I 1169 548 I 1190 546 I 1212 544 I 1237 544 I 1261 544 I 1284 546 I 1305 548 I 1315 550 I 1323 552 I 1331 554 I 1338 557 I 1344 559 I 1349 561 I 1354 564 I 1356 567 I 1358 570 I 1359 573 I 1359 573 I 1358 576 I 1356 579 I 1354 582 I 1349 584 I 1344 587 I 1338 590 I 1331 592 I 1323 594 I 1315 596 I 1305 597 I 1284 601 I 1261 602 I 1237 603 I 1212 602 I 1190 601 I 1169 597 I 1160 596 I 1151 594 I 1143 592 I 1137 590 I 1131 587 I 1125 584 I 1121 582 I 1118 579 I 1116 576 I 1116 573 I : 0.668 0.652 +S K 
-; 11 dict begin
-/FontName /TT35225o00 def
-/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def
-/Encoding  256 array 0 1 255 {1 index exch /.notdef put} for  def
-/PaintType 0 def
-/FontType 1 def
-/FontBBox { 0 0 0 0 } def
-AddFontInfoBegin
-AddFontInfo
-AddFontInfoEnd
-currentdict
-end
-
-currentfile eexec
-9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853
-046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0
-3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2
-326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317
-a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7
-553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022
-79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f
-08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938
-610bff26bc7ddabb1ad5fdfe6936526accfadbc4cb5e38f395ecf641bca9
-d91cdf2c51c1f0bd79615c1438816270a0005b670301a6fc46ed6a1d57d6
-775eb028cddb9a6b8889217af7965b13a9810ff9b3fb352a9e1e8c8e60ca
-39a6ee0d0d0cb656aef6c25691ce7b20d10710695e932d792671a6158c9a
-cffb7efdb6ead6234483a1a04db5cff407a243d31c313693119f108a5a7b
-b01f4dd596ad581b90ee894bf907b34e97bc7e3c41415a0beb356278f77f
-3355291239884b1783116885f9e230b605aa02e4455d68d5fa299a65dcf6
-c093248c656c2f60ffa2b6dbe735c41b87018ba01449d75f295f51d59a76
-a88445370be76b2ec23ae0b9a4ed4e2664ea650006207cebf8583686799c
-907d50d049f4bcb33f9a629d63b22607bdad16d50da82647f4f8edd5a6ed
-1a1c5d3a0e7ca0fd9bdb58d522ddc3f2485528c001d197aeeca6821db4e9
-18f9a85d0bd54907b5d565199224a8b2b9f88d4c8ea7a228d469f452d7a7
-4b7b95b23e77b2a4a46c3483b340a2666ec9280469e7282938bbee86b37d
-9806f0dd2739ca4aca9b040e7deede2f067bedd98cd4b391b47e37c2ec35
-8200255f59c77fdcce0745e568849e5d976fc8fe07cd88bff833b3493d46
-01d4ca6b6730c85548e8c5c03ee889485154ec29914dc28166497ff3c524
-8ed80aacd2ebe753e6a4c87cb78d3ac883fed701299583a9766ff9ae835b
-658895ab32fc6cd25aecbee7a5ae6c3d41cedbd422ce4b3501c86e83615e
-cf948ce90dbd945488e9e4b6aa739118a124aa0c8ddd49613e9871ec0966
-5a85268b223dfa8fcb8fc7e8afe8b84b4aba7521ed5d2fcc13f783165dff
-0f6b692000bd53e1b36ff4fcd162094e6f2e48c21dec1de27c8bff2319c6
-35fd5a05f59f967f0f9413f9c114d9395b4234ea48028b3bd5cf239272a5
-f396e27e84e908dab3f8d58ef1fca61f913d9aa19ca1b8d9cbd50aa8f5b2
-f91d08b3aa20a6ae3cdff0f74b48fbdf0a9368d9001bb63daacfe91d7f5e
-2a925ffb342e4f328e8fe0aceb7259ba2bf791d1890aea331c11afac79b6
-c77cc6b13a3574782f79c0a9e3b25b4810038af8f7025c702da96545afe3
-0d620643dfaa4cfb57033a992fc1ec8457c2a7d7a204354999ef479c30a4
-1cba337c3b2973cca84c85af5747fd5e387805abed1cf5a70c0fc80de126
-6f6a99808d71c445f877d7fb1ea6bb8f6e28046eaa6bc57183d65c3aedd4
-1fd03ce3e6b9fdf5589e6594ec3b2d107fbc99f56dfe60af5de287a71ffd
-adb1e8ca34fbde943045ca22ad67eb94cbacf9cb846ff52cbbecc2e81a03
-9b085960b8c1bf6d14f3b1c1469befa91f94c4508317c4ba6f23d679325a
-624609982b9b4af56995c2598549d8dbaa3817d0cf11b1bd3a870dc3e3cd
-a7b9768b476dd0db3699a1b88753ab78fcaf03f500b7571ec9f7ac9117fa
-0c545594c0c42700f759c55523ebc130b09424af10c8d2c9b722105d21b1
-5260dffa4878c6ddbb6ed3ad7c0a2af72dd05c199705fbc7402f0969f0c8
-aa8add4fbdfedc73e458e5799eb29052326b64590deb81b26b1fd937b25d
-34a902274503878a291c632d392211c333190ff040245e30881b0509c427
-7f525403e402714110381ff36576cf55f3fc05b581ad5fd5335c0695a619
-f3c6f8f7cb8bc9b6efe47be6e80be457057e622d9220a68f3b889c9c0019
-e3b5c59d1d566b0aaefcdc32bb681eab9b81b8a421da04ad73abbf04f14b
-42cccd548547aa1c7443948ff91fd775ebdb48c515bdb1e5a8d37c55f3b9
-94ba6d4470ee86ddce1ef61bf1d7e19b10847413f791d9a74f052bb7dd8f
-c6828dad6a9011f3a3263e7c9fc4734927e23b989a311ca7acaf79261173
-e2fcbee8d9235c69fa07b0eb85231bab81e636cd958957b7bd3d5627806f
-9be633545d44ba5aa7d96d177075228910e24320beac86abf7aec5380c27
-8d8ae18ad396bef53eda6b6272cd3d05185c6b8c76730000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35225o00 findfont /Encoding get
-dup 1 /g28 put
-dup 2 /g393 put
-dup 3 /g272 put
-dup 4 /g121 put
-pop
-F /F1 0 /0 F /TT35225o00 mF 
-/F1S64 F1 [100.105 0 0 -100.105 0 0 ] mFS
-F1S64 Ji 
-1366 633 M <01>S 
-1416 633 M <02>S  1469 633 M <03>S  1512 633 M <04>S  
-
-currentfile eexec
-9e67edc6b841302bf9f60fd883cf0817a74d8c06f64e04110b8a8fbca01a
-ac09157fd1dd0a2cf53de9dbebb7526be8a4710216b8ef49ddb796668e31
-c233fb83dc02b2d2a14472ad221b89bb9d7a1a3e891ac50f6e7791a7ec5c
-89220573aa7f0caf86480c564a3e397a4a308f2ea07a8128e70505b50beb
-90018ed5a314d45e76b0ff8ce970188e013655549649a3c3b1bb30ffc375
-e93b73ce16dd133563f53ff5c7b9436ea3e5948464fef4ace1d45eb4e66a
-e3f97a88e4d4a7d01160ace5d045a4ab06dfbdbb6687544c3d22c1a45fdf
-708c5ac6dbd1f2904b7294c2708135db2a581588ae8120eb3c38dfd7eaa9
-235ba161b31ca65cd9ff0bc46a503e0f977bc1a3070afe8e9bc057bb37eb
-515376cf90ac3c9bc824a695df8f690dcb3006c02df6825977ff1234d5db
-d22e79f7813eb9ef5e6a4dff3e68fc7002ef0153c1790d704d6ae8434735
-41c41f1b9c2923691172fd65752f02a3c312acd602e1e1198c05f0cba2c1
-d695e3f3f6561b6d3f9f1ec4f26c6ce3af023bfb2ffa5200a9ae5ac502f2
-43c84bce26286ed32ec88fa811f0553431deac2b69d37d31b888bd4902ea
-b1dda939486bdca9941a900f59f6955f1cfc8031e7b46f5452b0a46bbe06
-8bbb634173779265d94e613698d043d573077d037aba259d607c94d1d1a2
-ea021111559e9b8424c97a582e28afa082025cbf3214614b354946300735
-92486dff29db45ad0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35225o00 findfont /Encoding get
-dup 5 /g1006 put
-pop
-1565 633 M <05>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd883cf0817a74d8c06f64e04110b8a8fbca01a
-ac09157fd1dd0a2cf53de9dbebb7526be8a4710216b8ef49ddb796668e31
-c233fb83dc02b2d2a1447a244d28a60722545cfe759adaed19e127a54188
-1d994eef32cee42162dc2d43a6609f59814c0a6924ef9d7b5819b19dcb3b
-74a5e9dd13121d2e12cd67f085bae264dc22720726479185ff03a97fdbff
-fa7c74f771fe9f113056f06c429bae9de9fb627cd2e1c6f9fc11e4b20c80
-1eeaa28c359c2af35a0d5e9fe79808d8fad863fd41e4e4f2fa8280dd1db5
-fcafa9589e7216466cdf61dcf9800a0007cd04a447565416d06fd5fef8e0
-9d8afaa8a9dd871bc9da404b2aef6e1f8527751282119a4a947d00ee12ac
-077122850421bed9ad582b23a402d91ed1cf0d6d22117663fab74bb2e8ee
-c3cf7513da7e7a14c6995058ba96d5d4d4ffa810206548f87adf2eb2e4b4
-c08d60b80c9f961a9a0c147c586bb9aa547664f03526fc30c43c798c0c20
-48d4e69101a6e2e230aaf260bea7c53da41035993ab578dfdb10870f43a3
-ba4c1c5f323902497fdd8edc5876306c5a0bfed2a2d0396110b358169d9e
-22ffc0c6dd694eb06c8b8a1ddf7c8c06f606b8eaa40f5b326587668d8371
-520c63627d8190e1acb1b7e130dd03c5dffdcf665919e77b830902a585d7
-1e93ee463ad4224f1c6925d1866de8b7bc03cf52fc166bead0fafff6c8cb
-e164d31141c576f75ba4cddeeb07db6dc2952971f272fefd0eeb7df6d650
-4fa9d6f8e79e3c619a86ecb452d55ae8caa0768bb7a22a175d511d2f90cc
-2e436898094d0c3a957002a8dc6a45586814eff9def545d567710b58bf89
-a2c946738cd8b8bf8d7b7f23d74a0cb11506c2c4c2d16c451b3cc7c56faf
-39a7e9f57c8a43f3f1425c56af502b2dd95b30e56a731f6d098e3d070c09
-44c1bf0131592cf174319b675ff62afcae644af3fcec07557c5dd77bb9cc
-8bfe3e946bc594b231e6d78846101186c115bfe180b2937d0235acbafca4
-b962644a44ae2e3ac042336b576cc91137f7fddb95081f099d358b727530
-0b7eb9c985016d54150075984bf47946622d394de931e10e2fce32c3408f
-7205883043fa8bcf23563fb31e7f6265fd9e2e7b9bc97922b4531a677603
-fb0804faf80e15ac0fda8317d17eac67fe15c9776543f81fa9cac7cfb8fa
-3b49d481d1c3e6966bc6bc1ca4098deeb405c4914ba4886939273336553e
-ce564dc64d9b990f2b700fddb5922a2ff645d67be3c3f885e1eb5d4e8107
-6e13f95366b32b027f0bd58b75f04a08e9efcf2dafa62cc1289babb384b1
-e926f911a41782be9ffd665a7ce72953b498d2250ded4d484ab420871d8d
-16c62b3524487842cb3ebfbf2d079e1bc421c5f2362b0aa69711e8abf4b6
-0ca170bc58bfd46795473d90d53c207b5109fed25d74b1b3a718f211d565
-12c689bb361482b8e0d6a7013d4772ea92e5ffa65acde9bec092c616c13d
-0c7e7fe8e114e0cb1bfb9de8ded9b4eba2b0bfd963ac8fa20538d72f4f7d
-c2ebb36ada99a7ff7a540460bb4cc73066fb807682764030a7bc15e82e3b
-9b8de86bde1dde932c3d6f94c64d58dcbb54afe280d85b70b704a0a78a5f
-c269240b052299409c440279309f414dc9e0f913ec830748ca9c66ebeef7
-25c3fcf4a99582a6d5ebc14bc2f57448c7c690ee338bf130a314b3a20098
-5a577da2d510ad7fcaa9ab9ec047294cf2405639a64b3c4c6522f62f220b
-109e36b8c8450a3dda77b74e266e3101c99d7db4f2d100c5b3d5c58db2b8
-2603049e17d58cab602b556a3b849e7eee7e9feda0ff44c30fc62f6ba167
-c83964786ce07bdfa076a5ffd72430e55b87c2a67a60239f8ade55b2ca35
-8d2254a3ce3be3dcf2419fe9cfed6fa109df87fd6d9850bae9aa1286e62c
-e81a19aa56efd5e00045e6f8a50f10fae6f0c34145ea33358a4dc5a5b433
-b8ad313f82d4b889d2c83be67b25461aad308f93f0e3085ce32d8c56ae1b
-798791ab634016c95c9ab079ea4a54333d19cf93ad0aefb73f3bee6c1e0a
-93bad6e70698d01967320869c0533dac11a66477cfb232f0d509f7c96e7b
-6176ff3fc1d2ecf99c3f15642fe56c2da27fbe4a4e44ea86515383dc932b
-9fe17c65e77896ded64e03a5efbe98a45cb161c3c8187a93e6100b2435e0
-8d58c8e4c17122dbd4be292d8a33b218771e21229a9199e15a5a46de41e3
-3bd3acfe8a4557ceb4804c9c546d56b0fdefc62385efef970562cdd8dc58
-ad53290017f5a20ae57f8e84175e9821e21fa38f1bc2399543f1c7d7f52f
-d090aea6b61ee343a4e9cb173cd302587d535316d29e8e36cbe18b616f3d
-408d4de28fd543786901242613eb1f88bb3de9858929a191aaa9f11d286f
-97d111f995ac077a6376a54630f6a859389d8909b38b1d9bd3efe600a22e
-ef8e81817e3689065179a35bac844c9f7ff4fde7a35891c664fd1045b9cd
-d6395b2629e329504422b9455b0eeda6978087e6b9c4f5a94684587a563b
-5799731b891f888fcd3a9d7788f202cf81b90f1c54236a7dbf2ffec49828
-632fcfb2759faedae34709f3fa88685ed13608657b1250d35e9dd0a3f3e9
-bebed5266dd1c1fcf7bf416df92a7117381dcfbbae5aaaf495bb47df3bdf
-7f378d05da4c4b5ce805968dadd27dab66f761a1a878d092c3ed38e85f8b
-4b309c142f8137449a81bf195fb8b5b0087a043a5974bd958e6248651a47
-55152626b80712297716aa57683e5ffcd15416ab8554e15b1452abd75d09
-61455c9db1a6bd003bfe236a4dd22662a63c8b250cb19e3e410791914e9b
-dc7c60c1cc893dbca1736b5cc8ab53852283ddd88c57a4826a273ad19cda
-2e273f3190f60f74bf06872f9ace4f3695b2e2ddb4d7e27d0343c71c1f09
-28c62bdb81fab0ef61239b28035f827c142e6f9013e471a04aa6f7707ac8
-1b70117bbbc7e07336b458cd026f5e81d1bc48e07e2e21c089b537d5a0b7
-da2cfb5564288b47cc23636a7b0347d9b7ef0f0d445d608cf774a2b56e98
-357a00c673b65e47eb943803897afe419a2950422f89da71473cf9559f65
-ef82a9a14e231142637cb436dad3ef82d5a24bfba49f90146249b387901b
-221c8551220657be54eae85cdb7984fc9fd7edec125bf79642f5c861fe91
-bd8ccd6f7743b1a267de7f66d659579a6c0949bc9c5589aba8fa658e4640
-03e731d5f606f36de804d3a30b6080ea571508979ad5ac927e8f5cad7c29
-9ecdb75ff693a7e4ccc2cc35fae3540c160bd8b7508aaca4124ad9f2eed7
-dd98d6014e26dbb03eef34d52c6034d94a6132860b7760c7a1ec9b113c0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35225o00 findfont /Encoding get
-dup 6 /g94 put
-dup 7 /g258 put
-dup 8 /g104 put
-dup 9 /g400 put
-dup 10 /g286 put
-dup 11 /g396 put
-pop
-1617 633 M <06>S 
-1663 633 M <07>S  1716 633 M <02>S  1769 633 M <08>S  1835 633 M <09>S  1875 633 M <0A>S  1924 633 M <0B>S  
-9 1106 M <01>S 
-60 1106 M <02>S  113 1106 M <03>S  156 1106 M <04>S  
-209 1106 M <05>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd883cf0817a74d8c06f64e04110b8a8fbca01a
-ac09157fd1dd0a2cf53de9dbebb7526be8a4710216b8ef49ddb796668e31
-c233fb83dc02b2d2a1447be833a8262e79ebed8edf80e8f95d14b8426da9
-e7afd2db6ce7dc68699ea0fdb50b5325e807730b1d0eac3ffaadb8336c4d
-cbc18ecd3e36b44957ec504fdb48a9144abc52bf124791251c40c63ec28c
-9f6b43b9a24b4bf5bba0c9d687ceacaa5bde27ff100897f0bf1760e71ddc
-58eb4e6459b05c21958e67ab1a38813da46cd26aae9ab8821ab02267c633
-e4e5765acff4b7d1444b85182976f2e07629a320a2a8c3254feda1fd6f63
-3d8ce89f4e14003b01f777b7f845ed4cb89e7c360d174c776959495b7165
-c01e9dbf1c7bbf86065ba855f754a8fc1464c7ec2e662cbe5de2b9bf9d61
-d2e323f0b23b7ad5cb2efbac53e8935bcc003843f96e77354cdb85e97ec1
-dd07ed018d80ef75003b134685a493606f606a1ad19f245ded44f2a61b29
-ba95007f7c28ab4bd04f6367a72625ea84cacbd17b19a0afdca855f10a3d
-fa88c3a6f76dffad13b202cbd6cee8fecd50b001054b2c16903d174d6ae7
-fa022be6aed942c1e341c386b24df73d207c8a78030c81ced54dddbb5abe
-75008ef1a13c5908c0c77570e2ab4ca4486e1936fcfd5c3c30a0f9a9e8da
-7673b9f03dcb956c44c0025f95e7c4001ae8f423e9e98a82aee285a5857e
-67d8be4eebc9cf37899882358fad1278ad4007108a426ffa40a1a096df33
-ca5c9e0dbada9d8c18e6c2d1cd72df9b41b2e312fd8fd3caf5d849d3bde3
-33ba33d94cb5c0f20a79c25820322c45d955c2b6050d74097a639cd10df9
-c0f3b76241411fb0c9695e3f125cdf8c782952f7a5399707e8f215329c7c
-09c3a015570d88d0591e44c0523a59f433b1e20f57e0b1519482c63f1487
-8eaa14b0f0db0e1bae30a3eeaea7566bd20d53e11fb17b01d45e092a5164
-0d74a2fa1195d2a352cd940350cce17bfa0a9655cd4ae9b66838def10b01
-051e0bf064aeacd41156f830999deb6d52718a1efc20975e276bcb5d07a1
-7c0d9aaab3e9b8fbc636bed00fe14102fdd693dca204ba928ca59a6cbd8d
-705375e3592eaa273bf54b429a38d450e970a1cb5e736e3e8f60732dfeff
-9a21ef77d7c6db6c53e68737ec5a8845568922af6115b9f547e66a47bd0d
-d33a084f321d6d49ae4f9919e7bb15d321dca014986bf9520aff25312b2c
-2222ec72d969d6cf77fdf10976a0a75f2e1d7742a8c265e024aa9a276c8e
-1e3dc45a342740e45bb00aee5e26ef8a6f26e42aeb09bcaef166aeb61d1c
-b9d565d4804657db2dc491f6a61fd8dfcf740aabcd0b71bd1286d1965f88
-ca998e52fc0c1a461b5a1b1cfaff920ba69260a280edb08ceeee71a36a15
-afd931d729d0b19ba03c93952fbf57b302d2af64fc0550e95b49d36f3a2e
-56ff2a7369df25da9b8cbb764de22ba9a3ff0e6eb9b46ecc00f663d89ea6
-a08c7fb384f0130eb7fc7fced5241b6137b9fc98f43806115dda18ace139
-f2a788aeda846359fa0b28902a0572c6cb5f0e84a85687cd35e7d8989128
-4a538e632534ec2b5ac78840060e90f04554683aa734c94e97c54d165c0b
-e274a78ff4cba3ebefea0d89dbaa76f491029dd2fdf159b8bd9d744bcb0e
-c6185bc98946c82bb1aa8dc31e54d468852b5bd85e45f1227c4ce66c3fd4
-d9dd2e453c3da096882f2868b062cdde564c2f08c5724922cc813b9575c5
-a89bf0b60f4a2b17944e1b4eef203169a18293c9d93e852c886ead02a04e
-4ae22bdb0976a03b8658aa483fbf6a333d196d01aa29cf69cc890ede52fa
-d55473c78a7a88a0885b22689dc6ea8df4b4f4a95c2cee15133e1e4248ca
-976a531e9b65b7e7471cf5c250c51b958365368e7fbc78bcc046238a4d33
-7e301bf962d22bf72d332321bddb1611492b2805b160654da97731c95180
-741325a4ee44081656d4864147c84612ce106d861cc5ce697349c4ded892
-4efe36cac90c9a329c1fe4a2552ae3689379381fdc3bbc1c44e3fbe49a02
-d35e213154d674762c51543e5f971a7b5540d9211e363a737bfda54c62e6
-ce9e0d44b568fc03f08ba1ac2359d635af214bde857f29b98a84a51e3f9f
-f6c1af97a68eafd95a18e71003cecade10491407f4428f7f3f870b247d8e
-aa8e5b07948203960d7447d66749d4e693c0a4b974e49f75c0d7f273c197
-dd47a8d8e93e50434b9b7ab52413df24843831ca0b2715cb6d40183355aa
-42eb16a31216ca0b0a8d6f461f98d0aad5c949bb857dfdd0dc930430a871
-cb1dfa0cebce464fc03680ae6e5e8486ae945920e94d614ee8e7aec551cf
-1aa92f5e4e3d27f7783fd327f9612e0686c15652f88c852581da3799b2a4
-247bb5b3bb0a764a040000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35225o00 findfont /Encoding get
-dup 12 /g87 put
-dup 13 /g381 put
-dup 14 /g448 put
-dup 15 /g349 put
-dup 16 /g282 put
-pop
-261 1106 M <06>S 
-308 1106 M <07>S  361 1106 M <02>S  414 1106 M <0C>S  467 1106 M <0B>S  502 1106 M <0D>S  556 1106 M <0E>S  601 1106 M <0F>S  625 1106 M <10>S  678 1106 M <0A>S  727 1106 M <0B>S  
-F0S64 Ji 
-783 870 M <03>S 
-835 870 M <09>S  890 870 M <08>S  
-934 870 M <04>S 
-965 870 M <0A>S 
-1012 870 M <0B>S 
-1065 870 M <04>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53dc6c2534436ed6cafaa9f446826347be273f9b32
-a6a877c2b0a008e8052fe607fa26f4e260a69a4b81cc7b7faad839af95b4
-811ce9d399317b22c2459c12a86bc36d55f146a11fcf044c10ca1efac774
-5b6fcc003503b39f9af4b3e2a23aacca01df89fefb11fad14d09a9f97105
-e4538aff91862dc9bcebfe4dd856279a1646158c143161fc215e0804152c
-83a31aa6f2b39ad8b3906ad2d21d9b08633e08cd020109719e0e3687e27a
-ff8559a56e566250e0daf74c9d442ee0c2ef44770dfe60e24b409b498240
-e35158d75eaeb26c0534584b2c93153a2b1618c55206c1470e9a69dd36d4
-b6cb6ab8c56bbf1bbc07c586dfa9a8784c847504778ce99d470632e5043c
-31c3d6aebab70768538c16b28add67c05d9c481729173d9bcb895eae63df
-0cd8e2887ee2722c4a424e2385a9c4e64f1ea33ab864447a742b491a59f8
-7c10a264e8155cba51e14d5e7cce0349f6425a3c5e5af11eb81dfd8b2ee2
-3926acd9a910f5bc6c6fa9765cf17542a68449dd72b1c882abe8b10d1a06
-1d58a6e0d67fe20974f2860f6e96b16b2df48ca274c49217ac5821de1dd4
-84dc6b14b9a5799194eec82f9cfa14cb80995024282905596609834be303
-ec52dc534aa84d5e9cc6df66406d303496c80eaa7bd8d792ffa9e8da70a6
-e84e4da363d03ab33614fda0ec758870bae266adac503e789d9beb957a12
-f44dcd532f497775da4e6d3c9c48979bd30343a2b9ee436feb05f22d1d5a
-6508ec1ef1c17d2dd1e09f0b6f020a7e37ecc12d29ed820c9284d38c8e7f
-7152efc77573469e940587b708be9312d7db94a4e95614cd676af692c782
-c814c78f4d063a2842781a827cd329f09a67428eb74fa83b30a93fe6fc37
-981d7eac44c006ebde7159e22a13024972da87724d4f4c01f96ba8f3bb94
-1f2fabc8172bcec2cb2187327fc023fd8e3ee5efce63660780a51c33a962
-e3fc98717d83661336aa92160806430c9eeac3dbb15441940480cbf5b957
-c8b67371be314d4e00797251a37f8b76298af296ca5d6ccd48ce9cc95924
-508031a2f3478b67fa8b46cb8db7de693b56f55018b0fa1935662a74e6f3
-b67bf5534460c8ea532287bd0463149e1b1f3bb8354481c6c2d647527f8f
-11cfe7f8aed44e4c53e5b555e93cbf0c7bfe07e446b9efe73b9d86cad627
-44417327725ecad8fb144b36661cdbea21eeacbb1308c4f1dc755e1c0914
-1cac29d0df78b83a1f2f1f78de8c0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 12 /g400 put
-dup 13 /g258 put
-pop
-1096 870 M <0C>S 
-1137 870 M <0D>S  1188 870 M <09>S  
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53d09ac6ed84cfd702fa11f53f20e6aa537e32e511
-679222b4edbf8799f5b9bd3e511715dc46fb94d6b362809f19fe58bbf8a2
-54a1d30b9e10fd78db95026d91b3b81c4f48011c1f93e6535a70ccc80483
-a2220885d3c9fe888a01dd4adc8246bac73d8e463395b31346a0b3e6c506
-fe202f43bd723c6e2daa4ae4ba450000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 14 /g856 put
-pop
-1243 870 M <0E>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53dbb9a73c2579c91e0d30cce6c64c1fdd64774186
-c380426120e7b57ef6ee81e7af14940243312e8b808bcf807ee686ec20c9
-29d3aab3a8d315a99e911aa36a33fe04db43f5abc0294f24549ec783c2bd
-398d23608289cfa2665390cdd18a9645ea1039707495c8204103bc885f1e
-7c4b983d30f9654feffb1d7baf73c88e09d2ce9e7d046a3b11190c48b741
-cb669ea5967c33ced6f92f33a49c6f7f007a359a7415de379d146624aa38
-83413ed81a9941bca6e1b926893d832ed86649f9c814917ca11ce1bde5b0
-98ec480ffd6d7c5a48f99ff04ddeb488ed1029632a6697f386e20c7b113d
-cc214b2a73f9d921e8dcf39d81403c64410e1f261c12c0e0058b758c63d7
-a26bf9860952addf3e2546a010e63a99cd33f5d1f4bd730d32759b00ff94
-5da5678b49dd3762dd1cdffc63920d2e98b1ad44d4f8711e7be836c132ae
-463841fadc6d75ebb67c23a3a156923a0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 15 /g346 put
-pop
-1271 870 M <0F>S 
-N 2088 2202 M 2088 2675 I 2818 2675 I 2818 2202 I 2088 2202 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2088 2675 M 2818 2675 I 2818 2202 I 2088 2202 I 2088 2675 I C 
-: 0.668 0.652 +S K 
-; 2222 2469 M <09>S 
-2277 2469 M <0B>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53dbaddd4a4881695292af51bf80638425b156c84e
-4eeec577fbcc1b47312e7a80aac74434238c7806c6d7b968c3c5557d929e
-52854864480a82ac4d7e735c8b6a2537efee8aa7e787ad269fea6eab65dc
-a97eb5aef958d5d50c83add930d97e8e2003b8c96c4e4ef8ad177358b58a
-b95dc2ee3a540c26b890619e4c11559eaf56743b6eee9988254556d72e9f
-ddec552b06438315ba25c8f5c32131bebcef2f564dbdb4dd630ecbd0c538
-e3ea65106234978272b5dcab7f35e97ba3a26c7eb1cf9fe25c7b8d92dd65
-4a290e85faa7c59ba94a18c2d08891786a053ec46e45dad767778635e4c6
-ba77379f1781003f826a96219a597a53c266e68fcabe210033b6994a1397
-d33fc3e664282fe1a8a433dcbb41b3fbfa3cad403031161b0dc49821942e
-3243ccd230c90aa1255d76bf92f06ab297e35e3c1c906bb062b1ead48d60
-5d25a2abdb651913940bc793b07d049df063a37878e06a728db3a59e4f73
-70463decb797f18a84e98bd42a966d1dca522cea2719c281000267ffc06e
-8fae59bdaae6fc3de617868534571e6a452a5d57e08a480442f967a34508
-752e3a695a85dd3ae545351692d022354b8faf2b3c538cbb2fadc348568e
-aaa178fea11f7d382fba0bb1a3de736c28956ff89e0f25e9cdeb5d150451
-b3ed626a237891e9e8600cc96972e85ddc15ca7ace23410b6ddf0a7e27c9
-ca02f538d62fb66d604565205ad9d06886ac6eddd029da486d66965af9c3
-8fcf66b2d1e419e9a3b9fc657d330b672e703bacea77265b239102213433
-a662db30ea2224ddb76120a913c087207635cd96469eabfc5618f258b497
-cfc2b4568500ba098b7c8072207def336a804def7134fa3306a6deaa3623
-ba4eee7e8915fba26f2e4c1c7415b8118d76926892346bfb00b875ffc88d
-7a361ca7389a207717eab538527f17682d450f52947d769dc750c1d998a4
-dae66f8ef9ae96ebc7fbb4f21829959c207aff94dc0030f3807d112b8f81
-d81abb8e16766bf2d25411ba1696230a5bc9c4cee5ad83b7d29788d26e50
-20e6e10a8be6db321451d988b002418ec007d7a8635495366c97afb3e9cd
-1b9b7c49b9a2269aa3004310d94834d410fef668eff0ff45810e93086007
-05ef92fa58049954457335f295ba5c49904f5f4597ce3d9b35f6456adcbb
-ef94e6683bdcda8194c87534e3562ae7570af8d0395f80da5b6cbc634c63
-6e312c9ae89cde8c25be586afe9cb64be9ca9a7587281305d6bd79feff3d
-150000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 16 /g3 put
-dup 17 /g282 put
-dup 18 /g448 put
-dup 19 /g349 put
-pop
-2329 2469 M <09>S 
-2385 2469 M <10>S  2408 2469 M <11>S  2463 2469 M <03>S  2515 2469 M <12>S  2564 2469 M <13>S  2589 2469 M <08>S  2632 2469 M <03>S  
-N 2088 1136 M 2088 1610 I 3791 1610 I 3791 1136 I 2088 1136 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2088 1610 M 3791 1610 I 3791 1136 I 2088 1136 I 2088 1610 I C 
-: 0.668 0.652 +S K 
-; 2802 1403 M <03>S 
-2853 1403 M <09>S  2909 1403 M <08>S  
-2952 1403 M <04>S 
-2984 1403 M <0C>S 
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53d9c032b1a7e363255e8adfdbcc86a2212ec5b882
-cc169f21a88b54c7979083b3b37b48b30761d49f96c3896170cda66f6966
-1e9bcca3b4ab4b4d4f6e591842a29f2cd0a15c35342a616818de81cf5cfd
-95f6ef716c34a7b069272d15021b148bdc67075faf88cb7312e4f668f69a
-359e1a646b51e745dcca30c16c456ed7785f5769f88444ba94c38b2a19fd
-8e030edbd9c5664d559bda255008c56dec474045316c608f4ce1e9b022d5
-9b322b3be9dc022298ab0209051b1330d1b2861ee31e4bf4f97599b1c799
-137b690318f1ff039dda5ad6c8068566a707229e4efba6b1bc7f010fc35d
-673b5c5394c0a1e97bd93015612c5e98c6e90962866e4a8c5d966abc32c5
-7c649f992211745706da94097764807377317b8aed7a6c727f75987a84a1
-0a537bf658e0ac5542df0424a93d5f5bf2cfdbca2ec4f17438f2c8730000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 20 /g1005 put
-pop
-3025 1403 M <14>S 
-N 3183 2172 M 3183 2170 I 3185 2166 I 3189 2164 I 3193 2161 I 3197 2159 I 3203 2156 I 3211 2153 I 3218 2151 I 3227 2149 I 3236 2148 I 3257 2145 I 3280 2144 I 3304 2143 I 3329 2144 I 3352 2145 I 3373 2148 I 3382 2149 I 3390 2151 I 3398 2153 I 3406 2156 I 3412 2159 I 3416 2161 I 3420 2164 I 3424 2166 I 3425 2170 I 3426 2172 I 3426 2172 I 3425 2176 I 3424 2178 I 3420 2181 I 3416 2184 I 3412 2187 I 3406 2189 I 3398 2191 I 3390 2193 I 3382 2195 I 3373 2197 I 3352 2200 I 3329 2201 I 3304 2202 I 3280 2201 I 3257 2200 I 3236 2197 I 3227 2195 I 3218 2193 I 3211 2191 I 3203 2189 I 3197 2187 I 3193 2184 I 3189 2181 I 3185 2178 I 3183 2176 I 3183 2172 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 3183 2172 M 3183 2170 I 3185 2166 I 3189 2164 I 3193 2161 I 3197 2159 I 3203 2156 I 3211 2153 I 3218 2151 I 3227 2149 I 3236 2148 I 3257 2145 I 3280 2144 I 3304 2143 I 3329 2144 I 3352 2145 I 3373 2148 I 3382 2149 I 3390 2151 I 3398 2153 I 3406 2156 I 3412 2159 I 3416 2161 I 3420 2164 I 3424 2166 I 3425 2170 I 3426 2172 I 3426 2172 I 3425 2176 I 3424 2178 I 3420 2181 I 3416 2184 I 3412 2187 I 3406 2189 I 3398 2191 I 3390 2193 I 3382 2195 I 3373 2197 I 3352 2200 I 3329 2201 I 3304 2202 I 3280 2201 I 3257 2200 I 3236 2197 I 3227 2195 I 3218 2193 I 3211 2191 I 3203 2189 I 3197 2187 I 3193 2184 I 3189 2181 I 3185 2178 I 3183 2176 I 3183 2172 I : 0.668 0.652 +S K 
-; N 3566 1704 M 3529 1704 I 3548 1669 I 3566 1704 I C 
- O N 3566 1704 M 3529 1704 I 3548 1669 I 3566 1704 I : 0.668 0.652 +S K 
-; N 3548 1704 M 3548 2202 I : 0.668 0.652 +S K 
-; N 3426 1639 M 3426 1636 I 3428 1633 I 3432 1631 I 3436 1628 I 3440 1625 I 3447 1623 I 3454 1621 I 3462 1618 I 3470 1616 I 3479 1615 I 3500 1612 I 3523 1610 I 3548 1610 I 3572 1610 I 3595 1612 I 3616 1615 I 3625 1616 I 3634 1618 I 3641 1621 I 3649 1623 I 3655 1625 I 3659 1628 I 3664 1631 I 3667 1633 I 3669 1636 I 3670 1639 I 3670 1639 I 3669 1642 I 3667 1646 I 3664 1648 I 3659 1651 I 3655 1653 I 3649 1656 I 3641 1658 I 3634 1660 I 3625 1662 I 3616 1664 I 3595 1667 I 3572 1668 I 3548 1669 I 3523 1668 I 3500 1667 I 3479 1664 I 3470 1662 I 3462 1660 I 3454 1658 I 3447 1656 I 3440 1653 I 3436 1651 I 3432 1648 I 3428 1646 I 3426 1642 I 3426 1639 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 3426 1639 M 3426 1636 I 3428 1633 I 3432 1631 I 3436 1628 I 3440 1625 I 3447 1623 I 3454 1621 I 3462 1618 I 3470 1616 I 3479 1615 I 3500 1612 I 3523 1610 I 3548 1610 I 3572 1610 I 3595 1612 I 3616 1615 I 3625 1616 I 3634 1618 I 3641 1621 I 3649 1623 I 3655 1625 I 3659 1628 I 3664 1631 I 3667 1633 I 3669 1636 I 3670 1639 I 3670 1639 I 3669 1642 I 3667 1646 I 3664 1648 I 3659 1651 I 3655 1653 I 3649 1656 I 3641 1658 I 3634 1660 I 3625 1662 I 3616 1664 I 3595 1667 I 3572 1668 I 3548 1669 I 3523 1668 I 3500 1667 I 3479 1664 I 3470 1662 I 3462 1660 I 3454 1658 I 3447 1656 I 3440 1653 I 3436 1651 I 3432 1648 I 3428 1646 I 3426 1642 I 3426 1639 I : 0.668 0.652 +S K 
-; 
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53d1491a493469103af57e978fcbf90217c78fa544
-dde39994330e221df0dbfc1930b0737f56e2fa003a94c92901872288e837
-809318327a90c53c3fc944307d547c23ac7ebc117472148c760b6521a27d
-d710d6a15aac97a08f1869d8b22690b8dce84726fc3f55d0f00d439dbb44
-361ecb4a724261a2c8c7688ffff0ac3cb72634b5761f58d5756215ff4eb3
-42bfc4693d7e5092125bb6e6d33094b4b2c1596ff8e0285dc32ff3aff4f9
-b02a42c32cf40602b9f1061c0a35313175caf427a29d83816ee0022f8c47
-6c2c18459180d6b50f42b824f2c81e044c3b87d54ad7595fca4bf9a4c038
-d37ffe45474a87bfea5ad8b038d42995dea5f8ccc8a7fe73c109131c95cf
-0d8c5202c01b86a803616b491e987c4a5ba00ef54ed6bb56196a143df57b
-087704ec3c936784d35ecdc2a674594335c85177378de5ec467c9b898056
-b33c6a2c0c979596e2c24604a7017049cae76a691ff50adcfb5cef5b9577
-c0dfb27e22bfc9e2f6e1d68d118ee9266a479f434342b5540ee5035808b6
-ffa593f98ea96821451e16ab1984a52068a8735132ff829e12f531e49caa
-ecc88d93abb5047e84d4f8950ccd827f7191ad58916dec22aa4558cad050
-0585c7d8f39e0431c3c132328255766ca4763c7f7f8baa46671219a44a39
-4bd9d14babc0d74898e6da1d20c17aab25617a5b99730ddeeb343041beb2
-aed1941375f4f9cda99c8596c0982b16fea2f378f85910fe8dd4f925c8db
-a8ba91b0af2b634c12593776a0759dfcc554104edc8895076ff3bd150329
-8868cd0805a0d8bda115e4601edd8664ac3109030c71e65b93d4d5bbcab1
-1d0bcee131d8a816069dca61ffd3b38c0065392c0ef8201fc27a4b01ea26
-c273cbc8f420b5a9c24deaffc0284bed7ca6a2c070fa44514eca8f9f41cc
-5f872eb63e15628cee3940cb79a256b36e84593e7548594228aaee214288
-08ab3fdb27401814748ec81929972b88aa21ba4f368d4ccb232fa40e55dd
-03503a21b6a3c7548c7fda68828804382ab7f142e41b932d036c3744c46b
-da6aeb59f6ac94b504311d467f3533cac20c520fd67067383425cdb2b5ea
-fd32ac79902c5fe470b1a283b9e3ef84ac6578660e5f1d038a72bea3f3f8
-3f33aec27934b6c8f5e4ff2a0d88f69085904743f2cad24a862006c1210d
-dcf2d6175a1edfac9010c20b310c449faf9c851140ad6ab7fcb45e2bb1b3
-d5d548b384c45bee0f4faca3ba96e19ef2b55e0c48f9eae9c6e617cc2ed9
-4b12856a825c6c5caae5ab866b3f5b2d12404d03d8c25145f4487b616f3f
-a87ec5a4ac70d2b5d936de3e76a3500c2063ce56a8e3aee706f8d2dea774
-71c4132e10a318cd52724e153ffeaea82636bf9e62c44e04c6e00a543bb6
-db592f91f0a5137ef0e9ac4b9000c0e21fc505722a811a0ffbbcc63dfbea
-cff2c09cf7bccc5967b86f9784e06815210a0aa2e3f46d7ffa9b63994a4b
-6581e7b5643242417f01a293d865ebc0bb2f19de268a02ae04e4552e2443
-78c6b30e4bda116bad5c90f8520000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 21 /g94 put
-dup 22 /g381 put
-dup 23 /g364 put
-pop
-2777 1935 M <15>S 
-2825 1935 M <16>S  2880 1935 M <08>S  2923 1935 M <17>S  2973 1935 M <03>S  3025 1935 M <02>S  3060 1935 M <0C>S  
-N 3286 2107 M 3323 2107 I 3304 2143 I 3286 2107 I C 
- O N 3286 2107 M 3323 2107 I 3304 2143 I 3286 2107 I : 0.668 0.652 +S K 
-; N 3304 2107 M 3304 1610 I : 0.668 0.652 +S K 
-; N 2696 1106 M 2697 1103 I 2699 1101 I 2702 1097 I 2706 1095 I 2711 1092 I 2717 1089 I 2724 1087 I 2732 1086 I 2741 1084 I 2750 1082 I 2771 1079 I 2794 1077 I 2818 1076 I 2843 1077 I 2866 1079 I 2886 1082 I 2896 1084 I 2904 1086 I 2912 1087 I 2919 1089 I 2925 1092 I 2930 1095 I 2934 1097 I 2937 1101 I 2939 1103 I 2939 1106 I 2939 1106 I 2939 1109 I 2937 1112 I 2934 1115 I 2930 1118 I 2925 1120 I 2919 1123 I 2912 1125 I 2904 1127 I 2896 1129 I 2886 1131 I 2866 1133 I 2843 1135 I 2818 1136 I 2794 1135 I 2771 1133 I 2750 1131 I 2741 1129 I 2732 1127 I 2724 1125 I 2717 1123 I 2711 1120 I 2706 1118 I 2702 1115 I 2699 1112 I 2697 1109 I 2696 1106 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2696 1106 M 2697 1103 I 2699 1101 I 2702 1097 I 2706 1095 I 2711 1092 I 2717 1089 I 2724 1087 I 2732 1086 I 2741 1084 I 2750 1082 I 2771 1079 I 2794 1077 I 2818 1076 I 2843 1077 I 2866 1079 I 2886 1082 I 2896 1084 I 2904 1086 I 2912 1087 I 2919 1089 I 2925 1092 I 2930 1095 I 2934 1097 I 2937 1101 I 2939 1103 I 2939 1106 I 2939 1106 I 2939 1109 I 2937 1112 I 2934 1115 I 2930 1118 I 2925 1120 I 2919 1123 I 2912 1125 I 2904 1127 I 2896 1129 I 2886 1131 I 2866 1133 I 2843 1135 I 2818 1136 I 2794 1135 I 2771 1133 I 2750 1131 I 2741 1129 I 2732 1127 I 2724 1125 I 2717 1123 I 2711 1120 I 2706 1118 I 2702 1115 I 2699 1112 I 2697 1109 I 2696 1106 I : 0.668 0.652 +S K 
-; N 2800 1041 M 2836 1041 I 2818 1076 I 2800 1041 I C 
- O N 2800 1041 M 2836 1041 I 2818 1076 I 2800 1041 I : 0.668 0.652 +S K 
-; N 2818 1041 M 2818 544 I : 0.668 0.652 +S K 
-; N 3201 639 M 3164 639 I 3183 603 I 3201 639 I C 
- O N 3201 639 M 3164 639 I 3183 603 I 3201 639 I : 0.668 0.652 +S K 
-; N 3183 639 M 3183 1136 I : 0.668 0.652 +S K 
-; N 3061 573 M 3062 571 I 3064 567 I 3067 565 I 3071 562 I 3076 559 I 3082 557 I 3089 554 I 3097 552 I 3105 550 I 3115 549 I 3136 546 I 3158 544 I 3183 544 I 3207 544 I 3230 546 I 3251 549 I 3260 550 I 3269 552 I 3277 554 I 3284 557 I 3290 559 I 3295 562 I 3299 565 I 3302 567 I 3303 571 I 3304 573 I 3304 573 I 3303 576 I 3302 579 I 3299 582 I 3295 585 I 3290 588 I 3284 590 I 3277 592 I 3269 594 I 3260 596 I 3251 598 I 3230 601 I 3207 602 I 3183 603 I 3158 602 I 3136 601 I 3115 598 I 3105 596 I 3097 594 I 3089 592 I 3082 590 I 3076 588 I 3071 585 I 3067 582 I 3064 579 I 3062 576 I 3061 573 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 3061 573 M 3062 571 I 3064 567 I 3067 565 I 3071 562 I 3076 559 I 3082 557 I 3089 554 I 3097 552 I 3105 550 I 3115 549 I 3136 546 I 3158 544 I 3183 544 I 3207 544 I 3230 546 I 3251 549 I 3260 550 I 3269 552 I 3277 554 I 3284 557 I 3290 559 I 3295 562 I 3299 565 I 3302 567 I 3303 571 I 3304 573 I 3304 573 I 3303 576 I 3302 579 I 3299 582 I 3295 585 I 3290 588 I 3284 590 I 3277 592 I 3269 594 I 3260 596 I 3251 598 I 3230 601 I 3207 602 I 3183 603 I 3158 602 I 3136 601 I 3115 598 I 3105 596 I 3097 594 I 3089 592 I 3082 590 I 3076 588 I 3071 585 I 3067 582 I 3064 579 I 3062 576 I 3061 573 I : 0.668 0.652 +S K 
-; F1S64 Ji 
-3314 633 M <01>S 
-3365 633 M <02>S  3418 633 M <03>S  3461 633 M <06>S  
-
-currentfile eexec
-9e67edc6b841302bf9f60fd883cf0817a74d8c06f64e04110b8a8fbca01a
-ac09157fd1dd0a2cf53de9dbebb7526be8a4710216b8ef49ddb796668e31
-c233fb83dc02b2d2a14472ad22181e43970ebc614ef441b65be6b14fc1de
-8e2d04720f64fe9b1dfa786eaafd9161194595996e67514c63887b4e0472
-dc2d182f7b72c6f351696fa1365f6cec2e6ea97d2e4104bccc36c759289f
-d36078b6ad8dabfdeeef7d476f57eabaa59f135adcbd19f15c9a19842d0c
-634976ec2681f843b893d3e6d1ed97aa4e6631112b56219d2265ffaa5ca6
-c47ea37c01ace2adcb823df5f8e1da31b6b1b037800b102d6b8b70a0a33a
-76a9db2d039c97e8c3c851f22e577f3932023012e224e96c854224a70a90
-2e2bad7e9585e04737f0266173090beaee4ee827268ecb2973c65b7056bc
-cd6d0573229b2864a3b80a7adf5fa8e4693ebf90594708437f21f463bfe7
-a9731ed124f654d9dcd2db06f5e6ce2314d9a12f9d400130b140cc4e3663
-52779804a14266198dcef390cf0ecfc57d83143a5b2c4a8ec38eb24e52d5
-b40000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35225o00 findfont /Encoding get
-dup 17 /g1005 put
-pop
-3507 633 M <11>S 
-3559 633 M <06>S 
-3606 633 M <07>S  3659 633 M <02>S  3712 633 M <08>S  3778 633 M <09>S  3818 633 M <0A>S  3867 633 M <0B>S  
-1959 1106 M <01>S 
-2009 1106 M <02>S  2062 1106 M <03>S  2105 1106 M <06>S  
-2151 1106 M <11>S 
-2203 1106 M <06>S 
-2250 1106 M <07>S  2303 1106 M <02>S  2356 1106 M <0C>S  2409 1106 M <0B>S  2444 1106 M <0D>S  2497 1106 M <0E>S  2543 1106 M <0F>S  2567 1106 M <10>S  2620 1106 M <0A>S  2669 1106 M <0B>S  
-F0S64 Ji 
-2732 870 M <03>S 
-2784 870 M <09>S  2839 870 M <08>S  
-2882 870 M <04>S 
-2914 870 M <0C>S 
-2955 870 M <14>S 
-3007 870 M <04>S 
-3039 870 M <0C>S 
-3080 870 M <0D>S  3131 870 M <09>S  
-3186 870 M <0E>S 
-3213 870 M <0F>S 
-N 508 2202 M 508 2675 I 1480 2675 I 1480 2202 I 508 2202 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 508 2675 M 1480 2675 I 1480 2202 I 508 2202 I 508 2675 I C 
-: 0.668 0.652 +S K 
-; 
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53d9c2afa4d9dafa642ff192f6e54e28927b35a54a
-60df3536f01abb08b2d0a3d050c74a6514009934dc894179414d60371574
-e7e85a40bcc8da59d1e0e229242a8622450bbfa7b71cd7d999db5c7aeaa8
-d902c94489d57420c6cb699ead38a862bc2fdb190a563aae8866d2562f5f
-1fb7cdcc27af4450eb378444035db99154abcd9d22b1705be84023ea5388
-35c57a2ebf588369c75f6684b894b9db1f51908e55db7bb069ea52f11063
-859cfd924e1a98621a26a2ae73f8b75a0b8e08ff703b99b8b86f0c70dac5
-b1679e21901422be189eb419737cb606b3759e46f8c3ef7d07aff546d0c0
-da614d25fa4568303a112c3018a4a446c915a1050d9eb4a711627597a602
-61257811cfe55cafccf6e315bd5259c7831babf010c0bc5e2297d237e4d3
-126a3075c09cd3f33d73eb28baf134386731722c6a8ecba611f777dffc1a
-4a2aaa9d42aa7228b30000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 24 /g121 put
-pop
-736 2348 M <18>S 
-793 2348 M <0B>S 
-846 2348 M <10>S  
-
-currentfile eexec
-9e67edc6b841302bf9f60fd9d4da1e6b3c8eb24a7a9a805dd8a805fb98b4
-cc97c66e38b492cf50ee1828d692c2379a9476bea240ce0b306e0e56dced
-c6cb7e7f3ed81bbd6f53da86e1c189f604a875ddace4717deccd986e834c
-f98e749536c9e33965779172c1742ee47cac16fa2de6c3907335d9d263ed
-48e55bcbd3d3dd987493df36104a57eaf3bccf3f9c9985a88f6c02632307
-ad248742c48c3ef876cb8eb07296139780fe6c9ca0ed8787d5db73c2a3fe
-a3066474d54673acd199c3a0bbd55e861564dcf65586ece0539a17e02441
-3c841f167afeb6c0a62b49d771e3ff2eb5e1572f6ed1ea1d316b66b0993c
-0554230d7599e57d569f03a50de40342ba1b99ad5cc5cdc2aee8f5e0d7df
-966e50f8dd4785aeb1545df95aea36490d3fec5803fe8c15197af623a787
-82d94ae24974940ac0dc291f69c0ecb38d38687e309e705bc4dfda521e45
-776bfe26ccf42b08ae416541b8ade0feb190d88792d05d83bac1bebff155
-f33c698da9ba73726b1883aa353b3f3f614dad76df89810622b305eb2892
-3f80eee9332de66cd18aae533a10e79f829bc1b0deb29fcaa9ed757b45d2
-2a69fc5a36af35b40496140c2d4c62b9fd2df8a67df61fc69633b95620f5
-cf73b391840000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-/TT35224o00 findfont /Encoding get
-dup 25 /g296 put
-pop
-869 2348 M <13>S 
-894 2348 M <05>S  949 2348 M <02>S  985 2348 M <03>S  1036 2348 M <07>S  1073 2348 M <19>S  1105 2348 M <0D>S  1156 2348 M <08>S  1199 2348 M <03>S  
-897 2469 M <16>S 
-952 2469 M <12>S  1002 2469 M <03>S  1053 2469 M <07>S  
-763 2589 M <09>S 
-818 2589 M <0B>S 
-871 2589 M <09>S 
-926 2589 M <10>S  949 2589 M <11>S  1004 2589 M <03>S  1056 2589 M <12>S  1105 2589 M <13>S  1130 2589 M <08>S  1173 2589 M <03>S  
-N 751 2172 M 752 2169 I 753 2166 I 756 2164 I 760 2161 I 765 2158 I 772 2156 I 779 2153 I 787 2151 I 795 2149 I 804 2147 I 825 2145 I 848 2144 I 873 2143 I 897 2144 I 920 2145 I 940 2147 I 950 2149 I 959 2151 I 966 2153 I 973 2156 I 979 2158 I 984 2161 I 989 2164 I 991 2166 I 993 2169 I 994 2172 I 994 2172 I 993 2176 I 991 2178 I 989 2181 I 984 2184 I 979 2187 I 973 2189 I 966 2191 I 959 2193 I 950 2195 I 940 2197 I 920 2200 I 897 2201 I 873 2202 I 848 2201 I 825 2200 I 804 2197 I 795 2195 I 787 2193 I 779 2191 I 772 2189 I 765 2187 I 760 2184 I 756 2181 I 753 2178 I 752 2176 I 751 2172 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 751 2172 M 752 2169 I 753 2166 I 756 2164 I 760 2161 I 765 2158 I 772 2156 I 779 2153 I 787 2151 I 795 2149 I 804 2147 I 825 2145 I 848 2144 I 873 2143 I 897 2144 I 920 2145 I 940 2147 I 950 2149 I 959 2151 I 966 2153 I 973 2156 I 979 2158 I 984 2161 I 989 2164 I 991 2166 I 993 2169 I 994 2172 I 994 2172 I 993 2176 I 991 2178 I 989 2181 I 984 2184 I 979 2187 I 973 2189 I 966 2191 I 959 2193 I 950 2195 I 940 2197 I 920 2200 I 897 2201 I 873 2202 I 848 2201 I 825 2200 I 804 2197 I 795 2195 I 787 2193 I 779 2191 I 772 2189 I 765 2187 I 760 2184 I 756 2181 I 753 2178 I 752 2176 I 751 2172 I : 0.668 0.652 +S K 
-; N 1255 1704 M 1219 1704 I 1237 1669 I 1255 1704 I C 
- O N 1255 1704 M 1219 1704 I 1237 1669 I 1255 1704 I : 0.668 0.652 +S K 
-; N 1237 1704 M 1237 2202 I : 0.668 0.652 +S K 
-; N 1116 1639 M 1116 1636 I 1118 1633 I 1121 1631 I 1125 1628 I 1131 1625 I 1137 1623 I 1143 1620 I 1151 1618 I 1160 1616 I 1169 1615 I 1190 1612 I 1212 1610 I 1237 1610 I 1261 1610 I 1284 1612 I 1305 1615 I 1315 1616 I 1323 1618 I 1331 1620 I 1338 1623 I 1344 1625 I 1349 1628 I 1354 1631 I 1356 1633 I 1358 1636 I 1359 1639 I 1359 1639 I 1358 1642 I 1356 1645 I 1354 1648 I 1349 1651 I 1344 1653 I 1338 1656 I 1331 1658 I 1323 1660 I 1315 1662 I 1305 1664 I 1284 1667 I 1261 1668 I 1237 1669 I 1212 1668 I 1190 1667 I 1169 1664 I 1160 1662 I 1151 1660 I 1143 1658 I 1137 1656 I 1131 1653 I 1125 1651 I 1121 1648 I 1118 1645 I 1116 1642 I 1116 1639 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 1116 1639 M 1116 1636 I 1118 1633 I 1121 1631 I 1125 1628 I 1131 1625 I 1137 1623 I 1143 1620 I 1151 1618 I 1160 1616 I 1169 1615 I 1190 1612 I 1212 1610 I 1237 1610 I 1261 1610 I 1284 1612 I 1305 1615 I 1315 1616 I 1323 1618 I 1331 1620 I 1338 1623 I 1344 1625 I 1349 1628 I 1354 1631 I 1356 1633 I 1358 1636 I 1359 1639 I 1359 1639 I 1358 1642 I 1356 1645 I 1354 1648 I 1349 1651 I 1344 1653 I 1338 1656 I 1331 1658 I 1323 1660 I 1315 1662 I 1305 1664 I 1284 1667 I 1261 1668 I 1237 1669 I 1212 1668 I 1190 1667 I 1169 1664 I 1160 1662 I 1151 1660 I 1143 1658 I 1137 1656 I 1131 1653 I 1125 1651 I 1121 1648 I 1118 1645 I 1116 1642 I 1116 1639 I : 0.668 0.652 +S K 
-; 892 1935 M <15>S 
-940 1935 M <16>S  995 1935 M <08>S  1038 1935 M <17>S  1088 1935 M <03>S  1140 1935 M <02>S  1175 1935 M <0C>S  
-N 854 2107 M 891 2107 I 873 2143 I 854 2107 I C 
- O N 854 2107 M 891 2107 I 873 2143 I 854 2107 I : 0.668 0.652 +S K 
-; N 873 2107 M 873 1610 I : 0.668 0.652 +S K 
-; N 568 2261 M 568 2735 I 1541 2735 I 1541 2261 I 568 2261 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 568 2735 M 1541 2735 I 1541 2261 I 568 2261 I 568 2735 I C 
-: 0.668 0.652 +S K 
-; 797 2408 M <18>S 
-854 2408 M <0B>S 
-906 2408 M <10>S  
-929 2408 M <13>S 
-954 2408 M <05>S  1010 2408 M <02>S  1045 2408 M <03>S  1097 2408 M <07>S  1133 2408 M <19>S  1165 2408 M <0D>S  1216 2408 M <08>S  1259 2408 M <03>S  
-959 2528 M <16>S 
-1014 2528 M <12>S  1063 2528 M <03>S  1114 2528 M <07>S  
-824 2649 M <09>S 
-879 2649 M <0B>S 
-931 2649 M <09>S 
-986 2649 M <10>S  1010 2649 M <11>S  1065 2649 M <03>S  1116 2649 M <12>S  1165 2649 M <13>S  1191 2649 M <08>S  1234 2649 M <03>S  
-N 629 2320 M 629 2794 I 1602 2794 I 1602 2320 I 629 2320 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 629 2794 M 1602 2794 I 1602 2320 I 629 2320 I 629 2794 I C 
-: 0.668 0.652 +S K 
-; 858 2467 M <18>S 
-915 2467 M <0B>S 
-967 2467 M <10>S  
-990 2467 M <13>S 
-1016 2467 M <05>S  1071 2467 M <02>S  1106 2467 M <03>S  1158 2467 M <07>S  1194 2467 M <19>S  1227 2467 M <0D>S  1278 2467 M <08>S  1321 2467 M <03>S  
-1019 2587 M <16>S 
-1074 2587 M <12>S  1123 2587 M <03>S  1175 2587 M <07>S  
-885 2708 M <09>S 
-940 2708 M <0B>S 
-992 2708 M <09>S 
-1047 2708 M <10>S  1071 2708 M <11>S  1126 2708 M <03>S  1178 2708 M <12>S  1227 2708 M <13>S  1252 2708 M <08>S  1295 2708 M <03>S  
-N 690 2380 M 690 2853 I 1662 2853 I 1662 2380 I 690 2380 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 690 2853 M 1662 2853 I 1662 2380 I 690 2380 I 690 2853 I C 
-: 0.668 0.652 +S K 
-; 925 2647 M <09>S 
-980 2647 M <0B>S 
-1032 2647 M <09>S 
-1088 2647 M <10>S  1111 2647 M <11>S  1166 2647 M <03>S  1218 2647 M <12>S  1267 2647 M <13>S  1292 2647 M <08>S  1335 2647 M <03>S  1387 2647 M <0C>S  
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_T3Hdr 5.0 0
-{version cvi 2016 ge{32/FontType resourcestatus{pop pop true}{false}ifelse}
-{false}ifelse}exec/Is2016andT32? exch def/T32DefSBCMap{/CIDInit/ProcSet
-findresource begin 10 dict begin begincmap/CIDSystemInfo 3 dict dup begin
-/Registry(Adobe)def/Ordering(Identity1)def/Supplement 0 def end def/CMapType 0
-def/WMode 0 def 1 begincodespacerange<00><ff>endcodespacerange 1 begincidrange
-<00><ff>0 endcidrange endcmap/DrvSBCMap currentdict/CMap defineresource pop end
-end}bind def Is2016andT32?{T32DefSBCMap}def/T32RsrcBegin{Is2016andT32?{
-/BitmapFontInit/ProcSet findresource begin}if}bind def/T32RsrcEnd{Is2016andT32?
-{end}if}bind def/AddT32Char{6 1 roll 0 get 7 1 roll pop pop 5 1 roll pop
-findfont/TT32R get addglyph}bind def/AddT3Char{findfont dup 5 2 roll 1 index
-length 0 gt{cvx 1 index exch 4 exch put dup(imagemask)cvx cvn 5 exch put cvx}
-{pop cvx}ifelse 3 -1 roll/CharProcs get 3 1 roll put dup/Encoding get 5 -1 roll
-4 index put/Metrics get 3 1 roll put}bind def/AddT3T32Char Is2016andT32?{
-/AddT32Char}{/AddT3Char}ifelse load def/GreNewFontT32{5 dict begin exch
-/FontMatrix exch def exch/FontBBox exch def exch pop exch pop/CIDFontType 4 def
-dup currentdict end/CIDFont defineresource 3 -1 roll dup/DrvSBCMap dup/CMap
-resourcestatus{pop pop}{T32DefSBCMap}ifelse 5 -1 roll[exch]composefont dup
-length dict copy dup/FID undef begin exch/TT32R exch def currentdict end
-definefont/BitmapFontInit/ProcSet findresource begin/TT32R get[14 0 0 0 0 0]<>0
-4 -1 roll addglyph end}bind def/GreNewFontT3{11 dict begin pop/FontType 3 def
-/FontMatrix exch def/FontBBox exch def/Encoding exch def/CharProcs 257 dict def
-CharProcs/.notdef{}put/Metrics 257 dict def Metrics/.notdef 3 -1 roll put
-AddFontInfoBegin AddFontInfo AddFontInfoEnd/BuildChar{userdict begin/char exch
-def dup/charname exch/Encoding get char get def dup/Metrics get charname 2 copy
-known{get aload pop}{pop/.notdef get aload pop}ifelse setcachedevice begin
-Encoding char get CharProcs exch 2 copy known{get}{pop/.notdef get}ifelse end
-exec end}def currentdict end definefont pop}bind def/GreNewFont{Is2016andT32?
-{GreNewFontT32}{GreNewFontT3}ifelse}bind def/UDF3{Is2016andT32?{/BitmapFontInit
-/ProcSet findresource begin dup/CIDFont findresource removeall/CIDFont
-undefineresource undefinefont end}{pop UDF}ifelse}bind def
-%%EndResource
-end reinitialize
-/TT35226b00
-[66 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 66 div 0 0 -1 66 div 0 0 ]
-/__TT35226b00
-GreNewFont
-T32RsrcBegin
-
-1
-/g100 [33 0 1 -42 33 0 ] 
-/g100 [32 42 true [1 0 0 1 -1 42 ]  0 0]
-[<ffffffff
-ffffffff
-ffffffff
-ffffffff
-ffffffff
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
-0007e000
->
- ]
-/TT35226b00 AddT3T32Char
-
-2
-/g381 [35 0 3 -32 32 1 ] 
-/g381 [29 33 true [1 0 0 1 -3 32 ]  0 0]
-[<003fe000
-00fffc00
-03ffff00
-07ffff80
-0fffffc0
-1fe03fc0
-3fc00fe0
-3f8007e0
-7f0007f0
-7e0003f0
-7e0003f0
-7e0003f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fe0003f0
-7e0003f0
-7e0003f0
-7f0007f0
-3f000fe0
-3fc01fe0
-1fe03fc0
-1fffff80
-0fffff00
-07fffe00
-01fff800
-003fc000
->
- ]
-/TT35226b00 AddT3T32Char
-
-3
-/g449 [48 0 2 -31 46 0 ] 
-/g449 [44 31 true [1 0 0 1 -2 31 ]  0 0]
-[<f8000f8001f0
-fc001f8001f0
-fc001f8001f0
-7c001fc003f0
-7e003fc003e0
-7e003fc003e0
-3e003fc007e0
-3f003fe007c0
-3f007fe007c0
-1f007fe00fc0
-1f807ff00fc0
-1f8079f00f80
-1f80f9f00f80
-0f80f9f81f80
-0fc0f0f81f00
-0fc1f0f81f00
-07c1f0f83f00
-07e1f0fc3e00
-07e1e07c3e00
-03e3e07c3e00
-03f3e07e7c00
-03f3e03e7c00
-01f3c03e7c00
-01f7c03ff800
-01ffc01ff800
-00ff801ff800
-00ff801ff800
-00ff801ff000
-00ff800ff000
-007f000ff000
-007f0007e000
->
- ]
-/TT35226b00 AddT3T32Char
-
-4
-/g258 [32 0 3 -32 27 1 ] 
-/g258 [24 33 true [1 0 0 1 -3 32 ]  0 0]
-[<01ff80
-1ffff0
-3ffff8
-7ffffc
-7f01fe
-7800fe
-60007e
-00007f
-00003f
-00003f
-00003f
-00003f
-00003f
-00003f
-007fff
-03ffff
-0fffff
-3fffff
-3fc03f
-7f003f
-7e003f
-fc003f
-fc003f
-fc003f
-fc003f
-fc007f
-fe00ff
-7e01ff
-7f87df
-3fff9f
-1fff1f
-0ffe1f
-03f800
->
- ]
-/TT35226b00 AddT3T32Char
-
-5
-/g396 [23 0 5 -32 22 0 ] 
-/g396 [17 32 true [1 0 0 1 -5 32 ]  0 0]
-[<001f00
-f87f80
-f8ff80
-f9ff80
-f9ff80
-fbe180
-ffc000
-ff8000
-ff0000
-fe0000
-fe0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
->
- ]
-/TT35226b00 AddT3T32Char
-
-6
-/g282 [35 0 3 -45 30 1 ] 
-/g282 [27 46 true [1 0 0 1 -3 45 ]  0 0]
-[<000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-007e07e0
-03ff87e0
-07ffe7e0
-0ffff7e0
-1fffffe0
-1fe0ffe0
-3f807fe0
-3f003fe0
-7f001fe0
-7e000fe0
-7e0007e0
-fe0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-7e0007e0
-7e000fe0
-7f001fe0
-7f003fe0
-3f807fe0
-3fc1ffe0
-1ffffbe0
-0ffff3e0
-07ffe3e0
-03ff83e0
-00fe0000
->
- ]
-/TT35226b00 AddT3T32Char
-
-7
-/g400 [26 0 3 -32 24 1 ] 
-/g400 [21 33 true [1 0 0 1 -3 32 ]  0 0]
-[<00fe00
-07ffc0
-0fffe0
-1fffe0
-3f81e0
-3e0060
-7c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7e0000
-3f8000
-3fe000
-1ff800
-0ffe00
-07ff80
-01ffe0
-003fe0
-000ff0
-0007f8
-0003f8
-0001f8
-0001f8
-0001f8
-0001f8
-c003f8
-f003f0
-fc0ff0
-ffffe0
-7fffc0
-3fff00
-07fc00
->
- ]
-/TT35226b00 AddT3T32Char
-
-8
-/g3 [15 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT35226b00 AddT3T32Char
-
-9
-/g410 [22 0 1 -39 20 1 ] 
-/g410 [19 40 true [1 0 0 1 -1 39 ]  0 0]
-[<07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-ffffe0
-ffffe0
-ffffe0
-ffffe0
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07e000
-07f000
-03f860
-03ffe0
-03ffe0
-01ffe0
-00ffe0
-003f80
->
- ]
-/TT35226b00 AddT3T32Char
-
-10
-/g346 [35 0 5 -45 30 0 ] 
-/g346 [25 45 true [1 0 0 1 -5 45 ]  0 0]
-[<fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc0fe000
-fc3ff800
-fcfffc00
-fdfffe00
-fffffe00
-ffe0ff00
-ffc07f00
-ff803f00
-ff003f80
-fe001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
->
- ]
-/TT35226b00 AddT3T32Char
-
-11
-/g286 [33 0 3 -32 30 1 ] 
-/g286 [27 33 true [1 0 0 1 -3 32 ]  0 0]
-[<003fc000
-00fff800
-03fffc00
-07fffe00
-0fe07f00
-1f803f80
-3f001f80
-3f000fc0
-7e000fc0
-7e0007c0
-7e0007e0
-7c0007e0
-fc0007e0
-fc0007e0
-ffffffe0
-ffffffe0
-ffffffe0
-ffffffc0
-fc000000
-fc000000
-fc000000
-fc000000
-7c000000
-7e000000
-7e000000
-3f000000
-3f800000
-1fc001c0
-1ff00fc0
-0fffffc0
-03ffffc0
-01ffff00
-003ff000
->
- ]
-/TT35226b00 AddT3T32Char
-
-12
-/g69 [43 0 6 -42 38 0 ] 
-/g69 [32 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7f00003f
-ff80003f
-ffc0003f
-ffc0003f
-ffe0003f
-ffe0003f
-fff0003f
-fdf8003f
-fdf8003f
-fcfc003f
-fcfc003f
-fc7e003f
-fc7e003f
-fc3f003f
-fc3f003f
-fc1f803f
-fc1f803f
-fc0fc03f
-fc0fc03f
-fc07e03f
-fc07e03f
-fc03f03f
-fc03f03f
-fc01f83f
-fc01f83f
-fc00fc3f
-fc00fc3f
-fc007e3f
-fc007e3f
-fc003f3f
-fc003f3f
-fc001fbf
-fc001fbf
-fc000fff
-fc000fff
-fc0007ff
-fc0007ff
-fc0003ff
-fc0003ff
-fc0001ff
-fc0000ff
-fc00007e
->
- ]
-/TT35226b00 AddT3T32Char
-
-13
-/g17 [36 0 6 -42 34 0 ] 
-/g17 [28 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7fff8000
-fffff000
-fffff800
-fffffc00
-fffffe00
-fc01ff00
-fc007f00
-fc003f80
-fc003f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f00
-fc003f00
-fc003f00
-fc007e00
-fc01fc00
-fffff800
-fffff800
-fffffe00
-ffffff00
-fc007f80
-fc001fc0
-fc000fe0
-fc0007e0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0007f0
-fc0007e0
-fc001fe0
-fc007fc0
-ffffffc0
-ffffff80
-fffffe00
-fffff800
-7fffc000
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-F /F2 0 /0 F /TT35226b00 mF 
-/F2S42 F2 [66.664 0 0 -66.664 0 0 ] mFS
-F2S42 Ji 
-893 2933 M <01>S 
-927 2933 M <02>S  963 2933 M <03>S  1012 2933 M <04>S  1045 2933 M <05>S  1069 2933 M <06>S  1106 2933 M <07>S  1133 2933 M <08>S  1148 2933 M <02>S  1184 2933 M <09>S  1207 2933 M <0A>S  1243 2933 M <0B>S  1278 2933 M <05>S  1302 2933 M <08>S  1317 2933 M <0B>S  1352 2933 M <0C>S  1396 2933 M <0D>S 
-1433 2933 M <07>S  
-T32RsrcBegin
-
-14
-/g94 [31 0 2 -43 28 1 ] 
-/g94 [26 44 true [1 0 0 1 -2 43 ]  0 0]
-[<003fc000
-01fff800
-07fffe00
-0fffff00
-1fffff00
-3fe03f00
-3f800f00
-3f000300
-7e000000
-7e000000
-7e000000
-7e000000
-7e000000
-7f000000
-7f000000
-3f800000
-3fe00000
-1ff00000
-0ffc0000
-07ff0000
-03ffc000
-01fff000
-007ffc00
-001ffe00
-0007ff00
-0001ff00
-00007f80
-00003f80
-00001fc0
-00000fc0
-00000fc0
-00000fc0
-00000fc0
-00000fc0
-00000fc0
-c0001f80
-f0003f80
-f8007f80
-ff01ff00
-fffffe00
-7ffffc00
-3ffff800
-0fffe000
-01ff0000
->
- ]
-/TT35226b00 AddT3T32Char
-
-15
-/g39 [42 0 3 -43 37 1 ] 
-/g39 [34 44 true [1 0 0 1 -3 43 ]  0 0]
-[<0000ffc000
-0007fff800
-003fffff00
-007fffff80
-01ffffffc0
-03ff807fc0
-07fc000fc0
-07f00003c0
-0fe00000c0
-1fc0000000
-1f80000000
-3f80000000
-3f00000000
-7f00000000
-7e00000000
-7e00000000
-7e00000000
-fc00000000
-fc00000000
-fc00000000
-fc003fff80
-fc003fffc0
-fc003fffc0
-fc003fffc0
-fc003fffc0
-fc00000fc0
-fc00000fc0
-fe00000fc0
-7e00000fc0
-7e00000fc0
-7f00000fc0
-7f00000fc0
-3f80000fc0
-3f80000fc0
-1fc0000fc0
-1fe0000fc0
-0ff0000fc0
-07fc001fc0
-03ff807fc0
-01ffffffc0
-00ffffff80
-003fffff00
-000ffff800
-0001ffc000
->
- ]
-/TT35226b00 AddT3T32Char
-
-16
-/g116 [60 0 2 -42 58 0 ] 
-/g116 [56 42 true [1 0 0 1 -2 42 ]  0 0]
-[<fc00007c00003e
-fc0000fe00003f
-fc0000fe00003e
-7e0000fe00007e
-7e0000ff00007e
-7e0001ff00007c
-7e0001ff0000fc
-3f0001ff8000fc
-3f0001ff8000fc
-3f0003ef8000f8
-1f8003ef8001f8
-1f8003efc001f8
-1f8003efc001f0
-0f8007c7c001f0
-0fc007c7e003f0
-0fc007c7e003e0
-0fc00783e003e0
-07c00f83e003e0
-07e00f83f007e0
-07e00f83f007c0
-03e00f01f007c0
-03f01f01f00fc0
-03f01f01f80f80
-03f01f00f80f80
-01f03e00f80f80
-01f83e00fc1f80
-01f83e00fc1f00
-00f83e007c1f00
-00f87c007c1f00
-00fc7c007e3e00
-00fc7c007e3e00
-007c7c003e3e00
-007ef8003f3e00
-007ef8003f7c00
-003ef8001f7c00
-003ef8001f7c00
-003ff0001ff800
-001ff0001ff800
-001ff0000ff800
-001ff0000ff000
-001fe0000ff000
-000fe00007f000
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-2175 2755 M <01>S 
-2209 2755 M <02>S  2245 2755 M <03>S  2294 2755 M <04>S  2327 2755 M <05>S  2351 2755 M <06>S  2387 2755 M <07>S  2414 2755 M <08>S  2430 2755 M <0E>S  2461 2755 M <0F>S  2504 2755 M <10>S  
-T32RsrcBegin
-
-17
-/g876 [26 0 0 -48 25 9 ] 
-/g876 [25 57 true [1 0 0 1 0 48 ]  0 0]
-[<00000f80
-00000f80
-00000f80
-00001f80
-00001f00
-00003f00
-00003f00
-00003e00
-00007e00
-00007c00
-00007c00
-0000fc00
-0000f800
-0000f800
-0001f800
-0001f000
-0003f000
-0003e000
-0003e000
-0007e000
-0007c000
-0007c000
-000fc000
-000f8000
-000f8000
-001f8000
-001f0000
-003f0000
-003e0000
-003e0000
-007e0000
-007c0000
-007c0000
-00fc0000
-00f80000
-01f80000
-01f80000
-01f00000
-03f00000
-03e00000
-03e00000
-07e00000
-07c00000
-07c00000
-0fc00000
-0f800000
-1f800000
-1f800000
-1f000000
-3f000000
-3e000000
-3e000000
-7e000000
-7c000000
-7c000000
-fc000000
-f8000000
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-2565 2755 M <11>S 
-T32RsrcBegin
-
-18
-/g87 [35 0 6 -42 32 0 ] 
-/g87 [26 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7fff0000
-ffffe000
-fffff800
-fffffc00
-fffffe00
-fc01ff00
-fc007f80
-fc003f80
-fc001f80
-fc001fc0
-fc000fc0
-fc000fc0
-fc000fc0
-fc000fc0
-fc000fc0
-fc000fc0
-fc001f80
-fc001f80
-fc003f80
-fc007f00
-fc01ff00
-fffffe00
-fffffc00
-fffff000
-ffffe000
-ffff0000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-2591 2755 M <12>S 
-2627 2755 M <0F>S  2670 2755 M <10>S  
-N 3061 2202 M 3061 2675 I 3791 2675 I 3791 2202 I 3061 2202 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 3061 2675 M 3791 2675 I 3791 2202 I 3061 2202 I 3061 2675 I C 
-: 0.668 0.652 +S K 
-; F0S64 Ji 
-3220 2469 M <01>S 
-3245 2469 M <02>S  3281 2469 M <03>S  3332 2469 M <10>S  3356 2469 M <11>S  3411 2469 M <03>S  3463 2469 M <12>S  3512 2469 M <13>S  3537 2469 M <08>S  3580 2469 M <03>S  
-N 2210 2172 M 2211 2169 I 2213 2166 I 2215 2164 I 2219 2161 I 2225 2158 I 2231 2156 I 2237 2153 I 2246 2151 I 2254 2149 I 2264 2147 I 2284 2145 I 2307 2144 I 2332 2143 I 2356 2144 I 2379 2145 I 2399 2147 I 2409 2149 I 2417 2151 I 2426 2153 I 2432 2156 I 2438 2158 I 2444 2161 I 2448 2164 I 2450 2166 I 2452 2169 I 2453 2172 I 2453 2172 I 2452 2176 I 2450 2178 I 2448 2181 I 2444 2184 I 2438 2187 I 2432 2189 I 2426 2191 I 2417 2193 I 2409 2195 I 2399 2197 I 2379 2200 I 2356 2201 I 2332 2202 I 2307 2201 I 2284 2200 I 2264 2197 I 2254 2195 I 2246 2193 I 2237 2191 I 2231 2189 I 2225 2187 I 2219 2184 I 2215 2181 I 2213 2178 I 2211 2176 I 2210 2172 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2210 2172 M 2211 2169 I 2213 2166 I 2215 2164 I 2219 2161 I 2225 2158 I 2231 2156 I 2237 2153 I 2246 2151 I 2254 2149 I 2264 2147 I 2284 2145 I 2307 2144 I 2332 2143 I 2356 2144 I 2379 2145 I 2399 2147 I 2409 2149 I 2417 2151 I 2426 2153 I 2432 2156 I 2438 2158 I 2444 2161 I 2448 2164 I 2450 2166 I 2452 2169 I 2453 2172 I 2453 2172 I 2452 2176 I 2450 2178 I 2448 2181 I 2444 2184 I 2438 2187 I 2432 2189 I 2426 2191 I 2417 2193 I 2409 2195 I 2399 2197 I 2379 2200 I 2356 2201 I 2332 2202 I 2307 2201 I 2284 2200 I 2264 2197 I 2254 2195 I 2246 2193 I 2237 2191 I 2231 2189 I 2225 2187 I 2219 2184 I 2215 2181 I 2213 2178 I 2211 2176 I 2210 2172 I : 0.668 0.652 +S K 
-; N 2593 1704 M 2557 1704 I 2575 1669 I 2593 1704 I C 
- O N 2593 1704 M 2557 1704 I 2575 1669 I 2593 1704 I : 0.668 0.652 +S K 
-; N 2575 1704 M 2575 2202 I : 0.668 0.652 +S K 
-; N 2453 1639 M 2454 1636 I 2456 1633 I 2458 1631 I 2462 1628 I 2468 1625 I 2474 1623 I 2481 1620 I 2489 1618 I 2497 1616 I 2507 1615 I 2528 1612 I 2550 1610 I 2575 1610 I 2600 1610 I 2622 1612 I 2643 1615 I 2652 1616 I 2661 1618 I 2669 1620 I 2675 1623 I 2681 1625 I 2687 1628 I 2691 1631 I 2694 1633 I 2696 1636 I 2696 1639 I 2696 1639 I 2696 1642 I 2694 1645 I 2691 1648 I 2687 1651 I 2681 1653 I 2675 1656 I 2669 1658 I 2661 1660 I 2652 1662 I 2643 1664 I 2622 1667 I 2600 1668 I 2575 1669 I 2550 1668 I 2528 1667 I 2507 1664 I 2497 1662 I 2489 1660 I 2481 1658 I 2474 1656 I 2468 1653 I 2462 1651 I 2458 1648 I 2456 1645 I 2454 1642 I 2453 1639 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2453 1639 M 2454 1636 I 2456 1633 I 2458 1631 I 2462 1628 I 2468 1625 I 2474 1623 I 2481 1620 I 2489 1618 I 2497 1616 I 2507 1615 I 2528 1612 I 2550 1610 I 2575 1610 I 2600 1610 I 2622 1612 I 2643 1615 I 2652 1616 I 2661 1618 I 2669 1620 I 2675 1623 I 2681 1625 I 2687 1628 I 2691 1631 I 2694 1633 I 2696 1636 I 2696 1639 I 2696 1639 I 2696 1642 I 2694 1645 I 2691 1648 I 2687 1651 I 2681 1653 I 2675 1656 I 2669 1658 I 2661 1660 I 2652 1662 I 2643 1664 I 2622 1667 I 2600 1668 I 2575 1669 I 2550 1668 I 2528 1667 I 2507 1664 I 2497 1662 I 2489 1660 I 2481 1658 I 2474 1656 I 2468 1653 I 2462 1651 I 2458 1648 I 2456 1645 I 2454 1642 I 2453 1639 I : 0.668 0.652 +S K 
-; N 2313 2107 M 2350 2107 I 2332 2143 I 2313 2107 I C 
- O N 2313 2107 M 2350 2107 I 2332 2143 I 2313 2107 I : 0.668 0.652 +S K 
-; N 2332 2107 M 2332 1610 I : 0.668 0.652 +S K 
-; T32RsrcBegin
-
-19
-/g104 [43 0 6 -42 38 1 ] 
-/g104 [32 43 true [1 0 0 1 -6 42 ]  0 0]
-[<fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fc00003f
-fe00007f
-7e00007e
-7f00007e
-7f0000fe
-3f8001fc
-3fc003f8
-1ff80ff8
-0ffffff0
-07ffffe0
-03ffff80
-00ffff00
-001ff800
->
- ]
-/TT35226b00 AddT3T32Char
-
-20
-/g28 [33 0 6 -42 29 0 ] 
-/g28 [23 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7ffffe
-fffffe
-fffffe
-fffffe
-fffffe
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fffff0
-fffff0
-fffff0
-fffff0
-fffff0
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fffffe
-fffffe
-fffffe
-fffffe
-7ffffe
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-F2S42 Ji 
-3206 2755 M <01>S 
-3240 2755 M <02>S  3276 2755 M <03>S  3325 2755 M <04>S  3358 2755 M <05>S  3382 2755 M <06>S  3418 2755 M <07>S  3445 2755 M <08>S  3461 2755 M <09>S  3484 2755 M <0A>S  3520 2755 M <0B>S  3554 2755 M <08>S  3569 2755 M <13>S  3614 2755 M <14>S  
-N 325 307 M 325 484 I 811 484 I 811 307 I 325 307 I C 
-0.93 0.938 0.895 1 scol  O 0 0 0 1 scol N 325 484 M 811 484 I 811 307 I 325 307 I 325 484 I C 
-: 0.668 0.652 +S K 
-; T32RsrcBegin
-
-21
-/g4 [39 0 1 -42 38 0 ] 
-/g4 [37 42 true [1 0 0 1 -1 42 ]  0 0]
-[<0001fc0000
-0001fc0000
-0003fe0000
-0003fe0000
-0007fe0000
-0007ff0000
-0007ff0000
-000fdf0000
-000f9f8000
-000f9f8000
-001f8fc000
-001f0fc000
-003f0fc000
-003e07e000
-003e07e000
-007e07e000
-007c03f000
-007c03f000
-00fc01f000
-00f801f800
-00f801f800
-01f800fc00
-01f000fc00
-03f000fc00
-03f0007e00
-03e0007e00
-07e0007e00
-07ffffff00
-07ffffff00
-0fffffff80
-0fffffff80
-0f80001f80
-1f80000fc0
-1f00000fc0
-3f00000fc0
-3f000007e0
-3e000007e0
-7e000007e0
-7e000003f0
-7c000003f0
-fc000003f8
-fc000001f0
->
- ]
-/TT35226b00 AddT3T32Char
-
-22
-/g373 [54 0 5 -32 49 0 ] 
-/g373 [44 32 true [1 0 0 1 -5 32 ]  0 0]
-[<000fc001f800
-f83ff007ff00
-f87ffc0fff80
-f8fffc3fffc0
-f9fffe7fffc0
-fbe0ff7c1fe0
-ffc07ff80fe0
-ff803ff007e0
-ff003fe007f0
-fe001fc003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
-fc001f8003f0
->
- ]
-/TT35226b00 AddT3T32Char
-
-23
-/g349 [15 0 4 -43 11 0 ] 
-/g349 [7 43 true [1 0 0 1 -4 43 ]  0 0]
-[<7c
-fe
-fe
-fe
-fe
-7c
-00
-00
-00
-00
-00
-00
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
->
- ]
-/TT35226b00 AddT3T32Char
-
-24
-/g374 [35 0 5 -32 30 0 ] 
-/g374 [25 32 true [1 0 0 1 -5 32 ]  0 0]
-[<000fc000
-f83ff800
-f87ffc00
-f9fffe00
-f9fffe00
-fbe0ff00
-ffc07f00
-ff803f00
-ff003f80
-fe001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
-fc001f80
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-425 376 M <15>S 
-464 376 M <06>S  500 376 M <16>S  556 376 M <17>S  571 376 M <07>S  598 376 M <07>S  625 376 M <17>S  640 376 M <02>S  676 376 M <18>S  
-T32RsrcBegin
-
-25
-/g18 [36 0 3 -43 34 1 ] 
-/g18 [31 44 true [1 0 0 1 -3 43 ]  0 0]
-[<0003fe00
-001fffe0
-007ffff8
-00fffffc
-01fffffe
-03fe01fe
-07f8003e
-0fe0001e
-1fc00006
-1fc00000
-3f800000
-3f000000
-3f000000
-7e000000
-7e000000
-7e000000
-7e000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fe000000
-7e000000
-7e000000
-7f000000
-3f000000
-3f800000
-3f800000
-1fc00006
-1fe0001e
-0ff8003e
-07fe01fe
-03fffffe
-01fffffc
-00fffff0
-003fffc0
-0007fe00
->
- ]
-/TT35226b00 AddT3T32Char
-
-26
-/g367 [15 0 5 -45 11 0 ] 
-/g367 [6 45 true [1 0 0 1 -5 45 ]  0 0]
-[<fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-464 455 M <19>S 
-500 455 M <02>S  537 455 M <18>S  573 455 M <09>S  596 455 M <05>S  620 455 M <02>S  656 455 M <1A>S  
-N 325 69 M 325 247 I 811 247 I 811 69 I 325 69 I C 
-0.93 0.938 0.895 1 scol  O 0 0 0 1 scol N 325 247 M 811 247 I 811 69 I 325 69 I 325 247 I C 
-: 0.668 0.652 +S K 
-; T32RsrcBegin
-
-27
-/g44 [42 0 6 -42 36 0 ] 
-/g44 [30 42 true [1 0 0 1 -6 42 ]  0 0]
-[<fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
->
- ]
-/TT35226b00 AddT3T32Char
-
-28
-/g448 [30 0 1 -31 29 0 ] 
-/g448 [28 31 true [1 0 0 1 -1 31 ]  0 0]
-[<f80001f0
-fc0003f0
-fc0003e0
-7c0007e0
-7e0007e0
-7e0007c0
-3e000fc0
-3f000fc0
-3f000f80
-1f801f80
-1f801f80
-1f801f00
-0fc03f00
-0fc03e00
-07c03e00
-07e07e00
-07e07c00
-03e07c00
-03f0fc00
-03f0f800
-01f0f800
-01f9f800
-01f9f000
-00f9f000
-00ffe000
-007fe000
-007fe000
-007fc000
-003fc000
-003fc000
-001f8000
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-432 139 M <1B>S 
-475 139 M <04>S  508 139 M <18>S  544 139 M <06>S  580 139 M <02>S  617 139 M <1C>S  648 139 M <0B>S  682 139 M <05>S  
-T32RsrcBegin
-
-29
-/g68 [57 0 6 -42 52 0 ] 
-/g68 [46 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7f80000007f8
-ffc000000ffc
-ffe000000ffc
-ffe000001ffc
-fff000001ffc
-fff000003ffc
-fdf000003efc
-fdf800003efc
-fcf800007cfc
-fcfc00007cfc
-fcfc0000fcfc
-fc7c0000f8fc
-fc7e0000f8fc
-fc7e0001f0fc
-fc3e0001f0fc
-fc3f0003f0fc
-fc1f0003e0fc
-fc1f8003e0fc
-fc1f8007c0fc
-fc0f8007c0fc
-fc0fc00fc0fc
-fc07c00f80fc
-fc07e00f80fc
-fc07e01f00fc
-fc03e01f00fc
-fc03f03f00fc
-fc03f03e00fc
-fc01f83e00fc
-fc01f87e00fc
-fc00f87c00fc
-fc00fcfc00fc
-fc00fcf800fc
-fc007ef800fc
-fc007ff800fc
-fc003ff000fc
-fc003ff000fc
-fc003fe000fc
-fc001fe000fc
-fc001fe000fc
-fc001fc000fc
-fc000fc000fc
-fc000f8000fc
->
- ]
-/TT35226b00 AddT3T32Char
-
-30
-/g336 [32 0 2 -32 30 12 ] 
-/g336 [28 44 true [1 0 0 1 -2 32 ]  0 0]
-[<003f8000
-01fffff0
-03fffff0
-07fffff0
-0fe0fff0
-1f803e00
-1f001f00
-3f001f80
-3e000f80
-3e000f80
-3e000f80
-3e000f80
-3e000f80
-3f001f80
-1f001f00
-1f803f00
-0fe0fe00
-0ffffe00
-1ffff800
-3efff000
-3e3f8000
-7c000000
-7c000000
-7c000000
-7f000000
-7ffff000
-3ffffe00
-1fffff80
-0fffffc0
-1f001fe0
-3e0007e0
-7c0003f0
-7c0001f0
-f80001f0
-f80001f0
-f80001f0
-f80003f0
-fc0003e0
-fe000fe0
-7f803fc0
-3fffff80
-1fffff00
-07fffc00
-00ffe000
->
- ]
-/TT35226b00 AddT3T32Char
-T32RsrcEnd
-381 219 M <1D>S 
-439 219 M <04>S  472 219 M <18>S  509 219 M <04>S  541 219 M <1E>S  574 219 M <0B>S  608 219 M <16>S  663 219 M <0B>S  697 219 M <18>S  734 219 M <09>S  
-LH
-%%PageTrailer
-
-%%Trailer
-%%DocumentNeededResources: 
-%%DocumentSuppliedResources: 
-%%+ procset Pscript_WinNT_VMErrorHandler 5.0 0
-%%+ procset Pscript_FatalError 5.0 0
-%%+ procset Pscript_Win_Basic 5.0 0
-%%+ procset Pscript_Win_Utils_L1 5.0 0
-%%+ procset Pscript_Win_GdiObject 5.0 0
-%%+ procset Pscript_Win_GdiObject_L1 5.0 0
-%%+ procset Pscript_Text 5.0 0
-%%+ procset Pscript_T3Hdr 5.0 0
-Pscript_WinNT_Incr dup /terminate get exec
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-ffr-scheduling.dia ns-3.22/src/lte/doc/source/figures/lte-ffr-scheduling.dia
--- ns-3.21/src/lte/doc/source/figures/lte-ffr-scheduling.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/lte-ffr-scheduling.dia	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,10 @@
+     ][s6~и*ni6L>yh%E= %_I_Hh&0>| ?82[_m3BG|f٫>,	̊x1_WGey9/I(He$ϓlzk44)ۤ,LG8}}L̊|]Z,E1:KW?ΪI2K45ŏm>I,6)/N4i}ͪg~niU_u7R',gW9Ǉ!Tfgtaaaɢ($+B,y+Բ8M,'I*vX8r&1T__̝~hy6-z\Uz?˖A}6/{oo~6T5Ie*f4]>f74tjSꖳyr\,(3Y7+a.4)Go_b@Oú-vv:Y\ @cF$3~wHmH<]#	#<X!.hƜhendQ}顼+ڼhP),Rv:JQJn@pjTCQB%>$vpˣ~Ms7$;Wy>_k<b+<R湶B+)hĈDDKKXp!4^shw+<!>ǩ5EHyY&Y~̗ۣey/ZW?YZf亓xai-wzc'cn@Li;MǫHZg4b[M[z/ϻZ'/ ]!I鑨 ˝鼼<D/ˋ<Bʵ˯^iA/_1z:q{A}^!xu{yٙGhU+A>oP7ϽC>bruH`]pݩڠ#}ƻ[=w6z]w$PHka6=9JyZDG7jetMWt~Z鐮!i*<Ӱ+iYy^l빊~#|#IfnXJ!BKڕzOE7)cYwrƀWuw\2>E4,l]w	ޥE.pJ`aㅔί
+`C9VA9DMY3HY)a+g8
+I3FV.dRZQ0͵#Lp:$%Ul"d]*zVBðNk3,PQUsY݅lCU	Uha "&pIU	A^lAUaDwGզ5hטX6Z#qb"rIekA"[LmNwZ&yXu.gcc#kk$N$u#k Pm[ApNl;zf")eDd5h4Yd}i].ԹtP1q1 A	
+aj"Y2g,t>]k9Ǉj09};u{<u'E\4ւ)BND+[7}8M`Ml\1mUņ!۽pmX)A
+5cQЃb.PPVFÜQ,VphJOv-,@	3\-*$a\:S#cޜftm8z/ NlQCc6\]h( AC/PBk,m; QΆUglPzXdt%rQ~\#؝^{R΅F¿eV@y[D-5xVքF1Zm{Q{Ծsюd|~O!ܴں4LX37DC`oJͺ醙2F_֕E]\B6VHָNSۻw?o{{;eiΘ52<%QnaqgذVwufR.-mMO?| V^=ٍfۙ]Ճ1DIf5xkk"owІ^Aፆ^GId*pB)zZB"aZv7viV03cFХ(H2i,6ʌpŮ_lެƝ"t?)ydy?O]!|\rv!9$tO+Z[ndz9kJʍLLTA`p3n^&+XDՒ;`t`f ։S+|K)Mii<e}I=vKsj3S~Dj1 M뤬)-MeRzpT\{	utnuP`: dUѩC`۞N
+mp%5ҵq%f;@i<vrǊq%pղXXQ/gCtG]~^vdv<{;R*jGJD1֋=aGʮB>n;4a3n(0&:fN !Q1G,0Q0kWgxhuHc0fm^XEQ k_l5Zcqv.rj@a!7pH= E*$B=(gòH&}Sddj#41CSZ!v|hꮁTд1{)z7K5C\瑛6
+=T]ȣ#+wЛ	>Tb+$%VC%It2oXƆHanDFҎ?Rq+!+yХ3˄^,ӨquwSDJQ YF0DڽBV5*ƩIqD$;Z8|H?k+-FY(cb--&Zg2"4wSԠ09ŶB2Dڕo<z, ezq89F+jTh6h>el1<h5$f8ŔPn]؀X/pm˭$tt~LQ6vMrk%;GҷvkvVD;zHFc+f+ZK7	㧿u uh680n@:lV!aEvAh푅m2b8dDUhm2=-n5r⁍V$-ySpz2Gob\ZG3f8Zc	8z FiS*jc}'I{XHH*Jn9pP-rFl=^Q:=rk/ZfmWpuB6$ϞǤ1y<\Xت ;;F̝G5~ Z6F5R.~]
+>Hإ@P]лP鑨.\
+w0`Z9뉪, .WJZH\56WhId.2E/xQ>Rc)Hi
+<Lݶ<J`|w>fCdkmU?~'<|u'iz?"9~Hiͅ  
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-ffr-scheduling.pdf ns-3.22/src/lte/doc/source/figures/lte-ffr-scheduling.pdf
--- ns-3.21/src/lte/doc/source/figures/lte-ffr-scheduling.pdf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-ffr-scheduling.pdf	1969-12-31 16:00:00.000000000 -0800
@@ -1,221 +0,0 @@
-%PDF-1.4 
-1 0 obj
-<<
-/Pages 2 0 R
-/Type /Catalog
->>
-endobj
-2 0 obj
-<<
-/Type /Pages
-/Kids [ 3 0 R ]
-/Count 1
->>
-endobj
-3 0 obj
-<<
-/Type /Page
-/Parent 2 0 R
-/Resources <<
-/XObject << /Im0 8 0 R >>
-/ProcSet 6 0 R >>
-/MediaBox [0 0 776.919 650.932]
-/CropBox [0 0 776.919 650.932]
-/Contents 4 0 R
-/Thumb 11 0 R
->>
-endobj
-4 0 obj
-<<
-/Length 5 0 R
->>
-stream
-q
-776.919 0 0 650.932 0 0 cm
-/Im0 Do
-Q
-endstream
-endobj
-5 0 obj
-39
-endobj
-6 0 obj
-[ /PDF /Text /ImageC ]
-endobj
-7 0 obj
-<<
->>
-endobj
-8 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Im0
-/Filter [ /FlateDecode ]
-/Width 1036
-/Height 868
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/SMask 15 0 R
-/Length 9 0 R
->>
-stream
-x	teڿ]Y:!@M(AaT KUt3 qA0wQTDAGP@-	o!ݧ^UUY;uϑtO]2                              gfs	zfAqqlo̕+WF/^$MQJü 5رG~6l|!Co7\v5>IMMgDFFۗNi@+w֍r}ƌ;sZ/9p}de]v|)<~zYKqN8ѯ_?ځҀV8#8#@i8## AG JGpG B8P8#8@pp # Ѫhs0',~e햓F{-YwB0ԏk^L:!n&GhPvrxYQuWz-痃#eOsdͳ5{x:1u;[w-YｐPĔ/s+~xV$O}c2Ǧ3fԹK?SZ]sw^¾>ߤ,\ 8#hR).T=VfMg`[A7$imK9ôs>x3S3n@1nձJ;BGf:>,Y/|vO?_uCu_?Vb~98B]AB-LxﭽtBQˏMś'	^ZÙC<KYOÅ?[hUWGGp).m?셋/uoL+kB~C>kC̿/gUtuϓ]_ AKqABBڇ'bşŦp7\qpI?!|jPubŭ_98S7iȨ3bPkGЅ]ӻMSѩwX*ЯCC^rp9BH8^Sm,_ns~-p?A63hMWd>Gppq6_ʰef/u~*}Qƪ*	^z2VWpkGHC#8*Kp&wN\#1B-%y|6G#DMICy3{PaWnnarpztڛL\VKA~t%}ۣڵ휪fuPo&IUlOU>Uj.s'O:.u[^?t[ w('[S?!ǟQqcv:yBw*-}_~U>U"GPW呿vعqAwӫGDGq1AeG80?ڴS	}ɨ;oػyC0sC_i}P$hԶݽ[/G7Gtx'Ull]`>,CN7[p'aik=XhSov][l0\e!fo+2; t~t9c>Ψvw-Sl0M6vŉ*KE~v,+}rgA8Boa֫GPW
-BVfg/g#88Bе_1Ww
-0{]v#\\{@/6PGFZ%p6nwy#7څpݰT_P7GI{ǆIs:B{fs_99}>ynv?As&oՙkw|Wy'~v,/ʹ̞;F]G6dXX9YV?ձWr2;B~IGhG5jV#4#8U_vvvlVv{Z}Qkq%[GuyߗNc1](?`wu _bO!fɡ#{رJ=5|໾
-8{-/8}qfXSF|+NIPzrѺO.ҡn.=X}v>-Z6yյn\y^G9|SpkGߝ8B;e|䕡:ᚧ~〈S.V}1MGhɎPf.]|(4V:gMA;pC_&tM^98BAz?s# d,X72}ƚSnynwtW'yAw^~k
-Pl`5'3W돤{-vpVطw5Y/ЉJy^5#X,5ZzC[ڏ{=>_n4kņ[Ӟ>Ǫi}v9=lG#.HN;OXd4<3@jSTZ#98#CB1)Ɗs;VO}ζR}K!"kv|#WJ.0bb
-s~^4 Ӵ/,)d(ӫoEL^T}'ܥ`Ay^8:F8B-d*߻Zo}fG Oΰ5n{5S]q?7#L?,SGv.=[U_vg/Gp:a,);(mM[u%}vQm=9ZQe=tmҹk_jہ^9opU+d(B!쪶ღ̾9|#gGhгBrff-n+# Gh
-S,:y<Lvz@_t*+t϶*>suƊls=vBѻypV֑S#pp j( GpG @i  8#8ApppGB## #8#@iᑖG65mٲG~6ҥKkÇ?-in֘͔]M||wv5_|l;uZ\ӧOoI[4j(@HiP-46o~F6jݺu<.//G-[6СC1KnkG}[nia_rG~3-oWcJۨ)J}z9sݻw?w cӧO+M; P#  8 A p8̟Ӊoq^Ć-[Ǝw?<Y׼0uBܸMzW{~p2?].La/l}.@4 G9¥
-:Ŏla{oڌZ~#M:;[I6Y=$dYz/&|`o];g&&<?g܀Pcܪc³ɮ/8Qy8_з!uG  8 Bڌ?̙z׈lV
-Z?t8DUzUXqkpW8Vlo QgQQVQ#\!Zi}p P 8zG0ϯɿ̈́O[S?!ǟ=oӕGv۵cuM/}갮#;gN/#H0}Ԃg{3?8t:u7U>a~~~BqۊQ\$9FD/g~F=8SeB`1O=&N;G'*QZi}PuY¦B #4#T]:cG[]}QZ`,;>9mU+X-K-ZuPy$z]{%W1膥+G^>(eY;5Uz^D~Y|}HJkvw߰w$UZ?LƊ]kPvAzyYvJlp̗3f6 @i вA'H2ÓzS7<!3Jz/);|~I~]̚~DUYV=ziձW;B5Â?:XzmEG~~Qqʹl0+Nhvk^<T'm*W7+.WZR#zƏ:OVoG  8#{رJjۗDwAI[dvŎP#pK_
-gw	"Z#4x)]}vY*$gmhҟrk;Bhn.LAeGLbxPJS( >p[ ! Jp#ةp!BƊGr+m'qKܷ'Awu=)1^˶}j8Pu}cMT^ JS#\پBĴ-/w2mٯ^g^ʎ:FiLzgWLi}N4%{_<B #4#*%]1194/h@`i_RtC}*ˍ_뉝e9)d(̗/Ι'Z1]6_}Zog}U{k{<ģ^T܏7_O|˙VZ#{Kw-	K @i  8B9T~_]&tALʎ`2\62]`_j}h^AFy0&$]TdaOoΗ;2n{5V	]q?Y/5T?=#׫KwWD1#1}DdͮTڨ>g^>Mn	8 ( Ghj<WI0:}XcEAN*4MB%R0>z|'kVu)7
-S_&G  8 8 ( G  @i  8  ! Jp WG())Y G  86x5k,# A p #  ! Jp#  ! Jp̎p P# xbAK yw|AjB R;BhhU !Cv @i  -ݻZJ	5mk! Jphpܹ;4G B #p P# `Mp @i  8O&,# A pzfB # @4 G  G  8  8 ( p @i  #  ! J G p P 8# A  G B   8@4 p G  #  8 ( p @i #  ! J p  #  @4 G p  8#  ( G  @i  8  A p   8/?6u1]ўj@c׼0uBܸMzWaʬ^H\}\4f7S̭2UMn<)^VTqdͳA?tbҲ0j$-ZV[`Olȕǟ\[N[a(K>[QU_?}bܽRVo5$oJg\4Ǝ7n;SA ( G Qun_q.^pֽ1AB??o3}sfbrs:ƭ:fɚś'	H5ά_LśB'(z髻NAǏ6_G>;SZo0meZkC5xGwAh;d$SwܶQgJ¬il+$3PU1B'~ɐ`377;1i钧EC`VZ
-hYkR}$%?ؤ!BWS! Jpۄ]d+ÖQ׾tTo'V<e&nA7ˋʁ?odޏ4Au/A3:޴Q[qpI?!|G0~@_YPk_vzh-_T'h}kCu|m⇡hڍ,@4 G la	tCRv3zUO#Hr1}KhlyX_`e1a?w#'i(GY>د%bG0MMvϧ5ӯvT#8#&Q_R{ZWڹwS:\*ʁ @i  8Xc7GGiП_ۃUl~w߰w󔳻LFp50ė֟+~>sic;=v$'kO$J%.oƕ*W<hkLm%ϭٿ]w20^06 4nS1@4 G s&oՙ&I:3yWc#\퇌d#U(s!Dگ;XZ`EP}|TPVo%***222nkA}%U,?M}Qվj P# к0>Sx,<맮H?k(>;Y(?W}LO=_?_9BŞgz^TQPuƍ7sn{H|uGPD}IMai@4 G 5a,X72X}*]W3FL="
-{+DLRRPӣ]OV}$r?BWkLe;E]gpQ-Jߏ Y2ƴݼ,[tgv.+t]B #-4~.tPh8clSg-	~3gJ}U{rߝ#cbZ.WpȷZ>:[څ"OΩwњǽ߱ƺ9AKob+>ԐnBЄ[/UO{Aɇ*Vo{I4lǆbٲBC駸c @i  8`,)v m(j|00]q?Xou!쭰~F?QVVךŴQRWG0.Vd_fS:]C#s5/Vo{I4Y=+_AnU<R#@4 G PYu$x^cyrff-	v.d-TyG>%Od\(\)?'^Ng# 8SRu.|;ꦙQKj P# #4?v<OAFg/eM3(@4 G G   8  ?>}: zH G p 3fkA G p; bM #  8bM #  8bM #  8bM!#@s!$$$(((ciW"** #  ͅ N:v ̙G,'O&#@3F-5ʕ+! p G !! p G A,! p G A,! p GV.  8#  ( G  @i  8 ! Jp p P#  #4۷o_B\dIٜB~#  8 ߦs\G p z)))III#  GG p  ##  d zpLB&zp $#P#  8 pp G   @= 8I GG  G 2	## @&zp $#P#  # pp p  @= 8  dGG  G 2	@=# @&G G $#@3ǓiB	ҿĦtL[i6= 8  dGEy^-ä"<!A>"o5G  G 2	ԣ!IJ-?ڜ\ G L84zvR2I pL8z\tR
-\& G L84zZ~W-$w?7p $#P>ˍƮ^)E[ep $#@G.>CaF5 G 2	QuHTT6,# phheYeYW}̑SƁ#  # pzyp G 2	 @= 8@&G G $ 88# I GG p 2	##  @&z6+y? 8I G GP҂& [cQ6u|+ G 2	@=fGSyu|:u{#X7BsZٛj# I G=ҵJ:}s4+ G   @=B8-#cQkFabI\bs
-#+Dhm#=_fZw!
-^'ϱ[֭IDqG $# #hZŴrs䔾s4$82ƷbQx$/I4F3ApL8P8KtT]<B͟V>DmY9n#pg|ܖzvwu@}pL8P8kU\#?-=q1U#x =:#(#Z-Rεk$cuZGkp/G $# #(zi:r&VljDaU}deGP_Eyq@ejϲFSHj~:M-	8@&
-RTr7MlBB8x|GS5]LѸPKGpL8P8'(vr4EĦ%<Hmo}hOc'5R~j5gpӃ4$M5Ro"G?# pqhl8@&	[r&mF#  8 8B㐚:vڵ+#  #@] P#  8  p8  rssg̘a4q7 j l Xp7 Gk 8p bM G ܀#  A	1118phnU H G phDGGhݘu@,'O#  j Z3FfAr
- 8p A0\#7 G	 8p#G 8p jhhbA G ܀# @ 8p   8p]  8p @i  8 ! Jp G `W#  p`W#  p`W#  p`W#  p P# # A9+$d4L2+i'[[[Q##  j|{2Rv,#8ǰl5ċq"W6uuV\# p`W~ 濭9).ʣˆXW=reJrNkhNm # n]M2t}~dk#H1Hqpp8|ET­-::ڨuO-ܵÒ(w\QQ7GhuGp&٦6/p G pVV3-xm=<$gugk$B3uuO6ӋR# # sg*wd\$\geIVgswvޞ!i$: 6L8 G v5M۾F (<cHyNUCq}:2(g /7Ӥ؃G G ܀# #h皙#e:*#xۀ# # n]`;.
-O\Z7GӳO>HjZ\|ʣt8 G ox;$WHy=
-3Q>#{=xIy{-iOL G p  p  # n  # n  # n  # n B # @4 G  G v5 8 G v5fn襺QzYnfE8p`W>$w+i"8E8p v5E68ph|ZN'z"p p 758#(/8c]m4>MKSȻ~3lCd2	 oQPwEUu"^Z?i@S G p`WAʿ%fAX2bɦL(]-9Mj1e\MHo5 G  8i`ap&}%GQm4D]ęe{Hu4²u%V,[+ׯ#(V# n 4mtXW#	+[kl&QVG 78u{HptOp]G}6uYW 8pZ$1vrvIGxYOkMu2ܖ ׯe==Am<*HzK'ԁΎj4 G  G P,AX!7`<GMmH$S:HG}"*'"yDC[ޱ<p p /@i  8۷nDFF.YlNaa!?Ǫ 8#;oӹsd~#  8 @=$pL#P#  8I pp G 2	 @= 8@&! @= 8 dGh
-GP{Y]hy6LV# pqmϻjiٻaAҗ*(e.~jp 2	#GdroT3[.V?R+]bq $#PJ:{x*#4PZ~d>SA2apu[#  # JQC5z|4#a/AMԴD[j1W%c6OI$m2rWI~D"aݩ޶Zˏ^3 8I G sQnh<-fQwL">̓o]]\GPmIatl#wJޤ8#  <:b7kɣdZnDdt=μ+.Ir7VDiBy8NSp Grqqn{YHҬb.c$g{݅=\M⦔wYwŕu\Q5#jF]:#  8#x^y9:d(uP!\=6\*4 jwϲsj6VUAeCj]WFwk.6{2ֆ# pE;G,4Z{bkwA{Л8sݜ+&_xH* k$0qA$[/=-GﭖM'(?ݹ;G $#@sqPO]*Y]K­vAx)q۶	?2!Z~eHw:Iͼ [-)!1K	e[\0cш#  8P{0AM<08Ś#  8$Pgߏ= Ss:VA4t:G&77M G ph<GP_j/ 7M*]2uHf.jK	8#  c!z`/Wh`G6M G 2	@=6#_Ѐ=AAApL8Pj	pײ*Ǭɓk8I G @_#5FfAr
- 8I G G !&k8I G G A$8@&Gp # pqhbA G 2	:у5^q##  duԣ/8# #P-b`]_NgXl8# #PF9trA8# #4z0uplZm_i\q|#XFu`Z9Bm<I8#  Ghҍ$;ddQHebŘ-9WYj+-G墀#HE@~?J'$O G $ 8գoQҕDx۟vQj~AuQj^-|A#  # RAUUGPy6y{ۢ/24 G $ 8B3q{m^4?G'G6呕Au|#FS7}TA0#  8I p_GQHk+;k :uYWG9)߮#  8  8BGSxdyV^dYyK=-qF)FVk2cs<|=
-w-H=DeC<MG p  ##  d zpL#P#  8 pp G   @= 8 dG G L88 8I Ghք\r6#F G p qHMM;vxmvp G  @i  8  ! Jp p P# #  ! Jp p P# # A  G B # A  G B   8@4 p G  #  8 ( p @i #  ! J G p P 8# A ( G B 8#  ( G  @i  8P/l߾}u%22rɒ%-fs
- 8 8B#?|Ν;'''sp pl$%%#  d zpL#P#  8I pp G 2	pp G   @= 8 dG G L88#@&zp $#P#  # pp p  @= 8  dG G L88 8I GGp $# #  # pq p   # #  dɴXbbNڧHP9G  G 2	QlVK|` ч6p| :yh 8@&GQW 6
-(I 8  dG]"JI #  dף	o<E#ēh 8  dG~eIpL#P M_M"pL#PI#(+=8 8I GfV+<e/{iM"T8  8I G^;w-kt-R{O #  dzl#  d zpL#P#  8I pp G   @= 8 dG G L88# I G G L@= 8  dP|ӗ:~̘S.hOQhԏk^L:!n&f`e{/$>T.x盉)_VLGӟ?O/Ui8Yېx:1iGNW5WOs{-YwBƪmOͲr|vƤ{som=Un_N=Dc[ҍ͛?ɒ'[e,lc4ĸ{?3qŷ٥.
-ԢUG G pP̗?nŋκ7&HmQTuqBqUo&p@{f.Rf).T>~g-?Xa]ABXːIGzM#V_CIy7vg=&S/gOyŔzkrqv̻55^`xPfKBƉvWe#t{CvtSn"Рh@-Zz p G 5.n&<"]̌d\ubŭ_9Pflo QtCڌ1QAƼ~mAT'4tmoCt7qLo:A(^exǅd,6;Y<3GP_Z*# #  j3nHʮb{*ؿ}RI$9FD4rw<]n/G0ϲ`0;#'4ث;G~-ZC:=Sݳҽsta|/T_.WJ= 8#*!BA2oVٳA~SnqaDD}'_$'Ji֤\97=68n5w~{C赹U.}/xNʟ.TK":߸2׻2GP]Z*# #  ZKoY<g҈YzNZYaNoE#tg6rG=GPLU_9g/17=rŲS5?~J/snν?ȩDo؟|[.QQQѷ$TVJ= 8#
-g2|gegGx9J<~ug_#u9SzIq)7,ϑv1[{K`6]rFt-{o^5LOދlPuƍ7sm;
-ԢUG G pPXndp
-pOݠJSqԈGDl_!bږs*|zwī{5v~q\|~oGtKHqP`!ww󢅮~(di2׎hUG  G T0.tPh8clQ}ֲؐ~~<sX5а,=rEzK^YXpT9tjMbqXJr7hmTp/gMƊ?-/gZ;$趐n#y_N&MX5R.'Z|KG@-Z	[r&mF#  8cooN^vдU.lCWهKz߭;G\`o9Dv0ɏʴ5dKi?9D]T}䝽m[Jl&q-#Xwtjh;}#@-ZIMMvM\\ܮ] 8)Tf<WXrff-n=S'.7V]:[oB 8м$h\}EM3@4 G GhIxε_ʚfFoӁ @i  8  ! Jp uG(,,ܶm|ӧO @i  ̂pu׭YfB #Ap P# p P# p # A Z9]vׯacƌy@,xEǎ=. G ݺu v'7Ga#  ͂ݻCx} @i  -Ν;W\\p P# `Cp @i  86M G  8?͚k.p P#  # A  G B  8@4 G  G  8  8 ( p @i #  ! J G  B   8  ( p_P|ӗ:~̘S.hOQsԏk^L:!n&fXe{/$>T.x盉)_VLGӟ?O/Ui8Yېx:1iGNW5<}p.I[d	w\oły.<!WrWn9Yn[CC-X*|w~wfJ6Euz4W@'X)Kg\4Ǝ7n;SA9 ( G 㥭s􏛽pⅳ	>y
-s>x3S3n@1n1K,<MEqf.Rf).T>~g-?Xa]ABXːIGzM#V_AtT\1/Ӷ^nK~M~ȺR.mdc[<jZI5힁mݐ}z9Fo6a̍!BANLZiucPh0>&Po I4e<Iт?c:_MU ( Gh\0MxEF2lKG+nʁ2e{J7Gz v̎f7Ŏ
-2k{J98>ue#~ ¯M@m(~Vt5t;X}WM(}kCu|m⇡hڍ,@4 G US̈́v!)!`ݧJ#1B-%3vrc}9yǄyo:Bu~m'n.;lm{>͗tuϟ~`A6hEU~_{.}7Co0B #f*9:BN4e5,w{7O9[AjˤmQ_	:I|iI#KcQ+ x|6mԁAB_2io\r`^M(㹵7Nfm*.B #rǷM3iD,='ά0]\{@/=w>;Ŏ~N?P#T}̟Ktr!kc`iwܨto壂ڟ|[.QQQѷ$p3X}W@'Q[Tu#Q][ 8Cy3Es~z]ЈώrIug_#Se9S=dĶV?=Wy5un`NGLOދj:3nڸqㆵs`O{rDuQwM!l@4 G c,X72ΨX}*]WgLzD+>WG
-=ޭ͊=z\J'>1`pZNuߏPy䕡:ᚧ~,uSَyBY?\GlKf#HW#L(C1mu7/˶~V-]㙢
-@W# 8CB1)Ɗs;VO}ζR˓oņ[晃>Ǫi}f9s11sG^YXpT94e;ڍLTT]Ղ!A!eǽ߱zs# $V&}!݄С	f_2VED-6=X}W#GN#ǆbٲBC駸c @i  8B+XۛS4mՁ5o+j|0 ]q?Xu!0;NQ`(L;/[ Zo)o#Ȗ~rFI=:Tw%%G0KRXrh;}~`^A<Ƣ,_ճb|릛{\ks-5R! Jp0ʢܬ#\c(s43lI>6P2S_.d-Ty]>%Od\(܏r|OF! Jph\}EM5@@4 G e;s3Sm  P#   @4 G [>ӧ^7! p G ;c& p G Z#   8#    8#    84#vw1clC GB6m4czաCڡ\d杻"#@sF-5/*[.#ɓ' p G Z3FfAr
-A G p GpA G p GA G p GA G pￋ #  8 ! Jp G  P#  8 A p B # WP"##,Yb6+#  #4aaasܹsrr2?W G  GFJJJRR 8@&G G $ 88#  GG p I GG p 2	##  @&zp $#P#  8 dG G L88 8I GG  G 2	## @&zp $#P#  # pz G L8P8 8I G G  G 2	ЌdZPCBo1i'd$8Vxt#  # pч}Q~08>OHȀ#[@js G L8CH?z$Ok6'iq p   ͡݆TbwLp p   -m7("Ef ׾FIq p   ͨArUG  G 2	ԣrkWxJF5VcG  G 2	Q~Kx} pL8zt?U1ի=M= 8@&ZF=oYVkYUsdT"q# @&z}pL#P#  8I pp G 2	 @= 8 dG G L88# I GG p 2	## @&zx:pL8P8JTX8^؎:˸[e\Ǿp   ckvk8Y77gGp`_i-sͩ6_ 8I pdiYh9xPp  #4#>2f&v%;0BvQ:nm
-G:d~4O"nM&2D8@&GA+*}k%I$1'U6-_qܥzk$T.Z& G 2	@=.PEw>W5zx[4l3"U
-mgGPĢp6WvxD8@&G5ʲ3X}KO\ELH.HO{Rώ >U/Y>嵿Z8M#  dz4JA9FL6N5>#/ԯ#(rxM!x^4 G 2	@=JGuTW.(qelbbgG{}?$\#tG $#@	[r&mFQwiK6ȥCKM8#KFVk2=a<HFұ\)МMҌ46yH#  8PkRSSǎ;|]vsE8#  #  pp8  rssg̘a4q7 j l Xp7 Gk 8p bM G ܀#  A	1118phnU H G phDGGhݘu@,'O#  j Z3FfAr
- 8p A0\#7 G	 8p#G 8p jhhbA G ܀# @ 8p   8p]  8p @i  8 ! Jp G `W#  p`W#  p`WSL2{&	شpp8!JMmGHP/Ɖx\ Օ.Zq1^n& # n ~ 濭9).ʣˆXW=reJrNkhNm #  8-uS5[Gw  i4 G G "[[utQ#Zk%{5P魯p_o 9߯8n3MMm&7^# n]MkA+[PuItqUBx:Z5xÁۙ:'lq 8p j|ܑq哈o_pu&iZ<y{ԿL{0# pBM۾F (<cHyNUCq}:2(g /7Ӥ؃ G p $xxA;=DN,k?o9Ta5TJpp]`;.
-O\Z7GӳO>HjZ\|ʣt8 G v5	Pd\Y#(D,*3ASBH%infJ<1G 8p j  G 8p  G 8p @4 G p  8#  G  8 G  8 G  8 G  8͔Kug( G p-G&װ[MI-4 G p v5E68p`W>-Q=o 8p G v5vά
-K;XFeMyAc߾|.Ym 3{(mlUVOp7U	bK:X$d$&M+P4s[0v{Ae4&WsVUc9*h
-%j#  q LJ ϣ
-i/ipn"3=">:heK YV_GPXUխ G G B!k/A,H#ʖ#ac;IǾ Up G մAP|`϶		μ& KJ6<  G ܀# 3ڎ /c	NF$ǽ#^Io)U:0[^mq8 G v5uc8ITi4J"L-#4 8:hPwL"ZCZiZGPoy\#7  jiyr G ܀#@ uǪ8#   #  @4 G p-۷o_B\dIٜB~#  8 ߦs\G p z)))III#  GG p  #ԫ#ɬ.4<	fqL8P86]le?V|۰aKU2z|Al5 8 pZ#X2ssGN*˙-e}ȍBiҕ8 dGIGhɢ}dfv!G L8.85XlEE3ǔZ2m
-HB$=6 $~y%Hd؆ww\~\'jqL8P8f斅Rig#HB)QwL">̓{E~NH=A%y-+kGl#wJޤ8@&Zk=ׇ֭ܓ)A_AʛF4LOqYdK$syW\[nV҄rqplO]8@&]F'f>qG#q$qI7#(Z^p8oCwvN("3 8w|ԅ#6@ J
-ZQRVhQڊQ*Zmȣbx({<d?ؕoFs.܅*M$m߯.v4A#$~ %ǺXU6BomLݾFqZMԿFQվI@#hb#unc]qbN?#T>ro|ר#5<*=+_#|Տ1mnh$hF[Twܓ:LϘQ%=&|AlW,VUuq?5w%:f#X	^P5<]=*~aGZq34axkUpfLcy{ v܅8
-_IjPv&|ɲ#'<Gv[#I@#P]`W>0U+o#Pmܸ?a$h4Z#TZ~ڥN!m0Lh4:ߙT֡KxWlԻFF@#8X鄟j<}I.1LcLҕWxGHtz噠h4Vً+hF(Ʉ>}h4v4ko*kiT*/رF@#`'A#`B%|Z.i<ht3ƹFh$h!Fsyh@(Fh$h̣F@#F@#`'A#`5!64;	8FNFpZn_h4;	i+iU4%Kk44<Pҿ*cB#5B/SF Fh{L[pz%+m/iV9E_{@P鉎;?I#I@#4yvO?*-p,%;q5ү+v	w˗,{^&rT}=Bjh$<V=E1noKYm]i¥:ÉGHx1&W},*sqb?FNJ#+:>됰7PHpᄍl]FF'd{F@#FhPP	ϢIϩzNN!bGH75kbLMh$<Ɯ#Sm-:W}e#VןµhjQkk4;F@#4yy*l"W9GTBٵϸUDNtQG?\>K|_5˱oj
-h4vF@#`'`h4vF@#`h4IF@#`h4IF Р5kl̙R2D#hGyۈ#.\F@#F"FF E 4A#@#F@#`F F"F Eq@# F@#`F"F4Eh4h4!0h,B`4@#XhF@#FF@#`rhh@#`F@#J̟?CTC޽ۏ+F p4klRoF@#@#GJL:uʔ)4yD#I@#G44yD#I$hF@#NF0h4$hF@#NF0h4qNF0h4h$hF@#FNF0h4h$hF@#FNF0h4h$hF@#FNF0Q#@#`'A#`54v4Q#F@#`'A#`5h4v4<~>cps+;}ܫ|Oi4h$h<-e|+!s>P1,)~IF&h4;	h'\7BlQ`/ ;	<V;L$hh$h<	UWⓇ1OF~IMcVB6e#Thh$clB]5*p9H#I@#EB?fY#@#`'A#汨
-*oi?vPeV'U|F FNFc+jS4 y<h4;	hF@#F0h4;	hF@#NF0h4$hF@#NF0h4$hF@#FNF0h4h$hF@#FNF0h4h$hF@#FNF0h4h$hF@#FNF<j4h$h̣F@#h4v4Q#F@#`'A#PK͚59soCh441}#GG6bĈqE#@#@#`F@#F"FFh,B`4Xh@#@#F@#`Fph,B`4@#XhF@# F@#`F"F4Eh4h4!0h,B@#X0h4,B`4h4Xhh@#`F@#F"FF E 44!0hh,B`4Xh@#@#F@#`F"F4Eh4h4!0Eh4`pg|{~<wg>SHΆwfqG{Ք.dު'o91Xۛ٘_Xr۟\W|-%8<g)7R݋^m<,7-e~2;[MxJok㼙=w앷>챛~z[c.[)z'B랽ʏ'E	z痓%kw,/`9^qCɪ\Aw *!0h4	wo_+In<+tJV/~75kF4vëxC"fȉG^Avhh311^g{_:+%npg.}٧nhl.H|,8lN[l}rά݃l3O@Ap;nwj@??Ɓ@Ol,OJInA2>MIbEq](=}o(to6	LO;2ڷvߘ+Q"FF /^<yѯ쉔%ü+:&{et3_Щ4ًOj2lvto#T^D&GQE^׫Qs-7B`3[}޲߿G2?k`JWW` h5|v^OVW֨ە(_û߼2qۖծ߁8Xh$_;eĩ3ʶ]K!+RZ~W@%\:o/ؔ!z,u7B'/Kj;(צInъޤ[~%n2`yG3
->UPFH|bF@#PߞEzewR5B)1]8b@@̹FOw?y(6[Z1OR?ǳ6I8'/{w%7W;רIwk;*o?"37U!8E@M"Yk=~5[n>"7>z/|QwBt|mbՉgpe.͍qIxpuǳO&59界*.^OtE/0tIM=2Lxz}~?s&}]ri]رcҿ5eInm!8E@]6)[HW~`ʐ['tL:U/صx_FŷwDwq˞;oON0NPzҶOxp}~[Vrs_[,-3u8(wkE%5X/_#:jU,B`4hznhj^]qN'{޺$0cM_ƢnH?oW޽S>Nz=ƽXZ̷m3}^\msǒu=o}Lnq_vDbW%ONڿf9|SY΍PQ"FF F	>奻CH55(ZFC$<ѽ:ÇLJ9EozFHWZqOhMMآZoHަ3É]-N}kCv cKNL	U{Q[zjI|GNP)0{dFG3w}v0tm_(J+zɒ^tZV0}%M^kG3ֽMM$ki^8E@"~{QV2-5;ݷY炽FMwWnM5iQnt|(1gU5H⇾LuPl@Q#TVcKD	Oٟٽ5N?G+kUVeٿNP([6;զ=ϼn{k߁:XhԼٸj۳l᜝WXeXrtwmX̯gXjEh45Eʞ%o<\5ym5E%^tI~߹б@#5_~ !0h4BO>^pXK.q"F@hݺY4!0h4BI F"FF(F"FFxA#@#pرc˖-c,wC >}oqN,B4 cǎmI&͇&O|Yg9ԉE4K.6m˝kD-94|#lݺ5gF@#`F@#DGy&h4!0h4B.F"FF(g46lఠ@#@#`F F"F E44h4!0h,B`4@#XhF@# F@#`F"F4Eh4h4!0FF@#`F 4 !0h4,B`4h4XhhE 44!0h4h,B`4hF"F E44h4!0hF"F4Eh4h4!0h,B`4@#XhF@# F@#`F"4Eq F@#"FF@#E!)20awB]Ek{U4!n]v^Co~gϞ߃z&ڵX4!FCo^zqDΝm8h,B h !0,B`444Xhh@#hF@#` F"F E44h4!0hh,B`4Xh@#@#F@#`F F"F E44AɌIוxn7VgF_<c޽p_`kSo|pqvOG2_+\@L}qc~9
-=3õ=0z;խ.h,B]d:9̘1^0rm\^Fe6<fs#S`S;91
-U|h?tL8qEhkC.s`qo큉kn6ؖF@#`Fh|3˖-Ok;sw(CpF('j)(#7;WCyU_#yq>Zrrǵk;6N#$80!CewY#hE"FC#4Fsn6([:-֧~k?'cOp@@ vky=kGt'bE3..9P$9}C~}q{򱋏khc]\rHN? y'^ڼ|㜟R)]Mzys~[N?EZFw充[_5jhc	W4B^y|"FC#4FhԨWw.9F?:^.tT귞UeVLF-)>&'j2_F^@Ϝ޼-oJk=0Qm[6@ ?߷a̓aKxgL=OKvP$qG6աhLFsf,-yn۔-˫t˛vyQ1o|Qy_yNo,~tѤ6lsExasa4PA#EFhPzwp/ɪm#䯺_%U~)uhGOYVHζKg#y{>_̄{߱4h[gLy뒼^кq<ֲ]p
-.rJ	7e-'gڊS|g{i[N|QSWxˬSR\0j}e6zT#.xvK5PA#EFhx{JMaYCasV!{#SNsxf~uhԓg~ a΍Ov:czYq#|lsy9OJ~7K9>W>YV$zɾi#^(Ϟ~݂^>(ɽs5i{;oVG80=+ύ^wʀ6T
-slы;%h !07Ba΂ғs7uO={th=6Bh>cG6=nP|ߜ]6ʍu}g4MeS4=ҝcRDזS=n^{˵mW^G<6rK-˦M}&l?ê4F qQO-Y]dgn/oz`ژ|'GΠN96ەn/(yg}zM=ɽa(9wb@ImUڿ~4[Wvn2M9ůG8{#^,ɀV
-s>399[^J]aAvFzmZ#ĿЊOt_F?ꡡ-}^>ɇW%h !05B Vn^QtNaaxכן4hֺEM8qq0g1R[wHkG;F(_&%8#ug#D2>:]m:tEvN-:6wV&?;QZ&;%V[.'.ȩ́xq<z@V>Mءy6}Oz&N4XhhCKhφ՟ZfSv=mkVݖU9c݊y{7ݸ'0ldڙ1~яZF"FEW/{"F@#`F F"F E44h4!0hh,B`4Xh@#@#F@#`F 8h,B h !0,B`444Xhh@#hF@#` F"FQFxI&]p	A#`hf͚5`S=ztTg:물<aX0|>5\8P']tٺuF"F E44h4!0hh,B`4@#XhF@# F@#`F"F4Eh4h4!0h,B@#X F@#"FF@#EF 4 !0h4h,B`4hXh@#@#`F F"F E44h4!0h;o];Op~qE|<Ǎ~፯mcά;wQcr%eO=w?о=3%c޽_mh,B`4h"{߾WR#&8yW'%%\M9:uc[t@|Џ9 ?}q`3]3꘦#^WǫOqǌznW.s`qo+,_64!0hnf+{"e0I^o#*6ݜ7tm6/b ӑ8W\&TPmuB_Щ4#ًOj2l}u8WqKyJvm5B}Xh 6Bk8uaF٢k7dEN;s)X>}vg/n\xbZQ IW=./gDὧy͸x@ӇM~oO0ק{?ܮmN7ѭ2x~Knԑ]}U-O ykw$s^_)'Z6)EWeؤ7qߗnY/+t]~Qc)? ycgV{^!moGV(ǯ4!0h4Bm.iх]o_4qڬ?۝_EJ3JV͏{V!䄳W~TZX.͆= mߟ9y[tgߔm{~a$w>1\rqUVަ?]۟/rwGOY*,a-ۜ'Hc:к{4:-X[2ܶ)'L[WrqEf%k<[1+txsM;>EE1gݳ%ӏs؇%siEƼEA$T~u4Fd]\8oQ,]Ȋܚ!?/~ާ
-46狢39. mHޞ>3kw,-ބG5o`Fx{Yf^\ت7~581wOoв)}}(=]*սnt_V}./px묁=o]swߔ>ߟڭFx	o̹Fe[@#kpήM ~#2d7mkԠTiԓgo+hÜk4tI6FH=E l}rj>-^38M.@#U|bw	w(]/ٚeSϨ臽s5i{;J^IQ|OJ~8m/z7t5!0h8hV罸✝3Nu7uO=lЪ{	5BjMF(Nmq}oΎnk~ql/b)n#ZߠGrX1+2Kk|1]tK@y;ɍ~(X7/L55B;zGTׇ7؇i:GEZ#w0M//Dr~ȸ]GVx#'<`[?9:x=B})%ROgE(A#}6wR>,:`܉&}F([:f-zo:&7VUn|h'v|I)re|<grsD7/]%dն¡wHx+ZKK^Tj0thgoNQ#`FM4^ԿUL43RBo^B@Ym_46Ǖ=Ьψ*CM\Ě>~#{]z}ԑ]ຳZ~W~!z+pif&;Ljwobtfew<kwK.wڨE-[ВHao/<wG#=ߴ(7p<Hxs)}F]F"F JK!oUWݞ]yٰ>(5q?QM8kۚkegl^]>UWXe_?ePtlȯ{可.+}7آxhC~oA殝Wu5!0hG3^Ϸ<fX:F"FFDrVֱgo?>4F"FF E _~={4!0h47BgF"FFm@ P=4!0h4s#TEaU2A#`Fֹsnj6mQ	4f͚E3Tӵk@e'OXh89׈Db5?~|AAF"FF@#F"FF@#F"FF0o*@#8z h,B`4hF44!0h4h,B`4hXh@#@#F@#`F F"F Eh4h4!0h,B`4@#XhF@# F@#`F"F4E@#X Qoɓ'_uh9w='fff֓?CN/CA=sg/:u!vxڻwCA]s5׿ɏg}vucǎ=ԓO>i2Fm۶hΝ[O~l.rߑ#'?3PSדnwAhժhpF5kXEZ#PW=z?}G꿖-[jcǎv!6A#hhA#hF"0A#hX4FC#h4Fhhh,B4F@#iFF"0A#h4FSg44F"0F@#X,Bh4E"0F@#X,Bh4E"0F"dhF@#h`a4F@#4FY0h4A#hEF@#h,BhF@#h4E`4h4F4a#4m7kժFw^!99wD#X,B D;QEM˗/'?6{33dȐz3
-4>̜9ӏM9F                                                  p芭
-endstream
-endobj
-9 0 obj
-35380
-endobj
-10 0 obj
-/DeviceRGB
-endobj
-11 0 obj
-<<
-/Filter [ /FlateDecode ]
-/Width 106
-/Height 89
-/ColorSpace 10 0 R
-/BitsPerComponent 8
-/Length 12 0 R
->>
-stream
-x]IoFN	AN @\3r9 	FAA&ezfӻݶlmNmDRIQHI$Uy$miY2UWUXU+ɉ$I6R4M{rhDĒ')n<::aRsn/d#-Na8ut:-!r9atd2&|`@+CMNn뚦'$3t罂 9 r4XVO| m6Hw
-l&g4˸gaYd
-E1(pqpJ')²EKgĻNkmd,a2_+gD;A:|9[40g{*A=p,>Mڹ|ft2f5(y=n~AmYcζe"<^.䏜Z\`6-ᳶt$lB	WPB.r5K,׋T JW
-U@
-2lʏ\ 'us`"]` pO"\
-Vj(wV/KNf#p'/"$$c=Yo߮7pD8vZZ}=؃d/^yubl+22a5#?5?ptg۰hQDSX:aPn
-j)!tcaR&hRŶlk,TIbY&>kla 1v0~_@hg:^~*"zb	OZ3)!/q,gX, )Pݷ~4~+:r/Lt`{_8QE:p@eC 'XK'%tHذf<!,E?f9dޕtey (1G+ul'p~t<!௃fڳ9^eE1TځKUX=@8M%-Tv)Yol6_K?HlXmLȀ_kgw6^mgڮحVG-{&>qvNWN.c<_^]W"ޡzN\w
-]l2Mu938ޢl3tZ:j~#yW&nOageYG2CLڨ:D!ksi=R-7-sk@MÝ4Lך=lyc5',tolĽT҅\m"B3Xy?G3c%Bxz Cx]-hO]y~_ѴiM.t1߅콾")Csm-u4-P]ݱ3M3@ծHC,KF1ë1/" v/XˮmvzmlfP{x,NDEDS;L*Э֑2QFM hmj#E5/dI.
-G$S`P6,Xj8<t>#]?
-yjeA
-<+I/ȳ{#NDxq[K_Ôo/gQJh$K9$Q
-v%6gI*HbD8		LqbY )γUL3|
-Fk	ج^˞\>z@]wg51-,Sto!d<[l2yqg$,3BfwkR69(<s,^U4Z)J[TCHJb'l9yv_9E	.\栯(":ڂxOQ0}HVtKElr(
-j"\UX'O,LbEX39
-RTUE17E 2]z~3X^Gh&MmTIi-2tD3Uz1di\~B)Q@GMGz=dsFmX^48̤\*"Z%iDrk_Q)EQkǒ8cDGTVZG1`EFN` e2[n_^hdY:(ICuې>sx`l^{/1蠍qqlM\׳bCrgOأZ-֫l{,^Qdٛ7clS7eP:lLHZfXhvɺg^0G
-UF1|?(Գ\r}]`e)or';ʔ+Ag[0M\[>[s瓱A?|:NfӢ9sp 'p0?t0Zbm˄a}|r<?:\퉷7Do:ރaԯpY@闳r#4KsM%7i4ڄV&7q,^߃2MK42}[0;0H')SH<k}^o.0~28G=JVTKXai*u(!vD[iY2|(
-Xƞ'0rAz6v]zH\sŗZ05U</2DG'똁YЭnt	unxLgf^GL>VwJcDɃG$V{uOb;JD57Ty2qa-CSRTygX@ N`-{uU3mvm#4,:Kd-Ӱ/r=b;;;yo厬b^O,R6^*2רbSjގb n˲܉ԢlTF8CTKϪHb$PFc@ύwu~˶@u*/+Fw6xś6E,ʲIe.X";#VǑ=+)])-Ԑb"O܈8*{nDYMQorܰw!{=WX,Y,ƭgbyŲ
-nl\{Ǌя?b"*V&I/l
-ԋ~o{Am;5MTRj0ԛW!#f8je۳+61Tv]8mdΌQF$a%{W8z=0:N:]XT^^QOj,ab5,E}W=/̎ 0l1MQÏj	M>qMմ8NkX,JffXz(vwcD<ەMfͨ'H p_{׏GFCUU0zw}0N.EYy`<#ï\ܠ`v={aXfb%$%MVk`Ax(\7}.Jhe(m1*Rwӕj-UϏ,Xo	H=;NogJ ~G.t~㏯'B{^ʻ{nD~u~!ÆpΝ۷oG O6 o#}*;|/x{r {h4xwy ?^O?4}+
-~uK/r뭷z L&o},駟}'o浂og}f/UZGu:kꫯVi	.OJPE|5d2pׅi*J(¾aR߿V
-$gVU%r@AT,
-endstream
-endobj
-12 0 obj
-3993
-endobj
-13 0 obj
-endobj
-14 0 obj
-3993
-endobj
-15 0 obj
-<<
-/Type /XObject
-/Subtype /Image
-/Name /Ma0
-/Filter [ /FlateDecode ]
-/Width 1036
-/Height 868
-/ColorSpace /DeviceGray
-/BitsPerComponent 8
-/Length 16 0 R
->>
-stream
-x1    g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       x3V
-endstream
-endobj
-16 0 obj
-894
-endobj
-17 0 obj
-<<
-/Title (lte-ffr-scheduling)
-/CreationDate (D:20140609020337)
-/ModDate (D:20140609020337)
-/Producer (ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org)
->>
-endobj
-xref
-0 18
-0000000000 65535 f 
-0000000010 00000 n 
-0000000059 00000 n 
-0000000118 00000 n 
-0000000316 00000 n 
-0000000407 00000 n 
-0000000425 00000 n 
-0000000463 00000 n 
-0000000484 00000 n 
-0000036061 00000 n 
-0000036082 00000 n 
-0000036109 00000 n 
-0000040243 00000 n 
-0000040264 00000 n 
-0000040280 00000 n 
-0000040301 00000 n 
-0000041385 00000 n 
-0000041405 00000 n 
-trailer
-<<
-/Size 18
-/Info 17 0 R
-/Root 1 0 R
->>
-startxref
-41591
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-ffr-scheduling.png ns-3.22/src/lte/doc/source/figures/lte-ffr-scheduling.png
--- ns-3.21/src/lte/doc/source/figures/lte-ffr-scheduling.png	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-ffr-scheduling.png	1969-12-31 16:00:00.000000000 -0800
@@ -1,136 +0,0 @@
-PNG
-
-   IHDR    d   3   sRGB    gAMA  a   	pHYs    +  ?IDATx^	|g
-(("bC3Q[jlEEV4&RAccL<F 7KbG"
-rIB&{&Ht33v}w\I      ~W                A`      BѠk֬і-[9y:uҐ!CZC9Dzrڗ?\~34cǎJMMuڗ]viٲe>Xx3XovG,Fv`i&[iiiyz,i?n;Y>pu-bƗ(33Y~L6Mz+yDR=TUU,A,7-+|:W Z?"v+RGu*g	д?PǏ_؀E;~mo&M>}د@4/_>~E7-+a      B                A`      BDaǧkW;5*O_Vzwz7Ϻv]4z~56[}luV?mCXX۝e>,OW,&RN/yP,F]~&^ʾp~wVh_nЬ_Q<ݠϬԎ/{Q7^\_Y왺o>ԼۯEd*tmݍ֮{Yw֢owI}Cw>Pּ0Uk ~D{UUm9ֶu~aNֿ!'hw l%JKjЏWځUte3SKoU+=3]7߭E9m婺wߚ5f)o4wyԇ=u;UԇZ~֯[W~W.GfʽZ~ϻWZ5{+pRWY.]O,v_tqj}UOL	GNE_4n
-zv ֜nRG7uwa9NrM9ͮYWeCA`aÌ֔Xwu-j9V]S;fs^']fݒuW)n,کOVnM?ZHPޣ}HP	7g3s%zM͸9ֹ57vfP99.vI`|s9/5}zi_Y˱FյzhgMuuժmNՑW@SWm.aS~Ժt*}+Rn
-A;C`:8@IZ\R_eOԢ1z1,tqPnd^{E_Ӝ#ui}>B?ei[g{c	ѱ'uj9@uU٣ukjgg*aj}\]í 	Ԝ)ќYn<%%vQ<j)]Oկcgu휨gNSmnkzv:ۙӠoЋvhɜ:WGuEO^ΏulΛgvY:yZn^zt5A㝟ܡ+GTyi` }KْYGk:?iMspdѠue~NHҳJ4<hJKć}Dw{e+sde:w۲wCu+tʎbݷ`{vf>}a~yzk3fL4J=̿Lruz$zrp:9%=4u*MI?@M/V5T0jWK.փWMk˺;tok]qzy.m+4鵪3{䮾BonU^suY6^]xyR[mh??wmjW@mR_պͪݪKs/YAjizM*yE{q ſգdRO{}82!qm͚wg4WvUשCLc~'^3W5J+-Q~>#g]#/&(u;JE?G|~]VG/;\RzQ~>ߺ!5᛹O|; ZCUZ!]urO}jr~uY;Tkm9:Wu8 C7<fx.|QIG%hݲھ%忝s.?Kn^Wd}ZrUEJ]~;MmaVF/忭s.Yn֪t~4d]蘢	̑gA@L){-(OjZ|]s:-|kuͿ;!URV_nw?<~'ҟK}W.c?3_PEf}"U]ծwOޣHPֻXDK?BToN핎Jwx);8E25iUZ<k~VnԶE]w<}*}mVr_ߗ7A=KBwD󇽾ί>]FO+uՖoꝬ>v!F+}q?tqOǩu<t }r}NAVθ^M*ŷ.BCC`G`:ߟ!n_}ޑuFg<=,n3o|[[ES'^v\xнV~'G=_g|n1T9zv?/LՏ&Ƈq$(鈳ua27ܘn _^ѷ^U#tkqF{ڰ#	]zO7kɷۺ-y8p)e.U͎1$=uohsV7kҜB MkRee!E'	㿾1m\UKhoZZu[t	5/A|וi.Ԍ7L=;	wrkҴJ7g
-z|#s~uȲZtt[m{ *F^ХӞ_U~֖/|gBÎ8CcRyjМ?M-DCQ eY߬S1M֢-2B|6Kw~Zi[ލ;aYi]TM]:`huAV?8UOxcNE@lKĹn{r5ÿy~Ǉt1zN[^c04tYhG0>@џN9D]\.u{(M)}A:xNѸS
-pO~ udm/Z Ъ:1}C$:wtݼw{S>?_wL/t`Sr\4KYˮU}9}yּ[>TOɇvv0PO\K.Ԁ{IZ39.:ELצ>{stu yJBA1A{2~#/oe궯תU_kWJԳa@xk~moJuQꪫ%hx?~lٲE_h׿yg7&MR>}v~6^;Òտ{pZW|	+^-xRGYعKؠkSVoԊߩۡկ[פjYϾةÞ{|r}+b_hE9.eDFZW,dg\YrWib+0tH#JSjo|%tA##4;4Eaz:TiGn}uDj lX`Px %F@Ժe2Kf#ÂXB`      B                OIXnK/YoF;w,ܹs`uYΒꫯֳ>.Ͻ-]TCQB?kTM6iٲeΒc۶mѣaXO=E"]pΒnУ>QF9Kc<X;2d5khɒ%߈b7bK/ڙok0:ud?nC7*_~W^yř믿^_t:Ks1裏vڗ_~x'(''Yo|bbꫯTRRM7d?!#F8seFDoDdG={/^l`v#zb]aaSzAjjW oDl0     A`  '7ꚫǥk44'UESeֽ;tʾwD^xM];ݘ귯(cZUik^In-o}y[v"[~܋5=   e NU>}xC]^׭+?+y#3^Рnr1VpDЖ
-_mohjn?KREcv]ah撝NjֿU-ڍ=z_>ҊwnҢG*x  /#0 tzg9=\e|S3Of[Q]뜿ת^4]?'Z6]ICyMK^XSMum5˕tkz){ѭ/ПzB;cEO]^éݡm;"  >  L	ѱ'uj9_5M=;YI9:(ީO8YξR&*q:HYkE Zuڠإ:vVXGv,u}WNpPw#MZ=Y:")Q]&Q!D'5sQLBtwZ^P=]|ꜨIJL&;V^xصA:.q-;-t1sbz84M~9ǨοFk_    PY>s0Q?<J=jWΓ
-V[?_{cgiݶ^K?7կ^_Z;꥝]/.,Z}AI]s\՟/WI}Z\
-PX'nJa6kKtMڵk^sqz{]JVu%>	?m~~v{~?/:IQ]K>IEki׮բר]tl.T5;?=VW۾T?PT5uќ>
-6?:nƓ>j[  m P?G\rYS'=zҚvι,yVn袓.;_ޛV/CS&/25S4wVjǪW9"[w]*W'zR:juCհOݗzm;:w)^ e^yqUסwn缓sջMQ;7}͉}գ;+"|n]{Q+gkwܩM_nVbnl\9u=4   #0 gnE*,Ͼ7՛ÿS٠3mܵ^OaN<D{"}PWm꽷CA:0[WSupCþ߮WVWo%줾C˙ٵI6;|%z)?CԻ~*78<~VԱz
->Iw頮	{P}3#&$;:s{I-7m;zI>`uU:A{6ΨҚ?R-   ? qȥI<tճSa~}#]Zmܸў6Ho.xBפusJY{	^{~j}~׫V~u@Fk6ViWߪ&q?a/6a7[?PpC`4g=LwءP?=Fy=oUljw|K45ֽ]ڸ=i跗<[e[ko3kܦ老^u_   "0  )'zaf-r9mm	s.ӝ/5k_]%sօ)iݥVw78@gIiZk/;T1O~K[:N-7n;_ٳ֗VjPNe3gY?>jz}=:Ԯ3QŮZUj=Lߘj<?Z.?WzSա;vHvVkWBs矠ݻq7^z:"  } r\4KYˮU}Կw?><^uS&g=Io_rW_ѳOTwkqoZ>G\%N!]:+ygwV}Є9nLK;:EtqեN5T/(u2Ln>OzT:xxn9Kg>]4bWtA}u^;}4?l<TMՖ|[<:/EEf   oq&oٳgk+(cƖ}3}s_[2FXI֡ߡ+uA7gtpajT]W׻zh@ =*lSA:GKL6\]ipn~Is~Q5zhP!
-;QXXد@<HMMUqq
- m0 :סCvdK4xhjhX`I覾G6X:4XÆE~Gаҡ!J=N:T%qH:2|X`i  `B`      B      ̷~   !0 &n9s     
-&M   h *    6 h5   @p&oٳgk+K/T~e]ᩧ= ~`F66@`xӯ_?mܸQ]SNjjj4l0  ~#bA 0@zx㍺kB|egg;s@l(,,ԂW  ~#bc hկ.		    h5	   *B    6/z tY   !0 &K.q    7 LΝ    7           A`      B                A`      B                A`      B                A`      B             -p%Й  ]      09̞=[/_x0p@y<:}af=]pȺLW\to׊7М7c5*]rRvVhδ~쭺${[7ݩW^U#[5[4nX>)Me\JS?Eu&>{Wy&E]iNg>@G4rCL{PnS:v~}SuIJ0~wkFّ)K{Eج57nR{uyz\iTjoڿӠh]~8#j<u켟.FϿw~<W<UVGL?=Tݼ%IMMUqq
- mK kkcU5dIZ'&W/jb՟i%iJҏOӁte03sv+|޽ҠVEޫ_lWyzvz6軚zs|>=ԇvu_gTSGO}h-vj缿(3gjUZ缗ԘuV=g*w֜vz:uŰS5֎鿏7.UA/DθZO!ǞSe:j-WP^NZCՉ?>D;_u^Ykg*xF;4]ڶ}=q/4ԩO#ߴs`RϾS߷'߷M%dw  h]f2.rg}0֬Ya̙IFs3suƦ㍾	Ci;jcYIF'womiFBëvs:kgv1'~Xhn(j$|<r$gb$z,ݨv}q.{Gue\NݰMcAcܬ9?ȧ[RdpYNbƢm:csc\iڠv|t0ozޜ1 1Ɨ?|U0y\etMi-Fz.h~G4N;G]O6|__zqd/[P77yƒ%K9 oDl Ĥ%vM;ߕ0s.(U/ӓ3)iT]qLwF\?O/M?[n?KΕj}N=t@K;wv˯\/vy`}msw빝giumzs4n %jsWj>v|gOW׌pnuAgL=c:{Y    &MUS~@??B]s[^pi'huJyV|pl哰F2]5^ט1cWe}w-/ԔI4oaSv
-Gu+e-h]ZO=}8O{nh.2=>mިӑg>!?HkQ#։ձty'oC`KI7hSUj]O{&ܠ]+C4(_ywg)a*YC74$  A`  1ۏS骥ZU:z5/G:RΟfc:[QǠS>ׯG':+}%KoZZN}"p%vQݹk{>fmۧwܮ)ǷfiVٻB~:ME;>le߾}5ि-n5A:تs\'Xֵ{ɒZ;΁PqqeCښ5KeQϿfO(zĘCA  "0 XT]V֦NG	S4مZqUӕ֨һ^+7(xkuT;4NO}Gܤ'_zI/M?fCV/vPZ55WN.]>kԺnn7hйdh'kkw<FS1Kg%iM6:ߐdDkj̔hٚyyJZV}$jMOK/=rnJ<U/ZVhu͑խ[5D>.[bfZK>{  !0 T0GW$q5?Up7*=eA>]3u[%m[[8_d[ ԱY/E_a:0_7y?t9sG{9=iyTU_u襴31˝?^.Gc,F]p)ܩ6g	zom}nVo@s.?@G  ?< A	Gꊬpť^;֪/Ӿ:CEt-7nٳV+Zfӻ(;֩*K%˴r/0TKLTO:O<TsN#z0*pǇ^s]kÓuJ&_ms7ov7GtYWhkK^5,[ޤ;^,yrƥG;KWzMK7ר-QݔsWK6C;G{ZRUzxZ鞠;zш&?뼿ߢoШlSMmf{6]f~+ >yZZUD᱊͋{fg*}S4g|LZc[3=[c%G63~b}N]cHĠuS4&Sck#nc8~%x4U4e!Q-mz/a?ӯ7;W/6ǯO&S3YtwG|$]/Cexn|:c;3ߧlw2=8cqQ%/")F6?ъfϞŋۯ@<8p<}O΍Zbw8P%W]}*zzH֠ߎP֭B&֡Qjݺ>P\ݩZSrHe=S2eN>%55U+ 7"e
-	>te{PQQeCtzֱ:(^Q1 )F66@`xC`ֲZd?TY Qx]:Eݝ%-Ld J|^xN3@c @Smz gtϸ_kk|0S>ۓ=C/	oTY5    ZP\r3Ďj׷cD     _j	    ͙3  Ѐ      >   @h      /4 O.?W͞=[/_xеkW*r '&&:K`?JƙkԷo_[<c@XoCqq11 0@o,bדO>W_}վ
-ĒUViСΜ矯r ""0mm 
-
-<Baa,X`dʕ<x3͛Ç Alc   z       >        @#,   0   \ ?            0      !\dZx
-ăد@+,,ԂW.Tyy3pN{PDx3F}qb  Ė$uY4gyFW^yL,Al#0h7'/㢾~@`       0      !     @            0      !     @            0      !     @            0      !     @         T)˙rJh\2e%x{7P}Fo .   {Iɕܕ2Ü*5lz4YˬyTm.i7&%(;,TPlnF[m+Rn8    Zrk(_j+әJUdkt$T61<Q%OE  k   ڻ!JG3kGV5HTFMWA     {ʷ(Ȳh[ ZU_QhoQc^0]Mm      dTMea*d<Jc=*xr0B @"0   !	UQ4oG0g Wr=h~=9    bCYQvIS
-<E
-dsڃa  8  v*/C{zЄbvH%8OI`pD ]   uBSVܕeU^`\ާ%xrgD!s438" "0   2A[c`awDh1XM ~                A`      B         vKiKHV*޲hk   ^b7]S򪜕<o_nЇ֯5(23QATO;xC`    R嘍ìr*Com$\BvIcSIvQUܔ Q사2 &   djPMT̖<QeF2}[&q>VhQ(hMΖ<΂p25:Ll|o   6U){rPC1,Cwuߕg,s?* >
-]KsBn[K={ݻ+yJi~$Qt3Z筫R:^방:Y[     mjʕa)|DVc.Ei]+ʲޫ%f1_Wtw7'Kϴ/{7f6=Ilۼ/ȚaBꣅ(M5) Z!aÓ_#<%Wt&D X:(Q[,9D4Y>%     hKf͟]s5ȓ.wC+>Y-2aRr12'ɝQo1ǎ{7m>L3ZR$ da`6Ӭmx߁K|,xouB#!PYH+{   @[Jۙwn1אteM^S_c4%׿Qcͳ)o7 ɓ>Vv^`ir(!Z>,{x1; ^mx{?3   -%FWhҧtBfGb5SrVҸmp4yX~*/4WŶMڝ|S>3[ݖsr5%W[AF`    FfJSWFG͵DERWQ=*1CElߊ(̶-~ApG3
-#pPL~oH @3HӐV   ُΫ[~;Gη?7˔;OAh#`qonzd)('{so)m#j{^2VEm)2#|Oprv{K`MQ?L|@?B13.>;aSA={/^l`x<+
-`_hS~ڟƧ(HRSSU\\l"xB`[t]ws=9r$)A 0@!0@<!0-ӦM;Ｃ:8Kj:餓%@{B`!0h7'74 4߈Ơ   h C`     hʕ+5~x{O    @̙	&    @T     j     "Ѐ6x"UD<᱊7]v"\.g	xd5kjjF}[occA 0@!0@<!0@0`|M~8j*:ԙ:U^^bE`oOo`8x`g̛7OÇ'0aa     /,HLLt V     BX_     ",?    &׏      d=b               "JJJ۝9 @<!0      !   ջe  ?           A`      B    "      U)/åRgUKs\r)CyU֖~    "кδϵHt+F&&;/{Qː+#<JAJ+TZG:b   Jc6RTb6w*179(MC[vQVon)7%%.SYP@#   djg:K2dI21tJhY$ۣKQЬ䉚-y**djtP/h;?ʌ|s=΀@`   5@ʞ`{5<|y{A#uS>R뾳wy\42')VI`>ah_%u߄ԙ4s2(o 5   @[ZrkXk=V@y+HQnZcJwBV7%WrWFճ%`d7voU!JGMv
-VHd7y|EZPYΘܻh'   ]%
-fznkWW']գ~}WìކoZɾvD
-M6!EJҬm{pSsWwΜhu    ЖZ*G)~]W
-|b`\^mo=Tʝ^ף"26f eg*	*βvάc(-7QE   @W``ц}nkyl=h`5`KgXը=Аsr5%՘<Jcͺ{c~5FI^s5    m̾]2h`U^Ft	_r#ìu2{q
-J;OIh.xqxps    Vb?¯R,[
-\J@֣Bo|RDV(RI߱[4\k&0q:LZ?^Rr=Q?=Eu{0 .'V5{l-^~xW j+RSSU\\l@0~#b=   OI E`      B              ")	      @   DS  ~    ?\9\4G.W:|]֔*g!{    v_U]i041YޮU)/%M1Y/7    v_e<JāBS=Q   OI@T҇)36$kb!#?әoN1W/7   @s[Sc}U^\yf	Re2osSFú-wa_*<J7\n-'.`#{k{ş=z?/yK]nBYu-8W Z   $qֽީ$@YQ7禕n4GUH}bggKkٲ0t+m4WlɪȵZeeJcUi7}^fUh~7Brg| g*(n{=<~3KxY5y%y]YDGo}VQ G`    )oο=2,]*_׀mBzUⷃe@@c=*rJ=ZiWEmn_5_Et'5+ydeʷ[-:Kͽ!J3أ㷢"sYמ
-QO%   tw)%h56lgZ*/JLvv:\f6yx..Wx;$3o(-7y]x F`    %+,HUZ[5Uӝþ-QP
-yڳVj~<>GNar-s~c)7?4h=   ")	mT3Z s̃Ҝ,޾-@9*H⽗jkF{;Ź}!wF>]"aV4۬dIxx*Gsq7Ƣhomv   Ж'j;]Y5ݒq}SV[Y%f vk<J|ǪtK)lη?D4<~}ky?!^4_:iIqVٳgk+(cP,_xb_֣;~#bA 0@!0@<!0-.Tyy3pNY1cƨO>AU^.\ 0mm   XuY4gyFW^yL,Al#0h7'/㢾~@`      0      !     @         T)/åRg}9.\֔*gaz,   >(uV*/i7NApe"	4 ]JCQG`    (nUVݜ*RnJHhP(QvAVPR\*/goRr̵TVȣ4iG`@`   ڠti\&nAhpdM,3LْYNF)R*M4ȏ2#ܢ	Ô!>;   ȶhgxݵ{Sw=0hW.:*0,	w=eF e5KUlO
-a=J3?V=[Cԣ	
-מ_   @[.iNmN%
-ʝ)ʹ*+"|Qnts
-wI;w q%>/m"#		F5ٓ$_*W@fyn`_ܴz?_gϪd{}H=kr_]@"0   ؋FMgݵ(lo_J&F^VC&#{?4͹Ӑ:`i6N#U|sjId2KB,"hz}UW']x_|w/  ^9ɭG%]4["w6
-ɺrgͻm]vo>+SFrS"wAnlUh*N/	_#>eGCX*βf71Qn7e5_@   6
-a®%
-hG>m`7fsfɪȵnn]ϯT9NW}Vzt^{N5J]`#/w{A}e>Ȓ5qjF(Qn~74/[4/c%xЃE`   ^+u#!b17+Mݭ+ycG9+e;bj_A<4@SAVcj~h1[#rP=31hRZrA83k!iuV{#E	  ޶W"F϶ZpP^o#*;"3n%U|VގGԀhGb?s`NYAPhօ˥zZg}O8w(zYh8b{8ܗ5>Yo;5BEk񪯯wYf_~3ľk֬qo9wmU-k^6*Jwz|J)p[Vt!*wS6EMnk
-oE|sۗfӜoESL1nVgnoSO^doܸqF]]0<Hcɒ%b=   "kt
-gXtE1\R".-UZlw!~lrJuΜ90a=  @[
-mMvwp>s]^$ʆusݘ3ϻzTiS]Tf*֏9Np { ~nh%gŋW 8P~b]aa,X`}PJnJ{$KSڍ$'V;s^ƍSYYy:KK F<!0-~v`P46`!^.g	fcMM3רo߾z뭷bA 0@܈'߯Jy)8X|M7,êU4tPgWyy	bA 0@܈'/$ ^ߒ`	b    %U        @    I#,C   Q+ԙk*޲tڕ    =o_nWe2oȫrz+CH     C[!F[M		%.
-- 
-  @K2̷59[TT:f  "!0   u{|{3~JsD,WJa3{Qldއo}PUH٣N\g    Q)M+q*.Pʹ/ei~C,oVݓfJwfUhLݾN#?Gڶym_5]*wD
-f,\\yݚ+bnU.sT6Q!U    Dtr=*붟_lN&ɝQ^5_Ete6G-WGde4oIٸ{ۀ])ҥFvSonfE}vIca?_>Bp%.1Y8Eɯ  M"0   h56]v#j~<cem8]{2z
-y.zfQCF}4rD#!s[E8l	 o   $yXWɫ4ȣ;SH{JJt;+"?m;W-Wgx{Rɚ8m\C9^IrS    hd߷_{=*1CEl5^<Jc=my	|?CٶEo_{85Z>$Q錠qSb ;   QvgFUVeРyyGG`P)wyީO0sfܷts- aE}%cUf++#
-az,Cs
-`7$ 2XhUgŋW 8P~b]aa,X`-5uTۯ Tۯ=0      !     @            0      !     @x"%C<᱊%))Iwu_=ܣ#GXEccA 0@!0@<!0-ӦM;Ｃ:8Kj:餓%@|#0mm           0      !     @            0      !     @            0      !     @            0      !     @            0      !\dZx
-ăد@+,,ԂW.Tyy3pNY1cƨO>RSSU\\l"ؒ:03+Ԕ)S%@|#0mm   z\ۯ bc                A`      B                A`      B                A`      B                A`      B        *O.\ΔSj/T^F㲐)#,Ѩ4'L) h   bJrRr%w0Jc.M2k;dEK捲f	g{%uTrS|}x @ 0   %UUtm
-54'KnUn<
-D<qQE  Ю   Ē!J33DTRd_o@%OӃ    @LT W %ؽ2LΟؽvg     bMf3@<)r1ڈLXSVAJo     b5QV
-4=M,1~	     ĲQ}2eSPP?B5A08 F`   C2azдIn[=?4Ǻ ]D   b?P
-,h[Uf(ol{|r*    Ę|ߘoɏ4@wОM                 A`      B             -p%Й  ]      09̞=[/_x0p@y<G7hzV=u,]vE:N	KxSO)қ|1Yt%']l*L+V^xtuMctxzdڃpkro*t[bm\M=Ii矯SU½hͻ]/4Ax:Z~
->IqW]`ʗhSf}Jy48y7;)sqzU2rxa2?g.:gO>:=Fe:5zP'gTΣ=2O|6I=YǍӨQg6~fkoAѝkmT/ԩSU__oRSSU\\l"k _5R!#4bHV=1A';}Q딪gs/QZJV~|\+5윙Z*V<{TlC[>*Խk*;=Z_>pj꥝O҇ke>ҫ^Z-Y5%}o'Oܧ	:T6W(oT;:>@/RLoj?蘔_趷vhONҏޮL.Ϫž_u/e+ޡy>y
-^Rٝ_?\7{Z[km'_o~igVcuβWG|ehN6QݓF{9 } k֬Y_oƚ5k9_?s\㹯%Qi1o1tZӜ^gԹq3zض{*cx$)2v{fBkFVDcӁmzK(Kz#WLkE/hU[HԪy'u6:pJ1nMK0|X0v|8{'7XFݷd$7è*"g2;+mmuNdrU͜O2]7]d671 1Ɨ}Zj7!&eUNb(ϵ5>ǽ/Ԕ)S[oՙpGK,qka  q(!U5\iN8`\<Hֲ'gjQMuwX^^({}7}u-הzga>˞EI3
-X)~*~z'Ԩ_ͮ?*)a';;ֹ׮l+uŻ3u_`$:љр'ڊ  {  :6MJSPknSr?U'o߮J*O|Wڨ_*.Wǌјi|hYPrNѤI4*9JyNPr\kòңUdZ)?m~~i[)!,.YRףoМ/c+{8¨]roXѾMߨPݑg>gwwh5  C`  ۏt]*-]:|5O9:F}S׬rʷ]uЭ:G_Nԧ_?lur-YoZuۛޕ.vݟZc&cW:tS&+V۷Ԩc$5?':ڹoWin􆮿Z4ղi">^]Fڱwխhr l}6}-չJ  {  iUZ<k~VnԶE]w<묃VJm\/~Վt聆~M;o$}KF^z%y={9%ª٠ʯ^,S烇wzUVj7:^*mgn*U,q$ܠAo\
-9ǺkD]zDP9HOƗ	t1SYgk)iZmރ$5wg    7_S	/髆	J:l]3~/qWw?ozVӳ˂n:ƷYԖ}P7P֙;KZ5a><Yy.b>B:3ճ<_}YSK
-g.7nҜӛ_VR4_B/u:RsW/_σ=sm   =.kCoٳgk+xy{SuEhد։SuY޻N_,zLh*fT=+ti#tƱѿiuezOӵ[ڡFԹցcu:eumm9#.}0q7K?nuN}V3n[PF~GzAz{7s`T^{Nӈ7joOVS}Fp:׬#д9yxsޚ']6DzWMJSMOk䀫thgzld![N<^˥C*ӲUE:,kGWSq5KX\y'&8]}S5vUywު_C85}-ZwFw|5~BHJJ]wv=hȑ:uo*.._{ A;Tw0)7t讴?g]c6f\i-w{->0?Z%~7:T|B7=G~OSu%7ѰwfQoh{Nz&3+gsZX)-zw~=k4yZPC2t_ܺ;XN[uq5IE+">^7~~ה(SZ~{Ӵi;CVvP[[ɓ'뤓Nr  v~6^;Òտ{FSZk1@ɃzMkUzWH*n6\[][V_|އ>;}4 4߈F`oWo%ohٖTH>DgvE^e[?!cw e
-_	>te{h h `Vk2RXWg΂ۦkN qxcS]Wg_>ubbO ~#b CݿFVnlOKweܿ\5amO5LX`qׄyT  { W_}?;
-u%8s    @S˖-s    ho *_XPQQ,    h5   @ 0 *k    X6coݻY_B?9 6kŊկ~,bC=db{QG9K Umm CсO>Y5zh>C-_\%@lsz4|pg	 4"0mm f*))Ѹq8K|egg;s@l`4 4߈ ZEϞ=ꫯjĈ    VӫW/B    F hU   @l 0 |d   6a't3   !0      !     @            0      !     @  ZK.Qaa3       @arF+={/^l`x<+u|YwW[#t::%L۵'4M}vu:eJGv3m{<:V<ywՁ1G45&	ea,M*ruPb:$4):[4}t=BzYjWU/	C:;evuǴ|39QR|߮u켟.U߭eGGkP'oQլ_h+h:%<T'qR#:j/=2}bГGkܸQJu
-h>LsmZqڟu5[4nX{~2<=
-GLX?=ž!55U+ 7"5/ @R5]sܱ*u2B#$itѿSB՟i%iJҏOӁte03sv+|޽ҠVEޫ_lΚxB]՘M|>=ԇZk.[Z}ѫzij眚Tuor},2B+<5a[ѫ۩E9Ss:}}yϨrGjkiW{_O\;unHS_/'VOiU!:됝eۯұW/WurfA58j={~|NW:ث)|4wMn甧xgFڹ!]04Ugj	ijS$,yrF  a5k,/w7` c͚5~h_?s\㹯%Qi1o1tZӨ6dt|q:%,[woM34^06h8__;?hBsXq5qtPFgb$z,Ԯ/1:et|Yf88i#0ƪ?1:</6˸o`˛Ƹ:>Xo1RӸpuƧӇh9[xnk/:nPkl{MokdK#`$al=צEHwH4|x#=~a<vGK,q   c*aj}\|;濩9Rb2=9sLtwJXkBt޻СYTZ^Y:8@IZ)_u۩3_w{:ϙt syz;5{oqtsn+|\w3 `h\}a_]u5Et{4㫺3
-  a @um:r~Oׅܦ+~NC	+YRiõOitpO{;^cƌi^uߵ\S&i$z)Nzuԭo4h7v=O4WMoϹAXW׮m;Rg'?gv
-ꍊ:yZPv;oc`M\ÊrjӟRUu6}>,%X=G(kTREq  hc kHו骓{Wc7|*!T]Aݺw?zQ~>?Y`._%KUZ!<Wb%jv.u2TCw>EfRٻ3Bk~Tg߭d>rlk_;@'ߡ-;wSCA۟A߾}5िj[zDk\ii:mWͶj)1I]|o_BvNN  / )uھaVo#Ϛ)¥9|Q]9Ok:!뵾rChzZ\qwh:'MO^LG7=}͆J}^: "qC'Y[Ԑ4k.+\EKt
-|9ru@~Ct^;k)Ǭٚ=vNk7UOC25j(9xcfϞKҺT o鹆>Gܤ'Ŝ,WGz6P]К-a"ZeL   @,Z_MxI_5tٺf0_Tic:odOU{V˂}gƷ8Kҷzp6ҙ7Nsā_x vK%<E5t엥?=UCݨn?},myeU*_MA9瞫sG\{9ݻyUZ-t9fsG{5<ќksvwpNfk_zmjm`.;@?h  ĒyE^BN{NUZ[VKrN6=[oi5۪lp=Ϻg=C[ӲF_^^-ÓU;ӈfMW)ZNFڢ/mF~^pvw0[[䣵=AwwOu7r=rκb^[Y55f[z:Ꝥov7GtYWhkK^5,[ޤ;^KP͞k"رeZZ>O80JV*<{=mun;'  rVcox>n_itnOݍ01vƆf{d72x}<VK>ChzbbкƁgYMx/o?'^5lSzbqioeZU4keQmzmی#cWɝ_2n;WN]_o)|G{βۇX.Ŝ㻆y:w7v5tqqqra4 M7"1CV4{l-^~xWCwjZ<,Y^Wi׻c@~L6[JOYuZŷJ}-rn6=L}*߹9z$lײݚ)2T`ߐb  TT2m	Pur=1-Ve[5,{P;LBF}P򆖅 ӳUVO1 )F66@`xC`=Zd?TY Qx]:Eݝ%-MeD#Q+^XN#ktOF? zRVO1 )F6= gܯ55NFQX`鮌&ͩ,3tucN5    hB]r%;ǉ     /Ԅ	     `3g      |     `᱊m*"_=,bWIIӧ;KphΜ׸qTVVG*66@`xӽ{w~ԩ]6mҖ-[<ڏO?؏ЬqWo a66@`x3p@
-:뱊,_~ܹZJCu?| Alc  tԹsg`޼y      /,HLLt       |   `#,  #0   h\ ?   k׮             A`      B7Zٳxb_XWXXدh.\rgL:U9993f-55U+bA 0@!0@<!0-III:묳h#j<󌮼JM2Y7F`oOb_h)E}}
- 1     A`      B                A`      B                A`      B                A`      B             @,S%3Ѹ,d3K).n*/#d<-< ] 0   hJ++e9Ujsi&Yީ$,]0oM4K4*-.PvY6t*}V'4hq    @{W\JQfՀW3<M/Ir8lb'y&gKJg     wC&rg4ʏj~<٣df @#0   h2oPe8@4ȣ>	ɣ*`܍#A  b  @,̷t˓" JUUVC?yƦ{T4?(1*7aJ&'/ E`   C'@ӣi`ߎ`z$O4zXis     wJ5#ףƧؓ:x+YZs&  q   \U^\9~-?5	*>nKq    96y<r+410#OKΈ8Bh+1hfpD @E`   2o)eF)ȷﲉ
-ح=b豚'  0      !     @            0      !     @         +qɕS5Jy.5Ue    vOʫrV}A)p^^!WFg\TO;x@`    U1YnUT9VE)9pUܔ Q사2    djPMT̖<QeF2}[&qm&gKJgA8T&6   ^S){rPC1,Cwuߕg,s?* >
-]KsBn[K={ݻoTg>;[W9ufՁaSufʷ3@!0    *W8Y妕4tWt+n{dŲa{Q1nN%re"oh ͖m{2ٶym_5]*뽽# M($pxrkʓ$_dk]%ʖYz.(R_DS   lkNp|ynheZ'+;o%Kʗ{9It|;t9vuݻm%e\fߟ .Zmh%a@&퐼&`fm4ģD]e{*?%   `oItx;{Fel5$]YfS(T)ï1TM֨ͷUI+;/4mtP!; ^4[C     {K(mtL+}NWq)jv$Vc1%Wi%7HGU}J<Gmvg{~Sv>BzDTiyݽ @&u-"ߢ`o@!0    FfJSWFG͵DERWQ=*1CElߊ(̶-~ApևYϗWwrnhS
-_:(. MCZz+jB={/^l`x<+
-`_RR.~{G#GԩS%/]<\l\AW[^=]nwr>z2ȅ}4,5n<{T<VEY{{4Of#:<OGSY46L7{{bTXY2@:*}֠%Ru{S3FjjW6@`xC`xB`[MwyG:tp MɓuI'9K60bA 0@!0@<!0@1 *41   [7       N&E߻`ʕ?~%    f͙3G&L 4#        @    E|݋m<VXExcovj_Et\ j68sz*(6@`xC`xB`x3` qnժU:t3u竼\1   b=VqΜ7,7oN`     5_X,A"0     D      EX     MׯaA"0     4z*aA!0      !     @   D۷;s xB`      B    "w       @   UrJV.q岦U9cZ[~@B`    ogZކryUizAܕL~Bޗ=(Ueȕgyv٠}fDsl#L1    Pm5S$ϩGi&(޲t*}tK)_(QvAp:u__X     m4'KV6?Y╙o,%L&T08Fzo%^]f%OlSQ,'S4}D1Wf[u   DSTAְWww7:>R<e#l;g'UJS s["o 
-f]5[RMhAJs>'s6`_D`    *WEq kc_5vt+!޺!}o5|Sr%weT=^FIvc^EO4ydh_aM{:WuQ.ULv    d4*[/]5_EtZV]j{i%mM*4l|dc*Iqz_/aN]ߝ:sB֭h[   AP]e(7ůRoQLXkë-WJzTDfaL3L;B;Yՙu8S<    h3ށ
-=0pr-oa]b5l5q5BfGilYwoݯ`(I۫u6   DĠ{ξ]2h`U^Ft	_r#ìu2{q
-J;OIh.xqxps    hK#*.Q$h=/t'%XKmκ,ȍ{>~u;A%h=CA?ȠX.%ZTgOH@S@;22hUgŋW 8P~b]aa,X`x MIMMUqqC          _         ")	      @            0   @D<%)uBP9rr벦U9A &    =Uy^.w!(dgyV6ad     "&UVȣ4Ah/>1    KؐeLg9\     mnnMM	*Uyre%|Jci>`fΥ*O2Y};@**pcXgwp{x<=w:;WG|.އwudy׵\ 0    ڌոKQd^vT]xsJwɣ*SfiʳJglYfVf}U˕6_+OodUZ22%ݪW؛>_/r*4^[FV3>3Mw7ͽG%漏l.,"֣Gu>{C -C`   xJ6s)ҥ~&P'[%~;/Q
-TM46ݣ"'1Z^ѣVPp5\UUI{R㾒'NV/pY|U͝#$nJ4{{=:~+.i,2GuDY@[#0    R@7Rr=Ί֐Qcv̬4lai7evaG)reMPCB0SFrSܕE   OICVXorkt;+[}[ݣRg].(.U"y||)̵Z
-/ISnh{"   ^S-a9?AiN
-juoߖPbo5ˋ5ܾ;#BX0+mV<JyAAhcc     h+5ם,_nɸ پ)ܭʆA,
-
-
-Yp;5BN	cU%_W
-M6["m}~>5<`{l/If4$`ϹZٳxb_XWXXد@<7}h=͠RSSU\\l"    Ļ*w%,@\"0    ' q      `67ߊxe*//wԩS~9K0fǙc66@`xC`xB`[:,È3<+RSLq  ZqQ__o 0ua      B    ?*eS̶}4%˚2W,lu_   6J]{UgǬpSFP=\HklfB<M/HҐa{m    Av{o7Zݪ49Uܔ Q사2qU_Xk#GiAR>    $kbHtV>fDMΖ<΂p25:LiN
-PlyF~MHm    hK9]3g}U2WnV|{gdy\!ўo#Gץ*'ͰzÞ\XPo~`ՃKZ?D=zxk[nr_{~P   @[Brzg
-rnʥ,7{2]Ü}y{]m]=}d #s$$pdgO[|E\nYow~srӜ:oϪd{}H=kr_]@"0   a^૟͈(loRroXVb4xe46'NV
-TG~ i sx!=00i6wU|sjId2KB,"hz}UW']x_|w/  @H^n ]iN2o(-7iv/5-?a@AW˜6߽ӈOfQ9;ڛݨǈۗZ̚Oe   65J]`#/w{A}e>Ȓ5q[\hI<Jcӥn=Ծ|Bzy Q"0   $GJX
-Uc˗^;¹G<%{&Jgc4ioY~=X|O`V_gʱG]_vb~Z M#0   hZ2RzHȣl<>5˝0c$43Am8G(/	
-6|7ɪp{H|??-Ђsľ`z?΁9e=B~|Y
-,i}O8w(zYh8bnp4/+3뭼zBhuf2.rg}0֬Y7~8shWIytCnҙm+p-Xik;>cnxNK9h/]ﷹu 9p/ݷzhSL1nVgno
-S>#4,Y!   iH#{GݽQCg*lѷg(g m   ;ޮaGJK}Mjb=
-J c{ {V\ǫYx@`   7VRnv#nVk&FY}/(ٍ{/ vҜ9s4aB8B`   |]7[Uޥu͌n,Xm͍r?O#p*-G2 5   Y{?%7M%FA#ȇّ҃FWIFYTHdMM2U9(~iw˰Yٳgk+(cP,_վTe8Aߣ$KԩSF
-k;s^ƍSYYy:KK F<!0-~/v`P469aC6.g	fcMM3רo߾z뭷bA 0@܈'߯Jy)8X|M7,êU4tPgWyy	bA 0@܈'/$ ^ߒ`	b    %U        @    I#,C   4%WN3).5Ueڵ+aA"0   ߗUyrs2򪜵^R @   }Iw0d=ܨtK)!A@DYe  M"0   #Yv~3$OlSQ,'S- F`   bN.9ux3K)+y[r\+S;E:}zރO4CUy^ eB:;np    Zj(7n$@YNC7Ӿ]OZMwORfm+
-hzU2MLv7bw;hiE}At1)>.xrRrIwkMFV9SDT5 9  (oN*7?pAP \\ZFS+96MTfjf6TjfVʔYcTj.
-n r9s{νa=ÓkIn=g.`R;1IWbߺX:_ogsxwQh;Kf:Rx@Fwo.ldӽ*KN+*X&%ptE1Zz\DD*F P&  J:+ibw#zyJO[593{$ci_{+\orq"آγ*#8u>\LoktM @D`   P"zSg[x^?S{]m+fnl,tW:oݬ˲K}DѹqsePWh`oI%4    D]߷tH/*~{$͛<YկsyK5ڿI=#eVowgyQSfyIK'Ǡ: j  3R؝\niKA\&͚5ŭ?l ύlw-R{Jzg-ymmKq[N5&C%ԇ{YK(>΁s*~BDYL@pB1c֮]5AXXs+11=Ggjܸq9 )**J			9<=     	     0!0      &                 Xx"jK*z \Pabccy"`ొ
-!0@MB`Y&LիWb%@Vyu(j6F`PP&!0@MCc @yFx60      &                      `B`      L     	     0!0      &                      `B`      L     	     0!0      &     dF%1c֮]5AXXs+11=Gb
-_XBYƍ!C(44(wީFK@
-!0@MB`YԣGèرcf#0lU 5jgn <c           `B`      L     	     0!0      &                      `B`      L     	     0!0      &                    Ouxy˘,ujjeT'-Rz.Z|l    <Ri;\"᜶(zgi]Z.vn:xɉeG[w6{:%N޶(|(gnCh     lݬ~r3X:CziV8mYt&P\ģhaQ     <IDbKwJ%~AI=o,%bz @@`   Qzj+@/] wrVgeYܽ4XU; F`   iz4謤màk5k8*~ F`   \8ĩfibEzog(ǖJrnY~' G!0   dկJ)05Ah5    lE^ş}t'jBzSgmt떃Ί[  C`   A܏?qzWܖzGұDM`}8s    9hLTv#߽S8S3OߘV{                  `B`      L     	     0!0      &                      `B`      L     	     0!0      &     dF%1c֮]5AXXs+11=G_~*^Sllƍg 5[TTsx*@` 5	g0aV^-b ZzgԩS'<A 0@MC` 5                  `B`      L     	     0!0      &                      `B`      L     	     0!0      &                      `B`      L     	     0!0      &                      `B`      L     	     0!0      &       30p@K         x9ר$3fڵks&SRR{v͛ٮ#
-V+zU}-\>=Oۭ߮ZtYNj,WfO܃('MK_i;ޙ~2{>{Zmk//Y|(YqiUB	whP]\(tNԗV1q:I"gls&5uڝ]K.NrBΎݙ8n+&K7gVoC׎tYIZ6TOJhҴU:d3Vi?[kW'TGm-j+}I۝PS蘒
-ԧMyUW#Oަ֊uݹ8DEE)!!=ҸFx6n@d?LwR+tEdR>EXm@ŴWYҫS?M>Ӕ渶9US>(	e)o}ż|TU]^,۷W~owʓsMǍ#WOyK_ƞu7*umƴUWR]S_iT>VX)NV@IQ;&?)"fn+&}2%NO=X(vc5뛽*p.\V*Uwiwv?zvkkgc_.')yrW[_'pnq:6ϻzmrlEG  pp0@>}cС7oصk c~wG@/،v0qcoǅ;ry::9:_GV&nYksx;bNq89	p\#X_Hv'
-כ%8zu~Zr~v?CF5ͱ6w[S;Q7Qz7֔i}BƶvGȀG1ïs1ط)G7r\ԿOVvd+j9|;LvlpUr<rqMo;;fӱC+ǜGx~TS#\[;߾Gz^Kp-L~5sX"8~:nR5}
-ke|8kΑl,@I\#<= -m4{׋-<mpVܩq.SK#тyxCfiNR2*(
-Н鲒-м7w|=@VUwݫ52ojz緜BKp-{L쨄_mڽU}]/MEM%ai}Լsz}  b 
-qŦhlz
-xf- Upڒ"nME*-*);u物RmQFO_&ܦ?%;[nJQݘ޺s+x;F5Vؾح1JT'4fPẇ}ʳz٢i\VF6/ [uu#ylkΧ  T Du.cKS1zk~=UCnLޡ]|;TgN*V*ԨJNN.6m}O+Gݟrfr+Ū|x+CYFP
-P1D1=m/ThӏjUѴFfn=ɮLgUQvm&qc5nIlp8S:2T   Pؔ?E;R4vgZ1]Ƕ~؃iOM"ȞEM?"[Xc'>z/6-ZTlRs_b40߯-RHFyYj<>kV W5|-2k4m1WҊSm&mBT7EoL
-kl:h'bc:7sRt-+)#ShdC9iWQ&;CgдI}/U!I;ֲ   P3e(]<hhX{+zh9lUzA.-MnENݟAFQU:&^7WSը%:*<D*6x>lS(ru]'Cf.Ԝ߲Er?]?_?_U*0p
-0FloG<ON<LQt[4%^3W,u,!nvR鱞   Px7P^^0LNBȓݞԕkq/t{VOuܦw֌yVj59*~zq(gR$8M;nlZXaQT/+V'vtYۏ&o\DןN-k?[/nz6VVN{@'OzgԻq^)MzߥIKc9)Z@zz:>nkR֟ ux]=ziW??{靾=4l2m</{am]kQsMN}=  85-MեeE'8-x6/5!fF^L^^oUnKhd3aGVttt)*V/-;oNî*,oI'"nUdNTL{E=Wߡ9{WC)s}q\x^q>~'hkK^Mj?vl©VID(%K@ku=MݧТc2tГUxV,Mu;hL<O,~.zf&[^r#S9  zdƌZv{aaaJJJrQssҲ-*BMٖ5WDRcl:oRT'Z5ܖeyDRlǴne7QuuR爷lFu g&**J			9 5³T4CڔY3#uC+[vD7e@EKW+d&]
-AlX!T5 5³T4C[G.?X>a&(8cǴ-*so~;8[.ʮN_FMFq84 kg_"*CJEolw*kv.aKYe|{1aK`79tOFX  @G` JYF~xx8X  \ *+,޽9b    n TѣF	    @!,    <J믿    *V&44T9992J
-EDDI&߯Ç(i N*z6*@`yܹ?nVc	_}V^g}(<i 8%F`PPӄ׸q4gT9shXD	h ( *boF	    @!4    <JEh    x (4    *
-Í%         0!0      &                      `B`      L     	     0!0      &                      `B`      L     	     0!0      &                      `B`      L     	     0!0      &                      `B`      L     	     0!0      &                 /J?T3|WڹsxlCĉՠAwllTx%&&@M J٪<0۷~'u(|۶mѣGu% 󕖖ƍ%@ 0@MCc @yFx?$08p{ UYfZf{T%44 kgc     `B`      L     	     0!0      &                      `B`      L     	     0!0      &                 5:1Ң䣲Ƕ_zaZy.7*N?3Vg?ofOo<qiGiGKokj|Xo-RѢZjׂqʪΊ)m+Jί    ;1{:}0eX[iiiڛY=[_>mh`ڬWhg\3_ZL9l
-gS}/iUJZvNwV+9.U2JN+{2:ϽJݼZEoj=_igXupջMղ   x:%D?7Wg_,_wߥ_FMNVZ@k)/؋?=SCDO]?S;?cS'Z2İ[s,TQ-Oֲbq뿋ݚSvydսڲSY场%z=7uE֋ߔWק-?Oe.    /Ԓ_|_VWږ:W=Z_Uul٩9J}.񑿿t|\_(\uzkn~|}%;L| _̷Jw"od]sU|UO-{NR_~~kbkN:	WϱߝxߵQ7?;?7.]OWMx7sºi;c"w}<?]tk7:j;]NhZ~
-t~I9vFHIhW	vSq>ՠ[˓t_    T&L]x?C5u8FȮJ8~}{2!5Ke(ԯy릨%jzYk0)iwLYu,-YԘ%˵pJ_yF9;ek+4oyLǴ=XˏOqn,+t_ҦWG)~[}iO#Len"՟HVr4`_yHV9%=9襵Ct7y%i]TϵjSF`;FFcyEM1آHnW%C`Akv0@Opf~d}8F5+    PAc}q̪kpe_ڶC%~H K.e?Uk"=3Ynj܃{uȷGiz`][KޡQڿ=]>
-Nw~d"cuFK~SOku3k'W4Y,bf$VO[zzz5K	8rtpXd蘵@{,Kz^y^fkuh
-XTrҿػEo雙    Lbc<A+ۛmGγ點 BXMkن>K¶|NjoQjI:hs^4w_`+?Kk}ޚXuDA-ukVa	0E4,FmIR$P+TupِoQc	Zl\O=JT{~yN9uݸh#N7*<]_נ:r~,}    T;>j^mJ=R /og3V qہ5rmw*rޥEDe|`F`ݡ[ѼMY/ߣVuwPV:wH9MiTeޢ>AwNtPSRpկAvܙadu63li]g7RLY'](H{t,<sf(|e膟k؈/    y|)kV%'';u?z4I7ȾmlR[Xp~j{[6].l۔Yj\rl(󘾙6XWPj0R򶽣WIO/OWp]n;Vc{i[)so R}nƩ/i.W<_^V\rS'%yR[ӕ_va:wN~Պk=j~Mjol_޾c;}M]r6Qq.}N~AO=\!jėNt    #lZxߕvNuuC.r(qDUpȅv:?j%ѫ]-ՠq#Ѳ9 {jVa4.nwX(T>D5Wf}[}FZ5l՚lU_7P+4@gTGm{tQQJ6e.}W9LXfIW'ok_ZAhc5y/z :B_    yd}sT<o߮uZ*<NS {~u\[)۳eі]"B͂l۱}ږrPOOuU5bةԲ\ҷkAB[G+F!9;/]۷˻IZUveíYfZf{Tx%&&@M J*9?5Pgxi6QX)}3\,MSx^vj]FX0\F>,pXo
-&,    PmZ^7QmjWʍ     0@Ӳ%!d   @                `B`      L     	     0!0      &                      `B`      L     	     0r8ĭުvo7J<m۶iԨQF	֥K޽[͚53JD	@i\#<[fҌ3Tvm󥥥)''GF	(j 5³Uy`Pk׺@M$tih (                      `B`      L     	     0!0      &                      `B`      L     	     0!0      &                      `B`      L     	     0!0      &      @5`_>ҤV=55Jeվ1qtn`ױus5QZff=;Dw[ҁ
-?5ÉSQUSޣo-^V  2 8uhpz?%PW\Ȁ}0.<9m٪wzotEYҌթ˥
-k1Vi܁iS/ťW)~=Y})9l8`wZbr\]*e9lY|
-c   @` <wXN~O|S'NiՂedfo3[U%~K׎Z0bgv%6˚sL9(/;}^}`S^^=7=C>W㉫n;zyza$q`J-O}-/8{ueJ^0@MUp}Yf[K{YWC[v*8ZkY(qs@(.sOU   8 s읿iѢfžրmjumۣIEEǮmA߬Uzz#5Gl}k]}ο^Zw@?N7 Hj}<|]{>f4G!PԻs{DM2ZɶZ6fEȿsjqXd-O>Uwjܰh^1B-74p_vZ_>~
-6R_tu6LN1?]ǿ|Z$*}ޟi4vR]UwL!ϬUW9D=:_rʯuzkn~%~)68C?Umc+y4VW~c_BPumK_IIG   *\n?N)cչ^.?K7xk;*<[LHE3tMEw!XSW:\&6gjZz%zyžM)RciJ^,S7M3z:٩<Mg_^ѨydsXul%!Wt_רgi޻Hfճlp6a՚4}sQQ$[[RM]`񮫘޷s y;6@CVY'鉀9%uzl~OxOكHa47RtY/#YsZ]z0^O>&k֏z%nڧ|iYiZe,YSNQijP>6~=Tҁ}q~vWtۀ|Y:W*];=[Q47S>uW   ! :?)χ5x:D^Xm'5i`,w6UsG^9_$:vS=QD}f^|rj!_5hZ
-ܟ죈G_tîU6jw4ޗ*sA[wigz?鯺#G^*ȳR'P~\6W|rke|<Bm6OA|#bTV.k{zAmݤnD
-% R'<VGm=A=c
-(-u~0h6ϏWrze
-X|`<61~"bV𥺣o   PI lڟSkSAc5ژ~L[vs{o4W}cV6,-TVko<%]R]肦櫓T+ogصimsf>y@W_]ui񆪝8?5l {/@Vi~NVnNn&~:שE*rDX<.lr:k!w,u<A:-˨
-_Y󰼛DRhd,GvԼ|ew}     y͞G]A?;@mn~XG;gk
-MF
-ll)#8t<#ݭ ];;zFYV}u\ۤ,kiN6x*j6#+5=]iNm>x8بH.-҃:_O!Md?'SkNe.PӺí}
-5TxUiOp4UE#]X3UH :ĩY3C䩝љ   8y7հ^Z0^M7ȳ˞k7V"UA+5oӒ94wc_i+lsgX*V}@!+[*o0*Vz_[|k>亏®C+˺UY=q1X3~+Wlo=_S觮WhdQS_Z]u~䦷OT1(NyJ;"k}W;m]w󖥖r+&vmrr\Gg{j   83 o&󝥚mT-P'뚸z YиaZҿQiCNvR-ݭ԰qCn9ٕl)՛e"[øLCYg4&=U_6PhGң~E&ĬkKM5vl<z~uaZouNzΈ.5_ݧB[V},@]w=yp*6E@5J'07njeīK<5   UdF%1c֮]5AXXdMiʶW
-,JK߮GexҎTEBlYڳePDS4+.Nmۓ"ԴI5WDcu!'8;ڜ0OC皷a.b	/i뺸ԟ~e؃(ϜbkeȹYeWbb{QQQJHHp4 oj}bڙ0lzjqfa%H͢ګ]%.BZv
-\,j>FQe.~j~9,pc<7>Є]ԟi뺸ԟO
--+,pqpay   $ bŚ;/A#oNW   B`  (;B<}m\J=.+o     qz%  @MG`  @)ݺu#4   5  _   x     t    ɼѝPf̘k׺@MЬY3͟?_M65JguR-_\6T||s&RBB{ qlU 5M@@c ՗bjjtO?'ơ1 <\#<A 0@M$\Kޱ7` ͝;1 <\#<c  Pa  @MB`  )    2    R     0!,    0  ///   '     `B`      L     	     0!0      &                      `B`      L     	     0!0      &           x9gfׁٰa:]%(秉'nݺFIzj;u뭷*00(A믿^0ןkϞ=F	lٲEwVllQ"E&LP_Ӎ%7o<u]F	tIwO5ԸF'\#:0p͛K@x{{kѢEٳQR}c3gTLhhg,U2
-.xGoK@\p:zO5gtKB:uW@vƫxTL@@
-5@kc           `B`      L     	     0!0      &                      `B`      L     	     0!0      &                      `B`      L     9xTfPT
-  Pu`ǏˋSff7on+^ڶm랗u^LLeM.aaayu'Zy11jR˖-Ex3\BCCsx>Lg:x5OH     0      &                      `B`      L     	     0!0      &                      `B`      L     	     (E+*N]    IENDB`
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-data-retx-dl.dia ns-3.22/src/lte/doc/source/figures/lte-rlc-data-retx-dl.dia
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-data-retx-dl.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-data-retx-dl.dia	2015-02-05 15:46:23.000000000 -0800
@@ -0,0 +1,14 @@
+     ]Ks8Wnh<qd78=hCK.miI$A?BU%)1>kAxp&h1?2Bp>YLpwf7L=% 1_oó4xpp}}Me.Gd/ ?w0+iD'i8$=K0oU,E2
+3<(9x#}_$	NababIE?{mVKl4}xQO8pWىVA28xmBpb8x15jw-\-\-\<X$iD&b<GM˰>rhb(N4]l9 ^2-e,A^izv{UNyZ7t~w2yCk{tSPf4\n1m*z:+lv05gAMsӃ3&itv,NNb`>n3hz87}xևn\ŭIq"jDL)#U0''(	#HƖR1ZI^9"odI@W-嚙Xga4;KF23&uHamd01jޱd7ij5eB-#'Vg@Iɡ6SR7vD@$pI)#P.H {=GUƔ9)9n뀜	rP. {rwHш4}BσAi l=]-6U78>hŭ>-i;>8Σ'/ezV訛O0&@gR#>4̱Ø#Jq47γRُW)U;yDdSy,# \
+˯8ƚhP.r_dP%)h.o^^@a6A 1pɹ([	3nIuQ_?[*WLN(V^v:iBb
+ӷY8äW(*5jibBZ͠@E)9ԗ?+g4^BÒ4mSDP\j'{v[)ID w))AV*T3 5Y|8˛
+k݉	ej&SVUO1|/ʁs ,Ԋ,Ǳڙ ZbV38C".f5ZЕYvAWRZ܎&*BLתaZ(w^l}lOE yg"*`kEuFWIgV)X-2
+{BgV+#sEe=׊p!N~#F	M".5WE1{5WcZJ2INqqs	iF1)#z8qk|#mCmشU0@pU VY6x{^6eZ h)#G54G6ʚĥ`ezm$f~[\&Qf]yN-˺$/IoB4ms:[.Moq@$cD!=)C4U,v-
+Kz$u|Zbkkpf-:PcʛbyWXVl-)4
+,`6 ٻC)I8KVyUsguʽxOsVŌ哫֜ 0,C{gfKWfev
+xOErh@r.䍫V6cV1,TK6ZYܳ<rB=͟)יk?ќ7.vrv"0wn+ΥgU,pe=_/&y;<Ybs5/07\ tB{ԆYRV˜pFWᗳ>mɖ*/pCo^ecҎ\u3^-pbx4C68<5iUSUkܚIbP몪y5U.ԸqDbcE
+YV@,oUiL>zYW'9]Aq;X$G*ZD	PgAbCܱJNZNW:yPv`']7dhH%HN#	k1W줮\x-nc;s1#;%SQPN*zj!]JO{(e~#^D+(4\$@;	`njg?:x:Q-Iy4EjRU}mPb
+O\ !>~m_'z
+#s_~^{4޳{^3)>`rЛἽhYPoǰ^޶A /[=WSLb:R0#fx[<pݠLe.]ҳG̶%s9 :S\!r*i"5LThn#R7^Gk( i"-}-#+j-R!Wj
+v?}tk(KQ*/Ew?U5ߖFepkv1I͋Tεǣz\Vګo)wVpHp O X0C@,_84mɫVJPX!h!P$f9Wo줛U};M8	Kɨb@+R<H?v%v PhH[5ėDԮZVq\2OɁ{cAO%|A{sz{d^/z[fJzs9
+P*?PdF_D5nÛ%7V  
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-data-retx-dl.eps ns-3.22/src/lte/doc/source/figures/lte-rlc-data-retx-dl.eps
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-data-retx-dl.eps	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-data-retx-dl.eps	1969-12-31 16:00:00.000000000 -0800
@@ -1,3596 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: 
-%%Creator: PScript5.dll Version 5.2.2
-%%CreationDate: 10/27/2011 11:55:10
-%%For: mrequena
-%%BoundingBox: 0 0 330 251
-%%Pages: 1
-%%Orientation: Portrait
-%%PageOrder: Ascend
-%%DocumentNeededResources: (atend)
-%%DocumentSuppliedResources: (atend)
-%%DocumentData: Clean7Bit
-%%TargetDevice: () (52.3) 320
-%%LanguageLevel: 1
-%%EndComments
-
-%%BeginDefaults
-%%PageBoundingBox: 0 0 330 251
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-
-%%BeginProlog
-%%BeginResource: file Pscript_WinNT_VMErrorHandler 5.0 0
-/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
-setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
-ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
-def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
-rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
-/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
-typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
-def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
-exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
-/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
-{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
-readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
-(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
-/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
-tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
-xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
-tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
-{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
-tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
-rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
-forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
-/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
-$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
-ne{grestoreall}if initgraphics courier setfont lmargin 720 moveto errorname
-(VMerror)eq{version cvi 2016 ge{userdict/ehsave known{clear userdict/ehsave get
-restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}if}if systemdict
-/showpage get exec(%%[ Error: )print errorname =print(; OffendingCommand: )
-print/command load =print( ]%%)= flush}if end end end}dup 0 systemdict put dup
-4 $brkpage put bind readonly put/currentpacking where{pop/setpacking where{pop
-oldpack setpacking}if}if
-%%EndResource
-%%BeginProcSet: Pscript_Res_Emul 5.0 0
-/defineresource where{pop}{userdict begin/defineresource{userdict/Resources 2
-copy known{get begin}{15 dict dup begin put}ifelse exch readonly exch
-currentdict 1 index known not{dup 30 dict def}if load 3 -1 roll 2 index put
-end}bind readonly def/findresource{userdict/Resources get exch get exch get}
-bind readonly def/resourceforall{pop pop pop pop}bind readonly def
-/resourcestatus{userdict/Resources 2 copy known{get exch 2 copy known{get exch
-known{0 -1 true}{false}ifelse}{pop pop pop false}ifelse}{pop pop pop pop false}
-ifelse}bind readonly def end}ifelse
-%%EndProcSet
-userdict /Pscript_WinNT_Incr 230 dict dup begin put
-%%BeginResource: file Pscript_FatalError 5.0 0
-userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup
-length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding
-{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end
-/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div
-cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end
-%%EndResource
-userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[
-(La impresora no tiene suficiente memoria disponible para este trabajo.)100 500
-(Realice una de las siguientes operaciones e intente imprimir de nuevo:)100 485
-(Escoja "Optimizar para portabilidad" como formato de salida.)115 470
-(En el panel Configuracin de dispositivo, compruebe que "Memoria PostScript disponible" tiene el valor correcto.)
-115 455(Reduzca el nmero de fuentes del documento.)115 440
-(Imprima el documento por partes.)115 425 12/Times-Roman showpage
-(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end
-version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse
-%%BeginResource: file Pscript_Win_Basic 5.0 0
-/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
-/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
-/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
-d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
-/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
-/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
-/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
-, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop
-languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,
-d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld
-/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix
-currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit
-counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b
-/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~
-d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put
-/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq
-{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `
-/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped
-{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}
-{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~
-itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5
-ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform
-nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -
-neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0
-- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool
-2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e
-{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
-/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont
-{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1
-dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d
-E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1
-^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2
-16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}
-bind d
-%%EndResource
-%%BeginResource: file Pscript_Win_Utils_L1 5.0 0
-/rf{N rp L}b/fx{1 1 dtransform @ 0 ge{1 sub 1}{1 add -0.25}? 3 -1 $ @ 0 ge{1
-sub 1}{1 add -0.25}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
-snap + +S fx rf}b/rs{N rp C K}b/rc{N rp clip N}b/UtilsInit{}b/setcolorspace{!}b
-/scol{[/setgray/setrgbcolor/setcolor/setcmykcolor/setcolor/setgray]~ get cvx
-exec}b/colspRefresh{}b/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo
-{/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d
-/AddFontInfoEnd{E d}bind d
-%%EndResource
-end
-%%EndProlog
-
-%%BeginSetup
-[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
-1 setlinecap 1 setlinejoin
-/mysetup [ 72 600 V 0 0 -72 600 V 0 251.14961 ] def 
-%%EndSetup
-
-%%Page: 1 1
-%%PageBoundingBox: 0 0 330 251
-%%EndPageComments
-%%BeginPageSetup
-/DeviceRGB dup setcolorspace /colspABC exch def
-mysetup concat colspRefresh
-%%EndPageSetup
-
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Win_GdiObject 5.0 0
-/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
-{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
-/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
-L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
-1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
-/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
-{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
-gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
-/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
-MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
-M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
-+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
-/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
-GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
-/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
-makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
-/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $
-/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt
-~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0
-0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b
-/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +
-: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~
-XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S
-GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix
-currentmatrix readonly d ; ;}if}b
-%%EndResource
-%%BeginResource: file Pscript_Win_GdiObject_L1 5.0 0
-/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 2 d/RepsV 6 d/RepsH 5 d
-/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d
-/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d
-/SetBGndFGnd{}b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx PaintData
-imagemask Width 0 +}repeat E}b E d/GDIpattfill{@ ` BGnd null ne PaintType 2 eq
-and{: BGnd aload ! scol fEOFill{O}{L}? ; FGnd aload ! U/iCol 2 ^ put @ 0 eq{!
-2}{@ 1 eq ~ 2 eq or{4}{5}?}? -1 $}if E @ patterncalc : 4 ^/PaintType get 2 eq
-{iCol 0 eq{6 -1 $}if iCol 1 eq iCol 2 eq or{8 -3 $}if iCol 3 eq iCol 4 eq or{9
--4 $}if iCol scol}if fEOFill{eoclip}{clip}? N patternfill ; N}b/hbf
-{GDIpattfill}b/hfMain{/fEOFill ~ d ~/iCol ~ d GDIpattfill}b/hf{: hfMain ;}b
-/mpstr 1 string d/mp{~ @ length 12 add dict copy `/PatternCTM matrix
-currentmatrix d/PatternMatrix ~ d/PatWidth XStep mpstr length mul d/PatHeight
-YStep d/FontType 3 d/Encoding 256 array d 3 string 0 1 255{Encoding ~ @ 3 ^ cvs
-cvn put}for !/FontMatrix matrix d/FontBBox BBox d/BuildChar{! @ ` XStep 0
-FontBBox aload ! setcachedevice/PaintProc , E : exec ;}b & E ~ @ 3 -1 $
-definefont}b/build_pattern{: GDIBWPatternDict ` Width Height E dsnap +S
-/GDIBWPatternMx matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix
-GDIBWPatternDict @ ` xOrg yOrg E matrix + mp CTMrestore}b/patterncalc{` :
-PatternCTM setmatrix PatternMatrix concat BBox aload ! ! ! + pathbbox ;
-PatHeight V ceiling 4 1 $ PatWidth V ceiling 4 1 $ PatHeight V floor 4 1 $
-PatWidth V floor 4 1 $ 2 ^ sub cvi abs ~ 3 ^ sub cvi abs ~ 4 2 $ PatHeight mul
-~ PatWidth mul ~ E}b/patternfill{5 -1 $ @ ` Ji PatternCTM setmatrix
-PatternMatrix concat 0 2 ^ 2 ^ M 0 1 mpstr length 1 sub{1 ^ mpstr 3 1 $ put}for
-! 2 ^{currentpoint 5 ^{mpstr S}repeat YStep add M}repeat ! ! ! ! E}b/pbf{: 14
-dict `/fGray ~ d/fEOFill ~ d/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d
-/Height ~ d/Width ~ d/mx xOrg yOrg matrix + d fGray{/PaintProc{` Width Height
-OutputBPP mx PaintData image E}b}{/PaintProc{` Width Height 8 mx PaintData F
-OutputBPP 8 idiv colorimage E}b}? pathbbox fEOFill{eoclip}{clip}?/Top ~ d/Right
-~ d/Bottom ~ d/Left ~ d Top Height neg Bottom 1 sub{Left Width Right 1 sub{1 ^
-2 copy + & PaintProc neg ~ neg ~ +}bind for !}bind for E ;}b
-%%EndResource
-end reinitialize
-0 0 0 1 scol N 350 2080 M 350 2047 I 351 2045 I 352 2044 I 354 2045 I 354 2047 I 354 2080 I 354 2081 I 352 2082 I 351 2081 I 350 2080 I 350 2080 I C 
-350 2024 M 350 1990 I 351 1989 I 352 1988 I 354 1989 I 354 1990 I 354 2024 I 354 2025 I 352 2026 I 351 2025 I 350 2024 I 350 2024 I C 
-350 1967 M 350 1933 I 351 1932 I 352 1931 I 354 1932 I 354 1933 I 354 1967 I 354 1968 I 352 1969 I 351 1968 I 350 1967 I 350 1967 I C 
-350 1909 M 350 1876 I 351 1875 I 352 1874 I 354 1875 I 354 1876 I 354 1909 I 354 1912 I 352 1912 I 351 1912 I 350 1909 I 350 1909 I C 
-350 1853 M 350 1820 I 351 1818 I 352 1818 I 354 1818 I 354 1820 I 354 1853 I 354 1855 I 352 1856 I 351 1855 I 350 1853 I 350 1853 I C 
-350 1796 M 350 1763 I 351 1761 I 352 1761 I 354 1761 I 354 1763 I 354 1796 I 354 1798 I 352 1798 I 351 1798 I 350 1796 I 350 1796 I C 
-350 1740 M 350 1707 I 351 1705 I 352 1704 I 354 1705 I 354 1707 I 354 1740 I 354 1741 I 352 1742 I 351 1741 I 350 1740 I 350 1740 I C 
-350 1683 M 350 1650 I 351 1648 I 352 1647 I 354 1648 I 354 1650 I 354 1683 I 354 1684 I 352 1685 I 351 1684 I 350 1683 I 350 1683 I C 
-350 1626 M 350 1593 I 351 1591 I 352 1591 I 354 1591 I 354 1593 I 354 1626 I 354 1628 I 352 1629 I 351 1628 I 350 1626 I 350 1626 I C 
-350 1569 M 350 1536 I 351 1535 I 352 1534 I 354 1535 I 354 1536 I 354 1569 I 354 1571 I 352 1572 I 351 1571 I 350 1569 I 350 1569 I C 
-350 1512 M 350 1479 I 351 1478 I 352 1477 I 354 1478 I 354 1479 I 354 1512 I 354 1515 I 352 1515 I 351 1515 I 350 1512 I 350 1512 I C 
-350 1456 M 350 1423 I 351 1421 I 352 1421 I 354 1421 I 354 1423 I 354 1456 I 354 1458 I 352 1458 I 351 1458 I 350 1456 I 350 1456 I C 
-350 1399 M 350 1366 I 351 1364 I 352 1363 I 354 1364 I 354 1366 I 354 1399 I 354 1401 I 352 1401 I 351 1401 I 350 1399 I 350 1399 I C 
-350 1343 M 350 1310 I 351 1308 I 352 1307 I 354 1308 I 354 1310 I 354 1343 I 354 1344 I 352 1345 I 351 1344 I 350 1343 I 350 1343 I C 
-350 1286 M 350 1252 I 351 1251 I 352 1250 I 354 1251 I 354 1252 I 354 1286 I 354 1287 I 352 1288 I 351 1287 I 350 1286 I 350 1286 I C 
-350 1229 M 350 1196 I 351 1194 I 352 1194 I 354 1194 I 354 1196 I 354 1229 I 354 1231 I 352 1232 I 351 1231 I 350 1229 I 350 1229 I C 
-350 1172 M 350 1139 I 351 1138 I 352 1137 I 354 1138 I 354 1139 I 354 1172 I 354 1174 I 352 1175 I 351 1174 I 350 1172 I 350 1172 I C 
-350 1115 M 350 1082 I 351 1080 I 352 1080 I 354 1080 I 354 1082 I 354 1115 I 354 1117 I 352 1117 I 351 1117 I 350 1115 I 350 1115 I C 
-350 1059 M 350 1026 I 351 1024 I 352 1023 I 354 1024 I 354 1026 I 354 1059 I 354 1060 I 352 1061 I 351 1060 I 350 1059 I 350 1059 I C 
-350 1002 M 350 969 I 351 967 I 352 966 I 354 967 I 354 969 I 354 1002 I 354 1003 I 352 1004 I 351 1003 I 350 1002 I 350 1002 I C 
-350 946 M 350 912 I 351 911 I 352 910 I 354 911 I 354 912 I 354 946 I 354 947 I 352 948 I 351 947 I 350 946 I 350 946 I C 
-350 888 M 350 855 I 351 854 I 352 853 I 354 854 I 354 855 I 354 888 I 354 890 I 352 891 I 351 890 I 350 888 I 350 888 I C 
-350 832 M 350 799 I 351 797 I 352 797 I 354 797 I 354 799 I 354 832 I 354 834 I 352 834 I 351 834 I 350 832 I 350 832 I C 
-350 775 M 350 742 I 351 740 I 352 740 I 354 740 I 354 742 I 354 775 I 354 777 I 352 777 I 351 777 I 350 775 I 350 775 I C 
-350 718 M 350 685 I 351 683 I 352 683 I 354 683 I 354 685 I 354 718 I 354 720 I 352 720 I 351 720 I 350 718 I 350 718 I C 
-350 662 M 350 629 I 351 627 I 352 626 I 354 627 I 354 629 I 354 662 I 354 663 I 352 664 I 351 663 I 350 662 I 350 662 I C 
-350 605 M 350 571 I 351 570 I 352 569 I 354 570 I 354 571 I 354 605 I 354 606 I 352 607 I 351 606 I 350 605 I 350 605 I C 
-350 548 M 350 515 I 351 514 I 352 513 I 354 514 I 354 515 I 354 548 I 354 550 I 352 551 I 351 550 I 350 548 I 350 548 I C 
-350 491 M 350 458 I 351 457 I 352 456 I 354 457 I 354 458 I 354 491 I 354 493 I 352 494 I 351 493 I 350 491 I 350 491 I C 
-350 435 M 350 402 I 351 400 I 352 400 I 354 400 I 354 402 I 354 435 I 354 437 I 352 437 I 351 437 I 350 435 I 350 435 I C 
-350 378 M 350 345 I 351 343 I 352 342 I 354 343 I 354 345 I 354 378 I 354 379 I 352 380 I 351 379 I 350 378 I 350 378 I C 
-350 321 M 350 288 I 351 286 I 352 285 I 354 286 I 354 288 I 354 321 I 354 323 I 352 323 I 351 323 I 350 321 I 350 321 I C 
-350 265 M 350 262 I 351 261 I 352 260 I 354 261 I 354 262 I 354 265 I 354 266 I 352 267 I 351 266 I 350 265 I 350 265 I C 
-:  L ; K 
-N 129 13 M 129 262 I 575 262 I 575 13 I 129 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1 Lj 1 Lc 6 Lw solid N 129 262 M 575 262 I 575 13 I 129 13 I 129 262 I C 
-: 0.648 0.77 +S K 
-; Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_T3Hdr 5.0 0
-{version cvi 2016 ge{32/FontType resourcestatus{pop pop true}{false}ifelse}
-{false}ifelse}exec/Is2016andT32? exch def/T32DefSBCMap{/CIDInit/ProcSet
-findresource begin 10 dict begin begincmap/CIDSystemInfo 3 dict dup begin
-/Registry(Adobe)def/Ordering(Identity1)def/Supplement 0 def end def/CMapType 0
-def/WMode 0 def 1 begincodespacerange<00><ff>endcodespacerange 1 begincidrange
-<00><ff>0 endcidrange endcmap/DrvSBCMap currentdict/CMap defineresource pop end
-end}bind def Is2016andT32?{T32DefSBCMap}def/T32RsrcBegin{Is2016andT32?{
-/BitmapFontInit/ProcSet findresource begin}if}bind def/T32RsrcEnd{Is2016andT32?
-{end}if}bind def/AddT32Char{6 1 roll 0 get 7 1 roll pop pop 5 1 roll pop
-findfont/TT32R get addglyph}bind def/AddT3Char{findfont dup 5 2 roll 1 index
-length 0 gt{cvx 1 index exch 4 exch put dup(imagemask)cvx cvn 5 exch put cvx}
-{pop cvx}ifelse 3 -1 roll/CharProcs get 3 1 roll put dup/Encoding get 5 -1 roll
-4 index put/Metrics get 3 1 roll put}bind def/AddT3T32Char Is2016andT32?{
-/AddT32Char}{/AddT3Char}ifelse load def/GreNewFontT32{5 dict begin exch
-/FontMatrix exch def exch/FontBBox exch def exch pop exch pop/CIDFontType 4 def
-dup currentdict end/CIDFont defineresource 3 -1 roll dup/DrvSBCMap dup/CMap
-resourcestatus{pop pop}{T32DefSBCMap}ifelse 5 -1 roll[exch]composefont dup
-length dict copy dup/FID undef begin exch/TT32R exch def currentdict end
-definefont/BitmapFontInit/ProcSet findresource begin/TT32R get[14 0 0 0 0 0]<>0
-4 -1 roll addglyph end}bind def/GreNewFontT3{11 dict begin pop/FontType 3 def
-/FontMatrix exch def/FontBBox exch def/Encoding exch def/CharProcs 257 dict def
-CharProcs/.notdef{}put/Metrics 257 dict def Metrics/.notdef 3 -1 roll put
-AddFontInfoBegin AddFontInfo AddFontInfoEnd/BuildChar{userdict begin/char exch
-def dup/charname exch/Encoding get char get def dup/Metrics get charname 2 copy
-known{get aload pop}{pop/.notdef get aload pop}ifelse setcachedevice begin
-Encoding char get CharProcs exch 2 copy known{get}{pop/.notdef get}ifelse end
-exec end}def currentdict end definefont pop}bind def/GreNewFont{Is2016andT32?
-{GreNewFontT32}{GreNewFontT3}ifelse}bind def/UDF3{Is2016andT32?{/BitmapFontInit
-/ProcSet findresource begin dup/CIDFont findresource removeall/CIDFont
-undefineresource undefinefont end}{pop UDF}ifelse}bind def
-%%EndResource
-end reinitialize
-/TT3784Db00
-[78 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 78 div 0 0 -1 78 div 0 0 ]
-/__TT3784Db00
-GreNewFont
-T32RsrcBegin
-
-1
-/g4 [46 0 1 -50 44 0 ] 
-/g4 [43 50 true [1 0 0 1 -1 50 ]  0 0]
-[<00003fc00000
-00007fc00000
-00007fe00000
-00007fe00000
-0000ffe00000
-0000fff00000
-0000fff00000
-0001fbf00000
-0001fbf80000
-0003fbf80000
-0003f1fc0000
-0003f1fc0000
-0007f1fc0000
-0007e0fe0000
-0007e0fe0000
-000fe0fe0000
-000fc07f0000
-000fc07f0000
-001fc03f0000
-001f803f8000
-003f803f8000
-003f801fc000
-003f001fc000
-007f001fc000
-007e000fe000
-007e000fe000
-00fe000fe000
-00fc0007f000
-00fc0007f000
-01fc0007f000
-01f80003f800
-03f80003f800
-03fffffffc00
-03fffffffc00
-07fffffffc00
-07fffffffe00
-07fffffffe00
-0fe00000fe00
-0fe000007f00
-0fc000007f00
-1fc000007f00
-1fc000003f80
-3f8000003f80
-3f8000003fc0
-3f8000001fc0
-7f0000001fc0
-7f0000001fe0
-7f0000000fe0
-fe0000000fe0
-7e00000007e0
->
- ]
-/TT3784Db00 AddT3T32Char
-
-2
-/g68 [68 0 7 -50 61 0 ] 
-/g68 [54 50 true [1 0 0 1 -7 50 ]  0 0]
-[<7fc00000000ff8
-fff00000001ffc
-fff00000003ffc
-fff80000003ffc
-fff80000007ffc
-fffc0000007ffc
-fffc000000fffc
-fefc000000fdfc
-fefe000000fdfc
-fe7e000001f9fc
-fe7f000001f9fc
-fe7f000003f9fc
-fe3f000003f1fc
-fe3f800003f1fc
-fe3f800007e1fc
-fe1f800007e1fc
-fe1fc0000fe1fc
-fe0fc0000fc1fc
-fe0fe0000fc1fc
-fe0fe0001f81fc
-fe07e0001f81fc
-fe07f0001f81fc
-fe03f0003f01fc
-fe03f8003f01fc
-fe03f8007f01fc
-fe01f8007e01fc
-fe01fc007e01fc
-fe01fc00fc01fc
-fe00fe00fc01fc
-fe00fe01fc01fc
-fe007e01f801fc
-fe007f01f801fc
-fe007f03f001fc
-fe003f03f001fc
-fe003f87f001fc
-fe003f87e001fc
-fe001fc7e001fc
-fe001fcfc001fc
-fe000fcfc001fc
-fe000fffc001fc
-fe000fff8001fc
-fe0007ff8001fc
-fe0007ff8001fc
-fe0007ff0001fc
-fe0003ff0001fc
-fe0003fe0001fc
-fe0001fe0001fc
-fe0001fe0001fc
-fe0001fc0001fc
-fe0000fc0001fc
->
- ]
-/TT3784Db00 AddT3T32Char
-
-3
-/g3 [18 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT3784Db00 AddT3T32Char
-
-4
-/g90 [43 0 7 -50 40 0 ] 
-/g90 [33 50 true [1 0 0 1 -7 50 ]  0 0]
-[<7fffe00000
-fffffe0000
-ffffff8000
-ffffffc000
-ffffffe000
-fe003ff000
-fe000ff000
-fe0007f800
-fe0003f800
-fe0003fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0003f800
-fe0003f800
-fe0007f000
-fe001ff000
-fe007fe000
-ffffffc000
-ffffff0000
-fffffc0000
-fffff80000
-fffffe0000
-fe01ff0000
-fe007f8000
-fe003f8000
-fe001fc000
-fe001fc000
-fe000fe000
-fe000fe000
-fe0007f000
-fe0007f000
-fe0003f800
-fe0003f800
-fe0003f800
-fe0001fc00
-fe0001fc00
-fe0001fe00
-fe0000fe00
-fe0000fe00
-fe00007f00
-fe00007f00
-fe00007f80
-fe00003f80
-fe00003f80
-fe00001f80
->
- ]
-/TT3784Db00 AddT3T32Char
-
-5
-/g62 [33 0 7 -50 33 0 ] 
-/g62 [26 50 true [1 0 0 1 -7 50 ]  0 0]
-[<fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-ffffffc0
-ffffffc0
-ffffffc0
-ffffffc0
-ffffffc0
-7fffffc0
->
- ]
-/TT3784Db00 AddT3T32Char
-
-6
-/g18 [42 0 4 -51 40 1 ] 
-/g18 [36 52 true [1 0 0 1 -4 51 ]  0 0]
-[<00007fc000
-0003fffc00
-000fffff00
-003fffffc0
-007fffffe0
-00fffffff0
-01ffc03ff0
-03fe0007f0
-07fc0001f0
-0ff80000f0
-0ff0000030
-1fe0000000
-1fc0000000
-3fc0000000
-3f80000000
-3f80000000
-7f00000000
-7f00000000
-7f00000000
-7f00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-ff00000000
-7f00000000
-7f00000000
-7f00000000
-7f80000000
-7f80000000
-3f80000000
-3fc0000000
-1fe0000000
-1fe0000030
-0ff00000f0
-0ffc0001f0
-07fe0007f0
-03ffc03ff0
-01fffffff0
-00ffffffe0
-007fffffc0
-001fffff00
-0007fffc00
-0000ffc000
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Text 5.0 0
-/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
-/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
-length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
-{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
-/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
-if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
-{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
-StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
-! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy
-put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM
-makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0
-Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N
-/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT
-{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d
-/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `
-/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d
-/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont
-Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1
-add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E
-/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $
-FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255
-idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector
-Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding
-length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2
-add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs
-putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^
-256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E
-/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~
-definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix
-makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ !
-findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?
-{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
-get undefinefont}forall undefinefont}b
-%%EndResource
-end reinitialize
-F /F0 0 /0 F /TT3784Db00 mF 
-/F0S4E F0 [78.645 0 0 -78.645 0 0 ] mFS
-F0S4E Ji 
-247 161 M <01>S 
-285 161 M <02>S  342 161 M <03>S  357 161 M <04>S  392 161 M <05>S  420 161 M <06>S  
-7 Lw N 247 170 M 457 170 I : 0.648 0.77 +S K 
-; 1 Lw solid N 1055 2080 M 1055 2047 I 1055 2045 I 1057 2044 I 1058 2045 I 1059 2047 I 1059 2080 I 1058 2081 I 1057 2082 I 1055 2081 I 1055 2080 I 1055 2080 I C 
-1055 2024 M 1055 1990 I 1055 1989 I 1057 1988 I 1058 1989 I 1059 1990 I 1059 2024 I 1058 2025 I 1057 2026 I 1055 2025 I 1055 2024 I 1055 2024 I C 
-1055 1967 M 1055 1933 I 1055 1932 I 1057 1931 I 1058 1932 I 1059 1933 I 1059 1967 I 1058 1968 I 1057 1969 I 1055 1968 I 1055 1967 I 1055 1967 I C 
-1055 1909 M 1055 1876 I 1055 1875 I 1057 1874 I 1058 1875 I 1059 1876 I 1059 1909 I 1058 1912 I 1057 1912 I 1055 1912 I 1055 1909 I 1055 1909 I C 
-1055 1853 M 1055 1820 I 1055 1818 I 1057 1818 I 1058 1818 I 1059 1820 I 1059 1853 I 1058 1855 I 1057 1856 I 1055 1855 I 1055 1853 I 1055 1853 I C 
-1055 1796 M 1055 1763 I 1055 1761 I 1057 1761 I 1058 1761 I 1059 1763 I 1059 1796 I 1058 1798 I 1057 1798 I 1055 1798 I 1055 1796 I 1055 1796 I C 
-1055 1740 M 1055 1707 I 1055 1705 I 1057 1704 I 1058 1705 I 1059 1707 I 1059 1740 I 1058 1741 I 1057 1742 I 1055 1741 I 1055 1740 I 1055 1740 I C 
-1055 1683 M 1055 1650 I 1055 1648 I 1057 1647 I 1058 1648 I 1059 1650 I 1059 1683 I 1058 1684 I 1057 1685 I 1055 1684 I 1055 1683 I 1055 1683 I C 
-1055 1626 M 1055 1593 I 1055 1591 I 1057 1591 I 1058 1591 I 1059 1593 I 1059 1626 I 1058 1628 I 1057 1629 I 1055 1628 I 1055 1626 I 1055 1626 I C 
-1055 1569 M 1055 1536 I 1055 1535 I 1057 1534 I 1058 1535 I 1059 1536 I 1059 1569 I 1058 1571 I 1057 1572 I 1055 1571 I 1055 1569 I 1055 1569 I C 
-1055 1512 M 1055 1479 I 1055 1478 I 1057 1477 I 1058 1478 I 1059 1479 I 1059 1512 I 1058 1515 I 1057 1515 I 1055 1515 I 1055 1512 I 1055 1512 I C 
-1055 1456 M 1055 1423 I 1055 1421 I 1057 1421 I 1058 1421 I 1059 1423 I 1059 1456 I 1058 1458 I 1057 1458 I 1055 1458 I 1055 1456 I 1055 1456 I C 
-1055 1399 M 1055 1366 I 1055 1364 I 1057 1363 I 1058 1364 I 1059 1366 I 1059 1399 I 1058 1401 I 1057 1401 I 1055 1401 I 1055 1399 I 1055 1399 I C 
-1055 1343 M 1055 1310 I 1055 1308 I 1057 1307 I 1058 1308 I 1059 1310 I 1059 1343 I 1058 1344 I 1057 1345 I 1055 1344 I 1055 1343 I 1055 1343 I C 
-1055 1286 M 1055 1252 I 1055 1251 I 1057 1250 I 1058 1251 I 1059 1252 I 1059 1286 I 1058 1287 I 1057 1288 I 1055 1287 I 1055 1286 I 1055 1286 I C 
-1055 1229 M 1055 1196 I 1055 1194 I 1057 1194 I 1058 1194 I 1059 1196 I 1059 1229 I 1058 1231 I 1057 1232 I 1055 1231 I 1055 1229 I 1055 1229 I C 
-1055 1172 M 1055 1139 I 1055 1138 I 1057 1137 I 1058 1138 I 1059 1139 I 1059 1172 I 1058 1174 I 1057 1175 I 1055 1174 I 1055 1172 I 1055 1172 I C 
-1055 1115 M 1055 1082 I 1055 1080 I 1057 1080 I 1058 1080 I 1059 1082 I 1059 1115 I 1058 1117 I 1057 1117 I 1055 1117 I 1055 1115 I 1055 1115 I C 
-1055 1059 M 1055 1026 I 1055 1024 I 1057 1023 I 1058 1024 I 1059 1026 I 1059 1059 I 1058 1060 I 1057 1061 I 1055 1060 I 1055 1059 I 1055 1059 I C 
-1055 1002 M 1055 969 I 1055 967 I 1057 966 I 1058 967 I 1059 969 I 1059 1002 I 1058 1003 I 1057 1004 I 1055 1003 I 1055 1002 I 1055 1002 I C 
-1055 946 M 1055 912 I 1055 911 I 1057 910 I 1058 911 I 1059 912 I 1059 946 I 1058 947 I 1057 948 I 1055 947 I 1055 946 I 1055 946 I C 
-1055 888 M 1055 855 I 1055 854 I 1057 853 I 1058 854 I 1059 855 I 1059 888 I 1058 890 I 1057 891 I 1055 890 I 1055 888 I 1055 888 I C 
-1055 832 M 1055 799 I 1055 797 I 1057 797 I 1058 797 I 1059 799 I 1059 832 I 1058 834 I 1057 834 I 1055 834 I 1055 832 I 1055 832 I C 
-1055 775 M 1055 742 I 1055 740 I 1057 740 I 1058 740 I 1059 742 I 1059 775 I 1058 777 I 1057 777 I 1055 777 I 1055 775 I 1055 775 I C 
-1055 718 M 1055 685 I 1055 683 I 1057 683 I 1058 683 I 1059 685 I 1059 718 I 1058 720 I 1057 720 I 1055 720 I 1055 718 I 1055 718 I C 
-1055 662 M 1055 629 I 1055 627 I 1057 626 I 1058 627 I 1059 629 I 1059 662 I 1058 663 I 1057 664 I 1055 663 I 1055 662 I 1055 662 I C 
-1055 605 M 1055 571 I 1055 570 I 1057 569 I 1058 570 I 1059 571 I 1059 605 I 1058 606 I 1057 607 I 1055 606 I 1055 605 I 1055 605 I C 
-1055 548 M 1055 515 I 1055 514 I 1057 513 I 1058 514 I 1059 515 I 1059 548 I 1058 550 I 1057 551 I 1055 550 I 1055 548 I 1055 548 I C 
-1055 491 M 1055 458 I 1055 457 I 1057 456 I 1058 457 I 1059 458 I 1059 491 I 1058 493 I 1057 494 I 1055 493 I 1055 491 I 1055 491 I C 
-1055 435 M 1055 402 I 1055 400 I 1057 400 I 1058 400 I 1059 402 I 1059 435 I 1058 437 I 1057 437 I 1055 437 I 1055 435 I 1055 435 I C 
-1055 378 M 1055 345 I 1055 343 I 1057 342 I 1058 343 I 1059 345 I 1059 378 I 1058 379 I 1057 380 I 1055 379 I 1055 378 I 1055 378 I C 
-1055 321 M 1055 288 I 1055 286 I 1057 285 I 1058 286 I 1059 288 I 1059 321 I 1058 323 I 1057 323 I 1055 323 I 1055 321 I 1055 321 I C 
-1055 265 M 1055 262 I 1055 261 I 1057 260 I 1058 261 I 1059 262 I 1059 265 I 1058 266 I 1057 267 I 1055 266 I 1055 265 I 1055 265 I C 
-:  L ; K 
-N 834 13 M 834 262 I 1280 262 I 1280 13 I 834 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 834 262 M 1280 262 I 1280 13 I 834 13 I 834 262 I C 
-: 0.648 0.77 +S K 
-; T32RsrcBegin
-
-7
-/g286 [39 0 4 -38 36 1 ] 
-/g286 [32 39 true [1 0 0 1 -4 38 ]  0 0]
-[<000ff800
-007fff00
-00ffffc0
-03ffffe0
-07fffff0
-0ffc0ff8
-0ff003f8
-1fc001fc
-3f8000fc
-3f80007e
-7f00007e
-7f00003e
-7f00003f
-7e00003f
-fe00003f
-fe00003f
-ffffffff
-ffffffff
-ffffffff
-ffffffff
-fffffffe
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-7f000000
-7f000000
-7f000000
-3f800000
-3fc00000
-1fe0000e
-1ff0003e
-0ffc01fe
-07fffffe
-03fffffe
-01fffff8
-007fffe0
-0007fe00
->
- ]
-/TT3784Db00 AddT3T32Char
-
-8
-/g69 [51 0 7 -50 45 0 ] 
-/g69 [38 50 true [1 0 0 1 -7 50 ]  0 0]
-[<7f800001fc
-ffe00001fc
-ffe00001fc
-fff00001fc
-fff00001fc
-fff80001fc
-fff80001fc
-fffc0001fc
-fefe0001fc
-fefe0001fc
-feff0001fc
-fe7f0001fc
-fe7f8001fc
-fe3f8001fc
-fe3fc001fc
-fe1fc001fc
-fe1fe001fc
-fe0fe001fc
-fe07f001fc
-fe07f001fc
-fe03f801fc
-fe03f801fc
-fe01fc01fc
-fe01fc01fc
-fe00fe01fc
-fe00fe01fc
-fe007f01fc
-fe007f01fc
-fe003f81fc
-fe003f81fc
-fe001fc1fc
-fe001fe1fc
-fe000fe1fc
-fe000ff1fc
-fe0007f1fc
-fe0007f1fc
-fe0003f9fc
-fe0003f9fc
-fe0001fdfc
-fe0000fdfc
-fe0000fffc
-fe00007ffc
-fe00007ffc
-fe00003ffc
-fe00003ffc
-fe00001ffc
-fe00001ffc
-fe00000ffc
-fe000007fc
-fe000003f8
->
- ]
-/TT3784Db00 AddT3T32Char
-
-9
-/g17 [43 0 7 -50 40 0 ] 
-/g17 [33 50 true [1 0 0 1 -7 50 ]  0 0]
-[<7ffff00000
-fffffe0000
-ffffff8000
-ffffffc000
-ffffffe000
-fe003ff000
-fe000ff800
-fe0007f800
-fe0003f800
-fe0003fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0001fc00
-fe0003f800
-fe0003f800
-fe0007f000
-fe000fe000
-fe003fe000
-ffffff8000
-fffffe0000
-ffffffc000
-fffffff000
-fffffff800
-fe001ffc00
-fe0003fe00
-fe0001fe00
-fe0000ff00
-fe00007f00
-fe00007f80
-fe00003f80
-fe00003f80
-fe00003f80
-fe00003f80
-fe00003f80
-fe00003f80
-fe00003f80
-fe00007f00
-fe0000ff00
-fe0000fe00
-fe0003fe00
-fe000ffc00
-fffffff800
-fffffff000
-ffffffc000
-ffffff0000
-7ffff80000
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-928 161 M <07>S 
-961 161 M <08>S  1004 161 M <09>S  1040 161 M <03>S  1055 161 M <02>S  1112 161 M <01>S  1150 161 M <06>S  
-7 Lw N 928 170 M 1185 170 I : 0.648 0.77 +S K 
-; 1 Lw solid N 1759 2080 M 1759 2047 I 1760 2045 I 1761 2044 I 1762 2045 I 1763 2047 I 1763 2080 I 1762 2081 I 1761 2082 I 1760 2081 I 1759 2080 I 1759 2080 I C 
-1759 2024 M 1759 1990 I 1760 1989 I 1761 1988 I 1762 1989 I 1763 1990 I 1763 2024 I 1762 2025 I 1761 2026 I 1760 2025 I 1759 2024 I 1759 2024 I C 
-1759 1967 M 1759 1933 I 1760 1932 I 1761 1931 I 1762 1932 I 1763 1933 I 1763 1967 I 1762 1968 I 1761 1969 I 1760 1968 I 1759 1967 I 1759 1967 I C 
-1759 1909 M 1759 1876 I 1760 1875 I 1761 1874 I 1762 1875 I 1763 1876 I 1763 1909 I 1762 1912 I 1761 1912 I 1760 1912 I 1759 1909 I 1759 1909 I C 
-1759 1853 M 1759 1820 I 1760 1818 I 1761 1818 I 1762 1818 I 1763 1820 I 1763 1853 I 1762 1855 I 1761 1856 I 1760 1855 I 1759 1853 I 1759 1853 I C 
-1759 1796 M 1759 1763 I 1760 1761 I 1761 1761 I 1762 1761 I 1763 1763 I 1763 1796 I 1762 1798 I 1761 1798 I 1760 1798 I 1759 1796 I 1759 1796 I C 
-1759 1740 M 1759 1707 I 1760 1705 I 1761 1704 I 1762 1705 I 1763 1707 I 1763 1740 I 1762 1741 I 1761 1742 I 1760 1741 I 1759 1740 I 1759 1740 I C 
-1759 1683 M 1759 1650 I 1760 1648 I 1761 1647 I 1762 1648 I 1763 1650 I 1763 1683 I 1762 1684 I 1761 1685 I 1760 1684 I 1759 1683 I 1759 1683 I C 
-1759 1626 M 1759 1593 I 1760 1591 I 1761 1591 I 1762 1591 I 1763 1593 I 1763 1626 I 1762 1628 I 1761 1629 I 1760 1628 I 1759 1626 I 1759 1626 I C 
-1759 1569 M 1759 1536 I 1760 1535 I 1761 1534 I 1762 1535 I 1763 1536 I 1763 1569 I 1762 1571 I 1761 1572 I 1760 1571 I 1759 1569 I 1759 1569 I C 
-1759 1512 M 1759 1479 I 1760 1478 I 1761 1477 I 1762 1478 I 1763 1479 I 1763 1512 I 1762 1515 I 1761 1515 I 1760 1515 I 1759 1512 I 1759 1512 I C 
-1759 1456 M 1759 1423 I 1760 1421 I 1761 1421 I 1762 1421 I 1763 1423 I 1763 1456 I 1762 1458 I 1761 1458 I 1760 1458 I 1759 1456 I 1759 1456 I C 
-1759 1399 M 1759 1366 I 1760 1364 I 1761 1363 I 1762 1364 I 1763 1366 I 1763 1399 I 1762 1401 I 1761 1401 I 1760 1401 I 1759 1399 I 1759 1399 I C 
-1759 1343 M 1759 1310 I 1760 1308 I 1761 1307 I 1762 1308 I 1763 1310 I 1763 1343 I 1762 1344 I 1761 1345 I 1760 1344 I 1759 1343 I 1759 1343 I C 
-1759 1286 M 1759 1252 I 1760 1251 I 1761 1250 I 1762 1251 I 1763 1252 I 1763 1286 I 1762 1287 I 1761 1288 I 1760 1287 I 1759 1286 I 1759 1286 I C 
-1759 1229 M 1759 1196 I 1760 1194 I 1761 1194 I 1762 1194 I 1763 1196 I 1763 1229 I 1762 1231 I 1761 1232 I 1760 1231 I 1759 1229 I 1759 1229 I C 
-1759 1172 M 1759 1139 I 1760 1138 I 1761 1137 I 1762 1138 I 1763 1139 I 1763 1172 I 1762 1174 I 1761 1175 I 1760 1174 I 1759 1172 I 1759 1172 I C 
-1759 1115 M 1759 1082 I 1760 1080 I 1761 1080 I 1762 1080 I 1763 1082 I 1763 1115 I 1762 1117 I 1761 1117 I 1760 1117 I 1759 1115 I 1759 1115 I C 
-1759 1059 M 1759 1026 I 1760 1024 I 1761 1023 I 1762 1024 I 1763 1026 I 1763 1059 I 1762 1060 I 1761 1061 I 1760 1060 I 1759 1059 I 1759 1059 I C 
-1759 1002 M 1759 969 I 1760 967 I 1761 966 I 1762 967 I 1763 969 I 1763 1002 I 1762 1003 I 1761 1004 I 1760 1003 I 1759 1002 I 1759 1002 I C 
-1759 946 M 1759 912 I 1760 911 I 1761 910 I 1762 911 I 1763 912 I 1763 946 I 1762 947 I 1761 948 I 1760 947 I 1759 946 I 1759 946 I C 
-1759 888 M 1759 855 I 1760 854 I 1761 853 I 1762 854 I 1763 855 I 1763 888 I 1762 890 I 1761 891 I 1760 890 I 1759 888 I 1759 888 I C 
-1759 832 M 1759 799 I 1760 797 I 1761 797 I 1762 797 I 1763 799 I 1763 832 I 1762 834 I 1761 834 I 1760 834 I 1759 832 I 1759 832 I C 
-1759 775 M 1759 742 I 1760 740 I 1761 740 I 1762 740 I 1763 742 I 1763 775 I 1762 777 I 1761 777 I 1760 777 I 1759 775 I 1759 775 I C 
-1759 718 M 1759 685 I 1760 683 I 1761 683 I 1762 683 I 1763 685 I 1763 718 I 1762 720 I 1761 720 I 1760 720 I 1759 718 I 1759 718 I C 
-1759 662 M 1759 629 I 1760 627 I 1761 626 I 1762 627 I 1763 629 I 1763 662 I 1762 663 I 1761 664 I 1760 663 I 1759 662 I 1759 662 I C 
-1759 605 M 1759 571 I 1760 570 I 1761 569 I 1762 570 I 1763 571 I 1763 605 I 1762 606 I 1761 607 I 1760 606 I 1759 605 I 1759 605 I C 
-1759 548 M 1759 515 I 1760 514 I 1761 513 I 1762 514 I 1763 515 I 1763 548 I 1762 550 I 1761 551 I 1760 550 I 1759 548 I 1759 548 I C 
-1759 491 M 1759 458 I 1760 457 I 1761 456 I 1762 457 I 1763 458 I 1763 491 I 1762 493 I 1761 494 I 1760 493 I 1759 491 I 1759 491 I C 
-1759 435 M 1759 402 I 1760 400 I 1761 400 I 1762 400 I 1763 402 I 1763 435 I 1762 437 I 1761 437 I 1760 437 I 1759 435 I 1759 435 I C 
-1759 378 M 1759 345 I 1760 343 I 1761 342 I 1762 343 I 1763 345 I 1763 378 I 1762 379 I 1761 380 I 1760 379 I 1759 378 I 1759 378 I C 
-1759 321 M 1759 288 I 1760 286 I 1761 285 I 1762 286 I 1763 288 I 1763 321 I 1762 323 I 1761 323 I 1760 323 I 1759 321 I 1759 321 I C 
-1759 265 M 1759 262 I 1760 261 I 1761 260 I 1762 261 I 1763 262 I 1763 265 I 1762 266 I 1761 267 I 1760 266 I 1759 265 I 1759 265 I C 
-:  L ; K 
-N 1538 13 M 1538 262 I 1984 262 I 1984 13 I 1538 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 1538 262 M 1984 262 I 1984 13 I 1538 13 I 1538 262 I C 
-: 0.648 0.77 +S K 
-; T32RsrcBegin
-
-10
-/g94 [36 0 3 -51 34 1 ] 
-/g94 [31 52 true [1 0 0 1 -3 51 ]  0 0]
-[<000ff800
-007fff80
-01ffffe0
-07fffff0
-0ffffff0
-1ff80ff0
-1fe003f0
-3fc000f0
-3f800030
-7f800000
-7f000000
-7f000000
-7f000000
-7f000000
-7f000000
-7f800000
-7f800000
-3fc00000
-3fe00000
-1ff00000
-1ffc0000
-0fff0000
-07ffc000
-03fff000
-01fffc00
-007fff00
-001fffc0
-0007ffe0
-0001fff0
-00007ff8
-00001ff8
-00000ffc
-000003fc
-000001fe
-000001fe
-000000fe
-000000fe
-000000fe
-000000fe
-000000fe
-000000fe
-000001fc
-e00001fc
-f00003fc
-fe000ff8
-ffc03ff0
-fffffff0
-ffffffe0
-7fffffc0
-1fffff00
-07fffc00
-007fe000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-11
-/g272 [33 0 3 -38 30 1 ] 
-/g272 [27 39 true [1 0 0 1 -3 38 ]  0 0]
-[<000ff000
-007ffe00
-01ffff80
-03ffffc0
-07ffffe0
-0ff80fe0
-1fe003e0
-1fc001e0
-3fc00040
-3f800000
-7f000000
-7f000000
-7f000000
-7f000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-ff000000
-7f000000
-7f000000
-7f000000
-7f800000
-3f800060
-3fc000e0
-1fe003e0
-0ff80fe0
-0fffffe0
-07ffffc0
-01ffff80
-00fffe00
-001ff000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-12
-/g346 [42 0 6 -54 36 0 ] 
-/g346 [30 54 true [1 0 0 1 -6 54 ]  0 0]
-[<fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc03f800
-fc1fff00
-fc3fff80
-fcffffc0
-fdffffe0
-fffc1ff0
-fff007f0
-ffc003f8
-ff8001f8
-ff0001f8
-fe0001fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
->
- ]
-/TT3784Db00 AddT3T32Char
-
-13
-/g282 [42 0 4 -54 36 1 ] 
-/g282 [32 55 true [1 0 0 1 -4 54 ]  0 0]
-[<0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-0000003f
-001fe03f
-00fff83f
-01fffe3f
-03ffff3f
-07ffffbf
-0ff81fff
-1fe00fff
-1fc003ff
-3fc001ff
-3f8000ff
-7f80007f
-7f00007f
-7f00003f
-7f00003f
-fe00003f
-fe00003f
-fe00003f
-fe00003f
-fe00003f
-fe00003f
-fe00003f
-fe00003f
-fe00003f
-fe00003f
-fe00003f
-ff00003f
-7f00003f
-7f00007f
-7f0000ff
-7f8000ff
-3f8001ff
-3fc003ff
-1fe00fff
-1ff83fdf
-0fffff9f
-07ffff1f
-03fffc1f
-00fff81f
-003fc000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-14
-/g437 [42 0 6 -37 36 1 ] 
-/g437 [30 38 true [1 0 0 1 -6 37 ]  0 0]
-[<fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0001fc
-fe0003fc
-7e0007fc
-7e000ffc
-7f001ffc
-3f803f7c
-3fe0fe7c
-1ffffc7c
-0ffff87c
-07fff07c
-03ffc07c
-007f0000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-15
-/g367 [18 0 6 -54 12 0 ] 
-/g367 [6 54 true [1 0 0 1 -6 54 ]  0 0]
-[<fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
->
- ]
-/TT3784Db00 AddT3T32Char
-
-16
-/g396 [28 0 6 -38 26 0 ] 
-/g396 [20 38 true [1 0 0 1 -6 38 ]  0 0]
-[<000fc0
-f83ff0
-f87ff0
-f8fff0
-f9fff0
-f9fff0
-fbf070
-ffe000
-ffc000
-ff8000
-ff0000
-ff0000
-fe0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-1627 161 M <0A>S 
-1658 161 M <0B>S  1686 161 M <0C>S  1721 161 M <07>S  1754 161 M <0D>S  1789 161 M <0E>S  1824 161 M <0F>S  1839 161 M <07>S  1872 161 M <10>S  
-7 Lw N 1627 170 M 1895 170 I : 0.648 0.77 +S K 
-; N 315 794 M 315 1503 I 389 1503 I 389 794 I 315 794 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 389 1503 M 389 794 I 315 794 I 315 1503 I 389 1503 I C 
-: 0.648 0.77 +S K 
-; N 1723 617 M 1159 617 I : 0.648 0.77 +S K 
-; N 1094 617 M 1126 595 I 1126 639 I 1094 617 I C 
-1126 595 M 1094 617 I 1126 595 I C 
- O 10 Lw N 1094 617 M 1126 595 I 1126 639 I 1094 617 I : 0.648 0.77 +S K 
-; N 1126 595 M 1094 617 I : 0.648 0.77 +S K 
-; 6 Lw N 1126 617 M 1178 617 I : 0.648 0.77 +S K 
-; N 1195 501 M 1195 595 I 1607 595 I 1607 501 I 1195 501 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-17
-/g349 [18 0 5 -52 13 0 ] 
-/g349 [8 52 true [1 0 0 1 -5 52 ]  0 0]
-[<7e
-ff
-ff
-ff
-ff
-ff
-ff
-7e
-00
-00
-00
-00
-00
-00
-00
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
->
- ]
-/TT3784Db00 AddT3T32Char
-
-18
-/g448 [36 0 1 -37 34 0 ] 
-/g448 [33 37 true [1 0 0 1 -1 37 ]  0 0]
-[<fe00001f80
-fe00001f80
-7e00003f80
-7f00003f80
-7f00003f00
-3f80007f00
-3f80007f00
-3f80007e00
-1fc000fe00
-1fc000fe00
-1fc000fc00
-0fe001fc00
-0fe001f800
-0fe001f800
-07f003f800
-07f003f000
-03f003f000
-03f807f000
-03f807e000
-01f807e000
-01fc0fe000
-01fc0fc000
-00fc0fc000
-00fe1f8000
-00fe1f8000
-007e1f8000
-007f3f0000
-007f3f0000
-003f3f0000
-003ffe0000
-001ffe0000
-001ffe0000
-001ffc0000
-000ffc0000
-000ffc0000
-000ff80000
-0007f00000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-19
-/g87 [41 0 7 -50 38 0 ] 
-/g87 [31 50 true [1 0 0 1 -7 50 ]  0 0]
-[<7fffe000
-fffffe00
-ffffff80
-ffffffc0
-ffffffe0
-fe003ff0
-fe000ff8
-fe0007f8
-fe0003fc
-fe0001fc
-fe0001fe
-fe0000fe
-fe0000fe
-fe0000fe
-fe0000fe
-fe0000fe
-fe0000fe
-fe0000fe
-fe0000fe
-fe0001fc
-fe0001fc
-fe0003fc
-fe0003f8
-fe0007f8
-fe001ff0
-fe007fe0
-ffffffc0
-ffffff80
-ffffff00
-fffffc00
-ffffc000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
-fe000000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-20
-/g455 [36 0 1 -37 34 14 ] 
-/g455 [33 51 true [1 0 0 1 -1 37 ]  0 0]
-[<7e00001f80
-fe00001f80
-7f00003f80
-7f00003f80
-7f00003f00
-3f80007f00
-3f80007f00
-3f80007e00
-1fc000fe00
-1fc000fe00
-0fc000fc00
-0fe001fc00
-0fe001fc00
-07f001f800
-07f003f800
-07f003f000
-03f803f000
-03f807f000
-01f807e000
-01fc07e000
-01fc0fe000
-00fc0fc000
-00fe0fc000
-00fe1fc000
-007e1f8000
-007f1f8000
-003f3f0000
-003f3f0000
-003fbf0000
-001ffe0000
-001ffe0000
-001ffe0000
-000ffc0000
-000ffc0000
-0007fc0000
-0007f80000
-0007f80000
-0003f80000
-0007f00000
-0007f00000
-0007e00000
-000fe00000
-000fe00000
-001fc00000
-001fc00000
-001fc00000
-003f800000
-003f800000
-003f800000
-007f000000
-007e000000
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-1195 571 M <04>S 
-1231 571 M <07>S  1264 571 M <0B>S  1292 571 M <07>S  1325 571 M <11>S  1340 571 M <12>S  1370 571 M <07>S  1403 571 M <13>S  1437 571 M <0C>S  1472 571 M <14>S  1502 571 M <13>S  1537 571 M <0D>S  1572 571 M <0E>S  
-N 1019 617 M 1019 794 I 1094 794 I 1094 617 I 1019 617 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1094 794 M 1094 617 I 1019 617 I 1019 794 I 1094 794 I C 
-: 0.648 0.77 +S K 
-; N 35 988 M 35 1337 I 739 1337 I 739 988 I 35 988 I C 
- O N 35 1337 M 739 1337 I 739 988 I 35 988 I 35 1337 I : 0.648 0.77 +S K 
-; N 12 960 M 12 1309 I 716 1309 I 716 960 I 12 960 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 12 1309 M 716 1309 I 716 960 I 12 960 I 12 1309 I C 
-: 0.648 0.77 +S K 
-; /TT3784Eb00
-[59 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 59 div 0 0 -1 59 div 0 0 ]
-/__TT3784Eb00
-GreNewFont
-T32RsrcBegin
-
-1
-/g68 [50 0 5 -37 46 0 ] 
-/g68 [41 37 true [1 0 0 1 -5 37 ]  0 0]
-[<7f0000003f00
-ff8000007f80
-ff800000ff80
-ffc00000ff80
-ffc00001ff80
-fbe00001ef80
-fbe00003ef80
-fbe00003ef80
-f9f00003cf80
-f9f00007cf80
-f8f800078f80
-f8f8000f8f80
-f8f8000f0f80
-f87c001f0f80
-f87c001f0f80
-f83e001e0f80
-f83e003e0f80
-f83f003c0f80
-f81f007c0f80
-f81f007c0f80
-f80f80f80f80
-f80f80f80f80
-f80fc0f00f80
-f807c1f00f80
-f807c1f00f80
-f803e3e00f80
-f803e3e00f80
-f803f3c00f80
-f801f7c00f80
-f801f7c00f80
-f800ff800f80
-f800ff800f80
-f800ff000f80
-f8007f000f80
-f8007e000f80
-f8003e000f80
-f8003e000f80
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-2
-/g381 [31 0 3 -28 29 1 ] 
-/g381 [26 29 true [1 0 0 1 -3 28 ]  0 0]
-[<007f8000
-01fff000
-07fff800
-0ffffe00
-1fc0fe00
-3f003f00
-3e001f80
-7e000f80
-7c000f80
-7c000fc0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-fc000f80
-7c000f80
-7c001f80
-7e001f00
-3f003f00
-1fc0fe00
-1ffffc00
-0ffff800
-03ffe000
-007f8000
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-3
-/g448 [27 0 1 -27 26 0 ] 
-/g448 [25 27 true [1 0 0 1 -1 27 ]  0 0]
-[<78000f80
-7c000f80
-7c000f80
-7c001f00
-3e001f00
-3e001f00
-3f003e00
-1f003e00
-1f003e00
-0f807c00
-0f807c00
-0f807800
-07c0f800
-07c0f800
-07c0f000
-03e1f000
-03e1f000
-03e1e000
-01f3e000
-01f3c000
-00f3c000
-00ffc000
-00ff8000
-007f8000
-007f8000
-007f0000
-003f0000
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-4
-/g286 [29 0 3 -28 27 1 ] 
-/g286 [24 29 true [1 0 0 1 -3 28 ]  0 0]
-[<007f00
-03ffe0
-07fff0
-0ffff8
-1f81fc
-3f007e
-3e003e
-7c003e
-78001f
-78001f
-f8001f
-ffffff
-ffffff
-ffffff
-fffffe
-f80000
-f80000
-f80000
-f80000
-fc0000
-7c0000
-7c0000
-7e0000
-3f0006
-1fc03e
-1ffffe
-07fffe
-03fff8
-007fc0
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-5
-/g3 [13 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-6
-/g90 [32 0 5 -37 30 0 ] 
-/g90 [25 37 true [1 0 0 1 -5 37 ]  0 0]
-[<7ffe0000
-ffffc000
-fffff000
-fffff800
-f803fc00
-f800fc00
-f8007e00
-f8003e00
-f8003e00
-f8003e00
-f8003e00
-f8003e00
-f8007e00
-f8007c00
-f800fc00
-f803f800
-fffff000
-ffffc000
-ffff0000
-ffff8000
-f81fc000
-f807e000
-f803f000
-f801f000
-f801f800
-f800f800
-f800f800
-f8007c00
-f8007c00
-f8007e00
-f8003e00
-f8003e00
-f8003f00
-f8001f00
-f8001f80
-f8000f80
-f8000f80
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-7
-/g62 [25 0 5 -37 24 0 ] 
-/g62 [19 37 true [1 0 0 1 -5 37 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-ffffe0
-ffffe0
-ffffe0
-7fffe0
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-8
-/g18 [31 0 3 -38 29 1 ] 
-/g18 [26 39 true [1 0 0 1 -3 38 ]  0 0]
-[<000fe000
-007ffc00
-01ffff00
-03ffff80
-07f81fc0
-0fe007c0
-0f8001c0
-1f0000c0
-3f000000
-3e000000
-3e000000
-7c000000
-7c000000
-7c000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-fc000000
-7c000000
-7c000000
-7c000000
-3e000000
-3e000000
-3f0000c0
-1f8001c0
-0fc007c0
-0ff01fc0
-07ffff80
-01ffff00
-00fffc00
-001fe000
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-9
-/g87 [30 0 5 -37 28 0 ] 
-/g87 [23 37 true [1 0 0 1 -5 37 ]  0 0]
-[<7ffe00
-ffffc0
-ffffe0
-fffff0
-f803f8
-f801fc
-f8007c
-f8007e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8007e
-f8007c
-f800fc
-f801f8
-f807f8
-fffff0
-ffffc0
-ffff80
-fffc00
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-10
-/g24 [36 0 5 -37 34 0 ] 
-/g24 [29 37 true [1 0 0 1 -5 37 ]  0 0]
-[<7fff0000
-ffffe000
-fffff800
-fffffe00
-f801ff00
-f8003f80
-f8001fc0
-f8000fc0
-f80007e0
-f80003e0
-f80003f0
-f80001f0
-f80001f0
-f80001f8
-f80000f8
-f80000f8
-f80000f8
-f80000f8
-f80000f8
-f80000f8
-f80000f8
-f80000f8
-f80000f8
-f80001f8
-f80001f0
-f80001f0
-f80001f0
-f80003e0
-f80007e0
-f80007c0
-f8001fc0
-f8003f80
-f801ff00
-fffffe00
-fffff800
-ffffe000
-7fff0000
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-11
-/g104 [38 0 5 -37 33 1 ] 
-/g104 [28 38 true [1 0 0 1 -5 37 ]  0 0]
-[<f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-fc0003e0
-7c0003e0
-7e0007e0
-3f0007c0
-3f801fc0
-1fe07f80
-0fffff00
-07fffe00
-01fff800
-007fc000
->
- ]
-/TT3784Eb00 AddT3T32Char
-T32RsrcEnd
-F /F1 0 /0 F /TT3784Eb00 mF 
-/F1S3B F1 [59.375 0 0 -59.375 0 0 ] mFS
-F1S3B Ji 
-213 1117 M <01>S 
-256 1117 M <02>S  282 1117 M <03>S  305 1117 M <04>S  330 1117 M <05>S  341 1117 M <06>S  368 1117 M <07>S  389 1117 M <08>S  415 1117 M <05>S  426 1117 M <09>S  452 1117 M <0A>S  483 1117 M <0B>S  
-T32RsrcBegin
-
-12
-/g410 [20 0 1 -34 18 1 ] 
-/g410 [17 35 true [1 0 0 1 -1 34 ]  0 0]
-[<07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-ffff80
-ffff80
-ffff80
-ffff80
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07e000
-03e080
-03ff80
-03ff80
-01ff80
-007f00
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-13
-/g346 [31 0 4 -40 27 0 ] 
-/g346 [23 40 true [1 0 0 1 -4 40 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f81f80
-f8ffe0
-f9fff0
-fbfff8
-ffc1fc
-ff00fc
-fe007c
-fc007e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
->
- ]
-/TT3784Eb00 AddT3T32Char
-T32RsrcEnd
-77 1188 M <0C>S 
-93 1188 M <02>S  119 1188 M <05>S  130 1188 M <0C>S  147 1188 M <0D>S  173 1188 M <04>S  198 1188 M <05>S  
-/TT3784Fb00
-[59 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 59 div 0 0 -1 59 div 0 0 ]
-/__TT3784Fb00
-GreNewFont
-T32RsrcBegin
-
-1
-/g90 [32 0 2 -37 31 0 ] 
-/g90 [29 37 true [1 0 0 1 -2 37 ]  0 0]
-[<00fffe00
-01ffff80
-01ffffe0
-01fffff0
-03e00ff0
-03e003f8
-03e001f8
-03e001f8
-03e001f8
-07c001f8
-07c001f8
-07c003f0
-07c003f0
-07c007e0
-0f800fe0
-0f807fc0
-0fffff00
-0ffffe00
-0ffff000
-1ffff800
-1f01fc00
-1f007e00
-1f003e00
-1f003e00
-3e001f00
-3e001f00
-3e001f00
-3e001f00
-3e001f00
-7c000f00
-7c000f80
-7c000f80
-7c000f80
-7c000f80
-f8000780
-f80007c0
-f80007c0
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-2
-/g286 [28 0 2 -28 26 1 ] 
-/g286 [24 29 true [1 0 0 1 -2 28 ]  0 0]
-[<001fe0
-007ff8
-01fffc
-03fffe
-07f07f
-0fc03f
-0f801f
-1f001f
-1f001f
-3e003f
-3e007e
-7c03fe
-7ffffc
-7ffff0
-ffffc0
-fffe00
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-fc0000
-7c0030
-7f01f0
-3ffff0
-3fffe0
-0fffc0
-03fe00
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-3
-/g410 [20 0 3 -34 20 1 ] 
-/g410 [17 35 true [1 0 0 1 -3 34 ]  0 0]
-[<03e000
-03e000
-03c000
-03c000
-07c000
-07c000
-07c000
-7fff80
-ffff80
-ffff80
-ffff00
-0f8000
-0f0000
-0f0000
-1f0000
-1f0000
-1f0000
-1e0000
-1e0000
-3e0000
-3e0000
-3e0000
-3e0000
-3c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7e1000
-7ff000
-3ff000
-3fe000
-0fc000
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-4
-/g396 [20 0 2 -28 22 0 ] 
-/g396 [20 28 true [1 0 0 1 -2 28 ]  0 0]
-[<0003e0
-078ff0
-079ff0
-07bff0
-0ffc20
-0f7000
-0fe000
-0fe000
-0fc000
-1f8000
-1f8000
-1f0000
-1f0000
-1e0000
-3e0000
-3e0000
-3e0000
-3e0000
-3c0000
-3c0000
-7c0000
-7c0000
-7c0000
-780000
-780000
-f80000
-f80000
-f80000
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-5
-/g258 [30 0 2 -28 28 1 ] 
-/g258 [26 29 true [1 0 0 1 -2 28 ]  0 0]
-[<001f8000
-00ffe3c0
-01fff3c0
-03fffbc0
-07f0ff80
-0fc03f80
-0f801f80
-1f001f80
-1f000f80
-3e000f00
-3e000f00
-7c001f00
-7c001f00
-7c001f00
-7c001e00
-f8003e00
-f8003e00
-f8003e00
-f8007e00
-f8007e00
-f800fc00
-f801fc00
-fc03fc00
-fc07bc00
-7e0fbc00
-7fff7800
-3ffe7800
-1ff87800
-07e00000
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-6
-/g374 [30 0 2 -28 27 0 ] 
-/g374 [25 28 true [1 0 0 1 -2 28 ]  0 0]
-[<0001f800
-0787fe00
-078fff00
-07bfff80
-0f7e1f80
-0f780f80
-0ff00f80
-0fe00f80
-0fc00f80
-1f800f80
-1f800f80
-1f000f80
-1f000f80
-1e000f00
-3e001f00
-3e001f00
-3e001f00
-3e001f00
-3c001e00
-3c003e00
-7c003e00
-7c003e00
-7c003e00
-78003c00
-78003c00
-f8007c00
-f8007c00
-f8007c00
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-7
-/g400 [23 0 0 -28 21 1 ] 
-/g400 [21 29 true [1 0 0 1 0 28 ]  0 0]
-[<001fc0
-00fff8
-01fff8
-03fff8
-07f078
-07c018
-0f8000
-0f8000
-0f8000
-0f8000
-0fc000
-0fe000
-07f800
-03fe00
-01ff80
-007fc0
-001fc0
-000fe0
-0007e0
-0003e0
-0003e0
-0003e0
-0007e0
-4007c0
-f81fc0
-ffff80
-ffff00
-7ffc00
-0ff000
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-8
-/g373 [47 0 2 -28 43 0 ] 
-/g373 [41 28 true [1 0 0 1 -2 28 ]  0 0]
-[<0001f800fc00
-0787fe03fe00
-078fff0fff00
-07bfff1fff80
-0f7e1fbe1f80
-0f780fbc0f80
-0ff00ff80f80
-0fe00ff00f80
-0fc00fe00f80
-1f800fc00f80
-1f800fc00f80
-1f000f800f80
-1f000f800f80
-1e000f000f00
-3e001f001f00
-3e001f001f00
-3e001f001f00
-3e001f001f00
-3c001e001e00
-3c003e003e00
-7c003e003e00
-7c003e003e00
-7c003e003e00
-78003c003c00
-78003c003c00
-f8007c007c00
-f8007c007c00
-f8007c007c00
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-9
-/g349 [14 0 2 -38 14 0 ] 
-/g349 [12 38 true [1 0 0 1 -2 38 ]  0 0]
-[<01f0
-03f0
-03f0
-03f0
-03f0
-03e0
-0000
-0000
-0000
-0000
-0000
-07c0
-07c0
-0780
-0f80
-0f80
-0f80
-0f80
-0f00
-1f00
-1f00
-1f00
-1f00
-1e00
-3e00
-3e00
-3e00
-3e00
-3c00
-3c00
-7c00
-7c00
-7c00
-7800
-7800
-f800
-f800
-f800
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-10
-/g381 [30 0 2 -28 28 1 ] 
-/g381 [26 29 true [1 0 0 1 -2 28 ]  0 0]
-[<000ff000
-007ffc00
-01fffe00
-03ffff00
-07f03f80
-0fc00f80
-0f800fc0
-1f0007c0
-3f0007c0
-3e0007c0
-3e0007c0
-7c0007c0
-7c0007c0
-7c0007c0
-f80007c0
-f8000f80
-f8000f80
-f8000f80
-f8001f80
-f8001f00
-f8003f00
-f8003e00
-fc007c00
-7e00fc00
-7f03f800
-3ffff000
-1fffe000
-0fff8000
-03fc0000
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-11
-/g3 [13 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-12
-/g17 [32 0 3 -37 30 0 ] 
-/g17 [27 37 true [1 0 0 1 -3 37 ]  0 0]
-[<00fff800
-01ffff00
-01ffff80
-01ffffc0
-03e00fe0
-03e007e0
-03e003e0
-03e003e0
-03c003e0
-07c003e0
-07c003e0
-07c007c0
-078007c0
-07800f80
-0f801f00
-0f807e00
-0ffffc00
-0ffff800
-0ffffe00
-1fffff00
-1e003f80
-1e000f80
-1e000fc0
-3e0007c0
-3e0007c0
-3e0007c0
-3c0007c0
-3c0007c0
-7c000f80
-7c000f80
-7c001f00
-7c003f00
-7800fe00
-fffffc00
-fffff800
-ffffe000
-ffff0000
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-13
-/g437 [30 0 4 -27 29 1 ] 
-/g437 [25 28 true [1 0 0 1 -4 27 ]  0 0]
-[<1f000f80
-1f000f80
-1e000f00
-3e000f00
-3e001f00
-3e001f00
-3e001f00
-3c001e00
-3c001e00
-7c003e00
-7c003e00
-7c003e00
-7c003c00
-78003c00
-f8007c00
-f8007c00
-f800fc00
-f800fc00
-f001f800
-f001f800
-f003f800
-f807f800
-f80ff800
-fc3ef000
-fffcf000
-7ff8f000
-3fe1f000
-1f800000
->
- ]
-/TT3784Fb00 AddT3T32Char
-
-14
-/g296 [18 0 -6 -41 23 11 ] 
-/g296 [29 52 true [1 0 0 1 6 41 ]  0 0]
-[<000003f0
-00000ff8
-00003ff8
-00003ff8
-00007e10
-0000fc00
-0000f800
-0000f800
-0001f800
-0001f000
-0001f000
-0001f000
-0001f000
-0003f000
-003fff80
-007fff80
-007fff80
-007fff00
-0007e000
-0007c000
-0007c000
-0007c000
-0007c000
-000fc000
-000f8000
-000f8000
-000f8000
-000f8000
-001f8000
-001f8000
-001f0000
-001f0000
-001f0000
-001f0000
-003f0000
-003e0000
-003e0000
-003e0000
-003e0000
-007e0000
-007c0000
-007c0000
-007c0000
-007c0000
-00f80000
-00f80000
-01f80000
-03f00000
-fff00000
-ffe00000
-ff800000
-fe000000
->
- ]
-/TT3784Fb00 AddT3T32Char
-T32RsrcEnd
-F /F2 0 /0 F /TT3784Fb00 mF 
-/F2S3B F2 [59.375 0 0 -59.375 0 0 ] mFS
-F2S3B Ji 
-210 1188 M <01>S 
-237 1188 M <02>S  261 1188 M <03>S  278 1188 M <04>S  295 1188 M <05>S  320 1188 M <06>S  345 1188 M <07>S  365 1188 M <08>S  404 1188 M <09>S  416 1188 M <07>S  435 1188 M <07>S  455 1188 M <09>S  466 1188 M <0A>S  492 1188 M <06>S  517 1188 M <0B>S  528 1188 M <0C>S  555 1188 M <0D>S 
-581 1188 M <0E>S  595 1188 M <0E>S  610 1188 M <02>S  634 1188 M <04>S  
-N 389 1503 M 954 1503 I : 0.648 0.77 +S K 
-; N 1019 1503 M 987 1525 I 987 1481 I 1019 1503 I C 
-987 1525 M 1019 1503 I 987 1525 I C 
- O 10 Lw N 1019 1503 M 987 1525 I 987 1481 I 1019 1503 I : 0.648 0.77 +S K 
-; N 987 1525 M 1019 1503 I : 0.648 0.77 +S K 
-; 6 Lw N 987 1503 M 935 1503 I : 0.648 0.77 +S K 
-; N 341 1351 M 341 1446 I 1068 1446 I 1068 1351 I 341 1351 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-21
-/g100 [39 0 1 -50 38 0 ] 
-/g100 [37 50 true [1 0 0 1 -1 50 ]  0 0]
-[<fffffffff8
-fffffffff8
-fffffffff8
-fffffffff8
-fffffffff8
-fffffffff8
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-22
-/g258 [38 0 4 -38 33 1 ] 
-/g258 [29 39 true [1 0 0 1 -4 38 ]  0 0]
-[<003ff000
-01fffe00
-0fffff80
-1fffffc0
-3fffffe0
-3fe01fe0
-3f0007f0
-3c0003f0
-380003f8
-000001f8
-000001f8
-000001f8
-000001f8
-000001f8
-000001f8
-000001f8
-000ffff8
-00fffff8
-03fffff8
-0ffffff8
-1ffffff8
-3ff801f8
-7fc001f8
-7f8001f8
-ff0001f8
-fe0001f8
-fe0001f8
-fe0001f8
-fe0001f8
-fe0003f8
-fe0007f8
-ff000ff8
-7f801ff8
-7fe07ff8
-3ffffef8
-1ffff8f8
-0ffff0f8
-07ffc0f8
-00ff0000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-23
-/g374 [42 0 6 -38 36 0 ] 
-/g374 [30 38 true [1 0 0 1 -6 38 ]  0 0]
-[<0003f800
-f80fff00
-f83fff80
-f87fffc0
-f8ffffe0
-f9fc1ff0
-fbf007f0
-ffc003f8
-ff8001f8
-ff0001f8
-fe0001fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
->
- ]
-/TT3784Db00 AddT3T32Char
-
-24
-/g400 [31 0 3 -38 28 1 ] 
-/g400 [25 39 true [1 0 0 1 -3 38 ]  0 0]
-[<007fc000
-01fff000
-07fffc00
-0ffffe00
-1ffffe00
-3fc07e00
-3f801e00
-7f000600
-7e000000
-7e000000
-7e000000
-7e000000
-7f000000
-7f000000
-3fc00000
-3ff00000
-1ffc0000
-0fff0000
-07ffe000
-01fff800
-007ffc00
-001ffe00
-0003ff00
-0000ff00
-00007f80
-00003f80
-00001f80
-00001f80
-00001f80
-00001f80
-00001f80
-c0003f00
-f8007f00
-fe01fe00
-fffffe00
-fffffc00
-7ffff800
-1fffe000
-03ff0000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-25
-/g373 [63 0 6 -38 58 0 ] 
-/g373 [52 38 true [1 0 0 1 -6 38 ]  0 0]
-[<0003f80007f000
-f81ffe003ffc00
-f83fff807fff00
-f87fffc0ffff80
-f8ffffc1ffff80
-f9f81fe3f03fc0
-fbe00ff7c01fe0
-ffc007ff800fe0
-ff8003ff0007e0
-ff0003fe0007e0
-fe0003fc0007f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
-fc0001f80003f0
->
- ]
-/TT3784Db00 AddT3T32Char
-
-26
-/g410 [26 0 1 -46 24 1 ] 
-/g410 [23 47 true [1 0 0 1 -1 46 ]  0 0]
-[<03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-fffffe
-fffffe
-fffffe
-fffffe
-fffffe
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f800
-01f800
-01fe0e
-01fffe
-00fffe
-007ffe
-003ffe
-000ff8
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-F0S4E Ji 
-341 1422 M <15>S 
-374 1422 M <10>S  397 1422 M <16>S  429 1422 M <17>S  464 1422 M <18>S  490 1422 M <19>S  543 1422 M <11>S  558 1422 M <1A>S  
-T32RsrcBegin
-
-27
-/g890 [39 0 0 9 40 14 ] 
-/g890 [40 5 true [1 0 0 1 0 -9 ]  0 0]
-[<ffffffffff
-ffffffffff
-ffffffffff
-ffffffffff
-ffffffffff
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-579 1422 M <1B>S 
-T32RsrcBegin
-
-28
-/g24 [49 0 7 -50 45 0 ] 
-/g24 [38 50 true [1 0 0 1 -7 50 ]  0 0]
-[<7ffff00000
-ffffff0000
-ffffffc000
-fffffff000
-fffffffc00
-fe001ffe00
-fe0003ff00
-fe0000ff80
-fe00007fc0
-fe00003fc0
-fe00001fe0
-fe00000fe0
-fe00000ff0
-fe000007f0
-fe000007f8
-fe000003f8
-fe000003f8
-fe000003f8
-fe000003fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000003fc
-fe000003f8
-fe000003f8
-fe000003f8
-fe000007f8
-fe000007f0
-fe000007f0
-fe00000ff0
-fe00001fe0
-fe00003fe0
-fe00007fc0
-fe0000ff80
-fe0003ff80
-fe001fff00
-fffffffe00
-fffffff800
-fffffff000
-ffffffc000
-ffffff0000
-7fffe00000
->
- ]
-/TT3784Db00 AddT3T32Char
-
-29
-/g104 [51 0 7 -50 45 1 ] 
-/g104 [38 51 true [1 0 0 1 -7 50 ]  0 0]
-[<fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-fe000001fc
-ff000003fc
-ff000003f8
-7f000003f8
-7f800007f8
-7f800007f0
-3fc0000ff0
-3fe0001fe0
-1ff8007fe0
-0ffe01ffc0
-0fffffff80
-07ffffff00
-01fffffe00
-00fffff800
-003fffe000
-0003ff0000
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-612 1422 M <13>S 
-647 1422 M <1C>S  688 1422 M <1D>S  730 1422 M <03>S  
-T32RsrcBegin
-
-30
-/g894 [24 0 5 -55 19 13 ] 
-/g894 [14 68 true [1 0 0 1 -5 55 ]  0 0]
-[<007c
-00fc
-00fc
-01f8
-01f8
-03f0
-03f0
-07e0
-07e0
-07e0
-0fc0
-0fc0
-0fc0
-1fc0
-1f80
-1f80
-3f80
-3f80
-3f00
-3f00
-7f00
-7f00
-7f00
-7e00
-7e00
-7e00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-7e00
-7e00
-7e00
-7f00
-7f00
-7f00
-3f00
-3f00
-3f80
-3f80
-1f80
-1f80
-1fc0
-1fc0
-0fc0
-0fe0
-07e0
-07e0
-07f0
-03f0
-03f0
-01f8
-01f8
-00fc
-00fc
-007c
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-745 1422 M <1E>S 
-765 1422 M <1C>S 
-806 1422 M <01>S  844 1422 M <15>S  876 1422 M <01>S  915 1422 M <03>S  930 1422 M <13>S  964 1422 M <1C>S  1005 1422 M <1D>S  
-T32RsrcBegin
-
-31
-/g895 [24 0 5 -55 19 13 ] 
-/g895 [14 68 true [1 0 0 1 -5 55 ]  0 0]
-[<f800
-fc00
-7c00
-7e00
-7e00
-3f00
-3f00
-1f80
-1f80
-1f80
-0fc0
-0fc0
-0fc0
-07e0
-07e0
-07e0
-07f0
-03f0
-03f0
-03f0
-03f8
-03f8
-03f8
-01f8
-01f8
-01f8
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01f8
-01f8
-01f8
-03f8
-03f8
-03f8
-03f0
-03f0
-07f0
-07f0
-07e0
-07e0
-0fe0
-0fe0
-0fc0
-0fc0
-1f80
-1f80
-1f80
-3f00
-3f00
-7e00
-7e00
-7c00
-fc00
-f800
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-1048 1422 M <1F>S 
-N 1019 794 M 455 794 I : 0.648 0.77 +S K 
-; N 389 794 M 421 772 I 421 816 I 389 794 I C 
-421 772 M 389 794 I 421 772 I C 
- O 10 Lw N 389 794 M 421 772 I 421 816 I 389 794 I : 0.648 0.77 +S K 
-; N 421 772 M 389 794 I : 0.648 0.77 +S K 
-; 6 Lw N 421 794 M 473 794 I : 0.648 0.77 +S K 
-; N 328 678 M 328 772 I 1081 772 I 1081 678 I 328 678 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 328 749 M <04>S 
-363 749 M <07>S  396 749 M <0B>S  424 749 M <07>S  457 749 M <11>S  472 749 M <12>S  502 749 M <07>S  
-536 749 M <1B>S 
-569 749 M <13>S 
-603 749 M <1C>S  644 749 M <1D>S  687 749 M <03>S  
-701 749 M <1E>S 
-721 749 M <0A>S 
-752 749 M <15>S  784 749 M <01>S  823 749 M <15>S  855 749 M <1D>S  898 749 M <0A>S  928 749 M <03>S  943 749 M <13>S  978 749 M <1C>S  1018 749 M <1D>S  
-1061 749 M <1F>S 
-N 2348 440 M 1864 440 I : 0.648 0.77 +S K 
-; N 1798 440 M 1830 417 I 1830 461 I 1798 440 I C 
-1830 417 M 1798 440 I 1830 417 I C 
- O 10 Lw N 1798 440 M 1830 417 I 1830 461 I 1798 440 I : 0.648 0.77 +S K 
-; N 1830 417 M 1798 440 I : 0.648 0.77 +S K 
-; 6 Lw N 1830 440 M 1882 440 I : 0.648 0.77 +S K 
-; N 1843 323 M 1843 417 I 2288 417 I 2288 323 I 1843 323 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1843 394 M <13>S 
-1877 394 M <0C>S  1912 394 M <14>S  1942 394 M <13>S  1976 394 M <0D>S  2011 394 M <0E>S  2047 394 M <04>S  2082 394 M <07>S  2115 394 M <0B>S  2143 394 M <07>S  2176 394 M <11>S  2191 394 M <12>S  2221 394 M <07>S  2254 394 M <0D>S  
-1 Lw solid N 2346 2080 M 2346 2047 I 2347 2045 I 2348 2044 I 2349 2045 I 2350 2047 I 2350 2080 I 2349 2081 I 2348 2082 I 2347 2081 I 2346 2080 I 2346 2080 I C 
-2346 2024 M 2346 1990 I 2347 1989 I 2348 1988 I 2349 1989 I 2350 1990 I 2350 2024 I 2349 2025 I 2348 2026 I 2347 2025 I 2346 2024 I 2346 2024 I C 
-2346 1967 M 2346 1933 I 2347 1932 I 2348 1931 I 2349 1932 I 2350 1933 I 2350 1967 I 2349 1968 I 2348 1969 I 2347 1968 I 2346 1967 I 2346 1967 I C 
-2346 1909 M 2346 1876 I 2347 1875 I 2348 1874 I 2349 1875 I 2350 1876 I 2350 1909 I 2349 1912 I 2348 1912 I 2347 1912 I 2346 1909 I 2346 1909 I C 
-2346 1853 M 2346 1820 I 2347 1818 I 2348 1818 I 2349 1818 I 2350 1820 I 2350 1853 I 2349 1855 I 2348 1856 I 2347 1855 I 2346 1853 I 2346 1853 I C 
-2346 1796 M 2346 1763 I 2347 1761 I 2348 1761 I 2349 1761 I 2350 1763 I 2350 1796 I 2349 1798 I 2348 1798 I 2347 1798 I 2346 1796 I 2346 1796 I C 
-2346 1740 M 2346 1707 I 2347 1705 I 2348 1704 I 2349 1705 I 2350 1707 I 2350 1740 I 2349 1741 I 2348 1742 I 2347 1741 I 2346 1740 I 2346 1740 I C 
-2346 1683 M 2346 1650 I 2347 1648 I 2348 1647 I 2349 1648 I 2350 1650 I 2350 1683 I 2349 1684 I 2348 1685 I 2347 1684 I 2346 1683 I 2346 1683 I C 
-2346 1626 M 2346 1593 I 2347 1591 I 2348 1591 I 2349 1591 I 2350 1593 I 2350 1626 I 2349 1628 I 2348 1629 I 2347 1628 I 2346 1626 I 2346 1626 I C 
-2346 1569 M 2346 1536 I 2347 1535 I 2348 1534 I 2349 1535 I 2350 1536 I 2350 1569 I 2349 1571 I 2348 1572 I 2347 1571 I 2346 1569 I 2346 1569 I C 
-2346 1512 M 2346 1479 I 2347 1478 I 2348 1477 I 2349 1478 I 2350 1479 I 2350 1512 I 2349 1515 I 2348 1515 I 2347 1515 I 2346 1512 I 2346 1512 I C 
-2346 1456 M 2346 1423 I 2347 1421 I 2348 1421 I 2349 1421 I 2350 1423 I 2350 1456 I 2349 1458 I 2348 1458 I 2347 1458 I 2346 1456 I 2346 1456 I C 
-2346 1399 M 2346 1366 I 2347 1364 I 2348 1363 I 2349 1364 I 2350 1366 I 2350 1399 I 2349 1401 I 2348 1401 I 2347 1401 I 2346 1399 I 2346 1399 I C 
-2346 1343 M 2346 1310 I 2347 1308 I 2348 1307 I 2349 1308 I 2350 1310 I 2350 1343 I 2349 1344 I 2348 1345 I 2347 1344 I 2346 1343 I 2346 1343 I C 
-2346 1286 M 2346 1252 I 2347 1251 I 2348 1250 I 2349 1251 I 2350 1252 I 2350 1286 I 2349 1287 I 2348 1288 I 2347 1287 I 2346 1286 I 2346 1286 I C 
-2346 1229 M 2346 1196 I 2347 1194 I 2348 1194 I 2349 1194 I 2350 1196 I 2350 1229 I 2349 1231 I 2348 1232 I 2347 1231 I 2346 1229 I 2346 1229 I C 
-2346 1172 M 2346 1139 I 2347 1138 I 2348 1137 I 2349 1138 I 2350 1139 I 2350 1172 I 2349 1174 I 2348 1175 I 2347 1174 I 2346 1172 I 2346 1172 I C 
-2346 1115 M 2346 1082 I 2347 1080 I 2348 1080 I 2349 1080 I 2350 1082 I 2350 1115 I 2349 1117 I 2348 1117 I 2347 1117 I 2346 1115 I 2346 1115 I C 
-2346 1059 M 2346 1026 I 2347 1024 I 2348 1023 I 2349 1024 I 2350 1026 I 2350 1059 I 2349 1060 I 2348 1061 I 2347 1060 I 2346 1059 I 2346 1059 I C 
-2346 1002 M 2346 969 I 2347 967 I 2348 966 I 2349 967 I 2350 969 I 2350 1002 I 2349 1003 I 2348 1004 I 2347 1003 I 2346 1002 I 2346 1002 I C 
-2346 946 M 2346 912 I 2347 911 I 2348 910 I 2349 911 I 2350 912 I 2350 946 I 2349 947 I 2348 948 I 2347 947 I 2346 946 I 2346 946 I C 
-2346 888 M 2346 855 I 2347 854 I 2348 853 I 2349 854 I 2350 855 I 2350 888 I 2349 890 I 2348 891 I 2347 890 I 2346 888 I 2346 888 I C 
-2346 832 M 2346 799 I 2347 797 I 2348 797 I 2349 797 I 2350 799 I 2350 832 I 2349 834 I 2348 834 I 2347 834 I 2346 832 I 2346 832 I C 
-2346 775 M 2346 742 I 2347 740 I 2348 740 I 2349 740 I 2350 742 I 2350 775 I 2349 777 I 2348 777 I 2347 777 I 2346 775 I 2346 775 I C 
-2346 718 M 2346 685 I 2347 683 I 2348 683 I 2349 683 I 2350 685 I 2350 718 I 2349 720 I 2348 720 I 2347 720 I 2346 718 I 2346 718 I C 
-2346 662 M 2346 629 I 2347 627 I 2348 626 I 2349 627 I 2350 629 I 2350 662 I 2349 663 I 2348 664 I 2347 663 I 2346 662 I 2346 662 I C 
-2346 605 M 2346 571 I 2347 570 I 2348 569 I 2349 570 I 2350 571 I 2350 605 I 2349 606 I 2348 607 I 2347 606 I 2346 605 I 2346 605 I C 
-2346 548 M 2346 515 I 2347 514 I 2348 513 I 2349 514 I 2350 515 I 2350 548 I 2349 550 I 2348 551 I 2347 550 I 2346 548 I 2346 548 I C 
-2346 491 M 2346 458 I 2347 457 I 2348 456 I 2349 457 I 2350 458 I 2350 491 I 2349 493 I 2348 494 I 2347 493 I 2346 491 I 2346 491 I C 
-2346 435 M 2346 402 I 2347 400 I 2348 400 I 2349 400 I 2350 402 I 2350 435 I 2349 437 I 2348 437 I 2347 437 I 2346 435 I 2346 435 I C 
-2346 378 M 2346 345 I 2347 343 I 2348 342 I 2349 343 I 2350 345 I 2350 378 I 2349 379 I 2348 380 I 2347 379 I 2346 378 I 2346 378 I C 
-2346 321 M 2346 288 I 2347 286 I 2348 285 I 2349 286 I 2350 288 I 2350 321 I 2349 323 I 2348 323 I 2347 323 I 2346 321 I 2346 321 I C 
-2346 265 M 2346 262 I 2347 261 I 2348 260 I 2349 261 I 2350 262 I 2350 265 I 2349 266 I 2348 267 I 2347 266 I 2346 265 I 2346 265 I C 
-:  L ; K 
-N 2125 13 M 2125 262 I 2571 262 I 2571 13 I 2125 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 2125 262 M 2571 262 I 2571 13 I 2125 13 I 2125 262 I C 
-: 0.648 0.77 +S K 
-; T32RsrcBegin
-
-32
-/g44 [49 0 7 -50 43 0 ] 
-/g44 [36 50 true [1 0 0 1 -7 50 ]  0 0]
-[<fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fffffffff0
-fffffffff0
-fffffffff0
-fffffffff0
-fffffffff0
-fffffffff0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
-fe000007f0
->
- ]
-/TT3784Db00 AddT3T32Char
-
-33
-/g122 [39 0 1 -50 38 0 ] 
-/g122 [37 50 true [1 0 0 1 -1 50 ]  0 0]
-[<fe000003f0
-ff000007f8
-7f000007f0
-7f800007f0
-3f80000fe0
-3fc0000fe0
-1fc0001fc0
-1fe0001fc0
-0fe0003f80
-0ff0003f80
-07f0007f00
-07f8007f00
-03f800fe00
-03fc00fe00
-01fc01fc00
-01fe01fc00
-00fe03f800
-00ff03f800
-007f07f000
-007f07f000
-003f8fe000
-003f8fe000
-001fdfc000
-001fdfc000
-000fff8000
-000fff8000
-0007ff0000
-0007ff0000
-0003fe0000
-0003fe0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
-0001fc0000
->
- ]
-/TT3784Db00 AddT3T32Char
-T32RsrcEnd
-2231 161 M <07>S 
-2264 161 M <08>S  2307 161 M <09>S  2343 161 M <03>S  2358 161 M <13>S  2392 161 M ( )S  2434 161 M (!)S  
-7 Lw N 2231 170 M 2466 170 I : 0.648 0.77 +S K 
-; N 1723 440 M 1723 617 I 1798 617 I 1798 440 I 1723 440 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 1798 617 M 1798 440 I 1723 440 I 1723 617 I 1798 617 I C 
-: 0.648 0.77 +S K 
-; N 2413 569 M 2648 569 I 2648 569 I 2657 568 I 2666 567 I 2674 565 I 2682 561 I 2690 557 I 2697 551 I 2704 545 I 2710 538 I 2716 531 I 2721 523 I 2726 514 I 2729 505 I 2732 496 I 2734 486 I 2735 475 I 2736 464 I 2736 464 I 2735 454 I 2734 443 I 2732 433 I 2729 424 I 2726 415 I 2721 406 I 2716 398 I 2710 390 I 2704 384 I 2697 378 I 2690 373 I 2682 368 I 2674 365 I 2666 362 I 2657 360 I 2648 360 I 2648 359 I 2413 359 I 2413 360 I 2404 360 I 2395 362 I 2387 365 I 2379 368 I 2371 373 I 2364 378 I 2357 384 I 2351 390 I 2345 398 I 2340 406 I 2336 415 I 2332 424 I 2329 433 I 2327 443 I 2325 454 I 2325 464 I 2325 475 I 2327 486 I 2329 496 I 2332 505 I 2336 514 I 2340 523 I 2345 531 I 2351 538 I 2357 545 I 2364 551 I 2371 557 I 2379 561 I 2387 565 I 2395 567 I 2404 568 I 2413 569 I 2413 569 I C 
- O 7 Lw N 2413 569 M 2648 569 I 2648 569 I 2657 568 I 2666 567 I 2674 565 I 2682 561 I 2690 557 I 2697 551 I 2704 545 I 2710 538 I 2716 531 I 2721 523 I 2726 514 I 2729 505 I 2732 496 I 2734 486 I 2735 475 I 2736 464 I 2736 464 I 2735 454 I 2734 443 I 2732 433 I 2729 424 I 2726 415 I 2721 406 I 2716 398 I 2710 390 I 2704 384 I 2697 378 I 2690 373 I 2682 368 I 2674 365 I 2666 362 I 2657 360 I 2648 360 I 2648 359 I 2413 359 I 2413 360 I 2404 360 I 2395 362 I 2387 365 I 2379 368 I 2371 373 I 2364 378 I 2357 384 I 2351 390 I 2345 398 I 2340 406 I 2336 415 I 2332 424 I 2329 433 I 2327 443 I 2325 454 I 2325 464 I 2325 475 I 2327 486 I 2329 496 I 2332 505 I 2336 514 I 2340 523 I 2345 531 I 2351 538 I 2357 545 I 2364 551 I 2371 557 I 2379 561 I 2387 565 I 2395 567 I 2404 568 I 2413 569 I : 0.648 0.77 +S K 
-; N 2390 541 M 2624 541 I 2624 541 I 2634 541 I 2642 539 I 2650 537 I 2659 533 I 2667 529 I 2674 524 I 2680 517 I 2687 511 I 2693 504 I 2697 495 I 2702 487 I 2706 477 I 2709 468 I 2711 458 I 2712 447 I 2713 437 I 2713 437 I 2712 426 I 2711 416 I 2709 406 I 2706 396 I 2702 386 I 2697 378 I 2693 370 I 2687 362 I 2680 356 I 2674 350 I 2667 345 I 2659 340 I 2650 337 I 2642 334 I 2634 332 I 2624 332 I 2624 332 I 2390 332 I 2390 332 I 2381 332 I 2372 334 I 2364 337 I 2355 340 I 2347 345 I 2340 350 I 2333 356 I 2327 362 I 2322 370 I 2316 378 I 2312 386 I 2309 396 I 2305 406 I 2303 416 I 2302 426 I 2301 437 I 2302 447 I 2303 458 I 2305 468 I 2309 477 I 2312 487 I 2316 495 I 2322 504 I 2327 511 I 2333 517 I 2340 524 I 2347 529 I 2355 533 I 2364 537 I 2372 539 I 2381 541 I 2390 541 I 2390 541 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 2390 541 M 2624 541 I 2624 541 I 2634 541 I 2642 539 I 2650 537 I 2659 533 I 2667 529 I 2674 524 I 2680 517 I 2687 511 I 2693 504 I 2697 495 I 2702 487 I 2706 477 I 2709 468 I 2711 458 I 2712 447 I 2713 437 I 2713 437 I 2712 426 I 2711 416 I 2709 406 I 2706 396 I 2702 386 I 2697 378 I 2693 370 I 2687 362 I 2680 356 I 2674 350 I 2667 345 I 2659 340 I 2650 337 I 2642 334 I 2634 332 I 2624 332 I 2624 332 I 2390 332 I 2390 332 I 2381 332 I 2372 334 I 2364 337 I 2355 340 I 2347 345 I 2340 350 I 2333 356 I 2327 362 I 2322 370 I 2316 378 I 2312 386 I 2309 396 I 2305 406 I 2303 416 I 2302 426 I 2301 437 I 2302 447 I 2303 458 I 2305 468 I 2309 477 I 2312 487 I 2316 495 I 2322 504 I 2327 511 I 2333 517 I 2340 524 I 2347 529 I 2355 533 I 2364 537 I 2372 539 I 2381 541 I 2390 541 I 2390 541 I : 0.648 0.77 +S K 
-; T32RsrcBegin
-
-14
-/g272 [25 0 3 -28 23 1 ] 
-/g272 [20 29 true [1 0 0 1 -3 28 ]  0 0]
-[<00fe00
-03ffc0
-0fffe0
-1ffff0
-1f81f0
-3f0070
-3e0030
-7c0000
-7c0000
-7c0000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-fc0000
-7c0000
-7c0000
-7e0030
-3f0070
-3f81f0
-1ffff0
-0fffe0
-07ffc0
-00fe00
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-15
-/g349 [14 0 3 -38 9 0 ] 
-/g349 [6 38 true [1 0 0 1 -3 38 ]  0 0]
-[<78
-fc
-fc
-fc
-fc
-78
-00
-00
-00
-00
-00
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
->
- ]
-/TT3784Eb00 AddT3T32Char
-T32RsrcEnd
-F1S3B Ji 
-2429 419 M <06>S 
-2456 419 M <04>S  2480 419 M <0E>S  2501 419 M <04>S  2526 419 M <0F>S  2538 419 M <03>S  2560 419 M <04>S  
-T32RsrcBegin
-
-16
-/g94 [27 0 2 -38 25 1 ] 
-/g94 [23 39 true [1 0 0 1 -2 38 ]  0 0]
-[<00ff00
-03ffe0
-0ffff0
-1ffff8
-1f81f8
-3f0038
-3e0018
-7c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7e0000
-3f0000
-3f8000
-1fe000
-1ff800
-0ffe00
-03ff80
-01ffe0
-007ff0
-001ff8
-0003fc
-0001fc
-0000fc
-00007e
-00003e
-00003e
-00003e
-00003e
-00003e
-00007c
-c0007c
-f000fc
-fe03f8
-fffff0
-7fffe0
-1fff80
-03fc00
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-17
-/g100 [29 0 1 -37 28 0 ] 
-/g100 [27 37 true [1 0 0 1 -1 37 ]  0 0]
-[<ffffffe0
-ffffffe0
-ffffffe0
-ffffffe0
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
->
- ]
-/TT3784Eb00 AddT3T32Char
-
-18
-/g4 [34 0 1 -37 33 0 ] 
-/g4 [32 37 true [1 0 0 1 -1 37 ]  0 0]
-[<0007e000
-0007f000
-000ff000
-000ff000
-001ff800
-001ff800
-001ef800
-003e7c00
-003e7c00
-003c7c00
-007c3e00
-00783e00
-00781f00
-00f81f00
-00f01f00
-01f00f80
-01f00f80
-01e00f80
-03e007c0
-03e007c0
-03c007e0
-07c003e0
-07c003e0
-07fffff0
-0ffffff0
-0ffffff0
-1ffffff8
-1f0000f8
-1f0000f8
-3e00007c
-3e00007c
-3e00007e
-7c00003e
-7c00003e
-fc00003f
-f800001f
-f800001f
->
- ]
-/TT3784Eb00 AddT3T32Char
-T32RsrcEnd
-2380 490 M <10>S 
-2403 490 M <11>S  2427 490 M <12>S  2455 490 M <11>S  2479 490 M <0B>S  2511 490 M <10>S  2534 490 M <05>S  2545 490 M <09>S  2571 490 M <0A>S  2601 490 M <0B>S  
-N 1019 1503 M 1019 1680 I 1094 1680 I 1094 1503 I 1019 1503 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 1094 1680 M 1094 1503 I 1019 1503 I 1019 1680 I 1094 1680 I C 
-: 0.648 0.77 +S K 
-; N 1094 1680 M 2283 1680 I : 0.648 0.77 +S K 
-; N 2348 1680 M 2316 1703 I 2316 1658 I 2348 1680 I C 
-2316 1703 M 2348 1680 I 2316 1703 I C 
- O 10 Lw N 2348 1680 M 2316 1703 I 2316 1658 I 2348 1680 I : 0.648 0.77 +S K 
-; N 2316 1703 M 2348 1680 I : 0.648 0.77 +S K 
-; 6 Lw N 2316 1680 M 2264 1680 I : 0.648 0.77 +S K 
-; N 1544 1529 M 1544 1623 I 1898 1623 I 1898 1529 I 1544 1529 I C 
-1 1 1 1 scol  O 0 0 0 1 scol F0S4E Ji 
-1544 1599 M <0A>S 
-1575 1599 M <07>S  1608 1599 M <17>S  1643 1599 M <0D>S  1678 1599 M <02>S  1735 1599 M <16>S  1766 1599 M <0B>S  1794 1599 M <13>S  1829 1599 M <0D>S  1864 1599 M <0E>S  
-LH
-%%PageTrailer
-
-%%Trailer
-%%DocumentNeededResources: 
-%%DocumentSuppliedResources: 
-%%+ procset Pscript_WinNT_VMErrorHandler 5.0 0
-%%+ procset Pscript_FatalError 5.0 0
-%%+ procset Pscript_Win_Basic 5.0 0
-%%+ procset Pscript_Win_Utils_L1 5.0 0
-%%+ procset Pscript_Win_GdiObject 5.0 0
-%%+ procset Pscript_Win_GdiObject_L1 5.0 0
-%%+ procset Pscript_T3Hdr 5.0 0
-%%+ procset Pscript_Text 5.0 0
-Pscript_WinNT_Incr dup /terminate get exec
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-data-retx-ul.dia ns-3.22/src/lte/doc/source/figures/lte-rlc-data-retx-ul.dia
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-data-retx-ul.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-data-retx-ul.dia	2015-02-05 15:46:23.000000000 -0800
@@ -0,0 +1,13 @@
+     ]r8}W*F8SNdw*q]DܡIE~6H&";TUR TFo&Q L&4Jfï'3_޿y?Y\ܽ;^OGG$y8&AGh`iŧAgu2<gYzLeEI&oϋhѳ~}³,&]_rW<&J~O,ZͱQ2{x[ic_U/l%8xmB0bcx15jw_xp~UY嫐giARug>	b4uj1(?6(?~`ۮ̝et=q6<];OD,F%yguS[ZC[05:fMMOfGrm/Lb]@]-L?Bq$n=&I<HA6|L}@?Zv:r1Fp-_UC9;[pA2{ %C1PB#Mkqxy:IdcxR/ӼEpb86E^ƉH ͰlffF	R 2/
+u\-"GiL!hK!D#/8"%B[H)c>I${Z,bQr,rHD*X)}I,:Dՠ+rť'	;aNޚ@c@_v> 1'"Ke3]!R:)rJ-jOk"?M* <;Ȯy~BTMGiV_IHCD;疸56{ˮIxR(YrV-Je+n!Ջߋ8$(#ޱ>Imilp7)>ç?
+0^B
+5ʷ@Zd/P/Pdڃ9 Ug`>C6>}Ӈ^|SAI$%3gp ByJ15/ =TEtga҄JYdhYv"VJH(cDfT#fȓ4INdZ̨<+n\y6LLSUlK1.[5qDBgXk8Lf籥E8@CCVW\ 
+jHanj:KE؊H
+V+V
+݉V{fk<+
+fiiyOWHW}jU
+s$bиg+*"tƊh
+`xk<*,tz4]g."	#%8_XikG.hZm$Ȗ,h cC
+_F /:k)1aڵ%F[ٵc< ZXٮOkv][օm`:b{5{$J4z$"BO~ga2kzEa*ϱ5Z{W._x$	g}r9UzV	RREEF#\zOuL+<6x'zdYz9z>,ά{M<-%WS_$RY (W>y	e>/0^FR{OnM̖.Z=_˗*wbN,o]:iy-I
+1C˕b!.}nR=KD;|bC2~}vt!q-24PwTOz%)]R6nz*͡0.;fjƅsH8o2)q%H2\V٧2\f+Ѵhmo%R.@qqMg^w;;V2j-ԺZXq'pUjpT% 	H3HKC!K𝈓W(?뷯 ޣQiR߭.D zRhP^}$ʭ*ėR<5~'at/G}kW^}S_ճqxl:vU+9eF͏^嚻uٌ9'T(Ց	WƯgၴVr"Zʄr͹ձn'#*D4O`]מN>P4֑йr%!x(1v/̈́{!?5	-ܙ:zŊ2vn7*UָV{Pmv*<FnZW-MQU^jř{J{8n2*2kWѭ˽o㺝ۭ򸐊*-Jٺ㣚+p#վ/*c^q4B\`^4\cQXR)P@3r"iˣsF%%kN"R0bTZHWZП3LGh`i]h81z	W%[5Wdm}JoBw
+vz}]=3;%1@xh=hx]򋰗7^^̙.dNF{{29˂ѹa ThƊ{;P[Bo9y݆p  
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-data-retx-ul.eps ns-3.22/src/lte/doc/source/figures/lte-rlc-data-retx-ul.eps
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-data-retx-ul.eps	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-data-retx-ul.eps	1969-12-31 16:00:00.000000000 -0800
@@ -1,3292 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: 
-%%Creator: PScript5.dll Version 5.2.2
-%%CreationDate: 10/27/2011 11:56:10
-%%For: mrequena
-%%BoundingBox: 0 0 259 286
-%%Pages: 1
-%%Orientation: Portrait
-%%PageOrder: Ascend
-%%DocumentNeededResources: (atend)
-%%DocumentSuppliedResources: (atend)
-%%DocumentData: Clean7Bit
-%%TargetDevice: () (52.3) 320
-%%LanguageLevel: 1
-%%EndComments
-
-%%BeginDefaults
-%%PageBoundingBox: 0 0 259 286
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-
-%%BeginProlog
-%%BeginResource: file Pscript_WinNT_VMErrorHandler 5.0 0
-/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
-setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
-ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
-def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
-rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
-/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
-typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
-def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
-exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
-/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
-{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
-readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
-(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
-/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
-tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
-xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
-tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
-{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
-tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
-rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
-forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
-/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
-$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
-ne{grestoreall}if initgraphics courier setfont lmargin 720 moveto errorname
-(VMerror)eq{version cvi 2016 ge{userdict/ehsave known{clear userdict/ehsave get
-restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}if}if systemdict
-/showpage get exec(%%[ Error: )print errorname =print(; OffendingCommand: )
-print/command load =print( ]%%)= flush}if end end end}dup 0 systemdict put dup
-4 $brkpage put bind readonly put/currentpacking where{pop/setpacking where{pop
-oldpack setpacking}if}if
-%%EndResource
-%%BeginProcSet: Pscript_Res_Emul 5.0 0
-/defineresource where{pop}{userdict begin/defineresource{userdict/Resources 2
-copy known{get begin}{15 dict dup begin put}ifelse exch readonly exch
-currentdict 1 index known not{dup 30 dict def}if load 3 -1 roll 2 index put
-end}bind readonly def/findresource{userdict/Resources get exch get exch get}
-bind readonly def/resourceforall{pop pop pop pop}bind readonly def
-/resourcestatus{userdict/Resources 2 copy known{get exch 2 copy known{get exch
-known{0 -1 true}{false}ifelse}{pop pop pop false}ifelse}{pop pop pop pop false}
-ifelse}bind readonly def end}ifelse
-%%EndProcSet
-userdict /Pscript_WinNT_Incr 230 dict dup begin put
-%%BeginResource: file Pscript_FatalError 5.0 0
-userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup
-length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding
-{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end
-/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div
-cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end
-%%EndResource
-userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[
-(La impresora no tiene suficiente memoria disponible para este trabajo.)100 500
-(Realice una de las siguientes operaciones e intente imprimir de nuevo:)100 485
-(Escoja "Optimizar para portabilidad" como formato de salida.)115 470
-(En el panel Configuracin de dispositivo, compruebe que "Memoria PostScript disponible" tiene el valor correcto.)
-115 455(Reduzca el nmero de fuentes del documento.)115 440
-(Imprima el documento por partes.)115 425 12/Times-Roman showpage
-(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end
-version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse
-%%BeginResource: file Pscript_Win_Basic 5.0 0
-/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
-/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
-/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
-d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
-/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
-/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
-/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
-, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop
-languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,
-d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld
-/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix
-currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit
-counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b
-/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~
-d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put
-/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq
-{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `
-/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped
-{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}
-{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~
-itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5
-ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform
-nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -
-neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0
-- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool
-2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e
-{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
-/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont
-{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1
-dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d
-E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1
-^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2
-16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}
-bind d
-%%EndResource
-%%BeginResource: file Pscript_Win_Utils_L1 5.0 0
-/rf{N rp L}b/fx{1 1 dtransform @ 0 ge{1 sub 1}{1 add -0.25}? 3 -1 $ @ 0 ge{1
-sub 1}{1 add -0.25}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
-snap + +S fx rf}b/rs{N rp C K}b/rc{N rp clip N}b/UtilsInit{}b/setcolorspace{!}b
-/scol{[/setgray/setrgbcolor/setcolor/setcmykcolor/setcolor/setgray]~ get cvx
-exec}b/colspRefresh{}b/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo
-{/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d
-/AddFontInfoEnd{E d}bind d
-%%EndResource
-end
-%%EndProlog
-
-%%BeginSetup
-[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
-1 setlinecap 1 setlinejoin
-/mysetup [ 72 600 V 0 0 -72 600 V 0 286.29922 ] def 
-%%EndSetup
-
-%%Page: 1 1
-%%PageBoundingBox: 0 0 259 286
-%%EndPageComments
-%%BeginPageSetup
-/DeviceRGB dup setcolorspace /colspABC exch def
-mysetup concat colspRefresh
-%%EndPageSetup
-
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Win_GdiObject 5.0 0
-/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
-{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
-/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
-L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
-1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
-/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
-{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
-gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
-/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
-MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
-M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
-+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
-/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
-GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
-/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
-makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
-/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $
-/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt
-~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0
-0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b
-/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +
-: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~
-XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S
-GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix
-currentmatrix readonly d ; ;}if}b
-%%EndResource
-%%BeginResource: file Pscript_Win_GdiObject_L1 5.0 0
-/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 2 d/RepsV 6 d/RepsH 5 d
-/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d
-/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d
-/SetBGndFGnd{}b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx PaintData
-imagemask Width 0 +}repeat E}b E d/GDIpattfill{@ ` BGnd null ne PaintType 2 eq
-and{: BGnd aload ! scol fEOFill{O}{L}? ; FGnd aload ! U/iCol 2 ^ put @ 0 eq{!
-2}{@ 1 eq ~ 2 eq or{4}{5}?}? -1 $}if E @ patterncalc : 4 ^/PaintType get 2 eq
-{iCol 0 eq{6 -1 $}if iCol 1 eq iCol 2 eq or{8 -3 $}if iCol 3 eq iCol 4 eq or{9
--4 $}if iCol scol}if fEOFill{eoclip}{clip}? N patternfill ; N}b/hbf
-{GDIpattfill}b/hfMain{/fEOFill ~ d ~/iCol ~ d GDIpattfill}b/hf{: hfMain ;}b
-/mpstr 1 string d/mp{~ @ length 12 add dict copy `/PatternCTM matrix
-currentmatrix d/PatternMatrix ~ d/PatWidth XStep mpstr length mul d/PatHeight
-YStep d/FontType 3 d/Encoding 256 array d 3 string 0 1 255{Encoding ~ @ 3 ^ cvs
-cvn put}for !/FontMatrix matrix d/FontBBox BBox d/BuildChar{! @ ` XStep 0
-FontBBox aload ! setcachedevice/PaintProc , E : exec ;}b & E ~ @ 3 -1 $
-definefont}b/build_pattern{: GDIBWPatternDict ` Width Height E dsnap +S
-/GDIBWPatternMx matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix
-GDIBWPatternDict @ ` xOrg yOrg E matrix + mp CTMrestore}b/patterncalc{` :
-PatternCTM setmatrix PatternMatrix concat BBox aload ! ! ! + pathbbox ;
-PatHeight V ceiling 4 1 $ PatWidth V ceiling 4 1 $ PatHeight V floor 4 1 $
-PatWidth V floor 4 1 $ 2 ^ sub cvi abs ~ 3 ^ sub cvi abs ~ 4 2 $ PatHeight mul
-~ PatWidth mul ~ E}b/patternfill{5 -1 $ @ ` Ji PatternCTM setmatrix
-PatternMatrix concat 0 2 ^ 2 ^ M 0 1 mpstr length 1 sub{1 ^ mpstr 3 1 $ put}for
-! 2 ^{currentpoint 5 ^{mpstr S}repeat YStep add M}repeat ! ! ! ! E}b/pbf{: 14
-dict `/fGray ~ d/fEOFill ~ d/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d
-/Height ~ d/Width ~ d/mx xOrg yOrg matrix + d fGray{/PaintProc{` Width Height
-OutputBPP mx PaintData image E}b}{/PaintProc{` Width Height 8 mx PaintData F
-OutputBPP 8 idiv colorimage E}b}? pathbbox fEOFill{eoclip}{clip}?/Top ~ d/Right
-~ d/Bottom ~ d/Left ~ d Top Height neg Bottom 1 sub{Left Width Right 1 sub{1 ^
-2 copy + & PaintProc neg ~ neg ~ +}bind for !}bind for E ;}b
-%%EndResource
-end reinitialize
-0 0 0 1 scol N 350 2373 M 350 2341 I 351 2339 I 352 2339 I 353 2339 I 354 2341 I 354 2373 I 353 2375 I 352 2375 I 351 2375 I 350 2373 I 350 2373 I C 
-350 2318 M 350 2286 I 351 2284 I 352 2283 I 353 2284 I 354 2286 I 354 2318 I 353 2320 I 352 2320 I 351 2320 I 350 2318 I 350 2318 I C 
-350 2262 M 350 2230 I 351 2228 I 352 2228 I 353 2228 I 354 2230 I 354 2262 I 353 2264 I 352 2265 I 351 2264 I 350 2262 I 350 2262 I C 
-350 2206 M 350 2174 I 351 2173 I 352 2172 I 353 2173 I 354 2174 I 354 2206 I 353 2209 I 352 2209 I 351 2209 I 350 2206 I 350 2206 I C 
-350 2151 M 350 2119 I 351 2117 I 352 2117 I 353 2117 I 354 2119 I 354 2151 I 353 2153 I 352 2154 I 351 2153 I 350 2151 I 350 2151 I C 
-350 2096 M 350 2063 I 351 2062 I 352 2061 I 353 2062 I 354 2063 I 354 2096 I 353 2097 I 352 2098 I 351 2097 I 350 2096 I 350 2096 I C 
-350 2041 M 350 2008 I 351 2007 I 352 2006 I 353 2007 I 354 2008 I 354 2041 I 353 2042 I 352 2043 I 351 2042 I 350 2041 I 350 2041 I C 
-350 1985 M 350 1952 I 351 1951 I 352 1950 I 353 1951 I 354 1952 I 354 1985 I 353 1986 I 352 1987 I 351 1986 I 350 1985 I 350 1985 I C 
-350 1930 M 350 1897 I 351 1895 I 352 1895 I 353 1895 I 354 1897 I 354 1930 I 353 1931 I 352 1932 I 351 1931 I 350 1930 I 350 1930 I C 
-350 1874 M 350 1841 I 351 1840 I 352 1839 I 353 1840 I 354 1841 I 354 1874 I 353 1875 I 352 1876 I 351 1875 I 350 1874 I 350 1874 I C 
-350 1818 M 350 1786 I 351 1784 I 352 1783 I 353 1784 I 354 1786 I 354 1818 I 353 1820 I 352 1820 I 351 1820 I 350 1818 I 350 1818 I C 
-350 1763 M 350 1731 I 351 1729 I 352 1728 I 353 1729 I 354 1731 I 354 1763 I 353 1764 I 352 1765 I 351 1764 I 350 1763 I 350 1763 I C 
-350 1707 M 350 1675 I 351 1673 I 352 1672 I 353 1673 I 354 1675 I 354 1707 I 353 1709 I 352 1709 I 351 1709 I 350 1707 I 350 1707 I C 
-350 1652 M 350 1620 I 351 1618 I 352 1617 I 353 1618 I 354 1620 I 354 1652 I 353 1654 I 352 1654 I 351 1654 I 350 1652 I 350 1652 I C 
-350 1596 M 350 1564 I 351 1562 I 352 1562 I 353 1562 I 354 1564 I 354 1596 I 353 1598 I 352 1598 I 351 1598 I 350 1596 I 350 1596 I C 
-350 1541 M 350 1509 I 351 1506 I 352 1506 I 353 1506 I 354 1509 I 354 1541 I 353 1543 I 352 1543 I 351 1543 I 350 1541 I 350 1541 I C 
-350 1485 M 350 1453 I 351 1451 I 352 1451 I 353 1451 I 354 1453 I 354 1485 I 353 1487 I 352 1488 I 351 1487 I 350 1485 I 350 1485 I C 
-350 1430 M 350 1397 I 351 1396 I 352 1395 I 353 1396 I 354 1397 I 354 1430 I 353 1432 I 352 1432 I 351 1432 I 350 1430 I 350 1430 I C 
-350 1374 M 350 1342 I 351 1341 I 352 1340 I 353 1341 I 354 1342 I 354 1374 I 353 1376 I 352 1377 I 351 1376 I 350 1374 I 350 1374 I C 
-350 1319 M 350 1286 I 351 1285 I 352 1284 I 353 1285 I 354 1286 I 354 1319 I 353 1320 I 352 1321 I 351 1320 I 350 1319 I 350 1319 I C 
-350 1264 M 350 1231 I 351 1230 I 352 1229 I 353 1230 I 354 1231 I 354 1264 I 353 1265 I 352 1266 I 351 1265 I 350 1264 I 350 1264 I C 
-350 1208 M 350 1175 I 351 1174 I 352 1173 I 353 1174 I 354 1175 I 354 1208 I 353 1209 I 352 1210 I 351 1209 I 350 1208 I 350 1208 I C 
-350 1153 M 350 1120 I 351 1118 I 352 1118 I 353 1118 I 354 1120 I 354 1153 I 353 1154 I 352 1155 I 351 1154 I 350 1153 I 350 1153 I C 
-350 1097 M 350 1064 I 351 1063 I 352 1062 I 353 1063 I 354 1064 I 354 1097 I 353 1098 I 352 1099 I 351 1098 I 350 1097 I 350 1097 I C 
-350 1041 M 350 1009 I 351 1007 I 352 1006 I 353 1007 I 354 1009 I 354 1041 I 353 1043 I 352 1043 I 351 1043 I 350 1041 I 350 1041 I C 
-350 986 M 350 954 I 351 952 I 352 951 I 353 952 I 354 954 I 354 986 I 353 987 I 352 988 I 351 987 I 350 986 I 350 986 I C 
-350 930 M 350 898 I 351 896 I 352 895 I 353 896 I 354 898 I 354 930 I 353 932 I 352 932 I 351 932 I 350 930 I 350 930 I C 
-350 875 M 350 843 I 351 841 I 352 840 I 353 841 I 354 843 I 354 875 I 353 877 I 352 877 I 351 877 I 350 875 I 350 875 I C 
-350 819 M 350 787 I 351 785 I 352 785 I 353 785 I 354 787 I 354 819 I 353 821 I 352 822 I 351 821 I 350 819 I 350 819 I C 
-350 764 M 350 732 I 351 729 I 352 729 I 353 729 I 354 732 I 354 764 I 353 766 I 352 766 I 351 766 I 350 764 I 350 764 I C 
-350 708 M 350 676 I 351 674 I 352 674 I 353 674 I 354 676 I 354 708 I 353 710 I 352 711 I 351 710 I 350 708 I 350 708 I C 
-350 653 M 350 620 I 351 619 I 352 618 I 353 619 I 354 620 I 354 653 I 353 655 I 352 655 I 351 655 I 350 653 I 350 653 I C 
-350 597 M 350 565 I 351 564 I 352 563 I 353 564 I 354 565 I 354 597 I 353 599 I 352 600 I 351 599 I 350 597 I 350 597 I C 
-350 542 M 350 509 I 351 508 I 352 507 I 353 508 I 354 509 I 354 542 I 353 543 I 352 544 I 351 543 I 350 542 I 350 542 I C 
-350 487 M 350 454 I 351 453 I 352 452 I 353 453 I 354 454 I 354 487 I 353 488 I 352 489 I 351 488 I 350 487 I 350 487 I C 
-350 431 M 350 398 I 351 397 I 352 396 I 353 397 I 354 398 I 354 431 I 353 432 I 352 433 I 351 432 I 350 431 I 350 431 I C 
-350 376 M 350 343 I 351 341 I 352 341 I 353 341 I 354 343 I 354 376 I 353 377 I 352 378 I 351 377 I 350 376 I 350 376 I C 
-350 320 M 350 287 I 351 286 I 352 285 I 353 286 I 354 287 I 354 320 I 353 321 I 352 322 I 351 321 I 350 320 I 350 320 I C 
-350 264 M 350 257 I 351 255 I 352 254 I 353 255 I 354 257 I 354 264 I 353 266 I 352 266 I 351 266 I 350 264 I 350 264 I C 
-:  L ; K 
-N 129 13 M 129 257 I 575 257 I 575 13 I 129 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1 Lj 1 Lc 6 Lw solid N 129 257 M 575 257 I 575 13 I 129 13 I 129 257 I C 
-: 0.645 0.754 +S K 
-; Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_T3Hdr 5.0 0
-{version cvi 2016 ge{32/FontType resourcestatus{pop pop true}{false}ifelse}
-{false}ifelse}exec/Is2016andT32? exch def/T32DefSBCMap{/CIDInit/ProcSet
-findresource begin 10 dict begin begincmap/CIDSystemInfo 3 dict dup begin
-/Registry(Adobe)def/Ordering(Identity1)def/Supplement 0 def end def/CMapType 0
-def/WMode 0 def 1 begincodespacerange<00><ff>endcodespacerange 1 begincidrange
-<00><ff>0 endcidrange endcmap/DrvSBCMap currentdict/CMap defineresource pop end
-end}bind def Is2016andT32?{T32DefSBCMap}def/T32RsrcBegin{Is2016andT32?{
-/BitmapFontInit/ProcSet findresource begin}if}bind def/T32RsrcEnd{Is2016andT32?
-{end}if}bind def/AddT32Char{6 1 roll 0 get 7 1 roll pop pop 5 1 roll pop
-findfont/TT32R get addglyph}bind def/AddT3Char{findfont dup 5 2 roll 1 index
-length 0 gt{cvx 1 index exch 4 exch put dup(imagemask)cvx cvn 5 exch put cvx}
-{pop cvx}ifelse 3 -1 roll/CharProcs get 3 1 roll put dup/Encoding get 5 -1 roll
-4 index put/Metrics get 3 1 roll put}bind def/AddT3T32Char Is2016andT32?{
-/AddT32Char}{/AddT3Char}ifelse load def/GreNewFontT32{5 dict begin exch
-/FontMatrix exch def exch/FontBBox exch def exch pop exch pop/CIDFontType 4 def
-dup currentdict end/CIDFont defineresource 3 -1 roll dup/DrvSBCMap dup/CMap
-resourcestatus{pop pop}{T32DefSBCMap}ifelse 5 -1 roll[exch]composefont dup
-length dict copy dup/FID undef begin exch/TT32R exch def currentdict end
-definefont/BitmapFontInit/ProcSet findresource begin/TT32R get[14 0 0 0 0 0]<>0
-4 -1 roll addglyph end}bind def/GreNewFontT3{11 dict begin pop/FontType 3 def
-/FontMatrix exch def/FontBBox exch def/Encoding exch def/CharProcs 257 dict def
-CharProcs/.notdef{}put/Metrics 257 dict def Metrics/.notdef 3 -1 roll put
-AddFontInfoBegin AddFontInfo AddFontInfoEnd/BuildChar{userdict begin/char exch
-def dup/charname exch/Encoding get char get def dup/Metrics get charname 2 copy
-known{get aload pop}{pop/.notdef get aload pop}ifelse setcachedevice begin
-Encoding char get CharProcs exch 2 copy known{get}{pop/.notdef get}ifelse end
-exec end}def currentdict end definefont pop}bind def/GreNewFont{Is2016andT32?
-{GreNewFontT32}{GreNewFontT3}ifelse}bind def/UDF3{Is2016andT32?{/BitmapFontInit
-/ProcSet findresource begin dup/CIDFont findresource removeall/CIDFont
-undefineresource undefinefont end}{pop UDF}ifelse}bind def
-%%EndResource
-end reinitialize
-/TT37859b00
-[76 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 76 div 0 0 -1 76 div 0 0 ]
-/__TT37859b00
-GreNewFont
-T32RsrcBegin
-
-1
-/g4 [45 0 1 -49 43 0 ] 
-/g4 [42 49 true [1 0 0 1 -1 49 ]  0 0]
-[<00003f800000
-00007fc00000
-00007fc00000
-0000ffc00000
-0000ffe00000
-0001ffe00000
-0001ffe00000
-0001fff00000
-0003f7f00000
-0003f3f00000
-0003f3f80000
-0007e1f80000
-0007e1fc0000
-0007e1fc0000
-000fc0fc0000
-000fc0fe0000
-000fc0fe0000
-001f807e0000
-001f807f0000
-003f807f0000
-003f003f0000
-003f003f8000
-007f003f8000
-007e001fc000
-007e001fc000
-00fc000fc000
-00fc000fe000
-00fc000fe000
-01f80007e000
-01f80007f000
-03f80007f000
-03fffffff000
-03fffffff800
-07fffffff800
-07fffffffc00
-07fffffffc00
-0fe00001fc00
-0fc00000fe00
-0fc00000fe00
-1fc00000fe00
-1f8000007f00
-3f8000007f00
-3f8000007f00
-3f0000003f80
-7f0000003f80
-7f0000003fc0
-7e0000001fc0
-fe0000001fc0
-7c0000000fc0
->
- ]
-/TT37859b00 AddT3T32Char
-
-2
-/g68 [66 0 6 -49 59 0 ] 
-/g68 [53 49 true [1 0 0 1 -6 49 ]  0 0]
-[<7f800000000ff0
-ffe00000001ff8
-ffe00000003ff8
-fff00000003ff8
-fff00000007ff8
-fff80000007ff8
-fdf8000000fdf8
-fdf8000000fdf8
-fdfc000000fdf8
-fcfc000001f9f8
-fcfe000001f9f8
-fc7e000003f1f8
-fc7e000003f1f8
-fc7f000003f1f8
-fc3f000007e1f8
-fc3f800007e1f8
-fc1f80000fc1f8
-fc1fc0000fc1f8
-fc1fc0001fc1f8
-fc0fc0001f81f8
-fc0fe0001f81f8
-fc07e0003f01f8
-fc07f0003f01f8
-fc07f0007e01f8
-fc03f0007e01f8
-fc03f800fe01f8
-fc01f800fc01f8
-fc01fc00fc01f8
-fc01fc01f801f8
-fc00fc01f801f8
-fc00fe03f801f8
-fc007e03f001f8
-fc007f03f001f8
-fc007f07e001f8
-fc003f87e001f8
-fc003f8fe001f8
-fc001f8fc001f8
-fc001fdfc001f8
-fc001fdf8001f8
-fc000fff8001f8
-fc000fff8001f8
-fc0007ff0001f8
-fc0007ff0001f8
-fc0007fe0001f8
-fc0003fe0001f8
-fc0003fc0001f8
-fc0001fc0001f8
-fc0001fc0001f8
-fc0000f80001f8
->
- ]
-/TT37859b00 AddT3T32Char
-
-3
-/g3 [17 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT37859b00 AddT3T32Char
-
-4
-/g90 [42 0 6 -49 39 0 ] 
-/g90 [33 49 true [1 0 0 1 -6 49 ]  0 0]
-[<7fffe00000
-fffffe0000
-ffffff8000
-ffffffc000
-ffffffe000
-fc007ff000
-fc000ff000
-fc0007f800
-fc0003f800
-fc0003fc00
-fc0001fc00
-fc0001fc00
-fc0001fc00
-fc0001fc00
-fc0001fc00
-fc0001fc00
-fc0001fc00
-fc0003f800
-fc0007f800
-fc0007f000
-fc001ff000
-fc007fe000
-ffffff8000
-ffffff0000
-fffffc0000
-fffff80000
-fffffc0000
-fc03fe0000
-fc00ff0000
-fc007f8000
-fc003fc000
-fc001fc000
-fc001fe000
-fc000fe000
-fc000fe000
-fc0007f000
-fc0007f000
-fc0003f800
-fc0003f800
-fc0003f800
-fc0001fc00
-fc0001fc00
-fc0000fe00
-fc0000fe00
-fc0000fe00
-fc00007f00
-fc00007f00
-fc00003f00
-fc00003f00
->
- ]
-/TT37859b00 AddT3T32Char
-
-5
-/g62 [32 0 6 -49 31 0 ] 
-/g62 [25 49 true [1 0 0 1 -6 49 ]  0 0]
-[<fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-7fffff80
->
- ]
-/TT37859b00 AddT3T32Char
-
-6
-/g18 [41 0 4 -50 39 1 ] 
-/g18 [35 51 true [1 0 0 1 -4 50 ]  0 0]
-[<0000ffc000
-0007fff800
-001ffffe00
-003fffff80
-00ffffffc0
-01ffffffe0
-03ffc07fe0
-07fe000fe0
-07fc0003e0
-0ff00001e0
-1fe0000060
-1fe0000000
-1fc0000000
-3fc0000000
-3f80000000
-7f80000000
-7f00000000
-7f00000000
-7f00000000
-7f00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-ff00000000
-7f00000000
-7f00000000
-7f00000000
-7f80000000
-3f80000000
-3fc0000000
-3fc0000000
-1fe0000060
-1ff00000e0
-0ff80003e0
-07fe000fe0
-07ff803fe0
-03ffffffe0
-01ffffffc0
-007fffff80
-003ffffe00
-000ffff800
-0000ff8000
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Text 5.0 0
-/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
-/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
-length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
-{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
-/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
-if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
-{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
-StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
-! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy
-put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM
-makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0
-Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N
-/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT
-{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d
-/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `
-/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d
-/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont
-Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1
-add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E
-/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $
-FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255
-idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector
-Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding
-length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2
-add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs
-putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^
-256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E
-/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~
-definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix
-makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ !
-findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?
-{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
-get undefinefont}forall undefinefont}b
-%%EndResource
-end reinitialize
-F /F0 0 /0 F /TT37859b00 mF 
-/F0S4D F0 [77.082 0 0 -77.082 0 0 ] mFS
-F0S4D Ji 
-247 158 M <01>S 
-285 158 M <02>S  342 158 M <03>S  357 158 M <04>S  392 158 M <05>S  420 158 M <06>S  
-7 Lw N 247 167 M 456 167 I : 0.645 0.754 +S K 
-; 1 Lw solid N 1758 2373 M 1758 2341 I 1759 2339 I 1760 2339 I 1762 2339 I 1762 2341 I 1762 2373 I 1762 2375 I 1760 2375 I 1759 2375 I 1758 2373 I 1758 2373 I C 
-1758 2318 M 1758 2286 I 1759 2284 I 1760 2283 I 1762 2284 I 1762 2286 I 1762 2318 I 1762 2320 I 1760 2320 I 1759 2320 I 1758 2318 I 1758 2318 I C 
-1758 2262 M 1758 2230 I 1759 2228 I 1760 2228 I 1762 2228 I 1762 2230 I 1762 2262 I 1762 2264 I 1760 2265 I 1759 2264 I 1758 2262 I 1758 2262 I C 
-1758 2206 M 1758 2174 I 1759 2173 I 1760 2172 I 1762 2173 I 1762 2174 I 1762 2206 I 1762 2209 I 1760 2209 I 1759 2209 I 1758 2206 I 1758 2206 I C 
-1758 2151 M 1758 2119 I 1759 2117 I 1760 2117 I 1762 2117 I 1762 2119 I 1762 2151 I 1762 2153 I 1760 2154 I 1759 2153 I 1758 2151 I 1758 2151 I C 
-1758 2096 M 1758 2063 I 1759 2062 I 1760 2061 I 1762 2062 I 1762 2063 I 1762 2096 I 1762 2097 I 1760 2098 I 1759 2097 I 1758 2096 I 1758 2096 I C 
-1758 2041 M 1758 2008 I 1759 2007 I 1760 2006 I 1762 2007 I 1762 2008 I 1762 2041 I 1762 2042 I 1760 2043 I 1759 2042 I 1758 2041 I 1758 2041 I C 
-1758 1985 M 1758 1952 I 1759 1951 I 1760 1950 I 1762 1951 I 1762 1952 I 1762 1985 I 1762 1986 I 1760 1987 I 1759 1986 I 1758 1985 I 1758 1985 I C 
-1758 1930 M 1758 1897 I 1759 1895 I 1760 1895 I 1762 1895 I 1762 1897 I 1762 1930 I 1762 1931 I 1760 1932 I 1759 1931 I 1758 1930 I 1758 1930 I C 
-1758 1874 M 1758 1841 I 1759 1840 I 1760 1839 I 1762 1840 I 1762 1841 I 1762 1874 I 1762 1875 I 1760 1876 I 1759 1875 I 1758 1874 I 1758 1874 I C 
-1758 1818 M 1758 1786 I 1759 1784 I 1760 1783 I 1762 1784 I 1762 1786 I 1762 1818 I 1762 1820 I 1760 1820 I 1759 1820 I 1758 1818 I 1758 1818 I C 
-1758 1763 M 1758 1731 I 1759 1729 I 1760 1728 I 1762 1729 I 1762 1731 I 1762 1763 I 1762 1764 I 1760 1765 I 1759 1764 I 1758 1763 I 1758 1763 I C 
-1758 1707 M 1758 1675 I 1759 1673 I 1760 1672 I 1762 1673 I 1762 1675 I 1762 1707 I 1762 1709 I 1760 1709 I 1759 1709 I 1758 1707 I 1758 1707 I C 
-1758 1652 M 1758 1620 I 1759 1618 I 1760 1617 I 1762 1618 I 1762 1620 I 1762 1652 I 1762 1654 I 1760 1654 I 1759 1654 I 1758 1652 I 1758 1652 I C 
-1758 1596 M 1758 1564 I 1759 1562 I 1760 1562 I 1762 1562 I 1762 1564 I 1762 1596 I 1762 1598 I 1760 1598 I 1759 1598 I 1758 1596 I 1758 1596 I C 
-1758 1541 M 1758 1509 I 1759 1506 I 1760 1506 I 1762 1506 I 1762 1509 I 1762 1541 I 1762 1543 I 1760 1543 I 1759 1543 I 1758 1541 I 1758 1541 I C 
-1758 1485 M 1758 1453 I 1759 1451 I 1760 1451 I 1762 1451 I 1762 1453 I 1762 1485 I 1762 1487 I 1760 1488 I 1759 1487 I 1758 1485 I 1758 1485 I C 
-1758 1430 M 1758 1397 I 1759 1396 I 1760 1395 I 1762 1396 I 1762 1397 I 1762 1430 I 1762 1432 I 1760 1432 I 1759 1432 I 1758 1430 I 1758 1430 I C 
-1758 1374 M 1758 1342 I 1759 1341 I 1760 1340 I 1762 1341 I 1762 1342 I 1762 1374 I 1762 1376 I 1760 1377 I 1759 1376 I 1758 1374 I 1758 1374 I C 
-1758 1319 M 1758 1286 I 1759 1285 I 1760 1284 I 1762 1285 I 1762 1286 I 1762 1319 I 1762 1320 I 1760 1321 I 1759 1320 I 1758 1319 I 1758 1319 I C 
-1758 1264 M 1758 1231 I 1759 1230 I 1760 1229 I 1762 1230 I 1762 1231 I 1762 1264 I 1762 1265 I 1760 1266 I 1759 1265 I 1758 1264 I 1758 1264 I C 
-1758 1208 M 1758 1175 I 1759 1174 I 1760 1173 I 1762 1174 I 1762 1175 I 1762 1208 I 1762 1209 I 1760 1210 I 1759 1209 I 1758 1208 I 1758 1208 I C 
-1758 1153 M 1758 1120 I 1759 1118 I 1760 1118 I 1762 1118 I 1762 1120 I 1762 1153 I 1762 1154 I 1760 1155 I 1759 1154 I 1758 1153 I 1758 1153 I C 
-1758 1097 M 1758 1064 I 1759 1063 I 1760 1062 I 1762 1063 I 1762 1064 I 1762 1097 I 1762 1098 I 1760 1099 I 1759 1098 I 1758 1097 I 1758 1097 I C 
-1758 1041 M 1758 1009 I 1759 1007 I 1760 1006 I 1762 1007 I 1762 1009 I 1762 1041 I 1762 1043 I 1760 1043 I 1759 1043 I 1758 1041 I 1758 1041 I C 
-1758 986 M 1758 954 I 1759 952 I 1760 951 I 1762 952 I 1762 954 I 1762 986 I 1762 987 I 1760 988 I 1759 987 I 1758 986 I 1758 986 I C 
-1758 930 M 1758 898 I 1759 896 I 1760 895 I 1762 896 I 1762 898 I 1762 930 I 1762 932 I 1760 932 I 1759 932 I 1758 930 I 1758 930 I C 
-1758 875 M 1758 843 I 1759 841 I 1760 840 I 1762 841 I 1762 843 I 1762 875 I 1762 877 I 1760 877 I 1759 877 I 1758 875 I 1758 875 I C 
-1758 819 M 1758 787 I 1759 785 I 1760 785 I 1762 785 I 1762 787 I 1762 819 I 1762 821 I 1760 822 I 1759 821 I 1758 819 I 1758 819 I C 
-1758 764 M 1758 732 I 1759 729 I 1760 729 I 1762 729 I 1762 732 I 1762 764 I 1762 766 I 1760 766 I 1759 766 I 1758 764 I 1758 764 I C 
-1758 708 M 1758 676 I 1759 674 I 1760 674 I 1762 674 I 1762 676 I 1762 708 I 1762 710 I 1760 711 I 1759 710 I 1758 708 I 1758 708 I C 
-1758 653 M 1758 620 I 1759 619 I 1760 618 I 1762 619 I 1762 620 I 1762 653 I 1762 655 I 1760 655 I 1759 655 I 1758 653 I 1758 653 I C 
-1758 597 M 1758 565 I 1759 564 I 1760 563 I 1762 564 I 1762 565 I 1762 597 I 1762 599 I 1760 600 I 1759 599 I 1758 597 I 1758 597 I C 
-1758 542 M 1758 509 I 1759 508 I 1760 507 I 1762 508 I 1762 509 I 1762 542 I 1762 543 I 1760 544 I 1759 543 I 1758 542 I 1758 542 I C 
-1758 487 M 1758 454 I 1759 453 I 1760 452 I 1762 453 I 1762 454 I 1762 487 I 1762 488 I 1760 489 I 1759 488 I 1758 487 I 1758 487 I C 
-1758 431 M 1758 398 I 1759 397 I 1760 396 I 1762 397 I 1762 398 I 1762 431 I 1762 432 I 1760 433 I 1759 432 I 1758 431 I 1758 431 I C 
-1758 376 M 1758 343 I 1759 341 I 1760 341 I 1762 341 I 1762 343 I 1762 376 I 1762 377 I 1760 378 I 1759 377 I 1758 376 I 1758 376 I C 
-1758 320 M 1758 287 I 1759 286 I 1760 285 I 1762 286 I 1762 287 I 1762 320 I 1762 321 I 1760 322 I 1759 321 I 1758 320 I 1758 320 I C 
-1758 264 M 1758 257 I 1759 255 I 1760 254 I 1762 255 I 1762 257 I 1762 264 I 1762 266 I 1760 266 I 1759 266 I 1758 264 I 1758 264 I C 
-:  L ; K 
-N 1537 13 M 1537 257 I 1983 257 I 1983 13 I 1537 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 1537 257 M 1983 257 I 1983 13 I 1537 13 I 1537 257 I C 
-: 0.645 0.754 +S K 
-; T32RsrcBegin
-
-7
-/g286 [38 0 4 -37 35 1 ] 
-/g286 [31 38 true [1 0 0 1 -4 37 ]  0 0]
-[<000ff800
-007ffe00
-01ffff80
-03ffffc0
-07ffffe0
-0ff01ff0
-1fc007f8
-1f8001f8
-3f0001fc
-3f0000fc
-7e0000fc
-7e00007e
-7c00007e
-7c00007e
-fc00007e
-fffffffe
-fffffffe
-fffffffe
-fffffffe
-fffffffc
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-7e000000
-7e000000
-7e000000
-7f000000
-3f800000
-3fc0001c
-1fe0007c
-0ff803fc
-07fffffc
-03fffffc
-01fffff0
-007fffc0
-000ffc00
->
- ]
-/TT37859b00 AddT3T32Char
-
-8
-/g69 [50 0 6 -49 43 0 ] 
-/g69 [37 49 true [1 0 0 1 -6 49 ]  0 0]
-[<7f000001f8
-ffc00001f8
-ffc00001f8
-ffe00001f8
-ffe00001f8
-fff00001f8
-fff80001f8
-fff80001f8
-fdfc0001f8
-fdfc0001f8
-fcfe0001f8
-fcfe0001f8
-fc7f0001f8
-fc7f0001f8
-fc3f8001f8
-fc3fc001f8
-fc1fc001f8
-fc1fe001f8
-fc0fe001f8
-fc07f001f8
-fc07f001f8
-fc03f801f8
-fc03fc01f8
-fc01fc01f8
-fc01fe01f8
-fc00fe01f8
-fc007f01f8
-fc007f01f8
-fc003f81f8
-fc003fc1f8
-fc001fc1f8
-fc001fe1f8
-fc000fe1f8
-fc000ff1f8
-fc0007f1f8
-fc0003f9f8
-fc0003f9f8
-fc0001fdf8
-fc0001fdf8
-fc0000fff8
-fc0000fff8
-fc00007ff8
-fc00003ff8
-fc00003ff8
-fc00001ff8
-fc00001ff8
-fc00000ff8
-fc000007f8
-fc000003f0
->
- ]
-/TT37859b00 AddT3T32Char
-
-9
-/g17 [42 0 6 -49 38 0 ] 
-/g17 [32 49 true [1 0 0 1 -6 49 ]  0 0]
-[<7fffe000
-fffffc00
-ffffff00
-ffffffc0
-ffffffe0
-fc007fe0
-fc001ff0
-fc000ff0
-fc0007f8
-fc0007f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0007f0
-fc0007f0
-fc000fe0
-fc001fe0
-fc007fc0
-ffffff00
-fffffe00
-ffffff80
-ffffffe0
-fffffff0
-fc003ff8
-fc0007fc
-fc0003fe
-fc0001fe
-fc0000fe
-fc0000ff
-fc00007f
-fc00007f
-fc00007f
-fc00007f
-fc00007f
-fc00007f
-fc00007f
-fc0000fe
-fc0001fe
-fc0001fc
-fc0007fc
-fc001ff8
-fffffff0
-ffffffe0
-ffffffc0
-ffffff00
-7ffff000
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-1632 158 M <07>S 
-1665 158 M <08>S  1708 158 M <09>S  1744 158 M <03>S  1759 158 M <02>S  1815 158 M <01>S  1854 158 M <06>S  
-7 Lw N 1632 167 M 1889 167 I : 0.645 0.754 +S K 
-; N 314 1297 M 314 1991 I 389 1991 I 389 1297 I 314 1297 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 389 1991 M 389 1297 I 314 1297 I 314 1991 I 389 1991 I C 
-: 0.645 0.754 +S K 
-; N 35 1445 M 35 1786 I 739 1786 I 739 1445 I 35 1445 I C 
- O N 35 1786 M 739 1786 I 739 1445 I 35 1445 I 35 1786 I : 0.645 0.754 +S K 
-; N 12 1417 M 12 1758 I 716 1758 I 716 1417 I 12 1417 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 12 1758 M 716 1758 I 716 1417 I 12 1417 I 12 1758 I C 
-: 0.645 0.754 +S K 
-; /TT3785Ab00
-[58 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 58 div 0 0 -1 58 div 0 0 ]
-/__TT3785Ab00
-GreNewFont
-T32RsrcBegin
-
-1
-/g68 [50 0 5 -37 45 0 ] 
-/g68 [40 37 true [1 0 0 1 -5 37 ]  0 0]
-[<7f0000007e
-ff800000ff
-ff800001ff
-ffc00001ff
-ffc00003ff
-fbc00003df
-fbe00007df
-fbe00007df
-f9f000079f
-f9f0000f9f
-f8f0000f1f
-f8f8001f1f
-f8f8001f1f
-f87c001e1f
-f87c003e1f
-f87c003c1f
-f83e007c1f
-f83e007c1f
-f81f00781f
-f81f00f81f
-f81f00f01f
-f80f81f01f
-f80f81f01f
-f807c1e01f
-f807c3e01f
-f807c3c01f
-f803e7c01f
-f803e7c01f
-f803f7801f
-f801ff801f
-f801ff001f
-f800ff001f
-f800ff001f
-f800fe001f
-f8007e001f
-f8007c001f
-f8003c001f
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-2
-/g381 [31 0 3 -28 28 1 ] 
-/g381 [25 29 true [1 0 0 1 -3 28 ]  0 0]
-[<007f8000
-03ffe000
-07fff800
-0ffffc00
-1fc1fc00
-3f007e00
-3e003f00
-7c001f00
-7c001f00
-7c001f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-fc001f00
-7c001f00
-7c001f00
-7e003e00
-3f007e00
-3fc1fc00
-1ffff800
-0ffff000
-03ffe000
-00ff0000
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-3
-/g448 [26 0 1 -27 25 0 ] 
-/g448 [24 27 true [1 0 0 1 -1 27 ]  0 0]
-[<f0001f
-f8001f
-f8001f
-7c003e
-7c003e
-7c003c
-3e007c
-3e007c
-3e0078
-1f00f8
-1f00f8
-1f00f0
-0f81f0
-0f81f0
-0f81e0
-07c3e0
-07c3c0
-03c3c0
-03e7c0
-03e780
-01e780
-01ff80
-01ff00
-00ff00
-00ff00
-00fe00
-007e00
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-4
-/g286 [29 0 3 -28 26 1 ] 
-/g286 [23 29 true [1 0 0 1 -3 28 ]  0 0]
-[<00ff00
-03ffc0
-07ffe0
-0ffff0
-1f81f8
-3e00fc
-3c007c
-7c007c
-78003e
-78003e
-f8003e
-fffffe
-fffffe
-fffffe
-fffffe
-f80000
-f80000
-f80000
-f80000
-fc0000
-7c0000
-7c0000
-7e0000
-3f000c
-3fc07c
-1ffffc
-0ffffc
-03fff0
-00ff80
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-5
-/g3 [13 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-6
-/g90 [32 0 5 -37 29 0 ] 
-/g90 [24 37 true [1 0 0 1 -5 37 ]  0 0]
-[<7ffe00
-ffff80
-ffffe0
-fffff0
-f807f8
-f801f8
-f800fc
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f800f8
-f801f8
-f807f0
-ffffe0
-ffff80
-fffe00
-ffff80
-f81fc0
-f807c0
-f807e0
-f803f0
-f801f0
-f801f0
-f800f8
-f800f8
-f800fc
-f8007c
-f8007c
-f8007e
-f8003e
-f8003f
-f8001f
-f8001f
-f8001f
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-7
-/g62 [24 0 5 -37 24 0 ] 
-/g62 [19 37 true [1 0 0 1 -5 37 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-ffffe0
-ffffe0
-ffffe0
-7fffe0
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-8
-/g18 [31 0 3 -38 29 1 ] 
-/g18 [26 39 true [1 0 0 1 -3 38 ]  0 0]
-[<000fe000
-007ffc00
-01ffff00
-03ffff80
-07f81fc0
-0fe007c0
-0f8001c0
-1f0000c0
-3f000000
-3e000000
-3e000000
-7c000000
-7c000000
-7c000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-fc000000
-7c000000
-7c000000
-7c000000
-3e000000
-3e000000
-3f000000
-1f8000c0
-0fc003c0
-0ff00fc0
-07ffffc0
-01ffff80
-00fffe00
-001ff000
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-9
-/g87 [30 0 5 -37 28 0 ] 
-/g87 [23 37 true [1 0 0 1 -5 37 ]  0 0]
-[<7ffe00
-ffffc0
-ffffe0
-fffff0
-f803f8
-f801fc
-f8007c
-f8007e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8007e
-f8007c
-f800fc
-f801f8
-f807f8
-fffff0
-ffffc0
-ffff80
-fffc00
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-10
-/g24 [36 0 5 -37 33 0 ] 
-/g24 [28 37 true [1 0 0 1 -5 37 ]  0 0]
-[<7ffe0000
-ffffe000
-fffff800
-fffffc00
-f803fe00
-f8007f00
-f8003f80
-f8000fc0
-f8000fc0
-f80007e0
-f80003e0
-f80003e0
-f80003e0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80003e0
-f80003e0
-f80003e0
-f80007c0
-f8000fc0
-f8000f80
-f8001f80
-f8007f00
-f801fe00
-fffffc00
-fffff000
-ffffc000
-7ffe0000
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-11
-/g104 [37 0 5 -37 33 1 ] 
-/g104 [28 38 true [1 0 0 1 -5 37 ]  0 0]
-[<f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-f80001f0
-fc0003e0
-7c0003e0
-7e0007e0
-3f0007c0
-3f801fc0
-1fe07f80
-0fffff00
-07fffe00
-01fff800
-007fc000
->
- ]
-/TT3785Ab00 AddT3T32Char
-T32RsrcEnd
-F /F1 0 /0 F /TT3785Ab00 mF 
-/F1S39 F1 [57.813 0 0 -57.813 0 0 ] mFS
-F1S39 Ji 
-213 1571 M <01>S 
-256 1571 M <02>S  282 1571 M <03>S  305 1571 M <04>S  329 1571 M <05>S  340 1571 M <06>S  368 1571 M <07>S  388 1571 M <08>S  415 1571 M <05>S  426 1571 M <09>S  452 1571 M <0A>S  482 1571 M <0B>S  
-T32RsrcBegin
-
-12
-/g410 [19 0 0 -34 17 1 ] 
-/g410 [17 35 true [1 0 0 1 0 34 ]  0 0]
-[<07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-ffff80
-ffff80
-ffff80
-ffff80
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07c000
-07e000
-03e080
-03ff80
-03ff80
-01ff80
-007f00
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-13
-/g346 [30 0 4 -39 26 0 ] 
-/g346 [22 39 true [1 0 0 1 -4 39 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f83f00
-f8ffc0
-f9ffe0
-fbfff0
-ffc3f8
-ff01f8
-fe00fc
-fc00fc
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
->
- ]
-/TT3785Ab00 AddT3T32Char
-T32RsrcEnd
-77 1640 M <0C>S 
-93 1640 M <02>S  119 1640 M <05>S  130 1640 M <0C>S  147 1640 M <0D>S  173 1640 M <04>S  198 1640 M <05>S  
-/TT3785Bb00
-[58 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 58 div 0 0 -1 58 div 0 0 ]
-/__TT3785Bb00
-GreNewFont
-T32RsrcBegin
-
-1
-/g90 [32 0 2 -37 29 0 ] 
-/g90 [27 37 true [1 0 0 1 -2 37 ]  0 0]
-[<00fff800
-01ffff00
-01ffff80
-01ffffc0
-03e00fc0
-03e007e0
-03e003e0
-03e003e0
-03e003e0
-07c003e0
-07c003e0
-07c007c0
-07c007c0
-07c00f80
-0f801f80
-0f807f00
-0ffffe00
-0ffff800
-0fffe000
-1fffe000
-1f03f000
-1f01f800
-1f00f800
-1f00fc00
-3e007c00
-3e007c00
-3e007c00
-3e007e00
-3c007e00
-7c003e00
-7c003e00
-7c003f00
-7c003f00
-78003f00
-f8001f00
-f8001f00
-f8001f00
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-2
-/g286 [28 0 2 -28 26 1 ] 
-/g286 [24 29 true [1 0 0 1 -2 28 ]  0 0]
-[<001fe0
-007ff8
-01fffc
-03fffe
-07f07f
-0fc03f
-0f801f
-1f001f
-1f001f
-3e003f
-3e007e
-7c03fe
-7ffffc
-7ffff0
-ffffc0
-fffe00
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-fc0000
-7c0030
-7f01f0
-3ffff0
-3fffe0
-0fffc0
-03fe00
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-3
-/g410 [19 0 3 -34 20 1 ] 
-/g410 [17 35 true [1 0 0 1 -3 34 ]  0 0]
-[<03e000
-03e000
-03c000
-03c000
-07c000
-07c000
-07c000
-7fff80
-ffff80
-ffff80
-ffff00
-0f8000
-0f0000
-0f0000
-1f0000
-1f0000
-1f0000
-1e0000
-1e0000
-3e0000
-3e0000
-3e0000
-3c0000
-3c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7c1000
-7ff000
-3ff000
-3fe000
-0fc000
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-4
-/g396 [20 0 2 -28 21 0 ] 
-/g396 [19 28 true [1 0 0 1 -2 28 ]  0 0]
-[<0003e0
-078fe0
-079fe0
-07bfe0
-0ffc40
-0f7000
-0fe000
-0fe000
-0fc000
-1f8000
-1f8000
-1f0000
-1f0000
-1e0000
-3e0000
-3e0000
-3e0000
-3e0000
-3c0000
-3c0000
-7c0000
-7c0000
-7c0000
-780000
-780000
-f80000
-f80000
-f80000
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-5
-/g258 [30 0 2 -28 28 1 ] 
-/g258 [26 29 true [1 0 0 1 -2 28 ]  0 0]
-[<001f8000
-00ffe3c0
-01fff3c0
-03fffbc0
-07f0ff80
-0fc03f80
-0f801f80
-1f001f80
-3f000f80
-3e000f00
-3e000f00
-7c001f00
-7c001f00
-7c001f00
-7c001e00
-f8001e00
-f8003e00
-f8003e00
-f8007e00
-f8007e00
-f800fc00
-f801fc00
-f803fc00
-fc07bc00
-7e1fbc00
-7fff7800
-3ffc7800
-1ff87800
-07e00000
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-6
-/g374 [30 0 2 -28 27 0 ] 
-/g374 [25 28 true [1 0 0 1 -2 28 ]  0 0]
-[<0001f800
-0787fe00
-078fff00
-07bfff80
-0ffe1f80
-0f780f80
-0ff00f80
-0fe00f80
-0fc00f80
-1f800f80
-1f800f80
-1f000f80
-1f000f00
-1e000f00
-3e001f00
-3e001f00
-3e001f00
-3e001f00
-3c001e00
-3c003e00
-7c003e00
-7c003e00
-7c003e00
-78003c00
-78003c00
-f8007c00
-f8007c00
-f8007800
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-7
-/g400 [23 0 0 -28 21 1 ] 
-/g400 [21 29 true [1 0 0 1 0 28 ]  0 0]
-[<001fc0
-00fff0
-01fff8
-03fff8
-07f078
-07c010
-0f8000
-0f8000
-0f8000
-0f8000
-0fc000
-0fe000
-07f800
-03fe00
-01ff80
-007fc0
-001fc0
-000fe0
-0007e0
-0003e0
-0003e0
-0003e0
-0007e0
-4007c0
-f81fc0
-ffff80
-ffff00
-7ffc00
-0ff000
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-8
-/g373 [46 0 2 -28 43 0 ] 
-/g373 [41 28 true [1 0 0 1 -2 28 ]  0 0]
-[<0001f801f800
-0787fc07fe00
-078ffe0fff00
-07bfff1fff80
-0fbc3f3e1f80
-0f781f780f80
-0ff01ff00f80
-0fe01fe00f80
-0fc01fc00f80
-1f801f800f80
-1f801f800f80
-1f001f000f80
-1f001f000f80
-1e001e000f00
-3e003e001f00
-3e003e001f00
-3e003e001f00
-3e003e001f00
-3c003c001e00
-3c007c003e00
-7c007c003e00
-7c007c003e00
-7c007c003e00
-780078003c00
-780078003c00
-f800f8007c00
-f800f8007c00
-f800f8007c00
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-9
-/g349 [13 0 2 -37 14 0 ] 
-/g349 [12 37 true [1 0 0 1 -2 37 ]  0 0]
-[<01f0
-03f0
-03f0
-03f0
-03e0
-0000
-0000
-0000
-0000
-0000
-07c0
-07c0
-0780
-0f80
-0f80
-0f80
-0f80
-0f00
-1f00
-1f00
-1f00
-1f00
-1e00
-3e00
-3e00
-3e00
-3e00
-3c00
-3c00
-7c00
-7c00
-7c00
-7800
-7800
-f800
-f800
-f800
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-10
-/g381 [30 0 2 -28 28 1 ] 
-/g381 [26 29 true [1 0 0 1 -2 28 ]  0 0]
-[<000ff000
-007ffc00
-01fffe00
-03ffff00
-07f03f80
-0fc00f80
-0f800fc0
-1f0007c0
-3f0007c0
-3e0007c0
-7e0007c0
-7c0007c0
-7c0007c0
-7c0007c0
-f80007c0
-f8000f80
-f8000f80
-f8000f80
-f8001f00
-f8001f00
-f8003f00
-f8003e00
-fc007c00
-7e00fc00
-7f03f800
-3ffff000
-1fffe000
-0fff8000
-03fc0000
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-11
-/g3 [13 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-12
-/g17 [32 0 3 -37 30 0 ] 
-/g17 [27 37 true [1 0 0 1 -3 37 ]  0 0]
-[<00fff800
-01ffff00
-01ffff80
-01ffffc0
-03e00fe0
-03e007e0
-03e003e0
-03e003e0
-03c003e0
-07c003e0
-07c003e0
-078007c0
-078007c0
-07800f80
-0f801f00
-0f007e00
-0ffffc00
-0ffff800
-0ffffe00
-1fffff00
-1e003f80
-1e000f80
-1e000fc0
-3e0007c0
-3e0007c0
-3c0007c0
-3c0007c0
-3c0007c0
-7c000f80
-7c000f80
-7c001f00
-78003f00
-7800fe00
-fffffc00
-fffff800
-ffffe000
-ffff0000
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-13
-/g437 [30 0 4 -27 29 1 ] 
-/g437 [25 28 true [1 0 0 1 -4 27 ]  0 0]
-[<1f000f80
-1f000f80
-1e000f00
-3e000f00
-3e001f00
-3e001f00
-3e001f00
-3c001e00
-3c001e00
-7c003e00
-7c003e00
-7c003e00
-7c003c00
-78003c00
-f8007c00
-f8007c00
-f800fc00
-f800f800
-f001f800
-f001f800
-f003f800
-f807f800
-f81ff800
-fc3ef000
-fffcf000
-7ff8f000
-7fe1f000
-1f800000
->
- ]
-/TT3785Bb00 AddT3T32Char
-
-14
-/g296 [18 0 -6 -40 23 11 ] 
-/g296 [29 51 true [1 0 0 1 6 40 ]  0 0]
-[<000007f0
-00001ff8
-00003ff8
-00007ff8
-00007e10
-0000fc00
-0000f800
-0001f800
-0001f000
-0001f000
-0001f000
-0001f000
-0003f000
-003fff80
-007fff80
-007fff80
-007fff00
-0007e000
-0007c000
-0007c000
-0007c000
-0007c000
-000fc000
-000f8000
-000f8000
-000f8000
-000f8000
-001f8000
-001f8000
-001f0000
-001f0000
-001f0000
-001f0000
-003f0000
-003e0000
-003e0000
-003e0000
-003e0000
-007e0000
-007c0000
-007c0000
-007c0000
-007c0000
-00f80000
-00f80000
-01f80000
-03f00000
-fff00000
-ffe00000
-ff800000
-fe000000
->
- ]
-/TT3785Bb00 AddT3T32Char
-T32RsrcEnd
-F /F2 0 /0 F /TT3785Bb00 mF 
-/F2S39 F2 [57.813 0 0 -57.813 0 0 ] mFS
-F2S39 Ji 
-209 1640 M <01>S 
-237 1640 M <02>S  261 1640 M <03>S  278 1640 M <04>S  294 1640 M <05>S  320 1640 M <06>S  345 1640 M <07>S  364 1640 M <08>S  404 1640 M <09>S  416 1640 M <07>S  435 1640 M <07>S  455 1640 M <09>S  466 1640 M <0A>S  492 1640 M <06>S  517 1640 M <0B>S  528 1640 M <0C>S  555 1640 M <0D>S 
-580 1640 M <0E>S  595 1640 M <0E>S  610 1640 M <02>S  634 1640 M <04>S  
-N 389 1991 M 954 1991 I : 0.645 0.754 +S K 
-; N 1019 1991 M 987 2013 I 987 1969 I 1019 1991 I C 
-987 2013 M 1019 1991 I 987 2013 I C 
- O 10 Lw N 1019 1991 M 987 2013 I 987 1969 I 1019 1991 I : 0.645 0.754 +S K 
-; N 987 2013 M 1019 1991 I : 0.645 0.754 +S K 
-; 6 Lw N 987 1991 M 935 1991 I : 0.645 0.754 +S K 
-; N 341 1842 M 341 1935 I 1067 1935 I 1067 1842 I 341 1842 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-10
-/g100 [38 0 1 -49 37 0 ] 
-/g100 [36 49 true [1 0 0 1 -1 49 ]  0 0]
-[<fffffffff0
-fffffffff0
-fffffffff0
-fffffffff0
-fffffffff0
-fffffffff0
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
-0001f80000
->
- ]
-/TT37859b00 AddT3T32Char
-
-11
-/g396 [27 0 6 -37 26 0 ] 
-/g396 [20 37 true [1 0 0 1 -6 37 ]  0 0]
-[<000fc0
-f83ff0
-f87ff0
-f8fff0
-f9fff0
-f9fff0
-fbf070
-ffe000
-ffc000
-ff8000
-ff0000
-fe0000
-fe0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
->
- ]
-/TT37859b00 AddT3T32Char
-
-12
-/g258 [37 0 3 -37 31 1 ] 
-/g258 [28 38 true [1 0 0 1 -3 37 ]  0 0]
-[<003ff000
-03fffe00
-0fffff00
-1fffff80
-3fffffc0
-3fe03fe0
-3f000fe0
-3c0007e0
-300007f0
-000003f0
-000003f0
-000003f0
-000003f0
-000003f0
-000003f0
-001ffff0
-01fffff0
-07fffff0
-0ffffff0
-1ffffff0
-3ff003f0
-7f8003f0
-7f0003f0
-fe0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0007f0
-fc000ff0
-fe001ff0
-7f003ff0
-7fc0fff0
-3ffffdf0
-1ffff9f0
-0fffe1f0
-07ffc1f0
-00fe0000
->
- ]
-/TT37859b00 AddT3T32Char
-
-13
-/g374 [40 0 6 -37 35 0 ] 
-/g374 [29 37 true [1 0 0 1 -6 37 ]  0 0]
-[<0003f800
-f81ffe00
-f83fff80
-f8ffffc0
-f9ffffe0
-fbf81fe0
-fbe00ff0
-ffc007f0
-ff8003f0
-ff0003f8
-fe0003f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
->
- ]
-/TT37859b00 AddT3T32Char
-
-14
-/g400 [30 0 3 -37 27 1 ] 
-/g400 [24 38 true [1 0 0 1 -3 37 ]  0 0]
-[<007f80
-03ffe0
-07fff8
-0ffffc
-1ffffc
-3fc0fc
-3f003c
-7f000c
-7e0000
-7e0000
-7e0000
-7e0000
-7f0000
-7f8000
-3fc000
-3ff000
-1ffe00
-0fff80
-07ffe0
-01fff0
-007ffc
-000ffc
-0003fe
-0000fe
-00007f
-00003f
-00003f
-00003f
-00003f
-00003f
-c0007e
-f000fe
-fe03fe
-fffffc
-fffff8
-7ffff0
-1fffc0
-03fe00
->
- ]
-/TT37859b00 AddT3T32Char
-
-15
-/g373 [62 0 6 -37 56 0 ] 
-/g373 [50 37 true [1 0 0 1 -6 37 ]  0 0]
-[<0007f0001fc000
-f81ffc007ff000
-f83fff00fffc00
-f8ffff83fffe00
-f9ffffc7ffff00
-fbf83fcfe0ff00
-fbe01fff807f80
-ffc00fff003f80
-ff8007fe001f80
-ff0007fc001fc0
-fe0003f8000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
-fc0003f0000fc0
->
- ]
-/TT37859b00 AddT3T32Char
-
-16
-/g349 [18 0 5 -50 13 0 ] 
-/g349 [8 50 true [1 0 0 1 -5 50 ]  0 0]
-[<7e
-ff
-ff
-ff
-ff
-ff
-7e
-00
-00
-00
-00
-00
-00
-00
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
->
- ]
-/TT37859b00 AddT3T32Char
-
-17
-/g410 [26 0 1 -45 23 1 ] 
-/g410 [22 46 true [1 0 0 1 -1 45 ]  0 0]
-[<03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-fffffc
-fffffc
-fffffc
-fffffc
-fffffc
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f800
-01f800
-01fc1c
-01fffc
-00fffc
-007ffc
-003ffc
-000ff0
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-F0S4D Ji 
-341 1912 M <0A>S 
-373 1912 M <0B>S  397 1912 M <0C>S  429 1912 M <0D>S  464 1912 M <0E>S  490 1912 M <0F>S  543 1912 M <10>S  558 1912 M <11>S  
-T32RsrcBegin
-
-18
-/g890 [38 0 0 9 39 14 ] 
-/g890 [39 5 true [1 0 0 1 0 -9 ]  0 0]
-[<fffffffffe
-fffffffffe
-fffffffffe
-fffffffffe
-fffffffffe
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-579 1912 M <12>S 
-T32RsrcBegin
-
-19
-/g87 [40 0 6 -49 36 0 ] 
-/g87 [30 49 true [1 0 0 1 -6 49 ]  0 0]
-[<7fffe000
-fffffc00
-ffffff00
-ffffff80
-ffffffc0
-fc007fe0
-fc001ff0
-fc000ff8
-fc0007f8
-fc0003f8
-fc0003fc
-fc0001fc
-fc0001fc
-fc0001fc
-fc0001fc
-fc0001fc
-fc0001fc
-fc0001fc
-fc0003fc
-fc0003f8
-fc0003f8
-fc0007f0
-fc000ff0
-fc003fe0
-fc00ffc0
-ffffff80
-ffffff00
-fffffe00
-fffff800
-ffff8000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
->
- ]
-/TT37859b00 AddT3T32Char
-
-20
-/g24 [47 0 6 -49 43 0 ] 
-/g24 [37 49 true [1 0 0 1 -6 49 ]  0 0]
-[<7ffff00000
-fffffe0000
-ffffffc000
-fffffff000
-fffffff800
-fc003ffc00
-fc0007fe00
-fc0001ff00
-fc0000ff80
-fc00007f80
-fc00003fc0
-fc00001fe0
-fc00000fe0
-fc00000fe0
-fc00000ff0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000003f8
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc00000ff0
-fc00000fe0
-fc00001fe0
-fc00003fc0
-fc00003fc0
-fc0000ff80
-fc0001ff80
-fc0007ff00
-fc003ffe00
-fffffffc00
-fffffff800
-ffffffe000
-ffffff8000
-fffffe0000
-7fffe00000
->
- ]
-/TT37859b00 AddT3T32Char
-
-21
-/g104 [49 0 6 -49 43 1 ] 
-/g104 [37 50 true [1 0 0 1 -6 49 ]  0 0]
-[<fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fc000001f8
-fe000003f8
-fe000003f0
-7e000003f0
-7f000007f0
-7f000007f0
-3f80000fe0
-3fc0001fe0
-1ff0007fc0
-1ffc01ff80
-0fffffff00
-07fffffe00
-03fffffc00
-00fffff800
-003fffe000
-0007fe0000
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-612 1912 M <13>S 
-646 1912 M <14>S  687 1912 M <15>S  730 1912 M <03>S  
-T32RsrcBegin
-
-22
-/g894 [23 0 5 -53 19 13 ] 
-/g894 [14 66 true [1 0 0 1 -5 53 ]  0 0]
-[<00fc
-00fc
-01f8
-01f8
-01f0
-03f0
-03e0
-07e0
-07e0
-0fc0
-0fc0
-0fc0
-1f80
-1f80
-1f80
-1f80
-3f00
-3f00
-3f00
-3f00
-7f00
-7e00
-7e00
-7e00
-7e00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-fe00
-7e00
-7e00
-7e00
-7e00
-7f00
-7f00
-3f00
-3f00
-3f00
-3f80
-1f80
-1f80
-1fc0
-0fc0
-0fc0
-0fc0
-07e0
-07e0
-03f0
-03f0
-03f0
-01f8
-01f8
-00fc
-007c
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-744 1912 M <16>S 
-764 1912 M <14>S 
-805 1912 M <01>S  844 1912 M <0A>S  876 1912 M <01>S  914 1912 M <03>S  929 1912 M <13>S  963 1912 M <14>S  1004 1912 M <15>S  
-T32RsrcBegin
-
-23
-/g895 [23 0 4 -53 18 13 ] 
-/g895 [14 66 true [1 0 0 1 -4 53 ]  0 0]
-[<7c00
-fc00
-7e00
-7e00
-3f00
-3f00
-1f00
-1f80
-1f80
-0fc0
-0fc0
-0fc0
-07e0
-07e0
-07e0
-07f0
-03f0
-03f0
-03f0
-03f8
-03f8
-01f8
-01f8
-01f8
-01f8
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01fc
-01f8
-01f8
-01f8
-01f8
-03f8
-03f8
-03f0
-03f0
-03f0
-07f0
-07e0
-07e0
-07e0
-0fc0
-0fc0
-0fc0
-1f80
-1f80
-1f80
-3f00
-3f00
-7e00
-7e00
-fc00
-fc00
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-1047 1912 M <17>S 
-N 1760 1123 M 1159 1123 I : 0.645 0.754 +S K 
-; N 1093 1123 M 1126 1102 I 1126 1145 I 1093 1123 I C 
-1126 1102 M 1093 1123 I 1126 1102 I C 
- O 10 Lw N 1093 1123 M 1126 1102 I 1126 1145 I 1093 1123 I : 0.645 0.754 +S K 
-; N 1126 1102 M 1093 1123 I : 0.645 0.754 +S K 
-; 6 Lw N 1126 1123 M 1177 1123 I : 0.645 0.754 +S K 
-; N 1250 1010 M 1250 1102 I 1603 1102 I 1603 1010 I 1250 1010 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-24
-/g94 [35 0 3 -50 33 1 ] 
-/g94 [30 51 true [1 0 0 1 -3 50 ]  0 0]
-[<001ff000
-00ffff00
-03ffffc0
-07ffffe0
-0fffffe0
-1ff81fe0
-1fe003e0
-3fc001e0
-3f800060
-7f000000
-7f000000
-7f000000
-7f000000
-7f000000
-7f000000
-7f800000
-7f800000
-3fc00000
-3fe00000
-1ff80000
-1ffe0000
-0fff8000
-07ffe000
-03fff800
-00fffe00
-007fff00
-001fff80
-0007ffe0
-0001ffe0
-00007ff0
-00001ff8
-00000ff8
-000007f8
-000003fc
-000001fc
-000001fc
-000001fc
-000001fc
-000001fc
-000001fc
-000003f8
-c00003f8
-f00007f8
-fc000ff0
-ff807ff0
-ffffffe0
-ffffffc0
-7fffff80
-3ffffe00
-07fff800
-00ffc000
->
- ]
-/TT37859b00 AddT3T32Char
-
-25
-/g282 [40 0 4 -52 35 1 ] 
-/g282 [31 53 true [1 0 0 1 -4 52 ]  0 0]
-[<0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-0000007e
-001fc07e
-00fff07e
-03fffc7e
-07fffe7e
-0fffff7e
-0ff03ffe
-1fc00ffe
-3f8007fe
-3f8003fe
-3f0001fe
-7e0000fe
-7e00007e
-7e00007e
-fe00007e
-fc00007e
-fc00007e
-fc00007e
-fc00007e
-fc00007e
-fc00007e
-fc00007e
-fc00007e
-fc00007e
-fc00007e
-fc00007e
-7e00007e
-7e0000fe
-7e0000fe
-7f0001fe
-3f0003fe
-3f8007fe
-1fc01ffe
-1ff07fbe
-0fffff3e
-07fffe3e
-03fff83e
-01fff03e
-003f8000
->
- ]
-/TT37859b00 AddT3T32Char
-
-26
-/g272 [33 0 3 -37 30 1 ] 
-/g272 [27 38 true [1 0 0 1 -3 37 ]  0 0]
-[<000ff000
-007ffe00
-01ffff80
-03ffffc0
-07ffffe0
-0ff01fe0
-1fe007e0
-1f8001e0
-3f8000c0
-3f000000
-7e000000
-7e000000
-7e000000
-7e000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-7e000000
-7e000000
-7e000000
-7f000000
-3f000060
-3f8001e0
-1fc003e0
-1ff01fe0
-0fffffe0
-07ffffc0
-03ffff80
-00fffe00
-001ff000
->
- ]
-/TT37859b00 AddT3T32Char
-
-27
-/g437 [40 0 6 -36 35 1 ] 
-/g437 [29 37 true [1 0 0 1 -6 36 ]  0 0]
-[<fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0001f8
-fc0003f8
-fe0003f8
-fe0007f8
-7e000ff8
-7f001ff8
-7f803ef8
-3fe0fef8
-3ffffcf8
-1ffff8f8
-0fffe0f8
-03ffc0f8
-00fe0000
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-1250 1079 M <18>S 
-1281 1079 M <07>S  1314 1079 M <0D>S  1349 1079 M <19>S  1384 1079 M <02>S  1440 1079 M <0C>S  1472 1079 M <1A>S  1500 1079 M <13>S  1534 1079 M <19>S  1569 1079 M <1B>S  
-N 1825 1239 M 2060 1239 I 2060 1239 I 2069 1239 I 2077 1237 I 2086 1235 I 2094 1232 I 2101 1227 I 2109 1222 I 2116 1216 I 2122 1209 I 2128 1202 I 2132 1194 I 2137 1186 I 2141 1177 I 2143 1168 I 2146 1158 I 2147 1147 I 2148 1137 I 2148 1137 I 2147 1127 I 2146 1116 I 2143 1107 I 2141 1098 I 2137 1089 I 2132 1080 I 2128 1072 I 2122 1064 I 2116 1058 I 2109 1052 I 2101 1047 I 2094 1043 I 2086 1040 I 2077 1037 I 2069 1035 I 2060 1035 I 2060 1035 I 1825 1035 I 1825 1035 I 1816 1035 I 1807 1037 I 1799 1040 I 1791 1043 I 1783 1047 I 1776 1052 I 1769 1058 I 1763 1064 I 1757 1072 I 1752 1080 I 1747 1089 I 1744 1098 I 1741 1107 I 1739 1116 I 1738 1127 I 1737 1137 I 1738 1147 I 1739 1158 I 1741 1168 I 1744 1177 I 1747 1186 I 1752 1194 I 1757 1202 I 1763 1209 I 1769 1216 I 1776 1222 I 1783 1227 I 1791 1232 I 1799 1235 I 1807 1237 I 1816 1239 I 1825 1239 I 1825 1239 I C 
- O N 1825 1239 M 2060 1239 I 2060 1239 I 2069 1239 I 2077 1237 I 2086 1235 I 2094 1232 I 2101 1227 I 2109 1222 I 2116 1216 I 2122 1209 I 2128 1202 I 2132 1194 I 2137 1186 I 2141 1177 I 2143 1168 I 2146 1158 I 2147 1147 I 2148 1137 I 2148 1137 I 2147 1127 I 2146 1116 I 2143 1107 I 2141 1098 I 2137 1089 I 2132 1080 I 2128 1072 I 2122 1064 I 2116 1058 I 2109 1052 I 2101 1047 I 2094 1043 I 2086 1040 I 2077 1037 I 2069 1035 I 2060 1035 I 2060 1035 I 1825 1035 I 1825 1035 I 1816 1035 I 1807 1037 I 1799 1040 I 1791 1043 I 1783 1047 I 1776 1052 I 1769 1058 I 1763 1064 I 1757 1072 I 1752 1080 I 1747 1089 I 1744 1098 I 1741 1107 I 1739 1116 I 1738 1127 I 1737 1137 I 1738 1147 I 1739 1158 I 1741 1168 I 1744 1177 I 1747 1186 I 1752 1194 I 1757 1202 I 1763 1209 I 1769 1216 I 1776 1222 I 1783 1227 I 1791 1232 I 1799 1235 I 1807 1237 I 1816 1239 I 1825 1239 I : 0.645 0.754 +S K 
-; N 1801 1212 M 2036 1212 I 2036 1212 I 2045 1212 I 2054 1210 I 2062 1208 I 2070 1204 I 2078 1200 I 2086 1195 I 2092 1189 I 2099 1182 I 2104 1175 I 2109 1167 I 2114 1159 I 2118 1150 I 2120 1141 I 2123 1131 I 2124 1120 I 2124 1110 I 2124 1110 I 2124 1099 I 2123 1089 I 2120 1080 I 2118 1070 I 2114 1061 I 2109 1052 I 2104 1045 I 2099 1037 I 2092 1031 I 2086 1025 I 2078 1020 I 2070 1015 I 2062 1012 I 2054 1009 I 2045 1008 I 2036 1007 I 2036 1007 I 1801 1007 I 1801 1007 I 1793 1008 I 1784 1009 I 1775 1012 I 1767 1015 I 1760 1020 I 1753 1025 I 1745 1031 I 1739 1037 I 1734 1045 I 1729 1052 I 1724 1061 I 1720 1070 I 1718 1080 I 1715 1089 I 1714 1099 I 1714 1110 I 1714 1120 I 1715 1131 I 1718 1141 I 1720 1150 I 1724 1159 I 1729 1167 I 1734 1175 I 1739 1182 I 1745 1189 I 1753 1195 I 1760 1200 I 1767 1204 I 1775 1208 I 1784 1210 I 1793 1212 I 1801 1212 I 1801 1212 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1801 1212 M 2036 1212 I 2036 1212 I 2045 1212 I 2054 1210 I 2062 1208 I 2070 1204 I 2078 1200 I 2086 1195 I 2092 1189 I 2099 1182 I 2104 1175 I 2109 1167 I 2114 1159 I 2118 1150 I 2120 1141 I 2123 1131 I 2124 1120 I 2124 1110 I 2124 1110 I 2124 1099 I 2123 1089 I 2120 1080 I 2118 1070 I 2114 1061 I 2109 1052 I 2104 1045 I 2099 1037 I 2092 1031 I 2086 1025 I 2078 1020 I 2070 1015 I 2062 1012 I 2054 1009 I 2045 1008 I 2036 1007 I 2036 1007 I 1801 1007 I 1801 1007 I 1793 1008 I 1784 1009 I 1775 1012 I 1767 1015 I 1760 1020 I 1753 1025 I 1745 1031 I 1739 1037 I 1734 1045 I 1729 1052 I 1724 1061 I 1720 1070 I 1718 1080 I 1715 1089 I 1714 1099 I 1714 1110 I 1714 1120 I 1715 1131 I 1718 1141 I 1720 1150 I 1724 1159 I 1729 1167 I 1734 1175 I 1739 1182 I 1745 1189 I 1753 1195 I 1760 1200 I 1767 1204 I 1775 1208 I 1784 1210 I 1793 1212 I 1801 1212 I 1801 1212 I : 0.645 0.754 +S K 
-; T32RsrcBegin
-
-14
-/g94 [27 0 2 -38 25 1 ] 
-/g94 [23 39 true [1 0 0 1 -2 38 ]  0 0]
-[<00ff00
-03ffe0
-0ffff0
-1ffff8
-1f81f8
-3f0038
-3e0018
-7c0000
-7c0000
-7c0000
-7c0000
-7c0000
-7e0000
-3f0000
-3f8000
-1fe000
-1ff800
-0ffe00
-03ff80
-01ffe0
-007ff0
-001ff8
-0003fc
-0001fc
-0000fc
-00007e
-00003e
-00003e
-00003e
-00003e
-00003e
-00007c
-c0007c
-f000fc
-fe03f8
-fffff0
-7fffe0
-1fff80
-03fc00
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-15
-/g374 [30 0 4 -28 26 0 ] 
-/g374 [22 28 true [1 0 0 1 -4 28 ]  0 0]
-[<003f00
-f0ffc0
-f9ffe0
-fbfff0
-ffc3f8
-ff01f8
-fe00fc
-fc00fc
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-16
-/g282 [30 0 3 -39 26 1 ] 
-/g282 [23 40 true [1 0 0 1 -3 39 ]  0 0]
-[<00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-01f83e
-07fe3e
-0fffbe
-1ffffe
-3f87fe
-3f01fe
-7e00fe
-7c007e
-7c003e
-7c003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-fc003e
-7c007e
-7c007e
-7e00fe
-3e01fe
-3f87de
-1fff9e
-0fff1e
-07fe1e
-01f800
->
- ]
-/TT3785Ab00 AddT3T32Char
-T32RsrcEnd
-F1S39 Ji 
-1869 1092 M <0E>S 
-1891 1092 M <04>S  1916 1092 M <0F>S  1942 1092 M <10>S  
-T32RsrcBegin
-
-17
-/g100 [28 0 1 -37 28 0 ] 
-/g100 [27 37 true [1 0 0 1 -1 37 ]  0 0]
-[<ffffffe0
-ffffffe0
-ffffffe0
-ffffffe0
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
->
- ]
-/TT3785Ab00 AddT3T32Char
-
-18
-/g4 [34 0 1 -37 33 0 ] 
-/g4 [32 37 true [1 0 0 1 -1 37 ]  0 0]
-[<0007e000
-000fe000
-000ff000
-000ff000
-001ff000
-001ef800
-001ef800
-003ef800
-003c7c00
-007c7c00
-007c7c00
-00783e00
-00f83e00
-00f81f00
-00f01f00
-01f01f00
-01e00f80
-01e00f80
-03e00f80
-03c007c0
-07c007c0
-07c007c0
-078003e0
-0fffffe0
-0fffffe0
-0ffffff0
-1ffffff0
-1f0001f8
-1e0000f8
-3e0000f8
-3e0000fc
-3c00007c
-7c00007c
-7c00007e
-f800003e
-f800003e
-f800001e
->
- ]
-/TT3785Ab00 AddT3T32Char
-T32RsrcEnd
-1791 1162 M <0E>S 
-1814 1162 M <11>S  1838 1162 M <12>S  1867 1162 M <11>S  1891 1162 M <0B>S  1922 1162 M <0E>S  1945 1162 M <05>S  1956 1162 M <09>S  1982 1162 M <0A>S  2012 1162 M <0B>S  
-1 Lw solid N 1054 2373 M 1054 2341 I 1055 2339 I 1056 2339 I 1057 2339 I 1058 2341 I 1058 2373 I 1057 2375 I 1056 2375 I 1055 2375 I 1054 2373 I 1054 2373 I C 
-1054 2318 M 1054 2286 I 1055 2284 I 1056 2283 I 1057 2284 I 1058 2286 I 1058 2318 I 1057 2320 I 1056 2320 I 1055 2320 I 1054 2318 I 1054 2318 I C 
-1054 2262 M 1054 2230 I 1055 2228 I 1056 2228 I 1057 2228 I 1058 2230 I 1058 2262 I 1057 2264 I 1056 2265 I 1055 2264 I 1054 2262 I 1054 2262 I C 
-1054 2206 M 1054 2174 I 1055 2173 I 1056 2172 I 1057 2173 I 1058 2174 I 1058 2206 I 1057 2209 I 1056 2209 I 1055 2209 I 1054 2206 I 1054 2206 I C 
-1054 2151 M 1054 2119 I 1055 2117 I 1056 2117 I 1057 2117 I 1058 2119 I 1058 2151 I 1057 2153 I 1056 2154 I 1055 2153 I 1054 2151 I 1054 2151 I C 
-1054 2096 M 1054 2063 I 1055 2062 I 1056 2061 I 1057 2062 I 1058 2063 I 1058 2096 I 1057 2097 I 1056 2098 I 1055 2097 I 1054 2096 I 1054 2096 I C 
-1054 2041 M 1054 2008 I 1055 2007 I 1056 2006 I 1057 2007 I 1058 2008 I 1058 2041 I 1057 2042 I 1056 2043 I 1055 2042 I 1054 2041 I 1054 2041 I C 
-1054 1985 M 1054 1952 I 1055 1951 I 1056 1950 I 1057 1951 I 1058 1952 I 1058 1985 I 1057 1986 I 1056 1987 I 1055 1986 I 1054 1985 I 1054 1985 I C 
-1054 1930 M 1054 1897 I 1055 1895 I 1056 1895 I 1057 1895 I 1058 1897 I 1058 1930 I 1057 1931 I 1056 1932 I 1055 1931 I 1054 1930 I 1054 1930 I C 
-1054 1874 M 1054 1841 I 1055 1840 I 1056 1839 I 1057 1840 I 1058 1841 I 1058 1874 I 1057 1875 I 1056 1876 I 1055 1875 I 1054 1874 I 1054 1874 I C 
-1054 1818 M 1054 1786 I 1055 1784 I 1056 1783 I 1057 1784 I 1058 1786 I 1058 1818 I 1057 1820 I 1056 1820 I 1055 1820 I 1054 1818 I 1054 1818 I C 
-1054 1763 M 1054 1731 I 1055 1729 I 1056 1728 I 1057 1729 I 1058 1731 I 1058 1763 I 1057 1764 I 1056 1765 I 1055 1764 I 1054 1763 I 1054 1763 I C 
-1054 1707 M 1054 1675 I 1055 1673 I 1056 1672 I 1057 1673 I 1058 1675 I 1058 1707 I 1057 1709 I 1056 1709 I 1055 1709 I 1054 1707 I 1054 1707 I C 
-1054 1652 M 1054 1620 I 1055 1618 I 1056 1617 I 1057 1618 I 1058 1620 I 1058 1652 I 1057 1654 I 1056 1654 I 1055 1654 I 1054 1652 I 1054 1652 I C 
-1054 1596 M 1054 1564 I 1055 1562 I 1056 1562 I 1057 1562 I 1058 1564 I 1058 1596 I 1057 1598 I 1056 1598 I 1055 1598 I 1054 1596 I 1054 1596 I C 
-1054 1541 M 1054 1509 I 1055 1506 I 1056 1506 I 1057 1506 I 1058 1509 I 1058 1541 I 1057 1543 I 1056 1543 I 1055 1543 I 1054 1541 I 1054 1541 I C 
-1054 1485 M 1054 1453 I 1055 1451 I 1056 1451 I 1057 1451 I 1058 1453 I 1058 1485 I 1057 1487 I 1056 1488 I 1055 1487 I 1054 1485 I 1054 1485 I C 
-1054 1430 M 1054 1397 I 1055 1396 I 1056 1395 I 1057 1396 I 1058 1397 I 1058 1430 I 1057 1432 I 1056 1432 I 1055 1432 I 1054 1430 I 1054 1430 I C 
-1054 1374 M 1054 1342 I 1055 1341 I 1056 1340 I 1057 1341 I 1058 1342 I 1058 1374 I 1057 1376 I 1056 1377 I 1055 1376 I 1054 1374 I 1054 1374 I C 
-1054 1319 M 1054 1286 I 1055 1285 I 1056 1284 I 1057 1285 I 1058 1286 I 1058 1319 I 1057 1320 I 1056 1321 I 1055 1320 I 1054 1319 I 1054 1319 I C 
-1054 1264 M 1054 1231 I 1055 1230 I 1056 1229 I 1057 1230 I 1058 1231 I 1058 1264 I 1057 1265 I 1056 1266 I 1055 1265 I 1054 1264 I 1054 1264 I C 
-1054 1208 M 1054 1175 I 1055 1174 I 1056 1173 I 1057 1174 I 1058 1175 I 1058 1208 I 1057 1209 I 1056 1210 I 1055 1209 I 1054 1208 I 1054 1208 I C 
-1054 1153 M 1054 1120 I 1055 1118 I 1056 1118 I 1057 1118 I 1058 1120 I 1058 1153 I 1057 1154 I 1056 1155 I 1055 1154 I 1054 1153 I 1054 1153 I C 
-1054 1097 M 1054 1064 I 1055 1063 I 1056 1062 I 1057 1063 I 1058 1064 I 1058 1097 I 1057 1098 I 1056 1099 I 1055 1098 I 1054 1097 I 1054 1097 I C 
-1054 1041 M 1054 1009 I 1055 1007 I 1056 1006 I 1057 1007 I 1058 1009 I 1058 1041 I 1057 1043 I 1056 1043 I 1055 1043 I 1054 1041 I 1054 1041 I C 
-1054 986 M 1054 954 I 1055 952 I 1056 951 I 1057 952 I 1058 954 I 1058 986 I 1057 987 I 1056 988 I 1055 987 I 1054 986 I 1054 986 I C 
-1054 930 M 1054 898 I 1055 896 I 1056 895 I 1057 896 I 1058 898 I 1058 930 I 1057 932 I 1056 932 I 1055 932 I 1054 930 I 1054 930 I C 
-1054 875 M 1054 843 I 1055 841 I 1056 840 I 1057 841 I 1058 843 I 1058 875 I 1057 877 I 1056 877 I 1055 877 I 1054 875 I 1054 875 I C 
-1054 819 M 1054 787 I 1055 785 I 1056 785 I 1057 785 I 1058 787 I 1058 819 I 1057 821 I 1056 822 I 1055 821 I 1054 819 I 1054 819 I C 
-1054 764 M 1054 732 I 1055 729 I 1056 729 I 1057 729 I 1058 732 I 1058 764 I 1057 766 I 1056 766 I 1055 766 I 1054 764 I 1054 764 I C 
-1054 708 M 1054 676 I 1055 674 I 1056 674 I 1057 674 I 1058 676 I 1058 708 I 1057 710 I 1056 711 I 1055 710 I 1054 708 I 1054 708 I C 
-1054 653 M 1054 620 I 1055 619 I 1056 618 I 1057 619 I 1058 620 I 1058 653 I 1057 655 I 1056 655 I 1055 655 I 1054 653 I 1054 653 I C 
-1054 597 M 1054 565 I 1055 564 I 1056 563 I 1057 564 I 1058 565 I 1058 597 I 1057 599 I 1056 600 I 1055 599 I 1054 597 I 1054 597 I C 
-1054 542 M 1054 509 I 1055 508 I 1056 507 I 1057 508 I 1058 509 I 1058 542 I 1057 543 I 1056 544 I 1055 543 I 1054 542 I 1054 542 I C 
-1054 487 M 1054 454 I 1055 453 I 1056 452 I 1057 453 I 1058 454 I 1058 487 I 1057 488 I 1056 489 I 1055 488 I 1054 487 I 1054 487 I C 
-1054 431 M 1054 398 I 1055 397 I 1056 396 I 1057 397 I 1058 398 I 1058 431 I 1057 432 I 1056 433 I 1055 432 I 1054 431 I 1054 431 I C 
-1054 376 M 1054 343 I 1055 341 I 1056 341 I 1057 341 I 1058 343 I 1058 376 I 1057 377 I 1056 378 I 1055 377 I 1054 376 I 1054 376 I C 
-1054 320 M 1054 287 I 1055 286 I 1056 285 I 1057 286 I 1058 287 I 1058 320 I 1057 321 I 1056 322 I 1055 321 I 1054 320 I 1054 320 I C 
-1054 264 M 1054 257 I 1055 255 I 1056 254 I 1057 255 I 1058 257 I 1058 264 I 1057 266 I 1056 266 I 1055 266 I 1054 264 I 1054 264 I C 
-:  L ; K 
-N 833 13 M 833 257 I 1279 257 I 1279 13 I 833 13 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 833 257 M 1279 257 I 1279 13 I 833 13 I 833 257 I C 
-: 0.645 0.754 +S K 
-; T32RsrcBegin
-
-28
-/g28 [38 0 6 -49 34 0 ] 
-/g28 [28 49 true [1 0 0 1 -6 49 ]  0 0]
-[<7ffffff0
-fffffff0
-fffffff0
-fffffff0
-fffffff0
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fffffff0
-fffffff0
-fffffff0
-fffffff0
-7ffffff0
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-F0S4D Ji 
-946 158 M <15>S 
-989 158 M <1C>S  1021 158 M <03>S  1036 158 M <02>S  1092 158 M <01>S  1131 158 M <06>S  
-7 Lw N 946 167 M 1166 167 I : 0.645 0.754 +S K 
-; N 1019 1123 M 1019 1297 I 1093 1297 I 1093 1123 I 1019 1123 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 1093 1297 M 1093 1123 I 1019 1123 I 1019 1297 I 1093 1297 I C 
-: 0.645 0.754 +S K 
-; N 1019 1297 M 455 1297 I : 0.645 0.754 +S K 
-; N 389 1297 M 421 1275 I 421 1319 I 389 1297 I C 
-421 1275 M 389 1297 I 421 1275 I C 
- O 10 Lw N 389 1297 M 421 1275 I 421 1319 I 389 1297 I : 0.645 0.754 +S K 
-; N 421 1275 M 389 1297 I : 0.645 0.754 +S K 
-; 6 Lw N 421 1297 M 473 1297 I : 0.645 0.754 +S K 
-; N 327 1183 M 327 1276 I 1080 1276 I 1080 1183 I 327 1183 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-29
-/g448 [35 0 2 -36 34 0 ] 
-/g448 [32 36 true [1 0 0 1 -2 36 ]  0 0]
-[<fc00003f
-fc00007f
-fe00007f
-fe00007e
-7e0000fe
-7f0000fe
-7f0000fc
-3f0001fc
-3f8001f8
-3f8001f8
-1f8003f8
-1fc003f0
-0fc003f0
-0fe007f0
-0fe007e0
-07e007e0
-07f00fe0
-07f00fc0
-03f00fc0
-03f81f80
-03f81f80
-01f81f80
-01fc3f00
-00fc3f00
-00fc3f00
-00fe7e00
-007e7e00
-007e7e00
-007ffc00
-003ffc00
-003ffc00
-003ff800
-001ff800
-001ff000
-001ff000
-000fe000
->
- ]
-/TT37859b00 AddT3T32Char
-T32RsrcEnd
-327 1252 M <04>S 
-363 1252 M <07>S  396 1252 M <1A>S  424 1252 M <07>S  457 1252 M <10>S  472 1252 M <1D>S  502 1252 M <07>S  
-536 1252 M <12>S 
-569 1252 M <13>S 
-603 1252 M <14>S  644 1252 M <15>S  687 1252 M <03>S  
-701 1252 M <16>S 
-721 1252 M <18>S 
-751 1252 M <0A>S  784 1252 M <01>S  822 1252 M <0A>S  855 1252 M <15>S  897 1252 M <18>S  928 1252 M <03>S  943 1252 M <13>S  977 1252 M <14>S  1018 1252 M <15>S  
-1060 1252 M <17>S 
-N 1019 1991 M 1019 2164 I 1093 2164 I 1093 1991 I 1019 1991 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1093 2164 M 1093 1991 I 1019 1991 I 1019 2164 I 1093 2164 I C 
-: 0.645 0.754 +S K 
-; N 1093 2164 M 1695 2164 I : 0.645 0.754 +S K 
-; N 1760 2164 M 1729 2185 I 1729 2142 I 1760 2164 I C 
-1729 2185 M 1760 2164 I 1729 2185 I C 
- O 10 Lw N 1760 2164 M 1729 2185 I 1729 2142 I 1760 2164 I : 0.645 0.754 +S K 
-; N 1729 2185 M 1760 2164 I : 0.645 0.754 +S K 
-; 6 Lw N 1729 2164 M 1677 2164 I : 0.645 0.754 +S K 
-; N 1250 2016 M 1250 2108 I 1603 2108 I 1603 2016 I 1250 2016 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1250 2085 M <18>S 
-1281 2085 M <07>S  1314 2085 M <0D>S  1349 2085 M <19>S  1384 2085 M <02>S  1440 2085 M <0C>S  1472 2085 M <1A>S  1500 2085 M <13>S  1534 2085 M <19>S  1569 2085 M <1B>S  
-LH
-%%PageTrailer
-
-%%Trailer
-%%DocumentNeededResources: 
-%%DocumentSuppliedResources: 
-%%+ procset Pscript_WinNT_VMErrorHandler 5.0 0
-%%+ procset Pscript_FatalError 5.0 0
-%%+ procset Pscript_Win_Basic 5.0 0
-%%+ procset Pscript_Win_Utils_L1 5.0 0
-%%+ procset Pscript_Win_GdiObject 5.0 0
-%%+ procset Pscript_Win_GdiObject_L1 5.0 0
-%%+ procset Pscript_T3Hdr 5.0 0
-%%+ procset Pscript_Text 5.0 0
-Pscript_WinNT_Incr dup /terminate get exec
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-data-txon-dl.dia ns-3.22/src/lte/doc/source/figures/lte-rlc-data-txon-dl.dia
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-data-txon-dl.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-data-txon-dl.dia	2015-02-05 15:46:23.000000000 -0800
@@ -0,0 +1,13 @@
+     ]MWtUGk/^ ^!gD(Hc{.nJDdӒL!cS^U1G`NnՋ/v.ry'6~'tƣG6O/%tyE$KgO,7Iӗng"?jqt<>&}i.Wγmz=K˹*~Hg맽GtHqHyώY5&{-/is]h)HvnGM7F H7C9븑pvڅͯlMt&5=q7ɘLl۰j(˦;C23?v(sogvQrOavw9G8-$kO͜~	5!?[{Tpp8fzLə]{c֜u'Olq^(N/Fݓӛl1߲d2Lf/ //WodwaI	(t_0a}T2u#܎%	h qojpp:NnfRЗa.E3YJ#,QXw.+
+iS@ ed5lv3 mM?]Įs\~aLe
+A]
+`"xJH"G4@Τqғp$jdΖEXE(XZ`G9R`Ya`Q#Xt,*AId}'O'!}|~ΞiHeHHsdecvLلqk駒Ӗ[:ɊhDדLyWIlt<~/$/Yt*ps-	O%>-M(¾(3X1\R8VI'Ŕ#+)NK$Ɍ#aRVɪmjӻwo1yhK*)AcS9vtjsBs M ,u"7ǯNo~󶓧Tj<<3;2-E?x-9[ :)?sLrq-p޻wS]9vt$-H
+NJsYqN*RaH;i	*fnU:Ugɡ&\A]n֯ުqi.XPՒS8nǞwޛ Ybᨖӻ#"-$>)/BoCwa]],mXf[i
+(X5Y"!F@!GN!ڶ?|HgWdvq6JggYhslR. (WErJX8<4ք4ySM{^}U%n jƵ(24F9x3XuOusvmT ĸ^	Hx/9TCd/ ;/^vud[xYUq<x?8s2 [}t8NgK'k׸*D<,"'$%Iz4Fgcƅ&:_"G5zcԿ_]Yf?])-S!>pX1Gkxd+)e亂qdWWpu G\XPF2gM(1q CdWqT Nqd0c:'	vŠC]d`<=(MFctŇbrՑ,%e3u$4jy}%vvhbhRqr:bZa2"Z:v"fG'Y$%zEFDg܋kT-r``ⲓ/<7RqeyE1]gvf:(n r(JE4 B9VBd7<MumIewϺ	[@XfF"`MfҩPmMiWl6Tˮ3_56u-ة1&	R3\R6ḱa?13}@FQ_BȒ_KiBQȨKjIdݱCDcxg O`Y2ߏw\nkҙ2*gZ)!d<ޝX	Q6Y9wU&nd#Sd
+D둭xB۳uN2ddןa:bk'M).lVS7QVtK< \:ŒSKm,o%܀8WB.:kK8-CoA[H*peK{b>xOuަ;v{}N7u3/Ing^Ko_i/K;*2Wn̝̙B:ڒ%BSrS|{^(4~]wwl^[vi02jbB&GRѯB %*ns&gi9D'5sgGc^I\c].b0G@-32kEԚFu.) +:$ݧb}i%9T݀cFe$]͑ڬTh	h`yҋHC	)b9"o7Y./-g$wHyxNA]8+(\{dԦ9dP3ڨygNw<.oWtmv'(B0)U9b{Rk_c58z3|m2촪*NNEM KNn\ u!gyC:v _{ymx^#s2E%;נ}B~^S{]֍	6q!K-uIt]A%.vZtř1cA:t8++uHK->Ŷڦ1P"+#R)J:o7ѳe,~ec;U4/5G7:M%adhuLчwK~.a&&%!ak8g9n:XgL((8pp'\8>k%9롐%w(hy`w
+P.r5ࣘҒ7BidN;*>	\ZDiI{[tSޓ #1z[xP~{Et'Аt*mH9bL$VwWK\H=#/"zK+K -ޤ%_BWQs]Kp:ovرn%,v=%E,vEE4ŋF^6Z|ţ- ={H/#ݙYЊr)Kd:חȄ-\Ydi!P)oE(eq%օrJ!'.nY:>ww i[9bZz'Jh`")	:rAΑ**E:,bk+m V&=ţ_	.n	,2k*h
+ݗ6>ÌĂRX+\R}߲vA,\y.nH1el^h1 +s
+urϚϯ߿	?wr+JL+: 6aG.wQ5~{QH8FY9ƕBqn_*¡-"#duqMU 	H)-
+p'z𱋌GFvمF]hB#s+euOY@*0W,-eZ2i+1;/j\j)m /905U3CO|rlU˨f .撄Df\#P	LqJ:\X~\G62>M74$<#UR`%x%蜲hIS2(TDA',Cy5KE0-R!?	R̭뾥|2!ihúL풬Mp[2)#ZbY
+ᷠ'Nis<}|L5śfcIltxLLȝxp݅Sݓ8
+^Vfbq6SXAxkq{$@Ti`aq#X+=KߏtEΒW/팆8  
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-data-txon-dl.eps ns-3.22/src/lte/doc/source/figures/lte-rlc-data-txon-dl.eps
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-data-txon-dl.eps	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-data-txon-dl.eps	1969-12-31 16:00:00.000000000 -0800
@@ -1,4311 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: 
-%%Creator: PScript5.dll Version 5.2.2
-%%CreationDate: 10/27/2011 11:54:21
-%%For: mrequena
-%%BoundingBox: 0 0 496 393
-%%Pages: 1
-%%Orientation: Portrait
-%%PageOrder: Ascend
-%%DocumentNeededResources: (atend)
-%%DocumentSuppliedResources: (atend)
-%%DocumentData: Clean7Bit
-%%TargetDevice: () (52.3) 320
-%%LanguageLevel: 1
-%%EndComments
-
-%%BeginDefaults
-%%PageBoundingBox: 0 0 496 393
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-
-%%BeginProlog
-%%BeginResource: file Pscript_WinNT_VMErrorHandler 5.0 0
-/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
-setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
-ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
-def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
-rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
-/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
-typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
-def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
-exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
-/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
-{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
-readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
-(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
-/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
-tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
-xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
-tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
-{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
-tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
-rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
-forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
-/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
-$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
-ne{grestoreall}if initgraphics courier setfont lmargin 720 moveto errorname
-(VMerror)eq{version cvi 2016 ge{userdict/ehsave known{clear userdict/ehsave get
-restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}if}if systemdict
-/showpage get exec(%%[ Error: )print errorname =print(; OffendingCommand: )
-print/command load =print( ]%%)= flush}if end end end}dup 0 systemdict put dup
-4 $brkpage put bind readonly put/currentpacking where{pop/setpacking where{pop
-oldpack setpacking}if}if
-%%EndResource
-%%BeginProcSet: Pscript_Res_Emul 5.0 0
-/defineresource where{pop}{userdict begin/defineresource{userdict/Resources 2
-copy known{get begin}{15 dict dup begin put}ifelse exch readonly exch
-currentdict 1 index known not{dup 30 dict def}if load 3 -1 roll 2 index put
-end}bind readonly def/findresource{userdict/Resources get exch get exch get}
-bind readonly def/resourceforall{pop pop pop pop}bind readonly def
-/resourcestatus{userdict/Resources 2 copy known{get exch 2 copy known{get exch
-known{0 -1 true}{false}ifelse}{pop pop pop false}ifelse}{pop pop pop pop false}
-ifelse}bind readonly def end}ifelse
-%%EndProcSet
-userdict /Pscript_WinNT_Incr 230 dict dup begin put
-%%BeginResource: file Pscript_FatalError 5.0 0
-userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup
-length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding
-{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end
-/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div
-cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end
-%%EndResource
-userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[
-(La impresora no tiene suficiente memoria disponible para este trabajo.)100 500
-(Realice una de las siguientes operaciones e intente imprimir de nuevo:)100 485
-(Escoja "Optimizar para portabilidad" como formato de salida.)115 470
-(En el panel Configuracin de dispositivo, compruebe que "Memoria PostScript disponible" tiene el valor correcto.)
-115 455(Reduzca el nmero de fuentes del documento.)115 440
-(Imprima el documento por partes.)115 425 12/Times-Roman showpage
-(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end
-version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse
-%%BeginResource: file Pscript_Win_Basic 5.0 0
-/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
-/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
-/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
-d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
-/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
-/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
-/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
-, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop
-languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,
-d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld
-/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix
-currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit
-counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b
-/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~
-d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put
-/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq
-{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `
-/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped
-{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}
-{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~
-itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5
-ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform
-nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -
-neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0
-- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool
-2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e
-{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
-/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont
-{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1
-dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d
-E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1
-^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2
-16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}
-bind d
-%%EndResource
-%%BeginResource: file Pscript_Win_Utils_L1 5.0 0
-/rf{N rp L}b/fx{1 1 dtransform @ 0 ge{1 sub 1}{1 add -0.25}? 3 -1 $ @ 0 ge{1
-sub 1}{1 add -0.25}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
-snap + +S fx rf}b/rs{N rp C K}b/rc{N rp clip N}b/UtilsInit{}b/setcolorspace{!}b
-/scol{[/setgray/setrgbcolor/setcolor/setcmykcolor/setcolor/setgray]~ get cvx
-exec}b/colspRefresh{}b/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo
-{/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d
-/AddFontInfoEnd{E d}bind d
-%%EndResource
-end
-%%EndProlog
-
-%%BeginSetup
-[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
-1 setlinecap 1 setlinejoin
-/mysetup [ 72 600 V 0 0 -72 600 V 0 392.88189 ] def 
-%%EndSetup
-
-%%Page: 1 1
-%%PageBoundingBox: 0 0 496 393
-%%EndPageComments
-%%BeginPageSetup
-/DeviceRGB dup setcolorspace /colspABC exch def
-mysetup concat colspRefresh
-%%EndPageSetup
-
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Win_GdiObject 5.0 0
-/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
-{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
-/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
-L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
-1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
-/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
-{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
-gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
-/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
-MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
-M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
-+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
-/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
-GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
-/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
-makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
-/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $
-/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt
-~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0
-0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b
-/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +
-: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~
-XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S
-GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix
-currentmatrix readonly d ; ;}if}b
-%%EndResource
-%%BeginResource: file Pscript_Win_GdiObject_L1 5.0 0
-/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 2 d/RepsV 6 d/RepsH 5 d
-/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d
-/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d
-/SetBGndFGnd{}b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx PaintData
-imagemask Width 0 +}repeat E}b E d/GDIpattfill{@ ` BGnd null ne PaintType 2 eq
-and{: BGnd aload ! scol fEOFill{O}{L}? ; FGnd aload ! U/iCol 2 ^ put @ 0 eq{!
-2}{@ 1 eq ~ 2 eq or{4}{5}?}? -1 $}if E @ patterncalc : 4 ^/PaintType get 2 eq
-{iCol 0 eq{6 -1 $}if iCol 1 eq iCol 2 eq or{8 -3 $}if iCol 3 eq iCol 4 eq or{9
--4 $}if iCol scol}if fEOFill{eoclip}{clip}? N patternfill ; N}b/hbf
-{GDIpattfill}b/hfMain{/fEOFill ~ d ~/iCol ~ d GDIpattfill}b/hf{: hfMain ;}b
-/mpstr 1 string d/mp{~ @ length 12 add dict copy `/PatternCTM matrix
-currentmatrix d/PatternMatrix ~ d/PatWidth XStep mpstr length mul d/PatHeight
-YStep d/FontType 3 d/Encoding 256 array d 3 string 0 1 255{Encoding ~ @ 3 ^ cvs
-cvn put}for !/FontMatrix matrix d/FontBBox BBox d/BuildChar{! @ ` XStep 0
-FontBBox aload ! setcachedevice/PaintProc , E : exec ;}b & E ~ @ 3 -1 $
-definefont}b/build_pattern{: GDIBWPatternDict ` Width Height E dsnap +S
-/GDIBWPatternMx matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix
-GDIBWPatternDict @ ` xOrg yOrg E matrix + mp CTMrestore}b/patterncalc{` :
-PatternCTM setmatrix PatternMatrix concat BBox aload ! ! ! + pathbbox ;
-PatHeight V ceiling 4 1 $ PatWidth V ceiling 4 1 $ PatHeight V floor 4 1 $
-PatWidth V floor 4 1 $ 2 ^ sub cvi abs ~ 3 ^ sub cvi abs ~ 4 2 $ PatHeight mul
-~ PatWidth mul ~ E}b/patternfill{5 -1 $ @ ` Ji PatternCTM setmatrix
-PatternMatrix concat 0 2 ^ 2 ^ M 0 1 mpstr length 1 sub{1 ^ mpstr 3 1 $ put}for
-! 2 ^{currentpoint 5 ^{mpstr S}repeat YStep add M}repeat ! ! ! ! E}b/pbf{: 14
-dict `/fGray ~ d/fEOFill ~ d/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d
-/Height ~ d/Width ~ d/mx xOrg yOrg matrix + d fGray{/PaintProc{` Width Height
-OutputBPP mx PaintData image E}b}{/PaintProc{` Width Height 8 mx PaintData F
-OutputBPP 8 idiv colorimage E}b}? pathbbox fEOFill{eoclip}{clip}?/Top ~ d/Right
-~ d/Bottom ~ d/Left ~ d Top Height neg Bottom 1 sub{Left Width Right 1 sub{1 ^
-2 copy + & PaintProc neg ~ neg ~ +}bind for !}bind for E ;}b
-%%EndResource
-end reinitialize
-0 0 0 1 scol N 417 3262 M 417 3231 I 418 3229 I 419 3228 I 420 3229 I 421 3231 I 421 3262 I 420 3263 I 419 3264 I 418 3263 I 417 3262 I 417 3262 I C 
-417 3209 M 417 3178 I 418 3176 I 419 3176 I 420 3176 I 421 3178 I 421 3209 I 420 3210 I 419 3211 I 418 3210 I 417 3209 I 417 3209 I C 
-417 3155 M 417 3124 I 418 3123 I 419 3122 I 420 3123 I 421 3124 I 421 3155 I 420 3157 I 419 3157 I 418 3157 I 417 3155 I 417 3155 I C 
-417 3102 M 417 3071 I 418 3070 I 419 3069 I 420 3070 I 421 3071 I 421 3102 I 420 3104 I 419 3105 I 418 3104 I 417 3102 I 417 3102 I C 
-417 3049 M 417 3018 I 418 3016 I 419 3016 I 420 3016 I 421 3018 I 421 3049 I 420 3050 I 419 3051 I 418 3050 I 417 3049 I 417 3049 I C 
-417 2995 M 417 2964 I 418 2963 I 419 2962 I 420 2963 I 421 2964 I 421 2995 I 420 2998 I 419 2998 I 418 2998 I 417 2995 I 417 2995 I C 
-417 2943 M 417 2911 I 418 2910 I 419 2909 I 420 2910 I 421 2911 I 421 2943 I 420 2944 I 419 2945 I 418 2944 I 417 2943 I 417 2943 I C 
-417 2889 M 417 2858 I 418 2856 I 419 2856 I 420 2856 I 421 2858 I 421 2889 I 420 2890 I 419 2891 I 418 2890 I 417 2889 I 417 2889 I C 
-417 2836 M 417 2805 I 418 2804 I 419 2803 I 420 2804 I 421 2805 I 421 2836 I 420 2838 I 419 2838 I 418 2838 I 417 2836 I 417 2836 I C 
-417 2783 M 417 2751 I 418 2750 I 419 2749 I 420 2750 I 421 2751 I 421 2783 I 420 2784 I 419 2785 I 418 2784 I 417 2783 I 417 2783 I C 
-417 2730 M 417 2699 I 418 2697 I 419 2696 I 420 2697 I 421 2699 I 421 2730 I 420 2731 I 419 2732 I 418 2731 I 417 2730 I 417 2730 I C 
-417 2676 M 417 2645 I 418 2644 I 419 2643 I 420 2644 I 421 2645 I 421 2676 I 420 2678 I 419 2678 I 418 2678 I 417 2676 I 417 2676 I C 
-417 2623 M 417 2591 I 418 2590 I 419 2589 I 420 2590 I 421 2591 I 421 2623 I 420 2625 I 419 2625 I 418 2625 I 417 2623 I 417 2623 I C 
-417 2570 M 417 2539 I 418 2537 I 419 2536 I 420 2537 I 421 2539 I 421 2570 I 420 2571 I 419 2572 I 418 2571 I 417 2570 I 417 2570 I C 
-417 2516 M 417 2485 I 418 2484 I 419 2483 I 420 2484 I 421 2485 I 421 2516 I 420 2518 I 419 2518 I 418 2518 I 417 2516 I 417 2516 I C 
-417 2463 M 417 2432 I 418 2431 I 419 2430 I 420 2431 I 421 2432 I 421 2463 I 420 2465 I 419 2465 I 418 2465 I 417 2463 I 417 2463 I C 
-417 2410 M 417 2379 I 418 2377 I 419 2376 I 420 2377 I 421 2379 I 421 2410 I 420 2411 I 419 2412 I 418 2411 I 417 2410 I 417 2410 I C 
-417 2357 M 417 2326 I 418 2324 I 419 2324 I 420 2324 I 421 2326 I 421 2357 I 420 2358 I 419 2359 I 418 2358 I 417 2357 I 417 2357 I C 
-417 2303 M 417 2272 I 418 2271 I 419 2270 I 420 2271 I 421 2272 I 421 2303 I 420 2305 I 419 2306 I 418 2305 I 417 2303 I 417 2303 I C 
-417 2250 M 417 2219 I 418 2217 I 419 2216 I 420 2217 I 421 2219 I 421 2250 I 420 2252 I 419 2252 I 418 2252 I 417 2250 I 417 2250 I C 
-417 2197 M 417 2166 I 418 2164 I 419 2164 I 420 2164 I 421 2166 I 421 2197 I 420 2198 I 419 2199 I 418 2198 I 417 2197 I 417 2197 I C 
-417 2143 M 417 2112 I 418 2111 I 419 2110 I 420 2111 I 421 2112 I 421 2143 I 420 2145 I 419 2146 I 418 2145 I 417 2143 I 417 2143 I C 
-417 2091 M 417 2059 I 418 2058 I 419 2057 I 420 2058 I 421 2059 I 421 2091 I 420 2092 I 419 2093 I 418 2092 I 417 2091 I 417 2091 I C 
-417 2037 M 417 2006 I 418 2004 I 419 2004 I 420 2004 I 421 2006 I 421 2037 I 420 2038 I 419 2039 I 418 2038 I 417 2037 I 417 2037 I C 
-417 1983 M 417 1953 I 418 1952 I 419 1951 I 420 1952 I 421 1953 I 421 1983 I 420 1986 I 419 1986 I 418 1986 I 417 1983 I 417 1983 I C 
-417 1931 M 417 1899 I 418 1898 I 419 1897 I 420 1898 I 421 1899 I 421 1931 I 420 1932 I 419 1933 I 418 1932 I 417 1931 I 417 1931 I C 
-417 1877 M 417 1846 I 418 1844 I 419 1844 I 420 1844 I 421 1846 I 421 1877 I 420 1879 I 419 1879 I 418 1879 I 417 1877 I 417 1877 I C 
-417 1824 M 417 1793 I 418 1792 I 419 1791 I 420 1792 I 421 1793 I 421 1824 I 420 1826 I 419 1826 I 418 1826 I 417 1824 I 417 1824 I C 
-417 1771 M 417 1739 I 418 1738 I 419 1737 I 420 1738 I 421 1739 I 421 1771 I 420 1772 I 419 1773 I 418 1772 I 417 1771 I 417 1771 I C 
-417 1718 M 417 1687 I 418 1685 I 419 1684 I 420 1685 I 421 1687 I 421 1718 I 420 1719 I 419 1720 I 418 1719 I 417 1718 I 417 1718 I C 
-417 1664 M 417 1633 I 418 1632 I 419 1631 I 420 1632 I 421 1633 I 421 1664 I 420 1666 I 419 1666 I 418 1666 I 417 1664 I 417 1664 I C 
-417 1611 M 417 1580 I 418 1579 I 419 1578 I 420 1579 I 421 1580 I 421 1611 I 420 1613 I 419 1614 I 418 1613 I 417 1611 I 417 1611 I C 
-417 1558 M 417 1527 I 418 1525 I 419 1524 I 420 1525 I 421 1527 I 421 1558 I 420 1559 I 419 1560 I 418 1559 I 417 1558 I 417 1558 I C 
-417 1504 M 417 1473 I 418 1472 I 419 1471 I 420 1472 I 421 1473 I 421 1504 I 420 1506 I 419 1506 I 418 1506 I 417 1504 I 417 1504 I C 
-417 1451 M 417 1420 I 418 1419 I 419 1418 I 420 1419 I 421 1420 I 421 1451 I 420 1453 I 419 1454 I 418 1453 I 417 1451 I 417 1451 I C 
-417 1398 M 417 1367 I 418 1365 I 419 1364 I 420 1365 I 421 1367 I 421 1398 I 420 1399 I 419 1400 I 418 1399 I 417 1398 I 417 1398 I C 
-417 1345 M 417 1314 I 418 1312 I 419 1312 I 420 1312 I 421 1314 I 421 1345 I 420 1346 I 419 1347 I 418 1346 I 417 1345 I 417 1345 I C 
-417 1291 M 417 1260 I 418 1259 I 419 1258 I 420 1259 I 421 1260 I 421 1291 I 420 1293 I 419 1294 I 418 1293 I 417 1291 I 417 1291 I C 
-417 1238 M 417 1207 I 418 1205 I 419 1205 I 420 1205 I 421 1207 I 421 1238 I 420 1240 I 419 1241 I 418 1240 I 417 1238 I 417 1238 I C 
-417 1185 M 417 1154 I 418 1152 I 419 1152 I 420 1152 I 421 1154 I 421 1185 I 420 1186 I 419 1187 I 418 1186 I 417 1185 I 417 1185 I C 
-417 1131 M 417 1100 I 418 1099 I 419 1098 I 420 1099 I 421 1100 I 421 1131 I 420 1134 I 419 1134 I 418 1134 I 417 1131 I 417 1131 I C 
-417 1079 M 417 1047 I 418 1046 I 419 1045 I 420 1046 I 421 1047 I 421 1079 I 420 1080 I 419 1081 I 418 1080 I 417 1079 I 417 1079 I C 
-417 1025 M 417 994 I 418 992 I 419 992 I 420 992 I 421 994 I 421 1025 I 420 1026 I 419 1027 I 418 1026 I 417 1025 I 417 1025 I C 
-417 972 M 417 941 I 418 940 I 419 939 I 420 940 I 421 941 I 421 972 I 420 974 I 419 974 I 418 974 I 417 972 I 417 972 I C 
-417 919 M 417 887 I 418 886 I 419 885 I 420 886 I 421 887 I 421 919 I 420 920 I 419 921 I 418 920 I 417 919 I 417 919 I C 
-417 865 M 417 835 I 418 832 I 419 832 I 420 832 I 421 835 I 421 865 I 420 867 I 419 868 I 418 867 I 417 865 I 417 865 I C 
-417 812 M 417 781 I 418 780 I 419 779 I 420 780 I 421 781 I 421 812 I 420 814 I 419 814 I 418 814 I 417 812 I 417 812 I C 
-417 759 M 417 728 I 418 726 I 419 725 I 420 726 I 421 728 I 421 759 I 420 761 I 419 761 I 418 761 I 417 759 I 417 759 I C 
-417 706 M 417 675 I 418 673 I 419 672 I 420 673 I 421 675 I 421 706 I 420 707 I 419 708 I 418 707 I 417 706 I 417 706 I C 
-417 652 M 417 621 I 418 620 I 419 619 I 420 620 I 421 621 I 421 652 I 420 654 I 419 654 I 418 654 I 417 652 I 417 652 I C 
-417 599 M 417 568 I 418 567 I 419 566 I 420 567 I 421 568 I 421 599 I 420 601 I 419 602 I 418 601 I 417 599 I 417 599 I C 
-417 546 M 417 515 I 418 513 I 419 513 I 420 513 I 421 515 I 421 546 I 420 547 I 419 548 I 418 547 I 417 546 I 417 546 I C 
-417 492 M 417 462 I 418 460 I 419 459 I 420 460 I 421 462 I 421 492 I 420 494 I 419 495 I 418 494 I 417 492 I 417 492 I C 
-417 439 M 417 408 I 418 407 I 419 406 I 420 407 I 421 408 I 421 439 I 420 441 I 419 442 I 418 441 I 417 439 I 417 439 I C 
-417 386 M 417 355 I 418 353 I 419 353 I 420 353 I 421 355 I 421 386 I 420 388 I 419 388 I 418 388 I 417 386 I 417 386 I C 
-417 333 M 417 302 I 418 300 I 419 300 I 420 300 I 421 302 I 421 333 I 420 334 I 419 335 I 418 334 I 417 333 I 417 333 I C 
-417 279 M 417 248 I 418 247 I 419 246 I 420 247 I 421 248 I 421 279 I 420 281 I 419 282 I 418 281 I 417 279 I 417 279 I C 
-:  L ; K 
-N 191 12 M 191 246 I 647 246 I 647 12 I 191 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1 Lj 1 Lc 6 Lw solid N 191 246 M 647 246 I 647 12 I 191 12 I 191 246 I C 
-: 0.66 0.723 +S K 
-; Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_T3Hdr 5.0 0
-{version cvi 2016 ge{32/FontType resourcestatus{pop pop true}{false}ifelse}
-{false}ifelse}exec/Is2016andT32? exch def/T32DefSBCMap{/CIDInit/ProcSet
-findresource begin 10 dict begin begincmap/CIDSystemInfo 3 dict dup begin
-/Registry(Adobe)def/Ordering(Identity1)def/Supplement 0 def end def/CMapType 0
-def/WMode 0 def 1 begincodespacerange<00><ff>endcodespacerange 1 begincidrange
-<00><ff>0 endcidrange endcmap/DrvSBCMap currentdict/CMap defineresource pop end
-end}bind def Is2016andT32?{T32DefSBCMap}def/T32RsrcBegin{Is2016andT32?{
-/BitmapFontInit/ProcSet findresource begin}if}bind def/T32RsrcEnd{Is2016andT32?
-{end}if}bind def/AddT32Char{6 1 roll 0 get 7 1 roll pop pop 5 1 roll pop
-findfont/TT32R get addglyph}bind def/AddT3Char{findfont dup 5 2 roll 1 index
-length 0 gt{cvx 1 index exch 4 exch put dup(imagemask)cvx cvn 5 exch put cvx}
-{pop cvx}ifelse 3 -1 roll/CharProcs get 3 1 roll put dup/Encoding get 5 -1 roll
-4 index put/Metrics get 3 1 roll put}bind def/AddT3T32Char Is2016andT32?{
-/AddT32Char}{/AddT3Char}ifelse load def/GreNewFontT32{5 dict begin exch
-/FontMatrix exch def exch/FontBBox exch def exch pop exch pop/CIDFontType 4 def
-dup currentdict end/CIDFont defineresource 3 -1 roll dup/DrvSBCMap dup/CMap
-resourcestatus{pop pop}{T32DefSBCMap}ifelse 5 -1 roll[exch]composefont dup
-length dict copy dup/FID undef begin exch/TT32R exch def currentdict end
-definefont/BitmapFontInit/ProcSet findresource begin/TT32R get[14 0 0 0 0 0]<>0
-4 -1 roll addglyph end}bind def/GreNewFontT3{11 dict begin pop/FontType 3 def
-/FontMatrix exch def/FontBBox exch def/Encoding exch def/CharProcs 257 dict def
-CharProcs/.notdef{}put/Metrics 257 dict def Metrics/.notdef 3 -1 roll put
-AddFontInfoBegin AddFontInfo AddFontInfoEnd/BuildChar{userdict begin/char exch
-def dup/charname exch/Encoding get char get def dup/Metrics get charname 2 copy
-known{get aload pop}{pop/.notdef get aload pop}ifelse setcachedevice begin
-Encoding char get CharProcs exch 2 copy known{get}{pop/.notdef get}ifelse end
-exec end}def currentdict end definefont pop}bind def/GreNewFont{Is2016andT32?
-{GreNewFontT32}{GreNewFontT3}ifelse}bind def/UDF3{Is2016andT32?{/BitmapFontInit
-/ProcSet findresource begin dup/CIDFont findresource removeall/CIDFont
-undefineresource undefinefont end}{pop UDF}ifelse}bind def
-%%EndResource
-end reinitialize
-/TT37845b00
-[73 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 73 div 0 0 -1 73 div 0 0 ]
-/__TT37845b00
-GreNewFont
-T32RsrcBegin
-
-1
-/g90 [40 0 6 -47 37 0 ] 
-/g90 [31 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffc000
-fffff800
-fffffe00
-ffffff00
-ffffff80
-fc00ffc0
-fc003fe0
-fc001fe0
-fc000fe0
-fc000ff0
-fc0007f0
-fc0007f0
-fc0007f0
-fc0007f0
-fc0007f0
-fc0007f0
-fc000fe0
-fc000fe0
-fc001fe0
-fc003fc0
-fc00ff80
-ffffff00
-fffffe00
-fffff800
-fffff000
-fffff800
-fc07fc00
-fc01fe00
-fc00ff00
-fc007f00
-fc003f80
-fc003f80
-fc001fc0
-fc001fc0
-fc000fe0
-fc000fe0
-fc0007e0
-fc0007f0
-fc0007f0
-fc0003f8
-fc0003f8
-fc0001f8
-fc0001fc
-fc0001fc
-fc0000fe
-fc0000fe
-fc00007e
->
- ]
-/TT37845b00 AddT3T32Char
-
-2
-/g18 [39 0 4 -48 37 1 ] 
-/g18 [33 49 true [1 0 0 1 -4 48 ]  0 0]
-[<0001ff0000
-000fffe000
-003ffff800
-007ffffe00
-00ffffff00
-01ff80ff80
-03fe001f80
-07f8000f80
-0ff0000380
-0fe0000180
-1fc0000000
-1fc0000000
-3f80000000
-3f80000000
-7f80000000
-7f00000000
-7f00000000
-7f00000000
-7f00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-ff00000000
-7f00000000
-7f00000000
-7f00000000
-7f80000000
-3f80000000
-3fc0000000
-1fc0000000
-1fe0000000
-0ff0000180
-0ff8000780
-07fc001f80
-03ff807f80
-01ffffff80
-00ffffff00
-007ffffc00
-001ffff000
-0001ff0000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Text 5.0 0
-/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
-/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
-length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
-{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
-/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
-if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
-{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
-StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
-! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy
-put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM
-makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0
-Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N
-/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT
-{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d
-/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `
-/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d
-/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont
-Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1
-add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E
-/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $
-FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255
-idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector
-Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding
-length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2
-add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs
-putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^
-256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E
-/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~
-definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix
-makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ !
-findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?
-{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
-get undefinefont}forall undefinefont}b
-%%EndResource
-end reinitialize
-F /F0 0 /0 F /TT37845b00 mF 
-/F0S49 F0 [73.957 0 0 -73.957 0 0 ] mFS
-F0S49 Ji 
-364 151 M <01>S 
-401 151 M <01>S  437 151 M <02>S  
-7 Lw N 364 160 M 474 160 I : 0.66 0.723 +S K 
-; 1 Lw solid N 1136 3262 M 1136 3231 I 1137 3229 I 1138 3228 I 1139 3229 I 1140 3231 I 1140 3262 I 1139 3263 I 1138 3264 I 1137 3263 I 1136 3262 I 1136 3262 I C 
-1136 3209 M 1136 3178 I 1137 3176 I 1138 3176 I 1139 3176 I 1140 3178 I 1140 3209 I 1139 3210 I 1138 3211 I 1137 3210 I 1136 3209 I 1136 3209 I C 
-1136 3155 M 1136 3124 I 1137 3123 I 1138 3122 I 1139 3123 I 1140 3124 I 1140 3155 I 1139 3157 I 1138 3157 I 1137 3157 I 1136 3155 I 1136 3155 I C 
-1136 3102 M 1136 3071 I 1137 3070 I 1138 3069 I 1139 3070 I 1140 3071 I 1140 3102 I 1139 3104 I 1138 3105 I 1137 3104 I 1136 3102 I 1136 3102 I C 
-1136 3049 M 1136 3018 I 1137 3016 I 1138 3016 I 1139 3016 I 1140 3018 I 1140 3049 I 1139 3050 I 1138 3051 I 1137 3050 I 1136 3049 I 1136 3049 I C 
-1136 2995 M 1136 2964 I 1137 2963 I 1138 2962 I 1139 2963 I 1140 2964 I 1140 2995 I 1139 2998 I 1138 2998 I 1137 2998 I 1136 2995 I 1136 2995 I C 
-1136 2943 M 1136 2911 I 1137 2910 I 1138 2909 I 1139 2910 I 1140 2911 I 1140 2943 I 1139 2944 I 1138 2945 I 1137 2944 I 1136 2943 I 1136 2943 I C 
-1136 2889 M 1136 2858 I 1137 2856 I 1138 2856 I 1139 2856 I 1140 2858 I 1140 2889 I 1139 2890 I 1138 2891 I 1137 2890 I 1136 2889 I 1136 2889 I C 
-1136 2836 M 1136 2805 I 1137 2804 I 1138 2803 I 1139 2804 I 1140 2805 I 1140 2836 I 1139 2838 I 1138 2838 I 1137 2838 I 1136 2836 I 1136 2836 I C 
-1136 2783 M 1136 2751 I 1137 2750 I 1138 2749 I 1139 2750 I 1140 2751 I 1140 2783 I 1139 2784 I 1138 2785 I 1137 2784 I 1136 2783 I 1136 2783 I C 
-1136 2730 M 1136 2699 I 1137 2697 I 1138 2696 I 1139 2697 I 1140 2699 I 1140 2730 I 1139 2731 I 1138 2732 I 1137 2731 I 1136 2730 I 1136 2730 I C 
-1136 2676 M 1136 2645 I 1137 2644 I 1138 2643 I 1139 2644 I 1140 2645 I 1140 2676 I 1139 2678 I 1138 2678 I 1137 2678 I 1136 2676 I 1136 2676 I C 
-1136 2623 M 1136 2591 I 1137 2590 I 1138 2589 I 1139 2590 I 1140 2591 I 1140 2623 I 1139 2625 I 1138 2625 I 1137 2625 I 1136 2623 I 1136 2623 I C 
-1136 2570 M 1136 2539 I 1137 2537 I 1138 2536 I 1139 2537 I 1140 2539 I 1140 2570 I 1139 2571 I 1138 2572 I 1137 2571 I 1136 2570 I 1136 2570 I C 
-1136 2516 M 1136 2485 I 1137 2484 I 1138 2483 I 1139 2484 I 1140 2485 I 1140 2516 I 1139 2518 I 1138 2518 I 1137 2518 I 1136 2516 I 1136 2516 I C 
-1136 2463 M 1136 2432 I 1137 2431 I 1138 2430 I 1139 2431 I 1140 2432 I 1140 2463 I 1139 2465 I 1138 2465 I 1137 2465 I 1136 2463 I 1136 2463 I C 
-1136 2410 M 1136 2379 I 1137 2377 I 1138 2376 I 1139 2377 I 1140 2379 I 1140 2410 I 1139 2411 I 1138 2412 I 1137 2411 I 1136 2410 I 1136 2410 I C 
-1136 2357 M 1136 2326 I 1137 2324 I 1138 2324 I 1139 2324 I 1140 2326 I 1140 2357 I 1139 2358 I 1138 2359 I 1137 2358 I 1136 2357 I 1136 2357 I C 
-1136 2303 M 1136 2272 I 1137 2271 I 1138 2270 I 1139 2271 I 1140 2272 I 1140 2303 I 1139 2305 I 1138 2306 I 1137 2305 I 1136 2303 I 1136 2303 I C 
-1136 2250 M 1136 2219 I 1137 2217 I 1138 2216 I 1139 2217 I 1140 2219 I 1140 2250 I 1139 2252 I 1138 2252 I 1137 2252 I 1136 2250 I 1136 2250 I C 
-1136 2197 M 1136 2166 I 1137 2164 I 1138 2164 I 1139 2164 I 1140 2166 I 1140 2197 I 1139 2198 I 1138 2199 I 1137 2198 I 1136 2197 I 1136 2197 I C 
-1136 2143 M 1136 2112 I 1137 2111 I 1138 2110 I 1139 2111 I 1140 2112 I 1140 2143 I 1139 2145 I 1138 2146 I 1137 2145 I 1136 2143 I 1136 2143 I C 
-1136 2091 M 1136 2059 I 1137 2058 I 1138 2057 I 1139 2058 I 1140 2059 I 1140 2091 I 1139 2092 I 1138 2093 I 1137 2092 I 1136 2091 I 1136 2091 I C 
-1136 2037 M 1136 2006 I 1137 2004 I 1138 2004 I 1139 2004 I 1140 2006 I 1140 2037 I 1139 2038 I 1138 2039 I 1137 2038 I 1136 2037 I 1136 2037 I C 
-1136 1983 M 1136 1953 I 1137 1952 I 1138 1951 I 1139 1952 I 1140 1953 I 1140 1983 I 1139 1986 I 1138 1986 I 1137 1986 I 1136 1983 I 1136 1983 I C 
-1136 1931 M 1136 1899 I 1137 1898 I 1138 1897 I 1139 1898 I 1140 1899 I 1140 1931 I 1139 1932 I 1138 1933 I 1137 1932 I 1136 1931 I 1136 1931 I C 
-1136 1877 M 1136 1846 I 1137 1844 I 1138 1844 I 1139 1844 I 1140 1846 I 1140 1877 I 1139 1879 I 1138 1879 I 1137 1879 I 1136 1877 I 1136 1877 I C 
-1136 1824 M 1136 1793 I 1137 1792 I 1138 1791 I 1139 1792 I 1140 1793 I 1140 1824 I 1139 1826 I 1138 1826 I 1137 1826 I 1136 1824 I 1136 1824 I C 
-1136 1771 M 1136 1739 I 1137 1738 I 1138 1737 I 1139 1738 I 1140 1739 I 1140 1771 I 1139 1772 I 1138 1773 I 1137 1772 I 1136 1771 I 1136 1771 I C 
-1136 1718 M 1136 1687 I 1137 1685 I 1138 1684 I 1139 1685 I 1140 1687 I 1140 1718 I 1139 1719 I 1138 1720 I 1137 1719 I 1136 1718 I 1136 1718 I C 
-1136 1664 M 1136 1633 I 1137 1632 I 1138 1631 I 1139 1632 I 1140 1633 I 1140 1664 I 1139 1666 I 1138 1666 I 1137 1666 I 1136 1664 I 1136 1664 I C 
-1136 1611 M 1136 1580 I 1137 1579 I 1138 1578 I 1139 1579 I 1140 1580 I 1140 1611 I 1139 1613 I 1138 1614 I 1137 1613 I 1136 1611 I 1136 1611 I C 
-1136 1558 M 1136 1527 I 1137 1525 I 1138 1524 I 1139 1525 I 1140 1527 I 1140 1558 I 1139 1559 I 1138 1560 I 1137 1559 I 1136 1558 I 1136 1558 I C 
-1136 1504 M 1136 1473 I 1137 1472 I 1138 1471 I 1139 1472 I 1140 1473 I 1140 1504 I 1139 1506 I 1138 1506 I 1137 1506 I 1136 1504 I 1136 1504 I C 
-1136 1451 M 1136 1420 I 1137 1419 I 1138 1418 I 1139 1419 I 1140 1420 I 1140 1451 I 1139 1453 I 1138 1454 I 1137 1453 I 1136 1451 I 1136 1451 I C 
-1136 1398 M 1136 1367 I 1137 1365 I 1138 1364 I 1139 1365 I 1140 1367 I 1140 1398 I 1139 1399 I 1138 1400 I 1137 1399 I 1136 1398 I 1136 1398 I C 
-1136 1345 M 1136 1314 I 1137 1312 I 1138 1312 I 1139 1312 I 1140 1314 I 1140 1345 I 1139 1346 I 1138 1347 I 1137 1346 I 1136 1345 I 1136 1345 I C 
-1136 1291 M 1136 1260 I 1137 1259 I 1138 1258 I 1139 1259 I 1140 1260 I 1140 1291 I 1139 1293 I 1138 1294 I 1137 1293 I 1136 1291 I 1136 1291 I C 
-1136 1238 M 1136 1207 I 1137 1205 I 1138 1205 I 1139 1205 I 1140 1207 I 1140 1238 I 1139 1240 I 1138 1241 I 1137 1240 I 1136 1238 I 1136 1238 I C 
-1136 1185 M 1136 1154 I 1137 1152 I 1138 1152 I 1139 1152 I 1140 1154 I 1140 1185 I 1139 1186 I 1138 1187 I 1137 1186 I 1136 1185 I 1136 1185 I C 
-1136 1131 M 1136 1100 I 1137 1099 I 1138 1098 I 1139 1099 I 1140 1100 I 1140 1131 I 1139 1134 I 1138 1134 I 1137 1134 I 1136 1131 I 1136 1131 I C 
-1136 1079 M 1136 1047 I 1137 1046 I 1138 1045 I 1139 1046 I 1140 1047 I 1140 1079 I 1139 1080 I 1138 1081 I 1137 1080 I 1136 1079 I 1136 1079 I C 
-1136 1025 M 1136 994 I 1137 992 I 1138 992 I 1139 992 I 1140 994 I 1140 1025 I 1139 1026 I 1138 1027 I 1137 1026 I 1136 1025 I 1136 1025 I C 
-1136 972 M 1136 941 I 1137 940 I 1138 939 I 1139 940 I 1140 941 I 1140 972 I 1139 974 I 1138 974 I 1137 974 I 1136 972 I 1136 972 I C 
-1136 919 M 1136 887 I 1137 886 I 1138 885 I 1139 886 I 1140 887 I 1140 919 I 1139 920 I 1138 921 I 1137 920 I 1136 919 I 1136 919 I C 
-1136 865 M 1136 835 I 1137 832 I 1138 832 I 1139 832 I 1140 835 I 1140 865 I 1139 867 I 1138 868 I 1137 867 I 1136 865 I 1136 865 I C 
-1136 812 M 1136 781 I 1137 780 I 1138 779 I 1139 780 I 1140 781 I 1140 812 I 1139 814 I 1138 814 I 1137 814 I 1136 812 I 1136 812 I C 
-1136 759 M 1136 728 I 1137 726 I 1138 725 I 1139 726 I 1140 728 I 1140 759 I 1139 761 I 1138 761 I 1137 761 I 1136 759 I 1136 759 I C 
-1136 706 M 1136 675 I 1137 673 I 1138 672 I 1139 673 I 1140 675 I 1140 706 I 1139 707 I 1138 708 I 1137 707 I 1136 706 I 1136 706 I C 
-1136 652 M 1136 621 I 1137 620 I 1138 619 I 1139 620 I 1140 621 I 1140 652 I 1139 654 I 1138 654 I 1137 654 I 1136 652 I 1136 652 I C 
-1136 599 M 1136 568 I 1137 567 I 1138 566 I 1139 567 I 1140 568 I 1140 599 I 1139 601 I 1138 602 I 1137 601 I 1136 599 I 1136 599 I C 
-1136 546 M 1136 515 I 1137 513 I 1138 513 I 1139 513 I 1140 515 I 1140 546 I 1139 547 I 1138 548 I 1137 547 I 1136 546 I 1136 546 I C 
-1136 492 M 1136 462 I 1137 460 I 1138 459 I 1139 460 I 1140 462 I 1140 492 I 1139 494 I 1138 495 I 1137 494 I 1136 492 I 1136 492 I C 
-1136 439 M 1136 408 I 1137 407 I 1138 406 I 1139 407 I 1140 408 I 1140 439 I 1139 441 I 1138 442 I 1137 441 I 1136 439 I 1136 439 I C 
-1136 386 M 1136 355 I 1137 353 I 1138 353 I 1139 353 I 1140 355 I 1140 386 I 1139 388 I 1138 388 I 1137 388 I 1136 386 I 1136 386 I C 
-1136 333 M 1136 302 I 1137 300 I 1138 300 I 1139 300 I 1140 302 I 1140 333 I 1139 334 I 1138 335 I 1137 334 I 1136 333 I 1136 333 I C 
-1136 279 M 1136 248 I 1137 247 I 1138 246 I 1139 247 I 1140 248 I 1140 279 I 1139 281 I 1138 282 I 1137 281 I 1136 279 I 1136 279 I C 
-:  L ; K 
-N 910 12 M 910 246 I 1366 246 I 1366 12 I 910 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 910 246 M 1366 246 I 1366 12 I 910 12 I 910 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-3
-/g87 [38 0 6 -47 35 0 ] 
-/g87 [29 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffc000
-fffff800
-fffffe00
-ffffff80
-ffffffc0
-fc00ffe0
-fc003fe0
-fc000ff0
-fc000ff0
-fc0007f0
-fc0007f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0007f0
-fc0007f0
-fc000ff0
-fc001fe0
-fc003fc0
-fc00ffc0
-ffffff80
-ffffff00
-fffffc00
-fffff000
-ffff8000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
->
- ]
-/TT37845b00 AddT3T32Char
-
-4
-/g24 [46 0 6 -47 42 0 ] 
-/g24 [36 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffe00000
-fffffe0000
-ffffff8000
-ffffffe000
-fffffff000
-fc007ffc00
-fc000ffe00
-fc0003fe00
-fc0000ff00
-fc00007f80
-fc00007f80
-fc00003fc0
-fc00001fc0
-fc00001fe0
-fc00000fe0
-fc00000fe0
-fc00000fe0
-fc00000ff0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc00000fe0
-fc00000fe0
-fc00000fe0
-fc00000fe0
-fc00001fc0
-fc00001fc0
-fc00003fc0
-fc00003f80
-fc00007f80
-fc0000ff00
-fc0003fe00
-fc0007fc00
-fc003ff800
-fffffff000
-ffffffe000
-ffffff8000
-fffffe0000
-7fffe00000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-1065 151 M <03>S 
-1100 151 M <04>S  1141 151 M <02>S  1177 151 M <03>S  
-7 Lw N 1065 160 M 1212 160 I : 0.66 0.723 +S K 
-; 1 Lw solid N 1855 3262 M 1855 3231 I 1856 3229 I 1857 3228 I 1858 3229 I 1859 3231 I 1859 3262 I 1858 3263 I 1857 3264 I 1856 3263 I 1855 3262 I 1855 3262 I C 
-1855 3209 M 1855 3178 I 1856 3176 I 1857 3176 I 1858 3176 I 1859 3178 I 1859 3209 I 1858 3210 I 1857 3211 I 1856 3210 I 1855 3209 I 1855 3209 I C 
-1855 3155 M 1855 3124 I 1856 3123 I 1857 3122 I 1858 3123 I 1859 3124 I 1859 3155 I 1858 3157 I 1857 3157 I 1856 3157 I 1855 3155 I 1855 3155 I C 
-1855 3102 M 1855 3071 I 1856 3070 I 1857 3069 I 1858 3070 I 1859 3071 I 1859 3102 I 1858 3104 I 1857 3105 I 1856 3104 I 1855 3102 I 1855 3102 I C 
-1855 3049 M 1855 3018 I 1856 3016 I 1857 3016 I 1858 3016 I 1859 3018 I 1859 3049 I 1858 3050 I 1857 3051 I 1856 3050 I 1855 3049 I 1855 3049 I C 
-1855 2995 M 1855 2964 I 1856 2963 I 1857 2962 I 1858 2963 I 1859 2964 I 1859 2995 I 1858 2998 I 1857 2998 I 1856 2998 I 1855 2995 I 1855 2995 I C 
-1855 2943 M 1855 2911 I 1856 2910 I 1857 2909 I 1858 2910 I 1859 2911 I 1859 2943 I 1858 2944 I 1857 2945 I 1856 2944 I 1855 2943 I 1855 2943 I C 
-1855 2889 M 1855 2858 I 1856 2856 I 1857 2856 I 1858 2856 I 1859 2858 I 1859 2889 I 1858 2890 I 1857 2891 I 1856 2890 I 1855 2889 I 1855 2889 I C 
-1855 2836 M 1855 2805 I 1856 2804 I 1857 2803 I 1858 2804 I 1859 2805 I 1859 2836 I 1858 2838 I 1857 2838 I 1856 2838 I 1855 2836 I 1855 2836 I C 
-1855 2783 M 1855 2751 I 1856 2750 I 1857 2749 I 1858 2750 I 1859 2751 I 1859 2783 I 1858 2784 I 1857 2785 I 1856 2784 I 1855 2783 I 1855 2783 I C 
-1855 2730 M 1855 2699 I 1856 2697 I 1857 2696 I 1858 2697 I 1859 2699 I 1859 2730 I 1858 2731 I 1857 2732 I 1856 2731 I 1855 2730 I 1855 2730 I C 
-1855 2676 M 1855 2645 I 1856 2644 I 1857 2643 I 1858 2644 I 1859 2645 I 1859 2676 I 1858 2678 I 1857 2678 I 1856 2678 I 1855 2676 I 1855 2676 I C 
-1855 2623 M 1855 2591 I 1856 2590 I 1857 2589 I 1858 2590 I 1859 2591 I 1859 2623 I 1858 2625 I 1857 2625 I 1856 2625 I 1855 2623 I 1855 2623 I C 
-1855 2570 M 1855 2539 I 1856 2537 I 1857 2536 I 1858 2537 I 1859 2539 I 1859 2570 I 1858 2571 I 1857 2572 I 1856 2571 I 1855 2570 I 1855 2570 I C 
-1855 2516 M 1855 2485 I 1856 2484 I 1857 2483 I 1858 2484 I 1859 2485 I 1859 2516 I 1858 2518 I 1857 2518 I 1856 2518 I 1855 2516 I 1855 2516 I C 
-1855 2463 M 1855 2432 I 1856 2431 I 1857 2430 I 1858 2431 I 1859 2432 I 1859 2463 I 1858 2465 I 1857 2465 I 1856 2465 I 1855 2463 I 1855 2463 I C 
-1855 2410 M 1855 2379 I 1856 2377 I 1857 2376 I 1858 2377 I 1859 2379 I 1859 2410 I 1858 2411 I 1857 2412 I 1856 2411 I 1855 2410 I 1855 2410 I C 
-1855 2357 M 1855 2326 I 1856 2324 I 1857 2324 I 1858 2324 I 1859 2326 I 1859 2357 I 1858 2358 I 1857 2359 I 1856 2358 I 1855 2357 I 1855 2357 I C 
-1855 2303 M 1855 2272 I 1856 2271 I 1857 2270 I 1858 2271 I 1859 2272 I 1859 2303 I 1858 2305 I 1857 2306 I 1856 2305 I 1855 2303 I 1855 2303 I C 
-1855 2250 M 1855 2219 I 1856 2217 I 1857 2216 I 1858 2217 I 1859 2219 I 1859 2250 I 1858 2252 I 1857 2252 I 1856 2252 I 1855 2250 I 1855 2250 I C 
-1855 2197 M 1855 2166 I 1856 2164 I 1857 2164 I 1858 2164 I 1859 2166 I 1859 2197 I 1858 2198 I 1857 2199 I 1856 2198 I 1855 2197 I 1855 2197 I C 
-1855 2143 M 1855 2112 I 1856 2111 I 1857 2110 I 1858 2111 I 1859 2112 I 1859 2143 I 1858 2145 I 1857 2146 I 1856 2145 I 1855 2143 I 1855 2143 I C 
-1855 2091 M 1855 2059 I 1856 2058 I 1857 2057 I 1858 2058 I 1859 2059 I 1859 2091 I 1858 2092 I 1857 2093 I 1856 2092 I 1855 2091 I 1855 2091 I C 
-1855 2037 M 1855 2006 I 1856 2004 I 1857 2004 I 1858 2004 I 1859 2006 I 1859 2037 I 1858 2038 I 1857 2039 I 1856 2038 I 1855 2037 I 1855 2037 I C 
-1855 1983 M 1855 1953 I 1856 1952 I 1857 1951 I 1858 1952 I 1859 1953 I 1859 1983 I 1858 1986 I 1857 1986 I 1856 1986 I 1855 1983 I 1855 1983 I C 
-1855 1931 M 1855 1899 I 1856 1898 I 1857 1897 I 1858 1898 I 1859 1899 I 1859 1931 I 1858 1932 I 1857 1933 I 1856 1932 I 1855 1931 I 1855 1931 I C 
-1855 1877 M 1855 1846 I 1856 1844 I 1857 1844 I 1858 1844 I 1859 1846 I 1859 1877 I 1858 1879 I 1857 1879 I 1856 1879 I 1855 1877 I 1855 1877 I C 
-1855 1824 M 1855 1793 I 1856 1792 I 1857 1791 I 1858 1792 I 1859 1793 I 1859 1824 I 1858 1826 I 1857 1826 I 1856 1826 I 1855 1824 I 1855 1824 I C 
-1855 1771 M 1855 1739 I 1856 1738 I 1857 1737 I 1858 1738 I 1859 1739 I 1859 1771 I 1858 1772 I 1857 1773 I 1856 1772 I 1855 1771 I 1855 1771 I C 
-1855 1718 M 1855 1687 I 1856 1685 I 1857 1684 I 1858 1685 I 1859 1687 I 1859 1718 I 1858 1719 I 1857 1720 I 1856 1719 I 1855 1718 I 1855 1718 I C 
-1855 1664 M 1855 1633 I 1856 1632 I 1857 1631 I 1858 1632 I 1859 1633 I 1859 1664 I 1858 1666 I 1857 1666 I 1856 1666 I 1855 1664 I 1855 1664 I C 
-1855 1611 M 1855 1580 I 1856 1579 I 1857 1578 I 1858 1579 I 1859 1580 I 1859 1611 I 1858 1613 I 1857 1614 I 1856 1613 I 1855 1611 I 1855 1611 I C 
-1855 1558 M 1855 1527 I 1856 1525 I 1857 1524 I 1858 1525 I 1859 1527 I 1859 1558 I 1858 1559 I 1857 1560 I 1856 1559 I 1855 1558 I 1855 1558 I C 
-1855 1504 M 1855 1473 I 1856 1472 I 1857 1471 I 1858 1472 I 1859 1473 I 1859 1504 I 1858 1506 I 1857 1506 I 1856 1506 I 1855 1504 I 1855 1504 I C 
-1855 1451 M 1855 1420 I 1856 1419 I 1857 1418 I 1858 1419 I 1859 1420 I 1859 1451 I 1858 1453 I 1857 1454 I 1856 1453 I 1855 1451 I 1855 1451 I C 
-1855 1398 M 1855 1367 I 1856 1365 I 1857 1364 I 1858 1365 I 1859 1367 I 1859 1398 I 1858 1399 I 1857 1400 I 1856 1399 I 1855 1398 I 1855 1398 I C 
-1855 1345 M 1855 1314 I 1856 1312 I 1857 1312 I 1858 1312 I 1859 1314 I 1859 1345 I 1858 1346 I 1857 1347 I 1856 1346 I 1855 1345 I 1855 1345 I C 
-1855 1291 M 1855 1260 I 1856 1259 I 1857 1258 I 1858 1259 I 1859 1260 I 1859 1291 I 1858 1293 I 1857 1294 I 1856 1293 I 1855 1291 I 1855 1291 I C 
-1855 1238 M 1855 1207 I 1856 1205 I 1857 1205 I 1858 1205 I 1859 1207 I 1859 1238 I 1858 1240 I 1857 1241 I 1856 1240 I 1855 1238 I 1855 1238 I C 
-1855 1185 M 1855 1154 I 1856 1152 I 1857 1152 I 1858 1152 I 1859 1154 I 1859 1185 I 1858 1186 I 1857 1187 I 1856 1186 I 1855 1185 I 1855 1185 I C 
-1855 1131 M 1855 1100 I 1856 1099 I 1857 1098 I 1858 1099 I 1859 1100 I 1859 1131 I 1858 1134 I 1857 1134 I 1856 1134 I 1855 1131 I 1855 1131 I C 
-1855 1079 M 1855 1047 I 1856 1046 I 1857 1045 I 1858 1046 I 1859 1047 I 1859 1079 I 1858 1080 I 1857 1081 I 1856 1080 I 1855 1079 I 1855 1079 I C 
-1855 1025 M 1855 994 I 1856 992 I 1857 992 I 1858 992 I 1859 994 I 1859 1025 I 1858 1026 I 1857 1027 I 1856 1026 I 1855 1025 I 1855 1025 I C 
-1855 972 M 1855 941 I 1856 940 I 1857 939 I 1858 940 I 1859 941 I 1859 972 I 1858 974 I 1857 974 I 1856 974 I 1855 972 I 1855 972 I C 
-1855 919 M 1855 887 I 1856 886 I 1857 885 I 1858 886 I 1859 887 I 1859 919 I 1858 920 I 1857 921 I 1856 920 I 1855 919 I 1855 919 I C 
-1855 865 M 1855 835 I 1856 832 I 1857 832 I 1858 832 I 1859 835 I 1859 865 I 1858 867 I 1857 868 I 1856 867 I 1855 865 I 1855 865 I C 
-1855 812 M 1855 781 I 1856 780 I 1857 779 I 1858 780 I 1859 781 I 1859 812 I 1858 814 I 1857 814 I 1856 814 I 1855 812 I 1855 812 I C 
-1855 759 M 1855 728 I 1856 726 I 1857 725 I 1858 726 I 1859 728 I 1859 759 I 1858 761 I 1857 761 I 1856 761 I 1855 759 I 1855 759 I C 
-1855 706 M 1855 675 I 1856 673 I 1857 672 I 1858 673 I 1859 675 I 1859 706 I 1858 707 I 1857 708 I 1856 707 I 1855 706 I 1855 706 I C 
-1855 652 M 1855 621 I 1856 620 I 1857 619 I 1858 620 I 1859 621 I 1859 652 I 1858 654 I 1857 654 I 1856 654 I 1855 652 I 1855 652 I C 
-1855 599 M 1855 568 I 1856 567 I 1857 566 I 1858 567 I 1859 568 I 1859 599 I 1858 601 I 1857 602 I 1856 601 I 1855 599 I 1855 599 I C 
-1855 546 M 1855 515 I 1856 513 I 1857 513 I 1858 513 I 1859 515 I 1859 546 I 1858 547 I 1857 548 I 1856 547 I 1855 546 I 1855 546 I C 
-1855 492 M 1855 462 I 1856 460 I 1857 459 I 1858 460 I 1859 462 I 1859 492 I 1858 494 I 1857 495 I 1856 494 I 1855 492 I 1855 492 I C 
-1855 439 M 1855 408 I 1856 407 I 1857 406 I 1858 407 I 1859 408 I 1859 439 I 1858 441 I 1857 442 I 1856 441 I 1855 439 I 1855 439 I C 
-1855 386 M 1855 355 I 1856 353 I 1857 353 I 1858 353 I 1859 355 I 1859 386 I 1858 388 I 1857 388 I 1856 388 I 1855 386 I 1855 386 I C 
-1855 333 M 1855 302 I 1856 300 I 1857 300 I 1858 300 I 1859 302 I 1859 333 I 1858 334 I 1857 335 I 1856 334 I 1855 333 I 1855 333 I C 
-1855 279 M 1855 248 I 1856 247 I 1857 246 I 1858 247 I 1859 248 I 1859 279 I 1858 281 I 1857 282 I 1856 281 I 1855 279 I 1855 279 I C 
-:  L ; K 
-N 1630 12 M 1630 246 I 2085 246 I 2085 12 I 1630 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 1630 246 M 2085 246 I 2085 12 I 1630 12 I 1630 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-5
-/g4 [43 0 1 -47 42 0 ] 
-/g4 [41 47 true [1 0 0 1 -1 47 ]  0 0]
-[<00007f000000
-0000ff800000
-0000ff800000
-0001ff800000
-0001ffc00000
-0001ffc00000
-0003ffc00000
-0003f7e00000
-0003e7e00000
-0007e7f00000
-0007e3f00000
-0007c3f00000
-000fc3f80000
-000fc1f80000
-001f81f80000
-001f81fc0000
-001f80fc0000
-003f00fc0000
-003f00fe0000
-003f007e0000
-007e007f0000
-007e007f0000
-007e003f0000
-00fc003f8000
-00fc003f8000
-01fc001f8000
-01f8001fc000
-01f8001fc000
-03f8000fc000
-03f0000fe000
-03ffffffe000
-07ffffffe000
-07fffffff000
-07fffffff000
-0ffffffff800
-0fc00003f800
-0fc00003f800
-1fc00001fc00
-1f800001fc00
-3f800000fc00
-3f800000fe00
-3f000000fe00
-7f0000007e00
-7e0000007f00
-7e0000007f00
-fe0000003f00
-fc0000003f00
->
- ]
-/TT37845b00 AddT3T32Char
-
-6
-/g68 [63 0 6 -47 57 0 ] 
-/g68 [51 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7f800000003fc0
-ffc00000007fe0
-ffe0000000ffe0
-fff0000000ffe0
-fff0000001ffe0
-fff0000001ffe0
-fdf8000001f7e0
-fdf8000003f7e0
-fdfc000003f7e0
-fcfc000007e7e0
-fcfc000007e7e0
-fc7e000007c7e0
-fc7e00000fc7e0
-fc7f00000fc7e0
-fc3f00001f87e0
-fc3f00001f87e0
-fc1f80003f07e0
-fc1f80003f07e0
-fc1fc0003e07e0
-fc0fc0007e07e0
-fc0fc0007e07e0
-fc07e000fc07e0
-fc07e000fc07e0
-fc07f000f807e0
-fc03f001f807e0
-fc03f801f807e0
-fc01f803f007e0
-fc01f803f007e0
-fc01fc03e007e0
-fc00fc07e007e0
-fc00fe07e007e0
-fc00fe0fc007e0
-fc007e0fc007e0
-fc007f1f8007e0
-fc003f1f8007e0
-fc003f9f8007e0
-fc003fbf0007e0
-fc001fbf0007e0
-fc001ffe0007e0
-fc000ffe0007e0
-fc000ffe0007e0
-fc000ffc0007e0
-fc0007fc0007e0
-fc0007f80007e0
-fc0003f80007e0
-fc0003f80007e0
-fc0001f00007e0
->
- ]
-/TT37845b00 AddT3T32Char
-
-7
-/g3 [17 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT37845b00 AddT3T32Char
-
-8
-/g62 [31 0 6 -47 30 0 ] 
-/g62 [24 47 true [1 0 0 1 -6 47 ]  0 0]
-[<fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-ffffff
-ffffff
-ffffff
-ffffff
-7fffff
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-1751 151 M <05>S 
-1790 151 M <06>S  1847 151 M <07>S  1862 151 M <01>S  1899 151 M <08>S  1927 151 M <02>S  
-7 Lw N 1751 160 M 1964 160 I : 0.66 0.723 +S K 
-; 1 Lw solid N 2575 3262 M 2575 3231 I 2576 3229 I 2577 3228 I 2578 3229 I 2579 3231 I 2579 3262 I 2578 3263 I 2577 3264 I 2576 3263 I 2575 3262 I 2575 3262 I C 
-2575 3209 M 2575 3178 I 2576 3176 I 2577 3176 I 2578 3176 I 2579 3178 I 2579 3209 I 2578 3210 I 2577 3211 I 2576 3210 I 2575 3209 I 2575 3209 I C 
-2575 3155 M 2575 3124 I 2576 3123 I 2577 3122 I 2578 3123 I 2579 3124 I 2579 3155 I 2578 3157 I 2577 3157 I 2576 3157 I 2575 3155 I 2575 3155 I C 
-2575 3102 M 2575 3071 I 2576 3070 I 2577 3069 I 2578 3070 I 2579 3071 I 2579 3102 I 2578 3104 I 2577 3105 I 2576 3104 I 2575 3102 I 2575 3102 I C 
-2575 3049 M 2575 3018 I 2576 3016 I 2577 3016 I 2578 3016 I 2579 3018 I 2579 3049 I 2578 3050 I 2577 3051 I 2576 3050 I 2575 3049 I 2575 3049 I C 
-2575 2995 M 2575 2964 I 2576 2963 I 2577 2962 I 2578 2963 I 2579 2964 I 2579 2995 I 2578 2998 I 2577 2998 I 2576 2998 I 2575 2995 I 2575 2995 I C 
-2575 2943 M 2575 2911 I 2576 2910 I 2577 2909 I 2578 2910 I 2579 2911 I 2579 2943 I 2578 2944 I 2577 2945 I 2576 2944 I 2575 2943 I 2575 2943 I C 
-2575 2889 M 2575 2858 I 2576 2856 I 2577 2856 I 2578 2856 I 2579 2858 I 2579 2889 I 2578 2890 I 2577 2891 I 2576 2890 I 2575 2889 I 2575 2889 I C 
-2575 2836 M 2575 2805 I 2576 2804 I 2577 2803 I 2578 2804 I 2579 2805 I 2579 2836 I 2578 2838 I 2577 2838 I 2576 2838 I 2575 2836 I 2575 2836 I C 
-2575 2783 M 2575 2751 I 2576 2750 I 2577 2749 I 2578 2750 I 2579 2751 I 2579 2783 I 2578 2784 I 2577 2785 I 2576 2784 I 2575 2783 I 2575 2783 I C 
-2575 2730 M 2575 2699 I 2576 2697 I 2577 2696 I 2578 2697 I 2579 2699 I 2579 2730 I 2578 2731 I 2577 2732 I 2576 2731 I 2575 2730 I 2575 2730 I C 
-2575 2676 M 2575 2645 I 2576 2644 I 2577 2643 I 2578 2644 I 2579 2645 I 2579 2676 I 2578 2678 I 2577 2678 I 2576 2678 I 2575 2676 I 2575 2676 I C 
-2575 2623 M 2575 2591 I 2576 2590 I 2577 2589 I 2578 2590 I 2579 2591 I 2579 2623 I 2578 2625 I 2577 2625 I 2576 2625 I 2575 2623 I 2575 2623 I C 
-2575 2570 M 2575 2539 I 2576 2537 I 2577 2536 I 2578 2537 I 2579 2539 I 2579 2570 I 2578 2571 I 2577 2572 I 2576 2571 I 2575 2570 I 2575 2570 I C 
-2575 2516 M 2575 2485 I 2576 2484 I 2577 2483 I 2578 2484 I 2579 2485 I 2579 2516 I 2578 2518 I 2577 2518 I 2576 2518 I 2575 2516 I 2575 2516 I C 
-2575 2463 M 2575 2432 I 2576 2431 I 2577 2430 I 2578 2431 I 2579 2432 I 2579 2463 I 2578 2465 I 2577 2465 I 2576 2465 I 2575 2463 I 2575 2463 I C 
-2575 2410 M 2575 2379 I 2576 2377 I 2577 2376 I 2578 2377 I 2579 2379 I 2579 2410 I 2578 2411 I 2577 2412 I 2576 2411 I 2575 2410 I 2575 2410 I C 
-2575 2357 M 2575 2326 I 2576 2324 I 2577 2324 I 2578 2324 I 2579 2326 I 2579 2357 I 2578 2358 I 2577 2359 I 2576 2358 I 2575 2357 I 2575 2357 I C 
-2575 2303 M 2575 2272 I 2576 2271 I 2577 2270 I 2578 2271 I 2579 2272 I 2579 2303 I 2578 2305 I 2577 2306 I 2576 2305 I 2575 2303 I 2575 2303 I C 
-2575 2250 M 2575 2219 I 2576 2217 I 2577 2216 I 2578 2217 I 2579 2219 I 2579 2250 I 2578 2252 I 2577 2252 I 2576 2252 I 2575 2250 I 2575 2250 I C 
-2575 2197 M 2575 2166 I 2576 2164 I 2577 2164 I 2578 2164 I 2579 2166 I 2579 2197 I 2578 2198 I 2577 2199 I 2576 2198 I 2575 2197 I 2575 2197 I C 
-2575 2143 M 2575 2112 I 2576 2111 I 2577 2110 I 2578 2111 I 2579 2112 I 2579 2143 I 2578 2145 I 2577 2146 I 2576 2145 I 2575 2143 I 2575 2143 I C 
-2575 2091 M 2575 2059 I 2576 2058 I 2577 2057 I 2578 2058 I 2579 2059 I 2579 2091 I 2578 2092 I 2577 2093 I 2576 2092 I 2575 2091 I 2575 2091 I C 
-2575 2037 M 2575 2006 I 2576 2004 I 2577 2004 I 2578 2004 I 2579 2006 I 2579 2037 I 2578 2038 I 2577 2039 I 2576 2038 I 2575 2037 I 2575 2037 I C 
-2575 1983 M 2575 1953 I 2576 1952 I 2577 1951 I 2578 1952 I 2579 1953 I 2579 1983 I 2578 1986 I 2577 1986 I 2576 1986 I 2575 1983 I 2575 1983 I C 
-2575 1931 M 2575 1899 I 2576 1898 I 2577 1897 I 2578 1898 I 2579 1899 I 2579 1931 I 2578 1932 I 2577 1933 I 2576 1932 I 2575 1931 I 2575 1931 I C 
-2575 1877 M 2575 1846 I 2576 1844 I 2577 1844 I 2578 1844 I 2579 1846 I 2579 1877 I 2578 1879 I 2577 1879 I 2576 1879 I 2575 1877 I 2575 1877 I C 
-2575 1824 M 2575 1793 I 2576 1792 I 2577 1791 I 2578 1792 I 2579 1793 I 2579 1824 I 2578 1826 I 2577 1826 I 2576 1826 I 2575 1824 I 2575 1824 I C 
-2575 1771 M 2575 1739 I 2576 1738 I 2577 1737 I 2578 1738 I 2579 1739 I 2579 1771 I 2578 1772 I 2577 1773 I 2576 1772 I 2575 1771 I 2575 1771 I C 
-2575 1718 M 2575 1687 I 2576 1685 I 2577 1684 I 2578 1685 I 2579 1687 I 2579 1718 I 2578 1719 I 2577 1720 I 2576 1719 I 2575 1718 I 2575 1718 I C 
-2575 1664 M 2575 1633 I 2576 1632 I 2577 1631 I 2578 1632 I 2579 1633 I 2579 1664 I 2578 1666 I 2577 1666 I 2576 1666 I 2575 1664 I 2575 1664 I C 
-2575 1611 M 2575 1580 I 2576 1579 I 2577 1578 I 2578 1579 I 2579 1580 I 2579 1611 I 2578 1613 I 2577 1614 I 2576 1613 I 2575 1611 I 2575 1611 I C 
-2575 1558 M 2575 1527 I 2576 1525 I 2577 1524 I 2578 1525 I 2579 1527 I 2579 1558 I 2578 1559 I 2577 1560 I 2576 1559 I 2575 1558 I 2575 1558 I C 
-2575 1504 M 2575 1473 I 2576 1472 I 2577 1471 I 2578 1472 I 2579 1473 I 2579 1504 I 2578 1506 I 2577 1506 I 2576 1506 I 2575 1504 I 2575 1504 I C 
-2575 1451 M 2575 1420 I 2576 1419 I 2577 1418 I 2578 1419 I 2579 1420 I 2579 1451 I 2578 1453 I 2577 1454 I 2576 1453 I 2575 1451 I 2575 1451 I C 
-2575 1398 M 2575 1367 I 2576 1365 I 2577 1364 I 2578 1365 I 2579 1367 I 2579 1398 I 2578 1399 I 2577 1400 I 2576 1399 I 2575 1398 I 2575 1398 I C 
-2575 1345 M 2575 1314 I 2576 1312 I 2577 1312 I 2578 1312 I 2579 1314 I 2579 1345 I 2578 1346 I 2577 1347 I 2576 1346 I 2575 1345 I 2575 1345 I C 
-2575 1291 M 2575 1260 I 2576 1259 I 2577 1258 I 2578 1259 I 2579 1260 I 2579 1291 I 2578 1293 I 2577 1294 I 2576 1293 I 2575 1291 I 2575 1291 I C 
-2575 1238 M 2575 1207 I 2576 1205 I 2577 1205 I 2578 1205 I 2579 1207 I 2579 1238 I 2578 1240 I 2577 1241 I 2576 1240 I 2575 1238 I 2575 1238 I C 
-2575 1185 M 2575 1154 I 2576 1152 I 2577 1152 I 2578 1152 I 2579 1154 I 2579 1185 I 2578 1186 I 2577 1187 I 2576 1186 I 2575 1185 I 2575 1185 I C 
-2575 1131 M 2575 1100 I 2576 1099 I 2577 1098 I 2578 1099 I 2579 1100 I 2579 1131 I 2578 1134 I 2577 1134 I 2576 1134 I 2575 1131 I 2575 1131 I C 
-2575 1079 M 2575 1047 I 2576 1046 I 2577 1045 I 2578 1046 I 2579 1047 I 2579 1079 I 2578 1080 I 2577 1081 I 2576 1080 I 2575 1079 I 2575 1079 I C 
-2575 1025 M 2575 994 I 2576 992 I 2577 992 I 2578 992 I 2579 994 I 2579 1025 I 2578 1026 I 2577 1027 I 2576 1026 I 2575 1025 I 2575 1025 I C 
-2575 972 M 2575 941 I 2576 940 I 2577 939 I 2578 940 I 2579 941 I 2579 972 I 2578 974 I 2577 974 I 2576 974 I 2575 972 I 2575 972 I C 
-2575 919 M 2575 887 I 2576 886 I 2577 885 I 2578 886 I 2579 887 I 2579 919 I 2578 920 I 2577 921 I 2576 920 I 2575 919 I 2575 919 I C 
-2575 865 M 2575 835 I 2576 832 I 2577 832 I 2578 832 I 2579 835 I 2579 865 I 2578 867 I 2577 868 I 2576 867 I 2575 865 I 2575 865 I C 
-2575 812 M 2575 781 I 2576 780 I 2577 779 I 2578 780 I 2579 781 I 2579 812 I 2578 814 I 2577 814 I 2576 814 I 2575 812 I 2575 812 I C 
-2575 759 M 2575 728 I 2576 726 I 2577 725 I 2578 726 I 2579 728 I 2579 759 I 2578 761 I 2577 761 I 2576 761 I 2575 759 I 2575 759 I C 
-2575 706 M 2575 675 I 2576 673 I 2577 672 I 2578 673 I 2579 675 I 2579 706 I 2578 707 I 2577 708 I 2576 707 I 2575 706 I 2575 706 I C 
-2575 652 M 2575 621 I 2576 620 I 2577 619 I 2578 620 I 2579 621 I 2579 652 I 2578 654 I 2577 654 I 2576 654 I 2575 652 I 2575 652 I C 
-2575 599 M 2575 568 I 2576 567 I 2577 566 I 2578 567 I 2579 568 I 2579 599 I 2578 601 I 2577 602 I 2576 601 I 2575 599 I 2575 599 I C 
-2575 546 M 2575 515 I 2576 513 I 2577 513 I 2578 513 I 2579 515 I 2579 546 I 2578 547 I 2577 548 I 2576 547 I 2575 546 I 2575 546 I C 
-2575 492 M 2575 462 I 2576 460 I 2577 459 I 2578 460 I 2579 462 I 2579 492 I 2578 494 I 2577 495 I 2576 494 I 2575 492 I 2575 492 I C 
-2575 439 M 2575 408 I 2576 407 I 2577 406 I 2578 407 I 2579 408 I 2579 439 I 2578 441 I 2577 442 I 2576 441 I 2575 439 I 2575 439 I C 
-2575 386 M 2575 355 I 2576 353 I 2577 353 I 2578 353 I 2579 355 I 2579 386 I 2578 388 I 2577 388 I 2576 388 I 2575 386 I 2575 386 I C 
-2575 333 M 2575 302 I 2576 300 I 2577 300 I 2578 300 I 2579 302 I 2579 333 I 2578 334 I 2577 335 I 2576 334 I 2575 333 I 2575 333 I C 
-2575 279 M 2575 248 I 2576 247 I 2577 246 I 2578 247 I 2579 248 I 2579 279 I 2578 281 I 2577 282 I 2576 281 I 2575 279 I 2575 279 I C 
-:  L ; K 
-N 2349 12 M 2349 246 I 2805 246 I 2805 12 I 2349 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 2349 246 M 2805 246 I 2805 12 I 2349 12 I 2349 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-9
-/g286 [37 0 3 -35 33 1 ] 
-/g286 [30 36 true [1 0 0 1 -3 35 ]  0 0]
-[<001ff000
-007ffe00
-01ffff00
-03ffffc0
-07ffffe0
-0ff01fe0
-1fc007f0
-3f8003f8
-3f0001f8
-7e0001f8
-7e0000f8
-7c0000fc
-7c0000fc
-fc0000fc
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-fffffff8
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-7e000000
-7e000000
-7f000000
-3f000000
-3f800000
-1fe00038
-1ff803f8
-0ffffff8
-07fffff8
-01fffff8
-00ffffe0
-000ffc00
->
- ]
-/TT37845b00 AddT3T32Char
-
-10
-/g69 [48 0 6 -47 41 0 ] 
-/g69 [35 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7f000007e0
-ff800007e0
-ffc00007e0
-ffe00007e0
-ffe00007e0
-fff00007e0
-fff00007e0
-fff80007e0
-fdf80007e0
-fdfc0007e0
-fcfc0007e0
-fcfe0007e0
-fc7f0007e0
-fc7f0007e0
-fc3f8007e0
-fc3f8007e0
-fc1fc007e0
-fc1fc007e0
-fc0fe007e0
-fc0fe007e0
-fc07f007e0
-fc03f007e0
-fc03f807e0
-fc01f807e0
-fc01fc07e0
-fc00fe07e0
-fc00fe07e0
-fc007f07e0
-fc007f07e0
-fc003f87e0
-fc003f87e0
-fc001fc7e0
-fc001fc7e0
-fc000fe7e0
-fc0007e7e0
-fc0007f7e0
-fc0003f7e0
-fc0003ffe0
-fc0001ffe0
-fc0001ffe0
-fc0000ffe0
-fc0000ffe0
-fc00007fe0
-fc00007fe0
-fc00003fe0
-fc00001fe0
-fc00000fc0
->
- ]
-/TT37845b00 AddT3T32Char
-
-11
-/g17 [40 0 6 -47 37 0 ] 
-/g17 [31 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffe000
-fffffc00
-ffffff00
-ffffff80
-ffffffc0
-fc007fc0
-fc001fe0
-fc000fe0
-fc0007f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0007e0
-fc0007e0
-fc000fe0
-fc001fc0
-fc007f80
-ffffff00
-fffffc00
-ffffff80
-ffffffc0
-ffffffe0
-fc003ff0
-fc000ff8
-fc0003fc
-fc0001fc
-fc0001fc
-fc0000fe
-fc0000fe
-fc0000fe
-fc0000fe
-fc0000fe
-fc0000fe
-fc0000fe
-fc0001fc
-fc0001fc
-fc0003fc
-fc0007f8
-fc001ff0
-fffffff0
-ffffffc0
-ffffff80
-fffffe00
-7ffff000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-2445 151 M <09>S 
-2479 151 M <0A>S  2523 151 M <0B>S  2560 151 M <07>S  2575 151 M <06>S  2632 151 M <05>S  2672 151 M <02>S  
-7 Lw N 2445 160 M 2708 160 I : 0.66 0.723 +S K 
-; N 1100 413 M 1100 579 I 1177 579 I 1177 413 I 1100 413 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 1177 579 M 1177 413 I 1100 413 I 1100 579 I 1177 579 I C 
-: 0.66 0.723 +S K 
-; N 1819 579 M 1819 1244 I 1896 1244 I 1896 579 I 1819 579 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1896 1244 M 1896 579 I 1819 579 I 1819 1244 I 1896 1244 I C 
-: 0.66 0.723 +S K 
-; N 2538 1244 M 2538 1411 I 2615 1411 I 2615 1244 I 2538 1244 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 2615 1411 M 2615 1244 I 2538 1244 I 2538 1411 I 2615 1411 I C 
-: 0.66 0.723 +S K 
-; N 1819 2077 M 1819 2742 I 1896 2742 I 1896 2077 I 1819 2077 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1896 2742 M 1896 2077 I 1819 2077 I 1819 2742 I 1896 2742 I C 
-: 0.66 0.723 +S K 
-; N 419 413 M 1034 413 I : 0.66 0.723 +S K 
-; N 1100 413 M 1067 433 I 1067 392 I 1100 413 I C 
-1067 433 M 1100 413 I 1067 433 I C 
- O 10 Lw N 1100 413 M 1067 433 I 1067 392 I 1100 413 I : 0.66 0.723 +S K 
-; N 1067 433 M 1100 413 I : 0.66 0.723 +S K 
-; 6 Lw N 1067 413 M 1014 413 I : 0.66 0.723 +S K 
-; N 490 270 M 490 358 I 1030 358 I 1030 270 I 490 270 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-12
-/g100 [36 0 1 -47 35 0 ] 
-/g100 [34 47 true [1 0 0 1 -1 47 ]  0 0]
-[<ffffffffc0
-ffffffffc0
-ffffffffc0
-ffffffffc0
-ffffffffc0
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
->
- ]
-/TT37845b00 AddT3T32Char
-
-13
-/g396 [26 0 6 -35 25 0 ] 
-/g396 [19 35 true [1 0 0 1 -6 35 ]  0 0]
-[<000fc0
-f83fe0
-f87fe0
-f8ffe0
-f9ffe0
-fbf060
-fbe000
-ffc000
-ff8000
-ff0000
-fe0000
-fe0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
->
- ]
-/TT37845b00 AddT3T32Char
-
-14
-/g258 [35 0 3 -35 30 1 ] 
-/g258 [27 36 true [1 0 0 1 -3 35 ]  0 0]
-[<003fe000
-03fffc00
-0ffffe00
-1fffff80
-3fffff80
-3fc07fc0
-3e001fc0
-38000fc0
-00000fe0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-001fffe0
-01ffffe0
-07ffffe0
-0fffffe0
-3fffffe0
-3fe007e0
-7f8007e0
-7e0007e0
-fe0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc000fe0
-fe003fe0
-7f007fe0
-7f81ffe0
-3ffffbe0
-3ffff3e0
-1fffe3e0
-07ff83e0
-01fe0000
->
- ]
-/TT37845b00 AddT3T32Char
-
-15
-/g374 [39 0 6 -35 34 0 ] 
-/g374 [28 35 true [1 0 0 1 -6 35 ]  0 0]
-[<0007f000
-f81ffe00
-f87fff00
-f8ffff80
-f9ffffc0
-fbf83fc0
-ffe01fe0
-ffc00fe0
-ff0007e0
-fe0007f0
-fe0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
->
- ]
-/TT37845b00 AddT3T32Char
-
-16
-/g400 [29 0 3 -35 26 1 ] 
-/g400 [23 36 true [1 0 0 1 -3 35 ]  0 0]
-[<00ff80
-03fff0
-0ffff8
-1ffff8
-1ffff8
-3fc0f8
-3f0018
-7e0000
-7e0000
-7e0000
-7e0000
-7f0000
-7f0000
-3fc000
-3fe000
-1ffc00
-0fff00
-07ffc0
-01fff0
-007ff8
-000ffc
-0003fc
-0001fe
-0000fe
-00007e
-00007e
-00007e
-00007e
-c000fe
-f001fc
-fe03fc
-fffff8
-fffff0
-7fffe0
-1fff80
-03fe00
->
- ]
-/TT37845b00 AddT3T32Char
-
-17
-/g373 [59 0 6 -35 54 0 ] 
-/g373 [48 35 true [1 0 0 1 -6 35 ]  0 0]
-[<0007f0003f80
-f81ffc00ffe0
-f87ffe03fff0
-f8ffff07fff8
-f9ffff8ffffc
-fbf07f9f83fc
-ffe01fff00fe
-ff801ffc00fe
-ff000ff8007e
-fe000ff0007f
-fe0007f0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
->
- ]
-/TT37845b00 AddT3T32Char
-
-18
-/g349 [17 0 5 -47 12 0 ] 
-/g349 [7 47 true [1 0 0 1 -5 47 ]  0 0]
-[<7c
-fe
-fe
-fe
-fe
-fe
-7c
-00
-00
-00
-00
-00
-00
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
->
- ]
-/TT37845b00 AddT3T32Char
-
-19
-/g410 [25 0 1 -43 23 1 ] 
-/g410 [22 44 true [1 0 0 1 -1 43 ]  0 0]
-[<03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-fffffc
-fffffc
-fffffc
-fffffc
-fffffc
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f800
-03f800
-01fc1c
-01fffc
-00fffc
-00fffc
-003ffc
-000ff0
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-490 337 M <0C>S 
-523 337 M <0D>S  547 337 M <0E>S  579 337 M <0F>S  615 337 M <10>S  642 337 M <11>S  696 337 M <12>S  711 337 M <13>S  
-T32RsrcBegin
-
-20
-/g890 [37 0 0 9 37 14 ] 
-/g890 [37 5 true [1 0 0 1 0 -9 ]  0 0]
-[<fffffffff8
-fffffffff8
-fffffffff8
-fffffffff8
-fffffffff8
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-733 337 M <14>S 
-767 337 M <01>S 
-803 337 M <01>S  840 337 M <02>S  
-876 337 M <14>S 
-T32RsrcBegin
-
-21
-/g104 [47 0 6 -47 41 1 ] 
-/g104 [35 48 true [1 0 0 1 -6 47 ]  0 0]
-[<fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fe00000fc0
-7e00000fc0
-7f00000fc0
-7f00001f80
-3f80003f80
-3fc0007f00
-1fe000ff00
-0ffc07fe00
-07fffffc00
-03fffff800
-01ffffe000
-007fff8000
-000ffc0000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-910 337 M <03>S 
-945 337 M <04>S  987 337 M <15>S  
-N 1177 579 M 1753 579 I : 0.66 0.723 +S K 
-; N 1819 579 M 1787 599 I 1787 558 I 1819 579 I C 
-1787 599 M 1819 579 I 1787 599 I C 
- O 10 Lw N 1819 579 M 1787 599 I 1787 558 I 1819 579 I : 0.66 0.723 +S K 
-; N 1787 599 M 1819 579 I : 0.66 0.723 +S K 
-; 6 Lw N 1787 579 M 1734 579 I : 0.66 0.723 +S K 
-; N 1209 437 M 1209 525 I 1787 525 I 1787 437 I 1209 437 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1209 503 M <0C>S 
-1242 503 M <0D>S  1266 503 M <0E>S  1298 503 M <0F>S  1334 503 M <10>S  1361 503 M <11>S  1415 503 M <12>S  1430 503 M <13>S  
-1452 503 M <14>S 
-1486 503 M <03>S 
-1521 503 M <04>S  1563 503 M <02>S  1598 503 M <03>S  
-1633 503 M <14>S 
-1667 503 M <03>S 
-1702 503 M <04>S  1744 503 M <15>S  
-N 1896 1244 M 2472 1244 I : 0.66 0.723 +S K 
-; N 2538 1244 M 2506 1265 I 2506 1223 I 2538 1244 I C 
-2506 1265 M 2538 1244 I 2506 1265 I C 
- O 10 Lw N 2538 1244 M 2506 1265 I 2506 1223 I 2538 1244 I : 0.66 0.723 +S K 
-; N 2506 1265 M 2538 1244 I : 0.66 0.723 +S K 
-; 6 Lw N 2506 1244 M 2453 1244 I : 0.66 0.723 +S K 
-; N 1919 1102 M 1919 1191 I 2515 1191 I 2515 1102 I 1919 1102 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-22
-/g393 [39 0 6 -35 36 14 ] 
-/g393 [30 49 true [1 0 0 1 -6 35 ]  0 0]
-[<0007f800
-f81ffe00
-f87fff80
-f8ffffc0
-f9ffffe0
-fbf81fe0
-ffe00ff0
-ffc007f0
-ff8003f8
-ff0001f8
-fe0001f8
-fc0001f8
-fc0001fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0001f8
-fc0001f8
-fe0001f8
-ff0003f8
-ff8003f0
-ffc007f0
-ffe00fe0
-fff83fe0
-fdffffc0
-fcffff80
-fc7fff00
-fc3ffc00
-fc0ff000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
->
- ]
-/TT37845b00 AddT3T32Char
-
-23
-/g381 [39 0 3 -35 36 1 ] 
-/g381 [33 36 true [1 0 0 1 -3 35 ]  0 0]
-[<000ffc0000
-007fff8000
-01ffffc000
-03fffff000
-07fffff800
-0ff80ffc00
-1fe003fc00
-1fc000fe00
-3f80007e00
-3f00007f00
-7e00003f00
-7e00003f00
-7e00003f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fe00003f00
-7e00003f00
-7e00003f00
-7f00007e00
-3f0000fe00
-3f8001fc00
-1fe003fc00
-1ff80ff800
-0ffffff000
-07ffffe000
-01ffffc000
-00ffff0000
-001ff80000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-1919 1168 M <01>S 
-1955 1168 M <09>S  1989 1168 M <16>S  2025 1168 M <17>S  2060 1168 M <0D>S  2084 1168 M <13>S  
-2107 1168 M <14>S 
-T32RsrcBegin
-
-24
-/g437 [39 0 5 -34 33 1 ] 
-/g437 [28 35 true [1 0 0 1 -5 34 ]  0 0]
-[<fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0007f0
-fe000ff0
-7e001ff0
-7f003ff0
-7f807ff0
-3fc1fdf0
-3ffff9f0
-1ffff1f0
-0fffe1f0
-07ff81f0
-00fe0000
->
- ]
-/TT37845b00 AddT3T32Char
-
-25
-/g296 [23 0 1 -51 23 0 ] 
-/g296 [22 51 true [1 0 0 1 -1 51 ]  0 0]
-[<0007f0
-003ffc
-007ffc
-00fffc
-00fffc
-01fc0c
-01f800
-01f800
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-fffff0
-fffff0
-fffff0
-fffff0
-fffff0
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-2140 1168 M <0B>S 
-2177 1168 M <18>S  2213 1168 M <19>S  2233 1168 M <19>S  2254 1168 M <09>S  2287 1168 M <0D>S  
-2311 1168 M <14>S 
-T32RsrcBegin
-
-26
-/g94 [34 0 3 -48 32 1 ] 
-/g94 [29 49 true [1 0 0 1 -3 48 ]  0 0]
-[<001ff000
-00fffe00
-03ffff80
-07ffffc0
-0fffffc0
-1fe01fc0
-3fc003c0
-3f0000c0
-3f000000
-7e000000
-7e000000
-7e000000
-7e000000
-7e000000
-7f000000
-7f000000
-3f800000
-3fc00000
-3fe00000
-1ff80000
-0ffe0000
-07ffc000
-03fff000
-01fffc00
-007ffe00
-001fff80
-0007ffc0
-0001ffe0
-00007fe0
-00001ff0
-00000ff0
-000007f8
-000007f8
-000003f8
-000003f8
-000003f8
-000003f8
-000003f8
-000003f8
-000007f0
-c00007f0
-f0000fe0
-fc001fe0
-ff80ffc0
-ffffff80
-7fffff00
-3ffffe00
-07fff800
-00ffc000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-2344 1168 M <1A>S 
-2376 1168 M <13>S  2398 1168 M <0E>S  2431 1168 M <13>S  2453 1168 M <18>S  2489 1168 M <10>S  
-N 2538 2077 M 1962 2077 I : 0.66 0.723 +S K 
-; N 1896 2077 M 1928 2056 I 1928 2097 I 1896 2077 I C 
-1928 2056 M 1896 2077 I 1928 2056 I C 
- O 10 Lw N 1896 2077 M 1928 2056 I 1928 2097 I 1896 2077 I : 0.66 0.723 +S K 
-; N 1928 2056 M 1896 2077 I : 0.66 0.723 +S K 
-; 6 Lw N 1928 2077 M 1981 2077 I : 0.66 0.723 +S K 
-; N 1899 1967 M 1899 2057 I 2535 2057 I 2535 1967 I 1899 1967 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-27
-/g455 [34 0 1 -34 32 14 ] 
-/g455 [31 48 true [1 0 0 1 -1 34 ]  0 0]
-[<fc00007e
-fe00007e
-7e00007e
-7e0000fe
-7f0000fc
-3f0000fc
-3f8001f8
-3f8001f8
-1f8001f8
-1fc003f0
-0fc003f0
-0fc003f0
-0fe007e0
-07e007e0
-07e00fc0
-03f00fc0
-03f00fc0
-03f81f80
-01f81f80
-01f81f80
-01fc3f00
-00fc3f00
-00fc3f00
-007e7e00
-007e7e00
-007e7c00
-003ffc00
-003ffc00
-003ff800
-001ff800
-001ff800
-000ff000
-000ff000
-000ff000
-0007e000
-0007e000
-000fc000
-000fc000
-001fc000
-001f8000
-001f8000
-003f8000
-003f0000
-003f0000
-007f0000
-007e0000
-007e0000
-007c0000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-1899 2034 M <0A>S 
-1943 2034 M <17>S  1978 2034 M <13>S  2001 2034 M <12>S  2016 2034 M <19>S  2037 2034 M <1B>S  
-2068 2034 M <14>S 
-T32RsrcBegin
-
-28
-/g454 [32 0 2 -34 31 0 ] 
-/g454 [29 34 true [1 0 0 1 -2 34 ]  0 0]
-[<fe0003f0
-fe0003f0
-7f0007e0
-3f800fe0
-3f800fc0
-1fc01f80
-0fe03f80
-0fe03f00
-07f07e00
-03f07e00
-03f8fc00
-01fdfc00
-01fdf800
-00fff000
-007ff000
-007fe000
-003fc000
-003fe000
-007ff000
-00fff000
-00fff800
-01f9fc00
-03f9fc00
-03f0fe00
-07e07e00
-0fe07f00
-0fc03f80
-1fc03f80
-3f801fc0
-3f000fe0
-7f000fe0
-7e0007f0
-fe0007f8
-fc0003f0
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-2101 2034 M <0C>S 
-2135 2034 M <1C>S  
-2164 2034 M <14>S 
-T32RsrcBegin
-
-29
-/g75 [49 0 4 -48 46 1 ] 
-/g75 [42 49 true [1 0 0 1 -4 48 ]  0 0]
-[<0000ffe00000
-0007fffc0000
-001fffff0000
-007fffffc000
-00ffffffe000
-03ff807ff000
-03fe000ff800
-07f80007fc00
-0ff00003fe00
-1fe00001fe00
-1fc00000ff00
-3fc000007f00
-3f8000007f00
-3f8000007f80
-7f0000003f80
-7f0000003f80
-7f0000003f80
-7f0000003fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-ff0000003f80
-7f0000003f80
-7f0000003f80
-7f0000003f80
-7f8000007f00
-3f8000007f00
-3f800000ff00
-3fc00000fe00
-1fe00001fe00
-1fe00003fc00
-0ff80007f800
-07fc001ff000
-03ff807ff000
-01ffffffc000
-00ffffff8000
-003ffffe0000
-000ffff80000
-0001ffc00000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-2197 2034 M <1D>S 
-2242 2034 M <16>S  2278 2034 M <16>S  2314 2034 M <17>S  2350 2034 M <0D>S  2374 2034 M <13>S  2396 2034 M <18>S  2432 2034 M <0F>S  2468 2034 M <12>S  2483 2034 M <13>S  2505 2034 M <1B>S  
-N 1896 2742 M 2472 2742 I : 0.66 0.723 +S K 
-; N 2538 2742 M 2506 2763 I 2506 2722 I 2538 2742 I C 
-2506 2763 M 2538 2742 I 2506 2763 I C 
- O 10 Lw N 2538 2742 M 2506 2763 I 2506 2722 I 2538 2742 I : 0.66 0.723 +S K 
-; N 2506 2763 M 2538 2742 I : 0.66 0.723 +S K 
-; 6 Lw N 2506 2742 M 2453 2742 I : 0.66 0.723 +S K 
-; N 1847 2600 M 1847 2688 I 2587 2688 I 2587 2600 I 1847 2600 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1847 2667 M <0C>S 
-1880 2667 M <0D>S  1903 2667 M <0E>S  1936 2667 M <0F>S  1972 2667 M <10>S  1998 2667 M <11>S  2052 2667 M <12>S  2068 2667 M <13>S  
-2090 2667 M <14>S 
-2123 2667 M <03>S 
-2158 2667 M <04>S  2200 2667 M <15>S  2244 2667 M <07>S  
-T32RsrcBegin
-
-30
-/g894 [22 0 5 -51 18 12 ] 
-/g894 [13 63 true [1 0 0 1 -5 51 ]  0 0]
-[<00f8
-00f8
-01f8
-01f0
-03f0
-03e0
-07e0
-07e0
-07c0
-0fc0
-0f80
-1f80
-1f80
-1f80
-3f00
-3f00
-3f00
-3f00
-7e00
-7e00
-7e00
-7e00
-7e00
-7e00
-fe00
-fe00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fe00
-fe00
-7e00
-7e00
-7e00
-7e00
-7e00
-7f00
-3f00
-3f00
-3f00
-3f00
-1f80
-1f80
-1f80
-0fc0
-0fc0
-0fc0
-07e0
-07e0
-03e0
-03f0
-01f0
-01f8
-00f8
-00f8
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-2258 2667 M <1E>S 
-2279 2667 M <04>S 
-2321 2667 M <05>S  2360 2667 M <0C>S  2393 2667 M <05>S  2432 2667 M <07>S  2447 2667 M <03>S  2482 2667 M <04>S  2524 2667 M <15>S  
-T32RsrcBegin
-
-31
-/g895 [22 0 5 -51 18 12 ] 
-/g895 [13 63 true [1 0 0 1 -5 51 ]  0 0]
-[<f800
-f800
-fc00
-7c00
-7e00
-3e00
-3f00
-3f00
-1f80
-1f80
-0f80
-0fc0
-0fc0
-0fc0
-07e0
-07e0
-07e0
-07e0
-03f0
-03f0
-03f0
-03f0
-03f0
-03f0
-03f8
-03f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-03f8
-03f8
-03f0
-03f0
-03f0
-03f0
-03f0
-03f0
-07e0
-07e0
-07e0
-07e0
-0fc0
-0fc0
-0fc0
-1f80
-1f80
-1f80
-3f00
-3f00
-3e00
-7e00
-7c00
-fc00
-f800
-f800
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-2567 2667 M <1F>S 
-1 Lw solid N 3294 3262 M 3294 3231 I 3295 3229 I 3296 3228 I 3297 3229 I 3298 3231 I 3298 3262 I 3297 3263 I 3296 3264 I 3295 3263 I 3294 3262 I 3294 3262 I C 
-3294 3209 M 3294 3178 I 3295 3176 I 3296 3176 I 3297 3176 I 3298 3178 I 3298 3209 I 3297 3210 I 3296 3211 I 3295 3210 I 3294 3209 I 3294 3209 I C 
-3294 3155 M 3294 3124 I 3295 3123 I 3296 3122 I 3297 3123 I 3298 3124 I 3298 3155 I 3297 3157 I 3296 3157 I 3295 3157 I 3294 3155 I 3294 3155 I C 
-3294 3102 M 3294 3071 I 3295 3070 I 3296 3069 I 3297 3070 I 3298 3071 I 3298 3102 I 3297 3104 I 3296 3105 I 3295 3104 I 3294 3102 I 3294 3102 I C 
-3294 3049 M 3294 3018 I 3295 3016 I 3296 3016 I 3297 3016 I 3298 3018 I 3298 3049 I 3297 3050 I 3296 3051 I 3295 3050 I 3294 3049 I 3294 3049 I C 
-3294 2995 M 3294 2964 I 3295 2963 I 3296 2962 I 3297 2963 I 3298 2964 I 3298 2995 I 3297 2998 I 3296 2998 I 3295 2998 I 3294 2995 I 3294 2995 I C 
-3294 2943 M 3294 2911 I 3295 2910 I 3296 2909 I 3297 2910 I 3298 2911 I 3298 2943 I 3297 2944 I 3296 2945 I 3295 2944 I 3294 2943 I 3294 2943 I C 
-3294 2889 M 3294 2858 I 3295 2856 I 3296 2856 I 3297 2856 I 3298 2858 I 3298 2889 I 3297 2890 I 3296 2891 I 3295 2890 I 3294 2889 I 3294 2889 I C 
-3294 2836 M 3294 2805 I 3295 2804 I 3296 2803 I 3297 2804 I 3298 2805 I 3298 2836 I 3297 2838 I 3296 2838 I 3295 2838 I 3294 2836 I 3294 2836 I C 
-3294 2783 M 3294 2751 I 3295 2750 I 3296 2749 I 3297 2750 I 3298 2751 I 3298 2783 I 3297 2784 I 3296 2785 I 3295 2784 I 3294 2783 I 3294 2783 I C 
-3294 2730 M 3294 2699 I 3295 2697 I 3296 2696 I 3297 2697 I 3298 2699 I 3298 2730 I 3297 2731 I 3296 2732 I 3295 2731 I 3294 2730 I 3294 2730 I C 
-3294 2676 M 3294 2645 I 3295 2644 I 3296 2643 I 3297 2644 I 3298 2645 I 3298 2676 I 3297 2678 I 3296 2678 I 3295 2678 I 3294 2676 I 3294 2676 I C 
-3294 2623 M 3294 2591 I 3295 2590 I 3296 2589 I 3297 2590 I 3298 2591 I 3298 2623 I 3297 2625 I 3296 2625 I 3295 2625 I 3294 2623 I 3294 2623 I C 
-3294 2570 M 3294 2539 I 3295 2537 I 3296 2536 I 3297 2537 I 3298 2539 I 3298 2570 I 3297 2571 I 3296 2572 I 3295 2571 I 3294 2570 I 3294 2570 I C 
-3294 2516 M 3294 2485 I 3295 2484 I 3296 2483 I 3297 2484 I 3298 2485 I 3298 2516 I 3297 2518 I 3296 2518 I 3295 2518 I 3294 2516 I 3294 2516 I C 
-3294 2463 M 3294 2432 I 3295 2431 I 3296 2430 I 3297 2431 I 3298 2432 I 3298 2463 I 3297 2465 I 3296 2465 I 3295 2465 I 3294 2463 I 3294 2463 I C 
-3294 2410 M 3294 2379 I 3295 2377 I 3296 2376 I 3297 2377 I 3298 2379 I 3298 2410 I 3297 2411 I 3296 2412 I 3295 2411 I 3294 2410 I 3294 2410 I C 
-3294 2357 M 3294 2326 I 3295 2324 I 3296 2324 I 3297 2324 I 3298 2326 I 3298 2357 I 3297 2358 I 3296 2359 I 3295 2358 I 3294 2357 I 3294 2357 I C 
-3294 2303 M 3294 2272 I 3295 2271 I 3296 2270 I 3297 2271 I 3298 2272 I 3298 2303 I 3297 2305 I 3296 2306 I 3295 2305 I 3294 2303 I 3294 2303 I C 
-3294 2250 M 3294 2219 I 3295 2217 I 3296 2216 I 3297 2217 I 3298 2219 I 3298 2250 I 3297 2252 I 3296 2252 I 3295 2252 I 3294 2250 I 3294 2250 I C 
-3294 2197 M 3294 2166 I 3295 2164 I 3296 2164 I 3297 2164 I 3298 2166 I 3298 2197 I 3297 2198 I 3296 2199 I 3295 2198 I 3294 2197 I 3294 2197 I C 
-3294 2143 M 3294 2112 I 3295 2111 I 3296 2110 I 3297 2111 I 3298 2112 I 3298 2143 I 3297 2145 I 3296 2146 I 3295 2145 I 3294 2143 I 3294 2143 I C 
-3294 2091 M 3294 2059 I 3295 2058 I 3296 2057 I 3297 2058 I 3298 2059 I 3298 2091 I 3297 2092 I 3296 2093 I 3295 2092 I 3294 2091 I 3294 2091 I C 
-3294 2037 M 3294 2006 I 3295 2004 I 3296 2004 I 3297 2004 I 3298 2006 I 3298 2037 I 3297 2038 I 3296 2039 I 3295 2038 I 3294 2037 I 3294 2037 I C 
-3294 1983 M 3294 1953 I 3295 1952 I 3296 1951 I 3297 1952 I 3298 1953 I 3298 1983 I 3297 1986 I 3296 1986 I 3295 1986 I 3294 1983 I 3294 1983 I C 
-3294 1931 M 3294 1899 I 3295 1898 I 3296 1897 I 3297 1898 I 3298 1899 I 3298 1931 I 3297 1932 I 3296 1933 I 3295 1932 I 3294 1931 I 3294 1931 I C 
-3294 1877 M 3294 1846 I 3295 1844 I 3296 1844 I 3297 1844 I 3298 1846 I 3298 1877 I 3297 1879 I 3296 1879 I 3295 1879 I 3294 1877 I 3294 1877 I C 
-3294 1824 M 3294 1793 I 3295 1792 I 3296 1791 I 3297 1792 I 3298 1793 I 3298 1824 I 3297 1826 I 3296 1826 I 3295 1826 I 3294 1824 I 3294 1824 I C 
-3294 1771 M 3294 1739 I 3295 1738 I 3296 1737 I 3297 1738 I 3298 1739 I 3298 1771 I 3297 1772 I 3296 1773 I 3295 1772 I 3294 1771 I 3294 1771 I C 
-3294 1718 M 3294 1687 I 3295 1685 I 3296 1684 I 3297 1685 I 3298 1687 I 3298 1718 I 3297 1719 I 3296 1720 I 3295 1719 I 3294 1718 I 3294 1718 I C 
-3294 1664 M 3294 1633 I 3295 1632 I 3296 1631 I 3297 1632 I 3298 1633 I 3298 1664 I 3297 1666 I 3296 1666 I 3295 1666 I 3294 1664 I 3294 1664 I C 
-3294 1611 M 3294 1580 I 3295 1579 I 3296 1578 I 3297 1579 I 3298 1580 I 3298 1611 I 3297 1613 I 3296 1614 I 3295 1613 I 3294 1611 I 3294 1611 I C 
-3294 1558 M 3294 1527 I 3295 1525 I 3296 1524 I 3297 1525 I 3298 1527 I 3298 1558 I 3297 1559 I 3296 1560 I 3295 1559 I 3294 1558 I 3294 1558 I C 
-3294 1504 M 3294 1473 I 3295 1472 I 3296 1471 I 3297 1472 I 3298 1473 I 3298 1504 I 3297 1506 I 3296 1506 I 3295 1506 I 3294 1504 I 3294 1504 I C 
-3294 1451 M 3294 1420 I 3295 1419 I 3296 1418 I 3297 1419 I 3298 1420 I 3298 1451 I 3297 1453 I 3296 1454 I 3295 1453 I 3294 1451 I 3294 1451 I C 
-3294 1398 M 3294 1367 I 3295 1365 I 3296 1364 I 3297 1365 I 3298 1367 I 3298 1398 I 3297 1399 I 3296 1400 I 3295 1399 I 3294 1398 I 3294 1398 I C 
-3294 1345 M 3294 1314 I 3295 1312 I 3296 1312 I 3297 1312 I 3298 1314 I 3298 1345 I 3297 1346 I 3296 1347 I 3295 1346 I 3294 1345 I 3294 1345 I C 
-3294 1291 M 3294 1260 I 3295 1259 I 3296 1258 I 3297 1259 I 3298 1260 I 3298 1291 I 3297 1293 I 3296 1294 I 3295 1293 I 3294 1291 I 3294 1291 I C 
-3294 1238 M 3294 1207 I 3295 1205 I 3296 1205 I 3297 1205 I 3298 1207 I 3298 1238 I 3297 1240 I 3296 1241 I 3295 1240 I 3294 1238 I 3294 1238 I C 
-3294 1185 M 3294 1154 I 3295 1152 I 3296 1152 I 3297 1152 I 3298 1154 I 3298 1185 I 3297 1186 I 3296 1187 I 3295 1186 I 3294 1185 I 3294 1185 I C 
-3294 1131 M 3294 1100 I 3295 1099 I 3296 1098 I 3297 1099 I 3298 1100 I 3298 1131 I 3297 1134 I 3296 1134 I 3295 1134 I 3294 1131 I 3294 1131 I C 
-3294 1079 M 3294 1047 I 3295 1046 I 3296 1045 I 3297 1046 I 3298 1047 I 3298 1079 I 3297 1080 I 3296 1081 I 3295 1080 I 3294 1079 I 3294 1079 I C 
-3294 1025 M 3294 994 I 3295 992 I 3296 992 I 3297 992 I 3298 994 I 3298 1025 I 3297 1026 I 3296 1027 I 3295 1026 I 3294 1025 I 3294 1025 I C 
-3294 972 M 3294 941 I 3295 940 I 3296 939 I 3297 940 I 3298 941 I 3298 972 I 3297 974 I 3296 974 I 3295 974 I 3294 972 I 3294 972 I C 
-3294 919 M 3294 887 I 3295 886 I 3296 885 I 3297 886 I 3298 887 I 3298 919 I 3297 920 I 3296 921 I 3295 920 I 3294 919 I 3294 919 I C 
-3294 865 M 3294 835 I 3295 832 I 3296 832 I 3297 832 I 3298 835 I 3298 865 I 3297 867 I 3296 868 I 3295 867 I 3294 865 I 3294 865 I C 
-3294 812 M 3294 781 I 3295 780 I 3296 779 I 3297 780 I 3298 781 I 3298 812 I 3297 814 I 3296 814 I 3295 814 I 3294 812 I 3294 812 I C 
-3294 759 M 3294 728 I 3295 726 I 3296 725 I 3297 726 I 3298 728 I 3298 759 I 3297 761 I 3296 761 I 3295 761 I 3294 759 I 3294 759 I C 
-3294 706 M 3294 675 I 3295 673 I 3296 672 I 3297 673 I 3298 675 I 3298 706 I 3297 707 I 3296 708 I 3295 707 I 3294 706 I 3294 706 I C 
-3294 652 M 3294 621 I 3295 620 I 3296 619 I 3297 620 I 3298 621 I 3298 652 I 3297 654 I 3296 654 I 3295 654 I 3294 652 I 3294 652 I C 
-3294 599 M 3294 568 I 3295 567 I 3296 566 I 3297 567 I 3298 568 I 3298 599 I 3297 601 I 3296 602 I 3295 601 I 3294 599 I 3294 599 I C 
-3294 546 M 3294 515 I 3295 513 I 3296 513 I 3297 513 I 3298 515 I 3298 546 I 3297 547 I 3296 548 I 3295 547 I 3294 546 I 3294 546 I C 
-3294 492 M 3294 462 I 3295 460 I 3296 459 I 3297 460 I 3298 462 I 3298 492 I 3297 494 I 3296 495 I 3295 494 I 3294 492 I 3294 492 I C 
-3294 439 M 3294 408 I 3295 407 I 3296 406 I 3297 407 I 3298 408 I 3298 439 I 3297 441 I 3296 442 I 3295 441 I 3294 439 I 3294 439 I C 
-3294 386 M 3294 355 I 3295 353 I 3296 353 I 3297 353 I 3298 355 I 3298 386 I 3297 388 I 3296 388 I 3295 388 I 3294 386 I 3294 386 I C 
-3294 333 M 3294 302 I 3295 300 I 3296 300 I 3297 300 I 3298 302 I 3298 333 I 3297 334 I 3296 335 I 3295 334 I 3294 333 I 3294 333 I C 
-3294 279 M 3294 248 I 3295 247 I 3296 246 I 3297 247 I 3298 248 I 3298 279 I 3297 281 I 3296 282 I 3295 281 I 3294 279 I 3294 279 I C 
-:  L ; K 
-N 3068 12 M 3068 246 I 3524 246 I 3524 12 I 3068 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 3068 246 M 3524 246 I 3524 12 I 3068 12 I 3068 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-32
-/g272 [31 0 3 -35 29 1 ] 
-/g272 [26 36 true [1 0 0 1 -3 35 ]  0 0]
-[<001fe000
-00fffc00
-01ffff00
-07ffff80
-0fffffc0
-0ff01fc0
-1fc007c0
-3f8003c0
-3f000080
-7f000000
-7e000000
-7e000000
-7e000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fe000000
-7e000000
-7e000000
-7f000000
-3f0000c0
-3f8001c0
-3fc007c0
-1ff01fc0
-0fffffc0
-07ffff80
-03ffff00
-00fffc00
-003fe000
->
- ]
-/TT37845b00 AddT3T32Char
-
-33
-/g346 [39 0 6 -50 34 0 ] 
-/g346 [28 50 true [1 0 0 1 -6 50 ]  0 0]
-[<fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc07f000
-fc1ffe00
-fc7fff00
-fcffff80
-fdffffc0
-fff83fc0
-ffe01fe0
-ffc00fe0
-ff0007e0
-fe0007f0
-fe0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
->
- ]
-/TT37845b00 AddT3T32Char
-
-34
-/g282 [39 0 3 -50 33 1 ] 
-/g282 [30 51 true [1 0 0 1 -3 50 ]  0 0]
-[<000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-003f80fc
-00fff0fc
-03fff8fc
-07fffcfc
-0ffffffc
-1ff07ffc
-1fc01ffc
-3f800ffc
-3f0007fc
-7f0003fc
-7e0001fc
-7e0000fc
-7e0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fe0000fc
-7e0000fc
-7e0001fc
-7f0003fc
-7f0007fc
-3f800ffc
-3fc01ffc
-1fe07f7c
-0ffffe7c
-0ffffc7c
-07fff87c
-01ffe07c
-007f8000
->
- ]
-/TT37845b00 AddT3T32Char
-
-35
-/g367 [17 0 6 -50 12 0 ] 
-/g367 [6 50 true [1 0 0 1 -6 50 ]  0 0]
-[<fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-3159 151 M <1A>S 
-3191 151 M ( )S  3219 151 M (!)S  3255 151 M <09>S  3289 151 M (")S  3324 151 M <18>S  3360 151 M (#)S  3375 151 M <09>S  3409 151 M <0D>S  
-7 Lw N 3159 160 M 3432 160 I : 0.66 0.723 +S K 
-; N 3257 1411 M 3257 1577 I 3334 1577 I 3334 1411 I 3257 1411 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 3334 1577 M 3334 1411 I 3257 1411 I 3257 1577 I 3334 1577 I C 
-: 0.66 0.723 +S K 
-; N 2538 1910 M 2538 2077 I 2615 2077 I 2615 1910 I 2538 1910 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 2615 2077 M 2615 1910 I 2538 1910 I 2538 2077 I 2615 2077 I C 
-: 0.66 0.723 +S K 
-; N 2615 1411 M 3191 1411 I : 0.66 0.723 +S K 
-; N 3257 1411 M 3225 1432 I 3225 1390 I 3257 1411 I C 
-3225 1432 M 3257 1411 I 3225 1432 I C 
- O 10 Lw N 3257 1411 M 3225 1432 I 3225 1390 I 3257 1411 I : 0.66 0.723 +S K 
-; N 3225 1432 M 3257 1411 I : 0.66 0.723 +S K 
-; 6 Lw N 3225 1411 M 3172 1411 I : 0.66 0.723 +S K 
-; N 2646 1268 M 2646 1357 I 3226 1357 I 3226 1268 I 2646 1268 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-36
-/g395 [39 0 3 -35 33 14 ] 
-/g395 [30 49 true [1 0 0 1 -3 35 ]  0 0]
-[<003f8000
-00fff07c
-03fff87c
-07fffc7c
-0fffff7c
-1ff07ffc
-1fc01ffc
-3f800ffc
-3f0007fc
-7f0003fc
-7e0001fc
-7e0000fc
-7e0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fe0000fc
-7e0000fc
-7e0001fc
-7f0003fc
-7f0007fc
-3f800ffc
-3fc01ffc
-1fe07ffc
-0ffffefc
-0ffffcfc
-07fff8fc
-01ffe0fc
-007f80fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-2646 1335 M <1A>S 
-2677 1335 M ( )S  2706 1335 M (!)S  2742 1335 M <09>S  2775 1335 M (")S  2811 1335 M <04>S  2853 1335 M (#)S  2868 1335 M <01>S  2905 1335 M (#)S  2920 1335 M ( )S  2948 1335 M <0B>S  2985 1335 M <18>S  3021 1335 M <19>S  3042 1335 M <19>S  3062 1335 M <09>S  3096 1335 M <0D>S  3120 1335 M <01>S 
-3156 1335 M <09>S  3190 1335 M ($)S  
-N 1534 729 M 1534 1057 I 2253 1057 I 2253 729 I 1534 729 I C 
- O N 1534 1057 M 2253 1057 I 2253 729 I 1534 729 I 1534 1057 I : 0.66 0.723 +S K 
-; N 1510 703 M 1510 1030 I 2229 1030 I 2229 703 I 1510 703 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1510 1030 M 2229 1030 I 2229 703 I 1510 703 I 1510 1030 I C 
-: 0.66 0.723 +S K 
-; /TT37846b00
-[55 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 55 div 0 0 -1 55 div 0 0 ]
-/__TT37846b00
-GreNewFont
-T32RsrcBegin
-
-1
-/g87 [29 0 5 -35 27 0 ] 
-/g87 [22 35 true [1 0 0 1 -5 35 ]  0 0]
-[<7ffc00
-ffff80
-ffffc0
-fffff0
-f807f0
-f801f8
-f800f8
-f800fc
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f800f8
-f801f8
-f803f0
-f807f0
-ffffe0
-ffffc0
-ffff00
-fffc00
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
->
- ]
-/TT37846b00 AddT3T32Char
-
-2
-/g437 [29 0 4 -26 25 1 ] 
-/g437 [21 27 true [1 0 0 1 -4 26 ]  0 0]
-[<f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f801f8
-fc03f8
-7c07f8
-7f0ff8
-3ffef8
-3ffcf8
-1ff878
-07e000
->
- ]
-/TT37846b00 AddT3T32Char
-
-3
-/g410 [19 0 1 -33 17 1 ] 
-/g410 [16 34 true [1 0 0 1 -1 33 ]  0 0]
-[<0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-ffff
-ffff
-ffff
-ffff
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0fc0
-0fc1
-07ff
-07ff
-03ff
-00fe
->
- ]
-/TT37846b00 AddT3T32Char
-
-4
-/g3 [13 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT37846b00 AddT3T32Char
-
-5
-/g90 [30 0 5 -35 29 0 ] 
-/g90 [24 35 true [1 0 0 1 -5 35 ]  0 0]
-[<fffe00
-ffff80
-ffffe0
-fffff0
-f807f8
-f801f8
-f800fc
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f800f8
-f801f8
-f807f0
-ffffe0
-ffff80
-fffe00
-ffff80
-f81fc0
-f807e0
-f803e0
-f803f0
-f801f0
-f801f8
-f800f8
-f800f8
-f8007c
-f8007c
-f8003e
-f8003e
-f8003f
-f8001f
-f8001f
->
- ]
-/TT37846b00 AddT3T32Char
-
-6
-/g62 [24 0 5 -35 23 0 ] 
-/g62 [18 35 true [1 0 0 1 -5 35 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-ffffc0
-ffffc0
-ffffc0
-ffffc0
->
- ]
-/TT37846b00 AddT3T32Char
-
-7
-/g18 [30 0 3 -36 28 1 ] 
-/g18 [25 37 true [1 0 0 1 -3 36 ]  0 0]
-[<001fe000
-007ffc00
-01ffff00
-03ffff80
-07f01f80
-0fc00780
-1f800180
-1f000000
-3e000000
-3e000000
-7c000000
-7c000000
-7c000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-fc000000
-7c000000
-7c000000
-7e000000
-3e000000
-3f000000
-1f800180
-1fc00780
-0ff01f80
-07ffff80
-03ffff00
-00fffc00
-001fe000
->
- ]
-/TT37846b00 AddT3T32Char
-
-8
-/g94 [26 0 2 -36 24 1 ] 
-/g94 [22 37 true [1 0 0 1 -2 36 ]  0 0]
-[<00fe00
-07ffc0
-0fffe0
-1ffff0
-3f81f0
-3e0070
-7e0030
-7c0000
-7c0000
-7c0000
-7c0000
-7e0000
-7e0000
-3f8000
-3fc000
-1ff000
-0ffc00
-07ff00
-01ffc0
-007fe0
-001ff0
-0007f8
-0001f8
-0000fc
-0000fc
-00007c
-00007c
-00007c
-00007c
-0000fc
-c000f8
-f001f8
-fc07f0
-ffffe0
-7fffc0
-1fff80
-03fc00
->
- ]
-/TT37846b00 AddT3T32Char
-
-9
-/g24 [34 0 5 -35 32 0 ] 
-/g24 [27 35 true [1 0 0 1 -5 35 ]  0 0]
-[<fffe0000
-ffffc000
-fffff000
-fffffc00
-f803fe00
-f800fe00
-f8003f00
-f8001f80
-f8000f80
-f8000fc0
-f80007c0
-f80007c0
-f80007e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80007c0
-f80007c0
-f80007c0
-f8000fc0
-f8000f80
-f8001f80
-f8003f00
-f8007e00
-f803fc00
-fffff800
-fffff000
-ffffc000
-fffe0000
->
- ]
-/TT37846b00 AddT3T32Char
-
-10
-/g104 [36 0 5 -35 32 1 ] 
-/g104 [27 36 true [1 0 0 1 -5 35 ]  0 0]
-[<f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-fc0007e0
-7c0007c0
-7e0007c0
-7e000f80
-3f001f80
-1fc07f00
-1ffffe00
-07fffc00
-03fff000
-007fc000
->
- ]
-/TT37846b00 AddT3T32Char
-T32RsrcEnd
-F /F1 0 /0 F /TT37846b00 mF 
-/F1S37 F1 [55.727 0 0 -55.727 0 0 ] mFS
-F1S37 Ji 
-1741 850 M <01>S 
-1768 850 M <02>S  1794 850 M <03>S  1811 850 M <04>S  1823 850 M <05>S  1851 850 M <06>S  1872 850 M <07>S  1899 850 M <04>S  1910 850 M <08>S  1933 850 M <09>S  1964 850 M <0A>S  
-T32RsrcBegin
-
-11
-/g349 [13 0 3 -36 9 0 ] 
-/g349 [6 36 true [1 0 0 1 -3 36 ]  0 0]
-[<78
-fc
-fc
-fc
-78
-00
-00
-00
-00
-00
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
->
- ]
-/TT37846b00 AddT3T32Char
-
-12
-/g374 [29 0 4 -27 25 0 ] 
-/g374 [21 27 true [1 0 0 1 -4 27 ]  0 0]
-[<003f00
-f0ffc0
-f9ffe0
-fbffe0
-ff87f0
-ff01f0
-fe01f8
-fc00f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
->
- ]
-/TT37846b00 AddT3T32Char
-
-13
-/g346 [29 0 4 -38 25 0 ] 
-/g346 [21 38 true [1 0 0 1 -4 38 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f83f00
-f8ffc0
-f9ffe0
-fbffe0
-ff87f0
-ff01f0
-fe01f8
-fc00f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
->
- ]
-/TT37846b00 AddT3T32Char
-
-14
-/g286 [28 0 3 -27 26 1 ] 
-/g286 [23 28 true [1 0 0 1 -3 27 ]  0 0]
-[<00ff00
-03ffc0
-07ffe0
-1ffff0
-1f81f8
-3e00fc
-3c007c
-7c007c
-78003e
-f8003e
-f8003e
-fffffe
-fffffe
-fffffe
-fffffe
-f80000
-f80000
-f80000
-f80000
-7c0000
-7c0000
-7e0000
-3f000c
-3fc07c
-1ffffc
-0ffffc
-03fff0
-00ff80
->
- ]
-/TT37846b00 AddT3T32Char
-T32RsrcEnd
-1601 916 M <0B>S 
-1613 916 M <0C>S  1639 916 M <04>S  1651 916 M <03>S  1668 916 M <0D>S  1694 916 M <0E>S  1719 916 M <04>S  
-/TT37847b00
-[55 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 55 div 0 0 -1 55 div 0 0 ]
-/__TT37847b00
-GreNewFont
-T32RsrcBegin
-
-1
-/g100 [27 0 4 -35 31 0 ] 
-/g100 [27 35 true [1 0 0 1 -4 35 ]  0 0]
-[<7fffffe0
-ffffffe0
-ffffffc0
-ffffffc0
-001f0000
-001e0000
-001e0000
-003e0000
-003e0000
-003e0000
-003c0000
-003c0000
-007c0000
-007c0000
-007c0000
-00780000
-00780000
-00f80000
-00f80000
-00f80000
-00f00000
-00f00000
-01f00000
-01f00000
-01f00000
-01e00000
-01e00000
-03e00000
-03e00000
-03e00000
-03c00000
-03c00000
-07c00000
-07c00000
-07c00000
->
- ]
-/TT37847b00 AddT3T32Char
-
-2
-/g396 [19 0 2 -27 21 0 ] 
-/g396 [19 27 true [1 0 0 1 -2 27 ]  0 0]
-[<0007e0
-078fe0
-079fe0
-073fe0
-0f7840
-0ff000
-0fe000
-0fc000
-0f8000
-1f8000
-1f0000
-1f0000
-1f0000
-1e0000
-3e0000
-3e0000
-3e0000
-3c0000
-3c0000
-7c0000
-7c0000
-7c0000
-780000
-780000
-f80000
-f80000
-f00000
->
- ]
-/TT37847b00 AddT3T32Char
-
-3
-/g258 [29 0 2 -27 27 1 ] 
-/g258 [25 28 true [1 0 0 1 -2 27 ]  0 0]
-[<003f0000
-00ffc780
-01ffe780
-07fff780
-07e0ff00
-0fc07f00
-1f803f00
-1f001f00
-3e001f00
-3e001e00
-7c001e00
-7c003e00
-7c003e00
-7c003e00
-f8003c00
-f8007c00
-f8007c00
-f8007c00
-f800fc00
-f801f800
-f801f800
-f803f800
-fc077800
-7e1f7800
-7ffef000
-3ffcf000
-1ff0f000
-0fc00000
->
- ]
-/TT37847b00 AddT3T32Char
-
-4
-/g374 [29 0 2 -27 26 0 ] 
-/g374 [24 27 true [1 0 0 1 -2 27 ]  0 0]
-[<0001f0
-0787fc
-079ffe
-07bffe
-0f7c3f
-0ff01f
-0fe01f
-0fc01f
-0fc01f
-1f801f
-1f001f
-1f001e
-1f001e
-1e001e
-3e003e
-3e003e
-3e003c
-3c003c
-3c003c
-7c007c
-7c007c
-780078
-780078
-780078
-f800f8
-f800f8
-f000f0
->
- ]
-/TT37847b00 AddT3T32Char
-
-5
-/g400 [22 0 0 -27 20 1 ] 
-/g400 [20 28 true [1 0 0 1 0 27 ]  0 0]
-[<003f80
-00fff0
-01fff0
-03fff0
-07e0f0
-07c030
-0f8000
-0f8000
-0f8000
-0f8000
-0fc000
-07f000
-07fc00
-03fe00
-01ff00
-007f80
-001fc0
-000fc0
-0007c0
-0007c0
-0007c0
-0007c0
-400f80
-f81f80
-ffff00
-fffe00
-7ffc00
-0fe000
->
- ]
-/TT37847b00 AddT3T32Char
-
-6
-/g373 [44 0 2 -27 41 0 ] 
-/g373 [39 27 true [1 0 0 1 -2 27 ]  0 0]
-[<0003f003f0
-078ffc0ff8
-079ffe1ffc
-07bffe3ffc
-0f7c3e7c7e
-0ff01ff03e
-0fe01fe03e
-0fc01fc03e
-0fc01f803e
-1f801f803e
-1f001f003e
-1f001f003c
-1e001e003c
-1e001e003c
-3e003e003c
-3e003e007c
-3e003c007c
-3c003c007c
-3c003c007c
-7c007c0078
-7c007c0078
-7800780078
-78007800f8
-78007800f8
-f800f800f8
-f800f800f8
-f000f000f0
->
- ]
-/TT37847b00 AddT3T32Char
-
-7
-/g349 [13 0 2 -36 14 0 ] 
-/g349 [12 36 true [1 0 0 1 -2 36 ]  0 0]
-[<01f0
-03f0
-03f0
-03f0
-03e0
-0000
-0000
-0000
-0000
-0000
-0780
-0780
-0780
-0f80
-0f80
-0f80
-0f00
-0f00
-1f00
-1f00
-1f00
-1e00
-1e00
-3e00
-3e00
-3e00
-3c00
-3c00
-7c00
-7c00
-7800
-7800
-7800
-f800
-f800
-f000
->
- ]
-/TT37847b00 AddT3T32Char
-
-8
-/g381 [29 0 2 -27 27 1 ] 
-/g381 [25 28 true [1 0 0 1 -2 27 ]  0 0]
-[<001fe000
-007ff800
-01fffe00
-03fffe00
-07f07f00
-0fc01f00
-1f801f80
-1f000f80
-3e000f80
-3e000f80
-7c000f80
-7c000f80
-7c000f80
-f8000f80
-f8000f80
-f8001f00
-f8001f00
-f8001f00
-f8003e00
-f8003e00
-f8007c00
-fc00fc00
-7c01f800
-7f07f000
-3fffe000
-3fffc000
-0fff0000
-03fc0000
->
- ]
-/TT37847b00 AddT3T32Char
-
-9
-/g3 [13 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT37847b00 AddT3T32Char
-
-10
-/g17 [30 0 3 -35 29 0 ] 
-/g17 [26 35 true [1 0 0 1 -3 35 ]  0 0]
-[<01fff800
-03fffe00
-03ffff00
-03ffff80
-03c01fc0
-07c00fc0
-07c007c0
-078007c0
-078007c0
-078007c0
-0f800f80
-0f800f80
-0f001f00
-0f003f00
-0f00fc00
-1ffff800
-1ffff000
-1ffffc00
-1ffffe00
-1e007f00
-3e001f80
-3e000f80
-3c000f80
-3c000f80
-3c000f80
-7c000f80
-7c001f00
-7c001f00
-78003f00
-78007e00
-7801fc00
-fffff800
-fffff000
-ffffc000
-fffe0000
->
- ]
-/TT37847b00 AddT3T32Char
-
-11
-/g437 [29 0 4 -26 28 1 ] 
-/g437 [24 27 true [1 0 0 1 -4 26 ]  0 0]
-[<1e001e
-1e001e
-1e001e
-3e003e
-3e003e
-3e003e
-3c003c
-3c003c
-7c003c
-7c007c
-7c007c
-780078
-780078
-7800f8
-f800f8
-f800f8
-f001f0
-f001f0
-f003f0
-f007f0
-f00ff0
-f81fe0
-f87de0
-fff9e0
-7ff1e0
-7fe1e0
-1f8000
->
- ]
-/TT37847b00 AddT3T32Char
-
-12
-/g296 [17 0 -5 -39 23 10 ] 
-/g296 [28 49 true [1 0 0 1 5 39 ]  0 0]
-[<00000fe0
-00003ff0
-00007ff0
-0000fff0
-0000f820
-0001f000
-0001e000
-0003e000
-0003c000
-0003c000
-0003c000
-0003c000
-0007c000
-003fff00
-007fff00
-007fff00
-007ffe00
-00078000
-000f0000
-000f0000
-000f0000
-000f0000
-000f0000
-001e0000
-001e0000
-001e0000
-001e0000
-003e0000
-003c0000
-003c0000
-003c0000
-003c0000
-007c0000
-00780000
-00780000
-00780000
-00780000
-00f80000
-00f00000
-00f00000
-00f00000
-01f00000
-01e00000
-03e00000
-07e00000
-ffc00000
-ff800000
-ff000000
-fc000000
->
- ]
-/TT37847b00 AddT3T32Char
-
-13
-/g286 [27 0 2 -27 25 1 ] 
-/g286 [23 28 true [1 0 0 1 -2 27 ]  0 0]
-[<001fc0
-007ff0
-01fff8
-03fffc
-07f07e
-0fc03e
-1f803e
-1f003e
-3f003e
-3e007e
-7e00fc
-7c03fc
-7ffff8
-7ffff0
-ffffc0
-fffc00
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-7c0060
-7e03e0
-7fffe0
-3fffc0
-1fff80
-03fc00
->
- ]
-/TT37847b00 AddT3T32Char
-T32RsrcEnd
-F /F2 0 /0 F /TT37847b00 mF 
-/F2S37 F2 [55.727 0 0 -55.727 0 0 ] mFS
-F2S37 Ji 
-1731 916 M <01>S 
-1756 916 M <02>S  1773 916 M <03>S  1799 916 M <04>S  1825 916 M <05>S  1845 916 M <06>S  1885 916 M <07>S  1897 916 M <05>S  1917 916 M <05>S  1937 916 M <07>S  1949 916 M <08>S  1974 916 M <04>S  2000 916 M <09>S  2011 916 M <0A>S  2039 916 M <0B>S  2065 916 M <0C>S  2080 916 M <0C>S 
-2095 916 M <0D>S  2120 916 M <02>S  
-N 1534 2236 M 1534 2564 I 2253 2564 I 2253 2236 I 1534 2236 I C 
- O N 1534 2564 M 2253 2564 I 2253 2236 I 1534 2236 I 1534 2564 I : 0.66 0.723 +S K 
-; N 1510 2210 M 1510 2537 I 2229 2537 I 2229 2210 I 1510 2210 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1510 2537 M 2229 2537 I 2229 2210 I 1510 2210 I 1510 2537 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-15
-/g68 [48 0 5 -35 43 0 ] 
-/g68 [38 35 true [1 0 0 1 -5 35 ]  0 0]
-[<7f000001f8
-ff800003fc
-ff800007fc
-ffc00007fc
-ffc0000ffc
-fbc0000f7c
-fbe0000f7c
-fbe0001f7c
-f9e0001e7c
-f9f0003e7c
-f8f0003c7c
-f8f8003c7c
-f8f8007c7c
-f87800787c
-f87c00f87c
-f87c00f07c
-f83e00f07c
-f83e01f07c
-f81e01e07c
-f81f03e07c
-f81f03c07c
-f80f03c07c
-f80f87c07c
-f80f87807c
-f807c7807c
-f807cf807c
-f803cf007c
-f803ff007c
-f803fe007c
-f801fe007c
-f801fe007c
-f800fc007c
-f800fc007c
-f800f8007c
-f80078007c
->
- ]
-/TT37846b00 AddT3T32Char
-
-16
-/g381 [30 0 2 -27 27 1 ] 
-/g381 [25 28 true [1 0 0 1 -2 27 ]  0 0]
-[<007f8000
-03ffe000
-07fff800
-0ffffc00
-1fc0fe00
-3f007e00
-3e003f00
-7c001f00
-7c001f00
-7c001f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-fc001f00
-7c001f00
-7c001f00
-7e003e00
-3f007e00
-3fc1fc00
-1ffff800
-0ffff000
-03ffe000
-00ff0000
->
- ]
-/TT37846b00 AddT3T32Char
-
-17
-/g448 [25 0 1 -26 25 0 ] 
-/g448 [24 26 true [1 0 0 1 -1 26 ]  0 0]
-[<f8001e
-f8001e
-7c003e
-7c003e
-7c003c
-3e007c
-3e007c
-3e0078
-1f00f8
-1f00f8
-1f00f0
-0f81f0
-0f81e0
-0781e0
-07c3e0
-07c3c0
-03c3c0
-03e7c0
-03e780
-01e780
-01ff80
-01ff00
-00ff00
-00fe00
-007e00
-007e00
->
- ]
-/TT37846b00 AddT3T32Char
-T32RsrcEnd
-F1S37 Ji 
-1716 2357 M <0F>S 
-1760 2357 M <10>S  1786 2357 M <11>S  1810 2357 M <0E>S  1835 2357 M <04>S  1846 2357 M <05>S  1874 2357 M <06>S  1895 2357 M <07>S  1922 2357 M <04>S  1933 2357 M <01>S  1960 2357 M <09>S  1991 2357 M <0A>S  
-1553 2424 M <03>S 
-1570 2424 M <10>S  1596 2424 M <04>S  1608 2424 M <03>S  1625 2424 M <0D>S  1651 2424 M <0E>S  1676 2424 M <04>S  
-T32RsrcBegin
-
-14
-/g410 [19 0 3 -33 19 1 ] 
-/g410 [16 34 true [1 0 0 1 -3 33 ]  0 0]
-[<03e0
-03c0
-03c0
-07c0
-07c0
-07c0
-0780
-7fff
-ffff
-ffff
-fffe
-0f00
-0f00
-0f00
-1f00
-1f00
-1e00
-1e00
-1e00
-3e00
-3e00
-3c00
-3c00
-3c00
-7c00
-7c00
-7c00
-7800
-7c00
-7c10
-7ff0
-3ff0
-3fe0
-0fc0
->
- ]
-/TT37847b00 AddT3T32Char
-
-15
-/g282 [29 0 2 -38 30 1 ] 
-/g282 [28 39 true [1 0 0 1 -2 38 ]  0 0]
-[<000001e0
-000001e0
-000001e0
-000003e0
-000003e0
-000003e0
-000003c0
-000003c0
-000007c0
-000007c0
-00000780
-003f0780
-00ffcf80
-01ffef80
-07ffff80
-07e0ff00
-0fc07f00
-1f803f00
-1f001f00
-3e001f00
-3e001e00
-7c003e00
-7c003e00
-7c003e00
-7c003e00
-f8003c00
-f8007c00
-f8007c00
-f800fc00
-f800f800
-f801f800
-f801f800
-f803f800
-fc07f800
-7e1f7000
-7ffe7000
-3ffcf000
-1ff8f000
-0fc00000
->
- ]
-/TT37847b00 AddT3T32Char
-
-16
-/g87 [29 0 2 -35 29 0 ] 
-/g87 [27 35 true [1 0 0 1 -2 35 ]  0 0]
-[<00fff800
-01fffe00
-01ffff80
-01ffffc0
-03e01fc0
-03e007e0
-03e007e0
-03c003e0
-03c003e0
-07c003e0
-07c003e0
-07c003e0
-078007c0
-078007c0
-0f800fc0
-0f801f80
-0f803f00
-0f00ff00
-1ffffe00
-1ffff800
-1ffff000
-1fff8000
-1e000000
-3e000000
-3e000000
-3e000000
-3c000000
-7c000000
-7c000000
-7c000000
-7c000000
-78000000
-f8000000
-f8000000
-f8000000
->
- ]
-/TT37847b00 AddT3T32Char
-T32RsrcEnd
-F2S37 Ji 
-1688 2424 M <01>S 
-1713 2424 M <02>S  1730 2424 M <03>S  1756 2424 M <04>S  1782 2424 M <05>S  1802 2424 M <06>S  1842 2424 M <07>S  1854 2424 M <0E>S  1871 2424 M <0E>S  1888 2424 M <0D>S  1913 2424 M <0F>S  1939 2424 M <09>S  1950 2424 M <10>S  1976 2424 M <0F>S  2002 2424 M <0B>S  2028 2424 M <05>S  2048 2424 M <09>S 
-2059 2424 M <0A>S  2087 2424 M <0B>S  2113 2424 M <0C>S  2128 2424 M <0C>S  2143 2424 M <0D>S  2168 2424 M <02>S  
-N 126 532 M 365 532 I 365 533 I 375 532 I 383 531 I 392 528 I 401 525 I 408 520 I 416 515 I 422 510 I 429 504 I 434 497 I 440 489 I 444 481 I 448 473 I 451 463 I 454 454 I 455 444 I 455 434 I 455 434 I 455 424 I 454 414 I 451 405 I 448 396 I 444 387 I 440 379 I 434 371 I 429 365 I 422 358 I 416 353 I 408 347 I 401 344 I 392 340 I 383 338 I 375 337 I 365 336 I 365 336 I 126 336 I 126 336 I 117 337 I 107 338 I 99 340 I 91 344 I 83 347 I 76 353 I 68 358 I 62 365 I 56 371 I 51 379 I 46 387 I 43 396 I 40 405 I 38 414 I 36 424 I 36 434 I 36 444 I 38 454 I 40 463 I 43 473 I 46 481 I 51 489 I 56 497 I 62 504 I 68 510 I 76 515 I 83 520 I 91 525 I 99 528 I 107 531 I 117 532 I 126 533 I 126 532 I C 
- O N 126 532 M 365 532 I 365 533 I 375 532 I 383 531 I 392 528 I 401 525 I 408 520 I 416 515 I 422 510 I 429 504 I 434 497 I 440 489 I 444 481 I 448 473 I 451 463 I 454 454 I 455 444 I 455 434 I 455 434 I 455 424 I 454 414 I 451 405 I 448 396 I 444 387 I 440 379 I 434 371 I 429 365 I 422 358 I 416 353 I 408 347 I 401 344 I 392 340 I 383 338 I 375 337 I 365 336 I 365 336 I 126 336 I 126 336 I 117 337 I 107 338 I 99 340 I 91 344 I 83 347 I 76 353 I 68 358 I 62 365 I 56 371 I 51 379 I 46 387 I 43 396 I 40 405 I 38 414 I 36 424 I 36 434 I 36 444 I 38 454 I 40 463 I 43 473 I 46 481 I 51 489 I 56 497 I 62 504 I 68 510 I 76 515 I 83 520 I 91 525 I 99 528 I 107 531 I 117 532 I 126 533 I : 0.66 0.723 +S K 
-; N 101 506 M 341 506 I 341 506 I 350 506 I 360 505 I 368 502 I 376 499 I 384 494 I 391 489 I 399 484 I 405 478 I 411 471 I 416 463 I 420 455 I 424 446 I 427 437 I 429 428 I 431 418 I 431 408 I 431 408 I 431 398 I 429 388 I 427 379 I 424 370 I 420 361 I 416 353 I 411 345 I 405 339 I 399 332 I 391 326 I 384 321 I 376 317 I 368 314 I 360 312 I 350 310 I 341 310 I 341 310 I 101 310 I 101 310 I 93 310 I 83 312 I 75 314 I 67 317 I 59 321 I 51 326 I 44 332 I 38 339 I 32 345 I 27 353 I 23 361 I 19 370 I 16 379 I 13 388 I 12 398 I 12 408 I 12 418 I 13 428 I 16 437 I 19 446 I 23 455 I 27 463 I 32 471 I 38 478 I 44 484 I 51 489 I 59 494 I 67 499 I 75 502 I 83 505 I 93 506 I 101 506 I 101 506 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 101 506 M 341 506 I 341 506 I 350 506 I 360 505 I 368 502 I 376 499 I 384 494 I 391 489 I 399 484 I 405 478 I 411 471 I 416 463 I 420 455 I 424 446 I 427 437 I 429 428 I 431 418 I 431 408 I 431 408 I 431 398 I 429 388 I 427 379 I 424 370 I 420 361 I 416 353 I 411 345 I 405 339 I 399 332 I 391 326 I 384 321 I 376 317 I 368 314 I 360 312 I 350 310 I 341 310 I 341 310 I 101 310 I 101 310 I 93 310 I 83 312 I 75 314 I 67 317 I 59 321 I 51 326 I 44 332 I 38 339 I 32 345 I 27 353 I 23 361 I 19 370 I 16 379 I 13 388 I 12 398 I 12 408 I 12 418 I 13 428 I 16 437 I 19 446 I 23 455 I 27 463 I 32 471 I 38 478 I 44 484 I 51 489 I 59 494 I 67 499 I 75 502 I 83 505 I 93 506 I 101 506 I 101 506 I : 0.66 0.723 +S K 
-; T32RsrcBegin
-
-18
-/g282 [29 0 3 -38 26 1 ] 
-/g282 [23 39 true [1 0 0 1 -3 38 ]  0 0]
-[<00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-01f83e
-07fe3e
-0fffbe
-1ffffe
-3f87fe
-3f01fe
-7e00fe
-7c007e
-7c003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-7c003e
-7c007e
-7e00fe
-7e01fe
-3f87de
-1fffde
-0fff1e
-07fe1e
-01f800
->
- ]
-/TT37846b00 AddT3T32Char
-T32RsrcEnd
-F1S37 Ji 
-170 392 M <08>S 
-193 392 M <0E>S  218 392 M <0C>S  245 392 M <12>S  
-T32RsrcBegin
-
-19
-/g4 [32 0 1 -35 31 0 ] 
-/g4 [30 35 true [1 0 0 1 -1 35 ]  0 0]
-[<000fc000
-000fc000
-000fe000
-001fe000
-001ff000
-003ff000
-003cf000
-003cf800
-007cf800
-00787800
-00787c00
-00f87c00
-00f03e00
-01f03e00
-01f03e00
-01e01f00
-03e01f00
-03c00f00
-03c00f80
-07c00f80
-078007c0
-078007c0
-0fffffc0
-0fffffe0
-1fffffe0
-1fffffe0
-1e0001f0
-3e0001f0
-3e0001f0
-3c0000f8
-7c0000f8
-7c0000fc
-f800007c
-f800007c
-f800003c
->
- ]
-/TT37846b00 AddT3T32Char
-
-20
-/g100 [27 0 0 -35 27 0 ] 
-/g100 [27 35 true [1 0 0 1 0 35 ]  0 0]
-[<ffffffe0
-ffffffe0
-ffffffe0
-ffffffe0
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
->
- ]
-/TT37846b00 AddT3T32Char
-T32RsrcEnd
-113 458 M <09>S 
-144 458 M <13>S  173 458 M <14>S  198 458 M <13>S  
-240 458 M <01>S 
-266 458 M <09>S  297 458 M <0A>S  
-N 3257 1910 M 2681 1910 I : 0.66 0.723 +S K 
-; N 2615 1910 M 2648 1889 I 2648 1931 I 2615 1910 I C 
-2648 1889 M 2615 1910 I 2648 1889 I C 
- O 10 Lw N 2615 1910 M 2648 1889 I 2648 1931 I 2615 1910 I : 0.66 0.723 +S K 
-; N 2648 1889 M 2615 1910 I : 0.66 0.723 +S K 
-; 6 Lw N 2648 1910 M 2701 1910 I : 0.66 0.723 +S K 
-; N 2694 1801 M 2694 1890 I 3179 1890 I 3179 1801 I 2694 1801 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-37
-/g336 [35 0 2 -35 33 14 ] 
-/g336 [31 49 true [1 0 0 1 -2 35 ]  0 0]
-[<001fc000
-00fffffe
-03fffffe
-07fffffe
-0ffffffe
-0ff07ffe
-1fc01f80
-1f800fc0
-3f800fc0
-3f0007e0
-3f0007e0
-3f0007e0
-3f0007e0
-3f0007e0
-3f800fe0
-1f800fc0
-1fc01fc0
-0ff07fc0
-0fffff80
-0fffff00
-1ffffe00
-3ffff800
-3e1fe000
-7c000000
-7c000000
-7c000000
-7e000000
-7f000000
-7ffff800
-3fffff80
-1fffffe0
-0ffffff8
-0ffffff8
-1f8007fc
-3f0001fe
-7e0000fe
-7e00007e
-fc00007e
-fc00007e
-fc00007e
-fc0000fe
-fe0000fc
-ff0003fc
-7fc00ff8
-7ffffff0
-3fffffe0
-0fffffc0
-07ffff00
-007ff000
->
- ]
-/TT37845b00 AddT3T32Char
-
-38
-/g47 [19 0 6 -47 12 0 ] 
-/g47 [6 47 true [1 0 0 1 -6 47 ]  0 0]
-[<fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-F0S49 Ji 
-2694 1868 M <1A>S 
-2725 1868 M ( )S  2754 1868 M (!)S  2789 1868 M <09>S  2823 1868 M (")S  2859 1868 M <04>S  2901 1868 M (#)S  2916 1868 M <02>S  2952 1868 M <17>S  2987 1868 M <0F>S  3023 1868 M <19>S  3044 1868 M <12>S  3059 1868 M (%)S  3091 1868 M (&)S  3108 1868 M <0F>S  3144 1868 M (")S  
-N 3257 1744 M 3257 1910 I 3334 1910 I 3334 1744 I 3257 1744 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 3334 1910 M 3334 1744 I 3257 1744 I 3257 1910 I 3334 1910 I C 
-: 0.66 0.723 +S K 
-; 1 Lw solid N 3893 3262 M 3893 3231 I 3894 3229 I 3895 3228 I 3896 3229 I 3897 3231 I 3897 3262 I 3896 3263 I 3895 3264 I 3894 3263 I 3893 3262 I 3893 3262 I C 
-3893 3209 M 3893 3178 I 3894 3176 I 3895 3176 I 3896 3176 I 3897 3178 I 3897 3209 I 3896 3210 I 3895 3211 I 3894 3210 I 3893 3209 I 3893 3209 I C 
-3893 3155 M 3893 3124 I 3894 3123 I 3895 3122 I 3896 3123 I 3897 3124 I 3897 3155 I 3896 3157 I 3895 3157 I 3894 3157 I 3893 3155 I 3893 3155 I C 
-3893 3102 M 3893 3071 I 3894 3070 I 3895 3069 I 3896 3070 I 3897 3071 I 3897 3102 I 3896 3104 I 3895 3105 I 3894 3104 I 3893 3102 I 3893 3102 I C 
-3893 3049 M 3893 3018 I 3894 3016 I 3895 3016 I 3896 3016 I 3897 3018 I 3897 3049 I 3896 3050 I 3895 3051 I 3894 3050 I 3893 3049 I 3893 3049 I C 
-3893 2995 M 3893 2964 I 3894 2963 I 3895 2962 I 3896 2963 I 3897 2964 I 3897 2995 I 3896 2998 I 3895 2998 I 3894 2998 I 3893 2995 I 3893 2995 I C 
-3893 2943 M 3893 2911 I 3894 2910 I 3895 2909 I 3896 2910 I 3897 2911 I 3897 2943 I 3896 2944 I 3895 2945 I 3894 2944 I 3893 2943 I 3893 2943 I C 
-3893 2889 M 3893 2858 I 3894 2856 I 3895 2856 I 3896 2856 I 3897 2858 I 3897 2889 I 3896 2890 I 3895 2891 I 3894 2890 I 3893 2889 I 3893 2889 I C 
-3893 2836 M 3893 2805 I 3894 2804 I 3895 2803 I 3896 2804 I 3897 2805 I 3897 2836 I 3896 2838 I 3895 2838 I 3894 2838 I 3893 2836 I 3893 2836 I C 
-3893 2783 M 3893 2751 I 3894 2750 I 3895 2749 I 3896 2750 I 3897 2751 I 3897 2783 I 3896 2784 I 3895 2785 I 3894 2784 I 3893 2783 I 3893 2783 I C 
-3893 2730 M 3893 2699 I 3894 2697 I 3895 2696 I 3896 2697 I 3897 2699 I 3897 2730 I 3896 2731 I 3895 2732 I 3894 2731 I 3893 2730 I 3893 2730 I C 
-3893 2676 M 3893 2645 I 3894 2644 I 3895 2643 I 3896 2644 I 3897 2645 I 3897 2676 I 3896 2678 I 3895 2678 I 3894 2678 I 3893 2676 I 3893 2676 I C 
-3893 2623 M 3893 2591 I 3894 2590 I 3895 2589 I 3896 2590 I 3897 2591 I 3897 2623 I 3896 2625 I 3895 2625 I 3894 2625 I 3893 2623 I 3893 2623 I C 
-3893 2570 M 3893 2539 I 3894 2537 I 3895 2536 I 3896 2537 I 3897 2539 I 3897 2570 I 3896 2571 I 3895 2572 I 3894 2571 I 3893 2570 I 3893 2570 I C 
-3893 2516 M 3893 2485 I 3894 2484 I 3895 2483 I 3896 2484 I 3897 2485 I 3897 2516 I 3896 2518 I 3895 2518 I 3894 2518 I 3893 2516 I 3893 2516 I C 
-3893 2463 M 3893 2432 I 3894 2431 I 3895 2430 I 3896 2431 I 3897 2432 I 3897 2463 I 3896 2465 I 3895 2465 I 3894 2465 I 3893 2463 I 3893 2463 I C 
-3893 2410 M 3893 2379 I 3894 2377 I 3895 2376 I 3896 2377 I 3897 2379 I 3897 2410 I 3896 2411 I 3895 2412 I 3894 2411 I 3893 2410 I 3893 2410 I C 
-3893 2357 M 3893 2326 I 3894 2324 I 3895 2324 I 3896 2324 I 3897 2326 I 3897 2357 I 3896 2358 I 3895 2359 I 3894 2358 I 3893 2357 I 3893 2357 I C 
-3893 2303 M 3893 2272 I 3894 2271 I 3895 2270 I 3896 2271 I 3897 2272 I 3897 2303 I 3896 2305 I 3895 2306 I 3894 2305 I 3893 2303 I 3893 2303 I C 
-3893 2250 M 3893 2219 I 3894 2217 I 3895 2216 I 3896 2217 I 3897 2219 I 3897 2250 I 3896 2252 I 3895 2252 I 3894 2252 I 3893 2250 I 3893 2250 I C 
-3893 2197 M 3893 2166 I 3894 2164 I 3895 2164 I 3896 2164 I 3897 2166 I 3897 2197 I 3896 2198 I 3895 2199 I 3894 2198 I 3893 2197 I 3893 2197 I C 
-3893 2143 M 3893 2112 I 3894 2111 I 3895 2110 I 3896 2111 I 3897 2112 I 3897 2143 I 3896 2145 I 3895 2146 I 3894 2145 I 3893 2143 I 3893 2143 I C 
-3893 2091 M 3893 2059 I 3894 2058 I 3895 2057 I 3896 2058 I 3897 2059 I 3897 2091 I 3896 2092 I 3895 2093 I 3894 2092 I 3893 2091 I 3893 2091 I C 
-3893 2037 M 3893 2006 I 3894 2004 I 3895 2004 I 3896 2004 I 3897 2006 I 3897 2037 I 3896 2038 I 3895 2039 I 3894 2038 I 3893 2037 I 3893 2037 I C 
-3893 1983 M 3893 1953 I 3894 1952 I 3895 1951 I 3896 1952 I 3897 1953 I 3897 1983 I 3896 1986 I 3895 1986 I 3894 1986 I 3893 1983 I 3893 1983 I C 
-3893 1931 M 3893 1899 I 3894 1898 I 3895 1897 I 3896 1898 I 3897 1899 I 3897 1931 I 3896 1932 I 3895 1933 I 3894 1932 I 3893 1931 I 3893 1931 I C 
-3893 1877 M 3893 1846 I 3894 1844 I 3895 1844 I 3896 1844 I 3897 1846 I 3897 1877 I 3896 1879 I 3895 1879 I 3894 1879 I 3893 1877 I 3893 1877 I C 
-3893 1824 M 3893 1793 I 3894 1792 I 3895 1791 I 3896 1792 I 3897 1793 I 3897 1824 I 3896 1826 I 3895 1826 I 3894 1826 I 3893 1824 I 3893 1824 I C 
-3893 1771 M 3893 1739 I 3894 1738 I 3895 1737 I 3896 1738 I 3897 1739 I 3897 1771 I 3896 1772 I 3895 1773 I 3894 1772 I 3893 1771 I 3893 1771 I C 
-3893 1718 M 3893 1687 I 3894 1685 I 3895 1684 I 3896 1685 I 3897 1687 I 3897 1718 I 3896 1719 I 3895 1720 I 3894 1719 I 3893 1718 I 3893 1718 I C 
-3893 1664 M 3893 1633 I 3894 1632 I 3895 1631 I 3896 1632 I 3897 1633 I 3897 1664 I 3896 1666 I 3895 1666 I 3894 1666 I 3893 1664 I 3893 1664 I C 
-3893 1611 M 3893 1580 I 3894 1579 I 3895 1578 I 3896 1579 I 3897 1580 I 3897 1611 I 3896 1613 I 3895 1614 I 3894 1613 I 3893 1611 I 3893 1611 I C 
-3893 1558 M 3893 1527 I 3894 1525 I 3895 1524 I 3896 1525 I 3897 1527 I 3897 1558 I 3896 1559 I 3895 1560 I 3894 1559 I 3893 1558 I 3893 1558 I C 
-3893 1504 M 3893 1473 I 3894 1472 I 3895 1471 I 3896 1472 I 3897 1473 I 3897 1504 I 3896 1506 I 3895 1506 I 3894 1506 I 3893 1504 I 3893 1504 I C 
-3893 1451 M 3893 1420 I 3894 1419 I 3895 1418 I 3896 1419 I 3897 1420 I 3897 1451 I 3896 1453 I 3895 1454 I 3894 1453 I 3893 1451 I 3893 1451 I C 
-3893 1398 M 3893 1367 I 3894 1365 I 3895 1364 I 3896 1365 I 3897 1367 I 3897 1398 I 3896 1399 I 3895 1400 I 3894 1399 I 3893 1398 I 3893 1398 I C 
-3893 1345 M 3893 1314 I 3894 1312 I 3895 1312 I 3896 1312 I 3897 1314 I 3897 1345 I 3896 1346 I 3895 1347 I 3894 1346 I 3893 1345 I 3893 1345 I C 
-3893 1291 M 3893 1260 I 3894 1259 I 3895 1258 I 3896 1259 I 3897 1260 I 3897 1291 I 3896 1293 I 3895 1294 I 3894 1293 I 3893 1291 I 3893 1291 I C 
-3893 1238 M 3893 1207 I 3894 1205 I 3895 1205 I 3896 1205 I 3897 1207 I 3897 1238 I 3896 1240 I 3895 1241 I 3894 1240 I 3893 1238 I 3893 1238 I C 
-3893 1185 M 3893 1154 I 3894 1152 I 3895 1152 I 3896 1152 I 3897 1154 I 3897 1185 I 3896 1186 I 3895 1187 I 3894 1186 I 3893 1185 I 3893 1185 I C 
-3893 1131 M 3893 1100 I 3894 1099 I 3895 1098 I 3896 1099 I 3897 1100 I 3897 1131 I 3896 1134 I 3895 1134 I 3894 1134 I 3893 1131 I 3893 1131 I C 
-3893 1079 M 3893 1047 I 3894 1046 I 3895 1045 I 3896 1046 I 3897 1047 I 3897 1079 I 3896 1080 I 3895 1081 I 3894 1080 I 3893 1079 I 3893 1079 I C 
-3893 1025 M 3893 994 I 3894 992 I 3895 992 I 3896 992 I 3897 994 I 3897 1025 I 3896 1026 I 3895 1027 I 3894 1026 I 3893 1025 I 3893 1025 I C 
-3893 972 M 3893 941 I 3894 940 I 3895 939 I 3896 940 I 3897 941 I 3897 972 I 3896 974 I 3895 974 I 3894 974 I 3893 972 I 3893 972 I C 
-3893 919 M 3893 887 I 3894 886 I 3895 885 I 3896 886 I 3897 887 I 3897 919 I 3896 920 I 3895 921 I 3894 920 I 3893 919 I 3893 919 I C 
-3893 865 M 3893 835 I 3894 832 I 3895 832 I 3896 832 I 3897 835 I 3897 865 I 3896 867 I 3895 868 I 3894 867 I 3893 865 I 3893 865 I C 
-3893 812 M 3893 781 I 3894 780 I 3895 779 I 3896 780 I 3897 781 I 3897 812 I 3896 814 I 3895 814 I 3894 814 I 3893 812 I 3893 812 I C 
-3893 759 M 3893 728 I 3894 726 I 3895 725 I 3896 726 I 3897 728 I 3897 759 I 3896 761 I 3895 761 I 3894 761 I 3893 759 I 3893 759 I C 
-3893 706 M 3893 675 I 3894 673 I 3895 672 I 3896 673 I 3897 675 I 3897 706 I 3896 707 I 3895 708 I 3894 707 I 3893 706 I 3893 706 I C 
-3893 652 M 3893 621 I 3894 620 I 3895 619 I 3896 620 I 3897 621 I 3897 652 I 3896 654 I 3895 654 I 3894 654 I 3893 652 I 3893 652 I C 
-3893 599 M 3893 568 I 3894 567 I 3895 566 I 3896 567 I 3897 568 I 3897 599 I 3896 601 I 3895 602 I 3894 601 I 3893 599 I 3893 599 I C 
-3893 546 M 3893 515 I 3894 513 I 3895 513 I 3896 513 I 3897 515 I 3897 546 I 3896 547 I 3895 548 I 3894 547 I 3893 546 I 3893 546 I C 
-3893 492 M 3893 462 I 3894 460 I 3895 459 I 3896 460 I 3897 462 I 3897 492 I 3896 494 I 3895 495 I 3894 494 I 3893 492 I 3893 492 I C 
-3893 439 M 3893 408 I 3894 407 I 3895 406 I 3896 407 I 3897 408 I 3897 439 I 3896 441 I 3895 442 I 3894 441 I 3893 439 I 3893 439 I C 
-3893 386 M 3893 355 I 3894 353 I 3895 353 I 3896 353 I 3897 355 I 3897 386 I 3896 388 I 3895 388 I 3894 388 I 3893 386 I 3893 386 I C 
-3893 333 M 3893 302 I 3894 300 I 3895 300 I 3896 300 I 3897 302 I 3897 333 I 3896 334 I 3895 335 I 3894 334 I 3893 333 I 3893 333 I C 
-3893 279 M 3893 248 I 3894 247 I 3895 246 I 3896 247 I 3897 248 I 3897 279 I 3896 281 I 3895 282 I 3894 281 I 3893 279 I 3893 279 I C 
-:  L ; K 
-N 3667 12 M 3667 246 I 4123 246 I 4123 12 I 3667 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 3667 246 M 4123 246 I 4123 12 I 3667 12 I 3667 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-39
-/g44 [46 0 6 -47 40 0 ] 
-/g44 [34 47 true [1 0 0 1 -6 47 ]  0 0]
-[<fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-ffffffffc0
-ffffffffc0
-ffffffffc0
-ffffffffc0
-ffffffffc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
-fc00000fc0
->
- ]
-/TT37845b00 AddT3T32Char
-
-40
-/g122 [36 0 1 -47 35 0 ] 
-/g122 [34 47 true [1 0 0 1 -1 47 ]  0 0]
-[<fe00000fc0
-fe00001fc0
-7f00003f80
-7f00003f80
-3f80003f00
-3f80007f00
-1fc0007e00
-1fc000fe00
-0fe000fc00
-0fe001fc00
-07f001f800
-07f003f800
-03f803f000
-03f807f000
-01fc07e000
-01fc0fe000
-00fc0fc000
-00fe1fc000
-007e1f8000
-007f1f8000
-003f3f0000
-003fbf0000
-001ffe0000
-001ffe0000
-000ffc0000
-000ffc0000
-0007f80000
-0007f80000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
->
- ]
-/TT37845b00 AddT3T32Char
-T32RsrcEnd
-3775 151 M <09>S 
-3809 151 M <0A>S  3853 151 M <0B>S  3890 151 M <07>S  3905 151 M <03>S  3940 151 M (')S  3982 151 M (\()S  
-7 Lw N 3775 160 M 4015 160 I : 0.66 0.723 +S K 
-; 6 Lw N 2615 2908 M 3828 2908 I : 0.66 0.723 +S K 
-; N 3895 2908 M 3863 2929 I 3863 2888 I 3895 2908 I C 
-3863 2929 M 3895 2908 I 3863 2929 I C 
- O 10 Lw N 3895 2908 M 3863 2929 I 3863 2888 I 3895 2908 I : 0.66 0.723 +S K 
-; N 3863 2929 M 3895 2908 I : 0.66 0.723 +S K 
-; 6 Lw N 3863 2908 M 3810 2908 I : 0.66 0.723 +S K 
-; N 3075 2767 M 3075 2855 I 3436 2855 I 3436 2767 I 3075 2767 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 3075 2833 M <1A>S 
-3106 2833 M <09>S  3140 2833 M <0F>S  3175 2833 M (")S  3211 2833 M <06>S  3269 2833 M <0E>S  3301 2833 M ( )S  3330 2833 M <03>S  3365 2833 M (")S  3400 2833 M <18>S  
-N 2538 2742 M 2538 2908 I 2615 2908 I 2615 2742 I 2538 2742 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 2615 2908 M 2615 2742 I 2538 2742 I 2538 2908 I 2615 2908 I C 
-: 0.66 0.723 +S K 
-; LH
-%%PageTrailer
-
-%%Trailer
-%%DocumentNeededResources: 
-%%DocumentSuppliedResources: 
-%%+ procset Pscript_WinNT_VMErrorHandler 5.0 0
-%%+ procset Pscript_FatalError 5.0 0
-%%+ procset Pscript_Win_Basic 5.0 0
-%%+ procset Pscript_Win_Utils_L1 5.0 0
-%%+ procset Pscript_Win_GdiObject 5.0 0
-%%+ procset Pscript_Win_GdiObject_L1 5.0 0
-%%+ procset Pscript_T3Hdr 5.0 0
-%%+ procset Pscript_Text 5.0 0
-Pscript_WinNT_Incr dup /terminate get exec
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-data-txon-ul.dia ns-3.22/src/lte/doc/source/figures/lte-rlc-data-txon-ul.dia
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-data-txon-ul.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-data-txon-ul.dia	2015-02-05 15:46:23.000000000 -0800
@@ -0,0 +1,15 @@
+     ]rH}W0/re}8۽3/
+H%Ple}
+d[ ^ EҥHqPTY̬?͸5Gɫ3`O.O՞?Gٟ蟫Yvӣ1^]^ϳb:c/K"?[4+{&uv]j6ʫ]NYk6~u˗urq޷U~1˳ߚӗsMn}Vo{s;%5~p9]4zKHWՃւ7j4yC͸ YDC9븑pn_v:+f٨x
+y1lR92[VU|tmPܫh˷Ѱ>*~_G8zѤ~_oij*W0o0zqMu~0Vuglq~P^vY.{L/7,Xda6~6~#d4|u/Z]݌tɧu;äC/0psx"u( 3ZF6K 0% 8]0L3|ߜ_NgCKHA_.s-BVa9ҶGWE=`VH3PF6úΆl8^~t@7of\-"/01-@0mY%tDy$Q"	B g8Id8BLuĢeeJV=#)Hp欰`Q'L,:Dՠd[՛瓻'!}/iHȯeHHCdej]ei:	9G׭jOkvlu館?}nF{zl2?͋{ 5.׼]fw@?W_cK=ˮIxr(&7y"lRSݍ_#Ջ؋8ɶ⤘r$}EѱS1i$q40L*y۟LZ% ұթ::Ŝk3=@"u24 ˄tA߾OYj1ʓn#sRׂ:$wrMo>#Oѷv5I^6S㦝U	Bu߾"s5N&dh՗j.oW`Hުpi.X՚[8\_ǖyHodhĊ?5h4KWgiuM	%lkZɗQ0.j,DB& B,C&i}wS[u+㋷ӻ(dtQg)8k]$6VEIp6Մ4O],2r>k5`}BMŤQ	$4Yi{R|9&|>ZWgJ0?	$w
+C<Dv,29v3&R˪Hyř2?K~$?BOߺFU7ڡG.[isF,2y)W/l(q=<=zOQ
+Qxnϒ]TYgaa )#LZn'Bȥ묾P&`i @ڀ:¶3T9kBKXJy'r42:akY}3&$&a3u흰C{Vdq`<a	8v՗)=J=Iº|~/D". ۙvBnFjEUځ:?EnSȝ;uEk	 h'-44 hֵf:WGdG,|)DOԈb[s1E,oޖ|᤹+|5ӵ1˕z@ ȡn(,x?IZ	z?;oyk:胟18 45Vtk&i.zhl6Ʀ;wب16*x%h`FgOc-..Kg0ABȒ7wnMuF'UyUSXsy^S;vtQq rL4~eͨ8?e(uPZR{^x9\(CAd>VUN|#[mD+Keud7nwo~9vb\R\9 )Dk-;2nWKFaEWH~J[Y^Kqn$]-u/TkTwfUj^7M;T+':pCku}p@_x-t\k]1ygzM2wZ2g
+пOؗ-2'R-skBpҼռ'MJZ&P ,N%$aJ$}'}Դ-Qqu-K4Hiq "?[J58|'镴5.C	K$N$q?-VDdɮcuMr萠rwq][g$yO6ZhZ+S)AҋH-~6GRpųz][=OA6`Vx*HfGmǵNHF!Y餘M<S}G;Ruse";mm@hBv˦d@EZv͕"9J$DQdlnE&gKu&we0X]M&HuVog\l2nXᾲ^3F-6"8,D>-o}ΫnipdTCye,ya	.fyA#mGi?ǒMF}J{4jMCi};PVvR:)Z9*%J< ;'޻7\ic#
+a㮐5sv,+h}`s
+`W'3MҮJ#sډ?X=TN53(Ղt|H^7%.LzZVDCx&q2}H9Gm4I+tma/͂t``E6ȫ^aҟg2nV/AGsӏB!¶ۭl%n5Sޯ
+hNf=OMY6fPJq7E'ۺh}W澲M]lueSl}ƄclؙV\YR2%ٗX.Q2j)oϥ
+$ܧN3$?P.J{%B(?DP.~x7<`iғrr>elI5,ǐհD⤚V9
+qvdvհRun}1HumG=TMv\g$:Ck*հhpɧL2!w} l1T=_';ů1T&C/u%<Ho*b7]_!;Mߨ\gEk]KI'ϝV%돳$`(9t n)ݮ{=i@jDVR㘢.|?KQȨ.ShB\QqL0D@Y@*pW~vpO^gZu(`i.XPNzͯ;!|=TC5SΠvb&		UhiFZX;Y\ΪK57F|:;kNC]?뾣;	K<o`?)0~oAgޮvr9eђ +7?WF$% #k.8ɾ4gpt7_ߍ$hXO)N04CC:ZpҐShPzfj$@ےFs2D;J!Zb-IW_#V>'b9NW&F2;.;ݳϮA+a7b<ډU8;9/K)wDUjf?\ Omi` c֔vTS#_E*(~(>j'QP"I2paR,eSHizީ>vպWY&шpd`G +Ot&dӂ['T%ZP>X)DԪ,Ǹ#)4jPe}'mǗծ3
+R^Z4yC
+q#fFf9rHyKS"k+bPjA~{SwTm`xu)	^N%aZˁ2WkPG·ǟf|!_h]c)'rϖխ6gD$
+$@s %J?ZѨa[kIuv>~Q~C\Ͳ/3* 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-data-txon-ul.eps ns-3.22/src/lte/doc/source/figures/lte-rlc-data-txon-ul.eps
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-data-txon-ul.eps	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-data-txon-ul.eps	1969-12-31 16:00:00.000000000 -0800
@@ -1,4281 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: 
-%%Creator: PScript5.dll Version 5.2.2
-%%CreationDate: 10/27/2011 11:55:44
-%%For: mrequena
-%%BoundingBox: 0 0 510 392
-%%Pages: 1
-%%Orientation: Portrait
-%%PageOrder: Ascend
-%%DocumentNeededResources: (atend)
-%%DocumentSuppliedResources: (atend)
-%%DocumentData: Clean7Bit
-%%TargetDevice: () (52.3) 320
-%%LanguageLevel: 1
-%%EndComments
-
-%%BeginDefaults
-%%PageBoundingBox: 0 0 510 392
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-
-%%BeginProlog
-%%BeginResource: file Pscript_WinNT_VMErrorHandler 5.0 0
-/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
-setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
-ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
-def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
-rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
-/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
-typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
-def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
-exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
-/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
-{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
-readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
-(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
-/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
-tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
-xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
-tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
-{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
-tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
-rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
-forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
-/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
-$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
-ne{grestoreall}if initgraphics courier setfont lmargin 720 moveto errorname
-(VMerror)eq{version cvi 2016 ge{userdict/ehsave known{clear userdict/ehsave get
-restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}if}if systemdict
-/showpage get exec(%%[ Error: )print errorname =print(; OffendingCommand: )
-print/command load =print( ]%%)= flush}if end end end}dup 0 systemdict put dup
-4 $brkpage put bind readonly put/currentpacking where{pop/setpacking where{pop
-oldpack setpacking}if}if
-%%EndResource
-%%BeginProcSet: Pscript_Res_Emul 5.0 0
-/defineresource where{pop}{userdict begin/defineresource{userdict/Resources 2
-copy known{get begin}{15 dict dup begin put}ifelse exch readonly exch
-currentdict 1 index known not{dup 30 dict def}if load 3 -1 roll 2 index put
-end}bind readonly def/findresource{userdict/Resources get exch get exch get}
-bind readonly def/resourceforall{pop pop pop pop}bind readonly def
-/resourcestatus{userdict/Resources 2 copy known{get exch 2 copy known{get exch
-known{0 -1 true}{false}ifelse}{pop pop pop false}ifelse}{pop pop pop pop false}
-ifelse}bind readonly def end}ifelse
-%%EndProcSet
-userdict /Pscript_WinNT_Incr 230 dict dup begin put
-%%BeginResource: file Pscript_FatalError 5.0 0
-userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup
-length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding
-{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end
-/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div
-cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end
-%%EndResource
-userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[
-(La impresora no tiene suficiente memoria disponible para este trabajo.)100 500
-(Realice una de las siguientes operaciones e intente imprimir de nuevo:)100 485
-(Escoja "Optimizar para portabilidad" como formato de salida.)115 470
-(En el panel Configuracin de dispositivo, compruebe que "Memoria PostScript disponible" tiene el valor correcto.)
-115 455(Reduzca el nmero de fuentes del documento.)115 440
-(Imprima el documento por partes.)115 425 12/Times-Roman showpage
-(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end
-version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse
-%%BeginResource: file Pscript_Win_Basic 5.0 0
-/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
-/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
-/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
-d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
-/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
-/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
-/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
-, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop
-languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,
-d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld
-/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix
-currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit
-counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b
-/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~
-d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put
-/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq
-{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `
-/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped
-{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}
-{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~
-itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5
-ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform
-nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -
-neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0
-- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool
-2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e
-{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
-/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont
-{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1
-dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d
-E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1
-^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2
-16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}
-bind d
-%%EndResource
-%%BeginResource: file Pscript_Win_Utils_L1 5.0 0
-/rf{N rp L}b/fx{1 1 dtransform @ 0 ge{1 sub 1}{1 add -0.25}? 3 -1 $ @ 0 ge{1
-sub 1}{1 add -0.25}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
-snap + +S fx rf}b/rs{N rp C K}b/rc{N rp clip N}b/UtilsInit{}b/setcolorspace{!}b
-/scol{[/setgray/setrgbcolor/setcolor/setcmykcolor/setcolor/setgray]~ get cvx
-exec}b/colspRefresh{}b/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo
-{/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d
-/AddFontInfoEnd{E d}bind d
-%%EndResource
-end
-%%EndProlog
-
-%%BeginSetup
-[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
-1 setlinecap 1 setlinejoin
-/mysetup [ 72 600 V 0 0 -72 600 V 0 392.31497 ] def 
-%%EndSetup
-
-%%Page: 1 1
-%%PageBoundingBox: 0 0 510 392
-%%EndPageComments
-%%BeginPageSetup
-/DeviceRGB dup setcolorspace /colspABC exch def
-mysetup concat colspRefresh
-%%EndPageSetup
-
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Win_GdiObject 5.0 0
-/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
-{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
-/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
-L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
-1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
-/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
-{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
-gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
-/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
-MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
-M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
-+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
-/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
-GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
-/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
-makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
-/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $
-/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt
-~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0
-0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b
-/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +
-: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~
-XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S
-GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix
-currentmatrix readonly d ; ;}if}b
-%%EndResource
-%%BeginResource: file Pscript_Win_GdiObject_L1 5.0 0
-/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 2 d/RepsV 6 d/RepsH 5 d
-/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d
-/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d
-/SetBGndFGnd{}b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx PaintData
-imagemask Width 0 +}repeat E}b E d/GDIpattfill{@ ` BGnd null ne PaintType 2 eq
-and{: BGnd aload ! scol fEOFill{O}{L}? ; FGnd aload ! U/iCol 2 ^ put @ 0 eq{!
-2}{@ 1 eq ~ 2 eq or{4}{5}?}? -1 $}if E @ patterncalc : 4 ^/PaintType get 2 eq
-{iCol 0 eq{6 -1 $}if iCol 1 eq iCol 2 eq or{8 -3 $}if iCol 3 eq iCol 4 eq or{9
--4 $}if iCol scol}if fEOFill{eoclip}{clip}? N patternfill ; N}b/hbf
-{GDIpattfill}b/hfMain{/fEOFill ~ d ~/iCol ~ d GDIpattfill}b/hf{: hfMain ;}b
-/mpstr 1 string d/mp{~ @ length 12 add dict copy `/PatternCTM matrix
-currentmatrix d/PatternMatrix ~ d/PatWidth XStep mpstr length mul d/PatHeight
-YStep d/FontType 3 d/Encoding 256 array d 3 string 0 1 255{Encoding ~ @ 3 ^ cvs
-cvn put}for !/FontMatrix matrix d/FontBBox BBox d/BuildChar{! @ ` XStep 0
-FontBBox aload ! setcachedevice/PaintProc , E : exec ;}b & E ~ @ 3 -1 $
-definefont}b/build_pattern{: GDIBWPatternDict ` Width Height E dsnap +S
-/GDIBWPatternMx matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix
-GDIBWPatternDict @ ` xOrg yOrg E matrix + mp CTMrestore}b/patterncalc{` :
-PatternCTM setmatrix PatternMatrix concat BBox aload ! ! ! + pathbbox ;
-PatHeight V ceiling 4 1 $ PatWidth V ceiling 4 1 $ PatHeight V floor 4 1 $
-PatWidth V floor 4 1 $ 2 ^ sub cvi abs ~ 3 ^ sub cvi abs ~ 4 2 $ PatHeight mul
-~ PatWidth mul ~ E}b/patternfill{5 -1 $ @ ` Ji PatternCTM setmatrix
-PatternMatrix concat 0 2 ^ 2 ^ M 0 1 mpstr length 1 sub{1 ^ mpstr 3 1 $ put}for
-! 2 ^{currentpoint 5 ^{mpstr S}repeat YStep add M}repeat ! ! ! ! E}b/pbf{: 14
-dict `/fGray ~ d/fEOFill ~ d/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d
-/Height ~ d/Width ~ d/mx xOrg yOrg matrix + d fGray{/PaintProc{` Width Height
-OutputBPP mx PaintData image E}b}{/PaintProc{` Width Height 8 mx PaintData F
-OutputBPP 8 idiv colorimage E}b}? pathbbox fEOFill{eoclip}{clip}?/Top ~ d/Right
-~ d/Bottom ~ d/Left ~ d Top Height neg Bottom 1 sub{Left Width Right 1 sub{1 ^
-2 copy + & PaintProc neg ~ neg ~ +}bind for !}bind for E ;}b
-%%EndResource
-end reinitialize
-0 0 0 1 scol N 416 3256 M 416 3225 I 417 3223 I 418 3223 I 420 3223 I 420 3225 I 420 3256 I 420 3257 I 418 3258 I 417 3257 I 416 3256 I 416 3256 I C 
-416 3203 M 416 3172 I 417 3171 I 418 3170 I 420 3171 I 420 3172 I 420 3203 I 420 3205 I 418 3205 I 417 3205 I 416 3203 I 416 3203 I C 
-416 3150 M 416 3119 I 417 3117 I 418 3116 I 420 3117 I 420 3119 I 420 3150 I 420 3151 I 418 3152 I 417 3151 I 416 3150 I 416 3150 I C 
-416 3097 M 416 3066 I 417 3064 I 418 3064 I 420 3064 I 420 3066 I 420 3097 I 420 3098 I 418 3099 I 417 3098 I 416 3097 I 416 3097 I C 
-416 3043 M 416 3012 I 417 3011 I 418 3010 I 420 3011 I 420 3012 I 420 3043 I 420 3045 I 418 3046 I 417 3045 I 416 3043 I 416 3043 I C 
-416 2990 M 416 2959 I 417 2957 I 418 2957 I 420 2957 I 420 2959 I 420 2990 I 420 2992 I 418 2992 I 417 2992 I 416 2990 I 416 2990 I C 
-416 2937 M 416 2906 I 417 2905 I 418 2904 I 420 2905 I 420 2906 I 420 2937 I 420 2939 I 418 2939 I 417 2939 I 416 2937 I 416 2937 I C 
-416 2884 M 416 2853 I 417 2851 I 418 2850 I 420 2851 I 420 2853 I 420 2884 I 420 2885 I 418 2886 I 417 2885 I 416 2884 I 416 2884 I C 
-416 2831 M 416 2800 I 417 2798 I 418 2798 I 420 2798 I 420 2800 I 420 2831 I 420 2832 I 418 2833 I 417 2832 I 416 2831 I 416 2831 I C 
-416 2777 M 416 2746 I 417 2745 I 418 2744 I 420 2745 I 420 2746 I 420 2777 I 420 2779 I 418 2780 I 417 2779 I 416 2777 I 416 2777 I C 
-416 2725 M 416 2693 I 417 2692 I 418 2691 I 420 2692 I 420 2693 I 420 2725 I 420 2726 I 418 2727 I 417 2726 I 416 2725 I 416 2725 I C 
-416 2671 M 416 2640 I 417 2639 I 418 2638 I 420 2639 I 420 2640 I 420 2671 I 420 2672 I 418 2673 I 417 2672 I 416 2671 I 416 2671 I C 
-416 2618 M 416 2586 I 417 2585 I 418 2584 I 420 2585 I 420 2586 I 420 2618 I 420 2620 I 418 2620 I 417 2620 I 416 2618 I 416 2618 I C 
-416 2565 M 416 2534 I 417 2532 I 418 2531 I 420 2532 I 420 2534 I 420 2565 I 420 2566 I 418 2567 I 417 2566 I 416 2565 I 416 2565 I C 
-416 2511 M 416 2480 I 417 2479 I 418 2478 I 420 2479 I 420 2480 I 420 2511 I 420 2513 I 418 2513 I 417 2513 I 416 2511 I 416 2511 I C 
-416 2458 M 416 2427 I 417 2426 I 418 2425 I 420 2426 I 420 2427 I 420 2458 I 420 2460 I 418 2461 I 417 2460 I 416 2458 I 416 2458 I C 
-416 2405 M 416 2374 I 417 2372 I 418 2372 I 420 2372 I 420 2374 I 420 2405 I 420 2406 I 418 2407 I 417 2406 I 416 2405 I 416 2405 I C 
-416 2352 M 416 2321 I 417 2320 I 418 2319 I 420 2320 I 420 2321 I 420 2352 I 420 2354 I 418 2354 I 417 2354 I 416 2352 I 416 2352 I C 
-416 2299 M 416 2268 I 417 2266 I 418 2265 I 420 2266 I 420 2268 I 420 2299 I 420 2300 I 418 2301 I 417 2300 I 416 2299 I 416 2299 I C 
-416 2245 M 416 2214 I 417 2213 I 418 2212 I 420 2213 I 420 2214 I 420 2245 I 420 2247 I 418 2247 I 417 2247 I 416 2245 I 416 2245 I C 
-416 2192 M 416 2161 I 417 2160 I 418 2159 I 420 2160 I 420 2161 I 420 2192 I 420 2194 I 418 2195 I 417 2194 I 416 2192 I 416 2192 I C 
-416 2139 M 416 2108 I 417 2106 I 418 2106 I 420 2106 I 420 2108 I 420 2139 I 420 2140 I 418 2141 I 417 2140 I 416 2139 I 416 2139 I C 
-416 2086 M 416 2055 I 417 2054 I 418 2053 I 420 2054 I 420 2055 I 420 2086 I 420 2088 I 418 2088 I 417 2088 I 416 2086 I 416 2086 I C 
-416 2033 M 416 2001 I 417 2000 I 418 1999 I 420 2000 I 420 2001 I 420 2033 I 420 2034 I 418 2035 I 417 2034 I 416 2033 I 416 2033 I C 
-416 1979 M 416 1949 I 417 1947 I 418 1947 I 420 1947 I 420 1949 I 420 1979 I 420 1981 I 418 1982 I 417 1981 I 416 1979 I 416 1979 I C 
-416 1926 M 416 1895 I 417 1894 I 418 1893 I 420 1894 I 420 1895 I 420 1926 I 420 1928 I 418 1928 I 417 1928 I 416 1926 I 416 1926 I C 
-416 1873 M 416 1842 I 417 1840 I 418 1840 I 420 1840 I 420 1842 I 420 1873 I 420 1875 I 418 1875 I 417 1875 I 416 1873 I 416 1873 I C 
-416 1820 M 416 1789 I 417 1787 I 418 1787 I 420 1787 I 420 1789 I 420 1820 I 420 1821 I 418 1822 I 417 1821 I 416 1820 I 416 1820 I C 
-416 1766 M 416 1735 I 417 1734 I 418 1733 I 420 1734 I 420 1735 I 420 1766 I 420 1768 I 418 1769 I 417 1768 I 416 1766 I 416 1766 I C 
-416 1714 M 416 1683 I 417 1681 I 418 1680 I 420 1681 I 420 1683 I 420 1714 I 420 1715 I 418 1716 I 417 1715 I 416 1714 I 416 1714 I C 
-416 1660 M 416 1629 I 417 1628 I 418 1627 I 420 1628 I 420 1629 I 420 1660 I 420 1662 I 418 1662 I 417 1662 I 416 1660 I 416 1660 I C 
-416 1607 M 416 1576 I 417 1575 I 418 1574 I 420 1575 I 420 1576 I 420 1607 I 420 1609 I 418 1610 I 417 1609 I 416 1607 I 416 1607 I C 
-416 1554 M 416 1523 I 417 1521 I 418 1521 I 420 1521 I 420 1523 I 420 1554 I 420 1555 I 418 1556 I 417 1555 I 416 1554 I 416 1554 I C 
-416 1500 M 416 1469 I 417 1468 I 418 1467 I 420 1468 I 420 1469 I 420 1500 I 420 1503 I 418 1503 I 417 1503 I 416 1500 I 416 1500 I C 
-416 1448 M 416 1417 I 417 1415 I 418 1414 I 420 1415 I 420 1417 I 420 1448 I 420 1449 I 418 1450 I 417 1449 I 416 1448 I 416 1448 I C 
-416 1394 M 416 1363 I 417 1362 I 418 1361 I 420 1362 I 420 1363 I 420 1394 I 420 1396 I 418 1396 I 417 1396 I 416 1394 I 416 1394 I C 
-416 1341 M 416 1310 I 417 1309 I 418 1308 I 420 1309 I 420 1310 I 420 1341 I 420 1343 I 418 1343 I 417 1343 I 416 1341 I 416 1341 I C 
-416 1288 M 416 1257 I 417 1255 I 418 1255 I 420 1255 I 420 1257 I 420 1288 I 420 1289 I 418 1290 I 417 1289 I 416 1288 I 416 1288 I C 
-416 1234 M 416 1204 I 417 1202 I 418 1201 I 420 1202 I 420 1204 I 420 1234 I 420 1236 I 418 1237 I 417 1236 I 416 1234 I 416 1234 I C 
-416 1182 M 416 1150 I 417 1149 I 418 1148 I 420 1149 I 420 1150 I 420 1182 I 420 1183 I 418 1184 I 417 1183 I 416 1182 I 416 1182 I C 
-416 1128 M 416 1097 I 417 1095 I 418 1095 I 420 1095 I 420 1097 I 420 1128 I 420 1130 I 418 1130 I 417 1130 I 416 1128 I 416 1128 I C 
-416 1075 M 416 1044 I 417 1043 I 418 1042 I 420 1043 I 420 1044 I 420 1075 I 420 1077 I 418 1077 I 417 1077 I 416 1075 I 416 1075 I C 
-416 1022 M 416 991 I 417 989 I 418 988 I 420 989 I 420 991 I 420 1022 I 420 1023 I 418 1024 I 417 1023 I 416 1022 I 416 1022 I C 
-416 969 M 416 938 I 417 936 I 418 936 I 420 936 I 420 938 I 420 969 I 420 970 I 418 971 I 417 970 I 416 969 I 416 969 I C 
-416 915 M 416 884 I 417 883 I 418 882 I 420 883 I 420 884 I 420 915 I 420 917 I 418 918 I 417 917 I 416 915 I 416 915 I C 
-416 862 M 416 832 I 417 829 I 418 829 I 420 829 I 420 832 I 420 862 I 420 864 I 418 865 I 417 864 I 416 862 I 416 862 I C 
-416 809 M 416 778 I 417 777 I 418 776 I 420 777 I 420 778 I 420 809 I 420 811 I 418 811 I 417 811 I 416 809 I 416 809 I C 
-416 756 M 416 725 I 417 723 I 418 722 I 420 723 I 420 725 I 420 756 I 420 758 I 418 758 I 417 758 I 416 756 I 416 756 I C 
-416 703 M 416 672 I 417 670 I 418 670 I 420 670 I 420 672 I 420 703 I 420 704 I 418 705 I 417 704 I 416 703 I 416 703 I C 
-416 649 M 416 618 I 417 617 I 418 616 I 420 617 I 420 618 I 420 649 I 420 651 I 418 652 I 417 651 I 416 649 I 416 649 I C 
-416 597 M 416 565 I 417 564 I 418 563 I 420 564 I 420 565 I 420 597 I 420 598 I 418 599 I 417 598 I 416 597 I 416 597 I C 
-416 543 M 416 512 I 417 511 I 418 510 I 420 511 I 420 512 I 420 543 I 420 545 I 418 545 I 417 545 I 416 543 I 416 543 I C 
-416 490 M 416 459 I 417 457 I 418 456 I 420 457 I 420 459 I 420 490 I 420 492 I 418 492 I 417 492 I 416 490 I 416 490 I C 
-416 437 M 416 406 I 417 404 I 418 404 I 420 404 I 420 406 I 420 437 I 420 438 I 418 439 I 417 438 I 416 437 I 416 437 I C 
-416 383 M 416 352 I 417 351 I 418 350 I 420 351 I 420 352 I 420 383 I 420 385 I 418 385 I 417 385 I 416 383 I 416 383 I C 
-416 330 M 416 299 I 417 298 I 418 297 I 420 298 I 420 299 I 420 330 I 420 332 I 418 333 I 417 332 I 416 330 I 416 330 I C 
-416 277 M 416 246 I 417 244 I 418 244 I 420 244 I 420 246 I 420 277 I 420 278 I 418 279 I 417 278 I 416 277 I 416 277 I C 
-:  L ; K 
-N 191 12 M 191 246 I 646 246 I 646 12 I 191 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1 Lj 1 Lc 6 Lw solid N 191 246 M 646 246 I 646 12 I 191 12 I 191 246 I C 
-: 0.66 0.723 +S K 
-; Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_T3Hdr 5.0 0
-{version cvi 2016 ge{32/FontType resourcestatus{pop pop true}{false}ifelse}
-{false}ifelse}exec/Is2016andT32? exch def/T32DefSBCMap{/CIDInit/ProcSet
-findresource begin 10 dict begin begincmap/CIDSystemInfo 3 dict dup begin
-/Registry(Adobe)def/Ordering(Identity1)def/Supplement 0 def end def/CMapType 0
-def/WMode 0 def 1 begincodespacerange<00><ff>endcodespacerange 1 begincidrange
-<00><ff>0 endcidrange endcmap/DrvSBCMap currentdict/CMap defineresource pop end
-end}bind def Is2016andT32?{T32DefSBCMap}def/T32RsrcBegin{Is2016andT32?{
-/BitmapFontInit/ProcSet findresource begin}if}bind def/T32RsrcEnd{Is2016andT32?
-{end}if}bind def/AddT32Char{6 1 roll 0 get 7 1 roll pop pop 5 1 roll pop
-findfont/TT32R get addglyph}bind def/AddT3Char{findfont dup 5 2 roll 1 index
-length 0 gt{cvx 1 index exch 4 exch put dup(imagemask)cvx cvn 5 exch put cvx}
-{pop cvx}ifelse 3 -1 roll/CharProcs get 3 1 roll put dup/Encoding get 5 -1 roll
-4 index put/Metrics get 3 1 roll put}bind def/AddT3T32Char Is2016andT32?{
-/AddT32Char}{/AddT3Char}ifelse load def/GreNewFontT32{5 dict begin exch
-/FontMatrix exch def exch/FontBBox exch def exch pop exch pop/CIDFontType 4 def
-dup currentdict end/CIDFont defineresource 3 -1 roll dup/DrvSBCMap dup/CMap
-resourcestatus{pop pop}{T32DefSBCMap}ifelse 5 -1 roll[exch]composefont dup
-length dict copy dup/FID undef begin exch/TT32R exch def currentdict end
-definefont/BitmapFontInit/ProcSet findresource begin/TT32R get[14 0 0 0 0 0]<>0
-4 -1 roll addglyph end}bind def/GreNewFontT3{11 dict begin pop/FontType 3 def
-/FontMatrix exch def/FontBBox exch def/Encoding exch def/CharProcs 257 dict def
-CharProcs/.notdef{}put/Metrics 257 dict def Metrics/.notdef 3 -1 roll put
-AddFontInfoBegin AddFontInfo AddFontInfoEnd/BuildChar{userdict begin/char exch
-def dup/charname exch/Encoding get char get def dup/Metrics get charname 2 copy
-known{get aload pop}{pop/.notdef get aload pop}ifelse setcachedevice begin
-Encoding char get CharProcs exch 2 copy known{get}{pop/.notdef get}ifelse end
-exec end}def currentdict end definefont pop}bind def/GreNewFont{Is2016andT32?
-{GreNewFontT32}{GreNewFontT3}ifelse}bind def/UDF3{Is2016andT32?{/BitmapFontInit
-/ProcSet findresource begin dup/CIDFont findresource removeall/CIDFont
-undefineresource undefinefont end}{pop UDF}ifelse}bind def
-%%EndResource
-end reinitialize
-/TT37853b00
-[73 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 73 div 0 0 -1 73 div 0 0 ]
-/__TT37853b00
-GreNewFont
-T32RsrcBegin
-
-1
-/g90 [40 0 6 -47 37 0 ] 
-/g90 [31 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffc000
-fffff800
-fffffe00
-ffffff00
-ffffff80
-fc00ffc0
-fc003fe0
-fc001fe0
-fc000fe0
-fc000ff0
-fc0007f0
-fc0007f0
-fc0007f0
-fc0007f0
-fc0007f0
-fc0007f0
-fc000fe0
-fc000fe0
-fc001fe0
-fc003fc0
-fc00ff80
-ffffff00
-fffffe00
-fffff800
-fffff000
-fffff800
-fc07fc00
-fc01fe00
-fc00ff00
-fc007f00
-fc003f80
-fc003f80
-fc001fc0
-fc001fc0
-fc000fe0
-fc000fe0
-fc0007e0
-fc0007f0
-fc0007f0
-fc0003f8
-fc0003f8
-fc0001f8
-fc0001fc
-fc0001fc
-fc0000fe
-fc0000fe
-fc00007e
->
- ]
-/TT37853b00 AddT3T32Char
-
-2
-/g18 [39 0 4 -48 37 1 ] 
-/g18 [33 49 true [1 0 0 1 -4 48 ]  0 0]
-[<0001ff0000
-000fffe000
-003ffff800
-007ffffe00
-00ffffff00
-01ff80ff80
-03fe001f80
-07f8000f80
-0ff0000380
-0fe0000180
-1fc0000000
-1fc0000000
-3f80000000
-3f80000000
-7f80000000
-7f00000000
-7f00000000
-7f00000000
-7f00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-fe00000000
-ff00000000
-7f00000000
-7f00000000
-7f00000000
-7f80000000
-3f80000000
-3fc0000000
-1fc0000000
-1fe0000000
-0ff0000180
-0ff8000780
-07fc001f80
-03ff807f80
-01ffffff80
-00ffffff00
-007ffffc00
-001ffff000
-0001ff0000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Text 5.0 0
-/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
-/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
-length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
-{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
-/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
-if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
-{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
-StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
-! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy
-put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM
-makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0
-Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N
-/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT
-{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d
-/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `
-/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d
-/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont
-Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1
-add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E
-/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $
-FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255
-idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector
-Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding
-length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2
-add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs
-putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^
-256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E
-/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~
-definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix
-makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ !
-findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?
-{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
-get undefinefont}forall undefinefont}b
-%%EndResource
-end reinitialize
-F /F0 0 /0 F /TT37853b00 mF 
-/F0S49 F0 [73.957 0 0 -73.957 0 0 ] mFS
-F0S49 Ji 
-364 151 M <01>S 
-400 151 M <01>S  436 151 M <02>S  
-7 Lw N 364 160 M 473 160 I : 0.66 0.723 +S K 
-; 1 Lw solid N 1134 3256 M 1134 3225 I 1135 3223 I 1136 3223 I 1137 3223 I 1138 3225 I 1138 3256 I 1137 3257 I 1136 3258 I 1135 3257 I 1134 3256 I 1134 3256 I C 
-1134 3203 M 1134 3172 I 1135 3171 I 1136 3170 I 1137 3171 I 1138 3172 I 1138 3203 I 1137 3205 I 1136 3205 I 1135 3205 I 1134 3203 I 1134 3203 I C 
-1134 3150 M 1134 3119 I 1135 3117 I 1136 3116 I 1137 3117 I 1138 3119 I 1138 3150 I 1137 3151 I 1136 3152 I 1135 3151 I 1134 3150 I 1134 3150 I C 
-1134 3097 M 1134 3066 I 1135 3064 I 1136 3064 I 1137 3064 I 1138 3066 I 1138 3097 I 1137 3098 I 1136 3099 I 1135 3098 I 1134 3097 I 1134 3097 I C 
-1134 3043 M 1134 3012 I 1135 3011 I 1136 3010 I 1137 3011 I 1138 3012 I 1138 3043 I 1137 3045 I 1136 3046 I 1135 3045 I 1134 3043 I 1134 3043 I C 
-1134 2990 M 1134 2959 I 1135 2957 I 1136 2957 I 1137 2957 I 1138 2959 I 1138 2990 I 1137 2992 I 1136 2992 I 1135 2992 I 1134 2990 I 1134 2990 I C 
-1134 2937 M 1134 2906 I 1135 2905 I 1136 2904 I 1137 2905 I 1138 2906 I 1138 2937 I 1137 2939 I 1136 2939 I 1135 2939 I 1134 2937 I 1134 2937 I C 
-1134 2884 M 1134 2853 I 1135 2851 I 1136 2850 I 1137 2851 I 1138 2853 I 1138 2884 I 1137 2885 I 1136 2886 I 1135 2885 I 1134 2884 I 1134 2884 I C 
-1134 2831 M 1134 2800 I 1135 2798 I 1136 2798 I 1137 2798 I 1138 2800 I 1138 2831 I 1137 2832 I 1136 2833 I 1135 2832 I 1134 2831 I 1134 2831 I C 
-1134 2777 M 1134 2746 I 1135 2745 I 1136 2744 I 1137 2745 I 1138 2746 I 1138 2777 I 1137 2779 I 1136 2780 I 1135 2779 I 1134 2777 I 1134 2777 I C 
-1134 2725 M 1134 2693 I 1135 2692 I 1136 2691 I 1137 2692 I 1138 2693 I 1138 2725 I 1137 2726 I 1136 2727 I 1135 2726 I 1134 2725 I 1134 2725 I C 
-1134 2671 M 1134 2640 I 1135 2639 I 1136 2638 I 1137 2639 I 1138 2640 I 1138 2671 I 1137 2672 I 1136 2673 I 1135 2672 I 1134 2671 I 1134 2671 I C 
-1134 2618 M 1134 2586 I 1135 2585 I 1136 2584 I 1137 2585 I 1138 2586 I 1138 2618 I 1137 2620 I 1136 2620 I 1135 2620 I 1134 2618 I 1134 2618 I C 
-1134 2565 M 1134 2534 I 1135 2532 I 1136 2531 I 1137 2532 I 1138 2534 I 1138 2565 I 1137 2566 I 1136 2567 I 1135 2566 I 1134 2565 I 1134 2565 I C 
-1134 2511 M 1134 2480 I 1135 2479 I 1136 2478 I 1137 2479 I 1138 2480 I 1138 2511 I 1137 2513 I 1136 2513 I 1135 2513 I 1134 2511 I 1134 2511 I C 
-1134 2458 M 1134 2427 I 1135 2426 I 1136 2425 I 1137 2426 I 1138 2427 I 1138 2458 I 1137 2460 I 1136 2461 I 1135 2460 I 1134 2458 I 1134 2458 I C 
-1134 2405 M 1134 2374 I 1135 2372 I 1136 2372 I 1137 2372 I 1138 2374 I 1138 2405 I 1137 2406 I 1136 2407 I 1135 2406 I 1134 2405 I 1134 2405 I C 
-1134 2352 M 1134 2321 I 1135 2320 I 1136 2319 I 1137 2320 I 1138 2321 I 1138 2352 I 1137 2354 I 1136 2354 I 1135 2354 I 1134 2352 I 1134 2352 I C 
-1134 2299 M 1134 2268 I 1135 2266 I 1136 2265 I 1137 2266 I 1138 2268 I 1138 2299 I 1137 2300 I 1136 2301 I 1135 2300 I 1134 2299 I 1134 2299 I C 
-1134 2245 M 1134 2214 I 1135 2213 I 1136 2212 I 1137 2213 I 1138 2214 I 1138 2245 I 1137 2247 I 1136 2247 I 1135 2247 I 1134 2245 I 1134 2245 I C 
-1134 2192 M 1134 2161 I 1135 2160 I 1136 2159 I 1137 2160 I 1138 2161 I 1138 2192 I 1137 2194 I 1136 2195 I 1135 2194 I 1134 2192 I 1134 2192 I C 
-1134 2139 M 1134 2108 I 1135 2106 I 1136 2106 I 1137 2106 I 1138 2108 I 1138 2139 I 1137 2140 I 1136 2141 I 1135 2140 I 1134 2139 I 1134 2139 I C 
-1134 2086 M 1134 2055 I 1135 2054 I 1136 2053 I 1137 2054 I 1138 2055 I 1138 2086 I 1137 2088 I 1136 2088 I 1135 2088 I 1134 2086 I 1134 2086 I C 
-1134 2033 M 1134 2001 I 1135 2000 I 1136 1999 I 1137 2000 I 1138 2001 I 1138 2033 I 1137 2034 I 1136 2035 I 1135 2034 I 1134 2033 I 1134 2033 I C 
-1134 1979 M 1134 1949 I 1135 1947 I 1136 1947 I 1137 1947 I 1138 1949 I 1138 1979 I 1137 1981 I 1136 1982 I 1135 1981 I 1134 1979 I 1134 1979 I C 
-1134 1926 M 1134 1895 I 1135 1894 I 1136 1893 I 1137 1894 I 1138 1895 I 1138 1926 I 1137 1928 I 1136 1928 I 1135 1928 I 1134 1926 I 1134 1926 I C 
-1134 1873 M 1134 1842 I 1135 1840 I 1136 1840 I 1137 1840 I 1138 1842 I 1138 1873 I 1137 1875 I 1136 1875 I 1135 1875 I 1134 1873 I 1134 1873 I C 
-1134 1820 M 1134 1789 I 1135 1787 I 1136 1787 I 1137 1787 I 1138 1789 I 1138 1820 I 1137 1821 I 1136 1822 I 1135 1821 I 1134 1820 I 1134 1820 I C 
-1134 1766 M 1134 1735 I 1135 1734 I 1136 1733 I 1137 1734 I 1138 1735 I 1138 1766 I 1137 1768 I 1136 1769 I 1135 1768 I 1134 1766 I 1134 1766 I C 
-1134 1714 M 1134 1683 I 1135 1681 I 1136 1680 I 1137 1681 I 1138 1683 I 1138 1714 I 1137 1715 I 1136 1716 I 1135 1715 I 1134 1714 I 1134 1714 I C 
-1134 1660 M 1134 1629 I 1135 1628 I 1136 1627 I 1137 1628 I 1138 1629 I 1138 1660 I 1137 1662 I 1136 1662 I 1135 1662 I 1134 1660 I 1134 1660 I C 
-1134 1607 M 1134 1576 I 1135 1575 I 1136 1574 I 1137 1575 I 1138 1576 I 1138 1607 I 1137 1609 I 1136 1610 I 1135 1609 I 1134 1607 I 1134 1607 I C 
-1134 1554 M 1134 1523 I 1135 1521 I 1136 1521 I 1137 1521 I 1138 1523 I 1138 1554 I 1137 1555 I 1136 1556 I 1135 1555 I 1134 1554 I 1134 1554 I C 
-1134 1500 M 1134 1469 I 1135 1468 I 1136 1467 I 1137 1468 I 1138 1469 I 1138 1500 I 1137 1503 I 1136 1503 I 1135 1503 I 1134 1500 I 1134 1500 I C 
-1134 1448 M 1134 1417 I 1135 1415 I 1136 1414 I 1137 1415 I 1138 1417 I 1138 1448 I 1137 1449 I 1136 1450 I 1135 1449 I 1134 1448 I 1134 1448 I C 
-1134 1394 M 1134 1363 I 1135 1362 I 1136 1361 I 1137 1362 I 1138 1363 I 1138 1394 I 1137 1396 I 1136 1396 I 1135 1396 I 1134 1394 I 1134 1394 I C 
-1134 1341 M 1134 1310 I 1135 1309 I 1136 1308 I 1137 1309 I 1138 1310 I 1138 1341 I 1137 1343 I 1136 1343 I 1135 1343 I 1134 1341 I 1134 1341 I C 
-1134 1288 M 1134 1257 I 1135 1255 I 1136 1255 I 1137 1255 I 1138 1257 I 1138 1288 I 1137 1289 I 1136 1290 I 1135 1289 I 1134 1288 I 1134 1288 I C 
-1134 1234 M 1134 1204 I 1135 1202 I 1136 1201 I 1137 1202 I 1138 1204 I 1138 1234 I 1137 1236 I 1136 1237 I 1135 1236 I 1134 1234 I 1134 1234 I C 
-1134 1182 M 1134 1150 I 1135 1149 I 1136 1148 I 1137 1149 I 1138 1150 I 1138 1182 I 1137 1183 I 1136 1184 I 1135 1183 I 1134 1182 I 1134 1182 I C 
-1134 1128 M 1134 1097 I 1135 1095 I 1136 1095 I 1137 1095 I 1138 1097 I 1138 1128 I 1137 1130 I 1136 1130 I 1135 1130 I 1134 1128 I 1134 1128 I C 
-1134 1075 M 1134 1044 I 1135 1043 I 1136 1042 I 1137 1043 I 1138 1044 I 1138 1075 I 1137 1077 I 1136 1077 I 1135 1077 I 1134 1075 I 1134 1075 I C 
-1134 1022 M 1134 991 I 1135 989 I 1136 988 I 1137 989 I 1138 991 I 1138 1022 I 1137 1023 I 1136 1024 I 1135 1023 I 1134 1022 I 1134 1022 I C 
-1134 969 M 1134 938 I 1135 936 I 1136 936 I 1137 936 I 1138 938 I 1138 969 I 1137 970 I 1136 971 I 1135 970 I 1134 969 I 1134 969 I C 
-1134 915 M 1134 884 I 1135 883 I 1136 882 I 1137 883 I 1138 884 I 1138 915 I 1137 917 I 1136 918 I 1135 917 I 1134 915 I 1134 915 I C 
-1134 862 M 1134 832 I 1135 829 I 1136 829 I 1137 829 I 1138 832 I 1138 862 I 1137 864 I 1136 865 I 1135 864 I 1134 862 I 1134 862 I C 
-1134 809 M 1134 778 I 1135 777 I 1136 776 I 1137 777 I 1138 778 I 1138 809 I 1137 811 I 1136 811 I 1135 811 I 1134 809 I 1134 809 I C 
-1134 756 M 1134 725 I 1135 723 I 1136 722 I 1137 723 I 1138 725 I 1138 756 I 1137 758 I 1136 758 I 1135 758 I 1134 756 I 1134 756 I C 
-1134 703 M 1134 672 I 1135 670 I 1136 670 I 1137 670 I 1138 672 I 1138 703 I 1137 704 I 1136 705 I 1135 704 I 1134 703 I 1134 703 I C 
-1134 649 M 1134 618 I 1135 617 I 1136 616 I 1137 617 I 1138 618 I 1138 649 I 1137 651 I 1136 652 I 1135 651 I 1134 649 I 1134 649 I C 
-1134 597 M 1134 565 I 1135 564 I 1136 563 I 1137 564 I 1138 565 I 1138 597 I 1137 598 I 1136 599 I 1135 598 I 1134 597 I 1134 597 I C 
-1134 543 M 1134 512 I 1135 511 I 1136 510 I 1137 511 I 1138 512 I 1138 543 I 1137 545 I 1136 545 I 1135 545 I 1134 543 I 1134 543 I C 
-1134 490 M 1134 459 I 1135 457 I 1136 456 I 1137 457 I 1138 459 I 1138 490 I 1137 492 I 1136 492 I 1135 492 I 1134 490 I 1134 490 I C 
-1134 437 M 1134 406 I 1135 404 I 1136 404 I 1137 404 I 1138 406 I 1138 437 I 1137 438 I 1136 439 I 1135 438 I 1134 437 I 1134 437 I C 
-1134 383 M 1134 352 I 1135 351 I 1136 350 I 1137 351 I 1138 352 I 1138 383 I 1137 385 I 1136 385 I 1135 385 I 1134 383 I 1134 383 I C 
-1134 330 M 1134 299 I 1135 298 I 1136 297 I 1137 298 I 1138 299 I 1138 330 I 1137 332 I 1136 333 I 1135 332 I 1134 330 I 1134 330 I C 
-1134 277 M 1134 246 I 1135 244 I 1136 244 I 1137 244 I 1138 246 I 1138 277 I 1137 278 I 1136 279 I 1135 278 I 1134 277 I 1134 277 I C 
-:  L ; K 
-N 909 12 M 909 246 I 1363 246 I 1363 12 I 909 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 909 246 M 1363 246 I 1363 12 I 909 12 I 909 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-3
-/g87 [38 0 6 -47 35 0 ] 
-/g87 [29 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffc000
-fffff800
-fffffe00
-ffffff80
-ffffffc0
-fc00ffe0
-fc003fe0
-fc000ff0
-fc000ff0
-fc0007f0
-fc0007f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0003f8
-fc0007f0
-fc0007f0
-fc000ff0
-fc001fe0
-fc003fc0
-fc00ffc0
-ffffff80
-ffffff00
-fffffc00
-fffff000
-ffff8000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
->
- ]
-/TT37853b00 AddT3T32Char
-
-4
-/g24 [46 0 6 -47 42 0 ] 
-/g24 [36 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffe00000
-fffffe0000
-ffffff8000
-ffffffe000
-fffffff000
-fc007ffc00
-fc000ffe00
-fc0003fe00
-fc0000ff00
-fc00007f80
-fc00007f80
-fc00003fc0
-fc00001fc0
-fc00001fe0
-fc00000fe0
-fc00000fe0
-fc00000fe0
-fc00000ff0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc000007f0
-fc00000fe0
-fc00000fe0
-fc00000fe0
-fc00000fe0
-fc00001fc0
-fc00001fc0
-fc00003fc0
-fc00003f80
-fc00007f80
-fc0000ff00
-fc0003fe00
-fc0007fc00
-fc003ff800
-fffffff000
-ffffffe000
-ffffff8000
-fffffe0000
-7fffe00000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-1063 151 M <03>S 
-1098 151 M <04>S  1139 151 M <02>S  1175 151 M <03>S  
-7 Lw N 1063 160 M 1210 160 I : 0.66 0.723 +S K 
-; 1 Lw solid N 1852 3256 M 1852 3225 I 1853 3223 I 1854 3223 I 1855 3223 I 1856 3225 I 1856 3256 I 1855 3257 I 1854 3258 I 1853 3257 I 1852 3256 I 1852 3256 I C 
-1852 3203 M 1852 3172 I 1853 3171 I 1854 3170 I 1855 3171 I 1856 3172 I 1856 3203 I 1855 3205 I 1854 3205 I 1853 3205 I 1852 3203 I 1852 3203 I C 
-1852 3150 M 1852 3119 I 1853 3117 I 1854 3116 I 1855 3117 I 1856 3119 I 1856 3150 I 1855 3151 I 1854 3152 I 1853 3151 I 1852 3150 I 1852 3150 I C 
-1852 3097 M 1852 3066 I 1853 3064 I 1854 3064 I 1855 3064 I 1856 3066 I 1856 3097 I 1855 3098 I 1854 3099 I 1853 3098 I 1852 3097 I 1852 3097 I C 
-1852 3043 M 1852 3012 I 1853 3011 I 1854 3010 I 1855 3011 I 1856 3012 I 1856 3043 I 1855 3045 I 1854 3046 I 1853 3045 I 1852 3043 I 1852 3043 I C 
-1852 2990 M 1852 2959 I 1853 2957 I 1854 2957 I 1855 2957 I 1856 2959 I 1856 2990 I 1855 2992 I 1854 2992 I 1853 2992 I 1852 2990 I 1852 2990 I C 
-1852 2937 M 1852 2906 I 1853 2905 I 1854 2904 I 1855 2905 I 1856 2906 I 1856 2937 I 1855 2939 I 1854 2939 I 1853 2939 I 1852 2937 I 1852 2937 I C 
-1852 2884 M 1852 2853 I 1853 2851 I 1854 2850 I 1855 2851 I 1856 2853 I 1856 2884 I 1855 2885 I 1854 2886 I 1853 2885 I 1852 2884 I 1852 2884 I C 
-1852 2831 M 1852 2800 I 1853 2798 I 1854 2798 I 1855 2798 I 1856 2800 I 1856 2831 I 1855 2832 I 1854 2833 I 1853 2832 I 1852 2831 I 1852 2831 I C 
-1852 2777 M 1852 2746 I 1853 2745 I 1854 2744 I 1855 2745 I 1856 2746 I 1856 2777 I 1855 2779 I 1854 2780 I 1853 2779 I 1852 2777 I 1852 2777 I C 
-1852 2725 M 1852 2693 I 1853 2692 I 1854 2691 I 1855 2692 I 1856 2693 I 1856 2725 I 1855 2726 I 1854 2727 I 1853 2726 I 1852 2725 I 1852 2725 I C 
-1852 2671 M 1852 2640 I 1853 2639 I 1854 2638 I 1855 2639 I 1856 2640 I 1856 2671 I 1855 2672 I 1854 2673 I 1853 2672 I 1852 2671 I 1852 2671 I C 
-1852 2618 M 1852 2586 I 1853 2585 I 1854 2584 I 1855 2585 I 1856 2586 I 1856 2618 I 1855 2620 I 1854 2620 I 1853 2620 I 1852 2618 I 1852 2618 I C 
-1852 2565 M 1852 2534 I 1853 2532 I 1854 2531 I 1855 2532 I 1856 2534 I 1856 2565 I 1855 2566 I 1854 2567 I 1853 2566 I 1852 2565 I 1852 2565 I C 
-1852 2511 M 1852 2480 I 1853 2479 I 1854 2478 I 1855 2479 I 1856 2480 I 1856 2511 I 1855 2513 I 1854 2513 I 1853 2513 I 1852 2511 I 1852 2511 I C 
-1852 2458 M 1852 2427 I 1853 2426 I 1854 2425 I 1855 2426 I 1856 2427 I 1856 2458 I 1855 2460 I 1854 2461 I 1853 2460 I 1852 2458 I 1852 2458 I C 
-1852 2405 M 1852 2374 I 1853 2372 I 1854 2372 I 1855 2372 I 1856 2374 I 1856 2405 I 1855 2406 I 1854 2407 I 1853 2406 I 1852 2405 I 1852 2405 I C 
-1852 2352 M 1852 2321 I 1853 2320 I 1854 2319 I 1855 2320 I 1856 2321 I 1856 2352 I 1855 2354 I 1854 2354 I 1853 2354 I 1852 2352 I 1852 2352 I C 
-1852 2299 M 1852 2268 I 1853 2266 I 1854 2265 I 1855 2266 I 1856 2268 I 1856 2299 I 1855 2300 I 1854 2301 I 1853 2300 I 1852 2299 I 1852 2299 I C 
-1852 2245 M 1852 2214 I 1853 2213 I 1854 2212 I 1855 2213 I 1856 2214 I 1856 2245 I 1855 2247 I 1854 2247 I 1853 2247 I 1852 2245 I 1852 2245 I C 
-1852 2192 M 1852 2161 I 1853 2160 I 1854 2159 I 1855 2160 I 1856 2161 I 1856 2192 I 1855 2194 I 1854 2195 I 1853 2194 I 1852 2192 I 1852 2192 I C 
-1852 2139 M 1852 2108 I 1853 2106 I 1854 2106 I 1855 2106 I 1856 2108 I 1856 2139 I 1855 2140 I 1854 2141 I 1853 2140 I 1852 2139 I 1852 2139 I C 
-1852 2086 M 1852 2055 I 1853 2054 I 1854 2053 I 1855 2054 I 1856 2055 I 1856 2086 I 1855 2088 I 1854 2088 I 1853 2088 I 1852 2086 I 1852 2086 I C 
-1852 2033 M 1852 2001 I 1853 2000 I 1854 1999 I 1855 2000 I 1856 2001 I 1856 2033 I 1855 2034 I 1854 2035 I 1853 2034 I 1852 2033 I 1852 2033 I C 
-1852 1979 M 1852 1949 I 1853 1947 I 1854 1947 I 1855 1947 I 1856 1949 I 1856 1979 I 1855 1981 I 1854 1982 I 1853 1981 I 1852 1979 I 1852 1979 I C 
-1852 1926 M 1852 1895 I 1853 1894 I 1854 1893 I 1855 1894 I 1856 1895 I 1856 1926 I 1855 1928 I 1854 1928 I 1853 1928 I 1852 1926 I 1852 1926 I C 
-1852 1873 M 1852 1842 I 1853 1840 I 1854 1840 I 1855 1840 I 1856 1842 I 1856 1873 I 1855 1875 I 1854 1875 I 1853 1875 I 1852 1873 I 1852 1873 I C 
-1852 1820 M 1852 1789 I 1853 1787 I 1854 1787 I 1855 1787 I 1856 1789 I 1856 1820 I 1855 1821 I 1854 1822 I 1853 1821 I 1852 1820 I 1852 1820 I C 
-1852 1766 M 1852 1735 I 1853 1734 I 1854 1733 I 1855 1734 I 1856 1735 I 1856 1766 I 1855 1768 I 1854 1769 I 1853 1768 I 1852 1766 I 1852 1766 I C 
-1852 1714 M 1852 1683 I 1853 1681 I 1854 1680 I 1855 1681 I 1856 1683 I 1856 1714 I 1855 1715 I 1854 1716 I 1853 1715 I 1852 1714 I 1852 1714 I C 
-1852 1660 M 1852 1629 I 1853 1628 I 1854 1627 I 1855 1628 I 1856 1629 I 1856 1660 I 1855 1662 I 1854 1662 I 1853 1662 I 1852 1660 I 1852 1660 I C 
-1852 1607 M 1852 1576 I 1853 1575 I 1854 1574 I 1855 1575 I 1856 1576 I 1856 1607 I 1855 1609 I 1854 1610 I 1853 1609 I 1852 1607 I 1852 1607 I C 
-1852 1554 M 1852 1523 I 1853 1521 I 1854 1521 I 1855 1521 I 1856 1523 I 1856 1554 I 1855 1555 I 1854 1556 I 1853 1555 I 1852 1554 I 1852 1554 I C 
-1852 1500 M 1852 1469 I 1853 1468 I 1854 1467 I 1855 1468 I 1856 1469 I 1856 1500 I 1855 1503 I 1854 1503 I 1853 1503 I 1852 1500 I 1852 1500 I C 
-1852 1448 M 1852 1417 I 1853 1415 I 1854 1414 I 1855 1415 I 1856 1417 I 1856 1448 I 1855 1449 I 1854 1450 I 1853 1449 I 1852 1448 I 1852 1448 I C 
-1852 1394 M 1852 1363 I 1853 1362 I 1854 1361 I 1855 1362 I 1856 1363 I 1856 1394 I 1855 1396 I 1854 1396 I 1853 1396 I 1852 1394 I 1852 1394 I C 
-1852 1341 M 1852 1310 I 1853 1309 I 1854 1308 I 1855 1309 I 1856 1310 I 1856 1341 I 1855 1343 I 1854 1343 I 1853 1343 I 1852 1341 I 1852 1341 I C 
-1852 1288 M 1852 1257 I 1853 1255 I 1854 1255 I 1855 1255 I 1856 1257 I 1856 1288 I 1855 1289 I 1854 1290 I 1853 1289 I 1852 1288 I 1852 1288 I C 
-1852 1234 M 1852 1204 I 1853 1202 I 1854 1201 I 1855 1202 I 1856 1204 I 1856 1234 I 1855 1236 I 1854 1237 I 1853 1236 I 1852 1234 I 1852 1234 I C 
-1852 1182 M 1852 1150 I 1853 1149 I 1854 1148 I 1855 1149 I 1856 1150 I 1856 1182 I 1855 1183 I 1854 1184 I 1853 1183 I 1852 1182 I 1852 1182 I C 
-1852 1128 M 1852 1097 I 1853 1095 I 1854 1095 I 1855 1095 I 1856 1097 I 1856 1128 I 1855 1130 I 1854 1130 I 1853 1130 I 1852 1128 I 1852 1128 I C 
-1852 1075 M 1852 1044 I 1853 1043 I 1854 1042 I 1855 1043 I 1856 1044 I 1856 1075 I 1855 1077 I 1854 1077 I 1853 1077 I 1852 1075 I 1852 1075 I C 
-1852 1022 M 1852 991 I 1853 989 I 1854 988 I 1855 989 I 1856 991 I 1856 1022 I 1855 1023 I 1854 1024 I 1853 1023 I 1852 1022 I 1852 1022 I C 
-1852 969 M 1852 938 I 1853 936 I 1854 936 I 1855 936 I 1856 938 I 1856 969 I 1855 970 I 1854 971 I 1853 970 I 1852 969 I 1852 969 I C 
-1852 915 M 1852 884 I 1853 883 I 1854 882 I 1855 883 I 1856 884 I 1856 915 I 1855 917 I 1854 918 I 1853 917 I 1852 915 I 1852 915 I C 
-1852 862 M 1852 832 I 1853 829 I 1854 829 I 1855 829 I 1856 832 I 1856 862 I 1855 864 I 1854 865 I 1853 864 I 1852 862 I 1852 862 I C 
-1852 809 M 1852 778 I 1853 777 I 1854 776 I 1855 777 I 1856 778 I 1856 809 I 1855 811 I 1854 811 I 1853 811 I 1852 809 I 1852 809 I C 
-1852 756 M 1852 725 I 1853 723 I 1854 722 I 1855 723 I 1856 725 I 1856 756 I 1855 758 I 1854 758 I 1853 758 I 1852 756 I 1852 756 I C 
-1852 703 M 1852 672 I 1853 670 I 1854 670 I 1855 670 I 1856 672 I 1856 703 I 1855 704 I 1854 705 I 1853 704 I 1852 703 I 1852 703 I C 
-1852 649 M 1852 618 I 1853 617 I 1854 616 I 1855 617 I 1856 618 I 1856 649 I 1855 651 I 1854 652 I 1853 651 I 1852 649 I 1852 649 I C 
-1852 597 M 1852 565 I 1853 564 I 1854 563 I 1855 564 I 1856 565 I 1856 597 I 1855 598 I 1854 599 I 1853 598 I 1852 597 I 1852 597 I C 
-1852 543 M 1852 512 I 1853 511 I 1854 510 I 1855 511 I 1856 512 I 1856 543 I 1855 545 I 1854 545 I 1853 545 I 1852 543 I 1852 543 I C 
-1852 490 M 1852 459 I 1853 457 I 1854 456 I 1855 457 I 1856 459 I 1856 490 I 1855 492 I 1854 492 I 1853 492 I 1852 490 I 1852 490 I C 
-1852 437 M 1852 406 I 1853 404 I 1854 404 I 1855 404 I 1856 406 I 1856 437 I 1855 438 I 1854 439 I 1853 438 I 1852 437 I 1852 437 I C 
-1852 383 M 1852 352 I 1853 351 I 1854 350 I 1855 351 I 1856 352 I 1856 383 I 1855 385 I 1854 385 I 1853 385 I 1852 383 I 1852 383 I C 
-1852 330 M 1852 299 I 1853 298 I 1854 297 I 1855 298 I 1856 299 I 1856 330 I 1855 332 I 1854 333 I 1853 332 I 1852 330 I 1852 330 I C 
-1852 277 M 1852 246 I 1853 244 I 1854 244 I 1855 244 I 1856 246 I 1856 277 I 1855 278 I 1854 279 I 1853 278 I 1852 277 I 1852 277 I C 
-:  L ; K 
-N 1627 12 M 1627 246 I 2081 246 I 2081 12 I 1627 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 1627 246 M 2081 246 I 2081 12 I 1627 12 I 1627 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-5
-/g4 [43 0 1 -47 42 0 ] 
-/g4 [41 47 true [1 0 0 1 -1 47 ]  0 0]
-[<00007f000000
-0000ff800000
-0000ff800000
-0001ff800000
-0001ffc00000
-0001ffc00000
-0003ffc00000
-0003f7e00000
-0003e7e00000
-0007e7f00000
-0007e3f00000
-0007c3f00000
-000fc3f80000
-000fc1f80000
-001f81f80000
-001f81fc0000
-001f80fc0000
-003f00fc0000
-003f00fe0000
-003f007e0000
-007e007f0000
-007e007f0000
-007e003f0000
-00fc003f8000
-00fc003f8000
-01fc001f8000
-01f8001fc000
-01f8001fc000
-03f8000fc000
-03f0000fe000
-03ffffffe000
-07ffffffe000
-07fffffff000
-07fffffff000
-0ffffffff800
-0fc00003f800
-0fc00003f800
-1fc00001fc00
-1f800001fc00
-3f800000fc00
-3f800000fe00
-3f000000fe00
-7f0000007e00
-7e0000007f00
-7e0000007f00
-fe0000003f00
-fc0000003f00
->
- ]
-/TT37853b00 AddT3T32Char
-
-6
-/g68 [63 0 6 -47 57 0 ] 
-/g68 [51 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7f800000003fc0
-ffc00000007fe0
-ffe0000000ffe0
-fff0000000ffe0
-fff0000001ffe0
-fff0000001ffe0
-fdf8000001f7e0
-fdf8000003f7e0
-fdfc000003f7e0
-fcfc000007e7e0
-fcfc000007e7e0
-fc7e000007c7e0
-fc7e00000fc7e0
-fc7f00000fc7e0
-fc3f00001f87e0
-fc3f00001f87e0
-fc1f80003f07e0
-fc1f80003f07e0
-fc1fc0003e07e0
-fc0fc0007e07e0
-fc0fc0007e07e0
-fc07e000fc07e0
-fc07e000fc07e0
-fc07f000f807e0
-fc03f001f807e0
-fc03f801f807e0
-fc01f803f007e0
-fc01f803f007e0
-fc01fc03e007e0
-fc00fc07e007e0
-fc00fe07e007e0
-fc00fe0fc007e0
-fc007e0fc007e0
-fc007f1f8007e0
-fc003f1f8007e0
-fc003f9f8007e0
-fc003fbf0007e0
-fc001fbf0007e0
-fc001ffe0007e0
-fc000ffe0007e0
-fc000ffe0007e0
-fc000ffc0007e0
-fc0007fc0007e0
-fc0007f80007e0
-fc0003f80007e0
-fc0003f80007e0
-fc0001f00007e0
->
- ]
-/TT37853b00 AddT3T32Char
-
-7
-/g3 [17 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT37853b00 AddT3T32Char
-
-8
-/g62 [31 0 6 -47 30 0 ] 
-/g62 [24 47 true [1 0 0 1 -6 47 ]  0 0]
-[<fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-ffffff
-ffffff
-ffffff
-ffffff
-7fffff
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-1747 151 M <05>S 
-1786 151 M <06>S  1844 151 M <07>S  1859 151 M <01>S  1896 151 M <08>S  1924 151 M <02>S  
-7 Lw N 1747 160 M 1961 160 I : 0.66 0.723 +S K 
-; 1 Lw solid N 3288 3256 M 3288 3225 I 3289 3223 I 3290 3223 I 3291 3223 I 3292 3225 I 3292 3256 I 3291 3257 I 3290 3258 I 3289 3257 I 3288 3256 I 3288 3256 I C 
-3288 3203 M 3288 3172 I 3289 3171 I 3290 3170 I 3291 3171 I 3292 3172 I 3292 3203 I 3291 3205 I 3290 3205 I 3289 3205 I 3288 3203 I 3288 3203 I C 
-3288 3150 M 3288 3119 I 3289 3117 I 3290 3116 I 3291 3117 I 3292 3119 I 3292 3150 I 3291 3151 I 3290 3152 I 3289 3151 I 3288 3150 I 3288 3150 I C 
-3288 3097 M 3288 3066 I 3289 3064 I 3290 3064 I 3291 3064 I 3292 3066 I 3292 3097 I 3291 3098 I 3290 3099 I 3289 3098 I 3288 3097 I 3288 3097 I C 
-3288 3043 M 3288 3012 I 3289 3011 I 3290 3010 I 3291 3011 I 3292 3012 I 3292 3043 I 3291 3045 I 3290 3046 I 3289 3045 I 3288 3043 I 3288 3043 I C 
-3288 2990 M 3288 2959 I 3289 2957 I 3290 2957 I 3291 2957 I 3292 2959 I 3292 2990 I 3291 2992 I 3290 2992 I 3289 2992 I 3288 2990 I 3288 2990 I C 
-3288 2937 M 3288 2906 I 3289 2905 I 3290 2904 I 3291 2905 I 3292 2906 I 3292 2937 I 3291 2939 I 3290 2939 I 3289 2939 I 3288 2937 I 3288 2937 I C 
-3288 2884 M 3288 2853 I 3289 2851 I 3290 2850 I 3291 2851 I 3292 2853 I 3292 2884 I 3291 2885 I 3290 2886 I 3289 2885 I 3288 2884 I 3288 2884 I C 
-3288 2831 M 3288 2800 I 3289 2798 I 3290 2798 I 3291 2798 I 3292 2800 I 3292 2831 I 3291 2832 I 3290 2833 I 3289 2832 I 3288 2831 I 3288 2831 I C 
-3288 2777 M 3288 2746 I 3289 2745 I 3290 2744 I 3291 2745 I 3292 2746 I 3292 2777 I 3291 2779 I 3290 2780 I 3289 2779 I 3288 2777 I 3288 2777 I C 
-3288 2725 M 3288 2693 I 3289 2692 I 3290 2691 I 3291 2692 I 3292 2693 I 3292 2725 I 3291 2726 I 3290 2727 I 3289 2726 I 3288 2725 I 3288 2725 I C 
-3288 2671 M 3288 2640 I 3289 2639 I 3290 2638 I 3291 2639 I 3292 2640 I 3292 2671 I 3291 2672 I 3290 2673 I 3289 2672 I 3288 2671 I 3288 2671 I C 
-3288 2618 M 3288 2586 I 3289 2585 I 3290 2584 I 3291 2585 I 3292 2586 I 3292 2618 I 3291 2620 I 3290 2620 I 3289 2620 I 3288 2618 I 3288 2618 I C 
-3288 2565 M 3288 2534 I 3289 2532 I 3290 2531 I 3291 2532 I 3292 2534 I 3292 2565 I 3291 2566 I 3290 2567 I 3289 2566 I 3288 2565 I 3288 2565 I C 
-3288 2511 M 3288 2480 I 3289 2479 I 3290 2478 I 3291 2479 I 3292 2480 I 3292 2511 I 3291 2513 I 3290 2513 I 3289 2513 I 3288 2511 I 3288 2511 I C 
-3288 2458 M 3288 2427 I 3289 2426 I 3290 2425 I 3291 2426 I 3292 2427 I 3292 2458 I 3291 2460 I 3290 2461 I 3289 2460 I 3288 2458 I 3288 2458 I C 
-3288 2405 M 3288 2374 I 3289 2372 I 3290 2372 I 3291 2372 I 3292 2374 I 3292 2405 I 3291 2406 I 3290 2407 I 3289 2406 I 3288 2405 I 3288 2405 I C 
-3288 2352 M 3288 2321 I 3289 2320 I 3290 2319 I 3291 2320 I 3292 2321 I 3292 2352 I 3291 2354 I 3290 2354 I 3289 2354 I 3288 2352 I 3288 2352 I C 
-3288 2299 M 3288 2268 I 3289 2266 I 3290 2265 I 3291 2266 I 3292 2268 I 3292 2299 I 3291 2300 I 3290 2301 I 3289 2300 I 3288 2299 I 3288 2299 I C 
-3288 2245 M 3288 2214 I 3289 2213 I 3290 2212 I 3291 2213 I 3292 2214 I 3292 2245 I 3291 2247 I 3290 2247 I 3289 2247 I 3288 2245 I 3288 2245 I C 
-3288 2192 M 3288 2161 I 3289 2160 I 3290 2159 I 3291 2160 I 3292 2161 I 3292 2192 I 3291 2194 I 3290 2195 I 3289 2194 I 3288 2192 I 3288 2192 I C 
-3288 2139 M 3288 2108 I 3289 2106 I 3290 2106 I 3291 2106 I 3292 2108 I 3292 2139 I 3291 2140 I 3290 2141 I 3289 2140 I 3288 2139 I 3288 2139 I C 
-3288 2086 M 3288 2055 I 3289 2054 I 3290 2053 I 3291 2054 I 3292 2055 I 3292 2086 I 3291 2088 I 3290 2088 I 3289 2088 I 3288 2086 I 3288 2086 I C 
-3288 2033 M 3288 2001 I 3289 2000 I 3290 1999 I 3291 2000 I 3292 2001 I 3292 2033 I 3291 2034 I 3290 2035 I 3289 2034 I 3288 2033 I 3288 2033 I C 
-3288 1979 M 3288 1949 I 3289 1947 I 3290 1947 I 3291 1947 I 3292 1949 I 3292 1979 I 3291 1981 I 3290 1982 I 3289 1981 I 3288 1979 I 3288 1979 I C 
-3288 1926 M 3288 1895 I 3289 1894 I 3290 1893 I 3291 1894 I 3292 1895 I 3292 1926 I 3291 1928 I 3290 1928 I 3289 1928 I 3288 1926 I 3288 1926 I C 
-3288 1873 M 3288 1842 I 3289 1840 I 3290 1840 I 3291 1840 I 3292 1842 I 3292 1873 I 3291 1875 I 3290 1875 I 3289 1875 I 3288 1873 I 3288 1873 I C 
-3288 1820 M 3288 1789 I 3289 1787 I 3290 1787 I 3291 1787 I 3292 1789 I 3292 1820 I 3291 1821 I 3290 1822 I 3289 1821 I 3288 1820 I 3288 1820 I C 
-3288 1766 M 3288 1735 I 3289 1734 I 3290 1733 I 3291 1734 I 3292 1735 I 3292 1766 I 3291 1768 I 3290 1769 I 3289 1768 I 3288 1766 I 3288 1766 I C 
-3288 1714 M 3288 1683 I 3289 1681 I 3290 1680 I 3291 1681 I 3292 1683 I 3292 1714 I 3291 1715 I 3290 1716 I 3289 1715 I 3288 1714 I 3288 1714 I C 
-3288 1660 M 3288 1629 I 3289 1628 I 3290 1627 I 3291 1628 I 3292 1629 I 3292 1660 I 3291 1662 I 3290 1662 I 3289 1662 I 3288 1660 I 3288 1660 I C 
-3288 1607 M 3288 1576 I 3289 1575 I 3290 1574 I 3291 1575 I 3292 1576 I 3292 1607 I 3291 1609 I 3290 1610 I 3289 1609 I 3288 1607 I 3288 1607 I C 
-3288 1554 M 3288 1523 I 3289 1521 I 3290 1521 I 3291 1521 I 3292 1523 I 3292 1554 I 3291 1555 I 3290 1556 I 3289 1555 I 3288 1554 I 3288 1554 I C 
-3288 1500 M 3288 1469 I 3289 1468 I 3290 1467 I 3291 1468 I 3292 1469 I 3292 1500 I 3291 1503 I 3290 1503 I 3289 1503 I 3288 1500 I 3288 1500 I C 
-3288 1448 M 3288 1417 I 3289 1415 I 3290 1414 I 3291 1415 I 3292 1417 I 3292 1448 I 3291 1449 I 3290 1450 I 3289 1449 I 3288 1448 I 3288 1448 I C 
-3288 1394 M 3288 1363 I 3289 1362 I 3290 1361 I 3291 1362 I 3292 1363 I 3292 1394 I 3291 1396 I 3290 1396 I 3289 1396 I 3288 1394 I 3288 1394 I C 
-3288 1341 M 3288 1310 I 3289 1309 I 3290 1308 I 3291 1309 I 3292 1310 I 3292 1341 I 3291 1343 I 3290 1343 I 3289 1343 I 3288 1341 I 3288 1341 I C 
-3288 1288 M 3288 1257 I 3289 1255 I 3290 1255 I 3291 1255 I 3292 1257 I 3292 1288 I 3291 1289 I 3290 1290 I 3289 1289 I 3288 1288 I 3288 1288 I C 
-3288 1234 M 3288 1204 I 3289 1202 I 3290 1201 I 3291 1202 I 3292 1204 I 3292 1234 I 3291 1236 I 3290 1237 I 3289 1236 I 3288 1234 I 3288 1234 I C 
-3288 1182 M 3288 1150 I 3289 1149 I 3290 1148 I 3291 1149 I 3292 1150 I 3292 1182 I 3291 1183 I 3290 1184 I 3289 1183 I 3288 1182 I 3288 1182 I C 
-3288 1128 M 3288 1097 I 3289 1095 I 3290 1095 I 3291 1095 I 3292 1097 I 3292 1128 I 3291 1130 I 3290 1130 I 3289 1130 I 3288 1128 I 3288 1128 I C 
-3288 1075 M 3288 1044 I 3289 1043 I 3290 1042 I 3291 1043 I 3292 1044 I 3292 1075 I 3291 1077 I 3290 1077 I 3289 1077 I 3288 1075 I 3288 1075 I C 
-3288 1022 M 3288 991 I 3289 989 I 3290 988 I 3291 989 I 3292 991 I 3292 1022 I 3291 1023 I 3290 1024 I 3289 1023 I 3288 1022 I 3288 1022 I C 
-3288 969 M 3288 938 I 3289 936 I 3290 936 I 3291 936 I 3292 938 I 3292 969 I 3291 970 I 3290 971 I 3289 970 I 3288 969 I 3288 969 I C 
-3288 915 M 3288 884 I 3289 883 I 3290 882 I 3291 883 I 3292 884 I 3292 915 I 3291 917 I 3290 918 I 3289 917 I 3288 915 I 3288 915 I C 
-3288 862 M 3288 832 I 3289 829 I 3290 829 I 3291 829 I 3292 832 I 3292 862 I 3291 864 I 3290 865 I 3289 864 I 3288 862 I 3288 862 I C 
-3288 809 M 3288 778 I 3289 777 I 3290 776 I 3291 777 I 3292 778 I 3292 809 I 3291 811 I 3290 811 I 3289 811 I 3288 809 I 3288 809 I C 
-3288 756 M 3288 725 I 3289 723 I 3290 722 I 3291 723 I 3292 725 I 3292 756 I 3291 758 I 3290 758 I 3289 758 I 3288 756 I 3288 756 I C 
-3288 703 M 3288 672 I 3289 670 I 3290 670 I 3291 670 I 3292 672 I 3292 703 I 3291 704 I 3290 705 I 3289 704 I 3288 703 I 3288 703 I C 
-3288 649 M 3288 618 I 3289 617 I 3290 616 I 3291 617 I 3292 618 I 3292 649 I 3291 651 I 3290 652 I 3289 651 I 3288 649 I 3288 649 I C 
-3288 597 M 3288 565 I 3289 564 I 3290 563 I 3291 564 I 3292 565 I 3292 597 I 3291 598 I 3290 599 I 3289 598 I 3288 597 I 3288 597 I C 
-3288 543 M 3288 512 I 3289 511 I 3290 510 I 3291 511 I 3292 512 I 3292 543 I 3291 545 I 3290 545 I 3289 545 I 3288 543 I 3288 543 I C 
-3288 490 M 3288 459 I 3289 457 I 3290 456 I 3291 457 I 3292 459 I 3292 490 I 3291 492 I 3290 492 I 3289 492 I 3288 490 I 3288 490 I C 
-3288 437 M 3288 406 I 3289 404 I 3290 404 I 3291 404 I 3292 406 I 3292 437 I 3291 438 I 3290 439 I 3289 438 I 3288 437 I 3288 437 I C 
-3288 383 M 3288 352 I 3289 351 I 3290 350 I 3291 351 I 3292 352 I 3292 383 I 3291 385 I 3290 385 I 3289 385 I 3288 383 I 3288 383 I C 
-3288 330 M 3288 299 I 3289 298 I 3290 297 I 3291 298 I 3292 299 I 3292 330 I 3291 332 I 3290 333 I 3289 332 I 3288 330 I 3288 330 I C 
-3288 277 M 3288 246 I 3289 244 I 3290 244 I 3291 244 I 3292 246 I 3292 277 I 3291 278 I 3290 279 I 3289 278 I 3288 277 I 3288 277 I C 
-:  L ; K 
-N 3063 12 M 3063 246 I 3517 246 I 3517 12 I 3063 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 3063 246 M 3517 246 I 3517 12 I 3063 12 I 3063 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-9
-/g286 [37 0 3 -35 33 1 ] 
-/g286 [30 36 true [1 0 0 1 -3 35 ]  0 0]
-[<001ff000
-007ffe00
-01ffff00
-03ffffc0
-07ffffe0
-0ff01fe0
-1fc007f0
-3f8003f8
-3f0001f8
-7e0001f8
-7e0000f8
-7c0000fc
-7c0000fc
-fc0000fc
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-fffffff8
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-7e000000
-7e000000
-7f000000
-3f000000
-3f800000
-1fe00038
-1ff803f8
-0ffffff8
-07fffff8
-01fffff8
-00ffffe0
-000ffc00
->
- ]
-/TT37853b00 AddT3T32Char
-
-10
-/g69 [48 0 6 -47 41 0 ] 
-/g69 [35 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7f000007e0
-ff800007e0
-ffc00007e0
-ffe00007e0
-ffe00007e0
-fff00007e0
-fff00007e0
-fff80007e0
-fdf80007e0
-fdfc0007e0
-fcfc0007e0
-fcfe0007e0
-fc7f0007e0
-fc7f0007e0
-fc3f8007e0
-fc3f8007e0
-fc1fc007e0
-fc1fc007e0
-fc0fe007e0
-fc0fe007e0
-fc07f007e0
-fc03f007e0
-fc03f807e0
-fc01f807e0
-fc01fc07e0
-fc00fe07e0
-fc00fe07e0
-fc007f07e0
-fc007f07e0
-fc003f87e0
-fc003f87e0
-fc001fc7e0
-fc001fc7e0
-fc000fe7e0
-fc0007e7e0
-fc0007f7e0
-fc0003f7e0
-fc0003ffe0
-fc0001ffe0
-fc0001ffe0
-fc0000ffe0
-fc0000ffe0
-fc00007fe0
-fc00007fe0
-fc00003fe0
-fc00001fe0
-fc00000fc0
->
- ]
-/TT37853b00 AddT3T32Char
-
-11
-/g17 [40 0 6 -47 37 0 ] 
-/g17 [31 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffe000
-fffffc00
-ffffff00
-ffffff80
-ffffffc0
-fc007fc0
-fc001fe0
-fc000fe0
-fc0007f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0007e0
-fc0007e0
-fc000fe0
-fc001fc0
-fc007f80
-ffffff00
-fffffc00
-ffffff80
-ffffffc0
-ffffffe0
-fc003ff0
-fc000ff8
-fc0003fc
-fc0001fc
-fc0001fc
-fc0000fe
-fc0000fe
-fc0000fe
-fc0000fe
-fc0000fe
-fc0000fe
-fc0000fe
-fc0001fc
-fc0001fc
-fc0003fc
-fc0007f8
-fc001ff0
-fffffff0
-ffffffc0
-ffffff80
-fffffe00
-7ffff000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-3159 151 M <09>S 
-3193 151 M <0A>S  3236 151 M <0B>S  3273 151 M <07>S  3289 151 M <06>S  3346 151 M <05>S  3385 151 M <02>S  
-7 Lw N 3159 160 M 3421 160 I : 0.66 0.723 +S K 
-; N 1098 412 M 1098 578 I 1174 578 I 1174 412 I 1098 412 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 1174 578 M 1174 412 I 1098 412 I 1098 578 I 1174 578 I C 
-: 0.66 0.723 +S K 
-; N 1816 578 M 1816 1243 I 1892 1243 I 1892 578 I 1816 578 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1892 1243 M 1892 578 I 1816 578 I 1816 1243 I 1892 1243 I C 
-: 0.66 0.723 +S K 
-; N 3252 1409 M 3252 1576 I 3328 1576 I 3328 1409 I 3252 1409 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 3328 1576 M 3328 1409 I 3252 1409 I 3252 1576 I 3328 1576 I C 
-: 0.66 0.723 +S K 
-; N 1816 2241 M 1816 2905 I 1892 2905 I 1892 2241 I 1816 2241 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1892 2905 M 1892 2241 I 1816 2241 I 1816 2905 I 1892 2905 I C 
-: 0.66 0.723 +S K 
-; N 418 412 M 1032 412 I : 0.66 0.723 +S K 
-; N 1098 412 M 1065 432 I 1065 391 I 1098 412 I C 
-1065 432 M 1098 412 I 1065 432 I C 
- O 10 Lw N 1098 412 M 1065 432 I 1065 391 I 1098 412 I : 0.66 0.723 +S K 
-; N 1065 432 M 1098 412 I : 0.66 0.723 +S K 
-; 6 Lw N 1065 412 M 1013 412 I : 0.66 0.723 +S K 
-; N 489 270 M 489 358 I 1028 358 I 1028 270 I 489 270 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-12
-/g100 [36 0 1 -47 35 0 ] 
-/g100 [34 47 true [1 0 0 1 -1 47 ]  0 0]
-[<ffffffffc0
-ffffffffc0
-ffffffffc0
-ffffffffc0
-ffffffffc0
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
-0003f00000
->
- ]
-/TT37853b00 AddT3T32Char
-
-13
-/g396 [26 0 6 -35 25 0 ] 
-/g396 [19 35 true [1 0 0 1 -6 35 ]  0 0]
-[<000fc0
-f83fe0
-f87fe0
-f8ffe0
-f9ffe0
-fbf060
-fbe000
-ffc000
-ff8000
-ff0000
-fe0000
-fe0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
-fc0000
->
- ]
-/TT37853b00 AddT3T32Char
-
-14
-/g258 [35 0 3 -35 30 1 ] 
-/g258 [27 36 true [1 0 0 1 -3 35 ]  0 0]
-[<003fe000
-03fffc00
-0ffffe00
-1fffff80
-3fffff80
-3fc07fc0
-3e001fc0
-38000fc0
-00000fe0
-000007e0
-000007e0
-000007e0
-000007e0
-000007e0
-001fffe0
-01ffffe0
-07ffffe0
-0fffffe0
-3fffffe0
-3fe007e0
-7f8007e0
-7e0007e0
-fe0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc0007e0
-fc000fe0
-fe003fe0
-7f007fe0
-7f81ffe0
-3ffffbe0
-3ffff3e0
-1fffe3e0
-07ff83e0
-01fe0000
->
- ]
-/TT37853b00 AddT3T32Char
-
-15
-/g374 [39 0 6 -35 34 0 ] 
-/g374 [28 35 true [1 0 0 1 -6 35 ]  0 0]
-[<0007f000
-f81ffe00
-f87fff00
-f8ffff80
-f9ffffc0
-fbf83fc0
-ffe01fe0
-ffc00fe0
-ff0007e0
-fe0007f0
-fe0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
->
- ]
-/TT37853b00 AddT3T32Char
-
-16
-/g400 [29 0 3 -35 26 1 ] 
-/g400 [23 36 true [1 0 0 1 -3 35 ]  0 0]
-[<00ff80
-03fff0
-0ffff8
-1ffff8
-1ffff8
-3fc0f8
-3f0018
-7e0000
-7e0000
-7e0000
-7e0000
-7f0000
-7f0000
-3fc000
-3fe000
-1ffc00
-0fff00
-07ffc0
-01fff0
-007ff8
-000ffc
-0003fc
-0001fe
-0000fe
-00007e
-00007e
-00007e
-00007e
-c000fe
-f001fc
-fe03fc
-fffff8
-fffff0
-7fffe0
-1fff80
-03fe00
->
- ]
-/TT37853b00 AddT3T32Char
-
-17
-/g373 [59 0 6 -35 54 0 ] 
-/g373 [48 35 true [1 0 0 1 -6 35 ]  0 0]
-[<0007f0003f80
-f81ffc00ffe0
-f87ffe03fff0
-f8ffff07fff8
-f9ffff8ffffc
-fbf07f9f83fc
-ffe01fff00fe
-ff801ffc00fe
-ff000ff8007e
-fe000ff0007f
-fe0007f0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
-fc0007e0003f
->
- ]
-/TT37853b00 AddT3T32Char
-
-18
-/g349 [17 0 5 -47 12 0 ] 
-/g349 [7 47 true [1 0 0 1 -5 47 ]  0 0]
-[<7c
-fe
-fe
-fe
-fe
-fe
-7c
-00
-00
-00
-00
-00
-00
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
-7e
->
- ]
-/TT37853b00 AddT3T32Char
-
-19
-/g410 [25 0 1 -43 23 1 ] 
-/g410 [22 44 true [1 0 0 1 -1 43 ]  0 0]
-[<03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-fffffc
-fffffc
-fffffc
-fffffc
-fffffc
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f800
-03f800
-01fc1c
-01fffc
-00fffc
-00fffc
-003ffc
-000ff0
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-489 336 M <0C>S 
-522 336 M <0D>S  546 336 M <0E>S  578 336 M <0F>S  614 336 M <10>S  640 336 M <11>S  695 336 M <12>S  710 336 M <13>S  
-T32RsrcBegin
-
-20
-/g890 [37 0 0 9 37 14 ] 
-/g890 [37 5 true [1 0 0 1 0 -9 ]  0 0]
-[<fffffffff8
-fffffffff8
-fffffffff8
-fffffffff8
-fffffffff8
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-732 336 M <14>S 
-765 336 M <01>S 
-802 336 M <01>S  838 336 M <02>S  
-874 336 M <14>S 
-T32RsrcBegin
-
-21
-/g104 [47 0 6 -47 41 1 ] 
-/g104 [35 48 true [1 0 0 1 -6 47 ]  0 0]
-[<fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fc000007e0
-fe00000fc0
-7e00000fc0
-7f00000fc0
-7f00001f80
-3f80003f80
-3fc0007f00
-1fe000ff00
-0ffc07fe00
-07fffffc00
-03fffff800
-01ffffe000
-007fff8000
-000ffc0000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-908 336 M <03>S 
-943 336 M <04>S  985 336 M <15>S  
-N 1174 578 M 1749 578 I : 0.66 0.723 +S K 
-; N 1816 578 M 1784 599 I 1784 558 I 1816 578 I C 
-1784 599 M 1816 578 I 1784 599 I C 
- O 10 Lw N 1816 578 M 1784 599 I 1784 558 I 1816 578 I : 0.66 0.723 +S K 
-; N 1784 599 M 1816 578 I : 0.66 0.723 +S K 
-; 6 Lw N 1784 578 M 1731 578 I : 0.66 0.723 +S K 
-; N 1207 436 M 1207 524 I 1784 524 I 1784 436 I 1207 436 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1207 503 M <0C>S 
-1240 503 M <0D>S  1264 503 M <0E>S  1296 503 M <0F>S  1332 503 M <10>S  1358 503 M <11>S  1412 503 M <12>S  1428 503 M <13>S  
-1449 503 M <14>S 
-1483 503 M <03>S 
-1518 503 M <04>S  1560 503 M <02>S  1595 503 M <03>S  
-1630 503 M <14>S 
-1664 503 M <03>S 
-1699 503 M <04>S  1741 503 M <15>S  
-N 1892 1243 M 2468 1243 I : 0.66 0.723 +S K 
-; N 2534 1243 M 2502 1264 I 2502 1222 I 2534 1243 I C 
-2502 1264 M 2534 1243 I 2502 1264 I C 
- O 10 Lw N 2534 1243 M 2502 1264 I 2502 1222 I 2534 1243 I : 0.66 0.723 +S K 
-; N 2502 1264 M 2534 1243 I : 0.66 0.723 +S K 
-; 6 Lw N 2502 1243 M 2449 1243 I : 0.66 0.723 +S K 
-; N 1915 1101 M 1915 1189 I 2511 1189 I 2511 1101 I 1915 1101 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-22
-/g393 [39 0 6 -35 36 14 ] 
-/g393 [30 49 true [1 0 0 1 -6 35 ]  0 0]
-[<0007f800
-f81ffe00
-f87fff80
-f8ffffc0
-f9ffffe0
-fbf81fe0
-ffe00ff0
-ffc007f0
-ff8003f8
-ff0001f8
-fe0001f8
-fc0001f8
-fc0001fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0001f8
-fc0001f8
-fe0001f8
-ff0003f8
-ff8003f0
-ffc007f0
-ffe00fe0
-fff83fe0
-fdffffc0
-fcffff80
-fc7fff00
-fc3ffc00
-fc0ff000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
->
- ]
-/TT37853b00 AddT3T32Char
-
-23
-/g381 [39 0 3 -35 36 1 ] 
-/g381 [33 36 true [1 0 0 1 -3 35 ]  0 0]
-[<000ffc0000
-007fff8000
-01ffffc000
-03fffff000
-07fffff800
-0ff80ffc00
-1fe003fc00
-1fc000fe00
-3f80007e00
-3f00007f00
-7e00003f00
-7e00003f00
-7e00003f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fc00001f80
-fe00003f00
-7e00003f00
-7e00003f00
-7f00007e00
-3f0000fe00
-3f8001fc00
-1fe003fc00
-1ff80ff800
-0ffffff000
-07ffffe000
-01ffffc000
-00ffff0000
-001ff80000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-1915 1167 M <01>S 
-1952 1167 M <09>S  1985 1167 M <16>S  2021 1167 M <17>S  2057 1167 M <0D>S  2081 1167 M <13>S  
-2103 1167 M <14>S 
-T32RsrcBegin
-
-24
-/g437 [39 0 5 -34 33 1 ] 
-/g437 [28 35 true [1 0 0 1 -5 34 ]  0 0]
-[<fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0007f0
-fe000ff0
-7e001ff0
-7f003ff0
-7f807ff0
-3fc1fdf0
-3ffff9f0
-1ffff1f0
-0fffe1f0
-07ff81f0
-00fe0000
->
- ]
-/TT37853b00 AddT3T32Char
-
-25
-/g296 [23 0 1 -51 23 0 ] 
-/g296 [22 51 true [1 0 0 1 -1 51 ]  0 0]
-[<0007f0
-003ffc
-007ffc
-00fffc
-00fffc
-01fc0c
-01f800
-01f800
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-fffff0
-fffff0
-fffff0
-fffff0
-fffff0
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
-03f000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-2136 1167 M <0B>S 
-2173 1167 M <18>S  2209 1167 M <19>S  2229 1167 M <19>S  2250 1167 M <09>S  2283 1167 M <0D>S  
-2307 1167 M <14>S 
-T32RsrcBegin
-
-26
-/g94 [34 0 3 -48 32 1 ] 
-/g94 [29 49 true [1 0 0 1 -3 48 ]  0 0]
-[<001ff000
-00fffe00
-03ffff80
-07ffffc0
-0fffffc0
-1fe01fc0
-3fc003c0
-3f0000c0
-3f000000
-7e000000
-7e000000
-7e000000
-7e000000
-7e000000
-7f000000
-7f000000
-3f800000
-3fc00000
-3fe00000
-1ff80000
-0ffe0000
-07ffc000
-03fff000
-01fffc00
-007ffe00
-001fff80
-0007ffc0
-0001ffe0
-00007fe0
-00001ff0
-00000ff0
-000007f8
-000007f8
-000003f8
-000003f8
-000003f8
-000003f8
-000003f8
-000003f8
-000007f0
-c00007f0
-f0000fe0
-fc001fe0
-ff80ffc0
-ffffff80
-7fffff00
-3ffffe00
-07fff800
-00ffc000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-2340 1167 M <1A>S 
-2371 1167 M <13>S  2394 1167 M <0E>S  2426 1167 M <13>S  2449 1167 M <18>S  2484 1167 M <10>S  
-N 1892 2905 M 2468 2905 I : 0.66 0.723 +S K 
-; N 2534 2905 M 2502 2926 I 2502 2885 I 2534 2905 I C 
-2502 2926 M 2534 2905 I 2502 2926 I C 
- O 10 Lw N 2534 2905 M 2502 2926 I 2502 2885 I 2534 2905 I : 0.66 0.723 +S K 
-; N 2502 2926 M 2534 2905 I : 0.66 0.723 +S K 
-; 6 Lw N 2502 2905 M 2449 2905 I : 0.66 0.723 +S K 
-; N 1843 2764 M 1843 2852 I 2583 2852 I 2583 2764 I 1843 2764 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 1843 2830 M <0C>S 
-1876 2830 M <0D>S  1900 2830 M <0E>S  1933 2830 M <0F>S  1968 2830 M <10>S  1995 2830 M <11>S  2049 2830 M <12>S  2064 2830 M <13>S  
-2086 2830 M <14>S 
-2120 2830 M <03>S 
-2155 2830 M <04>S  2196 2830 M <15>S  2240 2830 M <07>S  
-T32RsrcBegin
-
-27
-/g894 [22 0 5 -51 18 12 ] 
-/g894 [13 63 true [1 0 0 1 -5 51 ]  0 0]
-[<00f8
-00f8
-01f8
-01f0
-03f0
-03e0
-07e0
-07e0
-07c0
-0fc0
-0f80
-1f80
-1f80
-1f80
-3f00
-3f00
-3f00
-3f00
-7e00
-7e00
-7e00
-7e00
-7e00
-7e00
-fe00
-fe00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fc00
-fe00
-fe00
-7e00
-7e00
-7e00
-7e00
-7e00
-7f00
-3f00
-3f00
-3f00
-3f00
-1f80
-1f80
-1f80
-0fc0
-0fc0
-0fc0
-07e0
-07e0
-03e0
-03f0
-01f0
-01f8
-00f8
-00f8
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-2254 2830 M <1B>S 
-2275 2830 M <04>S 
-2317 2830 M <05>S  2356 2830 M <0C>S  2389 2830 M <05>S  2428 2830 M <07>S  2443 2830 M <03>S  2478 2830 M <04>S  2519 2830 M <15>S  
-T32RsrcBegin
-
-28
-/g895 [22 0 5 -51 18 12 ] 
-/g895 [13 63 true [1 0 0 1 -5 51 ]  0 0]
-[<f800
-f800
-fc00
-7c00
-7e00
-3e00
-3f00
-3f00
-1f80
-1f80
-0f80
-0fc0
-0fc0
-0fc0
-07e0
-07e0
-07e0
-07e0
-03f0
-03f0
-03f0
-03f0
-03f0
-03f0
-03f8
-03f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-01f8
-03f8
-03f8
-03f0
-03f0
-03f0
-03f0
-03f0
-03f0
-07e0
-07e0
-07e0
-07e0
-0fc0
-0fc0
-0fc0
-1f80
-1f80
-1f80
-3f00
-3f00
-3e00
-7e00
-7c00
-fc00
-f800
-f800
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-2562 2830 M <1C>S 
-1 Lw solid N 4006 3256 M 4006 3225 I 4006 3223 I 4008 3223 I 4009 3223 I 4010 3225 I 4010 3256 I 4009 3257 I 4008 3258 I 4006 3257 I 4006 3256 I 4006 3256 I C 
-4006 3203 M 4006 3172 I 4006 3171 I 4008 3170 I 4009 3171 I 4010 3172 I 4010 3203 I 4009 3205 I 4008 3205 I 4006 3205 I 4006 3203 I 4006 3203 I C 
-4006 3150 M 4006 3119 I 4006 3117 I 4008 3116 I 4009 3117 I 4010 3119 I 4010 3150 I 4009 3151 I 4008 3152 I 4006 3151 I 4006 3150 I 4006 3150 I C 
-4006 3097 M 4006 3066 I 4006 3064 I 4008 3064 I 4009 3064 I 4010 3066 I 4010 3097 I 4009 3098 I 4008 3099 I 4006 3098 I 4006 3097 I 4006 3097 I C 
-4006 3043 M 4006 3012 I 4006 3011 I 4008 3010 I 4009 3011 I 4010 3012 I 4010 3043 I 4009 3045 I 4008 3046 I 4006 3045 I 4006 3043 I 4006 3043 I C 
-4006 2990 M 4006 2959 I 4006 2957 I 4008 2957 I 4009 2957 I 4010 2959 I 4010 2990 I 4009 2992 I 4008 2992 I 4006 2992 I 4006 2990 I 4006 2990 I C 
-4006 2937 M 4006 2906 I 4006 2905 I 4008 2904 I 4009 2905 I 4010 2906 I 4010 2937 I 4009 2939 I 4008 2939 I 4006 2939 I 4006 2937 I 4006 2937 I C 
-4006 2884 M 4006 2853 I 4006 2851 I 4008 2850 I 4009 2851 I 4010 2853 I 4010 2884 I 4009 2885 I 4008 2886 I 4006 2885 I 4006 2884 I 4006 2884 I C 
-4006 2831 M 4006 2800 I 4006 2798 I 4008 2798 I 4009 2798 I 4010 2800 I 4010 2831 I 4009 2832 I 4008 2833 I 4006 2832 I 4006 2831 I 4006 2831 I C 
-4006 2777 M 4006 2746 I 4006 2745 I 4008 2744 I 4009 2745 I 4010 2746 I 4010 2777 I 4009 2779 I 4008 2780 I 4006 2779 I 4006 2777 I 4006 2777 I C 
-4006 2725 M 4006 2693 I 4006 2692 I 4008 2691 I 4009 2692 I 4010 2693 I 4010 2725 I 4009 2726 I 4008 2727 I 4006 2726 I 4006 2725 I 4006 2725 I C 
-4006 2671 M 4006 2640 I 4006 2639 I 4008 2638 I 4009 2639 I 4010 2640 I 4010 2671 I 4009 2672 I 4008 2673 I 4006 2672 I 4006 2671 I 4006 2671 I C 
-4006 2618 M 4006 2586 I 4006 2585 I 4008 2584 I 4009 2585 I 4010 2586 I 4010 2618 I 4009 2620 I 4008 2620 I 4006 2620 I 4006 2618 I 4006 2618 I C 
-4006 2565 M 4006 2534 I 4006 2532 I 4008 2531 I 4009 2532 I 4010 2534 I 4010 2565 I 4009 2566 I 4008 2567 I 4006 2566 I 4006 2565 I 4006 2565 I C 
-4006 2511 M 4006 2480 I 4006 2479 I 4008 2478 I 4009 2479 I 4010 2480 I 4010 2511 I 4009 2513 I 4008 2513 I 4006 2513 I 4006 2511 I 4006 2511 I C 
-4006 2458 M 4006 2427 I 4006 2426 I 4008 2425 I 4009 2426 I 4010 2427 I 4010 2458 I 4009 2460 I 4008 2461 I 4006 2460 I 4006 2458 I 4006 2458 I C 
-4006 2405 M 4006 2374 I 4006 2372 I 4008 2372 I 4009 2372 I 4010 2374 I 4010 2405 I 4009 2406 I 4008 2407 I 4006 2406 I 4006 2405 I 4006 2405 I C 
-4006 2352 M 4006 2321 I 4006 2320 I 4008 2319 I 4009 2320 I 4010 2321 I 4010 2352 I 4009 2354 I 4008 2354 I 4006 2354 I 4006 2352 I 4006 2352 I C 
-4006 2299 M 4006 2268 I 4006 2266 I 4008 2265 I 4009 2266 I 4010 2268 I 4010 2299 I 4009 2300 I 4008 2301 I 4006 2300 I 4006 2299 I 4006 2299 I C 
-4006 2245 M 4006 2214 I 4006 2213 I 4008 2212 I 4009 2213 I 4010 2214 I 4010 2245 I 4009 2247 I 4008 2247 I 4006 2247 I 4006 2245 I 4006 2245 I C 
-4006 2192 M 4006 2161 I 4006 2160 I 4008 2159 I 4009 2160 I 4010 2161 I 4010 2192 I 4009 2194 I 4008 2195 I 4006 2194 I 4006 2192 I 4006 2192 I C 
-4006 2139 M 4006 2108 I 4006 2106 I 4008 2106 I 4009 2106 I 4010 2108 I 4010 2139 I 4009 2140 I 4008 2141 I 4006 2140 I 4006 2139 I 4006 2139 I C 
-4006 2086 M 4006 2055 I 4006 2054 I 4008 2053 I 4009 2054 I 4010 2055 I 4010 2086 I 4009 2088 I 4008 2088 I 4006 2088 I 4006 2086 I 4006 2086 I C 
-4006 2033 M 4006 2001 I 4006 2000 I 4008 1999 I 4009 2000 I 4010 2001 I 4010 2033 I 4009 2034 I 4008 2035 I 4006 2034 I 4006 2033 I 4006 2033 I C 
-4006 1979 M 4006 1949 I 4006 1947 I 4008 1947 I 4009 1947 I 4010 1949 I 4010 1979 I 4009 1981 I 4008 1982 I 4006 1981 I 4006 1979 I 4006 1979 I C 
-4006 1926 M 4006 1895 I 4006 1894 I 4008 1893 I 4009 1894 I 4010 1895 I 4010 1926 I 4009 1928 I 4008 1928 I 4006 1928 I 4006 1926 I 4006 1926 I C 
-4006 1873 M 4006 1842 I 4006 1840 I 4008 1840 I 4009 1840 I 4010 1842 I 4010 1873 I 4009 1875 I 4008 1875 I 4006 1875 I 4006 1873 I 4006 1873 I C 
-4006 1820 M 4006 1789 I 4006 1787 I 4008 1787 I 4009 1787 I 4010 1789 I 4010 1820 I 4009 1821 I 4008 1822 I 4006 1821 I 4006 1820 I 4006 1820 I C 
-4006 1766 M 4006 1735 I 4006 1734 I 4008 1733 I 4009 1734 I 4010 1735 I 4010 1766 I 4009 1768 I 4008 1769 I 4006 1768 I 4006 1766 I 4006 1766 I C 
-4006 1714 M 4006 1683 I 4006 1681 I 4008 1680 I 4009 1681 I 4010 1683 I 4010 1714 I 4009 1715 I 4008 1716 I 4006 1715 I 4006 1714 I 4006 1714 I C 
-4006 1660 M 4006 1629 I 4006 1628 I 4008 1627 I 4009 1628 I 4010 1629 I 4010 1660 I 4009 1662 I 4008 1662 I 4006 1662 I 4006 1660 I 4006 1660 I C 
-4006 1607 M 4006 1576 I 4006 1575 I 4008 1574 I 4009 1575 I 4010 1576 I 4010 1607 I 4009 1609 I 4008 1610 I 4006 1609 I 4006 1607 I 4006 1607 I C 
-4006 1554 M 4006 1523 I 4006 1521 I 4008 1521 I 4009 1521 I 4010 1523 I 4010 1554 I 4009 1555 I 4008 1556 I 4006 1555 I 4006 1554 I 4006 1554 I C 
-4006 1500 M 4006 1469 I 4006 1468 I 4008 1467 I 4009 1468 I 4010 1469 I 4010 1500 I 4009 1503 I 4008 1503 I 4006 1503 I 4006 1500 I 4006 1500 I C 
-4006 1448 M 4006 1417 I 4006 1415 I 4008 1414 I 4009 1415 I 4010 1417 I 4010 1448 I 4009 1449 I 4008 1450 I 4006 1449 I 4006 1448 I 4006 1448 I C 
-4006 1394 M 4006 1363 I 4006 1362 I 4008 1361 I 4009 1362 I 4010 1363 I 4010 1394 I 4009 1396 I 4008 1396 I 4006 1396 I 4006 1394 I 4006 1394 I C 
-4006 1341 M 4006 1310 I 4006 1309 I 4008 1308 I 4009 1309 I 4010 1310 I 4010 1341 I 4009 1343 I 4008 1343 I 4006 1343 I 4006 1341 I 4006 1341 I C 
-4006 1288 M 4006 1257 I 4006 1255 I 4008 1255 I 4009 1255 I 4010 1257 I 4010 1288 I 4009 1289 I 4008 1290 I 4006 1289 I 4006 1288 I 4006 1288 I C 
-4006 1234 M 4006 1204 I 4006 1202 I 4008 1201 I 4009 1202 I 4010 1204 I 4010 1234 I 4009 1236 I 4008 1237 I 4006 1236 I 4006 1234 I 4006 1234 I C 
-4006 1182 M 4006 1150 I 4006 1149 I 4008 1148 I 4009 1149 I 4010 1150 I 4010 1182 I 4009 1183 I 4008 1184 I 4006 1183 I 4006 1182 I 4006 1182 I C 
-4006 1128 M 4006 1097 I 4006 1095 I 4008 1095 I 4009 1095 I 4010 1097 I 4010 1128 I 4009 1130 I 4008 1130 I 4006 1130 I 4006 1128 I 4006 1128 I C 
-4006 1075 M 4006 1044 I 4006 1043 I 4008 1042 I 4009 1043 I 4010 1044 I 4010 1075 I 4009 1077 I 4008 1077 I 4006 1077 I 4006 1075 I 4006 1075 I C 
-4006 1022 M 4006 991 I 4006 989 I 4008 988 I 4009 989 I 4010 991 I 4010 1022 I 4009 1023 I 4008 1024 I 4006 1023 I 4006 1022 I 4006 1022 I C 
-4006 969 M 4006 938 I 4006 936 I 4008 936 I 4009 936 I 4010 938 I 4010 969 I 4009 970 I 4008 971 I 4006 970 I 4006 969 I 4006 969 I C 
-4006 915 M 4006 884 I 4006 883 I 4008 882 I 4009 883 I 4010 884 I 4010 915 I 4009 917 I 4008 918 I 4006 917 I 4006 915 I 4006 915 I C 
-4006 862 M 4006 832 I 4006 829 I 4008 829 I 4009 829 I 4010 832 I 4010 862 I 4009 864 I 4008 865 I 4006 864 I 4006 862 I 4006 862 I C 
-4006 809 M 4006 778 I 4006 777 I 4008 776 I 4009 777 I 4010 778 I 4010 809 I 4009 811 I 4008 811 I 4006 811 I 4006 809 I 4006 809 I C 
-4006 756 M 4006 725 I 4006 723 I 4008 722 I 4009 723 I 4010 725 I 4010 756 I 4009 758 I 4008 758 I 4006 758 I 4006 756 I 4006 756 I C 
-4006 703 M 4006 672 I 4006 670 I 4008 670 I 4009 670 I 4010 672 I 4010 703 I 4009 704 I 4008 705 I 4006 704 I 4006 703 I 4006 703 I C 
-4006 649 M 4006 618 I 4006 617 I 4008 616 I 4009 617 I 4010 618 I 4010 649 I 4009 651 I 4008 652 I 4006 651 I 4006 649 I 4006 649 I C 
-4006 597 M 4006 565 I 4006 564 I 4008 563 I 4009 564 I 4010 565 I 4010 597 I 4009 598 I 4008 599 I 4006 598 I 4006 597 I 4006 597 I C 
-4006 543 M 4006 512 I 4006 511 I 4008 510 I 4009 511 I 4010 512 I 4010 543 I 4009 545 I 4008 545 I 4006 545 I 4006 543 I 4006 543 I C 
-4006 490 M 4006 459 I 4006 457 I 4008 456 I 4009 457 I 4010 459 I 4010 490 I 4009 492 I 4008 492 I 4006 492 I 4006 490 I 4006 490 I C 
-4006 437 M 4006 406 I 4006 404 I 4008 404 I 4009 404 I 4010 406 I 4010 437 I 4009 438 I 4008 439 I 4006 438 I 4006 437 I 4006 437 I C 
-4006 383 M 4006 352 I 4006 351 I 4008 350 I 4009 351 I 4010 352 I 4010 383 I 4009 385 I 4008 385 I 4006 385 I 4006 383 I 4006 383 I C 
-4006 330 M 4006 299 I 4006 298 I 4008 297 I 4009 298 I 4010 299 I 4010 330 I 4009 332 I 4008 333 I 4006 332 I 4006 330 I 4006 330 I C 
-4006 277 M 4006 246 I 4006 244 I 4008 244 I 4009 244 I 4010 246 I 4010 277 I 4009 278 I 4008 279 I 4006 278 I 4006 277 I 4006 277 I C 
-:  L ; K 
-N 3780 12 M 3780 246 I 4235 246 I 4235 12 I 3780 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 3780 246 M 4235 246 I 4235 12 I 3780 12 I 3780 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-29
-/g272 [31 0 3 -35 29 1 ] 
-/g272 [26 36 true [1 0 0 1 -3 35 ]  0 0]
-[<001fe000
-00fffc00
-01ffff00
-07ffff80
-0fffffc0
-0ff01fc0
-1fc007c0
-3f8003c0
-3f000080
-7f000000
-7e000000
-7e000000
-7e000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fe000000
-7e000000
-7e000000
-7f000000
-3f0000c0
-3f8001c0
-3fc007c0
-1ff01fc0
-0fffffc0
-07ffff80
-03ffff00
-00fffc00
-003fe000
->
- ]
-/TT37853b00 AddT3T32Char
-
-30
-/g346 [39 0 6 -50 34 0 ] 
-/g346 [28 50 true [1 0 0 1 -6 50 ]  0 0]
-[<fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc07f000
-fc1ffe00
-fc7fff00
-fcffff80
-fdffffc0
-fff83fc0
-ffe01fe0
-ffc00fe0
-ff0007e0
-fe0007f0
-fe0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
-fc0003f0
->
- ]
-/TT37853b00 AddT3T32Char
-
-31
-/g282 [39 0 3 -50 33 1 ] 
-/g282 [30 51 true [1 0 0 1 -3 50 ]  0 0]
-[<000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-003f80fc
-00fff0fc
-03fff8fc
-07fffcfc
-0ffffffc
-1ff07ffc
-1fc01ffc
-3f800ffc
-3f0007fc
-7f0003fc
-7e0001fc
-7e0000fc
-7e0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fe0000fc
-7e0000fc
-7e0001fc
-7f0003fc
-7f0007fc
-3f800ffc
-3fc01ffc
-1fe07f7c
-0ffffe7c
-0ffffc7c
-07fff87c
-01ffe07c
-007f8000
->
- ]
-/TT37853b00 AddT3T32Char
-
-32
-/g367 [17 0 6 -50 12 0 ] 
-/g367 [6 50 true [1 0 0 1 -6 50 ]  0 0]
-[<fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-3872 151 M <1A>S 
-3903 151 M <1D>S  3931 151 M <1E>S  3967 151 M <09>S  4001 151 M <1F>S  4036 151 M <18>S  4072 151 M ( )S  4087 151 M <09>S  4121 151 M <0D>S  
-7 Lw N 3872 160 M 4144 160 I : 0.66 0.723 +S K 
-; N 3970 1576 M 3970 1908 I 4046 1908 I 4046 1576 I 3970 1576 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 4046 1908 M 4046 1576 I 3970 1576 I 3970 1908 I 4046 1908 I C 
-: 0.66 0.723 +S K 
-; N 3252 1908 M 3252 2075 I 3328 2075 I 3328 1908 I 3252 1908 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 3328 2075 M 3328 1908 I 3252 1908 I 3252 2075 I 3328 2075 I C 
-: 0.66 0.723 +S K 
-; N 3328 1576 M 3903 1576 I : 0.66 0.723 +S K 
-; N 3970 1576 M 3937 1597 I 3937 1555 I 3970 1576 I C 
-3937 1597 M 3970 1576 I 3937 1597 I C 
- O 10 Lw N 3970 1576 M 3937 1597 I 3937 1555 I 3970 1576 I : 0.66 0.723 +S K 
-; N 3937 1597 M 3970 1576 I : 0.66 0.723 +S K 
-; 6 Lw N 3937 1576 M 3884 1576 I : 0.66 0.723 +S K 
-; N 3389 1433 M 3389 1522 I 3909 1522 I 3909 1433 I 3389 1433 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-33
-/g336 [35 0 2 -35 33 14 ] 
-/g336 [31 49 true [1 0 0 1 -2 35 ]  0 0]
-[<001fc000
-00fffffe
-03fffffe
-07fffffe
-0ffffffe
-0ff07ffe
-1fc01f80
-1f800fc0
-3f800fc0
-3f0007e0
-3f0007e0
-3f0007e0
-3f0007e0
-3f0007e0
-3f800fe0
-1f800fc0
-1fc01fc0
-0ff07fc0
-0fffff80
-0fffff00
-1ffffe00
-3ffff800
-3e1fe000
-7c000000
-7c000000
-7c000000
-7e000000
-7f000000
-7ffff800
-3fffff80
-1fffffe0
-0ffffff8
-0ffffff8
-1f8007fc
-3f0001fe
-7e0000fe
-7e00007e
-fc00007e
-fc00007e
-fc00007e
-fc0000fe
-fe0000fc
-ff0003fc
-7fc00ff8
-7ffffff0
-3fffffe0
-0fffffc0
-07ffff00
-007ff000
->
- ]
-/TT37853b00 AddT3T32Char
-
-34
-/g395 [39 0 3 -35 33 14 ] 
-/g395 [30 49 true [1 0 0 1 -3 35 ]  0 0]
-[<003f8000
-00fff07c
-03fff87c
-07fffc7c
-0fffff7c
-1ff07ffc
-1fc01ffc
-3f800ffc
-3f0007fc
-7f0003fc
-7e0001fc
-7e0000fc
-7e0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fc0000fc
-fe0000fc
-7e0000fc
-7e0001fc
-7f0003fc
-7f0007fc
-3f800ffc
-3fc01ffc
-1fe07ffc
-0ffffefc
-0ffffcfc
-07fff8fc
-01ffe0fc
-007f80fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
-000000fc
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-3389 1500 M <1A>S 
-3420 1500 M <1D>S  3448 1500 M <1E>S  3484 1500 M <09>S  3517 1500 M <1F>S  3553 1500 M <15>S  3597 1500 M ( )S  3612 1500 M <0C>S  3645 1500 M <0D>S  3669 1500 M <12>S  3684 1500 M (!)S  3716 1500 M (!)S  3747 1500 M <09>S  3781 1500 M <0D>S  3805 1500 M <01>S  3841 1500 M <09>S  3875 1500 M (")S 
-
-N 1531 730 M 1531 992 I 2249 992 I 2249 730 I 1531 730 I C 
- O N 1531 992 M 2249 992 I 2249 730 I 1531 730 I 1531 992 I : 0.66 0.723 +S K 
-; N 1507 704 M 1507 965 I 2225 965 I 2225 704 I 1507 704 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1507 965 M 2225 965 I 2225 704 I 1507 704 I 1507 965 I C 
-: 0.66 0.723 +S K 
-; /TT37854b00
-[55 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 55 div 0 0 -1 55 div 0 0 ]
-/__TT37854b00
-GreNewFont
-T32RsrcBegin
-
-1
-/g87 [29 0 5 -35 27 0 ] 
-/g87 [22 35 true [1 0 0 1 -5 35 ]  0 0]
-[<7ffc00
-ffff80
-ffffc0
-fffff0
-f807f0
-f801f8
-f800f8
-f800fc
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f800f8
-f801f8
-f803f0
-f807f0
-ffffe0
-ffffc0
-ffff00
-fffc00
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
->
- ]
-/TT37854b00 AddT3T32Char
-
-2
-/g437 [29 0 4 -26 25 1 ] 
-/g437 [21 27 true [1 0 0 1 -4 26 ]  0 0]
-[<f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f801f8
-fc03f8
-7c07f8
-7f0ff8
-3ffef8
-3ffcf8
-1ff878
-07e000
->
- ]
-/TT37854b00 AddT3T32Char
-
-3
-/g410 [19 0 1 -33 17 1 ] 
-/g410 [16 34 true [1 0 0 1 -1 33 ]  0 0]
-[<0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-ffff
-ffff
-ffff
-ffff
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0f80
-0fc0
-0fc1
-07ff
-07ff
-03ff
-00fe
->
- ]
-/TT37854b00 AddT3T32Char
-
-4
-/g3 [13 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT37854b00 AddT3T32Char
-
-5
-/g90 [30 0 5 -35 29 0 ] 
-/g90 [24 35 true [1 0 0 1 -5 35 ]  0 0]
-[<fffe00
-ffff80
-ffffe0
-fffff0
-f807f8
-f801f8
-f800fc
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f8007c
-f800f8
-f801f8
-f807f0
-ffffe0
-ffff80
-fffe00
-ffff80
-f81fc0
-f807e0
-f803e0
-f803f0
-f801f0
-f801f8
-f800f8
-f800f8
-f8007c
-f8007c
-f8003e
-f8003e
-f8003f
-f8001f
-f8001f
->
- ]
-/TT37854b00 AddT3T32Char
-
-6
-/g62 [24 0 5 -35 23 0 ] 
-/g62 [18 35 true [1 0 0 1 -5 35 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-ffffc0
-ffffc0
-ffffc0
-ffffc0
->
- ]
-/TT37854b00 AddT3T32Char
-
-7
-/g18 [30 0 3 -36 28 1 ] 
-/g18 [25 37 true [1 0 0 1 -3 36 ]  0 0]
-[<001fe000
-007ffc00
-01ffff00
-03ffff80
-07f01f80
-0fc00780
-1f800180
-1f000000
-3e000000
-3e000000
-7c000000
-7c000000
-7c000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-fc000000
-7c000000
-7c000000
-7e000000
-3e000000
-3f000000
-1f800180
-1fc00780
-0ff01f80
-07ffff80
-03ffff00
-00fffc00
-001fe000
->
- ]
-/TT37854b00 AddT3T32Char
-
-8
-/g94 [26 0 2 -36 24 1 ] 
-/g94 [22 37 true [1 0 0 1 -2 36 ]  0 0]
-[<00fe00
-07ffc0
-0fffe0
-1ffff0
-3f81f0
-3e0070
-7e0030
-7c0000
-7c0000
-7c0000
-7c0000
-7e0000
-7e0000
-3f8000
-3fc000
-1ff000
-0ffc00
-07ff00
-01ffc0
-007fe0
-001ff0
-0007f8
-0001f8
-0000fc
-0000fc
-00007c
-00007c
-00007c
-00007c
-0000fc
-c000f8
-f001f8
-fc07f0
-ffffe0
-7fffc0
-1fff80
-03fc00
->
- ]
-/TT37854b00 AddT3T32Char
-
-9
-/g24 [34 0 5 -35 32 0 ] 
-/g24 [27 35 true [1 0 0 1 -5 35 ]  0 0]
-[<fffe0000
-ffffc000
-fffff000
-fffffc00
-f803fe00
-f800fe00
-f8003f00
-f8001f80
-f8000f80
-f8000fc0
-f80007c0
-f80007c0
-f80007e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80007c0
-f80007c0
-f80007c0
-f8000fc0
-f8000f80
-f8001f80
-f8003f00
-f8007e00
-f803fc00
-fffff800
-fffff000
-ffffc000
-fffe0000
->
- ]
-/TT37854b00 AddT3T32Char
-
-10
-/g104 [36 0 5 -35 32 1 ] 
-/g104 [27 36 true [1 0 0 1 -5 35 ]  0 0]
-[<f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-f80003e0
-fc0007e0
-7c0007c0
-7e0007c0
-7e000f80
-3f001f80
-1fc07f00
-1ffffe00
-07fffc00
-03fff000
-007fc000
->
- ]
-/TT37854b00 AddT3T32Char
-T32RsrcEnd
-F /F1 0 /0 F /TT37854b00 mF 
-/F1S37 F1 [55.727 0 0 -55.727 0 0 ] mFS
-F1S37 Ji 
-1738 818 M <01>S 
-1765 818 M <02>S  1791 818 M <03>S  1808 818 M <04>S  1820 818 M <05>S  1847 818 M <06>S  1868 818 M <07>S  1896 818 M <04>S  1907 818 M <08>S  1930 818 M <09>S  1961 818 M <0A>S  
-T32RsrcBegin
-
-11
-/g349 [13 0 3 -36 9 0 ] 
-/g349 [6 36 true [1 0 0 1 -3 36 ]  0 0]
-[<78
-fc
-fc
-fc
-78
-00
-00
-00
-00
-00
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
-7c
->
- ]
-/TT37854b00 AddT3T32Char
-
-12
-/g374 [29 0 4 -27 25 0 ] 
-/g374 [21 27 true [1 0 0 1 -4 27 ]  0 0]
-[<003f00
-f0ffc0
-f9ffe0
-fbffe0
-ff87f0
-ff01f0
-fe01f8
-fc00f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
->
- ]
-/TT37854b00 AddT3T32Char
-
-13
-/g346 [29 0 4 -38 25 0 ] 
-/g346 [21 38 true [1 0 0 1 -4 38 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f83f00
-f8ffc0
-f9ffe0
-fbffe0
-ff87f0
-ff01f0
-fe01f8
-fc00f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
-f800f8
->
- ]
-/TT37854b00 AddT3T32Char
-
-14
-/g286 [28 0 3 -27 26 1 ] 
-/g286 [23 28 true [1 0 0 1 -3 27 ]  0 0]
-[<00ff00
-03ffc0
-07ffe0
-1ffff0
-1f81f8
-3e00fc
-3c007c
-7c007c
-78003e
-f8003e
-f8003e
-fffffe
-fffffe
-fffffe
-fffffe
-f80000
-f80000
-f80000
-f80000
-7c0000
-7c0000
-7e0000
-3f000c
-3fc07c
-1ffffc
-0ffffc
-03fff0
-00ff80
->
- ]
-/TT37854b00 AddT3T32Char
-T32RsrcEnd
-1598 884 M <0B>S 
-1610 884 M <0C>S  1636 884 M <04>S  1648 884 M <03>S  1665 884 M <0D>S  1691 884 M <0E>S  1716 884 M <04>S  
-/TT37855b00
-[55 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 55 div 0 0 -1 55 div 0 0 ]
-/__TT37855b00
-GreNewFont
-T32RsrcBegin
-
-1
-/g100 [27 0 4 -35 31 0 ] 
-/g100 [27 35 true [1 0 0 1 -4 35 ]  0 0]
-[<7fffffe0
-ffffffe0
-ffffffc0
-ffffffc0
-001f0000
-001e0000
-001e0000
-003e0000
-003e0000
-003e0000
-003c0000
-003c0000
-007c0000
-007c0000
-007c0000
-00780000
-00780000
-00f80000
-00f80000
-00f80000
-00f00000
-00f00000
-01f00000
-01f00000
-01f00000
-01e00000
-01e00000
-03e00000
-03e00000
-03e00000
-03c00000
-03c00000
-07c00000
-07c00000
-07c00000
->
- ]
-/TT37855b00 AddT3T32Char
-
-2
-/g396 [19 0 2 -27 21 0 ] 
-/g396 [19 27 true [1 0 0 1 -2 27 ]  0 0]
-[<0007e0
-078fe0
-079fe0
-073fe0
-0f7840
-0ff000
-0fe000
-0fc000
-0f8000
-1f8000
-1f0000
-1f0000
-1f0000
-1e0000
-3e0000
-3e0000
-3e0000
-3c0000
-3c0000
-7c0000
-7c0000
-7c0000
-780000
-780000
-f80000
-f80000
-f00000
->
- ]
-/TT37855b00 AddT3T32Char
-
-3
-/g258 [29 0 2 -27 27 1 ] 
-/g258 [25 28 true [1 0 0 1 -2 27 ]  0 0]
-[<003f0000
-00ffc780
-01ffe780
-07fff780
-07e0ff00
-0fc07f00
-1f803f00
-1f001f00
-3e001f00
-3e001e00
-7c001e00
-7c003e00
-7c003e00
-7c003e00
-f8003c00
-f8007c00
-f8007c00
-f8007c00
-f800fc00
-f801f800
-f801f800
-f803f800
-fc077800
-7e1f7800
-7ffef000
-3ffcf000
-1ff0f000
-0fc00000
->
- ]
-/TT37855b00 AddT3T32Char
-
-4
-/g374 [29 0 2 -27 26 0 ] 
-/g374 [24 27 true [1 0 0 1 -2 27 ]  0 0]
-[<0001f0
-0787fc
-079ffe
-07bffe
-0f7c3f
-0ff01f
-0fe01f
-0fc01f
-0fc01f
-1f801f
-1f001f
-1f001e
-1f001e
-1e001e
-3e003e
-3e003e
-3e003c
-3c003c
-3c003c
-7c007c
-7c007c
-780078
-780078
-780078
-f800f8
-f800f8
-f000f0
->
- ]
-/TT37855b00 AddT3T32Char
-
-5
-/g400 [22 0 0 -27 20 1 ] 
-/g400 [20 28 true [1 0 0 1 0 27 ]  0 0]
-[<003f80
-00fff0
-01fff0
-03fff0
-07e0f0
-07c030
-0f8000
-0f8000
-0f8000
-0f8000
-0fc000
-07f000
-07fc00
-03fe00
-01ff00
-007f80
-001fc0
-000fc0
-0007c0
-0007c0
-0007c0
-0007c0
-400f80
-f81f80
-ffff00
-fffe00
-7ffc00
-0fe000
->
- ]
-/TT37855b00 AddT3T32Char
-
-6
-/g373 [44 0 2 -27 41 0 ] 
-/g373 [39 27 true [1 0 0 1 -2 27 ]  0 0]
-[<0003f003f0
-078ffc0ff8
-079ffe1ffc
-07bffe3ffc
-0f7c3e7c7e
-0ff01ff03e
-0fe01fe03e
-0fc01fc03e
-0fc01f803e
-1f801f803e
-1f001f003e
-1f001f003c
-1e001e003c
-1e001e003c
-3e003e003c
-3e003e007c
-3e003c007c
-3c003c007c
-3c003c007c
-7c007c0078
-7c007c0078
-7800780078
-78007800f8
-78007800f8
-f800f800f8
-f800f800f8
-f000f000f0
->
- ]
-/TT37855b00 AddT3T32Char
-
-7
-/g349 [13 0 2 -36 14 0 ] 
-/g349 [12 36 true [1 0 0 1 -2 36 ]  0 0]
-[<01f0
-03f0
-03f0
-03f0
-03e0
-0000
-0000
-0000
-0000
-0000
-0780
-0780
-0780
-0f80
-0f80
-0f80
-0f00
-0f00
-1f00
-1f00
-1f00
-1e00
-1e00
-3e00
-3e00
-3e00
-3c00
-3c00
-7c00
-7c00
-7800
-7800
-7800
-f800
-f800
-f000
->
- ]
-/TT37855b00 AddT3T32Char
-
-8
-/g381 [29 0 2 -27 27 1 ] 
-/g381 [25 28 true [1 0 0 1 -2 27 ]  0 0]
-[<001fe000
-007ff800
-01fffe00
-03fffe00
-07f07f00
-0fc01f00
-1f801f80
-1f000f80
-3e000f80
-3e000f80
-7c000f80
-7c000f80
-7c000f80
-f8000f80
-f8000f80
-f8001f00
-f8001f00
-f8001f00
-f8003e00
-f8003e00
-f8007c00
-fc00fc00
-7c01f800
-7f07f000
-3fffe000
-3fffc000
-0fff0000
-03fc0000
->
- ]
-/TT37855b00 AddT3T32Char
-
-9
-/g3 [13 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT37855b00 AddT3T32Char
-
-10
-/g17 [30 0 3 -35 29 0 ] 
-/g17 [26 35 true [1 0 0 1 -3 35 ]  0 0]
-[<01fff800
-03fffe00
-03ffff00
-03ffff80
-03c01fc0
-07c00fc0
-07c007c0
-078007c0
-078007c0
-078007c0
-0f800f80
-0f800f80
-0f001f00
-0f003f00
-0f00fc00
-1ffff800
-1ffff000
-1ffffc00
-1ffffe00
-1e007f00
-3e001f80
-3e000f80
-3c000f80
-3c000f80
-3c000f80
-7c000f80
-7c001f00
-7c001f00
-78003f00
-78007e00
-7801fc00
-fffff800
-fffff000
-ffffc000
-fffe0000
->
- ]
-/TT37855b00 AddT3T32Char
-
-11
-/g437 [29 0 4 -26 28 1 ] 
-/g437 [24 27 true [1 0 0 1 -4 26 ]  0 0]
-[<1e001e
-1e001e
-1e001e
-3e003e
-3e003e
-3e003e
-3c003c
-3c003c
-7c003c
-7c007c
-7c007c
-780078
-780078
-7800f8
-f800f8
-f800f8
-f001f0
-f001f0
-f003f0
-f007f0
-f00ff0
-f81fe0
-f87de0
-fff9e0
-7ff1e0
-7fe1e0
-1f8000
->
- ]
-/TT37855b00 AddT3T32Char
-
-12
-/g296 [17 0 -5 -39 23 10 ] 
-/g296 [28 49 true [1 0 0 1 5 39 ]  0 0]
-[<00000fe0
-00003ff0
-00007ff0
-0000fff0
-0000f820
-0001f000
-0001e000
-0003e000
-0003c000
-0003c000
-0003c000
-0003c000
-0007c000
-003fff00
-007fff00
-007fff00
-007ffe00
-00078000
-000f0000
-000f0000
-000f0000
-000f0000
-000f0000
-001e0000
-001e0000
-001e0000
-001e0000
-003e0000
-003c0000
-003c0000
-003c0000
-003c0000
-007c0000
-00780000
-00780000
-00780000
-00780000
-00f80000
-00f00000
-00f00000
-00f00000
-01f00000
-01e00000
-03e00000
-07e00000
-ffc00000
-ff800000
-ff000000
-fc000000
->
- ]
-/TT37855b00 AddT3T32Char
-
-13
-/g286 [27 0 2 -27 25 1 ] 
-/g286 [23 28 true [1 0 0 1 -2 27 ]  0 0]
-[<001fc0
-007ff0
-01fff8
-03fffc
-07f07e
-0fc03e
-1f803e
-1f003e
-3f003e
-3e007e
-7e00fc
-7c03fc
-7ffff8
-7ffff0
-ffffc0
-fffc00
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-7c0060
-7e03e0
-7fffe0
-3fffc0
-1fff80
-03fc00
->
- ]
-/TT37855b00 AddT3T32Char
-T32RsrcEnd
-F /F2 0 /0 F /TT37855b00 mF 
-/F2S37 F2 [55.727 0 0 -55.727 0 0 ] mFS
-F2S37 Ji 
-1728 884 M <01>S 
-1753 884 M <02>S  1770 884 M <03>S  1796 884 M <04>S  1821 884 M <05>S  1841 884 M <06>S  1882 884 M <07>S  1894 884 M <05>S  1913 884 M <05>S  1933 884 M <07>S  1945 884 M <08>S  1971 884 M <04>S  1997 884 M <09>S  2008 884 M <0A>S  2036 884 M <0B>S  2061 884 M <0C>S  2077 884 M <0C>S 
-2092 884 M <0D>S  2116 884 M <02>S  
-N 126 534 M 365 534 I 365 534 I 374 533 I 383 531 I 391 529 I 400 526 I 407 522 I 415 517 I 422 511 I 428 505 I 434 498 I 439 490 I 444 482 I 447 474 I 450 465 I 453 456 I 454 445 I 454 435 I 454 435 I 454 425 I 453 416 I 450 406 I 447 397 I 444 389 I 439 380 I 434 373 I 428 366 I 422 359 I 415 354 I 407 349 I 400 345 I 391 342 I 383 339 I 374 338 I 365 337 I 365 337 I 126 337 I 126 337 I 116 338 I 107 339 I 99 342 I 91 345 I 83 349 I 75 354 I 68 359 I 62 366 I 56 373 I 51 380 I 46 389 I 43 397 I 40 406 I 38 416 I 36 425 I 36 435 I 36 445 I 38 456 I 40 465 I 43 474 I 46 482 I 51 490 I 56 498 I 62 505 I 68 511 I 75 517 I 83 522 I 91 526 I 99 529 I 107 531 I 116 533 I 126 534 I 126 534 I C 
- O N 126 534 M 365 534 I 365 534 I 374 533 I 383 531 I 391 529 I 400 526 I 407 522 I 415 517 I 422 511 I 428 505 I 434 498 I 439 490 I 444 482 I 447 474 I 450 465 I 453 456 I 454 445 I 454 435 I 454 435 I 454 425 I 453 416 I 450 406 I 447 397 I 444 389 I 439 380 I 434 373 I 428 366 I 422 359 I 415 354 I 407 349 I 400 345 I 391 342 I 383 339 I 374 338 I 365 337 I 365 337 I 126 337 I 126 337 I 116 338 I 107 339 I 99 342 I 91 345 I 83 349 I 75 354 I 68 359 I 62 366 I 56 373 I 51 380 I 46 389 I 43 397 I 40 406 I 38 416 I 36 425 I 36 435 I 36 445 I 38 456 I 40 465 I 43 474 I 46 482 I 51 490 I 56 498 I 62 505 I 68 511 I 75 517 I 83 522 I 91 526 I 99 529 I 107 531 I 116 533 I 126 534 I : 0.66 0.723 +S K 
-; N 101 508 M 340 508 I 340 508 I 350 507 I 359 505 I 367 503 I 375 500 I 383 495 I 391 491 I 398 485 I 404 479 I 410 471 I 415 464 I 420 456 I 424 448 I 426 438 I 428 429 I 430 419 I 430 409 I 430 409 I 430 399 I 428 390 I 426 380 I 424 371 I 420 362 I 415 354 I 410 347 I 404 340 I 398 333 I 391 328 I 383 323 I 375 319 I 367 315 I 359 313 I 350 312 I 340 311 I 340 311 I 101 311 I 101 311 I 93 312 I 83 313 I 75 315 I 67 319 I 59 323 I 51 328 I 44 333 I 38 340 I 32 347 I 27 354 I 23 362 I 19 371 I 16 380 I 13 390 I 12 399 I 12 409 I 12 419 I 13 429 I 16 438 I 19 448 I 23 456 I 27 464 I 32 471 I 38 479 I 44 485 I 51 491 I 59 495 I 67 500 I 75 503 I 83 505 I 93 507 I 101 508 I 101 508 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 101 508 M 340 508 I 340 508 I 350 507 I 359 505 I 367 503 I 375 500 I 383 495 I 391 491 I 398 485 I 404 479 I 410 471 I 415 464 I 420 456 I 424 448 I 426 438 I 428 429 I 430 419 I 430 409 I 430 409 I 430 399 I 428 390 I 426 380 I 424 371 I 420 362 I 415 354 I 410 347 I 404 340 I 398 333 I 391 328 I 383 323 I 375 319 I 367 315 I 359 313 I 350 312 I 340 311 I 340 311 I 101 311 I 101 311 I 93 312 I 83 313 I 75 315 I 67 319 I 59 323 I 51 328 I 44 333 I 38 340 I 32 347 I 27 354 I 23 362 I 19 371 I 16 380 I 13 390 I 12 399 I 12 409 I 12 419 I 13 429 I 16 438 I 19 448 I 23 456 I 27 464 I 32 471 I 38 479 I 44 485 I 51 491 I 59 495 I 67 500 I 75 503 I 83 505 I 93 507 I 101 508 I 101 508 I : 0.66 0.723 +S K 
-; T32RsrcBegin
-
-15
-/g282 [29 0 3 -38 26 1 ] 
-/g282 [23 39 true [1 0 0 1 -3 38 ]  0 0]
-[<00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-00003e
-01f83e
-07fe3e
-0fffbe
-1ffffe
-3f87fe
-3f01fe
-7e00fe
-7c007e
-7c003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-f8003e
-7c003e
-7c007e
-7e00fe
-7e01fe
-3f87de
-1fffde
-0fff1e
-07fe1e
-01f800
->
- ]
-/TT37854b00 AddT3T32Char
-T32RsrcEnd
-F1S37 Ji 
-170 393 M <08>S 
-193 393 M <0E>S  218 393 M <0C>S  245 393 M <0F>S  
-T32RsrcBegin
-
-16
-/g4 [32 0 1 -35 31 0 ] 
-/g4 [30 35 true [1 0 0 1 -1 35 ]  0 0]
-[<000fc000
-000fc000
-000fe000
-001fe000
-001ff000
-003ff000
-003cf000
-003cf800
-007cf800
-00787800
-00787c00
-00f87c00
-00f03e00
-01f03e00
-01f03e00
-01e01f00
-03e01f00
-03c00f00
-03c00f80
-07c00f80
-078007c0
-078007c0
-0fffffc0
-0fffffe0
-1fffffe0
-1fffffe0
-1e0001f0
-3e0001f0
-3e0001f0
-3c0000f8
-7c0000f8
-7c0000fc
-f800007c
-f800007c
-f800003c
->
- ]
-/TT37854b00 AddT3T32Char
-
-17
-/g100 [27 0 0 -35 27 0 ] 
-/g100 [27 35 true [1 0 0 1 0 35 ]  0 0]
-[<ffffffe0
-ffffffe0
-ffffffe0
-ffffffe0
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
-001f0000
->
- ]
-/TT37854b00 AddT3T32Char
-T32RsrcEnd
-113 459 M <09>S 
-144 459 M <10>S  173 459 M <11>S  198 459 M <10>S  
-239 459 M <01>S 
-266 459 M <09>S  297 459 M <0A>S  
-1 Lw solid N 2570 3256 M 2570 3225 I 2571 3223 I 2572 3223 I 2574 3223 I 2574 3225 I 2574 3256 I 2574 3257 I 2572 3258 I 2571 3257 I 2570 3256 I 2570 3256 I C 
-2570 3203 M 2570 3172 I 2571 3171 I 2572 3170 I 2574 3171 I 2574 3172 I 2574 3203 I 2574 3205 I 2572 3205 I 2571 3205 I 2570 3203 I 2570 3203 I C 
-2570 3150 M 2570 3119 I 2571 3117 I 2572 3116 I 2574 3117 I 2574 3119 I 2574 3150 I 2574 3151 I 2572 3152 I 2571 3151 I 2570 3150 I 2570 3150 I C 
-2570 3097 M 2570 3066 I 2571 3064 I 2572 3064 I 2574 3064 I 2574 3066 I 2574 3097 I 2574 3098 I 2572 3099 I 2571 3098 I 2570 3097 I 2570 3097 I C 
-2570 3043 M 2570 3012 I 2571 3011 I 2572 3010 I 2574 3011 I 2574 3012 I 2574 3043 I 2574 3045 I 2572 3046 I 2571 3045 I 2570 3043 I 2570 3043 I C 
-2570 2990 M 2570 2959 I 2571 2957 I 2572 2957 I 2574 2957 I 2574 2959 I 2574 2990 I 2574 2992 I 2572 2992 I 2571 2992 I 2570 2990 I 2570 2990 I C 
-2570 2937 M 2570 2906 I 2571 2905 I 2572 2904 I 2574 2905 I 2574 2906 I 2574 2937 I 2574 2939 I 2572 2939 I 2571 2939 I 2570 2937 I 2570 2937 I C 
-2570 2884 M 2570 2853 I 2571 2851 I 2572 2850 I 2574 2851 I 2574 2853 I 2574 2884 I 2574 2885 I 2572 2886 I 2571 2885 I 2570 2884 I 2570 2884 I C 
-2570 2831 M 2570 2800 I 2571 2798 I 2572 2798 I 2574 2798 I 2574 2800 I 2574 2831 I 2574 2832 I 2572 2833 I 2571 2832 I 2570 2831 I 2570 2831 I C 
-2570 2777 M 2570 2746 I 2571 2745 I 2572 2744 I 2574 2745 I 2574 2746 I 2574 2777 I 2574 2779 I 2572 2780 I 2571 2779 I 2570 2777 I 2570 2777 I C 
-2570 2725 M 2570 2693 I 2571 2692 I 2572 2691 I 2574 2692 I 2574 2693 I 2574 2725 I 2574 2726 I 2572 2727 I 2571 2726 I 2570 2725 I 2570 2725 I C 
-2570 2671 M 2570 2640 I 2571 2639 I 2572 2638 I 2574 2639 I 2574 2640 I 2574 2671 I 2574 2672 I 2572 2673 I 2571 2672 I 2570 2671 I 2570 2671 I C 
-2570 2618 M 2570 2586 I 2571 2585 I 2572 2584 I 2574 2585 I 2574 2586 I 2574 2618 I 2574 2620 I 2572 2620 I 2571 2620 I 2570 2618 I 2570 2618 I C 
-2570 2565 M 2570 2534 I 2571 2532 I 2572 2531 I 2574 2532 I 2574 2534 I 2574 2565 I 2574 2566 I 2572 2567 I 2571 2566 I 2570 2565 I 2570 2565 I C 
-2570 2511 M 2570 2480 I 2571 2479 I 2572 2478 I 2574 2479 I 2574 2480 I 2574 2511 I 2574 2513 I 2572 2513 I 2571 2513 I 2570 2511 I 2570 2511 I C 
-2570 2458 M 2570 2427 I 2571 2426 I 2572 2425 I 2574 2426 I 2574 2427 I 2574 2458 I 2574 2460 I 2572 2461 I 2571 2460 I 2570 2458 I 2570 2458 I C 
-2570 2405 M 2570 2374 I 2571 2372 I 2572 2372 I 2574 2372 I 2574 2374 I 2574 2405 I 2574 2406 I 2572 2407 I 2571 2406 I 2570 2405 I 2570 2405 I C 
-2570 2352 M 2570 2321 I 2571 2320 I 2572 2319 I 2574 2320 I 2574 2321 I 2574 2352 I 2574 2354 I 2572 2354 I 2571 2354 I 2570 2352 I 2570 2352 I C 
-2570 2299 M 2570 2268 I 2571 2266 I 2572 2265 I 2574 2266 I 2574 2268 I 2574 2299 I 2574 2300 I 2572 2301 I 2571 2300 I 2570 2299 I 2570 2299 I C 
-2570 2245 M 2570 2214 I 2571 2213 I 2572 2212 I 2574 2213 I 2574 2214 I 2574 2245 I 2574 2247 I 2572 2247 I 2571 2247 I 2570 2245 I 2570 2245 I C 
-2570 2192 M 2570 2161 I 2571 2160 I 2572 2159 I 2574 2160 I 2574 2161 I 2574 2192 I 2574 2194 I 2572 2195 I 2571 2194 I 2570 2192 I 2570 2192 I C 
-2570 2139 M 2570 2108 I 2571 2106 I 2572 2106 I 2574 2106 I 2574 2108 I 2574 2139 I 2574 2140 I 2572 2141 I 2571 2140 I 2570 2139 I 2570 2139 I C 
-2570 2086 M 2570 2055 I 2571 2054 I 2572 2053 I 2574 2054 I 2574 2055 I 2574 2086 I 2574 2088 I 2572 2088 I 2571 2088 I 2570 2086 I 2570 2086 I C 
-2570 2033 M 2570 2001 I 2571 2000 I 2572 1999 I 2574 2000 I 2574 2001 I 2574 2033 I 2574 2034 I 2572 2035 I 2571 2034 I 2570 2033 I 2570 2033 I C 
-2570 1979 M 2570 1949 I 2571 1947 I 2572 1947 I 2574 1947 I 2574 1949 I 2574 1979 I 2574 1981 I 2572 1982 I 2571 1981 I 2570 1979 I 2570 1979 I C 
-2570 1926 M 2570 1895 I 2571 1894 I 2572 1893 I 2574 1894 I 2574 1895 I 2574 1926 I 2574 1928 I 2572 1928 I 2571 1928 I 2570 1926 I 2570 1926 I C 
-2570 1873 M 2570 1842 I 2571 1840 I 2572 1840 I 2574 1840 I 2574 1842 I 2574 1873 I 2574 1875 I 2572 1875 I 2571 1875 I 2570 1873 I 2570 1873 I C 
-2570 1820 M 2570 1789 I 2571 1787 I 2572 1787 I 2574 1787 I 2574 1789 I 2574 1820 I 2574 1821 I 2572 1822 I 2571 1821 I 2570 1820 I 2570 1820 I C 
-2570 1766 M 2570 1735 I 2571 1734 I 2572 1733 I 2574 1734 I 2574 1735 I 2574 1766 I 2574 1768 I 2572 1769 I 2571 1768 I 2570 1766 I 2570 1766 I C 
-2570 1714 M 2570 1683 I 2571 1681 I 2572 1680 I 2574 1681 I 2574 1683 I 2574 1714 I 2574 1715 I 2572 1716 I 2571 1715 I 2570 1714 I 2570 1714 I C 
-2570 1660 M 2570 1629 I 2571 1628 I 2572 1627 I 2574 1628 I 2574 1629 I 2574 1660 I 2574 1662 I 2572 1662 I 2571 1662 I 2570 1660 I 2570 1660 I C 
-2570 1607 M 2570 1576 I 2571 1575 I 2572 1574 I 2574 1575 I 2574 1576 I 2574 1607 I 2574 1609 I 2572 1610 I 2571 1609 I 2570 1607 I 2570 1607 I C 
-2570 1554 M 2570 1523 I 2571 1521 I 2572 1521 I 2574 1521 I 2574 1523 I 2574 1554 I 2574 1555 I 2572 1556 I 2571 1555 I 2570 1554 I 2570 1554 I C 
-2570 1500 M 2570 1469 I 2571 1468 I 2572 1467 I 2574 1468 I 2574 1469 I 2574 1500 I 2574 1503 I 2572 1503 I 2571 1503 I 2570 1500 I 2570 1500 I C 
-2570 1448 M 2570 1417 I 2571 1415 I 2572 1414 I 2574 1415 I 2574 1417 I 2574 1448 I 2574 1449 I 2572 1450 I 2571 1449 I 2570 1448 I 2570 1448 I C 
-2570 1394 M 2570 1363 I 2571 1362 I 2572 1361 I 2574 1362 I 2574 1363 I 2574 1394 I 2574 1396 I 2572 1396 I 2571 1396 I 2570 1394 I 2570 1394 I C 
-2570 1341 M 2570 1310 I 2571 1309 I 2572 1308 I 2574 1309 I 2574 1310 I 2574 1341 I 2574 1343 I 2572 1343 I 2571 1343 I 2570 1341 I 2570 1341 I C 
-2570 1288 M 2570 1257 I 2571 1255 I 2572 1255 I 2574 1255 I 2574 1257 I 2574 1288 I 2574 1289 I 2572 1290 I 2571 1289 I 2570 1288 I 2570 1288 I C 
-2570 1234 M 2570 1204 I 2571 1202 I 2572 1201 I 2574 1202 I 2574 1204 I 2574 1234 I 2574 1236 I 2572 1237 I 2571 1236 I 2570 1234 I 2570 1234 I C 
-2570 1182 M 2570 1150 I 2571 1149 I 2572 1148 I 2574 1149 I 2574 1150 I 2574 1182 I 2574 1183 I 2572 1184 I 2571 1183 I 2570 1182 I 2570 1182 I C 
-2570 1128 M 2570 1097 I 2571 1095 I 2572 1095 I 2574 1095 I 2574 1097 I 2574 1128 I 2574 1130 I 2572 1130 I 2571 1130 I 2570 1128 I 2570 1128 I C 
-2570 1075 M 2570 1044 I 2571 1043 I 2572 1042 I 2574 1043 I 2574 1044 I 2574 1075 I 2574 1077 I 2572 1077 I 2571 1077 I 2570 1075 I 2570 1075 I C 
-2570 1022 M 2570 991 I 2571 989 I 2572 988 I 2574 989 I 2574 991 I 2574 1022 I 2574 1023 I 2572 1024 I 2571 1023 I 2570 1022 I 2570 1022 I C 
-2570 969 M 2570 938 I 2571 936 I 2572 936 I 2574 936 I 2574 938 I 2574 969 I 2574 970 I 2572 971 I 2571 970 I 2570 969 I 2570 969 I C 
-2570 915 M 2570 884 I 2571 883 I 2572 882 I 2574 883 I 2574 884 I 2574 915 I 2574 917 I 2572 918 I 2571 917 I 2570 915 I 2570 915 I C 
-2570 862 M 2570 832 I 2571 829 I 2572 829 I 2574 829 I 2574 832 I 2574 862 I 2574 864 I 2572 865 I 2571 864 I 2570 862 I 2570 862 I C 
-2570 809 M 2570 778 I 2571 777 I 2572 776 I 2574 777 I 2574 778 I 2574 809 I 2574 811 I 2572 811 I 2571 811 I 2570 809 I 2570 809 I C 
-2570 756 M 2570 725 I 2571 723 I 2572 722 I 2574 723 I 2574 725 I 2574 756 I 2574 758 I 2572 758 I 2571 758 I 2570 756 I 2570 756 I C 
-2570 703 M 2570 672 I 2571 670 I 2572 670 I 2574 670 I 2574 672 I 2574 703 I 2574 704 I 2572 705 I 2571 704 I 2570 703 I 2570 703 I C 
-2570 649 M 2570 618 I 2571 617 I 2572 616 I 2574 617 I 2574 618 I 2574 649 I 2574 651 I 2572 652 I 2571 651 I 2570 649 I 2570 649 I C 
-2570 597 M 2570 565 I 2571 564 I 2572 563 I 2574 564 I 2574 565 I 2574 597 I 2574 598 I 2572 599 I 2571 598 I 2570 597 I 2570 597 I C 
-2570 543 M 2570 512 I 2571 511 I 2572 510 I 2574 511 I 2574 512 I 2574 543 I 2574 545 I 2572 545 I 2571 545 I 2570 543 I 2570 543 I C 
-2570 490 M 2570 459 I 2571 457 I 2572 456 I 2574 457 I 2574 459 I 2574 490 I 2574 492 I 2572 492 I 2571 492 I 2570 490 I 2570 490 I C 
-2570 437 M 2570 406 I 2571 404 I 2572 404 I 2574 404 I 2574 406 I 2574 437 I 2574 438 I 2572 439 I 2571 438 I 2570 437 I 2570 437 I C 
-2570 383 M 2570 352 I 2571 351 I 2572 350 I 2574 351 I 2574 352 I 2574 383 I 2574 385 I 2572 385 I 2571 385 I 2570 383 I 2570 383 I C 
-2570 330 M 2570 299 I 2571 298 I 2572 297 I 2574 298 I 2574 299 I 2574 330 I 2574 332 I 2572 333 I 2571 332 I 2570 330 I 2570 330 I C 
-2570 277 M 2570 246 I 2571 244 I 2572 244 I 2574 244 I 2574 246 I 2574 277 I 2574 278 I 2572 279 I 2571 278 I 2570 277 I 2570 277 I C 
-:  L ; K 
-N 2345 12 M 2345 246 I 2800 246 I 2800 12 I 2345 12 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw solid N 2345 246 M 2800 246 I 2800 12 I 2345 12 I 2345 246 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-35
-/g28 [36 0 6 -47 32 0 ] 
-/g28 [26 47 true [1 0 0 1 -6 47 ]  0 0]
-[<7fffffc0
-ffffffc0
-ffffffc0
-ffffffc0
-ffffffc0
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fffffe00
-fffffe00
-fffffe00
-fffffe00
-fffffe00
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-fc000000
-ffffffc0
-ffffffc0
-ffffffc0
-ffffffc0
-7fffffc0
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-F0S49 Ji 
-2460 151 M <15>S 
-2504 151 M (#)S  2537 151 M <07>S  2552 151 M <06>S  2609 151 M <05>S  2648 151 M <02>S  
-7 Lw N 2460 160 M 2684 160 I : 0.66 0.723 +S K 
-; N 2534 1243 M 2534 1409 I 2610 1409 I 2610 1243 I 2534 1243 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 6 Lw N 2610 1409 M 2610 1243 I 2534 1243 I 2534 1409 I 2610 1409 I C 
-: 0.66 0.723 +S K 
-; N 2610 1409 M 3186 1409 I : 0.66 0.723 +S K 
-; N 3252 1409 M 3219 1430 I 3219 1388 I 3252 1409 I C 
-3219 1430 M 3252 1409 I 3219 1430 I C 
- O 10 Lw N 3252 1409 M 3219 1430 I 3219 1388 I 3252 1409 I : 0.66 0.723 +S K 
-; N 3219 1430 M 3252 1409 I : 0.66 0.723 +S K 
-; 6 Lw N 3219 1409 M 3166 1409 I : 0.66 0.723 +S K 
-; N 2573 1267 M 2573 1356 I 3289 1356 I 3289 1267 I 2573 1267 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-36
-/g47 [19 0 6 -47 12 0 ] 
-/g47 [6 47 true [1 0 0 1 -6 47 ]  0 0]
-[<fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
-fc
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-2573 1333 M <1A>S 
-2604 1333 M <09>S  2638 1333 M <0F>S  2673 1333 M <1F>S  2709 1333 M ($)S  2726 1333 M <1F>S  2762 1333 M <09>S  2796 1333 M <0E>S  2828 1333 M ( )S  2843 1333 M <02>S  2879 1333 M <17>S  2915 1333 M <0F>S  2950 1333 M <13>S  2973 1333 M <0D>S  2997 1333 M <17>S  3032 1333 M ( )S  3048 1333 M <06>S 
-3105 1333 M <09>S  3139 1333 M <10>S  3165 1333 M <10>S  3192 1333 M <0E>S  3224 1333 M (!)S  3256 1333 M <09>S  
-N 2534 2075 M 2534 2241 I 2610 2241 I 2610 2075 I 2534 2075 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 2610 2241 M 2610 2075 I 2534 2075 I 2534 2241 I 2610 2241 I C 
-: 0.66 0.723 +S K 
-; N 2534 2241 M 1959 2241 I : 0.66 0.723 +S K 
-; N 1892 2241 M 1925 2220 I 1925 2261 I 1892 2241 I C 
-1925 2220 M 1892 2241 I 1925 2220 I C 
- O 10 Lw N 1892 2241 M 1925 2220 I 1925 2261 I 1892 2241 I : 0.66 0.723 +S K 
-; N 1925 2220 M 1892 2241 I : 0.66 0.723 +S K 
-; 6 Lw N 1925 2241 M 1977 2241 I : 0.66 0.723 +S K 
-; N 1896 2132 M 1896 2221 I 2531 2221 I 2531 2132 I 1896 2132 I C 
-1 1 1 1 scol  O 0 0 0 1 scol T32RsrcBegin
-
-37
-/g455 [34 0 1 -34 32 14 ] 
-/g455 [31 48 true [1 0 0 1 -1 34 ]  0 0]
-[<fc00007e
-fe00007e
-7e00007e
-7e0000fe
-7f0000fc
-3f0000fc
-3f8001f8
-3f8001f8
-1f8001f8
-1fc003f0
-0fc003f0
-0fc003f0
-0fe007e0
-07e007e0
-07e00fc0
-03f00fc0
-03f00fc0
-03f81f80
-01f81f80
-01f81f80
-01fc3f00
-00fc3f00
-00fc3f00
-007e7e00
-007e7e00
-007e7c00
-003ffc00
-003ffc00
-003ff800
-001ff800
-001ff800
-000ff000
-000ff000
-000ff000
-0007e000
-0007e000
-000fc000
-000fc000
-001fc000
-001f8000
-001f8000
-003f8000
-003f0000
-003f0000
-007f0000
-007e0000
-007e0000
-007c0000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-1896 2198 M <0A>S 
-1939 2198 M <17>S  1975 2198 M <13>S  1997 2198 M <12>S  2013 2198 M <19>S  2033 2198 M (%)S  
-2064 2198 M <14>S 
-T32RsrcBegin
-
-38
-/g454 [32 0 2 -34 31 0 ] 
-/g454 [29 34 true [1 0 0 1 -2 34 ]  0 0]
-[<fe0003f0
-fe0003f0
-7f0007e0
-3f800fe0
-3f800fc0
-1fc01f80
-0fe03f80
-0fe03f00
-07f07e00
-03f07e00
-03f8fc00
-01fdfc00
-01fdf800
-00fff000
-007ff000
-007fe000
-003fc000
-003fe000
-007ff000
-00fff000
-00fff800
-01f9fc00
-03f9fc00
-03f0fe00
-07e07e00
-0fe07f00
-0fc03f80
-1fc03f80
-3f801fc0
-3f000fe0
-7f000fe0
-7e0007f0
-fe0007f8
-fc0003f0
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-2098 2198 M <0C>S 
-2131 2198 M (&)S  
-2160 2198 M <14>S 
-T32RsrcBegin
-
-39
-/g75 [49 0 4 -48 46 1 ] 
-/g75 [42 49 true [1 0 0 1 -4 48 ]  0 0]
-[<0000ffe00000
-0007fffc0000
-001fffff0000
-007fffffc000
-00ffffffe000
-03ff807ff000
-03fe000ff800
-07f80007fc00
-0ff00003fe00
-1fe00001fe00
-1fc00000ff00
-3fc000007f00
-3f8000007f00
-3f8000007f80
-7f0000003f80
-7f0000003f80
-7f0000003f80
-7f0000003fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-fe0000001fc0
-ff0000003f80
-7f0000003f80
-7f0000003f80
-7f0000003f80
-7f8000007f00
-3f8000007f00
-3f800000ff00
-3fc00000fe00
-1fe00001fe00
-1fe00003fc00
-0ff80007f800
-07fc001ff000
-03ff807ff000
-01ffffffc000
-00ffffff8000
-003ffffe0000
-000ffff80000
-0001ffc00000
->
- ]
-/TT37853b00 AddT3T32Char
-T32RsrcEnd
-2194 2198 M (')S 
-2239 2198 M <16>S  2274 2198 M <16>S  2310 2198 M <17>S  2346 2198 M <0D>S  2369 2198 M <13>S  2392 2198 M <18>S  2428 2198 M <0F>S  2463 2198 M <12>S  2478 2198 M <13>S  2501 2198 M (%)S  
-N 2534 2905 M 2534 3072 I 2610 3072 I 2610 2905 I 2534 2905 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 2610 3072 M 2610 2905 I 2534 2905 I 2534 3072 I 2610 3072 I C 
-: 0.66 0.723 +S K 
-; N 3970 1908 M 3394 1908 I : 0.66 0.723 +S K 
-; N 3328 1908 M 3361 1887 I 3361 1929 I 3328 1908 I C 
-3361 1887 M 3328 1908 I 3361 1887 I C 
- O 10 Lw N 3328 1908 M 3361 1887 I 3361 1929 I 3328 1908 I : 0.66 0.723 +S K 
-; N 3361 1887 M 3328 1908 I : 0.66 0.723 +S K 
-; 6 Lw N 3361 1908 M 3414 1908 I : 0.66 0.723 +S K 
-; N 3406 1799 M 3406 1888 I 3892 1888 I 3892 1799 I 3406 1799 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 3406 1866 M <1A>S 
-3437 1866 M <1D>S  3465 1866 M <1E>S  3501 1866 M <09>S  3535 1866 M <1F>S  3570 1866 M <15>S  3614 1866 M ( )S  3629 1866 M <02>S  3665 1866 M <17>S  3700 1866 M <0F>S  3736 1866 M <19>S  3757 1866 M <12>S  3772 1866 M (!)S  3804 1866 M ($)S  3821 1866 M <0F>S  3856 1866 M <1F>S  
-N 3252 2075 M 2677 2075 I : 0.66 0.723 +S K 
-; N 2610 2075 M 2643 2054 I 2643 2095 I 2610 2075 I C 
-2643 2054 M 2610 2075 I 2643 2054 I C 
- O 10 Lw N 2610 2075 M 2643 2054 I 2643 2095 I 2610 2075 I : 0.66 0.723 +S K 
-; N 2643 2054 M 2610 2075 I : 0.66 0.723 +S K 
-; 6 Lw N 2643 2075 M 2696 2075 I : 0.66 0.723 +S K 
-; N 2573 1965 M 2573 2054 I 3289 2054 I 3289 1965 I 2573 1965 I C 
-1 1 1 1 scol  O 0 0 0 1 scol 2573 2032 M <1A>S 
-2604 2032 M <09>S  2638 2032 M <0F>S  2673 2032 M <1F>S  2709 2032 M ($)S  2726 2032 M <1F>S  2762 2032 M <09>S  2796 2032 M <0E>S  2828 2032 M ( )S  2843 2032 M <02>S  2879 2032 M <17>S  2915 2032 M <0F>S  2950 2032 M <13>S  2973 2032 M <0D>S  2997 2032 M <17>S  3032 2032 M ( )S  3048 2032 M <06>S 
-3105 2032 M <09>S  3139 2032 M <10>S  3165 2032 M <10>S  3192 2032 M <0E>S  3224 2032 M (!)S  3256 2032 M <09>S  
-N 1531 2366 M 1531 2693 I 2249 2693 I 2249 2366 I 1531 2366 I C 
- O N 1531 2693 M 2249 2693 I 2249 2366 I 1531 2366 I 1531 2693 I : 0.66 0.723 +S K 
-; N 1507 2340 M 1507 2667 I 2225 2667 I 2225 2340 I 1507 2340 I C 
-1 1 1 1 scol  O 0 0 0 1 scol N 1507 2667 M 2225 2667 I 2225 2340 I 1507 2340 I 1507 2667 I C 
-: 0.66 0.723 +S K 
-; T32RsrcBegin
-
-18
-/g68 [48 0 5 -35 43 0 ] 
-/g68 [38 35 true [1 0 0 1 -5 35 ]  0 0]
-[<7f000001f8
-ff800003fc
-ff800007fc
-ffc00007fc
-ffc0000ffc
-fbc0000f7c
-fbe0000f7c
-fbe0001f7c
-f9e0001e7c
-f9f0003e7c
-f8f0003c7c
-f8f8003c7c
-f8f8007c7c
-f87800787c
-f87c00f87c
-f87c00f07c
-f83e00f07c
-f83e01f07c
-f81e01e07c
-f81f03e07c
-f81f03c07c
-f80f03c07c
-f80f87c07c
-f80f87807c
-f807c7807c
-f807cf807c
-f803cf007c
-f803ff007c
-f803fe007c
-f801fe007c
-f801fe007c
-f800fc007c
-f800fc007c
-f800f8007c
-f80078007c
->
- ]
-/TT37854b00 AddT3T32Char
-
-19
-/g381 [30 0 2 -27 27 1 ] 
-/g381 [25 28 true [1 0 0 1 -2 27 ]  0 0]
-[<007f8000
-03ffe000
-07fff800
-0ffffc00
-1fc0fe00
-3f007e00
-3e003f00
-7c001f00
-7c001f00
-7c001f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-fc001f00
-7c001f00
-7c001f00
-7e003e00
-3f007e00
-3fc1fc00
-1ffff800
-0ffff000
-03ffe000
-00ff0000
->
- ]
-/TT37854b00 AddT3T32Char
-
-20
-/g448 [25 0 1 -26 25 0 ] 
-/g448 [24 26 true [1 0 0 1 -1 26 ]  0 0]
-[<f8001e
-f8001e
-7c003e
-7c003e
-7c003c
-3e007c
-3e007c
-3e0078
-1f00f8
-1f00f8
-1f00f0
-0f81f0
-0f81e0
-0781e0
-07c3e0
-07c3c0
-03c3c0
-03e7c0
-03e780
-01e780
-01ff80
-01ff00
-00ff00
-00fe00
-007e00
-007e00
->
- ]
-/TT37854b00 AddT3T32Char
-T32RsrcEnd
-F1S37 Ji 
-1713 2487 M <12>S 
-1757 2487 M <13>S  1783 2487 M <14>S  1806 2487 M <0E>S  1831 2487 M <04>S  1843 2487 M <05>S  1870 2487 M <06>S  1892 2487 M <07>S  1919 2487 M <04>S  1930 2487 M <01>S  1956 2487 M <09>S  1987 2487 M <0A>S  
-1550 2553 M <03>S 
-1567 2553 M <13>S  1593 2553 M <04>S  1605 2553 M <03>S  1622 2553 M <0D>S  1648 2553 M <0E>S  1673 2553 M <04>S  
-T32RsrcBegin
-
-14
-/g410 [19 0 3 -33 19 1 ] 
-/g410 [16 34 true [1 0 0 1 -3 33 ]  0 0]
-[<03e0
-03c0
-03c0
-07c0
-07c0
-07c0
-0780
-7fff
-ffff
-ffff
-fffe
-0f00
-0f00
-0f00
-1f00
-1f00
-1e00
-1e00
-1e00
-3e00
-3e00
-3c00
-3c00
-3c00
-7c00
-7c00
-7c00
-7800
-7c00
-7c10
-7ff0
-3ff0
-3fe0
-0fc0
->
- ]
-/TT37855b00 AddT3T32Char
-
-15
-/g282 [29 0 2 -38 30 1 ] 
-/g282 [28 39 true [1 0 0 1 -2 38 ]  0 0]
-[<000001e0
-000001e0
-000001e0
-000003e0
-000003e0
-000003e0
-000003c0
-000003c0
-000007c0
-000007c0
-00000780
-003f0780
-00ffcf80
-01ffef80
-07ffff80
-07e0ff00
-0fc07f00
-1f803f00
-1f001f00
-3e001f00
-3e001e00
-7c003e00
-7c003e00
-7c003e00
-7c003e00
-f8003c00
-f8007c00
-f8007c00
-f800fc00
-f800f800
-f801f800
-f801f800
-f803f800
-fc07f800
-7e1f7000
-7ffe7000
-3ffcf000
-1ff8f000
-0fc00000
->
- ]
-/TT37855b00 AddT3T32Char
-
-16
-/g87 [29 0 2 -35 29 0 ] 
-/g87 [27 35 true [1 0 0 1 -2 35 ]  0 0]
-[<00fff800
-01fffe00
-01ffff80
-01ffffc0
-03e01fc0
-03e007e0
-03e007e0
-03c003e0
-03c003e0
-07c003e0
-07c003e0
-07c003e0
-078007c0
-078007c0
-0f800fc0
-0f801f80
-0f803f00
-0f00ff00
-1ffffe00
-1ffff800
-1ffff000
-1fff8000
-1e000000
-3e000000
-3e000000
-3e000000
-3c000000
-7c000000
-7c000000
-7c000000
-7c000000
-78000000
-f8000000
-f8000000
-f8000000
->
- ]
-/TT37855b00 AddT3T32Char
-T32RsrcEnd
-F2S37 Ji 
-1685 2553 M <01>S 
-1710 2553 M <02>S  1727 2553 M <03>S  1753 2553 M <04>S  1779 2553 M <05>S  1798 2553 M <06>S  1839 2553 M <07>S  1851 2553 M <0E>S  1868 2553 M <0E>S  1885 2553 M <0D>S  1909 2553 M <0F>S  1935 2553 M <09>S  1946 2553 M <10>S  1973 2553 M <0F>S  1999 2553 M <0B>S  2024 2553 M <05>S  2044 2553 M <09>S 
-2055 2553 M <0A>S  2083 2553 M <0B>S  2109 2553 M <0C>S  2124 2553 M <0C>S  2139 2553 M <0D>S  2164 2553 M <02>S  
-N 2610 3072 M 3223 3072 I : 0.66 0.723 +S K 
-; N 3290 3072 M 3257 3093 I 3257 3051 I 3290 3072 I C 
-3257 3093 M 3290 3072 I 3257 3093 I C 
- O 10 Lw N 3290 3072 M 3257 3093 I 3257 3051 I 3290 3072 I : 0.66 0.723 +S K 
-; N 3257 3093 M 3290 3072 I : 0.66 0.723 +S K 
-; 6 Lw N 3257 3072 M 3205 3072 I : 0.66 0.723 +S K 
-; N 2770 2929 M 2770 3018 I 3130 3018 I 3130 2929 I 2770 2929 I C 
-1 1 1 1 scol  O 0 0 0 1 scol F0S49 Ji 
-2770 2996 M <1A>S 
-2801 2996 M <09>S  2835 2996 M <0F>S  2870 2996 M <1F>S  2906 2996 M <06>S  2964 2996 M <0E>S  2996 2996 M <1D>S  3024 2996 M <03>S  3059 2996 M <1F>S  3095 2996 M <18>S  
-LH
-%%PageTrailer
-
-%%Trailer
-%%DocumentNeededResources: 
-%%DocumentSuppliedResources: 
-%%+ procset Pscript_WinNT_VMErrorHandler 5.0 0
-%%+ procset Pscript_FatalError 5.0 0
-%%+ procset Pscript_Win_Basic 5.0 0
-%%+ procset Pscript_Win_Utils_L1 5.0 0
-%%+ procset Pscript_Win_GdiObject 5.0 0
-%%+ procset Pscript_Win_GdiObject_L1 5.0 0
-%%+ procset Pscript_T3Hdr 5.0 0
-%%+ procset Pscript_Text 5.0 0
-Pscript_WinNT_Incr dup /terminate get exec
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-implementation-model.dia ns-3.22/src/lte/doc/source/figures/lte-rlc-implementation-model.dia
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-implementation-model.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-implementation-model.dia	2015-02-05 15:46:23.000000000 -0800
@@ -0,0 +1,10 @@
+     ]r7}WW0v&qϮ5H-I߾ 3e0AUx`}N7hQK9'WG^9LΆWG9Άŏiqsb<^]W?|ϊdFk6+OWFŉ^Ίy[|[썋i1|:UW-LFiK1zustɃ<r<ͷ]n}UNo{y5%W+45f#-W݃6/pͨz !\7d{ӴppӴp٧t>-UdT
+u>.wǙ3ǆbd.FMP}}mztx>._gO:z]ݿwt/tT=p<vqn	}[ZCuFy83,p~=<+gk5wX\v/_鋩Z 1*`^1|NW?`b|VLz/{>aJgލ#٪]M, },3VNO<rr>*p4OPc7&r|E-o|}9P.%>FqɫMK[gb:TLkQ>8PF7Vnyw/c'αQo_jn\EE!ʯjVG,"
+ Jf R`n\?+|`2?V:p \kn?Yi["^7;P$AY9ML[C5Oc}'qb$>!9tZFWb/%G\2< "ej߽0b@w,C`"
+%t>OR$g4>w>ds$4Ji;xe6?25Ywrj/0w.myՔ8u2n>OXFr#\$`C!W褗T$%cXVfr߽=˽ܣǖ)$<{7g7L8}4ђ{Q*MrM^蠦2sCvLx@}ro,6ZvOOQ-{eZnQRr~{ 'gLsD}:<R~2_!_,ϧY'({%F	.shZR2,YW2Z4T$*8|Aa>T6|~Ø.FUV	z"Zpd}~	Ռ~S(ΊR觠v)oSomǹdz`5엇;QٺQ2&(]'F<F4vk/vx{gEwe޿ha-v;(zhI0Vf}zCx+<!m8|%1AmY꟡G)dCu]5HsFݟ}ֆnUfbfRԫ'/&VVOZKe Ez\LGpg(6VV-&N1MN!) z$9YV0).>KRoֻ1ddZ<d|V_$8KzzdP:IVOFxJH"L7bEg_/NH;&60aaR:ޥWq#fiHHBTHF;"{Y2zZrvylprV\X]Ssx^}..﯎~xvԛͿ{sTto'a9]"-&N.+4 ,O0n	|[X.p!BÉ*FeYk#MQj[yo&_#-;Jlsh%Zs~v5?[*ºؖu}ZcgJC{q2)̺u̺uǺ:%&B'`$ŏuo|[	=0
+YJ nP83fQkq[!9ҕ(~*dPdͤqfͤt,h;P%"UqT"pWGہE 4 uÓڀ?6]VÐ6`wѼp7X}e,2 Jt_!jCc.	CTX:u>JMo zdʪwRr<@4-sJ.u>:k1ZMJg-d-AlAAl3ڬO1ZA6
+[[p *nC=6p/dCV.Tf2^)c#DX.U8ɱ$a6i{˥E^.M\Zoy4/F1&]ks{}aLB82f83f鶮6Ru{}.i:ν._nyw{,ǧl6qfɷyUھDP&g	v Gb$76,vՃNYnK "\smVp,d*LaXZ6sկ]#8IUC\HT;*!	gml~mڨhv?"7ѿїr>)B"dݏҟA#U	j=(iHzACpZ1R`C+*<28CLqcoV !(iHH4%g_u>W8jg풁1"{/!}Do_yOPbޞ|7cGmxuĲsF--@.[Ynu̆1.pMq̺H>֙V"/S=mL893JbePu#^	}3F/vFc8o9x0x#iS!Ŧ<.Q2gmo7-;/êmeg?hB4a#6ø=u1Wr-C*L#;,^8$9N}?b3mxMeeEV=<b@[BV| ٷ;<2hH۷ąS+<ɬߨ6K|7~Ćs)JsMo!}Ԍ,QXm~)~h3qg>[ZFL-iVa[[fmݿxå+92h]+	ǆ	T(|{<;Wr~o.[N`9Sgqk+5%Y@
+o$`gCӳ}{7lLۇxXOEf<Iuo%C-0Ѻw;]Fm67
+2V$YxAߩlsg`9Agqɣ-{DF4 bVFϹZ7Lۙ{om;1ΌV1C@ݷЏϐNy|{Y,O'_.흼p_:>]~}
+t4C;!mIخ5p?mKhPp"@0ٻU{LuL&$ HuOW+!	+֖&))yG*i[ DA}D:oaW|q*W5fCgZGCkE!WCBOE*S'An6ou}L9dϪ9YxOY3ƒh5mfCd1ݚSRE,vdBAoO>|^>3]"]38tuT&tj{}f:Df1tLneƆ:[dsxr.x<3] ])a^+
+@VA3ѕR(7Tt%ULWۘgC+!dd6P8 [I;$gV郫Zdudb+Tfb7m7??VV1*	4}R	MX1A;#\Jm4sVRκ}QsmGDϻޅEjݻk4/c5CR]Vt֧USwHR(f3AobfkPW}|о/ 
\ No newline at end of file
diff -Naur ns-3.21/src/lte/doc/source/figures/lte-rlc-implementation-model.eps ns-3.22/src/lte/doc/source/figures/lte-rlc-implementation-model.eps
--- ns-3.21/src/lte/doc/source/figures/lte-rlc-implementation-model.eps	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/figures/lte-rlc-implementation-model.eps	1969-12-31 16:00:00.000000000 -0800
@@ -1,3804 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Title: 
-%%Creator: PScript5.dll Version 5.2.2
-%%CreationDate: 10/27/2011 11:50:37
-%%For: mrequena
-%%BoundingBox: 0 0 726 430
-%%Pages: 1
-%%Orientation: Portrait
-%%PageOrder: Ascend
-%%DocumentNeededResources: (atend)
-%%DocumentSuppliedResources: (atend)
-%%DocumentData: Clean7Bit
-%%TargetDevice: () (52.3) 320
-%%LanguageLevel: 1
-%%EndComments
-
-%%BeginDefaults
-%%PageBoundingBox: 0 0 726 430
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-
-%%BeginProlog
-%%BeginResource: file Pscript_WinNT_VMErrorHandler 5.0 0
-/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
-setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
-ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
-def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
-rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
-/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
-typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
-def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
-exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
-/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
-{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
-readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
-(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
-/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
-tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
-xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
-tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
-{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
-tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
-rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
-forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
-/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
-$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
-ne{grestoreall}if initgraphics courier setfont lmargin 720 moveto errorname
-(VMerror)eq{version cvi 2016 ge{userdict/ehsave known{clear userdict/ehsave get
-restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}if}if systemdict
-/showpage get exec(%%[ Error: )print errorname =print(; OffendingCommand: )
-print/command load =print( ]%%)= flush}if end end end}dup 0 systemdict put dup
-4 $brkpage put bind readonly put/currentpacking where{pop/setpacking where{pop
-oldpack setpacking}if}if
-%%EndResource
-%%BeginProcSet: Pscript_Res_Emul 5.0 0
-/defineresource where{pop}{userdict begin/defineresource{userdict/Resources 2
-copy known{get begin}{15 dict dup begin put}ifelse exch readonly exch
-currentdict 1 index known not{dup 30 dict def}if load 3 -1 roll 2 index put
-end}bind readonly def/findresource{userdict/Resources get exch get exch get}
-bind readonly def/resourceforall{pop pop pop pop}bind readonly def
-/resourcestatus{userdict/Resources 2 copy known{get exch 2 copy known{get exch
-known{0 -1 true}{false}ifelse}{pop pop pop false}ifelse}{pop pop pop pop false}
-ifelse}bind readonly def end}ifelse
-%%EndProcSet
-userdict /Pscript_WinNT_Incr 230 dict dup begin put
-%%BeginResource: file Pscript_FatalError 5.0 0
-userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup
-length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding
-{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end
-/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div
-cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end
-%%EndResource
-userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[
-(La impresora no tiene suficiente memoria disponible para este trabajo.)100 500
-(Realice una de las siguientes operaciones e intente imprimir de nuevo:)100 485
-(Escoja "Optimizar para portabilidad" como formato de salida.)115 470
-(En el panel Configuracin de dispositivo, compruebe que "Memoria PostScript disponible" tiene el valor correcto.)
-115 455(Reduzca el nmero de fuentes del documento.)115 440
-(Imprima el documento por partes.)115 425 12/Times-Roman showpage
-(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def end
-version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg get def}ifelse
-%%BeginResource: file Pscript_Win_Basic 5.0 0
-/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
-/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
-/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
-d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
-/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
-/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
-/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
-, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop
-languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow ,
-d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld
-/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix
-currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit
-counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b
-/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~
-d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put
-/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq
-{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U `
-/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped
-{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat}
-{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~
-itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5
-ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform
-nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ -
-neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0
-- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool
-2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e
-{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
-/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont
-{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1
-dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d
-E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1
-^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2
-16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !}
-bind d
-%%EndResource
-%%BeginResource: file Pscript_Win_Utils_L1 5.0 0
-/rf{N rp L}b/fx{1 1 dtransform @ 0 ge{1 sub 1}{1 add -0.25}? 3 -1 $ @ 0 ge{1
-sub 1}{1 add -0.25}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
-snap + +S fx rf}b/rs{N rp C K}b/rc{N rp clip N}b/UtilsInit{}b/setcolorspace{!}b
-/scol{[/setgray/setrgbcolor/setcolor/setcmykcolor/setcolor/setgray]~ get cvx
-exec}b/colspRefresh{}b/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo
-{/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d
-/AddFontInfoEnd{E d}bind d
-%%EndResource
-end
-%%EndProlog
-
-%%BeginSetup
-[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
-1 setlinecap 1 setlinejoin
-/mysetup [ 72 600 V 0 0 -72 600 V 0 429.73226 ] def 
-%%EndSetup
-
-%%Page: 1 1
-%%PageBoundingBox: 0 0 726 430
-%%EndPageComments
-%%BeginPageSetup
-/DeviceRGB dup setcolorspace /colspABC exch def
-mysetup concat colspRefresh
-%%EndPageSetup
-
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Win_GdiObject 5.0 0
-/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
-{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
-/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
-L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
-1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
-/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
-{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
-gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
-/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
-MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
-M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
-+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
-/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
-GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
-/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
-makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
-/HS_DiagCross makehatch}b/GDIBWPatternMx null d/pfprep{save 8 1 $
-/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d/yExt
-~ d/Width ~ d/BGnd ~ d/FGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0 Height 0
-0]d E build_pattern ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill{O}{L}? restore}b
-/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot concat 0 0 snap +
-: 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ nonzero_dsnap YStep V ~
-XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24 -0.24 +S
-GDIBWPatternDict ` Width Height E nonzero_dsnap +S/GDIBWPatternMx matrix
-currentmatrix readonly d ; ;}if}b
-%%EndResource
-%%BeginResource: file Pscript_Win_GdiObject_L1 5.0 0
-/GDIBWPatternDict 25 dict @ `/PatternType 1 d/PaintType 2 d/RepsV 6 d/RepsH 5 d
-/BBox[0 0 RepsH 1]d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d
-/Width 8 d/mx[Width 0 0 Height neg 0 Height]d/FGnd null d/BGnd null d
-/SetBGndFGnd{}b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx PaintData
-imagemask Width 0 +}repeat E}b E d/GDIpattfill{@ ` BGnd null ne PaintType 2 eq
-and{: BGnd aload ! scol fEOFill{O}{L}? ; FGnd aload ! U/iCol 2 ^ put @ 0 eq{!
-2}{@ 1 eq ~ 2 eq or{4}{5}?}? -1 $}if E @ patterncalc : 4 ^/PaintType get 2 eq
-{iCol 0 eq{6 -1 $}if iCol 1 eq iCol 2 eq or{8 -3 $}if iCol 3 eq iCol 4 eq or{9
--4 $}if iCol scol}if fEOFill{eoclip}{clip}? N patternfill ; N}b/hbf
-{GDIpattfill}b/hfMain{/fEOFill ~ d ~/iCol ~ d GDIpattfill}b/hf{: hfMain ;}b
-/mpstr 1 string d/mp{~ @ length 12 add dict copy `/PatternCTM matrix
-currentmatrix d/PatternMatrix ~ d/PatWidth XStep mpstr length mul d/PatHeight
-YStep d/FontType 3 d/Encoding 256 array d 3 string 0 1 255{Encoding ~ @ 3 ^ cvs
-cvn put}for !/FontMatrix matrix d/FontBBox BBox d/BuildChar{! @ ` XStep 0
-FontBBox aload ! setcachedevice/PaintProc , E : exec ;}b & E ~ @ 3 -1 $
-definefont}b/build_pattern{: GDIBWPatternDict ` Width Height E dsnap +S
-/GDIBWPatternMx matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix
-GDIBWPatternDict @ ` xOrg yOrg E matrix + mp CTMrestore}b/patterncalc{` :
-PatternCTM setmatrix PatternMatrix concat BBox aload ! ! ! + pathbbox ;
-PatHeight V ceiling 4 1 $ PatWidth V ceiling 4 1 $ PatHeight V floor 4 1 $
-PatWidth V floor 4 1 $ 2 ^ sub cvi abs ~ 3 ^ sub cvi abs ~ 4 2 $ PatHeight mul
-~ PatWidth mul ~ E}b/patternfill{5 -1 $ @ ` Ji PatternCTM setmatrix
-PatternMatrix concat 0 2 ^ 2 ^ M 0 1 mpstr length 1 sub{1 ^ mpstr 3 1 $ put}for
-! 2 ^{currentpoint 5 ^{mpstr S}repeat YStep add M}repeat ! ! ! ! E}b/pbf{: 14
-dict `/fGray ~ d/fEOFill ~ d/yOrg ~ d/xOrg ~ d/PaintData ~ d/OutputBPP ~ d
-/Height ~ d/Width ~ d/mx xOrg yOrg matrix + d fGray{/PaintProc{` Width Height
-OutputBPP mx PaintData image E}b}{/PaintProc{` Width Height 8 mx PaintData F
-OutputBPP 8 idiv colorimage E}b}? pathbbox fEOFill{eoclip}{clip}?/Top ~ d/Right
-~ d/Bottom ~ d/Left ~ d Top Height neg Bottom 1 sub{Left Width Right 1 sub{1 ^
-2 copy + & PaintProc neg ~ neg ~ +}bind for !}bind for E ;}b
-%%EndResource
-end reinitialize
-N 231 3070 M 231 3570 I 6042 3570 I 6042 3070 I 231 3070 I C 
-0.922 0.945 0.875 1 scol  O 0 0 0 1 scol 1 Lj 1 Lc 3 Lw solid N 231 3570 M 6042 3570 I 6042 3070 I 231 3070 I 231 3570 I C 
-: 0.652 0.645 +S K 
-; Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_T3Hdr 5.0 0
-{version cvi 2016 ge{32/FontType resourcestatus{pop pop true}{false}ifelse}
-{false}ifelse}exec/Is2016andT32? exch def/T32DefSBCMap{/CIDInit/ProcSet
-findresource begin 10 dict begin begincmap/CIDSystemInfo 3 dict dup begin
-/Registry(Adobe)def/Ordering(Identity1)def/Supplement 0 def end def/CMapType 0
-def/WMode 0 def 1 begincodespacerange<00><ff>endcodespacerange 1 begincidrange
-<00><ff>0 endcidrange endcmap/DrvSBCMap currentdict/CMap defineresource pop end
-end}bind def Is2016andT32?{T32DefSBCMap}def/T32RsrcBegin{Is2016andT32?{
-/BitmapFontInit/ProcSet findresource begin}if}bind def/T32RsrcEnd{Is2016andT32?
-{end}if}bind def/AddT32Char{6 1 roll 0 get 7 1 roll pop pop 5 1 roll pop
-findfont/TT32R get addglyph}bind def/AddT3Char{findfont dup 5 2 roll 1 index
-length 0 gt{cvx 1 index exch 4 exch put dup(imagemask)cvx cvn 5 exch put cvx}
-{pop cvx}ifelse 3 -1 roll/CharProcs get 3 1 roll put dup/Encoding get 5 -1 roll
-4 index put/Metrics get 3 1 roll put}bind def/AddT3T32Char Is2016andT32?{
-/AddT32Char}{/AddT3Char}ifelse load def/GreNewFontT32{5 dict begin exch
-/FontMatrix exch def exch/FontBBox exch def exch pop exch pop/CIDFontType 4 def
-dup currentdict end/CIDFont defineresource 3 -1 roll dup/DrvSBCMap dup/CMap
-resourcestatus{pop pop}{T32DefSBCMap}ifelse 5 -1 roll[exch]composefont dup
-length dict copy dup/FID undef begin exch/TT32R exch def currentdict end
-definefont/BitmapFontInit/ProcSet findresource begin/TT32R get[14 0 0 0 0 0]<>0
-4 -1 roll addglyph end}bind def/GreNewFontT3{11 dict begin pop/FontType 3 def
-/FontMatrix exch def/FontBBox exch def/Encoding exch def/CharProcs 257 dict def
-CharProcs/.notdef{}put/Metrics 257 dict def Metrics/.notdef 3 -1 roll put
-AddFontInfoBegin AddFontInfo AddFontInfoEnd/BuildChar{userdict begin/char exch
-def dup/charname exch/Encoding get char get def dup/Metrics get charname 2 copy
-known{get aload pop}{pop/.notdef get aload pop}ifelse setcachedevice begin
-Encoding char get CharProcs exch 2 copy known{get}{pop/.notdef get}ifelse end
-exec end}def currentdict end definefont pop}bind def/GreNewFont{Is2016andT32?
-{GreNewFontT32}{GreNewFontT3}ifelse}bind def/UDF3{Is2016andT32?{/BitmapFontInit
-/ProcSet findresource begin dup/CIDFont findresource removeall/CIDFont
-undefineresource undefinefont end}{pop UDF}ifelse}bind def
-%%EndResource
-end reinitialize
-/TT3781Cb00
-[66 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 66 div 0 0 -1 66 div 0 0 ]
-/__TT3781Cb00
-GreNewFont
-T32RsrcBegin
-
-1
-/g68 [56 0 6 -42 51 0 ] 
-/g68 [45 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7f00000007f0
-ff8000000ff8
-ffc000000ff8
-ffc000001ff8
-ffe000001ff8
-ffe000003ff8
-fbe000003ef8
-fbf000003ef8
-f9f000007cf8
-f9f800007cf8
-f9f80000fcf8
-f8f80000f8f8
-f8fc0000f8f8
-f87c0001f0f8
-f87e0001f0f8
-f87e0003e0f8
-f83e0003e0f8
-f83f0007e0f8
-f81f0007c0f8
-f81f8007c0f8
-f81f800f80f8
-f80fc00f80f8
-f80fc01f80f8
-f807c01f00f8
-f807e01f00f8
-f807e03e00f8
-f803f03e00f8
-f803f07e00f8
-f801f07c00f8
-f801f8fc00f8
-f801f8f800f8
-f800fcf800f8
-f800fdf800f8
-f8007df000f8
-f8007ff000f8
-f8007fe000f8
-f8003fe000f8
-f8003fc000f8
-f8001fc000f8
-f8001fc000f8
-f8001f8000f8
-f8000f8000f8
->
- ]
-/TT3781Cb00 AddT3T32Char
-
-2
-/g4 [38 0 1 -42 37 0 ] 
-/g4 [36 42 true [1 0 0 1 -1 42 ]  0 0]
-[<0001f80000
-0003fc0000
-0003fc0000
-0003fe0000
-0007fe0000
-0007fe0000
-000fff0000
-000fbf0000
-000f9f0000
-001f9f8000
-001f1f8000
-001f0f8000
-003f0fc000
-003e0fc000
-003e07e000
-007e07e000
-007c07e000
-007c03f000
-00fc03f000
-00f801f000
-01f801f800
-01f001f800
-01f000f800
-03f000fc00
-03e000fc00
-03e0007e00
-07e0007e00
-07fffffe00
-07ffffff00
-0fffffff00
-0fffffff00
-1f80001f80
-1f80001f80
-1f00001f80
-3f00000fc0
-3f00000fc0
-3e000007e0
-7e000007e0
-7e000007e0
-7c000003f0
-fc000003f0
-f8000003f0
->
- ]
-/TT3781Cb00 AddT3T32Char
-
-3
-/g18 [35 0 3 -43 33 1 ] 
-/g18 [30 44 true [1 0 0 1 -3 43 ]  0 0]
-[<0003fe00
-001fffc0
-007ffff0
-00fffff8
-03fffffc
-07fc03fc
-07f0007c
-0fc0003c
-1f80000c
-1f800000
-3f000000
-3e000000
-3e000000
-7c000000
-7c000000
-7c000000
-fc000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-fc000000
-7c000000
-7c000000
-7e000000
-7e000000
-3f000000
-3f000000
-1f80000c
-1fc0003c
-0ff0007c
-07fc03fc
-03fffffc
-01fffff8
-00ffffe0
-003fff80
-0007fc00
->
- ]
-/TT3781Cb00 AddT3T32Char
-T32RsrcEnd
-Pscript_WinNT_Incr begin
-%%BeginResource: file Pscript_Text 5.0 0
-/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
-/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
-length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
-{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
-/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
-if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
-{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
-StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
-! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy
-put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM
-makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0
-Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N
-/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT
-{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d
-/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict `
-/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d
-/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont
-Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1
-add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E
-/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $
-FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255
-idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector
-Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding
-length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2
-add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs
-putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^
-256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E
-/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~
-definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix
-makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ !
-findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2?
-{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
-get undefinefont}forall undefinefont}b
-%%EndResource
-end reinitialize
-F /F0 0 /0 F /TT3781Cb00 mF 
-/F0S42 F0 [66.145 0 0 -66.145 0 0 ] mFS
-F0S42 Ji 
-264 3162 M <01>S 
-321 3162 M <02>S  360 3162 M <03>S  
-N 2840 3041 M 2841 3037 I 2843 3035 I 2845 3032 I 2849 3029 I 2854 3026 I 2860 3024 I 2867 3022 I 2875 3020 I 2883 3018 I 2892 3016 I 2912 3013 I 2934 3012 I 2959 3011 I 2982 3012 I 3004 3013 I 3025 3016 I 3034 3018 I 3042 3020 I 3050 3022 I 3057 3024 I 3063 3026 I 3068 3029 I 3072 3032 I 3075 3035 I 3076 3037 I 3077 3041 I 3077 3041 I 3076 3043 I 3075 3046 I 3072 3049 I 3068 3052 I 3063 3054 I 3057 3057 I 3050 3059 I 3042 3061 I 3034 3063 I 3025 3065 I 3004 3067 I 2982 3069 I 2959 3070 I 2934 3069 I 2912 3067 I 2892 3065 I 2883 3063 I 2875 3061 I 2867 3059 I 2860 3057 I 2854 3054 I 2849 3052 I 2845 3049 I 2843 3046 I 2841 3043 I 2840 3041 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2840 3041 M 2841 3037 I 2843 3035 I 2845 3032 I 2849 3029 I 2854 3026 I 2860 3024 I 2867 3022 I 2875 3020 I 2883 3018 I 2892 3016 I 2912 3013 I 2934 3012 I 2959 3011 I 2982 3012 I 3004 3013 I 3025 3016 I 3034 3018 I 3042 3020 I 3050 3022 I 3057 3024 I 3063 3026 I 3068 3029 I 3072 3032 I 3075 3035 I 3076 3037 I 3077 3041 I 3077 3041 I 3076 3043 I 3075 3046 I 3072 3049 I 3068 3052 I 3063 3054 I 3057 3057 I 3050 3059 I 3042 3061 I 3034 3063 I 3025 3065 I 3004 3067 I 2982 3069 I 2959 3070 I 2934 3069 I 2912 3067 I 2892 3065 I 2883 3063 I 2875 3061 I 2867 3059 I 2860 3057 I 2854 3054 I 2849 3052 I 2845 3049 I 2843 3046 I 2841 3043 I 2840 3041 I : 0.652 0.645 +S K 
-; /TT3781Db00
-[98 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 98 div 0 0 -1 98 div 0 0 ]
-/__TT3781Db00
-GreNewFont
-T32RsrcBegin
-
-1
-/g68 [85 0 4 -63 84 0 ] 
-/g68 [80 63 true [1 0 0 1 -4 63 ]  0 0]
-[<0003ff00000000000ffc
-0007ff80000000001ffe
-000fffc0000000007ffe
-000fffc0000000007ffe
-001fffc000000000fffe
-001fffe000000001fffe
-001fffe000000001fffe
-001fffe000000003fffe
-001fffe000000003fffc
-003fcfe000000007fbfc
-003fcff00000000ff3fc
-003fcff00000000ff3fc
-003fcff00000001fe7fc
-003fcff00000003fc7f8
-007f8ff00000003fc7f8
-007f87f80000007f87f8
-007f87f80000007f87f8
-007f87f8000000ff0ff8
-007f87f8000001fe0ff0
-00ff07f8000001fe0ff0
-00ff03fc000003fc0ff0
-00ff03fc000003fc0ff0
-00ff03fc000007f81ff0
-00ff03fc00000ff01fe0
-01fe03fc00000ff01fe0
-01fe01fe00001fe01fe0
-01fe01fe00001fe01fe0
-01fe01fe00003fc03fe0
-01fe01fe00007f803fc0
-03fc01fe00007f803fc0
-03fc00ff0000ff003fc0
-03fc00ff0001ff003fc0
-03fc00ff0001fe007fc0
-03fc00ff0003fc007f80
-07f800ff0003fc007f80
-07f800ff8007f8007f80
-07f8007f800ff8007f80
-07f8007f800ff000ff80
-07f8007f801fe000ff00
-0ff0007f801fe000ff00
-0ff0007fc03fc000ff00
-0ff0003fc07fc000ff00
-0ff0003fc07f8001ff00
-0ff0003fc0ff0001fe00
-1fe0003fc1ff0001fe00
-1fe0003fe1fe0001fe00
-1fe0001fe3fe0001fe00
-1fe0001fe3fc0003fe00
-1fe0001fe7f80003fc00
-3fc0001feff80003fc00
-3fc0001ffff00003fc00
-3fc0001ffff00003fc00
-3fc0000fffe00007fc00
-3fc0000fffc00007f800
-7f80000fffc00007f800
-7f80000fff800007f800
-7f80000fff800007f800
-7f800007ff00000ff800
-7f800007fe00000ff000
-ff000007fe00000ff000
-ff000007fc00000ff000
-ff000007fc00000ff000
-fe000003f800000fe000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-2
-/g258 [51 0 4 -47 48 1 ] 
-/g258 [44 48 true [1 0 0 1 -4 47 ]  0 0]
-[<00001fe00000
-0000fffc03f0
-0003ffff07f0
-000fffff87f0
-001fffffc7f0
-003fffffefe0
-007fffffffe0
-00fff03fffe0
-01ffc007ffe0
-01ff0003ffe0
-03fe0001ffc0
-07fc0000ffc0
-07fc00007fc0
-0ff800003fc0
-0ff000003f80
-1ff000007f80
-1fe000007f80
-1fe000007f80
-3fc000007f80
-3fc00000ff00
-3fc00000ff00
-7f800000ff00
-7f800000ff00
-7f800001ff00
-7f800001fe00
-7f800001fe00
-ff000003fe00
-ff000003fe00
-ff000003fe00
-ff000007fc00
-ff000007fc00
-ff00000ffc00
-ff00001ffc00
-ff00001ffc00
-ff00003ff800
-ff00007ff800
-ff8000fff800
-ff8001fff800
-7fc003fff000
-7fe00ff7f000
-7ff03ff7f000
-3fffffe7f000
-3fffffc7f000
-1fffff8fe000
-0ffffe0fe000
-07fffc0fe000
-03fff00fc000
-007f80000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-3
-/g272 [41 0 4 -47 42 1 ] 
-/g272 [38 48 true [1 0 0 1 -4 47 ]  0 0]
-[<00001ff800
-0000ffff00
-0003ffffc0
-0007ffffe0
-001ffffff0
-003ffffff8
-007ffffffc
-00fff00ffc
-01ffc003fc
-01ff0001f8
-03fe000078
-07fc000030
-07f8000000
-0ff8000000
-0ff0000000
-1ff0000000
-1fe0000000
-1fe0000000
-3fc0000000
-3fc0000000
-3fc0000000
-7f80000000
-7f80000000
-7f80000000
-7f80000000
-7f00000000
-ff00000000
-ff00000000
-ff00000000
-ff00000000
-ff00000000
-ff00000000
-ff00000000
-ff00000000
-ff00000000
-ff80000000
-ff80000700
-7fc0001f00
-7fc0003f00
-7fe000ff00
-7ff807fe00
-3ffffffe00
-1ffffffc00
-1ffffff800
-0ffffff000
-07ffffc000
-01ffff0000
-003ff00000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-4
-/g94 [45 0 0 -64 44 1 ] 
-/g94 [44 65 true [1 0 0 1 0 64 ]  0 0]
-[<0000003ff000
-000003fffe00
-00000fffffc0
-00003fffffe0
-00007ffffff0
-0000fffffff0
-0001fffffff0
-0003ffe01ff0
-0007ff0007f0
-000ffe0000e0
-000ffc000060
-001ff8000000
-001ff0000000
-001ff0000000
-003fe0000000
-003fe0000000
-003fe0000000
-003fe0000000
-003fe0000000
-003fe0000000
-003fe0000000
-003ff0000000
-003ff0000000
-001ff8000000
-001ffc000000
-000ffe000000
-000fff800000
-0007ffc00000
-0007fff00000
-0003fffc0000
-0001fffe0000
-00007fff8000
-00003fffc000
-00001fffe000
-000007fff000
-000001fff800
-000000fffc00
-0000003ffc00
-0000001ffe00
-0000000ffe00
-00000007fe00
-00000003ff00
-00000003ff00
-00000001ff00
-00000001ff00
-00000001ff00
-00000001ff00
-00000001ff00
-00000001ff00
-00000003fe00
-00000003fe00
-00000003fe00
-00000007fc00
-3000000ffc00
-7c00001ff800
-7e00003ff800
-ffc000fff000
-fff007ffe000
-ffffffffc000
-ffffffff8000
-7fffffff0000
-3ffffffc0000
-0ffffff00000
-01ffffc00000
-001ffc000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-5
-/g393 [51 0 0 -47 47 18 ] 
-/g393 [47 65 true [1 0 0 1 0 47 ]  0 0]
-[<00000003fc00
-0007e01fff80
-000fe07fffc0
-000fe0ffffe0
-000fe3fffff0
-001fc7fffff8
-001fcffffff8
-001fdff81ffc
-001fdfe007fc
-001fff8007fc
-003fff0003fe
-003ffe0003fe
-003ffc0001fe
-003ff80001fe
-003ff00001fe
-007fe00001fe
-007fe00001fe
-007fc00001fe
-007fc00001fe
-007f800001fe
-00ff800001fe
-00ff000001fe
-00ff000003fc
-00ff000003fc
-00fe000003fc
-01fe000003fc
-01fe000003fc
-01fe000007f8
-01fe000007f8
-01fc000007f8
-03fc00000ff0
-03fc00000ff0
-03fc00001ff0
-03fc00001fe0
-03fc00003fe0
-07fc00007fc0
-07fe00007fc0
-07ff0000ff80
-07ff8001ff00
-07ffe007ff00
-07fff81ffe00
-0ffffffffc00
-0ffffffff800
-0ff7fffff000
-0ff3ffffe000
-0fe0ffff8000
-1fe07ffe0000
-1fe00ff80000
-1fe000000000
-1fe000000000
-1fc000000000
-3fc000000000
-3fc000000000
-3fc000000000
-3fc000000000
-3f8000000000
-7f8000000000
-7f8000000000
-7f8000000000
-7f8000000000
-7f0000000000
-ff0000000000
-ff0000000000
-ff0000000000
-fe0000000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-6
-/g87 [51 0 4 -63 52 0 ] 
-/g87 [48 63 true [1 0 0 1 -4 63 ]  0 0]
-[<0003ffffe000
-0007fffffe00
-000fffffff80
-000fffffffe0
-000ffffffff0
-000ffffffff8
-001ffffffffc
-001ff0007ffc
-001fe0001ffe
-001fe00007fe
-001fe00003fe
-003fe00003ff
-003fe00001ff
-003fc00001ff
-003fc00001ff
-003fc00001ff
-007fc00001ff
-007fc00001ff
-007f800001ff
-007f800001ff
-00ff800003fe
-00ff800003fe
-00ff000003fe
-00ff000007fc
-00ff000007fc
-01ff00000ffc
-01ff00001ff8
-01fe00003ff0
-01fe00007ff0
-01fe0000ffe0
-03fe0003ffc0
-03fe001fffc0
-03ffffffff80
-03fffffffe00
-03fffffffc00
-07fffffff000
-07ffffffe000
-07ffffff0000
-07fffff00000
-07f800000000
-0ff800000000
-0ff800000000
-0ff000000000
-0ff000000000
-0ff000000000
-1ff000000000
-1fe000000000
-1fe000000000
-1fe000000000
-3fe000000000
-3fe000000000
-3fc000000000
-3fc000000000
-3fc000000000
-7fc000000000
-7fc000000000
-7f8000000000
-7f8000000000
-7f8000000000
-ff8000000000
-ff8000000000
-ff0000000000
-ff0000000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-7
-/g396 [34 0 3 -47 37 0 ] 
-/g396 [34 47 true [1 0 0 1 -3 47 ]  0 0]
-[<0000007f00
-003f01ffc0
-007f07ffc0
-007f0fffc0
-007e1fffc0
-00fe3fffc0
-00fe7fff80
-00feffff80
-00feff0700
-00fffc0000
-01fff80000
-01fff00000
-01ffe00000
-01ffc00000
-03ff800000
-03ff800000
-03ff000000
-03fe000000
-03fe000000
-07fc000000
-07fc000000
-07fc000000
-07f8000000
-07f8000000
-0ff8000000
-0ff0000000
-0ff0000000
-0ff0000000
-0ff0000000
-1fe0000000
-1fe0000000
-1fe0000000
-1fe0000000
-1fe0000000
-3fc0000000
-3fc0000000
-3fc0000000
-3fc0000000
-7fc0000000
-7f80000000
-7f80000000
-7f80000000
-7f80000000
-ff00000000
-ff00000000
-ff00000000
-fe00000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-8
-/g381 [51 0 4 -47 47 1 ] 
-/g381 [43 48 true [1 0 0 1 -4 47 ]  0 0]
-[<00000ffe0000
-00007fffc000
-0001fffff000
-0007fffffc00
-000ffffffe00
-003fffffff00
-007fffffff80
-00fff807ff80
-00ffe001ffc0
-01ff80007fc0
-03ff00007fc0
-07fe00003fc0
-07fc00003fe0
-0ff800001fe0
-0ff000001fe0
-1ff000001fe0
-1fe000001fe0
-3fe000001fe0
-3fc000001fe0
-3fc000001fe0
-7fc000001fe0
-7f8000001fe0
-7f8000001fe0
-7f8000003fc0
-7f8000003fc0
-ff0000003fc0
-ff0000003fc0
-ff0000007fc0
-ff0000007f80
-ff0000007f80
-ff000000ff80
-ff000000ff00
-ff000001ff00
-ff000001fe00
-ff000003fe00
-ff800007fc00
-7f80000ffc00
-7fc0001ff800
-7fe0003ff000
-7ff000ffe000
-3ffc03ffe000
-3fffffffc000
-1fffffff8000
-0ffffffe0000
-07fffffc0000
-03fffff00000
-00ffffc00000
-000ffc000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-9
-/g448 [44 0 6 -46 45 0 ] 
-/g448 [39 46 true [1 0 0 1 -6 46 ]  0 0]
-[<7f000000fe
-ff000001fe
-ff000001fe
-ff000003fc
-ff800003fc
-ff800003fc
-7f800007f8
-7f800007f8
-7f800007f8
-7f80000ff0
-7fc0000ff0
-7fc0001fe0
-3fc0001fe0
-3fc0001fe0
-3fc0003fc0
-3fc0003fc0
-3fe0007f80
-3fe0007f80
-1fe000ff00
-1fe000ff00
-1fe001fe00
-1fe001fe00
-1ff003fc00
-1ff003fc00
-0ff007f800
-0ff007f800
-0ff00ff000
-0ff00ff000
-0ff81fe000
-07f81fe000
-07f83fc000
-07f87f8000
-07f87f8000
-07f8ff0000
-07fdff0000
-03fdfe0000
-03fffc0000
-03fffc0000
-03fff80000
-03fff00000
-03fff00000
-01ffe00000
-01ffc00000
-01ff800000
-01ff000000
-00fe000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-10
-/g349 [23 0 3 -64 24 0 ] 
-/g349 [21 64 true [1 0 0 1 -3 64 ]  0 0]
-[<0003f0
-000ff8
-000ff8
-001ff8
-001ff8
-001ff8
-001ff8
-001ff0
-001ff0
-000fc0
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-000000
-003f80
-007f80
-007f80
-007f80
-00ff00
-00ff00
-00ff00
-00ff00
-00fe00
-01fe00
-01fe00
-01fe00
-01fe00
-03fc00
-03fc00
-03fc00
-03fc00
-03fc00
-07f800
-07f800
-07f800
-07f800
-07f800
-0ff000
-0ff000
-0ff000
-0ff000
-0ff000
-1fe000
-1fe000
-1fe000
-1fe000
-1fe000
-3fc000
-3fc000
-3fc000
-3fc000
-7f8000
-7f8000
-7f8000
-7f8000
-7f8000
-ff0000
-ff0000
-ff0000
-fe0000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-11
-/g282 [51 0 4 -67 52 1 ] 
-/g282 [48 68 true [1 0 0 1 -4 67 ]  0 0]
-[<00000000007f
-0000000000ff
-0000000000ff
-0000000000ff
-0000000001fe
-0000000001fe
-0000000001fe
-0000000001fe
-0000000001fe
-0000000003fc
-0000000003fc
-0000000003fc
-0000000003fc
-0000000003fc
-0000000007f8
-0000000007f8
-0000000007f8
-0000000007f8
-0000000007f8
-000000000ff0
-00001fe00ff0
-0000fffc0ff0
-0003fffe0ff0
-000fffff8ff0
-001fffffdfe0
-003fffffffe0
-007fffffffe0
-00fff03fffe0
-01ffc00fffe0
-01ff0003ffc0
-03fe0001ffc0
-07fc0000ffc0
-07fc00007fc0
-0ff800007fc0
-0ff000007f80
-1ff000007f80
-1fe000007f80
-1fe000007f80
-3fc000007f80
-3fc00000ff00
-3fc00000ff00
-7f800000ff00
-7f800000ff00
-7f800000ff00
-7f800001fe00
-7f800001fe00
-ff000001fe00
-ff000003fe00
-ff000003fe00
-ff000007fc00
-ff000007fc00
-ff00000ffc00
-ff00000ffc00
-ff00001ffc00
-ff00003ff800
-ff00007ff800
-ff8000fff800
-7f8001fff800
-7fc003fff800
-7fe00ffff000
-7ff03ff7f000
-3fffffe7f000
-3fffffc7f000
-1fffff87f000
-0ffffe0fe000
-07fffc0fe000
-03fff00fe000
-007f80000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-12
-/g286 [47 0 4 -47 45 1 ] 
-/g286 [41 48 true [1 0 0 1 -4 47 ]  0 0]
-[<000007fe0000
-00007fffc000
-0001fffff000
-0007fffff800
-000ffffffc00
-001ffffffe00
-003ff807ff00
-007fe001ff00
-00ff8000ff80
-01ff00007f80
-03fe00007f80
-03fc00007f80
-07f800007f80
-07f800007f80
-0ff00000ff80
-0ff00000ff00
-1fe00001ff00
-1fe00007fe00
-3fc0001ffe00
-3fc001fffc00
-3ffffffff800
-7fffffffe000
-7fffffffc000
-7ffffffe0000
-7ffffff00000
-7ffffe000000
-ff0000000000
-ff0000000000
-ff0000000000
-ff0000000000
-ff0000000000
-ff0000000000
-ff0000000000
-ff0000000000
-ff0000000000
-ff0000000000
-ff8000000000
-7f8000000000
-7fc000000000
-7fe00001c000
-3ff00007c000
-3ffc00ffc000
-1fffffffc000
-0fffffff8000
-07ffffff8000
-03ffffff0000
-00fffff80000
-000fff000000
->
- ]
-/TT3781Db00 AddT3T32Char
-T32RsrcEnd
-F /F1 0 /0 F /TT3781Db00 mF 
-/F1S62 F1 [98.957 0 0 -98.957 0 0 ] mFS
-F1S62 Ji 
-2091 3041 M <01>S 
-2176 3041 M <02>S  2228 3041 M <03>S  2270 3041 M <04>S  2315 3041 M <02>S  2367 3041 M <05>S  2419 3041 M <06>S  2471 3041 M <07>S  2505 3041 M <08>S  2557 3041 M <09>S  2602 3041 M <0A>S  2624 3041 M <0B>S  2676 3041 M <0C>S  2724 3041 M <07>S  
-N 2484 1664 M 2484 2133 I 3907 2133 I 3907 1664 I 2484 1664 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2484 2133 M 3907 2133 I 3907 1664 I 2484 1664 I 2484 2133 I C 
-: 0.652 0.645 +S K 
-; T32RsrcBegin
-
-4
-/g104 [42 0 5 -42 36 1 ] 
-/g104 [31 43 true [1 0 0 1 -5 42 ]  0 0]
-[<f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-f800003e
-fc00007e
-7c00007c
-7e0000fc
-7e0000fc
-3f0001f8
-3fc003f8
-1ff01ff0
-0fffffe0
-07ffffc0
-03ffff80
-00fffe00
-001ff000
->
- ]
-/TT3781Cb00 AddT3T32Char
-
-5
-/g3 [15 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT3781Cb00 AddT3T32Char
-
-6
-/g90 [36 0 6 -42 33 0 ] 
-/g90 [27 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7fff0000
-ffffe000
-fffff800
-fffffc00
-fffffe00
-f801ff00
-f8007f00
-f8001f00
-f8001f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8000f80
-f8001f00
-f8003f00
-f8007e00
-f801fe00
-fffffc00
-fffff000
-ffffc000
-ffffc000
-ffffe000
-f80ff000
-f803f800
-f801f800
-f800fc00
-f800fc00
-f8007e00
-f8007e00
-f8003f00
-f8003f00
-f8003f80
-f8001f80
-f8001f80
-f8000fc0
-f8000fc0
-f8000fe0
-f80007e0
-f80007e0
-f80003e0
->
- ]
-/TT3781Cb00 AddT3T32Char
-
-7
-/g62 [28 0 6 -42 28 0 ] 
-/g62 [22 42 true [1 0 0 1 -6 42 ]  0 0]
-[<f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-f80000
-fffffc
-fffffc
-fffffc
-fffffc
-7ffffc
->
- ]
-/TT3781Cb00 AddT3T32Char
-T32RsrcEnd
-F0S42 Ji 
-2518 1757 M <04>S 
-2561 1757 M <01>S  2618 1757 M <05>S  2633 1757 M <06>S  2669 1757 M <07>S  2697 1757 M <03>S  
-N 3332 2226 M 3297 2226 I 3314 2191 I 3332 2226 I C 
- O N 3332 2226 M 3297 2226 I 3314 2191 I 3332 2226 I : 0.652 0.645 +S K 
-; N 3314 2226 M 3314 3070 I : 0.652 0.645 +S K 
-; N 2940 2976 M 2976 2976 I 2959 3011 I 2940 2976 I C 
- O N 2940 2976 M 2976 2976 I 2959 3011 I 2940 2976 I : 0.652 0.645 +S K 
-; N 2959 2976 M 2959 2133 I : 0.652 0.645 +S K 
-; N 3196 2162 M 3196 2159 I 3198 2156 I 3201 2153 I 3205 2151 I 3210 2148 I 3216 2146 I 3223 2144 I 3230 2142 I 3239 2140 I 3248 2138 I 3268 2135 I 3290 2134 I 3314 2133 I 3338 2134 I 3360 2135 I 3380 2138 I 3390 2140 I 3398 2142 I 3406 2144 I 3413 2146 I 3418 2148 I 3424 2151 I 3428 2153 I 3430 2156 I 3432 2159 I 3433 2162 I 3433 2162 I 3432 2165 I 3430 2168 I 3428 2171 I 3424 2174 I 3418 2176 I 3413 2178 I 3406 2181 I 3398 2183 I 3390 2185 I 3380 2186 I 3360 2189 I 3338 2191 I 3314 2191 I 3290 2191 I 3268 2189 I 3248 2186 I 3239 2185 I 3230 2183 I 3223 2181 I 3216 2178 I 3210 2176 I 3205 2174 I 3201 2171 I 3198 2168 I 3196 2165 I 3196 2162 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 3196 2162 M 3196 2159 I 3198 2156 I 3201 2153 I 3205 2151 I 3210 2148 I 3216 2146 I 3223 2144 I 3230 2142 I 3239 2140 I 3248 2138 I 3268 2135 I 3290 2134 I 3314 2133 I 3338 2134 I 3360 2135 I 3380 2138 I 3390 2140 I 3398 2142 I 3406 2144 I 3413 2146 I 3418 2148 I 3424 2151 I 3428 2153 I 3430 2156 I 3432 2159 I 3433 2162 I 3433 2162 I 3432 2165 I 3430 2168 I 3428 2171 I 3424 2174 I 3418 2176 I 3413 2178 I 3406 2181 I 3398 2183 I 3390 2185 I 3380 2186 I 3360 2189 I 3338 2191 I 3314 2191 I 3290 2191 I 3268 2189 I 3248 2186 I 3239 2185 I 3230 2183 I 3223 2181 I 3216 2178 I 3210 2176 I 3205 2174 I 3201 2171 I 3198 2168 I 3196 2165 I 3196 2162 I : 0.652 0.645 +S K 
-; T32RsrcBegin
-
-13
-/g104 [64 0 7 -63 63 1 ] 
-/g104 [56 64 true [1 0 0 1 -7 63 ]  0 0]
-[<003f800000007f
-007f80000000ff
-007f80000000ff
-007f80000000ff
-00ff80000001ff
-00ff00000001fe
-00ff00000001fe
-00ff00000001fe
-00ff00000001fe
-01ff00000003fe
-01fe00000003fc
-01fe00000003fc
-01fe00000003fc
-01fe00000003fc
-03fe00000007fc
-03fc00000007f8
-03fc00000007f8
-03fc00000007f8
-07fc0000000ff8
-07fc0000000ff8
-07f80000000ff0
-07f80000000ff0
-07f80000000ff0
-0ff80000001ff0
-0ff80000001fe0
-0ff00000001fe0
-0ff00000001fe0
-0ff00000001fe0
-1ff00000003fe0
-1fe00000003fc0
-1fe00000003fc0
-1fe00000003fc0
-1fe00000003fc0
-3fe00000007fc0
-3fc00000007f80
-3fc00000007f80
-3fc00000007f80
-7fc0000000ff80
-7fc0000000ff80
-7f80000000ff00
-7f80000000ff00
-7f80000000ff00
-7f80000001ff00
-ff80000001fe00
-ff80000001fe00
-ff80000003fe00
-ff80000003fc00
-ff80000007fc00
-ff80000007fc00
-ff8000000ff800
-7fc000001ff800
-7fc000001ff000
-7fe000003fe000
-7fe00000ffe000
-3ff00001ffc000
-3ffc0007ff8000
-1fff803fff0000
-0ffffffffe0000
-0ffffffffc0000
-07fffffff00000
-01ffffffe00000
-00ffffff800000
-001ffffc000000
-0003ffc0000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-14
-/g400 [39 0 0 -47 36 1 ] 
-/g400 [36 48 true [1 0 0 1 0 47 ]  0 0]
-[<00000ff800
-0000ffff80
-0003ffffe0
-0007fffff0
-000ffffff0
-001ffffff0
-003ff80ff0
-007fc001e0
-007f800060
-00ff000000
-00ff000000
-01fe000000
-01fe000000
-01fe000000
-01fe000000
-01fe000000
-01ff000000
-01ff800000
-00ffc00000
-00fff00000
-007ffc0000
-007fff8000
-003fffe000
-000ffff000
-0007fff800
-0001fffc00
-00007ffe00
-00000fff00
-000007ff00
-000001ff80
-000000ff80
-0000007f80
-0000007f80
-0000007f80
-0000007f80
-0000007f80
-000000ff00
-000000ff00
-700001ff00
-780003fe00
-fe0007fe00
-ffc03ffc00
-fffffff800
-fffffff000
-ffffffc000
-3fffff8000
-0ffffe0000
-00ffe00000
->
- ]
-/TT3781Db00 AddT3T32Char
-T32RsrcEnd
-F1S62 Ji 
-3502 2221 M <01>S 
-3587 2221 M <02>S  3639 2221 M <03>S  3681 2221 M <04>S  3726 2221 M <02>S  3778 2221 M <05>S  3830 2221 M <0D>S  3894 2221 M <0E>S  3933 2221 M <0C>S  3981 2221 M <07>S  
-N 1061 3041 M 1061 3037 I 1063 3035 I 1067 3032 I 1070 3029 I 1075 3026 I 1081 3024 I 1088 3022 I 1095 3020 I 1104 3018 I 1113 3016 I 1133 3013 I 1156 3012 I 1179 3011 I 1203 3012 I 1226 3013 I 1246 3016 I 1255 3018 I 1263 3020 I 1271 3022 I 1278 3024 I 1284 3026 I 1289 3029 I 1293 3032 I 1296 3035 I 1297 3037 I 1298 3041 I 1298 3041 I 1297 3043 I 1296 3046 I 1293 3049 I 1289 3052 I 1284 3054 I 1278 3057 I 1271 3059 I 1263 3061 I 1255 3063 I 1246 3065 I 1226 3067 I 1203 3069 I 1179 3070 I 1156 3069 I 1133 3067 I 1113 3065 I 1104 3063 I 1095 3061 I 1088 3059 I 1081 3057 I 1075 3054 I 1070 3052 I 1067 3049 I 1063 3046 I 1061 3043 I 1061 3041 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 1061 3041 M 1061 3037 I 1063 3035 I 1067 3032 I 1070 3029 I 1075 3026 I 1081 3024 I 1088 3022 I 1095 3020 I 1104 3018 I 1113 3016 I 1133 3013 I 1156 3012 I 1179 3011 I 1203 3012 I 1226 3013 I 1246 3016 I 1255 3018 I 1263 3020 I 1271 3022 I 1278 3024 I 1284 3026 I 1289 3029 I 1293 3032 I 1296 3035 I 1297 3037 I 1298 3041 I 1298 3041 I 1297 3043 I 1296 3046 I 1293 3049 I 1289 3052 I 1284 3054 I 1278 3057 I 1271 3059 I 1263 3061 I 1255 3063 I 1246 3065 I 1226 3067 I 1203 3069 I 1179 3070 I 1156 3069 I 1133 3067 I 1113 3065 I 1104 3063 I 1095 3061 I 1088 3059 I 1081 3057 I 1075 3054 I 1070 3052 I 1067 3049 I 1063 3046 I 1061 3043 I 1061 3041 I : 0.652 0.645 +S K 
-; T32RsrcBegin
-
-15
-/g62 [42 0 5 -63 38 0 ] 
-/g62 [33 63 true [1 0 0 1 -5 63 ]  0 0]
-[<0007f00000
-000ff00000
-000ff00000
-000ff00000
-001ff00000
-001ff00000
-001fe00000
-001fe00000
-001fe00000
-003fe00000
-003fc00000
-003fc00000
-003fc00000
-003fc00000
-007fc00000
-007f800000
-007f800000
-007f800000
-00ff800000
-00ff800000
-00ff000000
-00ff000000
-00ff000000
-01ff000000
-01ff000000
-01fe000000
-01fe000000
-01fe000000
-03fe000000
-03fe000000
-03fc000000
-03fc000000
-03fc000000
-07fc000000
-07f8000000
-07f8000000
-07f8000000
-07f8000000
-0ff8000000
-0ff0000000
-0ff0000000
-0ff0000000
-0ff0000000
-1ff0000000
-1fe0000000
-1fe0000000
-1fe0000000
-1fe0000000
-3fe0000000
-3fc0000000
-3fc0000000
-3fc0000000
-7fc0000000
-7fc0000000
-7f80000000
-7f80000000
-7fffffff80
-ffffffff80
-ffffffff80
-ffffffff80
-ffffffff00
-ffffffff00
-7ffffffe00
->
- ]
-/TT3781Db00 AddT3T32Char
-
-16
-/g410 [33 0 5 -58 34 1 ] 
-/g410 [29 59 true [1 0 0 1 -5 58 ]  0 0]
-[<000fe000
-001fe000
-001fe000
-001fe000
-003fc000
-003fc000
-003fc000
-003fc000
-003fc000
-007f8000
-007f8000
-007f8000
-7ffffff8
-7ffffff8
-fffffff8
-fffffff8
-fffffff8
-fffffff0
-fffffff0
-01fe0000
-01fe0000
-01fe0000
-01fe0000
-03fc0000
-03fc0000
-03fc0000
-03fc0000
-03fc0000
-07f80000
-07f80000
-07f80000
-07f80000
-07f80000
-0ff00000
-0ff00000
-0ff00000
-0ff00000
-0ff00000
-1fe00000
-1fe00000
-1fe00000
-1fe00000
-1fc00000
-3fc00000
-3fc00000
-3fc00000
-3fc00000
-3fc00000
-3fc00000
-3fc00000
-3fe00000
-3ff03800
-3ffff800
-3ffff800
-1ffff800
-1ffff000
-0ffff000
-03ffe000
-00ff8000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-17
-/g18 [52 0 6 -64 56 1 ] 
-/g18 [50 65 true [1 0 0 1 -6 64 ]  0 0]
-[<0000000ffe0000
-000000ffffe000
-000003fffff800
-00000ffffffe00
-00003fffffff00
-0000ffffffff80
-0001ffffffffc0
-0003fff803ffc0
-0007ffc000ffc0
-000fff00003fc0
-001ffc00000f80
-003ff800000780
-007ff000000300
-007fe000000000
-00ffc000000000
-01ff8000000000
-01ff8000000000
-03ff0000000000
-03fe0000000000
-07fe0000000000
-07fc0000000000
-0ffc0000000000
-0ff80000000000
-1ff80000000000
-1ff00000000000
-1ff00000000000
-3ff00000000000
-3fe00000000000
-3fe00000000000
-3fe00000000000
-7fc00000000000
-7fc00000000000
-7fc00000000000
-7fc00000000000
-7fc00000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ff800000000000
-ffc00000000000
-7fc00000000000
-7fc00000000000
-7fe00000000000
-7fe00000000000
-3ff00000038000
-3ff80000078000
-1ff800001f8000
-1ffe00007f8000
-0fff0001ff8000
-0fffe00fff0000
-07ffffffff0000
-03fffffffe0000
-01fffffffc0000
-00fffffff00000
-003fffffc00000
-000ffffe000000
-0000ffe0000000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-18
-/g373 [78 0 3 -47 73 0 ] 
-/g373 [70 47 true [1 0 0 1 -3 47 ]  0 0]
-[<0000001fe00001fe00
-003f00fff8000fff80
-007f03fffc003fffc0
-007f07fffe00ffffe0
-007f1fffff01fffff0
-00fe3fffff03fffff8
-00fe7fffff87fffff8
-00feffc1ff8ffc1ff8
-00feff00ff9fe00ffc
-00fffc007fbfc007fc
-01fff8007fff0007fc
-01fff0007ffe0007fc
-01ffe0003ffc0003fc
-01ffc0003ffc0003fc
-03ff80003ff80003fc
-03ff00003ff00007fc
-03ff00007fe00007f8
-03fe00007fe00007f8
-03fe00007fc00007f8
-07fc00007fc00007f8
-07fc00007f800007f8
-07f800007f800007f8
-07f80000ff80000ff0
-07f80000ff00000ff0
-0ff80000ff00000ff0
-0ff00000ff00000ff0
-0ff00000fe00000ff0
-0ff00001fe00001fe0
-0ff00001fe00001fe0
-1fe00001fe00001fe0
-1fe00001fe00001fe0
-1fe00001fe00001fe0
-1fe00003fc00003fc0
-1fe00003fc00003fc0
-3fc00003fc00003fc0
-3fc00003fc00003fc0
-3fc00003fc00003fc0
-3fc00003fc00003fc0
-7fc00007f800007f80
-7f800007f800007f80
-7f800007f800007f80
-7f800007f800007f80
-7f800007f800007f80
-ff00000ff00000ff00
-ff00000ff00000ff00
-ff00000ff00000ff00
-fe00000fe00000fe00
->
- ]
-/TT3781Db00 AddT3T32Char
-
-19
-/g3 [22 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT3781Db00 AddT3T32Char
-T32RsrcEnd
-9 2923 M <0F>S 
-51 2923 M <10>S  85 2923 M <0C>S  132 2923 M <0D>S  197 2923 M <0C>S  244 2923 M <11>S  297 2923 M <12>S  376 2923 M <02>S  428 2923 M <03>S  470 2923 M <04>S  515 2923 M <02>S  567 2923 M <05>S  618 2923 M <06>S  670 2923 M <07>S  705 2923 M <08>S  757 2923 M <09>S  801 2923 M <0A>S 
-824 2923 M <0B>S  876 2923 M <0C>S  924 2923 M <07>S  958 2923 M <13>S  
-T32RsrcBegin
-
-20
-/g876 [38 0 -6 -71 47 14 ] 
-/g876 [53 85 true [1 0 0 1 6 71 ]  0 0]
-[<000000000003f8
-000000000007f8
-000000000007f8
-00000000000ff0
-00000000000ff0
-00000000001fe0
-00000000003fe0
-00000000003fc0
-00000000007fc0
-00000000007f80
-0000000000ff80
-0000000000ff00
-0000000001fe00
-0000000001fe00
-0000000003fc00
-0000000007fc00
-0000000007f800
-000000000ff800
-000000000ff000
-000000001ff000
-000000001fe000
-000000003fc000
-000000003fc000
-000000007f8000
-00000000ff8000
-00000000ff0000
-00000001ff0000
-00000001fe0000
-00000003fc0000
-00000003fc0000
-00000007f80000
-0000000ff80000
-0000000ff00000
-0000001ff00000
-0000001fe00000
-0000003fe00000
-0000003fc00000
-0000007f800000
-0000007f800000
-000000ff000000
-000001ff000000
-000001fe000000
-000003fe000000
-000003fc000000
-000007fc000000
-000007f8000000
-00000ff0000000
-00000ff0000000
-00001fe0000000
-00003fe0000000
-00003fc0000000
-00007fc0000000
-00007f80000000
-0000ff80000000
-0000ff00000000
-0001fe00000000
-0001fe00000000
-0003fc00000000
-0007fc00000000
-0007f800000000
-000ff800000000
-000ff000000000
-001fe000000000
-001fe000000000
-003fc000000000
-007fc000000000
-007f8000000000
-00ff8000000000
-00ff0000000000
-01ff0000000000
-01fe0000000000
-03fc0000000000
-03fc0000000000
-07f80000000000
-0ff80000000000
-0ff00000000000
-1ff00000000000
-1fe00000000000
-3fe00000000000
-3fc00000000000
-7f800000000000
-7f800000000000
-ff000000000000
-ff000000000000
-fc000000000000
->
- ]
-/TT3781Db00 AddT3T32Char
-T32RsrcEnd
-982 2923 M <14>S 
-T32RsrcBegin
-
-21
-/g28 [48 0 5 -63 51 0 ] 
-/g28 [46 63 true [1 0 0 1 -5 63 ]  0 0]
-[<0007fffffffc
-000ffffffffc
-001ffffffffc
-001ffffffffc
-001ffffffffc
-001ffffffff8
-003ffffffff8
-003fe0000000
-003fc0000000
-003fc0000000
-003fc0000000
-007fc0000000
-007fc0000000
-007f80000000
-007f80000000
-007f80000000
-00ff80000000
-00ff80000000
-00ff00000000
-00ff00000000
-00ff00000000
-01ff00000000
-01ff00000000
-01fe00000000
-01fe00000000
-01fe00000000
-03fffffff800
-03fffffff800
-03fffffff800
-03fffffff800
-03fffffff800
-07fffffff000
-07fffffff000
-07f800000000
-07f800000000
-07f800000000
-07f800000000
-0ff800000000
-0ff000000000
-0ff000000000
-0ff000000000
-0ff000000000
-1ff000000000
-1fe000000000
-1fe000000000
-1fe000000000
-1fe000000000
-3fe000000000
-3fc000000000
-3fc000000000
-3fc000000000
-3fc000000000
-7fc000000000
-7f8000000000
-7f8000000000
-7f8000000000
-7fffffffe000
-ffffffffe000
-ffffffffe000
-ffffffffe000
-ffffffffc000
-ffffffffc000
-7fffffff8000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-22
-/g374 [51 0 3 -47 46 0 ] 
-/g374 [43 47 true [1 0 0 1 -3 47 ]  0 0]
-[<0000001fe000
-003f00fffc00
-007f03fffe00
-007f07ffff00
-007f1fffff80
-00fe3fffffc0
-00fe7fffffc0
-00feffc0ffc0
-00feff007fe0
-00fffc003fe0
-01fff8003fe0
-01fff0003fe0
-01ffe0001fe0
-01ffc0001fe0
-03ff80001fe0
-03ff80001fe0
-03ff00003fc0
-03fe00003fc0
-03fe00003fc0
-07fc00003fc0
-07fc00003fc0
-07f800007f80
-07f800007f80
-07f800007f80
-0ff800007f80
-0ff000007f80
-0ff00000ff00
-0ff00000ff00
-0ff00000ff00
-1fe00000ff00
-1fe00001fe00
-1fe00001fe00
-1fe00001fe00
-1fe00001fe00
-3fc00003fe00
-3fc00003fc00
-3fc00003fc00
-3fc00003fc00
-7fc00003fc00
-7f800007f800
-7f800007f800
-7f800007f800
-7f800007f800
-ff00000ff000
-ff00000ff000
-ff00000ff000
-fe00000fe000
->
- ]
-/TT3781Db00 AddT3T32Char
-
-23
-/g271 [51 0 3 -67 47 1 ] 
-/g271 [44 68 true [1 0 0 1 -3 67 ]  0 0]
-[<0003f8000000
-0007f8000000
-0007f8000000
-0007f8000000
-000ff0000000
-000ff0000000
-000ff0000000
-000ff0000000
-000ff0000000
-001fe0000000
-001fe0000000
-001fe0000000
-001fe0000000
-001fe0000000
-003fc0000000
-003fc0000000
-003fc0000000
-003fc0000000
-003f80000000
-007f80000000
-007f801fe000
-007f807ffc00
-007f81fffe00
-007f07ffff00
-00ff0fffff80
-00ff1fffffc0
-00ff3fffffc0
-00ff7fc0ffe0
-00feff007fe0
-01fffc003fe0
-01fff8001fe0
-01fff0001ff0
-01ffe0000ff0
-01ffc0000ff0
-03ff80000ff0
-03ff00000ff0
-03ff00000ff0
-03fe00000ff0
-07fe00000ff0
-07fc00000ff0
-07fc00000ff0
-07f800000ff0
-07f800001fe0
-0ff800001fe0
-0ff000001fe0
-0ff000001fe0
-0ff000001fe0
-0ff000003fc0
-1fe000003fc0
-1fe000003fc0
-1fe000007f80
-1fe000007f80
-1fe00000ff80
-3fc00000ff00
-3fc00001ff00
-3fe00003fe00
-3ff00003fe00
-3ff80007fc00
-7ffc000ffc00
-7ffe003ff800
-7fffc0fff000
-7fffffffe000
-7f7fffffc000
-ff3fffff8000
-fe1fffff0000
-fe0ffffc0000
-fc03fff00000
-00007f800000
->
- ]
-/TT3781Db00 AddT3T32Char
-T32RsrcEnd
-20 3042 M <0F>S 
-62 3042 M <10>S  96 3042 M <0C>S  144 3042 M <15>S  193 3042 M <16>S  244 3042 M <17>S  296 3042 M <11>S  349 3042 M <12>S  428 3042 M <02>S  480 3042 M <03>S  522 3042 M <04>S  567 3042 M <02>S  618 3042 M <05>S  670 3042 M <06>S  722 3042 M <07>S  757 3042 M <08>S  808 3042 M <09>S 
-853 3042 M <0A>S  876 3042 M <0B>S  928 3042 M <0C>S  976 3042 M <07>S  
-N 705 1664 M 705 2133 I 2128 2133 I 2128 1664 I 705 1664 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 705 2133 M 2128 2133 I 2128 1664 I 705 1664 I 705 2133 I C 
-: 0.652 0.645 +S K 
-; F0S42 Ji 
-738 1757 M <06>S 
-774 1757 M <06>S  810 1757 M <03>S  
-T32RsrcBegin
-
-8
-/g876 [25 0 0 -47 25 9 ] 
-/g876 [25 56 true [1 0 0 1 0 47 ]  0 0]
-[<00000f80
-00000f80
-00001f80
-00001f00
-00001f00
-00003e00
-00003e00
-00007e00
-00007c00
-00007c00
-0000fc00
-0000f800
-0000f800
-0001f800
-0001f000
-0003f000
-0003e000
-0003e000
-0007e000
-0007c000
-0007c000
-000fc000
-000f8000
-000f8000
-001f8000
-001f0000
-003f0000
-003e0000
-003e0000
-007e0000
-007c0000
-007c0000
-00fc0000
-00f80000
-00f80000
-01f00000
-01f00000
-03f00000
-03e00000
-03e00000
-07e00000
-07c00000
-07c00000
-0fc00000
-0f800000
-1f800000
-1f000000
-1f000000
-3f000000
-3e000000
-3e000000
-7e000000
-7c000000
-7c000000
-fc000000
-f8000000
->
- ]
-/TT3781Cb00 AddT3T32Char
-T32RsrcEnd
-846 1757 M <08>S 
-873 1757 M <06>S 
-909 1757 M <06>S  945 1757 M <01>S  
-1002 1757 M <08>S 
-T32RsrcBegin
-
-9
-/g75 [44 0 3 -43 40 1 ] 
-/g75 [37 44 true [1 0 0 1 -3 43 ]  0 0]
-[<0003ff0000
-001fffe000
-007ffff800
-01fffffc00
-03ffffff00
-07fc01ff00
-0ff0007f80
-0fc0001fc0
-1f80000fc0
-1f000007e0
-3f000003e0
-3e000003f0
-7e000001f0
-7c000001f0
-7c000001f0
-7c000001f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-f8000000f8
-fc000001f0
-7c000001f0
-7c000001f0
-7c000003f0
-7e000003e0
-3e000007e0
-3f000007c0
-1f80000fc0
-1fc0001f80
-0fe0007f80
-07fc01ff00
-07fffffe00
-01fffffc00
-00fffff000
-003fffc000
-0007fe0000
->
- ]
-/TT3781Cb00 AddT3T32Char
-T32RsrcEnd
-1029 1757 M <09>S 
-1073 1757 M <02>S  1112 1757 M <01>S  
-N 1553 2226 M 1517 2226 I 1535 2191 I 1553 2226 I C 
- O N 1553 2226 M 1517 2226 I 1535 2191 I 1553 2226 I : 0.652 0.645 +S K 
-; N 1535 2226 M 1535 3070 I : 0.652 0.645 +S K 
-; N 1162 2976 M 1197 2976 I 1179 3011 I 1162 2976 I C 
- O N 1162 2976 M 1197 2976 I 1179 3011 I 1162 2976 I : 0.652 0.645 +S K 
-; N 1179 2976 M 1179 2133 I : 0.652 0.645 +S K 
-; N 1416 2162 M 1417 2159 I 1419 2156 I 1422 2153 I 1426 2151 I 1431 2148 I 1437 2146 I 1444 2144 I 1451 2142 I 1460 2140 I 1469 2138 I 1489 2135 I 1511 2134 I 1535 2133 I 1559 2134 I 1581 2135 I 1602 2138 I 1610 2140 I 1619 2142 I 1627 2144 I 1633 2146 I 1640 2148 I 1644 2151 I 1648 2153 I 1652 2156 I 1653 2159 I 1654 2162 I 1654 2162 I 1653 2165 I 1652 2168 I 1648 2171 I 1644 2173 I 1640 2176 I 1633 2178 I 1627 2181 I 1619 2183 I 1610 2185 I 1602 2186 I 1581 2189 I 1559 2191 I 1535 2191 I 1511 2191 I 1489 2189 I 1469 2186 I 1460 2185 I 1451 2183 I 1444 2181 I 1437 2178 I 1431 2176 I 1426 2173 I 1422 2171 I 1419 2168 I 1417 2165 I 1416 2162 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 1416 2162 M 1417 2159 I 1419 2156 I 1422 2153 I 1426 2151 I 1431 2148 I 1437 2146 I 1444 2144 I 1451 2142 I 1460 2140 I 1469 2138 I 1489 2135 I 1511 2134 I 1535 2133 I 1559 2134 I 1581 2135 I 1602 2138 I 1610 2140 I 1619 2142 I 1627 2144 I 1633 2146 I 1640 2148 I 1644 2151 I 1648 2153 I 1652 2156 I 1653 2159 I 1654 2162 I 1654 2162 I 1653 2165 I 1652 2168 I 1648 2171 I 1644 2173 I 1640 2176 I 1633 2178 I 1627 2181 I 1619 2183 I 1610 2185 I 1602 2186 I 1581 2189 I 1559 2191 I 1535 2191 I 1511 2191 I 1489 2189 I 1469 2186 I 1460 2185 I 1451 2183 I 1444 2181 I 1437 2178 I 1431 2176 I 1426 2173 I 1422 2171 I 1419 2168 I 1417 2165 I 1416 2162 I : 0.652 0.645 +S K 
-; F1S62 Ji 
-1699 2220 M <0F>S 
-1741 2220 M <10>S  1775 2220 M <0C>S  1823 2220 M <0D>S  1887 2220 M <0C>S  1935 2220 M <11>S  1987 2220 M <12>S  2066 2220 M <02>S  2118 2220 M <03>S  2160 2220 M <04>S  2205 2220 M <02>S  2257 2220 M <05>S  2309 2220 M <0D>S  2373 2220 M <0E>S  2412 2220 M <0C>S  2460 2220 M <07>S  2495 2220 M <13>S 
-
-2518 2220 M <14>S 
-1710 2339 M <0F>S 
-1752 2339 M <10>S  1785 2339 M <0C>S  1833 2339 M <15>S  1882 2339 M <16>S  1934 2339 M <17>S  1986 2339 M <11>S  2038 2339 M <12>S  2117 2339 M <02>S  2169 2339 M <03>S  2211 2339 M <04>S  2256 2339 M <02>S  2308 2339 M <05>S  2360 2339 M <0D>S  2424 2339 M <0E>S  2463 2339 M <0C>S  2511 2339 M <07>S 
-
-/TT3781Eb00
-[98 0 0 0 0 0 ] 
- 256 array 0 1 255 {1 index exch /.notdef put} for 
-[0 0 0 0 ] 
-[1 98 div 0 0 -1 98 div 0 0 ]
-/__TT3781Eb00
-GreNewFont
-T32RsrcBegin
-
-1
-/g367 [24 0 6 -67 18 0 ] 
-/g367 [12 67 true [1 0 0 1 -6 67 ]  0 0]
-[<7fe0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-fff0
-7fe0
->
- ]
-/TT3781Eb00 AddT3T32Char
-
-2
-/g410 [34 0 1 -58 31 1 ] 
-/g410 [30 59 true [1 0 0 1 -1 58 ]  0 0]
-[<00ffc000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-7ffffff8
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-fffffffc
-7ffffff8
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01ffe000
-01fff000
-01fff000
-01fff81c
-00fffffc
-00fffffc
-00fffffc
-007ffffc
-007ffffc
-003ffffc
-001ffffc
-000ffff8
-0007fff0
-0000ffc0
->
- ]
-/TT3781Eb00 AddT3T32Char
-
-3
-/g286 [50 0 4 -47 46 1 ] 
-/g286 [42 48 true [1 0 0 1 -4 47 ]  0 0]
-[<00007fe00000
-0007fffe0000
-001fffff8000
-007fffffe000
-00fffffff000
-01fffffff800
-03fffffffc00
-07fffffffc00
-0ffffffffe00
-0fffc07fff00
-1fff001fff00
-1ffe000fff80
-3ffc0007ff80
-3ff80007ff80
-7ff80007ff80
-7ff80003ffc0
-7ff00003ffc0
-7ff00003ffc0
-fff00003ffc0
-ffffffffffc0
-ffffffffffc0
-ffffffffffc0
-ffffffffffc0
-ffffffffffc0
-ffffffffffc0
-ffffffffff80
-ffffffffff00
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-7ff800000000
-7ff800000000
-7ff800000000
-7ffc00000000
-3ffc00000000
-3ffe00000f00
-3fff80003f00
-1fffe003ff00
-0fffffffff00
-0fffffffff00
-07ffffffff00
-03ffffffff00
-01ffffffff00
-007ffffffe00
-003ffffff800
-0007ffffc000
-00007ff80000
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-F /F2 0 /0 F /TT3781Eb00 mF 
-/F2S62 F2 [98.957 0 0 -98.957 0 0 ] mFS
-F2S62 Ji 
-951 2513 M <01>S 
-976 2513 M <02>S  1011 2513 M <03>S  
-T32RsrcBegin
-
-4
-/g882 [30 0 3 -29 28 -19 ] 
-/g882 [25 10 true [1 0 0 1 -3 29 ]  0 0]
-[<7fffff00
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-ffffff80
-7fffff00
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-1061 2513 M <04>S 
-T32RsrcBegin
-
-5
-/g437 [53 0 6 -46 47 1 ] 
-/g437 [41 47 true [1 0 0 1 -6 46 ]  0 0]
-[<7fe00003ff00
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff0000fff80
-fff8000fff80
-fff8003fff80
-fffc007fff80
-fffe00ffff80
-7fff03ffff80
-7fffffffff80
-7fffffffff80
-3fffffffff80
-3ffffffdff80
-1ffffff9ff80
-1ffffff1ff80
-0fffffe1ff80
-07ffffc1ff80
-03ffff01ff80
-00fffe00ff00
-001ff0000000
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-1092 2513 M <05>S 
-1146 2513 M <03>S  
-1196 2513 M <04>S 
-T32RsrcBegin
-
-6
-/g272 [41 0 3 -47 38 1 ] 
-/g272 [35 48 true [1 0 0 1 -3 47 ]  0 0]
-[<0000ffc000
-0007fffc00
-001fffff00
-007fffff80
-00ffffffc0
-01ffffffe0
-03ffffffe0
-07ffffffe0
-0fffffffe0
-0fffffffe0
-1fffe03fe0
-3fff800fe0
-3ffe0003c0
-3ffe0001c0
-7ffc000000
-7ff8000000
-7ff8000000
-7ff8000000
-fff8000000
-fff0000000
-fff0000000
-fff0000000
-fff0000000
-fff0000000
-fff0000000
-fff0000000
-fff0000000
-fff0000000
-fff0000000
-fff0000000
-fff8000000
-7ff8000000
-7ff8000000
-7ffc0000c0
-7ffe0001e0
-3ffe0003e0
-3fff800fe0
-3fffe03fe0
-1fffffffe0
-1fffffffe0
-0fffffffe0
-07ffffffe0
-03ffffffe0
-01ffffffc0
-00ffffff80
-003ffffe00
-000ffff800
-0001ff8000
->
- ]
-/TT3781Eb00 AddT3T32Char
-
-7
-/g373 [81 0 6 -47 75 0 ] 
-/g373 [69 47 true [1 0 0 1 -6 47 ]  0 0]
-[<000007fc00003fc000
-7f803fff8001fff800
-ffc07fffe007fffe00
-ffc1fffff00fffff00
-ffc3fffff81fffff80
-ffc7fffffc7fffffc0
-ffdffffffcffffffc0
-ffffffffffffffffe0
-ffffffffffffffffe0
-fffffffffffffffff0
-fffffffffffffffff0
-ffffe07fffff07fff0
-ffff803ffffc03fff8
-ffff001ffff801fff8
-fffe000ffff000fff8
-fffc000fffe000fff8
-fff80007ffc0007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-fff00007ff80007ff8
-7fe00003ff00003ff0
->
- ]
-/TT3781Eb00 AddT3T32Char
-
-8
-/g258 [49 0 3 -47 42 1 ] 
-/g258 [39 48 true [1 0 0 1 -3 47 ]  0 0]
-[<0007ffc000
-00fffffc00
-07ffffff00
-1fffffffc0
-1fffffffe0
-3ffffffff0
-3ffffffff8
-3ffffffff8
-3ffffffffc
-3ffc01fffc
-3fe0007ffc
-3f00003ffe
-1c00003ffe
-0000001ffe
-0000001ffe
-0000001ffe
-0000001ffe
-0000001ffe
-0000001ffe
-0001fffffe
-003ffffffe
-00fffffffe
-03fffffffe
-07fffffffe
-1ffffffffe
-1ffffffffe
-3ffffffffe
-7fff801ffe
-7ffe001ffe
-7ff8001ffe
-fff8001ffe
-fff0001ffe
-fff0001ffe
-fff0001ffe
-fff0001ffe
-fff0003ffe
-fff8007ffe
-fffc01fffe
-7ffe07fffe
-7ffffffffe
-7ffffffffe
-3ffffffffe
-1ffffff7fe
-1fffffe7fe
-0fffffc7fe
-03ffff07fe
-00fffe03fc
-001ff00000
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-1227 2513 M <06>S 
-1269 2513 M <07>S  1351 2513 M <08>S  1401 2513 M <06>S  
-1443 2513 M <04>S 
-T32RsrcBegin
-
-9
-/g400 [40 0 4 -47 37 1 ] 
-/g400 [33 48 true [1 0 0 1 -4 47 ]  0 0]
-[<000ffe0000
-007fffe000
-01fffffc00
-07fffffe00
-0ffffffe00
-1ffffffe00
-3ffffffe00
-3ffffffe00
-7ffffffe00
-7ffc03fe00
-fff0003e00
-ffe0000c00
-ffe0000000
-ffe0000000
-ffe0000000
-fff0000000
-fff8000000
-fffe000000
-7fff800000
-7ffff00000
-3ffffe0000
-3fffff8000
-1fffffe000
-0ffffff000
-03fffff800
-01fffffc00
-007ffffe00
-000fffff00
-0003ffff00
-00007fff80
-00001fff80
-00000fff80
-000007ff80
-000007ff80
-000007ff80
-600007ff80
-f8000fff80
-fe001fff00
-ffc07fff00
-ffffffff00
-fffffffe00
-fffffffe00
-fffffffc00
-fffffff800
-7fffffe000
-1fffffc000
-07ffff0000
-007ff00000
->
- ]
-/TT3781Eb00 AddT3T32Char
-
-10
-/g393 [53 0 6 -47 49 18 ] 
-/g393 [43 65 true [1 0 0 1 -6 47 ]  0 0]
-[<000007fc0000
-7f803fff8000
-ffc0ffffe000
-ffc1fffff000
-ffc3fffff800
-ffcffffffc00
-ffdffffffe00
-fffffffffe00
-ffffffffff00
-ffffffffff00
-ffffe07fff80
-ffff803fff80
-ffff001fffc0
-fffe000fffc0
-fffc000fffc0
-fff80007ffc0
-fff00007ffc0
-fff00007ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00007ffe0
-fff00007ffc0
-fff00007ffc0
-fff80007ffc0
-fffc000fffc0
-fffe001fffc0
-ffff001fff80
-ffff803fff80
-ffffe0ffff00
-ffffffffff00
-fffffffffe00
-fffffffffe00
-fffffffffc00
-fffffffff800
-fff7fffff000
-fff1ffffe000
-fff0ffffc000
-fff03fff0000
-fff00ff80000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-7fe000000000
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-1473 2513 M <09>S 
-1513 2513 M <08>S  1563 2513 M <0A>S  
-T32RsrcBegin
-
-11
-/g856 [26 0 6 -15 20 0 ] 
-/g856 [14 15 true [1 0 0 1 -6 15 ]  0 0]
-[<1fe0
-3ff8
-7ffc
-7ffc
-fffc
-fffc
-fffc
-fffc
-fffc
-fffc
-fffc
-7ffc
-7ffc
-3ff8
-1fe0
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-1617 2513 M <0B>S 
-T32RsrcBegin
-
-12
-/g346 [53 0 6 -67 47 0 ] 
-/g346 [41 67 true [1 0 0 1 -6 67 ]  0 0]
-[<7fe000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff007fc0000
-fff03fff8000
-fff0ffffe000
-fff1fffff000
-fff3fffff800
-fff7fffffc00
-fffffffffc00
-fffffffffe00
-fffffffffe00
-ffffffffff00
-ffffffffff00
-ffffe07fff00
-ffff803fff00
-ffff001fff80
-fffe000fff80
-fffc000fff80
-fff80007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-7fe00003ff00
->
- ]
-/TT3781Eb00 AddT3T32Char
-
-13
-/g3 [22 0 0 0 1 1 ] 
-/g3 [1 1 true [1 0 0 1 0 0 ]  0 0]
-[<00
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-1644 2513 M <0C>S 
-1697 2513 M <0D>S  
-T32RsrcBegin
-
-14
-/g876 [43 0 0 -72 41 15 ] 
-/g876 [41 87 true [1 0 0 1 0 72 ]  0 0]
-[<00000001ff00
-00000007ff80
-00000007ff80
-00000007ff80
-0000000fff80
-0000000fff00
-0000001fff00
-0000001ffe00
-0000001ffe00
-0000003ffe00
-0000003ffc00
-0000003ffc00
-0000007ffc00
-0000007ff800
-0000007ff800
-000000fff800
-000000fff000
-000000fff000
-000001fff000
-000001ffe000
-000003ffe000
-000003ffe000
-000003ffc000
-000007ffc000
-000007ff8000
-000007ff8000
-00000fff8000
-00000fff0000
-00000fff0000
-00001fff0000
-00001ffe0000
-00001ffe0000
-00003ffe0000
-00003ffc0000
-00003ffc0000
-00007ffc0000
-00007ff80000
-0000fff80000
-0000fff00000
-0000fff00000
-0001fff00000
-0001ffe00000
-0001ffe00000
-0003ffe00000
-0003ffc00000
-0003ffc00000
-0007ffc00000
-0007ff800000
-0007ff800000
-000fff800000
-000fff000000
-001fff000000
-001ffe000000
-001ffe000000
-003ffe000000
-003ffc000000
-003ffc000000
-007ffc000000
-007ff8000000
-007ff8000000
-00fff8000000
-00fff0000000
-00fff0000000
-01fff0000000
-01ffe0000000
-01ffe0000000
-03ffe0000000
-03ffc0000000
-07ffc0000000
-07ff80000000
-07ff80000000
-0fff80000000
-0fff00000000
-0fff00000000
-1fff00000000
-1ffe00000000
-1ffe00000000
-3ffe00000000
-3ffc00000000
-3ffc00000000
-7ffc00000000
-7ff800000000
-fff800000000
-fff000000000
-fff000000000
-fff000000000
-7fc000000000
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-1720 2513 M <0E>S 
-1764 2513 M <0D>S  
-957 2632 M <01>S 
-982 2632 M <02>S  1017 2632 M <03>S  
-1067 2632 M <04>S 
-T32RsrcBegin
-
-15
-/g374 [53 0 6 -47 47 0 ] 
-/g374 [41 47 true [1 0 0 1 -6 47 ]  0 0]
-[<000007fc0000
-7f803fff8000
-ffc07fffe000
-ffc1fffff000
-ffc3fffff800
-ffc7fffffc00
-ffdffffffc00
-fffffffffe00
-fffffffffe00
-ffffffffff00
-ffffffffff00
-ffffe07fff00
-ffff803fff80
-ffff001fff80
-fffe000fff80
-fffc000fff80
-fff80007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-fff00007ff80
-7fe00003ff00
->
- ]
-/TT3781Eb00 AddT3T32Char
-
-16
-/g271 [53 0 6 -67 49 1 ] 
-/g271 [43 68 true [1 0 0 1 -6 67 ]  0 0]
-[<7fe000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff000000000
-fff007fc0000
-fff03fff8000
-fff0ffffe000
-fff1fffff000
-fff3fffff800
-fff7fffffc00
-fffffffffe00
-fffffffffe00
-ffffffffff00
-ffffffffff00
-ffffe0ffff80
-ffff803fff80
-ffff001fffc0
-fffe000fffc0
-fffc000fffc0
-fff80007ffc0
-fff00007ffc0
-fff00007ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00003ffe0
-fff00007ffe0
-fff00007ffc0
-fff00007ffc0
-fff80007ffc0
-fffc000fffc0
-fffe001fff80
-ffff001fff80
-ffff803fff80
-ffffe0ffff00
-ffffffffff00
-fffffffffe00
-fffffffffe00
-ffdffffffc00
-ffcffffff800
-ffc7fffff000
-ffc3ffffe000
-ffc0ffffc000
-7f807fff0000
-00000ff80000
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-1098 2632 M <03>S 
-1148 2632 M <0F>S  1202 2632 M <10>S  
-1257 2632 M <04>S 
-1287 2632 M <06>S 
-1329 2632 M <07>S  1410 2632 M <08>S  1460 2632 M <06>S  
-1502 2632 M <04>S 
-1533 2632 M <09>S 
-1573 2632 M <08>S  1623 2632 M <0A>S  
-1676 2632 M <0B>S 
-1703 2632 M <0C>S 
-2852 2572 M <01>S 
-2877 2572 M <02>S  2911 2572 M <03>S  
-2962 2572 M <04>S 
-2993 2572 M <07>S 
-3074 2572 M <08>S  3124 2572 M <06>S  
-3166 2572 M <04>S 
-3196 2572 M <09>S 
-3236 2572 M <08>S  3286 2572 M <0A>S  
-3340 2572 M <0B>S 
-3367 2572 M <0C>S 
-N 2484 611 M 2484 1079 I 3907 1079 I 3907 611 I 2484 611 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2484 1079 M 3907 1079 I 3907 611 I 2484 611 I 2484 1079 I C 
-: 0.652 0.645 +S K 
-; T32RsrcBegin
-
-10
-/g87 [34 0 6 -42 32 0 ] 
-/g87 [26 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7fff0000
-ffffe000
-fffff800
-fffffc00
-fffffe00
-f801ff00
-f8003f80
-f8001f80
-f8000f80
-f8000fc0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-f80007c0
-f8000f80
-f8000f80
-f8001f80
-f8007f00
-f801fe00
-fffffe00
-fffffc00
-fffff000
-ffffc000
-fffe0000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
-f8000000
->
- ]
-/TT3781Cb00 AddT3T32Char
-
-11
-/g24 [41 0 6 -42 38 0 ] 
-/g24 [32 42 true [1 0 0 1 -6 42 ]  0 0]
-[<7fff8000
-fffff800
-fffffe00
-ffffff80
-ffffffc0
-f800ffe0
-f8001ff0
-f80007f8
-f80003f8
-f80001fc
-f80000fc
-f800007e
-f800007e
-f800003e
-f800003e
-f800003f
-f800001f
-f800001f
-f800001f
-f800001f
-f800001f
-f800001f
-f800001f
-f800001f
-f800001f
-f800001f
-f800003e
-f800003e
-f800003e
-f800007e
-f800007c
-f80000fc
-f80000fc
-f80001f8
-f80007f0
-f8000ff0
-f800ffe0
-ffffffc0
-ffffff00
-fffffe00
-fffff800
-7fff8000
->
- ]
-/TT3781Cb00 AddT3T32Char
-T32RsrcEnd
-F0S42 Ji 
-2518 703 M <0A>S 
-2552 703 M <0B>S  2594 703 M <03>S  2629 703 M <0A>S  
-N 2840 1635 M 2841 1633 I 2843 1629 I 2845 1627 I 2849 1624 I 2854 1622 I 2860 1619 I 2867 1617 I 2875 1614 I 2883 1612 I 2892 1611 I 2912 1609 I 2934 1607 I 2959 1606 I 2982 1607 I 3004 1609 I 3025 1611 I 3034 1612 I 3042 1614 I 3050 1617 I 3057 1619 I 3063 1622 I 3068 1624 I 3072 1627 I 3075 1629 I 3076 1633 I 3077 1635 I 3077 1635 I 3076 1638 I 3075 1642 I 3072 1644 I 3068 1647 I 3063 1649 I 3057 1652 I 3050 1654 I 3042 1656 I 3034 1658 I 3025 1660 I 3004 1662 I 2982 1664 I 2959 1665 I 2934 1664 I 2912 1662 I 2892 1660 I 2883 1658 I 2875 1656 I 2867 1654 I 2860 1652 I 2854 1649 I 2849 1647 I 2845 1644 I 2843 1642 I 2841 1638 I 2840 1635 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2840 1635 M 2841 1633 I 2843 1629 I 2845 1627 I 2849 1624 I 2854 1622 I 2860 1619 I 2867 1617 I 2875 1614 I 2883 1612 I 2892 1611 I 2912 1609 I 2934 1607 I 2959 1606 I 2982 1607 I 3004 1609 I 3025 1611 I 3034 1612 I 3042 1614 I 3050 1617 I 3057 1619 I 3063 1622 I 3068 1624 I 3072 1627 I 3075 1629 I 3076 1633 I 3077 1635 I 3077 1635 I 3076 1638 I 3075 1642 I 3072 1644 I 3068 1647 I 3063 1649 I 3057 1652 I 3050 1654 I 3042 1656 I 3034 1658 I 3025 1660 I 3004 1662 I 2982 1664 I 2959 1665 I 2934 1664 I 2912 1662 I 2892 1660 I 2883 1658 I 2875 1656 I 2867 1654 I 2860 1652 I 2854 1649 I 2849 1647 I 2845 1644 I 2843 1642 I 2841 1638 I 2840 1635 I : 0.652 0.645 +S K 
-; T32RsrcBegin
-
-24
-/g90 [54 0 4 -63 51 0 ] 
-/g90 [47 63 true [1 0 0 1 -4 63 ]  0 0]
-[<0003ffffe000
-0007fffffe00
-000fffffff80
-000fffffffe0
-000ffffffff0
-000ffffffff8
-001ffffffff8
-001ff000fffc
-001fe0001ffc
-001fe0000ffe
-001fe00007fe
-003fe00007fe
-003fe00003fe
-003fc00003fe
-003fc00003fe
-003fc00003fe
-007fc00003fe
-007fc00003fe
-007f800007fc
-007f800007fc
-00ff800007fc
-00ff80000ff8
-00ff00000ff8
-00ff00001ff0
-00ff00003ff0
-01ff0000ffe0
-01ff0003ffc0
-01fe001fff80
-01ffffffff00
-01fffffffe00
-03fffffff800
-03ffffffe000
-03ffffff8000
-03ffffff8000
-03ffffffc000
-07fc01ffe000
-07fc007ff000
-07f8003ff000
-07f8001ff000
-07f8000ff800
-0ff8000ff800
-0ff80007f800
-0ff00007fc00
-0ff00007fc00
-0ff00007fc00
-1ff00003fc00
-1fe00003fc00
-1fe00003fe00
-1fe00003fe00
-3fe00003fe00
-3fe00003fe00
-3fc00001ff00
-3fc00001ff00
-3fc00001ff00
-7fc00001ff00
-7fc00001ff80
-7f800001ff80
-7f800000ff80
-7f800000ff80
-ff800000ff80
-ff800000ff80
-ff000000ff80
-ff0000007f00
->
- ]
-/TT3781Db00 AddT3T32Char
-
-25
-/g367 [23 0 3 -67 24 0 ] 
-/g367 [21 67 true [1 0 0 1 -3 67 ]  0 0]
-[<0003f8
-0007f8
-0007f8
-0007f8
-000ff0
-000ff0
-000ff0
-000ff0
-000ff0
-001fe0
-001fe0
-001fe0
-001fe0
-001fe0
-003fc0
-003fc0
-003fc0
-003fc0
-003fc0
-007f80
-007f80
-007f80
-007f80
-007f80
-00ff00
-00ff00
-00ff00
-00ff00
-00fe00
-01fe00
-01fe00
-01fe00
-01fe00
-01fc00
-03fc00
-03fc00
-03fc00
-03fc00
-07f800
-07f800
-07f800
-07f800
-07f800
-0ff000
-0ff000
-0ff000
-0ff000
-0ff000
-1fe000
-1fe000
-1fe000
-1fe000
-1fe000
-3fc000
-3fc000
-3fc000
-3fc000
-3fc000
-7f8000
-7f8000
-7f8000
-7f8000
-7f8000
-ff0000
-ff0000
-ff0000
-fe0000
->
- ]
-/TT3781Db00 AddT3T32Char
-T32RsrcEnd
-F1S62 Ji 
-2210 1636 M <18>S 
-2264 1636 M <19>S  2287 1636 M <03>S  
-2329 1636 M <04>S 
-2374 1636 M <02>S  2426 1636 M <05>S  2478 1636 M <06>S  2529 1636 M <07>S  2564 1636 M <08>S  2616 1636 M <09>S  2660 1636 M <0A>S  2683 1636 M <0B>S  2735 1636 M <0C>S  2783 1636 M <07>S  
-N 3332 1173 M 3297 1173 I 3314 1138 I 3332 1173 I C 
- O N 3332 1173 M 3297 1173 I 3314 1138 I 3332 1173 I : 0.652 0.645 +S K 
-; N 3314 1173 M 3314 1664 I : 0.652 0.645 +S K 
-; N 3196 1109 M 3196 1105 I 3198 1103 I 3201 1100 I 3205 1097 I 3210 1094 I 3216 1092 I 3223 1090 I 3230 1088 I 3239 1086 I 3248 1084 I 3268 1081 I 3290 1080 I 3314 1079 I 3338 1080 I 3360 1081 I 3380 1084 I 3390 1086 I 3398 1088 I 3406 1090 I 3413 1092 I 3418 1094 I 3424 1097 I 3428 1100 I 3430 1103 I 3432 1105 I 3433 1109 I 3433 1109 I 3432 1111 I 3430 1114 I 3428 1117 I 3424 1120 I 3418 1122 I 3413 1125 I 3406 1127 I 3398 1129 I 3390 1131 I 3380 1133 I 3360 1135 I 3338 1137 I 3314 1138 I 3290 1137 I 3268 1135 I 3248 1133 I 3239 1131 I 3230 1129 I 3223 1127 I 3216 1125 I 3210 1122 I 3205 1120 I 3201 1117 I 3198 1114 I 3196 1111 I 3196 1109 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 3196 1109 M 3196 1105 I 3198 1103 I 3201 1100 I 3205 1097 I 3210 1094 I 3216 1092 I 3223 1090 I 3230 1088 I 3239 1086 I 3248 1084 I 3268 1081 I 3290 1080 I 3314 1079 I 3338 1080 I 3360 1081 I 3380 1084 I 3390 1086 I 3398 1088 I 3406 1090 I 3413 1092 I 3418 1094 I 3424 1097 I 3428 1100 I 3430 1103 I 3432 1105 I 3433 1109 I 3433 1109 I 3432 1111 I 3430 1114 I 3428 1117 I 3424 1120 I 3418 1122 I 3413 1125 I 3406 1127 I 3398 1129 I 3390 1131 I 3380 1133 I 3360 1135 I 3338 1137 I 3314 1138 I 3290 1137 I 3268 1135 I 3248 1133 I 3239 1131 I 3230 1129 I 3223 1127 I 3216 1125 I 3210 1122 I 3205 1120 I 3201 1117 I 3198 1114 I 3196 1111 I 3196 1109 I : 0.652 0.645 +S K 
-; 3532 1167 M <18>S 
-3586 1167 M <19>S  3609 1167 M <03>S  
-3651 1167 M <04>S 
-3696 1167 M <02>S  3748 1167 M <05>S  3800 1167 M <0D>S  3864 1167 M <0E>S  3903 1167 M <0C>S  3951 1167 M <07>S  
-F2S62 Ji 
-2887 1402 M <01>S 
-2912 1402 M <02>S  2947 1402 M <03>S  
-2997 1402 M <04>S 
-T32RsrcBegin
-
-17
-/g396 [35 0 6 -47 34 0 ] 
-/g396 [28 47 true [1 0 0 1 -6 47 ]  0 0]
-[<00001fc0
-7f807ff0
-ffc1fff0
-ffc3fff0
-ffc7fff0
-ffcffff0
-ffdffff0
-ffdffff0
-fffffff0
-fffffff0
-fffffff0
-ffffe0e0
-ffff8000
-ffff0000
-fffe0000
-fffc0000
-fffc0000
-fff80000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-fff00000
-7fe00000
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-3028 1402 M <11>S 
-3063 1402 M <01>S  3088 1402 M <06>S  
-3130 1402 M <04>S 
-3161 1402 M <09>S 
-3201 1402 M <08>S  3251 1402 M <0A>S  
-3304 1402 M <0B>S 
-3331 1402 M <0C>S 
-N 2940 1570 M 2976 1570 I 2959 1606 I 2940 1570 I C 
- O N 2940 1570 M 2976 1570 I 2959 1606 I 2940 1570 I : 0.652 0.645 +S K 
-; N 2959 1570 M 2959 1079 I : 0.652 0.645 +S K 
-; N 2840 581 M 2841 578 I 2843 576 I 2845 572 I 2849 570 I 2854 567 I 2860 565 I 2867 563 I 2875 561 I 2883 559 I 2892 557 I 2912 554 I 2934 553 I 2959 552 I 2982 553 I 3004 554 I 3025 557 I 3034 559 I 3042 561 I 3050 563 I 3057 565 I 3063 567 I 3068 570 I 3072 572 I 3075 576 I 3076 578 I 3077 581 I 3077 581 I 3076 585 I 3075 587 I 3072 590 I 3068 593 I 3063 595 I 3057 598 I 3050 600 I 3042 602 I 3034 604 I 3025 605 I 3004 609 I 2982 610 I 2959 611 I 2934 610 I 2912 609 I 2892 605 I 2883 604 I 2875 602 I 2867 600 I 2860 598 I 2854 595 I 2849 593 I 2845 590 I 2843 587 I 2841 585 I 2840 581 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 2840 581 M 2841 578 I 2843 576 I 2845 572 I 2849 570 I 2854 567 I 2860 565 I 2867 563 I 2875 561 I 2883 559 I 2892 557 I 2912 554 I 2934 553 I 2959 552 I 2982 553 I 3004 554 I 3025 557 I 3034 559 I 3042 561 I 3050 563 I 3057 565 I 3063 567 I 3068 570 I 3072 572 I 3075 576 I 3076 578 I 3077 581 I 3077 581 I 3076 585 I 3075 587 I 3072 590 I 3068 593 I 3063 595 I 3057 598 I 3050 600 I 3042 602 I 3034 604 I 3025 605 I 3004 609 I 2982 610 I 2959 611 I 2934 610 I 2912 609 I 2892 605 I 2883 604 I 2875 602 I 2867 600 I 2860 598 I 2854 595 I 2849 593 I 2845 590 I 2843 587 I 2841 585 I 2840 581 I : 0.652 0.645 +S K 
-; N 2940 517 M 2976 517 I 2959 552 I 2940 517 I C 
- O N 2940 517 M 2976 517 I 2959 552 I 2940 517 I : 0.652 0.645 +S K 
-; N 2959 517 M 2959 25 I : 0.652 0.645 +S K 
-; N 3332 119 M 3297 119 I 3314 83 I 3332 119 I C 
- O N 3332 119 M 3297 119 I 3314 83 I 3332 119 I : 0.652 0.645 +S K 
-; N 3314 119 M 3314 611 I : 0.652 0.645 +S K 
-; N 3196 54 M 3196 52 I 3198 49 I 3201 46 I 3205 43 I 3210 41 I 3216 38 I 3223 36 I 3230 34 I 3239 32 I 3248 30 I 3268 28 I 3290 26 I 3314 25 I 3338 26 I 3360 28 I 3380 30 I 3390 32 I 3398 34 I 3406 36 I 3413 38 I 3418 41 I 3424 43 I 3428 46 I 3430 49 I 3432 52 I 3433 54 I 3433 54 I 3432 58 I 3430 61 I 3428 63 I 3424 66 I 3418 69 I 3413 71 I 3406 73 I 3398 75 I 3390 77 I 3380 79 I 3360 82 I 3338 83 I 3314 84 I 3290 83 I 3268 82 I 3248 79 I 3239 77 I 3230 75 I 3223 73 I 3216 71 I 3210 69 I 3205 66 I 3201 63 I 3198 61 I 3196 58 I 3196 54 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 3196 54 M 3196 52 I 3198 49 I 3201 46 I 3205 43 I 3210 41 I 3216 38 I 3223 36 I 3230 34 I 3239 32 I 3248 30 I 3268 28 I 3290 26 I 3314 25 I 3338 26 I 3360 28 I 3380 30 I 3390 32 I 3398 34 I 3406 36 I 3413 38 I 3418 41 I 3424 43 I 3428 46 I 3430 49 I 3432 52 I 3433 54 I 3433 54 I 3432 58 I 3430 61 I 3428 63 I 3424 66 I 3418 69 I 3413 71 I 3406 73 I 3398 75 I 3390 77 I 3380 79 I 3360 82 I 3338 83 I 3314 84 I 3290 83 I 3268 82 I 3248 79 I 3239 77 I 3230 75 I 3223 73 I 3216 71 I 3210 69 I 3205 66 I 3201 63 I 3198 61 I 3196 58 I 3196 54 I : 0.652 0.645 +S K 
-; F1S62 Ji 
-3493 113 M <06>S 
-3545 113 M <0B>S  3597 113 M <03>S  3639 113 M <05>S  
-3690 113 M <04>S 
-3736 113 M <02>S  3787 113 M <05>S  3839 113 M <0D>S  3903 113 M <0E>S  3943 113 M <0C>S  3990 113 M <07>S  
-2171 581 M <06>S 
-2223 581 M <0B>S  2275 581 M <03>S  2317 581 M <05>S  
-2368 581 M <04>S 
-2413 581 M <02>S  2465 581 M <05>S  2516 581 M <06>S  2568 581 M <07>S  2603 581 M <08>S  2655 581 M <09>S  2699 581 M <0A>S  2722 581 M <0B>S  2774 581 M <0C>S  2822 581 M <07>S  
-F2S62 Ji 
-2837 347 M <01>S 
-2862 347 M <02>S  2896 347 M <03>S  
-2947 347 M <04>S 
-T32RsrcBegin
-
-18
-/g282 [53 0 4 -67 47 1 ] 
-/g282 [43 68 true [1 0 0 1 -4 67 ]  0 0]
-[<00000000ffc0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-00000001ffe0
-0003fe01ffe0
-001fff81ffe0
-007fffe1ffe0
-00fffff1ffe0
-01fffffdffe0
-03ffffffffe0
-07ffffffffe0
-0fffffffffe0
-0fffffffffe0
-1fffffffffe0
-1fffc0ffffe0
-3fff003fffe0
-3ffe001fffe0
-7ffe000fffe0
-7ffc0007ffe0
-7ffc0003ffe0
-7ff80001ffe0
-7ff80001ffe0
-fff80001ffe0
-fff00001ffe0
-fff00001ffe0
-fff00001ffe0
-fff00001ffe0
-fff00001ffe0
-fff00001ffe0
-fff00001ffe0
-fff00001ffe0
-fff00001ffe0
-fff00001ffe0
-fff80001ffe0
-fff80001ffe0
-7ff80001ffe0
-7ff80003ffe0
-7ffc0007ffe0
-7ffc000fffe0
-7ffe001fffe0
-3fff007fffe0
-3fffc0ffffe0
-1fffffffffe0
-1fffffffffe0
-0fffffffffe0
-0fffffff7fe0
-07fffffe7fe0
-03fffffc7fe0
-01fffff07fe0
-007fffe07fe0
-003fff803fc0
-0007fc000000
->
- ]
-/TT3781Eb00 AddT3T32Char
-T32RsrcEnd
-2978 347 M <0A>S 
-3031 347 M <12>S  3085 347 M <06>S  3127 347 M <0A>S  
-3181 347 M <04>S 
-3211 347 M <09>S 
-3251 347 M <08>S  3301 347 M <0A>S  
-3355 347 M <0B>S 
-3382 347 M <0C>S 
-2850 1928 M <01>S 
-2875 1928 M <02>S  2910 1928 M <03>S  
-2961 1928 M <04>S 
-2991 1928 M <11>S 
-3027 1928 M <01>S  3052 1928 M <06>S  
-3094 1928 M <04>S 
-3124 1928 M <05>S 
-3178 1928 M <07>S  
-3260 1928 M <0B>S 
-3287 1928 M <0C>S 
-3341 1928 M <0D>S  
-3363 1928 M <0E>S 
-3407 1928 M <0D>S  3430 1928 M <0B>S  
-3456 1928 M <06>S 
-3498 1928 M <06>S  
-2883 874 M <01>S 
-2908 874 M <02>S  2943 874 M <03>S  
-2993 874 M <04>S 
-3024 874 M <0A>S 
-3078 874 M <12>S  3132 874 M <06>S  3173 874 M <0A>S  
-3228 874 M <0B>S 
-3255 874 M <0C>S 
-3308 874 M <0D>S  
-3331 874 M <0E>S 
-3375 874 M <0D>S  3398 874 M <0B>S  
-3424 874 M <06>S 
-3466 874 M <06>S  
-N 4619 3041 M 4619 3037 I 4621 3035 I 4625 3032 I 4628 3029 I 4633 3026 I 4639 3024 I 4646 3022 I 4653 3020 I 4662 3018 I 4671 3016 I 4691 3013 I 4714 3012 I 4737 3011 I 4761 3012 I 4784 3013 I 4804 3016 I 4813 3018 I 4821 3020 I 4829 3022 I 4836 3024 I 4842 3026 I 4847 3029 I 4851 3032 I 4854 3035 I 4855 3037 I 4856 3041 I 4856 3041 I 4855 3043 I 4854 3046 I 4851 3049 I 4847 3052 I 4842 3054 I 4836 3057 I 4829 3059 I 4821 3061 I 4813 3063 I 4804 3065 I 4784 3067 I 4761 3069 I 4737 3070 I 4714 3069 I 4691 3067 I 4671 3065 I 4662 3063 I 4653 3061 I 4646 3059 I 4639 3057 I 4633 3054 I 4628 3052 I 4625 3049 I 4621 3046 I 4619 3043 I 4619 3041 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 4619 3041 M 4619 3037 I 4621 3035 I 4625 3032 I 4628 3029 I 4633 3026 I 4639 3024 I 4646 3022 I 4653 3020 I 4662 3018 I 4671 3016 I 4691 3013 I 4714 3012 I 4737 3011 I 4761 3012 I 4784 3013 I 4804 3016 I 4813 3018 I 4821 3020 I 4829 3022 I 4836 3024 I 4842 3026 I 4847 3029 I 4851 3032 I 4854 3035 I 4855 3037 I 4856 3041 I 4856 3041 I 4855 3043 I 4854 3046 I 4851 3049 I 4847 3052 I 4842 3054 I 4836 3057 I 4829 3059 I 4821 3061 I 4813 3063 I 4804 3065 I 4784 3067 I 4761 3069 I 4737 3070 I 4714 3069 I 4691 3067 I 4671 3065 I 4662 3063 I 4653 3061 I 4646 3059 I 4639 3057 I 4633 3054 I 4628 3052 I 4625 3049 I 4621 3046 I 4619 3043 I 4619 3041 I : 0.652 0.645 +S K 
-; F1S62 Ji 
-3870 3041 M <01>S 
-3956 3041 M <02>S  4007 3041 M <03>S  4049 3041 M <04>S  4095 3041 M <02>S  4146 3041 M <05>S  4198 3041 M <06>S  4250 3041 M <07>S  4285 3041 M <08>S  4336 3041 M <09>S  4381 3041 M <0A>S  4404 3041 M <0B>S  4456 3041 M <0C>S  4503 3041 M <07>S  
-N 4263 1664 M 4263 2133 I 5686 2133 I 5686 1664 I 4263 1664 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 4263 2133 M 5686 2133 I 5686 1664 I 4263 1664 I 4263 2133 I C 
-: 0.652 0.645 +S K 
-; F0S42 Ji 
-4296 1757 M <02>S 
-4335 1757 M <01>S  4392 1757 M <05>S  4407 1757 M <06>S  4443 1757 M <07>S  4471 1757 M <03>S  
-N 5111 2226 M 5075 2226 I 5093 2191 I 5111 2226 I C 
- O N 5111 2226 M 5075 2226 I 5093 2191 I 5111 2226 I : 0.652 0.645 +S K 
-; N 5093 2226 M 5093 3070 I : 0.652 0.645 +S K 
-; N 4720 2976 M 4755 2976 I 4737 3011 I 4720 2976 I C 
- O N 4720 2976 M 4755 2976 I 4737 3011 I 4720 2976 I : 0.652 0.645 +S K 
-; N 4737 2976 M 4737 2133 I : 0.652 0.645 +S K 
-; N 4974 2162 M 4975 2159 I 4977 2156 I 4980 2153 I 4984 2151 I 4989 2148 I 4995 2146 I 5002 2144 I 5009 2142 I 5018 2140 I 5027 2138 I 5047 2135 I 5069 2134 I 5093 2133 I 5117 2134 I 5139 2135 I 5160 2138 I 5169 2140 I 5177 2142 I 5185 2144 I 5192 2146 I 5198 2148 I 5202 2151 I 5206 2153 I 5210 2156 I 5211 2159 I 5212 2162 I 5212 2162 I 5211 2165 I 5210 2168 I 5206 2171 I 5202 2174 I 5198 2176 I 5192 2178 I 5185 2181 I 5177 2183 I 5169 2185 I 5160 2186 I 5139 2189 I 5117 2191 I 5093 2191 I 5069 2191 I 5047 2189 I 5027 2186 I 5018 2185 I 5009 2183 I 5002 2181 I 4995 2178 I 4989 2176 I 4984 2174 I 4980 2171 I 4977 2168 I 4975 2165 I 4974 2162 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 4974 2162 M 4975 2159 I 4977 2156 I 4980 2153 I 4984 2151 I 4989 2148 I 4995 2146 I 5002 2144 I 5009 2142 I 5018 2140 I 5027 2138 I 5047 2135 I 5069 2134 I 5093 2133 I 5117 2134 I 5139 2135 I 5160 2138 I 5169 2140 I 5177 2142 I 5185 2144 I 5192 2146 I 5198 2148 I 5202 2151 I 5206 2153 I 5210 2156 I 5211 2159 I 5212 2162 I 5212 2162 I 5211 2165 I 5210 2168 I 5206 2171 I 5202 2174 I 5198 2176 I 5192 2178 I 5185 2181 I 5177 2183 I 5169 2185 I 5160 2186 I 5139 2189 I 5117 2191 I 5093 2191 I 5069 2191 I 5047 2189 I 5027 2186 I 5018 2185 I 5009 2183 I 5002 2181 I 4995 2178 I 4989 2176 I 4984 2174 I 4980 2171 I 4977 2168 I 4975 2165 I 4974 2162 I : 0.652 0.645 +S K 
-; F1S62 Ji 
-5281 2221 M <01>S 
-5367 2221 M <02>S  5419 2221 M <03>S  5460 2221 M <04>S  5506 2221 M <02>S  5557 2221 M <05>S  5609 2221 M <0D>S  5673 2221 M <0E>S  5713 2221 M <0C>S  5761 2221 M <07>S  
-F2S62 Ji 
-4630 2572 M <01>S 
-4655 2572 M <02>S  4690 2572 M <03>S  
-4740 2572 M <04>S 
-4771 2572 M <07>S 
-4853 2572 M <08>S  4903 2572 M <06>S  
-4945 2572 M <04>S 
-4976 2572 M <09>S 
-5016 2572 M <08>S  5065 2572 M <0A>S  
-5119 2572 M <0B>S 
-5146 2572 M <0C>S 
-N 4263 611 M 4263 1079 I 5686 1079 I 5686 611 I 4263 611 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 4263 1079 M 5686 1079 I 5686 611 I 4263 611 I 4263 1079 I C 
-: 0.652 0.645 +S K 
-; F0S42 Ji 
-4296 703 M <0A>S 
-4331 703 M <0B>S  4372 703 M <03>S  4408 703 M <0A>S  
-N 4619 1635 M 4619 1633 I 4621 1629 I 4625 1627 I 4628 1624 I 4633 1622 I 4639 1619 I 4646 1617 I 4653 1614 I 4662 1612 I 4671 1611 I 4691 1609 I 4714 1607 I 4737 1606 I 4761 1607 I 4784 1609 I 4804 1611 I 4813 1612 I 4821 1614 I 4829 1617 I 4836 1619 I 4842 1622 I 4847 1624 I 4851 1627 I 4854 1629 I 4855 1633 I 4856 1635 I 4856 1635 I 4855 1638 I 4854 1642 I 4851 1644 I 4847 1647 I 4842 1649 I 4836 1652 I 4829 1654 I 4821 1656 I 4813 1658 I 4804 1660 I 4784 1662 I 4761 1664 I 4737 1665 I 4714 1664 I 4691 1662 I 4671 1660 I 4662 1658 I 4653 1656 I 4646 1654 I 4639 1652 I 4633 1649 I 4628 1647 I 4625 1644 I 4621 1642 I 4619 1638 I 4619 1635 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 4619 1635 M 4619 1633 I 4621 1629 I 4625 1627 I 4628 1624 I 4633 1622 I 4639 1619 I 4646 1617 I 4653 1614 I 4662 1612 I 4671 1611 I 4691 1609 I 4714 1607 I 4737 1606 I 4761 1607 I 4784 1609 I 4804 1611 I 4813 1612 I 4821 1614 I 4829 1617 I 4836 1619 I 4842 1622 I 4847 1624 I 4851 1627 I 4854 1629 I 4855 1633 I 4856 1635 I 4856 1635 I 4855 1638 I 4854 1642 I 4851 1644 I 4847 1647 I 4842 1649 I 4836 1652 I 4829 1654 I 4821 1656 I 4813 1658 I 4804 1660 I 4784 1662 I 4761 1664 I 4737 1665 I 4714 1664 I 4691 1662 I 4671 1660 I 4662 1658 I 4653 1656 I 4646 1654 I 4639 1652 I 4633 1649 I 4628 1647 I 4625 1644 I 4621 1642 I 4619 1638 I 4619 1635 I : 0.652 0.645 +S K 
-; F1S62 Ji 
-3988 1636 M <18>S 
-4043 1636 M <19>S  4066 1636 M <03>S  
-4108 1636 M <04>S 
-4153 1636 M <02>S  4205 1636 M <05>S  4257 1636 M <06>S  4309 1636 M <07>S  4343 1636 M <08>S  4395 1636 M <09>S  4440 1636 M <0A>S  4463 1636 M <0B>S  4514 1636 M <0C>S  4562 1636 M <07>S  
-N 5111 1173 M 5075 1173 I 5093 1138 I 5111 1173 I C 
- O N 5111 1173 M 5075 1173 I 5093 1138 I 5111 1173 I : 0.652 0.645 +S K 
-; N 5093 1173 M 5093 1664 I : 0.652 0.645 +S K 
-; N 4974 1109 M 4975 1105 I 4977 1103 I 4980 1100 I 4984 1097 I 4989 1094 I 4995 1092 I 5002 1090 I 5009 1088 I 5018 1086 I 5027 1084 I 5047 1081 I 5069 1080 I 5093 1079 I 5117 1080 I 5139 1081 I 5160 1084 I 5169 1086 I 5177 1088 I 5185 1090 I 5192 1092 I 5198 1094 I 5202 1097 I 5206 1100 I 5210 1103 I 5211 1105 I 5212 1109 I 5212 1109 I 5211 1111 I 5210 1114 I 5206 1117 I 5202 1120 I 5198 1122 I 5192 1125 I 5185 1127 I 5177 1129 I 5169 1131 I 5160 1133 I 5139 1135 I 5117 1137 I 5093 1138 I 5069 1137 I 5047 1135 I 5027 1133 I 5018 1131 I 5009 1129 I 5002 1127 I 4995 1125 I 4989 1122 I 4984 1120 I 4980 1117 I 4977 1114 I 4975 1111 I 4974 1109 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 4974 1109 M 4975 1105 I 4977 1103 I 4980 1100 I 4984 1097 I 4989 1094 I 4995 1092 I 5002 1090 I 5009 1088 I 5018 1086 I 5027 1084 I 5047 1081 I 5069 1080 I 5093 1079 I 5117 1080 I 5139 1081 I 5160 1084 I 5169 1086 I 5177 1088 I 5185 1090 I 5192 1092 I 5198 1094 I 5202 1097 I 5206 1100 I 5210 1103 I 5211 1105 I 5212 1109 I 5212 1109 I 5211 1111 I 5210 1114 I 5206 1117 I 5202 1120 I 5198 1122 I 5192 1125 I 5185 1127 I 5177 1129 I 5169 1131 I 5160 1133 I 5139 1135 I 5117 1137 I 5093 1138 I 5069 1137 I 5047 1135 I 5027 1133 I 5018 1131 I 5009 1129 I 5002 1127 I 4995 1125 I 4989 1122 I 4984 1120 I 4980 1117 I 4977 1114 I 4975 1111 I 4974 1109 I : 0.652 0.645 +S K 
-; 5311 1167 M <18>S 
-5365 1167 M <19>S  5388 1167 M <03>S  
-5430 1167 M <04>S 
-5476 1167 M <02>S  5527 1167 M <05>S  5579 1167 M <0D>S  5643 1167 M <0E>S  5683 1167 M <0C>S  5730 1167 M <07>S  
-F2S62 Ji 
-4666 1402 M <01>S 
-4691 1402 M <02>S  4726 1402 M <03>S  
-4776 1402 M <04>S 
-4807 1402 M <11>S 
-4842 1402 M <01>S  4867 1402 M <06>S  
-4910 1402 M <04>S 
-4940 1402 M <09>S 
-4980 1402 M <08>S  5030 1402 M <0A>S  
-5084 1402 M <0B>S 
-5111 1402 M <0C>S 
-N 4720 1570 M 4755 1570 I 4737 1606 I 4720 1570 I C 
- O N 4720 1570 M 4755 1570 I 4737 1606 I 4720 1570 I : 0.652 0.645 +S K 
-; N 4737 1570 M 4737 1079 I : 0.652 0.645 +S K 
-; N 4619 581 M 4619 578 I 4621 576 I 4625 572 I 4628 570 I 4633 567 I 4639 565 I 4646 563 I 4653 561 I 4662 559 I 4671 557 I 4691 554 I 4714 553 I 4737 552 I 4761 553 I 4784 554 I 4804 557 I 4813 559 I 4821 561 I 4829 563 I 4836 565 I 4842 567 I 4847 570 I 4851 572 I 4854 576 I 4855 578 I 4856 581 I 4856 581 I 4855 585 I 4854 587 I 4851 590 I 4847 593 I 4842 595 I 4836 598 I 4829 600 I 4821 602 I 4813 604 I 4804 605 I 4784 609 I 4761 610 I 4737 611 I 4714 610 I 4691 609 I 4671 605 I 4662 604 I 4653 602 I 4646 600 I 4639 598 I 4633 595 I 4628 593 I 4625 590 I 4621 587 I 4619 585 I 4619 581 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 4619 581 M 4619 578 I 4621 576 I 4625 572 I 4628 570 I 4633 567 I 4639 565 I 4646 563 I 4653 561 I 4662 559 I 4671 557 I 4691 554 I 4714 553 I 4737 552 I 4761 553 I 4784 554 I 4804 557 I 4813 559 I 4821 561 I 4829 563 I 4836 565 I 4842 567 I 4847 570 I 4851 572 I 4854 576 I 4855 578 I 4856 581 I 4856 581 I 4855 585 I 4854 587 I 4851 590 I 4847 593 I 4842 595 I 4836 598 I 4829 600 I 4821 602 I 4813 604 I 4804 605 I 4784 609 I 4761 610 I 4737 611 I 4714 610 I 4691 609 I 4671 605 I 4662 604 I 4653 602 I 4646 600 I 4639 598 I 4633 595 I 4628 593 I 4625 590 I 4621 587 I 4619 585 I 4619 581 I : 0.652 0.645 +S K 
-; N 4720 517 M 4755 517 I 4737 552 I 4720 517 I C 
- O N 4720 517 M 4755 517 I 4737 552 I 4720 517 I : 0.652 0.645 +S K 
-; N 4737 517 M 4737 25 I : 0.652 0.645 +S K 
-; N 5111 119 M 5075 119 I 5093 83 I 5111 119 I C 
- O N 5111 119 M 5075 119 I 5093 83 I 5111 119 I : 0.652 0.645 +S K 
-; N 5093 119 M 5093 611 I : 0.652 0.645 +S K 
-; N 4974 54 M 4975 52 I 4977 49 I 4980 46 I 4984 43 I 4989 41 I 4995 38 I 5002 36 I 5009 34 I 5018 32 I 5027 30 I 5047 28 I 5069 26 I 5093 25 I 5117 26 I 5139 28 I 5160 30 I 5169 32 I 5177 34 I 5185 36 I 5192 38 I 5198 41 I 5202 43 I 5206 46 I 5210 49 I 5211 52 I 5212 54 I 5212 54 I 5211 58 I 5210 61 I 5206 63 I 5202 66 I 5198 69 I 5192 71 I 5185 73 I 5177 75 I 5169 77 I 5160 79 I 5139 82 I 5117 83 I 5093 84 I 5069 83 I 5047 82 I 5027 79 I 5018 77 I 5009 75 I 5002 73 I 4995 71 I 4989 69 I 4984 66 I 4980 63 I 4977 61 I 4975 58 I 4974 54 I C 
-0.867 0.887 0.805 1 scol  O 0 0 0 1 scol N 4974 54 M 4975 52 I 4977 49 I 4980 46 I 4984 43 I 4989 41 I 4995 38 I 5002 36 I 5009 34 I 5018 32 I 5027 30 I 5047 28 I 5069 26 I 5093 25 I 5117 26 I 5139 28 I 5160 30 I 5169 32 I 5177 34 I 5185 36 I 5192 38 I 5198 41 I 5202 43 I 5206 46 I 5210 49 I 5211 52 I 5212 54 I 5212 54 I 5211 58 I 5210 61 I 5206 63 I 5202 66 I 5198 69 I 5192 71 I 5185 73 I 5177 75 I 5169 77 I 5160 79 I 5139 82 I 5117 83 I 5093 84 I 5069 83 I 5047 82 I 5027 79 I 5018 77 I 5009 75 I 5002 73 I 4995 71 I 4989 69 I 4984 66 I 4980 63 I 4977 61 I 4975 58 I 4974 54 I : 0.652 0.645 +S K 
-; F1S62 Ji 
-5272 113 M <06>S 
-5324 113 M <0B>S  5375 113 M <03>S  5417 113 M <05>S  
-5469 113 M <04>S 
-5514 113 M <02>S  5566 113 M <05>S  5618 113 M <0D>S  5682 113 M <0E>S  5721 113 M <0C>S  5769 113 M <07>S  
-3950 581 M <06>S 
-4002 581 M <0B>S  4053 581 M <03>S  4095 581 M <05>S  
-4147 581 M <04>S 
-4192 581 M <02>S  4244 581 M <05>S  4296 581 M <06>S  4347 581 M <07>S  4382 581 M <08>S  4434 581 M <09>S  4478 581 M <0A>S  4501 581 M <0B>S  4553 581 M <0C>S  4601 581 M <07>S  
-F2S62 Ji 
-4615 347 M <01>S 
-4640 347 M <02>S  4675 347 M <03>S  
-4725 347 M <04>S 
-4756 347 M <0A>S 
-4810 347 M <12>S  4864 347 M <06>S  4906 347 M <0A>S  
-4960 347 M <04>S 
-4991 347 M <09>S 
-5031 347 M <08>S  5080 347 M <0A>S  
-5134 347 M <0B>S 
-5161 347 M <0C>S 
-4632 1928 M <01>S 
-4657 1928 M <02>S  4691 1928 M <03>S  
-4742 1928 M <04>S 
-4773 1928 M <11>S 
-4808 1928 M <01>S  4833 1928 M <06>S  
-4875 1928 M <04>S 
-4906 1928 M <08>S 
-4955 1928 M <07>S  
-5037 1928 M <0B>S 
-5064 1928 M <0C>S 
-5118 1928 M <0D>S  
-5140 1928 M <0E>S 
-5183 1928 M <0D>S  5206 1928 M <0B>S  
-5233 1928 M <06>S 
-5275 1928 M <06>S  
-4663 874 M <01>S 
-4687 874 M <02>S  4722 874 M <03>S  
-4772 874 M <04>S 
-4803 874 M <0A>S 
-4856 874 M <12>S  4910 874 M <06>S  4952 874 M <0A>S  
-5006 874 M <0B>S 
-5033 874 M <0C>S 
-5087 874 M <0D>S  
-5110 874 M <0E>S 
-5153 874 M <0D>S  5176 874 M <0B>S  
-5203 874 M <06>S 
-5245 874 M <06>S  
-LH
-%%PageTrailer
-
-%%Trailer
-%%DocumentNeededResources: 
-%%DocumentSuppliedResources: 
-%%+ procset Pscript_WinNT_VMErrorHandler 5.0 0
-%%+ procset Pscript_FatalError 5.0 0
-%%+ procset Pscript_Win_Basic 5.0 0
-%%+ procset Pscript_Win_Utils_L1 5.0 0
-%%+ procset Pscript_Win_GdiObject 5.0 0
-%%+ procset Pscript_Win_GdiObject_L1 5.0 0
-%%+ procset Pscript_T3Hdr 5.0 0
-%%+ procset Pscript_Text 5.0 0
-Pscript_WinNT_Incr dup /terminate get exec
-%%EOF
diff -Naur ns-3.21/src/lte/doc/source/lte-design.rst ns-3.22/src/lte/doc/source/lte-design.rst
--- ns-3.21/src/lte/doc/source/lte-design.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/lte-design.rst	2015-02-05 15:46:23.000000000 -0800
@@ -503,10 +503,14 @@
 of periodic wideband CQI (i.e., a single value of channel state that is deemed representative of all RBs
 in use) and inband CQIs (i.e., a set of value representing the channel state for each RB).
 
-In downlink, the CQI feedbacks can be generated in two different ways.
-First one is legacy approach and CQI are evaluated according to the SINR perceived by control channel (i.e., PDCCH + PCFIC) in order to have an estimation of the interference when all the eNB are transmitting simultaneously. 
-Second approach was created for better utilization of data channel resources, when using Frequency Reuse algorithms.
-Frequency Reuse algorithms are applied only to PDSCH and they can reduce inter-cell interferences only during PDSCH duration. Since in legacy approach CQI feedback is generated from control channels, it does not allow to use higher MCS for data channels and to achieve any gain in throughput. Generation CQI feedback only from data channels would be the best option. Unfortunately is impossible solution, because PDSCH is be sent only if there is data to be sent, and CQI needs to be generated every TTI. Some mixed approach was implemented. CQI are generated from control channels as signal and data channels (if received) as interference. It there is no transmission in data channel, CQI is generated only from control channels, as in legacy solution. 
+The CQI index to be reported is obtained by first obtaining a SINR measurement and then passing this SINR measurement  the :ref:`Adaptive Modulation and Coding` which will map it to the CQI index. 
+
+In downlink, the SINR used to generate CQI feedback can be calculated in two different ways:
+
+ 1. *Ctrl* method: SINR is calculated combining the signal power from the reference signals (which in the simulation is equivalent to the PDCCH) and the interference power from the PDCCH. This approach results in considering any neighboring eNB as an interferer, regardless of whether this eNB is actually performing any PDSCH transmission, and regardless of the power and RBs used for eventual interfering PDSCH transmissions.
+
+ 2. *Mixed* method: SINR is calculated combining the signal power from the reference signals (which in the simulation is equivalent to the PDCCH) and the interference power from the PDSCH. This approach results in considering as interferers only those neighboring eNBs that are actively transmitting data on the PDSCH, and allows to generate inband CQIs that account for different amounts of interference on different RBs according to the actual interference level. In the case that no PDSCH transmission is performed by any eNB, this method consider that interference is zero, i.e., the SINR will be calculated as the ratio of signal to noise only. 
+
 To switch between this two CQI generation approaches, ``LteHelper::UsePdschForCqiGeneration`` needs to be configured: false for first approach and true for second approach (true is default value)::
 
    Config::SetDefault ("ns3::LteHelper::UsePdschForCqiGeneration", BooleanValue (true));
@@ -1372,6 +1376,8 @@
      corresponds to a Zadoff-Chu (ZC)
      sequence using one of several formats available and sent in the
      PRACH slots which could in principle overlap with PUSCH.
+     PRACH Configuration Index 14 is assumed, i.e., preambles can be
+     sent on any system frame number and subframe number.
      The RA preamble is modeled using the LteControlMessage class,
      i.e., as an ideal message that does not consume any radio
      resources. The collision of preamble transmission by multiple UEs
@@ -2244,12 +2250,11 @@
 failure. In order to model RLF properly, RRC IDLE mode should be
 supported, including in particular idle mode cell (re-)selection.
 
-With the current model, an UE that experiences bad link quality will
+With the current model, an UE that experiences bad link quality and
+that does not perform handover (because of, e.g., no neighbour cells,
+handover disabled, handover thresholds misconfigured) will 
 just stay associated with the same eNB, and the scheduler will stop
-allocating resources to it for communications. This is also consistent
-with the fact that, at this stage, only handovers explicitly triggered
-within the simulation program are supported (network-driven handovers
-based on UE measurements are planned only at a later stage).
+allocating resources to it for communications. 
 
 
 .. _sec-ue-measurements:
@@ -3859,7 +3864,7 @@
 .. _fig-lte-full-frequency-reuse-scheme:
  
 .. figure:: figures/fr-full-frequency-reuse-scheme.*
-   :scale: 40 %
+   :scale: 60 %
    :align: center
 
    Full Frequency Reuse scheme 
@@ -3888,7 +3893,7 @@
 .. _fig-lte-hard-frequency-reuse-scheme:
  
 .. figure:: figures/fr-hard-frequency-reuse-scheme.*
-   :scale: 40 %
+   :scale: 60 %
    :align: center
 
    Hard Frequency Reuse scheme 
@@ -3917,7 +3922,7 @@
 .. _fig-lte-strict-frequency-reuse-scheme:
  
 .. figure:: figures/fr-strict-frequency-reuse-scheme.*
-   :scale: 40 %
+   :scale: 60 %
    :align: center
 
    Strict Frequency Reuse scheme 
@@ -3951,7 +3956,7 @@
    .. _fig-lte-soft-frequency-reuse-scheme-v1:
  
    .. figure:: figures/fr-soft-frequency-reuse-scheme-v1.*
-      :scale: 40 %
+      :scale: 60 %
       :align: center
 
       Soft Frequency Reuse scheme version 1 
@@ -3966,7 +3971,7 @@
    .. _fig-lte-soft-frequency-reuse-scheme-v2:
  
    .. figure:: figures/fr-soft-frequency-reuse-scheme-v2.*
-      :scale: 40 %
+      :scale: 60 %
       :align: center
 
       Soft Frequency Reuse scheme version 2
@@ -3997,7 +4002,7 @@
 .. _fig-lte-soft-fractional-frequency-reuse-scheme:
  
 .. figure:: figures/fr-soft-fractional-frequency-reuse-scheme.*
-   :scale: 40 %
+   :scale: 60 %
    :align: center
 
    Soft Fractional Fractional Frequency Reuse scheme
@@ -4044,7 +4049,7 @@
 .. _fig-lte-enhanced-fractional-frequency-reuse-scheme:
  
 .. figure:: figures/fr-enhanced-fractional-frequency-reuse-scheme.*
-   :scale: 40 %
+   :scale: 60 %
    :align: center
 
    Enhanced Fractional Fractional Frequency Reuse scheme
@@ -4092,7 +4097,7 @@
 .. _fig-lte-distributed-fractional-frequency-reuse-scheme:
  
 .. figure:: figures/ffr-distributed-scheme.*
-   :scale: 100 %
+   :scale: 80 %
    :align: center
 
    Sequence diagram of Distributed Frequency Reuse Scheme
diff -Naur ns-3.21/src/lte/doc/source/lte-testing.rst ns-3.22/src/lte/doc/source/lte-testing.rst
--- ns-3.21/src/lte/doc/source/lte-testing.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/lte-testing.rst	2015-02-05 15:46:23.000000000 -0800
@@ -122,6 +122,34 @@
 System Tests
 ~~~~~~~~~~~~
 
+Dedicated Bearer Deactivation Tests
+-----------------------------------
+The test suite ‘lte-test-deactivate-bearer’ creates test case with single EnodeB and Three UE’s.
+Each UE consists of one Default and one Dedicated EPS bearer with same bearer specification but with different ARP.
+Test Case Flow is as follows:
+Attach UE -> Create Default+Dedicated Bearer -> Deactivate one of the Dedicated bearer
+
+Test case further deactivates dedicated bearer having bearer ID 2(LCID=BearerId+2) of First UE (UE_ID=1) 
+User can schedule bearer deactivation after specific time delay using Simulator::Schedule () method.
+
+Once the test case execution ends it will create DlRlcStats.txt and UlRlcStats.txt. 
+Key fields that need to be checked in statistics are:
+|Start | end | Cell ID | IMSI | RNTI | LCID | TxBytes | RxBytes |
+
+Test case executes in three epoch’s.
+1) In first Epoch (0.04s-1.04s) All UE’s and corresponding bearers gets attached 
+   and packet flow over the dedicated bearers activated.
+2) In second Epoch (1.04s-2.04s), bearer deactivation is instantiated, hence User can see 
+   relatively less number of TxBytes on UE_ID=1 and LCID=4 as compared to other bearers.
+3) In third Epoch (2.04s-3.04s) since bearer deactivation of UE_ID=1 and LCID=4 is completed, 
+   user will not see any logging related to LCID=4.
+
+Test case passes if and only if 
+1) IMSI=1 and LCID=4 completely removed in third epoch 
+2) No packets seen in TxBytes and RxBytes corresponding to IMSI=1 and LCID=4
+If above criterion does not match test case considered to be failed
+
+
 .. _sec-lte-amc-tests:
 
 Adaptive Modulation and Coding Tests
diff -Naur ns-3.21/src/lte/doc/source/lte-user.rst ns-3.22/src/lte/doc/source/lte-user.rst
--- ns-3.21/src/lte/doc/source/lte-user.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/doc/source/lte-user.rst	2015-02-05 15:46:23.000000000 -0800
@@ -1402,8 +1402,8 @@
 also affect all other data or control packets not related to handover, which may
 be an unwanted side effect. Otherwise, it can be done as follows::
 
-   Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled");
-   Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled");
+   Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
+   Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));  
    
 By using the above code, we disable the error model in both control and data
 channels and in both directions (downlink and uplink). This is necessary because
@@ -2340,3 +2340,31 @@
    :align: center
 
    REM for RB 20 obtained from ``lena-dual-stripe`` simulation with Hard FR algorithm enabled
+
+
+
+
+Troubleshooting and debugging tips
+----------------------------------
+
+Many users post on the ns-3-users mailing list asking, for example,
+why they don't get any traffic in their simulation, or maybe only
+uplink but no downlink traffic, etc. In most of the cases, it's a bug
+in the user simulation program. Here are some tips to debug the
+program and find out the cause of the problem.
+
+The general approach is to selectively and incrementally enable the
+logging of relevant LTE module components, veryfing upon each
+activation that the output is as expected. In detail:
+
+ * first check the control plane, in particular the RRC connection
+   establishment procedure, by enabling the log components LteUeRrc
+   and LteEnbRrc 
+
+ * then check packet transmissions on the data plane, starting by
+   enabling the log componbents LteUeNetDevice and the
+   EpcSgwPgwApplication, then EpcEnbApplication, then moving down the
+   LTE radio stack (PDCP, RLC, MAC, and finally PHY). All this until
+   you find where packets stop being processed / forwarded. 
+
+
diff -Naur ns-3.21/src/lte/examples/lena-deactivate-bearer.cc ns-3.22/src/lte/examples/lena-deactivate-bearer.cc
--- ns-3.21/src/lte/examples/lena-deactivate-bearer.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/examples/lena-deactivate-bearer.cc	2015-02-05 15:46:23.000000000 -0800
@@ -0,0 +1,238 @@
+/* -*-  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: Gaurav Sathe <gaurav.sathe@tcs.com>
+ */
+
+#include "ns3/lte-helper.h"
+#include "ns3/epc-helper.h"
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/ipv4-global-routing-helper.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-helper.h"
+#include "ns3/config-store.h"
+//#include "ns3/gtk-config-store.h"
+
+using namespace ns3;
+
+/**
+ * Sample simulation script for LTE+EPC. It instantiates one eNodeB,
+ * attaches three UE to eNodeB starts a flow for each UE to  and from a remote host.
+ * It also instantiates one dedicated bearer per UE
+ */
+NS_LOG_COMPONENT_DEFINE ("BearerDeactivateExample");
+int
+main (int argc, char *argv[])
+{
+
+  uint16_t numberOfNodes = 1;
+  uint16_t numberOfUeNodes = 3;
+  double simTime = 1.1;
+  double distance = 60.0;
+  double interPacketInterval = 100;
+
+  // Command line arguments
+  CommandLine cmd;
+  cmd.AddValue ("numberOfNodes", "Number of eNodeBs + UE pairs", numberOfNodes);
+  cmd.AddValue ("simTime", "Total duration of the simulation [s])", simTime);
+  cmd.AddValue ("distance", "Distance between eNBs [m]", distance);
+  cmd.AddValue ("interPacketInterval", "Inter packet interval [ms])", interPacketInterval);
+  cmd.Parse (argc, argv);
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
+  lteHelper->SetEpcHelper (epcHelper);
+
+  ConfigStore inputConfig;
+  inputConfig.ConfigureDefaults ();
+
+  // parse again so you can override default values from the command line
+  cmd.Parse (argc, argv);
+
+  Ptr<Node> pgw = epcHelper->GetPgwNode ();
+
+  // Enable Logging
+  LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
+
+  LogComponentEnable ("BearerDeactivateExample", LOG_LEVEL_ALL);
+  LogComponentEnable ("LteHelper", logLevel);
+  LogComponentEnable ("EpcHelper", logLevel);
+  LogComponentEnable ("EpcEnbApplication", logLevel);
+  LogComponentEnable ("EpcSgwPgwApplication", logLevel);
+  LogComponentEnable ("EpcMme", logLevel);
+  LogComponentEnable ("LteEnbRrc", logLevel);
+
+
+  // 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);
+  // interface 0 is localhost, 1 is the p2p device
+  Ipv4Address 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);
+
+  NodeContainer ueNodes;
+  NodeContainer enbNodes;
+  enbNodes.Create (numberOfNodes);
+  ueNodes.Create (numberOfUeNodes);
+
+  // Install Mobility Model
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  for (uint16_t i = 0; i < numberOfNodes; i++)
+    {
+      positionAlloc->Add (Vector (distance * i, 0, 0));
+    }
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (enbNodes);
+  mobility.Install (ueNodes);
+
+  // Install LTE Devices to the nodes
+  NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);
+  NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  // Install the IP stack on the UEs
+  internet.Install (ueNodes);
+  Ipv4InterfaceContainer ueIpIface;
+  ueIpIface = 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 a UE to a eNB
+  lteHelper->Attach (ueLteDevs, enbLteDevs.Get (0));
+
+  // Activate an EPS bearer on all UEs
+
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      Ptr<NetDevice> ueDevice = ueLteDevs.Get (u);
+      GbrQosInformation qos;
+      qos.gbrDl = 132;  // bit/s, considering IP, UDP, RLC, PDCP header size
+      qos.gbrUl = 132;
+      qos.mbrDl = qos.gbrDl;
+      qos.mbrUl = qos.gbrUl;
+
+      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+      EpsBearer bearer (q, qos);
+      bearer.arp.priorityLevel = 15 - (u + 1);
+      bearer.arp.preemptionCapability = true;
+      bearer.arp.preemptionVulnerability = true;
+      lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer, EpcTft::Default ());
+    }
+
+
+  // Install and start applications on UEs and remote host
+  uint16_t dlPort = 1234;
+  uint16_t ulPort = 2000;
+  uint16_t otherPort = 3000;
+  ApplicationContainer clientApps;
+  ApplicationContainer serverApps;
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      ++ulPort;
+      ++otherPort;
+      PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), dlPort));
+      PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), ulPort));
+      PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), otherPort));
+      serverApps.Add (dlPacketSinkHelper.Install (ueNodes.Get (u)));
+      serverApps.Add (ulPacketSinkHelper.Install (remoteHost));
+      serverApps.Add (packetSinkHelper.Install (ueNodes.Get (u)));
+
+      UdpClientHelper dlClient (ueIpIface.GetAddress (u), dlPort);
+      dlClient.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
+      dlClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
+
+      UdpClientHelper ulClient (remoteHostAddr, ulPort);
+      ulClient.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
+      ulClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
+
+      UdpClientHelper client (ueIpIface.GetAddress (u), otherPort);
+      client.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
+      client.SetAttribute ("MaxPackets", UintegerValue (1000000));
+
+      clientApps.Add (dlClient.Install (remoteHost));
+      clientApps.Add (ulClient.Install (ueNodes.Get (u)));
+      if (u + 1 < ueNodes.GetN ())
+        {
+          clientApps.Add (client.Install (ueNodes.Get (u + 1)));
+        }
+      else
+        {
+          clientApps.Add (client.Install (ueNodes.Get (0)));
+        }
+    }
+
+  serverApps.Start (Seconds (0.030));
+  clientApps.Start (Seconds (0.030));
+
+  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
+  double statsDuration = 1.0;
+
+  lteHelper->EnableRlcTraces ();
+  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
+  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
+
+  //get ue device pointer for UE-ID 0 IMSI 1 and enb device pointer
+  Ptr<NetDevice> ueDevice = ueLteDevs.Get (0);
+  Ptr<NetDevice> enbDevice = enbLteDevs.Get (0);
+
+  /*
+   *   Instantiate De-activation using Simulator::Schedule() method which will initiate bearer de-activation after deActivateTime
+   *   Instantiate De-activation in sequence (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
+   */
+  Time deActivateTime (Seconds (1.5));
+  Simulator::Schedule (deActivateTime, &LteHelper::DeActivateDedicatedEpsBearer, lteHelper, ueDevice, enbDevice, 2);
+
+  //stop simulation after 3 seconds
+  Simulator::Stop (Seconds (3.0));
+
+  Simulator::Run ();
+  /*GtkConfigStore config;
+  config.ConfigureAttributes();*/
+
+  Simulator::Destroy ();
+  return 0;
+
+}
+
diff -Naur ns-3.21/src/lte/examples/lena-dual-stripe.cc ns-3.22/src/lte/examples/lena-dual-stripe.cc
--- ns-3.21/src/lte/examples/lena-dual-stripe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/examples/lena-dual-stripe.cc	2015-02-05 15:46:23.000000000 -0800
@@ -40,10 +40,8 @@
 
 using namespace ns3;
 
-
 NS_LOG_COMPONENT_DEFINE ("LenaDualStripe");
 
-
 bool AreOverlapping (Box a, Box b)
 {
   return !((a.xMin > b.xMax) || (b.xMin > a.xMax) || (a.yMin > b.yMax) || (b.yMin > a.yMax));
diff -Naur ns-3.21/src/lte/examples/lena-pathloss-traces.cc ns-3.22/src/lte/examples/lena-pathloss-traces.cc
--- ns-3.21/src/lte/examples/lena-pathloss-traces.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/examples/lena-pathloss-traces.cc	2015-02-05 15:46:23.000000000 -0800
@@ -35,11 +35,9 @@
 
 using namespace ns3;
 
-
 NS_LOG_COMPONENT_DEFINE ("LenaPathlossTraces");
 
 
-
 int main (int argc, char *argv[])
 {
   double enbDist = 20.0;
diff -Naur ns-3.21/src/lte/examples/lena-simple-epc.cc ns-3.22/src/lte/examples/lena-simple-epc.cc
--- ns-3.21/src/lte/examples/lena-simple-epc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/examples/lena-simple-epc.cc	2015-02-05 15:46:23.000000000 -0800
@@ -38,7 +38,9 @@
  * attaches one UE per eNodeB starts a flow for each UE to  and from a remote host.
  * It also  starts yet another flow between each UE pair.
  */
+
 NS_LOG_COMPONENT_DEFINE ("EpcFirstExample");
+
 int
 main (int argc, char *argv[])
 {
diff -Naur ns-3.21/src/lte/examples/lena-simple-epc-emu.cc ns-3.22/src/lte/examples/lena-simple-epc-emu.cc
--- ns-3.21/src/lte/examples/lena-simple-epc-emu.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/examples/lena-simple-epc-emu.cc	2015-02-05 15:46:23.000000000 -0800
@@ -42,10 +42,8 @@
  * via a real link. 
  */
 
-
-
-
 NS_LOG_COMPONENT_DEFINE ("EpcFirstExample");
+
 int
 main (int argc, char *argv[])
 {
diff -Naur ns-3.21/src/lte/examples/wscript ns-3.22/src/lte/examples/wscript
--- ns-3.21/src/lte/examples/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/examples/wscript	2015-02-05 15:46:23.000000000 -0800
@@ -34,6 +34,9 @@
     obj = bld.create_ns3_program('lena-simple-epc',
                                  ['lte'])
     obj.source = 'lena-simple-epc.cc'
+    obj = bld.create_ns3_program('lena-deactivate-bearer',
+                                 ['lte'])
+    obj.source = 'lena-deactivate-bearer.cc'
     obj = bld.create_ns3_program('lena-x2-handover',
                                  ['lte'])
     obj.source = 'lena-x2-handover.cc'
diff -Naur ns-3.21/src/lte/helper/emu-epc-helper.cc ns-3.22/src/lte/helper/emu-epc-helper.cc
--- ns-3.21/src/lte/helper/emu-epc-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/emu-epc-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -311,7 +311,7 @@
   
 }
 
-void
+uint8_t
 EmuEpcHelper::ActivateEpsBearer (Ptr<NetDevice> ueDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer)
 {
   NS_LOG_FUNCTION (this << ueDevice << imsi);
@@ -328,12 +328,13 @@
   Ipv4Address ueAddr = ueIpv4->GetAddress (interface, 0).GetLocal ();
   NS_LOG_LOGIC (" UE IP address: " << ueAddr);  m_sgwPgwApp->SetUeAddress (imsi, ueAddr);
   
-  m_mme->AddBearer (imsi, tft, bearer);
+  uint8_t bearerId = m_mme->AddBearer (imsi, tft, bearer);
   Ptr<LteUeNetDevice> ueLteDevice = ueDevice->GetObject<LteUeNetDevice> ();
   if (ueLteDevice)
     {
       Simulator::ScheduleNow (&EpcUeNas::ActivateEpsBearer, ueLteDevice->GetNas (), bearer, tft);
     }
+  return bearerId;
 }
 
 
diff -Naur ns-3.21/src/lte/helper/emu-epc-helper.h ns-3.22/src/lte/helper/emu-epc-helper.h
--- ns-3.21/src/lte/helper/emu-epc-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/emu-epc-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -40,6 +40,8 @@
 class EpcMme;
 
 /**
+ * \ingroup lte
+ *
  * \brief Create an EPC network using EmuFdNetDevice 
  *
  * This Helper will create an EPC network topology comprising of a
@@ -63,6 +65,10 @@
   virtual ~EmuEpcHelper ();
   
   // inherited from Object
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   virtual void DoInitialize ();
   virtual void DoDispose ();
@@ -71,7 +77,7 @@
   virtual void AddEnb (Ptr<Node> enbNode, Ptr<NetDevice> lteEnbNetDevice, uint16_t cellId);
   virtual void AddUe (Ptr<NetDevice> ueLteDevice, uint64_t imsi);
   virtual void AddX2Interface (Ptr<Node> enbNode1, Ptr<Node> enbNode2);
-  virtual void ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer);
+  virtual uint8_t ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer);
   virtual Ptr<Node> GetPgwNode ();
   virtual Ipv4InterfaceContainer AssignUeIpv4Address (NetDeviceContainer ueDevices);
   virtual Ipv4Address GetUeDefaultGatewayAddress ();
@@ -85,13 +91,24 @@
    */
   Ipv4AddressHelper m_ueAddressHelper; 
 
-
   /**
    * SGW-PGW network element
    */  
   Ptr<Node> m_sgwPgw; 
+
+  /**
+   * SGW-PGW application
+   */
   Ptr<EpcSgwPgwApplication> m_sgwPgwApp;
+
+  /**
+   * TUN device implementing tunneling of user data over GTP-U/UDP/IP
+   */
   Ptr<VirtualNetDevice> m_tunDevice;
+
+  /**
+   * MME network element
+   */
   Ptr<EpcMme> m_mme;
 
   /** 
@@ -109,12 +126,30 @@
    * 
    */
   std::map<uint64_t, Ptr<NetDevice> > m_imsiEnbDeviceMap;
-  
+
+  /**
+   * Container for Ipv4Interfaces of the SGW/PGW
+   */
   Ipv4InterfaceContainer m_sgwIpIfaces; 
 
+  /**
+   * The name of the device used for the S1-U interface of the SGW
+   */
   std::string m_sgwDeviceName;
+
+  /**
+   * The name of the device used for the S1-U interface of the eNB
+   */
   std::string m_enbDeviceName;
+
+  /**
+   * MAC address used for the SGW
+   */
   std::string m_sgwMacAddress;
+
+  /**
+   * First 5 bytes of the Enb MAC address base
+   */
   std::string m_enbMacAddressBase;
 };
 
diff -Naur ns-3.21/src/lte/helper/epc-helper.h ns-3.22/src/lte/helper/epc-helper.h
--- ns-3.21/src/lte/helper/epc-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/epc-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -39,6 +39,8 @@
 class EpcMme;
 
 /**
+ * \ingroup lte
+ *
  * \brief Base helper class to handle the creation of the EPC entities.
  *
  * This class provides the API for the implementation of helpers that
@@ -60,6 +62,10 @@
   virtual ~EpcHelper ();
   
   // inherited from Object
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   virtual void DoDispose ();
 
@@ -101,7 +107,7 @@
    * \param tft the Traffic Flow Template of the new bearer
    * \param bearer struct describing the characteristics of the EPS bearer to be activated
    */
-  virtual void ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer) = 0;
+  virtual uint8_t ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer) = 0;
 
 
   /** 
diff -Naur ns-3.21/src/lte/helper/lte-global-pathloss-database.cc ns-3.22/src/lte/helper/lte-global-pathloss-database.cc
--- ns-3.21/src/lte/helper/lte-global-pathloss-database.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/lte-global-pathloss-database.cc	2015-02-05 15:46:23.000000000 -0800
@@ -30,7 +30,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteGlobalPathlossDatabase");
 
-
 LteGlobalPathlossDatabase::~LteGlobalPathlossDatabase (void)
 {
 }
diff -Naur ns-3.21/src/lte/helper/lte-global-pathloss-database.h ns-3.22/src/lte/helper/lte-global-pathloss-database.h
--- ns-3.21/src/lte/helper/lte-global-pathloss-database.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/lte-global-pathloss-database.h	2015-02-05 15:46:23.000000000 -0800
@@ -32,6 +32,8 @@
 class SpectrumPhy;
 
 /**
+ * \ingroup lte
+ *
  * Store the last pathloss value for each TX-RX pair. This is an
  * example of how the PathlossTrace (provided by some SpectrumChannel
  * implementations) work. 
@@ -70,12 +72,17 @@
   void Print ();
 
 protected:
-
-  //        CELL ID            IMSI     PATHLOSS
+  /**
+   * List of the last pathloss value for each UE by CellId.
+   * ( CELL ID,  ( IMSI,PATHLOSS ))
+   */
   std::map<uint16_t, std::map<uint64_t, double> > m_pathlossMap;
 };
 
-
+/**
+ * \ingroup lte
+ * Store the last pathloss value for each TX-RX pair for downlink
+ */
 class DownlinkLteGlobalPathlossDatabase : public LteGlobalPathlossDatabase
 {
 public:
@@ -83,7 +90,10 @@
   virtual void UpdatePathloss (std::string context, Ptr<SpectrumPhy> txPhy, Ptr<SpectrumPhy> rxPhy, double lossDb);
 };
 
-
+/**
+ * \ingroup lte
+ * Store the last pathloss value for each TX-RX pair for uplink
+ */
 class UplinkLteGlobalPathlossDatabase : public LteGlobalPathlossDatabase
 {
 public:
diff -Naur ns-3.21/src/lte/helper/lte-helper.cc ns-3.22/src/lte/helper/lte-helper.cc
--- ns-3.21/src/lte/helper/lte-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/lte-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -62,10 +62,10 @@
 #include <ns3/lte-spectrum-value-helper.h>
 #include <ns3/epc-x2.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteHelper");
+
 NS_OBJECT_ENSURE_REGISTERED (LteHelper);
 
 LteHelper::LteHelper (void)
@@ -603,7 +603,6 @@
   dlPhy->AddInterferenceCtrlChunkProcessor (pInterf); // for RSRQ evaluation of UE Measurements
 
   Ptr<LteChunkProcessor> pCtrl = Create<LteChunkProcessor> ();
-  pCtrl->AddCallback (MakeCallback (&LteUePhy::GenerateCtrlCqiReport, phy));
   pCtrl->AddCallback (MakeCallback (&LteSpectrumPhy::UpdateSinrPerceived, dlPhy));
   dlPhy->AddCtrlSinrChunkProcessor (pCtrl);
 
@@ -611,13 +610,21 @@
   pData->AddCallback (MakeCallback (&LteSpectrumPhy::UpdateSinrPerceived, dlPhy));
   dlPhy->AddDataSinrChunkProcessor (pData);
 
-  Ptr<LteChunkProcessor> pDataInterf = Create<LteChunkProcessor> ();
   if (m_usePdschForCqiGeneration)
     {
+      // CQI calculation based on PDCCH for signal and PDSCH for interference
+      pCtrl->AddCallback (MakeCallback (&LteUePhy::GenerateMixedCqiReport, phy));
+      Ptr<LteChunkProcessor> pDataInterf = Create<LteChunkProcessor> ();      
       pDataInterf->AddCallback (MakeCallback (&LteUePhy::ReportDataInterference, phy));
+      dlPhy->AddInterferenceDataChunkProcessor (pDataInterf);
+    }
+  else
+    {
+      // CQI calculation based on PDCCH for both signal and interference
+      pCtrl->AddCallback (MakeCallback (&LteUePhy::GenerateCtrlCqiReport, phy));
     }
 
-  dlPhy->AddInterferenceDataChunkProcessor (pDataInterf);
+
 
   dlPhy->SetChannel (m_downlinkChannel);
   ulPhy->SetChannel (m_uplinkChannel);
@@ -813,18 +820,20 @@
   Attach (ueDevice, closestEnbDevice);
 }
 
-void
+uint8_t
 LteHelper::ActivateDedicatedEpsBearer (NetDeviceContainer ueDevices, EpsBearer bearer, Ptr<EpcTft> tft)
 {
   NS_LOG_FUNCTION (this);
   for (NetDeviceContainer::Iterator i = ueDevices.Begin (); i != ueDevices.End (); ++i)
     {
-      ActivateDedicatedEpsBearer (*i, bearer, tft);
+      uint8_t bearerId = ActivateDedicatedEpsBearer (*i, bearer, tft);
+      return bearerId;
     }
+  return 0;
 }
 
 
-void
+uint8_t
 LteHelper::ActivateDedicatedEpsBearer (Ptr<NetDevice> ueDevice, EpsBearer bearer, Ptr<EpcTft> tft)
 {
   NS_LOG_FUNCTION (this);
@@ -832,19 +841,71 @@
   NS_ASSERT_MSG (m_epcHelper != 0, "dedicated EPS bearers cannot be set up when the EPC is not used");
 
   uint64_t imsi = ueDevice->GetObject<LteUeNetDevice> ()->GetImsi ();
-  m_epcHelper->ActivateEpsBearer (ueDevice, imsi, tft, bearer);
+  uint8_t bearerId = m_epcHelper->ActivateEpsBearer (ueDevice, imsi, tft, bearer);
+  return bearerId;
 }
 
+/**
+ * \ingroup lte
+ *
+ * DrbActivatior allows user to activate bearers for UEs
+ * when EPC is not used. Activation function is hooked to
+ * the Enb RRC Connection Estabilished trace source. When
+ * UE change its RRC state to CONNECTED_NORMALLY, activation
+ * function is called and bearer is activated.
+*/
 class DrbActivator : public SimpleRefCount<DrbActivator>
 {
 public:
+  /**
+  * DrbActivator Constructor
+  *
+  * \param ueDevice the UeNetDevice for which bearer will be activated
+  * \param bearer the bearer configuration
+  */
   DrbActivator (Ptr<NetDevice> ueDevice, EpsBearer bearer);
+
+  /**
+   * Function hooked to the Enb RRC Connection Established trace source
+   * Fired upon successful RRC connection establishment.
+   *
+   * \param a DrbActivator object
+   * \param context
+   * \param imsi
+   * \param cellId
+   * \param rnti
+   */
   static void ActivateCallback (Ptr<DrbActivator> a, std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti);
+
+  /**
+   * Procedure firstly checks if bearer was not activated, if IMSI
+   * from trace source equals configured one and if UE is really
+   * in RRC connected state. If all requirements are met, it performs
+   * bearer activation.
+   *
+   * \param imsi
+   * \param cellId
+   * \param rnti
+   */
   void ActivateDrb (uint64_t imsi, uint16_t cellId, uint16_t rnti);
 private:
+  /**
+   * Bearer can be activated only once. This value stores state of
+   * bearer. Initially is set to false and changed to true during
+   * bearer activation.
+   */
   bool m_active;
+  /**
+   * UeNetDevice for which bearer will be activated
+   */
   Ptr<NetDevice> m_ueDevice;
+  /**
+   * Configuration of bearer which will be activated
+   */
   EpsBearer m_bearer;
+  /**
+   * imsi the unique UE identifier
+   */
   uint64_t m_imsi;
 };
 
@@ -876,8 +937,8 @@
       Ptr<LteEnbRrc> enbRrc = enbLteDevice->GetObject<LteEnbNetDevice> ()->GetRrc ();
       NS_ASSERT (ueRrc->GetCellId () == enbLteDevice->GetCellId ());
       Ptr<UeManager> ueManager = enbRrc->GetUeManager (rnti);
-      NS_ASSERT (ueManager->GetState () == UeManager::CONNECTED_NORMALLY ||
-                 ueManager->GetState () == UeManager::CONNECTION_RECONFIGURATION);
+      NS_ASSERT (ueManager->GetState () == UeManager::CONNECTED_NORMALLY
+                 || ueManager->GetState () == UeManager::CONNECTION_RECONFIGURATION);
       EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters params;
       params.rnti = rnti;
       params.bearer = m_bearer;
@@ -955,8 +1016,30 @@
   sourceRrc->SendHandoverRequest (rnti, targetCellId);
 }
 
+void
+LteHelper::DeActivateDedicatedEpsBearer (Ptr<NetDevice> ueDevice,Ptr<NetDevice> enbDevice, uint8_t bearerId)
+{
+  NS_LOG_FUNCTION (this << ueDevice << bearerId);
+  NS_ASSERT_MSG (m_epcHelper != 0, "Dedicated EPS bearers cannot be de-activated when the EPC is not used");
+  NS_ASSERT_MSG (bearerId != 1, "Default bearer cannot be de-activated until and unless and UE is released");
+
+  DoDeActivateDedicatedEpsBearer (ueDevice, enbDevice, bearerId);
+}
 
+void
+LteHelper::DoDeActivateDedicatedEpsBearer (Ptr<NetDevice> ueDevice, Ptr<NetDevice> enbDevice, uint8_t bearerId)
+{
+  NS_LOG_FUNCTION (this << ueDevice << bearerId);
 
+  //Extract IMSI and rnti
+  uint64_t imsi = ueDevice->GetObject<LteUeNetDevice> ()->GetImsi ();
+  uint16_t rnti = ueDevice->GetObject<LteUeNetDevice> ()->GetRrc ()->GetRnti ();
+
+
+  Ptr<LteEnbRrc> enbRrc = enbDevice->GetObject<LteEnbNetDevice> ()->GetRrc ();
+
+  enbRrc->DoSendReleaseDataRadioBearer (imsi,rnti,bearerId);
+}
 
 
 void 
diff -Naur ns-3.21/src/lte/helper/lte-helper.h ns-3.22/src/lte/helper/lte-helper.h
--- ns-3.21/src/lte/helper/lte-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/lte-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -50,7 +50,48 @@
 
 /**
  * \ingroup lte
- * \brief Creation and configuration of LTE entities
+ *
+ * Creation and configuration of LTE entities. One LteHelper instance is
+ * typically enough for an LTE simulation. To create it:
+ *
+ *     Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+ *
+ * The general responsibility of the helper is to create various LTE objects
+ * and arrange them together to make the whole LTE system. The overall
+ * arrangement would look like the following:
+ * - Downlink spectrum channel
+ *   + Path loss model
+ *   + Fading model
+ * - Uplink spectrum channel
+ *   + Path loss model
+ *   + Fading model
+ * - eNodeB node(s)
+ *   + Mobility model
+ *   + eNodeB device(s)
+ *     * Antenna model
+ *     * eNodeB PHY (includes spectrum PHY, interference model, HARQ model)
+ *     * eNodeB MAC
+ *     * eNodeB RRC (includes RRC protocol)
+ *     * Scheduler
+ *     * Handover algorithm
+ *     * FFR (frequency reuse) algorithm
+ *     * ANR (automatic neighbour relation)
+ *   + EPC related models (EPC application, Internet stack, X2 interface)
+ * - UE node(s)
+ *   + Mobility model
+ *   + UE device(s)
+ *     * Antenna model
+ *     * UE PHY (includes spectrum PHY, interference model, HARQ model)
+ *     * UE MAC
+ *     * UE RRC (includes RRC protocol)
+ *     * NAS
+ * - EPC helper
+ * - Various statistics calculator objects
+ *
+ * Spetrum channels are created automatically: one for DL, and one for UL.
+ * eNodeB devices are created by calling InstallEnbDevice(), while UE devices
+ * are created by calling InstallUeDevice(). EPC helper can be set by using
+ * SetEpcHelper().
  */
 class LteHelper : public Object
 {
@@ -58,13 +99,16 @@
   LteHelper (void);
   virtual ~LteHelper (void);
 
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   virtual void DoDispose (void);
 
-
   /** 
    * Set the EpcHelper to be used to setup the EPC network in
-   * conjunction with the setup of the LTE radio access network 
+   * conjunction with the setup of the LTE radio access network.
    *
    * \note if no EpcHelper is ever set, then LteHelper will default
    * to creating an LTE-only simulation with no EPC, using LteRlcSm as
@@ -78,14 +122,16 @@
   void SetEpcHelper (Ptr<EpcHelper> h);
 
   /** 
+   * Set the type of path loss model to be used for both DL and UL channels.
    * 
-   * 
-   * \param type the type of pathloss model to be used for the eNBs
+   * \param type type of path loss model, must be a type name of any class
+   *             inheriting from ns3::PropagationLossModel, for example:
+   *             "ns3::FriisPropagationLossModel"
    */
   void SetPathlossModelType (std::string type);
 
   /**
-   * set an attribute for the pathloss model to be created
+   * Set an attribute for the path loss models to be created.
    * 
    * \param n the name of the attribute
    * \param v the value of the attribute
@@ -93,8 +139,13 @@
   void SetPathlossModelAttribute (std::string n, const AttributeValue &v);
 
   /** 
+   * Set the type of scheduler to be used by eNodeB devices.
    * 
-   * \param type the type of scheduler to be used for the eNBs
+   * \param type type of scheduler, must be a type name of any class
+   *             inheriting from ns3::FfMacScheduler, for example:
+   *             "ns3::PfFfMacScheduler"
+   *
+   * Equivalent with setting the `Scheduler` attribute.
    */
   void SetSchedulerType (std::string type);
 
@@ -105,7 +156,7 @@
   std::string GetSchedulerType () const; 
 
   /**
-   * set an attribute for the scheduler to be created
+   * Set an attribute for the scheduler to be created.
    * 
    * \param n the name of the attribute
    * \param v the value of the attribute
@@ -113,8 +164,13 @@
   void SetSchedulerAttribute (std::string n, const AttributeValue &v);
 
   /**
+   * Set the type of FFR algorithm to be used by eNodeB devices.
+   *
+   * \param type type of FFR algorithm, must be a type name of any class
+   *             inheriting from ns3::LteFfrAlgorithm, for example:
+   *             "ns3::LteFrNoOpAlgorithm"
    *
-   * \param type the type of FFR algorithm to be used for the eNBs
+   * Equivalent with setting the `FfrAlgorithm` attribute.
    */
   void SetFfrAlgorithmType (std::string type);
 
@@ -125,7 +181,7 @@
   std::string GetFfrAlgorithmType () const;
 
   /**
-   * set an attribute for the FFR algorithm to be created
+   * Set an attribute for the FFR algorithm to be created.
    *
    * \param n the name of the attribute
    * \param v the value of the attribute
@@ -133,8 +189,13 @@
   void SetFfrAlgorithmAttribute (std::string n, const AttributeValue &v);
 
   /**
+   * Set the type of handover algorithm to be used by eNodeB devices.
+   *
+   * \param type type of handover algorithm, must be a type name of any class
+   *             inheriting from ns3::LteHandoverAlgorithm, for example:
+   *             "ns3::NoOpHandoverAlgorithm"
    *
-   * \param type the type of handover algorithm to be used for the eNBs
+   * Equivalent with setting the `HandoverAlgorithm` attribute.
    */
   void SetHandoverAlgorithmType (std::string type);
 
@@ -145,7 +206,7 @@
   std::string GetHandoverAlgorithmType () const;
 
   /**
-   * set an attribute for the handover algorithm to be created
+   * Set an attribute for the handover algorithm to be created.
    *
    * \param n the name of the attribute
    * \param v the value of the attribute
@@ -153,43 +214,49 @@
   void SetHandoverAlgorithmAttribute (std::string n, const AttributeValue &v);
 
   /**
-   * set an attribute for the LteEnbNetDevice to be created
+   * Set an attribute for the eNodeB devices (LteEnbNetDevice) to be created.
    * 
-   * \param n the name of the attribute
+   * \param n the name of the attribute.
    * \param v the value of the attribute
    */
   void SetEnbDeviceAttribute (std::string n, const AttributeValue &v);
 
   /** 
+   * Set the type of antenna model to be used by eNodeB devices.
    * 
-   * \param type the type of AntennaModel to be used for the eNBs
+   * \param type type of antenna model, must be a type name of any class
+   *             inheriting from ns3::AntennaModel, for example:
+   *             "ns3::IsotropicAntennaModel"
    */
   void SetEnbAntennaModelType (std::string type);
 
   /**
-   * set an attribute for the AntennaModel to be used for the eNBs
+   * Set an attribute for the eNodeB antenna model to be created.
    * 
-   * \param n the name of the attribute
+   * \param n the name of the attribute.
    * \param v the value of the attribute
    */
   void SetEnbAntennaModelAttribute (std::string n, const AttributeValue &v);
 
   /**
-   * set an attribute for the LteUeNetDevice to be created
+   * Set an attribute for the UE devices (LteUeNetDevice) to be created.
    *
-   * \param n the name of the attribute
+   * \param n the name of the attribute.
    * \param v the value of the attribute
    */
   void SetUeDeviceAttribute (std::string n, const AttributeValue &v);
 
   /** 
+   * Set the type of antenna model to be used by UE devices.
    * 
-   * \param type the type of AntennaModel to be used for the UEs
+   * \param type type of antenna model, must be a type name of any class
+   *             inheriting from ns3::AntennaModel, for example:
+   *             "ns3::IsotropicAntennaModel"
    */
   void SetUeAntennaModelType (std::string type);
 
   /**
-   * set an attribute for the AntennaModel to be used for the UEs
+   * Set an attribute for the UE antenna model to be created.
    * 
    * \param n the name of the attribute
    * \param v the value of the attribute
@@ -197,13 +264,16 @@
   void SetUeAntennaModelAttribute (std::string n, const AttributeValue &v);
 
   /** 
-   * 
-   * \param type the type of SpectrumChannel to be used for the UEs
+   * Set the type of spectrum channel to be used in both DL and UL.
+   *
+   * \param type type of spectrum channel model, must be a type name of any
+   *             class inheriting from ns3::SpectrumChannel, for example:
+   *             "ns3::MultiModelSpectrumChannel"
    */
   void SetSpectrumChannelType (std::string type);
 
   /**
-   * set an attribute for the SpectrumChannel to be used for the UEs
+   * Set an attribute for the spectrum channel to be created (both DL and UL).
    * 
    * \param n the name of the attribute
    * \param v the value of the attribute
@@ -211,19 +281,17 @@
   void SetSpectrumChannelAttribute (std::string n, const AttributeValue &v);
 
   /**
-   * create a set of eNB devices
+   * Create a set of eNodeB devices.
    *
    * \param c the node container where the devices are to be installed
-   *
    * \return the NetDeviceContainer with the newly created devices
    */
   NetDeviceContainer InstallEnbDevice (NodeContainer c);
 
   /**
-   * create a set of UE devices
+   * Create a set of UE devices.
    *
    * \param c the node container where the devices are to be installed
-   *
    * \return the NetDeviceContainer with the newly created devices
    */
   NetDeviceContainer InstallUeDevice (NodeContainer c);
@@ -328,33 +396,42 @@
   void AttachToClosestEnb (Ptr<NetDevice> ueDevice, NetDeviceContainer enbDevices);
 
   /**
-   * Activate a dedicated EPS bearer on a given set of UE devices
+   * Activate a dedicated EPS bearer on a given set of UE devices.
    *
    * \param ueDevices the set of UE devices
    * \param bearer the characteristics of the bearer to be activated
    * \param tft the Traffic Flow Template that identifies the traffic to go on this bearer
    */
-  void ActivateDedicatedEpsBearer (NetDeviceContainer ueDevices, EpsBearer bearer, Ptr<EpcTft> tft);
+  uint8_t ActivateDedicatedEpsBearer (NetDeviceContainer ueDevices, EpsBearer bearer, Ptr<EpcTft> tft);
 
   /**
-   * Activate a dedicated EPS bearer on a given UE device
+   * Activate a dedicated EPS bearer on a given UE device.
    *
    * \param ueDevice the UE device
    * \param bearer the characteristics of the bearer to be activated
-   * \param tft the Traffic Flow Template that identifies the traffic to go on this bearer
+   * \param tft the Traffic Flow Template that identifies the traffic to go on this bearer.
    */
-  void ActivateDedicatedEpsBearer (Ptr<NetDevice> ueDevice, EpsBearer bearer, Ptr<EpcTft> tft);
+  uint8_t ActivateDedicatedEpsBearer (Ptr<NetDevice> ueDevice, EpsBearer bearer, Ptr<EpcTft> tft);
 
+  /**
+   *  \brief Manually trigger dedicated bearer de-activation at specific simulation time
+   *  \param ueDevice the UE on which dedicated bearer to be de-activated must be of the type LteUeNetDevice
+   *  \param enbDevice eNB, must be of the type LteEnbNetDevice
+   *  \param bearerId Bearer Identity which is to be de-activated
+   *
+   *  \warning Requires the use of EPC mode. See SetEpcHelper() method.
+   */
 
+  void DeActivateDedicatedEpsBearer (Ptr<NetDevice> ueDevice, Ptr<NetDevice> enbDevice, uint8_t bearerId);
   /**
-   * Create an X2 interface between all the eNBs in a given set
+   * Create an X2 interface between all the eNBs in a given set.
    *
    * \param enbNodes the set of eNB nodes
    */
   void AddX2Interface (NodeContainer enbNodes);
 
   /**
-   * Create an X2 interface between two eNBs
+   * Create an X2 interface between two eNBs.
    *
    * \param enbNode1 one eNB of the X2 interface
    * \param enbNode2 the other eNB of the X2 interface
@@ -362,50 +439,51 @@
   void AddX2Interface (Ptr<Node> enbNode1, Ptr<Node> enbNode2);
 
   /**
-   * \brief Manually trigger an X2-based handover of a UE between two eNBs at a
-   *        specific simulation time.
-   * \param hoTime when the Handover is initiated
+   * Manually trigger an X2-based handover.
+   *
+   * \param hoTime when the handover shall be initiated
    * \param ueDev the UE that hands off, must be of the type LteUeNetDevice
    * \param sourceEnbDev source eNB, must be of the type LteEnbNetDevice
    *                     (originally the UE is attached to this eNB)
    * \param targetEnbDev target eNB, must be of the type LteEnbNetDevice
-   *                     (the UE is finally connected to this eNB)
+   *                     (the UE would be connected to this eNB after the
+   *                     handover)
    *
-   * \warning Requires the use of EPC mode. See SetEpcHelper() method.
+   * \warning Requires the use of EPC mode. See SetEpcHelper() method
    */
   void HandoverRequest (Time hoTime, Ptr<NetDevice> ueDev,
                         Ptr<NetDevice> sourceEnbDev, Ptr<NetDevice> targetEnbDev);
 
 
   /** 
-   * Call ActivateDataRadioBearer (ueDevice, bearer) for each UE
-   * device in a given set
+   * Activate a Data Radio Bearer on a given UE devices (for LTE-only simulation).
    * 
    * \param ueDevices the set of UE devices
-   * \param bearer
+   * \param bearer the characteristics of the bearer to be activated
    */
   void ActivateDataRadioBearer (NetDeviceContainer ueDevices,  EpsBearer bearer);
 
   /** 
-   * Activate a Data Radio Bearer for a simplified LTE-only simulation
-   * without EPC. This method will schedule the actual activation of
+   * Activate a Data Radio Bearer on a UE device (for LTE-only simulation).
+   * This method will schedule the actual activation
    * the bearer so that it happens after the UE got connected.
    * 
-   * \param ueDevice the device of the UE for which the radio bearer
-   * is to be activated
+   * \param ueDevice the UE device
    * \param bearer the characteristics of the bearer to be activated
    */
   void ActivateDataRadioBearer (Ptr<NetDevice> ueDevice,  EpsBearer bearer);
 
   /** 
+   * Set the type of fading model to be used in both DL and UL.
    * 
-   * 
-   * \param model the fading model to be used
+   * \param type type of fading model, must be a type name of any class
+   *             inheriting from ns3::SpectrumPropagationLossModel, for
+   *             example: "ns3::TraceFadingLossModel"
    */
-  void SetFadingModel (std::string model);
+  void SetFadingModel (std::string type);
 
   /**
-   * set an attribute of the fading model
+   * Set an attribute for the fading model to be created (both DL and UL).
    *
    * \param n the name of the attribute
    * \param v the value of the attribute
@@ -413,8 +491,7 @@
   void SetFadingModelAttribute (std::string n, const AttributeValue &v);
 
   /**
-   * Enables logging for all components of the LENA architecture
-   *
+   * Enables full-blown logging for major components of the LENA architecture.
    */
   void EnableLogComponents (void);
 
@@ -426,59 +503,57 @@
   void EnableTraces (void);
 
   /**
-   * Enable trace sinks for PHY layer
+   * Enable trace sinks for PHY layer.
    */
   void EnablePhyTraces (void);
 
-
-
   /**
-   * Enable trace sinks for DL PHY layer
+   * Enable trace sinks for DL PHY layer.
    */
   void EnableDlPhyTraces (void);
 
   /**
-   * Enable trace sinks for UL PHY layer
+   * Enable trace sinks for UL PHY layer.
    */
   void EnableUlPhyTraces (void);
 
   /**
-   * Enable trace sinks for DL transmission PHY layer
+   * Enable trace sinks for DL transmission PHY layer.
    */
   void EnableDlTxPhyTraces (void);
 
   /**
-   * Enable trace sinks for UL transmission PHY layer
+   * Enable trace sinks for UL transmission PHY layer.
    */
   void EnableUlTxPhyTraces (void);
 
   /**
-   * Enable trace sinks for DL reception PHY layer
+   * Enable trace sinks for DL reception PHY layer.
    */
   void EnableDlRxPhyTraces (void);
 
   /**
-   * Enable trace sinks for UL reception PHY layer
+   * Enable trace sinks for UL reception PHY layer.
    */
   void EnableUlRxPhyTraces (void);
 
   /**
-   * Enable trace sinks for MAC layer
+   * Enable trace sinks for MAC layer.
    */
   void EnableMacTraces (void);
 
   /**
-   * Enable trace sinks for DL MAC layer
+   * Enable trace sinks for DL MAC layer.
    */
   void EnableDlMacTraces (void);
 
   /**
-   * Enable trace sinks for UL MAC layer
+   * Enable trace sinks for UL MAC layer.
    */
   void EnableUlMacTraces (void);
 
   /**
-   * Enable trace sinks for RLC layer
+   * Enable trace sinks for RLC layer.
    */
   void EnableRlcTraces (void);
 
@@ -499,21 +574,19 @@
    */
   Ptr<RadioBearerStatsCalculator> GetPdcpStats (void);
 
-  enum LteEpsBearerToRlcMapping_t {RLC_SM_ALWAYS = 1,
-                                   RLC_UM_ALWAYS = 2,
-                                   RLC_AM_ALWAYS = 3,
-                                   PER_BASED = 4};
-
   /**
-  * 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
-  * called by the user.
-  *
-  * \param c NetDeviceContainer of the set of net devices for which the 
-  *          LteNetDevice should be modified to use a fixed stream
-  * \param stream first stream index to use
-  * \return the number of stream indices assigned by this helper
+   * Assign a fixed random variable stream number to the random variables used.
+   *
+   * The InstallEnbDevice() or InstallUeDevice method should have previously
+   * been called by the user on the given devices.
+   *
+   * If TraceFadingLossModel has been set as the fading model type, this method
+   * will also assign a stream number to it, if none has been assigned before.
+   *
+   * \param c NetDeviceContainer of the set of net devices for which the
+   *          LteNetDevice should be modified to use a fixed stream
+   * \param stream first stream index to use
+   * \return the number of stream indices (possibly zero) that have been assigned
   */
   int64_t AssignStreams (NetDeviceContainer c, int64_t stream);
 
@@ -523,26 +596,27 @@
 
 private:
   /**
-   * \brief Create an eNodeB device (LteEnbNetDevice) on the given node.
+   * Create an eNodeB device (LteEnbNetDevice) on the given node.
    * \param n the node where the device is to be installed
    * \return pointer to the created device
    */
   Ptr<NetDevice> InstallSingleEnbDevice (Ptr<Node> n);
 
   /**
-   * \brief Create a UE device (LteUeNetDevice) on the given node.
+   * Create a UE device (LteUeNetDevice) on the given node
    * \param n the node where the device is to be installed
    * \return pointer to the created device
    */
   Ptr<NetDevice> InstallSingleUeDevice (Ptr<Node> n);
 
   /**
-   * \brief The actual function to trigger a manual handover.
+   * The actual function to trigger a manual handover.
    * \param ueDev the UE that hands off, must be of the type LteUeNetDevice
    * \param sourceEnbDev source eNB, must be of the type LteEnbNetDevice
    *                     (originally the UE is attached to this eNB)
    * \param targetEnbDev target eNB, must be of the type LteEnbNetDevice
-   *                     (the UE is finally connected to this eNB)
+   *                     (the UE would be connected to this eNB after the
+   *                     handover)
    *
    * This method is normally scheduled by HandoverRequest() to run at a specific
    * time where a manual handover is desired by the simulation user.
@@ -551,49 +625,114 @@
                           Ptr<NetDevice> sourceEnbDev,
                           Ptr<NetDevice> targetEnbDev);
 
+
+  /**
+   *  \brief The actual function to trigger a manual bearer de-activation
+   *  \param ueDevice the UE on which bearer to be de-activated must be of the type LteUeNetDevice
+   *  \param enbDevice eNB, must be of the type LteEnbNetDevice
+   *  \param bearerId Bearer Identity which is to be de-activated
+   *
+   *  This method is normally scheduled by DeActivateDedicatedEpsBearer() to run at a specific
+   *  time when a manual bearer de-activation is desired by the simulation user.
+   */
+  void DoDeActivateDedicatedEpsBearer (Ptr<NetDevice> ueDevice, Ptr<NetDevice> enbDevice, uint8_t bearerId);
+
+
+  /// The downlink LTE channel used in the simulation.
   Ptr<SpectrumChannel> m_downlinkChannel;
+  /// The uplink LTE channel used in the simulation.
   Ptr<SpectrumChannel> m_uplinkChannel;
-
+  /// The path loss model used in the downlink channel.
   Ptr<Object> m_downlinkPathlossModel;
+  /// The path loss model used in the uplink channel.
   Ptr<Object> m_uplinkPathlossModel;
 
+  /// Factory of MAC scheduler object.
   ObjectFactory m_schedulerFactory;
+  /// Factory of FFR (frequency reuse) algorithm object.
   ObjectFactory m_ffrAlgorithmFactory;
+  /// Factory of handover algorithm object.
   ObjectFactory m_handoverAlgorithmFactory;
-  ObjectFactory m_propagationModelFactory;
+  /// Factory of LteEnbNetDevice objects.
   ObjectFactory m_enbNetDeviceFactory;
+  /// Factory of antenna object for eNodeB.
   ObjectFactory m_enbAntennaModelFactory;
+  /// Factory for LteUeNetDevice objects.
   ObjectFactory m_ueNetDeviceFactory;
+  /// Factory of antenna object for UE.
   ObjectFactory m_ueAntennaModelFactory;
-
+  /// Factory of path loss model object for the downlink channel.
   ObjectFactory m_dlPathlossModelFactory;
+  /// Factory of path loss model object for the uplink channel.
   ObjectFactory m_ulPathlossModelFactory;
-
+  /// Factory of both the downlink and uplink LTE channels.
   ObjectFactory m_channelFactory;
 
+  /// Name of fading model type, e.g., "ns3::TraceFadingLossModel".
   std::string m_fadingModelType;
+  /// Factory of fading model object for both the downlink and uplink channels.
   ObjectFactory m_fadingModelFactory;
+  /// The fading model used in both the downlink and uplink channels.
   Ptr<SpectrumPropagationLossModel> m_fadingModule;
+  /**
+   * True if a random variable stream number has been assigned for the fading
+   * model. Used to prevent such assignment to be done more than once.
+   */
   bool m_fadingStreamsAssigned;
 
+  /// Container of PHY layer statistics.
   Ptr<PhyStatsCalculator> m_phyStats;
+  /// Container of PHY layer statistics related to transmission.
   Ptr<PhyTxStatsCalculator> m_phyTxStats;
+  /// Container of PHY layer statistics related to reception.
   Ptr<PhyRxStatsCalculator> m_phyRxStats;
+  /// Container of MAC layer statistics.
   Ptr<MacStatsCalculator> m_macStats;
+  /// Container of RLC layer statistics.
   Ptr<RadioBearerStatsCalculator> m_rlcStats;
+  /// Container of PDCP layer statistics.
   Ptr<RadioBearerStatsCalculator> m_pdcpStats;
+  /// Connects RLC and PDCP statistics containers to appropriate trace sources
   RadioBearerStatsConnector m_radioBearerStatsConnector;
 
+  /**
+   * Helper which provides implementation of core network. Initially empty
+   * (i.e., LTE-only simulation without any core network) and then might be
+   * set using SetEpcHelper().
+   */
   Ptr<EpcHelper> m_epcHelper;
 
+  /**
+   * Keep track of the number of IMSI allocated. Increases by one every time a
+   * new UE is installed (by InstallSingleUeDevice()). The first UE will have
+   * an IMSI of 1. The maximum number of UE is 2^64 (~4.2e9).
+   */
   uint64_t m_imsiCounter;
+  /**
+   * Keep track of the number of cell ID allocated. Increases by one every time
+   * a new eNodeB is installed (by InstallSingleEnbDevice()). The first eNodeB
+   * will have a cell ID of 1. The maximum number of eNodeB is 65535.
+   */
   uint16_t m_cellIdCounter;
 
+  /**
+   * The `UseIdealRrc` attribute. If true, LteRrcProtocolIdeal will be used for
+   * RRC signaling. If false, LteRrcProtocolReal will be used.
+   */
   bool m_useIdealRrc;
+  /**
+   * The `AnrEnabled` attribute. Activate or deactivate Automatic Neighbour
+   * Relation function.
+   */
   bool m_isAnrEnabled;
-
+  /**
+   * The `UsePdschForCqiGeneration` attribute. If true, DL-CQI will be
+   * calculated from PDCCH as signal and PDSCH as interference. If false,
+   * DL-CQI will be calculated from PDCCH as signal and PDCCH as interference.
+   */
   bool m_usePdschForCqiGeneration;
-};
+
+}; // end of `class LteHelper`
 
 
 } // namespace ns3
diff -Naur ns-3.21/src/lte/helper/lte-hex-grid-enb-topology-helper.cc ns-3.22/src/lte/helper/lte-hex-grid-enb-topology-helper.cc
--- ns-3.21/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -28,10 +28,10 @@
 #include <iostream>
 
 
-NS_LOG_COMPONENT_DEFINE ("LteHexGridEnbTopologyHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteHexGridEnbTopologyHelper");
+
 NS_OBJECT_ENSURE_REGISTERED (LteHexGridEnbTopologyHelper);
 
 LteHexGridEnbTopologyHelper::LteHexGridEnbTopologyHelper ()
diff -Naur ns-3.21/src/lte/helper/lte-hex-grid-enb-topology-helper.h ns-3.22/src/lte/helper/lte-hex-grid-enb-topology-helper.h
--- ns-3.21/src/lte/helper/lte-hex-grid-enb-topology-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/lte-hex-grid-enb-topology-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -25,9 +25,9 @@
 
 namespace ns3 {
 
-
-
 /**
+ * \ingroup lte
+ *
  * This helper class allows to easily create a topology with eNBs
  * grouped in three-sector sites layed out on an hexagonal grid. The
  * layout is done row-wise. 
@@ -39,6 +39,10 @@
   LteHexGridEnbTopologyHelper (void);
   virtual ~LteHexGridEnbTopologyHelper (void);
 
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   virtual void DoDispose (void);
 
@@ -68,13 +72,41 @@
   NetDeviceContainer SetPositionAndInstallEnbDevice (NodeContainer c);
 
 private:
-
+  /**
+   * Pointer to LteHelper object
+   */
   Ptr<LteHelper> m_lteHelper;
+
+  /**
+   * The offset [m] in the position for the node of each sector with
+   * respect to the center of the three-sector site
+   */
   double m_offset;
+
+  /**
+   * The distance [m] between nearby sites
+   */
   double m_d;
+
+  /**
+   * The x coordinate where the hex grid starts
+   */
   double m_xMin;
+
+  /**
+   * The y coordinate where the hex grid starts
+   */
   double m_yMin;
+
+  /**
+   * The number of sites in even rows (odd rows will have
+   * one additional site)
+   */
   uint32_t m_gridWidth;
+
+  /**
+   * The height [m] of each site
+   */
   uint32_t m_siteHeight;
 
 };
diff -Naur ns-3.21/src/lte/helper/lte-stats-calculator.cc ns-3.22/src/lte/helper/lte-stats-calculator.cc
--- ns-3.21/src/lte/helper/lte-stats-calculator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/lte-stats-calculator.cc	2015-02-05 15:46:23.000000000 -0800
@@ -31,6 +31,8 @@
 
 NS_LOG_COMPONENT_DEFINE ("LteStatsCalculator");
 
+NS_OBJECT_ENSURE_REGISTERED (LteStatsCalculator);
+
 LteStatsCalculator::LteStatsCalculator ()
   : m_dlOutputFilename (""),
     m_ulOutputFilename ("")
diff -Naur ns-3.21/src/lte/helper/lte-stats-calculator.h ns-3.22/src/lte/helper/lte-stats-calculator.h
--- ns-3.21/src/lte/helper/lte-stats-calculator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/lte-stats-calculator.h	2015-02-05 15:46:23.000000000 -0800
@@ -27,6 +27,14 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup lte
+ *
+ * Base class for ***StatsCalculator classes. Provides
+ * basic functionality to parse and store IMSI and CellId.
+ * Also stores names of output files.
+ */
+
 class LteStatsCalculator : public Object
 {
 public:
@@ -40,6 +48,10 @@
    */
   virtual ~LteStatsCalculator ();
 
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -112,21 +124,85 @@
 
 protected:
 
+  /**
+   * Retrieves IMSI from Enb RLC path in the attribute system
+   * @param path Path in the attribute system to get
+   * @return the IMSI associated with the given path
+   */
   static uint64_t FindImsiFromEnbRlcPath (std::string path);
+
+  /**
+   * Retrieves IMSI from Ue PHY path in the attribute system
+   * @param path Path in the attribute system to get
+   * @return the IMSI associated with the given path
+   */
   static uint64_t FindImsiFromUePhy (std::string path);
-  static uint64_t FindImsiFromLteNetDevice (std::string path);  
+
+  /**
+   * Retrieves IMSI from LteNetDevice path in the attribute system
+   * @param path Path in the attribute system to get
+   * @return the IMSI associated with the given path
+   */
+  static uint64_t FindImsiFromLteNetDevice (std::string path);
+
+  /**
+   * Retrieves CellId from Enb RLC path in the attribute system
+   * @param path Path in the attribute system to get
+   * @return the CellId associated with the given path
+   */
   static uint16_t FindCellIdFromEnbRlcPath (std::string path);
+
+  /**
+   * Retrieves IMSI from Enb MAC path in the attribute system
+   * @param path Path in the attribute system to get
+   * @param rnti RNTI of UE for which IMSI is needed
+   * @return the IMSI associated with the given path and RNTI
+   */
   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);  
+
+  /**
+   * Retrieves CellId from Enb MAC path in the attribute system
+   * @param path Path in the attribute system to get
+   * @param rnti RNTI of UE for which CellId is needed
+   * @return the CellId associated with the given path and RNTI
+   */
+  static uint16_t FindCellIdFromEnbMac (std::string path, uint16_t rnti);
+
+  /**
+   * Retrieves IMSI from path for Enb in the attribute system
+   * @param path Path in the attribute system to get
+   * @param rnti RNTI of UE for which IMSI is needed
+   * @return the IMSI associated with the given path and RNTI
+   */
+  static uint64_t FindImsiForEnb (std::string path, uint16_t rnti);
+
+  /**
+   * Retrieves IMSI from path for Ue in the attribute system
+   * @param path Path in the attribute system to get
+   * @param rnti RNTI of UE for which IMSI is needed
+   * @return the IMSI associated with the given path and RNTI
+   */
   static uint64_t FindImsiForUe (std::string path, uint16_t rnti);
 
 private:
-
+  /**
+   * List of IMSI by path in the attribute system
+   */
   std::map<std::string, uint64_t> m_pathImsiMap;
+
+  /**
+   * List of CellId by path in the attribute system
+   */
   std::map<std::string, uint16_t> m_pathCellIdMap;
 
+  /**
+   * Name of the file where the downlink results will be saved
+   */
   std::string m_dlOutputFilename;
+
+  /**
+   * Name of the file where the uplink results will be saved
+   */
   std::string m_ulOutputFilename;
 };
 
diff -Naur ns-3.21/src/lte/helper/mac-stats-calculator.h ns-3.22/src/lte/helper/mac-stats-calculator.h
--- ns-3.21/src/lte/helper/mac-stats-calculator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/mac-stats-calculator.h	2015-02-05 15:46:23.000000000 -0800
@@ -30,6 +30,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup lte
+ *
  * Takes care of storing the information generated at MAC layer. Metrics saved are:
  *   - Timestamp (in seconds)
  *   - Frame index
@@ -54,6 +56,10 @@
   virtual ~MacStatsCalculator ();
 
   // Inherited from ns3::Object
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -146,8 +152,20 @@
 
 
 private:
-
+  /**
+   * When writing DL MAC statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_dlFirstWrite;
+
+  /**
+   * When writing UL MAC statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_ulFirstWrite;
 
 };
diff -Naur ns-3.21/src/lte/helper/phy-rx-stats-calculator.h ns-3.22/src/lte/helper/phy-rx-stats-calculator.h
--- ns-3.21/src/lte/helper/phy-rx-stats-calculator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/phy-rx-stats-calculator.h	2015-02-05 15:46:23.000000000 -0800
@@ -33,6 +33,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup lte
+ *
  * Takes care of storing the information generated at PHY layer regarding 
  * reception. Metrics saved are:
  *
@@ -59,6 +61,10 @@
   virtual ~PhyRxStatsCalculator ();
 
   // Inherited from ns3::Object
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -120,7 +126,20 @@
                                std::string path, PhyReceptionStatParameters params);
 private:
 
+  /**
+   * When writing DL RX PHY statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_dlRxFirstWrite;
+
+  /**
+   * When writing UL RX PHY statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_ulRxFirstWrite;
 
 };
diff -Naur ns-3.21/src/lte/helper/phy-stats-calculator.h ns-3.22/src/lte/helper/phy-stats-calculator.h
--- ns-3.21/src/lte/helper/phy-stats-calculator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/phy-stats-calculator.h	2015-02-05 15:46:23.000000000 -0800
@@ -31,6 +31,8 @@
 namespace ns3 {
 
 /**
+ * \ingroup lte
+ *
  * Takes care of storing the information generated at PHY layer. Metrics saved are:
  * - RSRP and average SINR for DL
  *   - Timestamp (in seconds)
@@ -64,6 +66,10 @@
   virtual ~PhyStatsCalculator ();
 
   // Inherited from ns3::Object
+  /**
+   *  Register this type.
+   *  @return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -107,6 +113,7 @@
 
   /**
    * Notifies the stats calculator that an RSRP and SINR report has occurred.
+   * @param cellId CellId for which stats are generated
    * @param imsi IMSI of the scheduled UE
    * @param rnti C-RNTI scheduled
    * @param rsrp Reference Signal Received Power
@@ -122,6 +129,7 @@
    * @param sinrLinear measured and reported SINR value in linear
    */
   void ReportUeSinr (uint16_t cellId, uint64_t imsi, uint16_t rnti, double sinrLinear);
+
   /**
    * Notifies the stats calculator that an interference report has occurred.
    * @param cellId Cell ID of the reported Enb
@@ -168,12 +176,43 @@
 
 
 private:
+  /**
+   * When writing RSRP SINR statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_RsrpSinrFirstWrite;
+
+  /**
+   * When writing UE SINR statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_UeSinrFirstWrite;
+
+  /**
+   * When writing interference statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_InterferenceFirstWrite;
 
+  /**
+   * Name of the file where the RSRP/SINR statistics will be saved
+   */
   std::string m_RsrpSinrFilename;
+
+  /**
+   * Name of the file where the UE SINR statistics will be saved
+   */
   std::string m_ueSinrFilename;
+
+  /**
+   * Name of the file where the interference statistics will be saved
+   */
   std::string m_interferenceFilename;
 
 };
diff -Naur ns-3.21/src/lte/helper/phy-tx-stats-calculator.h ns-3.22/src/lte/helper/phy-tx-stats-calculator.h
--- ns-3.21/src/lte/helper/phy-tx-stats-calculator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/phy-tx-stats-calculator.h	2015-02-05 15:46:23.000000000 -0800
@@ -32,9 +32,9 @@
 
 namespace ns3 {
 
-
-
 /**
+ * \ingroup lte
+ *
  * Takes care of storing the information generated at PHY layer regarding 
  * transmission. Metrics saved are:
  *
@@ -61,6 +61,10 @@
   virtual ~PhyTxStatsCalculator ();
 
   // Inherited from ns3::Object
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -123,8 +127,20 @@
                                   std::string path, PhyTransmissionStatParameters params);
 
 private:
-
+  /**
+   * When writing DL TX PHY statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_dlTxFirstWrite;
+
+  /**
+   * When writing UL TX PHY statistics first time to file,
+   * columns description is added. Then next lines are
+   * appended to file. This value is true if output
+   * files have not been opened yet
+   */
   bool m_ulTxFirstWrite;
 
 };
diff -Naur ns-3.21/src/lte/helper/point-to-point-epc-helper.cc ns-3.22/src/lte/helper/point-to-point-epc-helper.cc
--- ns-3.21/src/lte/helper/point-to-point-epc-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/point-to-point-epc-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -292,7 +292,7 @@
 
 }
 
-void
+uint8_t
 PointToPointEpcHelper::ActivateEpsBearer (Ptr<NetDevice> ueDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer)
 {
   NS_LOG_FUNCTION (this << ueDevice << imsi);
@@ -309,12 +309,13 @@
   Ipv4Address ueAddr = ueIpv4->GetAddress (interface, 0).GetLocal ();
   NS_LOG_LOGIC (" UE IP address: " << ueAddr);  m_sgwPgwApp->SetUeAddress (imsi, ueAddr);
   
-  m_mme->AddBearer (imsi, tft, bearer);
+  uint8_t bearerId = m_mme->AddBearer (imsi, tft, bearer);
   Ptr<LteUeNetDevice> ueLteDevice = ueDevice->GetObject<LteUeNetDevice> ();
   if (ueLteDevice)
     {
       ueLteDevice->GetNas ()->ActivateEpsBearer (bearer, tft);
     }
+  return bearerId;
 }
 
 
diff -Naur ns-3.21/src/lte/helper/point-to-point-epc-helper.h ns-3.22/src/lte/helper/point-to-point-epc-helper.h
--- ns-3.21/src/lte/helper/point-to-point-epc-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/point-to-point-epc-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -40,6 +40,7 @@
 class EpcMme;
 
 /**
+ * \ingroup lte
  * \brief Create an EPC network with PointToPoint links
  *
  * This Helper will create an EPC network topology comprising of a
@@ -62,6 +63,10 @@
   virtual ~PointToPointEpcHelper ();
   
   // inherited from Object
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   virtual void DoDispose ();
 
@@ -69,7 +74,7 @@
   virtual void AddEnb (Ptr<Node> enbNode, Ptr<NetDevice> lteEnbNetDevice, uint16_t cellId);
   virtual void AddUe (Ptr<NetDevice> ueLteDevice, uint64_t imsi);
   virtual void AddX2Interface (Ptr<Node> enbNode1, Ptr<Node> enbNode2);
-  virtual void ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer);
+  virtual uint8_t ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer);
   virtual Ptr<Node> GetPgwNode ();
   virtual Ipv4InterfaceContainer AssignUeIpv4Address (NetDeviceContainer ueDevices);
   virtual Ipv4Address GetUeDefaultGatewayAddress ();
@@ -78,18 +83,29 @@
 
 private:
 
-  /**
-   * SGW-PGW network element
-   */
-
   /** 
    * helper to assign addresses to UE devices as well as to the TUN device of the SGW/PGW
    */
   Ipv4AddressHelper m_ueAddressHelper; 
   
+  /**
+   * SGW-PGW network element
+   */
   Ptr<Node> m_sgwPgw; 
+
+  /**
+   * SGW-PGW application
+   */
   Ptr<EpcSgwPgwApplication> m_sgwPgwApp;
+
+  /**
+   * TUN device implementing tunneling of user data over GTP-U/UDP/IP
+   */
   Ptr<VirtualNetDevice> m_tunDevice;
+
+  /**
+   * MME network element
+   */
   Ptr<EpcMme> m_mme;
 
   /**
@@ -101,8 +117,22 @@
    */
   Ipv4AddressHelper m_s1uIpv4AddressHelper; 
 
+  /**
+   * The data rate to be used for the next S1-U link to be created
+   */
   DataRate m_s1uLinkDataRate;
+
+  /**
+   * The delay to be used for the next S1-U link to be created
+   */
   Time     m_s1uLinkDelay;
+
+  /**
+   * The MTU of the next S1-U link to be created. Note that,
+   * because of the additional GTP/UDP/IP tunneling overhead,
+   * you need a MTU larger than the end-to-end MTU that you
+   * want to support.
+   */
   uint16_t m_s1uLinkMtu;
 
   /**
@@ -112,7 +142,6 @@
 
   /**
    * Map storing for each IMSI the corresponding eNB NetDevice
-   * 
    */
   std::map<uint64_t, Ptr<NetDevice> > m_imsiEnbDeviceMap;
   
@@ -121,8 +150,20 @@
    */
   Ipv4AddressHelper m_x2Ipv4AddressHelper;   
 
+  /**
+   * The data rate to be used for the next X2 link to be created
+   */
   DataRate m_x2LinkDataRate;
+
+  /**
+   * The delay to be used for the next X2 link to be created
+   */
   Time     m_x2LinkDelay;
+
+  /**
+   * The MTU of the next X2 link to be created. Note that,
+   * because of some big X2 messages, you need a big MTU.
+   */
   uint16_t m_x2LinkMtu;
 
 };
diff -Naur ns-3.21/src/lte/helper/radio-bearer-stats-calculator.cc ns-3.22/src/lte/helper/radio-bearer-stats-calculator.cc
--- ns-3.21/src/lte/helper/radio-bearer-stats-calculator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/radio-bearer-stats-calculator.cc	2015-02-05 15:46:23.000000000 -0800
@@ -26,8 +26,7 @@
 #include <vector>
 #include <algorithm>
 
-namespace ns3
-{
+namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("RadioBearerStatsCalculator");
 
diff -Naur ns-3.21/src/lte/helper/radio-bearer-stats-calculator.h ns-3.22/src/lte/helper/radio-bearer-stats-calculator.h
--- ns-3.21/src/lte/helper/radio-bearer-stats-calculator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/radio-bearer-stats-calculator.h	2015-02-05 15:46:23.000000000 -0800
@@ -34,15 +34,22 @@
 
 namespace ns3
 {
-
+/// Container: (IMSI, LCID) pair, uint32_t
 typedef std::map<ImsiLcidPair_t, uint32_t> Uint32Map;
+/// Container: (IMSI, LCID) pair, uint64_t
 typedef std::map<ImsiLcidPair_t, uint64_t> Uint64Map;
+/// Container: (IMSI, LCID) pair, uint32_t calculator
 typedef std::map<ImsiLcidPair_t, Ptr<MinMaxAvgTotalCalculator<uint32_t> > > Uint32StatsMap;
+/// Container: (IMSI, LCID) pair, uint64_t calculator
 typedef std::map<ImsiLcidPair_t, Ptr<MinMaxAvgTotalCalculator<uint64_t> > > Uint64StatsMap;
+/// Container: (IMSI, LCID) pair, double
 typedef std::map<ImsiLcidPair_t, double> DoubleMap;
+/// Container: (IMSI, LCID) pair, LteFlowId_t
 typedef std::map<ImsiLcidPair_t, LteFlowId_t> FlowIdMap;
 
 /**
+ * \ingroup lte
+ *
  * This class is an ns-3 trace sink that performs the calculation of
  * PDU statistics for uplink and downlink. Statistics are generated
  * on a per radio bearer basis. This class can be used for 
@@ -80,6 +87,10 @@
   ~RadioBearerStatsCalculator ();
 
   // Inherited from ns3::Object
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   void DoDispose ();
 
@@ -337,38 +348,69 @@
   GetDlPduSizeStats (uint64_t imsi, uint8_t lcid);
 
 private:
+  /**
+   * Called after each epoch to write collected
+   * statistics to output files. During first call
+   * it opens output files and write columns descriptions.
+   * During next calls it opens output files in append mode.
+   */
   void
   ShowResults (void);
+
+  /**
+   * Writes collected statistics to UL output file and
+   * closes UL output file.
+   * @param outFile ofstream for UL statistics
+   */
   void
   WriteUlResults (std::ofstream& outFile);
+
+  /**
+   * Writes collected statistics to DL output file and
+   * closes DL output file.
+   * @param outFile ofstream for DL statistics
+   */
   void
   WriteDlResults (std::ofstream& outFile);
+
+  /**
+   * Erases collected statistics
+   */
   void
   ResetResults (void);
 
+  /**
+   * Reschedules EndEpoch event. Usually used after
+   * execution of SetStartTime() or SetEpoch()
+   */
   void RescheduleEndEpoch ();
 
+  /**
+   * Function called in every endEpochEvent. It calls
+   * ShowResults() to write statistics to output files
+   * and ResetResults() to clear collected statistics.
+   */
   void EndEpoch (void);
 
-  EventId m_endEpochEvent;
+  EventId m_endEpochEvent; //!< Event id for next end epoch event
 
-  FlowIdMap m_flowId;
+  FlowIdMap m_flowId; //!< List of FlowIds, ie. (RNTI, LCID) by (IMSI, LCID) pair
 
-  Uint32Map m_dlCellId;
-  Uint32Map m_dlTxPackets;
-  Uint32Map m_dlRxPackets;
-  Uint64Map m_dlTxData;
-  Uint64Map m_dlRxData;
-  Uint64StatsMap m_dlDelay;
-  Uint32StatsMap m_dlPduSize;
-
-  Uint32Map m_ulCellId;
-  Uint32Map m_ulTxPackets;
-  Uint32Map m_ulRxPackets;
-  Uint64Map m_ulTxData;
-  Uint64Map m_ulRxData;
-  Uint64StatsMap m_ulDelay;
-  Uint32StatsMap m_ulPduSize;
+  Uint32Map m_dlCellId; //!< List of DL CellIds by (IMSI, LCID) pair
+  Uint32Map m_dlTxPackets; //!< Number of DL TX Packets by (IMSI, LCID) pair
+  Uint32Map m_dlRxPackets; //!< Number of DL RX Packets by (IMSI, LCID) pair
+  Uint64Map m_dlTxData; //!< Amount of DL TX Data by (IMSI, LCID) pair
+  Uint64Map m_dlRxData; //!< Amount of DL RX Data by (IMSI, LCID) pair
+  Uint64StatsMap m_dlDelay; //!< DL delay by (IMSI, LCID) pair
+  Uint32StatsMap m_dlPduSize; //!< DL PDU Size by (IMSI, LCID) pair
+
+  Uint32Map m_ulCellId; //!< List of UL CellIds by (IMSI, LCID) pair
+  Uint32Map m_ulTxPackets; //!< Number of UL TX Packets by (IMSI, LCID) pair
+  Uint32Map m_ulRxPackets; //!< Number of UL RX Packets by (IMSI, LCID) pair
+  Uint64Map m_ulTxData; //!< Amount of UL TX Data by (IMSI, LCID) pair
+  Uint64Map m_ulRxData; //!< Amount of UL RX Data by (IMSI, LCID) pair
+  Uint64StatsMap m_ulDelay; //!< UL delay by (IMSI, LCID) pair
+  Uint32StatsMap m_ulPduSize; //!< UL PDU Size by (IMSI, LCID) pair
 
   /**
    * Start time of the on going epoch
@@ -389,9 +431,20 @@
    * true if any output is pending
    */
   bool m_pendingOutput;
+
+  /**
+   * Protocol type, by default RLC
+   */
   std::string m_protocolType;
 
+  /**
+   * Name of the file where the downlink PDCP statistics will be saved
+   */
   std::string m_dlPdcpOutputFilename;
+
+  /**
+   * Name of the file where the uplink PDCP statistics will be saved
+   */
   std::string m_ulPdcpOutputFilename;
 
 };
diff -Naur ns-3.21/src/lte/helper/radio-bearer-stats-connector.cc ns-3.22/src/lte/helper/radio-bearer-stats-connector.cc
--- ns-3.21/src/lte/helper/radio-bearer-stats-connector.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/radio-bearer-stats-connector.cc	2015-02-05 15:46:23.000000000 -0800
@@ -29,28 +29,41 @@
 #include <ns3/lte-ue-rrc.h>
 #include <ns3/lte-ue-net-device.h>
 
-NS_LOG_COMPONENT_DEFINE ("RadioBearerStatsConnector");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RadioBearerStatsConnector");
 
-
+/**
+  * Less than operator for CellIdRnti, because it is used as key in map
+  */
 bool
 operator < (const RadioBearerStatsConnector::CellIdRnti& a, const RadioBearerStatsConnector::CellIdRnti& b)
 {
   return ( (a.cellId < b.cellId) || ( (a.cellId == b.cellId) && (a.rnti < b.rnti) ) );
 }
 
+/**
+ * This structure is used as interface between trace
+ * sources and RadioBearerStatsCalculator. It stores
+ * and provides calculators with cellId and IMSI,
+ * because most trace sources do not provide it.
+ */
 struct BoundCallbackArgument : public SimpleRefCount<BoundCallbackArgument>
 {
 public:
-  Ptr<RadioBearerStatsCalculator> stats;
-  uint64_t imsi;
-  uint16_t cellId;
+  Ptr<RadioBearerStatsCalculator> stats;  //!< statistics calculator
+  uint64_t imsi; //!< imsi
+  uint16_t cellId; //!< cellId
 };
 
-
+/**
+ * Callback function for DL TX statistics for both RLC and PDCP
+ * /param arg
+ * /param path
+ * /param rnti
+ * /param lcid
+ * /param packetSize
+ */
 void
 DlTxPduCallback (Ptr<BoundCallbackArgument> arg, std::string path,
                  uint16_t rnti, uint8_t lcid, uint32_t packetSize)
@@ -59,6 +72,15 @@
   arg->stats->DlTxPdu (arg->cellId, arg->imsi, rnti, lcid, packetSize);
 }
 
+/**
+ * Callback function for DL RX statistics for both RLC and PDCP
+ * /param arg
+ * /param path
+ * /param rnti
+ * /param lcid
+ * /param packetSize
+ * /param delay
+ */
 void
 DlRxPduCallback (Ptr<BoundCallbackArgument> arg, std::string path,
                  uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
@@ -67,8 +89,14 @@
   arg->stats->DlRxPdu (arg->cellId, arg->imsi, rnti, lcid, packetSize, delay);
 }
 
-
-
+/**
+ * Callback function for UL TX statistics for both RLC and PDCP
+ * /param arg
+ * /param path
+ * /param rnti
+ * /param lcid
+ * /param packetSize
+ */
 void
 UlTxPduCallback (Ptr<BoundCallbackArgument> arg, std::string path,
                  uint16_t rnti, uint8_t lcid, uint32_t packetSize)
@@ -78,6 +106,15 @@
   arg->stats->UlTxPdu (arg->cellId, arg->imsi, rnti, lcid, packetSize);
 }
 
+/**
+ * Callback function for UL RX statistics for both RLC and PDCP
+ * /param arg
+ * /param path
+ * /param rnti
+ * /param lcid
+ * /param packetSize
+ * /param delay
+ */
 void
 UlRxPduCallback (Ptr<BoundCallbackArgument> arg, std::string path,
                  uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
diff -Naur ns-3.21/src/lte/helper/radio-bearer-stats-connector.h ns-3.22/src/lte/helper/radio-bearer-stats-connector.h
--- ns-3.21/src/lte/helper/radio-bearer-stats-connector.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/radio-bearer-stats-connector.h	2015-02-05 15:46:23.000000000 -0800
@@ -36,53 +36,254 @@
 
 class RadioBearerStatsCalculator;
 
+/**
+ * \ingroup lte
+ *
+ * This class is very useful when user needs to collect
+ * statistics from PDCD and RLC. It automatically connects
+ * RadioBearerStatsCalculator to appropriate trace sinks.
+ * Usually user do not use this class. All he/she needs to
+ * to do is to call: LteHelper::EnablePdcpTraces() and/or
+ * LteHelper::EnableRlcTraces().
+ */
+
 class RadioBearerStatsConnector
 {
 public:
-
+  /// Constructor
   RadioBearerStatsConnector ();
 
+  /**
+   * Enables trace sinks for RLC layer. Usually, this function
+   * is called by LteHelper::EnableRlcTraces().
+   * \param rlcStats statistics calculator for RLC layer
+   */
   void EnableRlcStats (Ptr<RadioBearerStatsCalculator> rlcStats);
+
+  /**
+   * Enables trace sinks for PDCP layer. Usually, this function
+   * is called by LteHelper::EnablePdcpTraces().
+   * \param pdcpStats statistics calculator for PDCP layer
+   */
   void EnablePdcpStats (Ptr<RadioBearerStatsCalculator> pdcpStats);
+
+  /**
+   * Connects trace sinks to appropriate trace sources
+   */
   void EnsureConnected ();
 
   // trace sinks, to be used with MakeBoundCallback
+
+  /**
+   * Function hooked to RandomAccessSuccessful trace source at UE RRC,
+   * which is fired upon successful completion of the random access procedure
+   * \param c
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   static void NotifyRandomAccessSuccessfulUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Sink connected source of UE Connection Setup trace. Not used.
+   * \param c
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   static void NotifyConnectionSetupUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Function hooked to ConnectionReconfiguration trace source at UE RRC,
+   * which is fired upon RRC connection reconfiguration
+   * \param c
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   static void NotifyConnectionReconfigurationUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Function hooked to HandoverStart trace source at UE RRC,
+   * which is fired upon start of a handover procedure
+   * \param c
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   * \param targetCellId
+   */
   static void NotifyHandoverStartUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint16_t targetCellId);
+
+  /**
+   * Function hooked to HandoverStart trace source at UE RRC,
+   * which is fired upon successful termination of a handover procedure
+   * \param c
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   static void NotifyHandoverEndOkUe (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Function hooked to NewUeContext trace source at eNB RRC,
+   * which is fired upon creation of a new UE context
+   * \param c
+   * \param context
+   * \param cellid
+   * \param rnti
+   */
   static void NotifyNewUeContextEnb (RadioBearerStatsConnector* c, std::string context, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Function hooked to ConnectionReconfiguration trace source at eNB RRC,
+   * which is fired upon RRC connection reconfiguration
+   * \param c
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   static void NotifyConnectionReconfigurationEnb (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Function hooked to HandoverStart trace source at eNB RRC,
+   * which is fired upon start of a handover procedure
+   * \param c
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   * \param targetCellId
+   */
   static void NotifyHandoverStartEnb (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti, uint16_t targetCellId);
+
+  /**
+   * Function hooked to HandoverEndOk trace source at eNB RRC,
+   * which is fired upon successful termination of a handover procedure
+   * \param c
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   static void NotifyHandoverEndOkEnb (RadioBearerStatsConnector* c, std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
 
 private:
-
+  /**
+   * Creates UE Manager path and stores it in m_ueManagerPathByCellIdRnti
+   * \param ueManagerPath
+   * \param cellId
+   * \param rnti
+   */
   void StoreUeManagerPath (std::string ueManagerPath, uint16_t cellId, uint16_t rnti);
+
+  /**
+   * Connects Srb0 trace sources at UE and eNB to RLC and PDCP calculators,
+   * and Srb1 trace sources at eNB to RLC and PDCP calculators,
+   * \param ueRrcPath
+   * \param imsi
+   * \param cellId
+   * \param rnti
+   */
   void ConnectSrb0Traces (std::string ueRrcPath, uint64_t imsi, uint16_t cellId, uint16_t rnti);
+
+  /**
+   * Connects Srb1 trace sources at UE to RLC and PDCP calculators
+   * \param ueRrcPath
+   * \param imsi
+   * \param cellId
+   * \param rnti
+   */
   void ConnectSrb1TracesUe (std::string ueRrcPath, uint64_t imsi, uint16_t cellId, uint16_t rnti);
+
+  /**
+   * Connects all trace sources at UE to RLC and PDCP calculators.
+   * This function can connect traces only once for UE.
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   void ConnectTracesUeIfFirstTime (std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Connects all trace sources at eNB to RLC and PDCP calculators.
+   * This function can connect traces only once for eNB.
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   void ConnectTracesEnbIfFirstTime (std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Connects all trace sources at UE to RLC and PDCP calculators.
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   void ConnectTracesUe (std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Disconnects all trace sources at UE to RLC and PDCP calculators.
+   * Function is not implemented.
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   void DisconnectTracesUe (std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Connects all trace sources at eNB to RLC and PDCP calculators
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   void ConnectTracesEnb (std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
+
+  /**
+   * Disconnects all trace sources at eNB to RLC and PDCP calculators.
+   * Function is not implemented.
+   * \param context
+   * \param imsi
+   * \param cellid
+   * \param rnti
+   */
   void DisconnectTracesEnb (std::string context, uint64_t imsi, uint16_t cellid, uint16_t rnti);
 
 
-  Ptr<RadioBearerStatsCalculator> m_rlcStats;
-  Ptr<RadioBearerStatsCalculator> m_pdcpStats;
+  Ptr<RadioBearerStatsCalculator> m_rlcStats; //!< Calculator for RLC Statistics
+  Ptr<RadioBearerStatsCalculator> m_pdcpStats; //!< Calculator for PDCP Statistics
 
-  bool m_connected;
-  std::set<uint64_t> m_imsiSeenUe;
-  std::set<uint64_t> m_imsiSeenEnb;
+  bool m_connected; //!< true if traces are connected to sinks, initially set to false
+  std::set<uint64_t> m_imsiSeenUe; //!< stores all UEs for which RLC and PDCP traces were connected
+  std::set<uint64_t> m_imsiSeenEnb; //!< stores all eNBs for which RLC and PDCP traces were connected
   
+  /**
+   * Struct used as key in m_ueManagerPathByCellIdRnti map
+   */
   struct CellIdRnti
   {
-    uint16_t cellId;
-    uint16_t rnti;
+    uint16_t cellId; //!< cellId
+    uint16_t rnti; //!< rnti
   };
+
+  /**
+   * Less than operator for CellIdRnti, because it is used as key in map
+   */
   friend bool operator < (const CellIdRnti &a, const CellIdRnti &b);
+
+  /**
+   * List UE Manager Paths by CellIdRnti
+   */
   std::map<CellIdRnti, std::string> m_ueManagerPathByCellIdRnti;
 
 };
diff -Naur ns-3.21/src/lte/helper/radio-environment-map-helper.cc ns-3.22/src/lte/helper/radio-environment-map-helper.cc
--- ns-3.21/src/lte/helper/radio-environment-map-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/radio-environment-map-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -41,11 +41,9 @@
 #include <fstream>
 #include <limits>
 
-NS_LOG_COMPONENT_DEFINE ("RadioEnvironmentMapHelper");
-
 namespace ns3 {
 
-
+NS_LOG_COMPONENT_DEFINE ("RadioEnvironmentMapHelper");
 
 NS_OBJECT_ENSURE_REGISTERED (RadioEnvironmentMapHelper);
 
diff -Naur ns-3.21/src/lte/helper/radio-environment-map-helper.h ns-3.22/src/lte/helper/radio-environment-map-helper.h
--- ns-3.21/src/lte/helper/radio-environment-map-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/helper/radio-environment-map-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -37,8 +37,11 @@
 class MobilityModel;
 
 /** 
- * Generates a 2D map of the SINR from the strongest transmitter in the downlink of an LTE FDD system.
- * 
+ * \ingroup lte
+ *
+ * Generates a 2D map of the SINR from the strongest transmitter in the
+ * downlink of an LTE FDD system. For instructions on usage, please refer to
+ * the User Documentation.
  */
 class RadioEnvironmentMapHelper : public Object
 {
@@ -49,6 +52,10 @@
   
   // inherited from Object
   virtual void DoDispose (void);
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /** 
@@ -70,54 +77,84 @@
 
 private:
 
+  /**
+   * Scheduled by Install() to perform the actual generation of map.
+   *
+   * If control channel is used for SINR calculation (the default), the delay
+   * is 2.6 milliseconds from the start of simulation. Otherwise, if data
+   * channel is used, the delay is 500.1 milliseconds from the start of
+   * simulation.
+   *
+   * The method will divide the whole map into parts (each contains at most a
+   * certain number of SINR listening points), and then call RunOneIteration()
+   * on each part, one by one.
+   */
   void DelayedInstall ();
+
+  /**
+   * Mobilize all the listeners to a specified area. Afterwards, schedule a
+   * call to PrintAndReset() in 0.5 milliseconds.
+   *
+   * \param xMin X coordinate of the first SINR listening point to deploy.
+   * \param xMax X coordinate of the last SINR listening point to deploy.
+   * \param yMin Y coordinate of the first SINR listening point to deploy.
+   * \param yMax Y coordinate of the last SINR listening point to deploy.
+   */
   void RunOneIteration (double xMin, double xMax, double yMin, double yMax);
+
+  /// Go through every listener, write the computed SINR, and then reset it.
   void PrintAndReset ();
-  void Finalize ();
 
+  /// Called when the map generation procedure has been completed.
+  void Finalize ();
 
+  /// A complete Radio Environment Map is composed of many of this structure.
   struct RemPoint 
   {
+    /// Simplified listener which compute SINR over the DL channel.
     Ptr<RemSpectrumPhy> phy;
+    /// Position of the listener in the environment.
     Ptr<MobilityModel> bmm;
   };
 
+  /// List of listeners in the environment.
   std::list<RemPoint> m_rem;
 
-  double m_xMin;
-  double m_xMax;
-  uint16_t m_xRes;
-  double m_xStep;
-
-  double m_yMin;
-  double m_yMax;
-  uint16_t m_yRes;
-  double m_yStep;
+  double m_xMin;   ///< The `XMin` attribute.
+  double m_xMax;   ///< The `XMax` attribute.
+  uint16_t m_xRes; ///< The `XRes` attribute.
+  double m_xStep;  ///< Distance along X axis between adjacent listening points.
+
+  double m_yMin;   ///< The `YMin` attribute.
+  double m_yMax;   ///< The `YMax` attribute.
+  uint16_t m_yRes; ///< The `YRes` attribute.
+  double m_yStep;  ///< Distance along Y axis between adjacent listening points.
 
-  uint32_t m_maxPointsPerIteration;
+  uint32_t m_maxPointsPerIteration;  ///< The `MaxPointsPerIteration` attribute.
 
-  uint16_t m_earfcn;
-  uint16_t m_bandwidth;
+  uint16_t m_earfcn;     ///< The `Earfcn` attribute.
+  uint16_t m_bandwidth;  ///< The `Bandwidth` attribute.
  
-  double m_z;
+  double m_z;  ///< The `Z` attribute.
 
-  std::string m_channelPath;
-  std::string m_outputFile;
+  std::string m_channelPath;  ///< The `ChannelPath` attribute.
+  std::string m_outputFile;   ///< The `OutputFile` attribute.
 
-  bool m_stopWhenDone;
+  bool m_stopWhenDone;   ///< The `StopWhenDone` attribute.
   
+  /// The channel object taken from the `ChannelPath` attribute.
   Ptr<SpectrumChannel> m_channel;
 
-  double m_noisePower;
+  double m_noisePower;  ///< The `NoisePower` attribute.
 
-  std::ofstream m_outFile;
+  std::ofstream m_outFile;  ///< Stream the output to a file.
 
-  bool m_useDataChannel;
-  int32_t m_rbId;
+  bool m_useDataChannel;  ///< The `UseDataChannel` attribute.
+  int32_t m_rbId;         ///< The `RbId` attribute.
 
-};
+}; // end of `class RadioEnvironmentMapHelper`
 
 
-}
+} // end of `namespace ns3`
 
 #endif /* RADIO_ENVIRONMENT_MAP_HELPER_H */
diff -Naur ns-3.21/src/lte/model/a2-a4-rsrq-handover-algorithm.cc ns-3.22/src/lte/model/a2-a4-rsrq-handover-algorithm.cc
--- ns-3.21/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2015-02-05 15:46:23.000000000 -0800
@@ -29,11 +29,10 @@
 #include <ns3/log.h>
 #include <ns3/uinteger.h>
 
-NS_LOG_COMPONENT_DEFINE ("A2A4RsrqHandoverAlgorithm");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("A2A4RsrqHandoverAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (A2A4RsrqHandoverAlgorithm);
 
 
@@ -67,13 +66,17 @@
     .SetParent<LteHandoverAlgorithm> ()
     .AddConstructor<A2A4RsrqHandoverAlgorithm> ()
     .AddAttribute ("ServingCellThreshold",
-                   "If the RSRQ of the serving cell is worse than this threshold, "
-                   "neighbour cells are consider for handover",
+                   "If the RSRQ of the serving cell is worse than this "
+                   "threshold, neighbour cells are consider for handover. "
+                   "Expressed in quantized range of [0..34] as per Section "
+                   "9.1.7 of 3GPP TS 36.133.",
                    UintegerValue (30),
                    MakeUintegerAccessor (&A2A4RsrqHandoverAlgorithm::m_servingCellThreshold),
-                   MakeUintegerChecker<uint8_t> (0, 34)) // RSRQ range is [0..34] as per Section 9.1.7 of 3GPP TS 36.133
+                   MakeUintegerChecker<uint8_t> (0, 34))
     .AddAttribute ("NeighbourCellOffset",
-                   "Minimum offset between serving and best neighbour cell to trigger the Handover",
+                   "Minimum offset between the serving and the best neighbour "
+                   "cell to trigger the handover. Expressed in quantized "
+                   "range of [0..34] as per Section 9.1.7 of 3GPP TS 36.133.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&A2A4RsrqHandoverAlgorithm::m_neighbourCellOffset),
                    MakeUintegerChecker<uint8_t> ())
diff -Naur ns-3.21/src/lte/model/a2-a4-rsrq-handover-algorithm.h ns-3.22/src/lte/model/a2-a4-rsrq-handover-algorithm.h
--- ns-3.21/src/lte/model/a2-a4-rsrq-handover-algorithm.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/a2-a4-rsrq-handover-algorithm.h	2015-02-05 15:46:23.000000000 -0800
@@ -80,9 +80,7 @@
 class A2A4RsrqHandoverAlgorithm : public LteHandoverAlgorithm
 {
 public:
-  /**
-   * \brief Creates an A2-A4-RSRQ handover algorithm instance.
-   */
+  /// Creates an A2-A4-RSRQ handover algorithm instance.
   A2A4RsrqHandoverAlgorithm ();
 
   virtual ~A2A4RsrqHandoverAlgorithm ();
@@ -106,41 +104,86 @@
   void DoReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults);
 
 private:
-  // Internal methods
+  /**
+   * Called when Event A2 is detected, then trigger a handover if needed.
+   *
+   * \param rnti The RNTI of the UE who reported the event.
+   * \param servingCellRsrq The RSRQ of this cell as reported by the UE.
+   */
   void EvaluateHandover (uint16_t rnti, uint8_t servingCellRsrq);
+
+  /**
+   * Determines if a neighbour cell is a valid destination for handover.
+   * Currently always return true.
+   *
+   * \param cellId The cell ID of the neighbour cell.
+   * \return True if the cell is a valid destination for handover.
+   */
   bool IsValidNeighbour (uint16_t cellId);
+
+  /**
+   * Called when Event A4 is reported, then update the measurements table.
+   * If the RNTI and/or cell ID is not found in the table, a corresponding
+   * entry will be created. Only the latest measurements are stored in the
+   * table.
+   *
+   * \param rnti The RNTI of the UE who reported the event.
+   * \param cellId The cell ID of the measured cell.
+   * \param rsrq The RSRQ of the cell as measured by the UE.
+   */
   void UpdateNeighbourMeasurements (uint16_t rnti, uint16_t cellId,
                                     uint8_t rsrq);
 
-  // The expected measurement identities
+  /// The expected measurement identity for A2 measurements.
   uint8_t m_a2MeasId;
+  /// The expected measurement identity for A4 measurements.
   uint8_t m_a4MeasId;
 
   /**
-   * \brief Measurements reported by a UE for a cell ID.
-   *
-   * The values are quantized according 3GPP TS 36.133 section 9.1.4 and 9.1.7.
+   * Measurements reported by a UE for a cell ID. The values are quantized
+   * according 3GPP TS 36.133 section 9.1.4 and 9.1.7.
    */
   class UeMeasure : public SimpleRefCount<UeMeasure>
   {
   public:
-    uint16_t m_cellId;
-    uint8_t m_rsrp;
-    uint8_t m_rsrq;
+    uint16_t m_cellId;  ///< Cell ID.
+    uint8_t m_rsrp;     ///< RSRP in quantized format. \todo Can be removed?
+    uint8_t m_rsrq;     ///< RSRQ in quantized format.
   };
 
-  //               cellId
+  /**
+   * Measurements reported by a UE for several cells. The structure is a map
+   * indexed by the cell ID.
+   */
   typedef std::map<uint16_t, Ptr<UeMeasure> > MeasurementRow_t;
-  //               rnti
+
+  /**
+   * Measurements reported by several UEs. The structure is a map indexed by
+   * the RNTI of the UE.
+   */
   typedef std::map<uint16_t, MeasurementRow_t> MeasurementTable_t;
+
+  /// Table of measurement reports from all UEs.
   MeasurementTable_t m_neighbourCellMeasures;
 
-  // Class attributes
+  /**
+   * The `ServingCellThreshold` attribute. If the RSRQ of the serving cell is
+   * worse than this threshold, neighbour cells are consider for handover.
+   * Expressed in quantized range of [0..34] as per Section 9.1.7 of
+   * 3GPP TS 36.133.
+   */
   uint8_t m_servingCellThreshold;
+
+  /**
+   * The `NeighbourCellOffset` attribute. Minimum offset between the serving
+   * and the best neighbour cell to trigger the handover. Expressed in
+   * quantized range of [0..34] as per Section 9.1.7 of 3GPP TS 36.133.
+   */
   uint8_t m_neighbourCellOffset;
 
-  // Handover Management SAPs
+  /// Interface to the eNodeB RRC instance.
   LteHandoverManagementSapUser* m_handoverManagementSapUser;
+  /// Receive API calls from the eNodeB RRC instance.
   LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
 
 }; // end of class A2A4RsrqHandoverAlgorithm
diff -Naur ns-3.21/src/lte/model/a3-rsrp-handover-algorithm.cc ns-3.22/src/lte/model/a3-rsrp-handover-algorithm.cc
--- ns-3.21/src/lte/model/a3-rsrp-handover-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/a3-rsrp-handover-algorithm.cc	2015-02-05 15:46:23.000000000 -0800
@@ -25,10 +25,10 @@
 #include <ns3/lte-common.h>
 #include <list>
 
-NS_LOG_COMPONENT_DEFINE ("A3RsrpHandoverAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("A3RsrpHandoverAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (A3RsrpHandoverAlgorithm);
 
 
@@ -134,7 +134,7 @@
           && !measResults.measResultListEutra.empty ())
         {
           uint16_t bestNeighbourCellId = 0;
-          uint8_t bestNeighbourRsrp = -std::numeric_limits<double>::infinity ();
+          uint8_t bestNeighbourRsrp = 0;
 
           for (std::list <LteRrcSap::MeasResultEutra>::iterator it = measResults.measResultListEutra.begin ();
                it != measResults.measResultListEutra.end ();
diff -Naur ns-3.21/src/lte/model/a3-rsrp-handover-algorithm.h ns-3.22/src/lte/model/a3-rsrp-handover-algorithm.h
--- ns-3.21/src/lte/model/a3-rsrp-handover-algorithm.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/a3-rsrp-handover-algorithm.h	2015-02-05 15:46:23.000000000 -0800
@@ -65,9 +65,7 @@
 class A3RsrpHandoverAlgorithm : public LteHandoverAlgorithm
 {
 public:
-  /**
-   * \brief Creates a strongest cell handover algorithm instance.
-   */
+  /// Creates a strongest cell handover algorithm instance.
   A3RsrpHandoverAlgorithm ();
 
   virtual ~A3RsrpHandoverAlgorithm ();
@@ -91,18 +89,32 @@
   void DoReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults);
 
 private:
-  // Internal method
+  /**
+   * Determines if a neighbour cell is a valid destination for handover.
+   * Currently always return true.
+   *
+   * \param cellId The cell ID of the neighbour cell.
+   * \return True if the cell is a valid destination for handover.
+   */
   bool IsValidNeighbour (uint16_t cellId);
 
-  // The expected measurement identity
+  /// The expected measurement identity for A3 measurements.
   uint8_t m_measId;
 
-  // Class attributes
+  /**
+   * The `Hysteresis` attribute. Handover margin (hysteresis) in dB (rounded to
+   * the nearest multiple of 0.5 dB).
+   */
   double m_hysteresisDb;
+  /**
+   * The `TimeToTrigger` attribute. Time during which neighbour cell's RSRP
+   * must continuously higher than serving cell's RSRP "
+   */
   Time m_timeToTrigger;
 
-  // Handover Management SAPs
+  /// Interface to the eNodeB RRC instance.
   LteHandoverManagementSapUser* m_handoverManagementSapUser;
+  /// Receive API calls from the eNodeB RRC instance.
   LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
 
 }; // end of class A3RsrpHandoverAlgorithm
diff -Naur ns-3.21/src/lte/model/cqa-ff-mac-scheduler.cc ns-3.22/src/lte/model/cqa-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/cqa-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/cqa-ff-mac-scheduler.cc	2015-02-05 15:46:23.000000000 -0800
@@ -39,10 +39,10 @@
 #include <ns3/integer.h>
 #include <ns3/string.h>
 
-NS_LOG_COMPONENT_DEFINE ("CqaFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CqaFfMacScheduler");
+
 static const int CqaType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1766,7 +1766,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/epc-enb-application.cc ns-3.22/src/lte/model/epc-enb-application.cc
--- ns-3.21/src/lte/model/epc-enb-application.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-enb-application.cc	2015-02-05 15:46:23.000000000 -0800
@@ -35,7 +35,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("EpcEnbApplication");
 
-
 EpcEnbApplication::EpsFlowId_t::EpsFlowId_t ()
 {
 }
@@ -310,8 +309,18 @@
   gtpu.SetLength (packet->GetSize () + gtpu.GetSerializedSize () - 8);  
   packet->AddHeader (gtpu);
   uint32_t flags = 0;
-  m_s1uSocket->SendTo (packet, flags, InetSocketAddress(m_sgwS1uAddress, m_gtpuUdpPort));
+  m_s1uSocket->SendTo (packet, flags, InetSocketAddress (m_sgwS1uAddress, m_gtpuUdpPort));
 }
 
-
-}; // namespace ns3
+void
+EpcEnbApplication::DoReleaseIndication (uint64_t imsi, uint16_t rnti, uint8_t bearerId)
+{
+  NS_LOG_FUNCTION (this << bearerId );
+  std::list<EpcS1apSapMme::ErabToBeReleasedIndication> erabToBeReleaseIndication;
+  EpcS1apSapMme::ErabToBeReleasedIndication erab;
+  erab.erabId = bearerId;
+  erabToBeReleaseIndication.push_back (erab);
+  //From 3GPP TS 23401-950 Section 5.4.4.2, enB sends EPS bearer Identity in Bearer Release Indication message to MME
+  m_s1apSapMme->ErabReleaseIndication (imsi, rnti, erabToBeReleaseIndication);
+}
+}  // namespace ns3
diff -Naur ns-3.21/src/lte/model/epc-enb-application.h ns-3.22/src/lte/model/epc-enb-application.h
--- ns-3.21/src/lte/model/epc-enb-application.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-enb-application.h	2015-02-05 15:46:23.000000000 -0800
@@ -150,6 +150,15 @@
   void DoPathSwitchRequestAcknowledge (uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t cgi, std::list<EpcS1apSapEnb::ErabSwitchedInUplinkItem> erabToBeSwitchedInUplinkList);
 
   /** 
+   * \brief This function accepts bearer id corresponding to a particular UE and schedules indication of bearer release towards MME
+   * \param imsi maps to mmeUeS1Id
+   * \param rnti maps to enbUeS1Id
+   * \param bearerId Bearer Identity which is to be de-activated
+   */
+  void DoReleaseIndication (uint64_t imsi, uint16_t rnti, uint8_t bearerId);
+
+
+  /**
    * Send a packet to the UE via the LTE radio interface of the eNB
    * 
    * \param packet t
diff -Naur ns-3.21/src/lte/model/epc-enb-s1-sap.h ns-3.22/src/lte/model/epc-enb-s1-sap.h
--- ns-3.21/src/lte/model/epc-enb-s1-sap.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-enb-s1-sap.h	2015-02-05 15:46:23.000000000 -0800
@@ -49,6 +49,13 @@
    */
   virtual void InitialUeMessage (uint64_t imsi, uint16_t rnti) = 0;
 
+  /**
+   *  \brief Triggers epc-enb-application to send ERAB Release Indication message towards MME
+   *  \param imsi the UE IMSI
+   *  \param rnti the UE RNTI
+   *  \param bearerId Bearer Identity which is to be de-activated
+   */
+  virtual void DoSendReleaseIndication (uint64_t imsi, uint16_t rnti, uint8_t bearerId) = 0;
 
   struct BearerToBeSwitched
   {
@@ -139,6 +146,8 @@
 
   // inherited from EpcEnbS1SapProvider
   virtual void InitialUeMessage (uint64_t imsi, uint16_t rnti);
+  virtual void DoSendReleaseIndication (uint64_t imsi, uint16_t rnti, uint8_t bearerId);
+
   virtual void PathSwitchRequest (PathSwitchRequestParameters params);
   virtual void UeContextRelease (uint16_t rnti);
 
@@ -165,6 +174,11 @@
   m_owner->DoInitialUeMessage (imsi, rnti);
 }
 
+template <class C>
+void MemberEpcEnbS1SapProvider<C>::DoSendReleaseIndication (uint64_t imsi, uint16_t rnti, uint8_t bearerId)
+{
+  m_owner->DoReleaseIndication (imsi, rnti, bearerId);
+}
 
 template <class C>
 void MemberEpcEnbS1SapProvider<C>::PathSwitchRequest (PathSwitchRequestParameters params)
diff -Naur ns-3.21/src/lte/model/epc-gtpu-header.cc ns-3.22/src/lte/model/epc-gtpu-header.cc
--- ns-3.21/src/lte/model/epc-gtpu-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-gtpu-header.cc	2015-02-05 15:46:23.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/log.h"
 #include "ns3/packet.h"
 
-NS_LOG_COMPONENT_DEFINE ("GtpuHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("GtpuHeader");
+
 /********************************************************
  *        GTP-U-v1 Header
  ********************************************************/
diff -Naur ns-3.21/src/lte/model/epc-mme.cc ns-3.22/src/lte/model/epc-mme.cc
--- ns-3.21/src/lte/model/epc-mme.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-mme.cc	2015-02-05 15:46:23.000000000 -0800
@@ -26,12 +26,9 @@
 
 #include "epc-mme.h"
 
-NS_LOG_COMPONENT_DEFINE ("EpcMme");
-
 namespace ns3 {
 
-
-
+NS_LOG_COMPONENT_DEFINE ("EpcMme");
 
 NS_OBJECT_ENSURE_REGISTERED (EpcMme);
 
@@ -107,7 +104,7 @@
   ueInfo->bearerCounter = 0;
 }
 
-void 
+uint8_t
 EpcMme::AddBearer (uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer)
 {
   NS_LOG_FUNCTION (this << imsi);
@@ -119,6 +116,7 @@
   bearerInfo.tft = tft;
   bearerInfo.bearer = bearer;  
   it->second->bearersToBeActivated.push_back (bearerInfo);
+  return bearerInfo.bearerId;
 }
 
 
@@ -221,4 +219,66 @@
   jt->second->s1apSapEnb->PathSwitchRequestAcknowledge (enbUeS1Id, mmeUeS1Id, cgi, erabToBeSwitchedInUplinkList);
 }
 
+void
+EpcMme::DoErabReleaseIndication (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<EpcS1apSapMme::ErabToBeReleasedIndication> erabToBeReleaseIndication)
+{
+  NS_LOG_FUNCTION (this << mmeUeS1Id << enbUeS1Id);
+  uint64_t imsi = mmeUeS1Id;
+  std::map<uint64_t, Ptr<UeInfo> >::iterator it = m_ueInfoMap.find (imsi);
+  NS_ASSERT_MSG (it != m_ueInfoMap.end (), "could not find any UE with IMSI " << imsi);
+
+  EpcS11SapSgw::DeleteBearerCommandMessage msg;
+  // trick to avoid the need for allocating TEIDs on the S11 interface
+  msg.teid = imsi;
+
+  for (std::list<EpcS1apSapMme::ErabToBeReleasedIndication>::iterator bit = erabToBeReleaseIndication.begin (); bit != erabToBeReleaseIndication.end (); ++bit)
+    {
+      EpcS11SapSgw::BearerContextToBeRemoved bearerContext;
+      bearerContext.epsBearerId =  bit->erabId;
+      msg.bearerContextsToBeRemoved.push_back (bearerContext);
+    }
+  //Delete Bearer command towards epc-sgw-pgw-application
+  m_s11SapSgw->DeleteBearerCommand (msg);
+}
+
+void
+EpcMme::DoDeleteBearerRequest (EpcS11SapMme::DeleteBearerRequestMessage msg)
+{
+  NS_LOG_FUNCTION (this);
+  uint64_t imsi = msg.teid;
+  std::map<uint64_t, Ptr<UeInfo> >::iterator it = m_ueInfoMap.find (imsi);
+  NS_ASSERT_MSG (it != m_ueInfoMap.end (), "could not find any UE with IMSI " << imsi);
+  EpcS11SapSgw::DeleteBearerResponseMessage res;
+
+  res.teid = imsi;
+
+  for (std::list<EpcS11SapMme::BearerContextRemoved>::iterator bit = msg.bearerContextsRemoved.begin ();
+       bit != msg.bearerContextsRemoved.end ();
+       ++bit)
+    {
+      EpcS11SapSgw::BearerContextRemovedSgwPgw bearerContext;
+      bearerContext.epsBearerId = bit->epsBearerId;
+      res.bearerContextsRemoved.push_back (bearerContext);
+
+      RemoveBearer (it->second, bearerContext.epsBearerId); //schedules function to erase, context of de-activated bearer
+    }
+  //schedules Delete Bearer Response towards epc-sgw-pgw-application
+  m_s11SapSgw->DeleteBearerResponse (res);
+}
+
+void EpcMme::RemoveBearer (Ptr<UeInfo> ueInfo, uint8_t epsBearerId)
+{
+  NS_LOG_FUNCTION (this << epsBearerId);
+  for (std::list<BearerInfo>::iterator bit = ueInfo->bearersToBeActivated.begin ();
+       bit != ueInfo->bearersToBeActivated.end ();
+       ++bit)
+    {
+      if (bit->bearerId == epsBearerId)
+        {
+          ueInfo->bearersToBeActivated.erase (bit);
+          break;
+        }
+    }
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/lte/model/epc-mme.h ns-3.22/src/lte/model/epc-mme.h
--- ns-3.21/src/lte/model/epc-mme.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-mme.h	2015-02-05 15:46:23.000000000 -0800
@@ -106,7 +106,7 @@
    * \param tft traffic flow template of the bearer
    * \param bearer QoS characteristics of the bearer
    */
-  void AddBearer (uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer);
+  uint8_t AddBearer (uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer);
 
 
 private:
@@ -115,11 +115,13 @@
   void DoInitialUeMessage (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t imsi, uint16_t ecgi);
   void DoInitialContextSetupResponse (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<EpcS1apSapMme::ErabSetupItem> erabSetupList);
   void DoPathSwitchRequest (uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t cgi, std::list<EpcS1apSapMme::ErabSwitchedInDownlinkItem> erabToBeSwitchedInDownlinkList);
-
+  void DoErabReleaseIndication (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<EpcS1apSapMme::ErabToBeReleasedIndication> erabToBeReleaseIndication);
 
   // S11 SAP MME forwarded methods
   void DoCreateSessionResponse (EpcS11SapMme::CreateSessionResponseMessage msg);
   void DoModifyBearerResponse (EpcS11SapMme::ModifyBearerResponseMessage msg);
+  void DoDeleteBearerRequest (EpcS11SapMme::DeleteBearerRequestMessage msg);
+
 
   /**
    * Hold info on an EPS bearer to be activated
@@ -153,6 +155,13 @@
   std::map<uint64_t, Ptr<UeInfo> > m_ueInfoMap;
 
   /**
+   * \brief This Function erases all contexts of bearer from MME side
+   * \param ueInfo UE information pointer
+   * \param epsBearerId Bearer Id which need to be removed corresponding to UE
+   */
+  void RemoveBearer (Ptr<UeInfo> ueInfo, uint8_t epsBearerId);
+
+  /**
    * Hold info on a ENB
    * 
    */
diff -Naur ns-3.21/src/lte/model/epc-s11-sap.h ns-3.22/src/lte/model/epc-s11-sap.h
--- ns-3.21/src/lte/model/epc-s11-sap.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-s11-sap.h	2015-02-05 15:46:23.000000000 -0800
@@ -103,6 +103,27 @@
    */
   virtual void CreateSessionResponse (CreateSessionResponseMessage msg) = 0;
 
+  struct BearerContextRemoved
+  {
+    uint8_t epsBearerId;
+  };
+
+  /**
+   * Delete Bearer Request message, see 3GPP TS 29.274 Release 9 V9.3.0 section 7.2.9.2
+   */
+  struct DeleteBearerRequestMessage : public GtpcMessage
+  {
+    std::list<BearerContextRemoved> bearerContextsRemoved;
+  };
+
+  /**
+    * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Request message shall be sent on the S11 interface by PGW to SGW and from SGW to MME
+    * \param msg the message
+    */
+  virtual void DeleteBearerRequest (DeleteBearerRequestMessage msg) = 0;
+
+
+
 
   /**     
    * Modify Bearer Response message, see 3GPP TS 29.274 7.2.7
@@ -162,6 +183,43 @@
    */
   virtual void CreateSessionRequest (CreateSessionRequestMessage msg) = 0;
 
+  struct BearerContextToBeRemoved
+  {
+    uint8_t epsBearerId;
+  };
+
+  /**
+   * Delete Bearer Command message, see 3GPP TS 29.274 Release 9 V9.3.0 section 7.2.17.1
+   */
+  struct DeleteBearerCommandMessage : public GtpcMessage
+  {
+    std::list<BearerContextToBeRemoved> bearerContextsToBeRemoved;
+  };
+
+  /**
+    * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Command message shall be sent on the S11 interface by the MME to the SGW
+    */
+  virtual void DeleteBearerCommand (DeleteBearerCommandMessage msg) = 0;
+
+
+  struct BearerContextRemovedSgwPgw
+  {
+    uint8_t epsBearerId;
+  };
+
+  /**
+   * Delete Bearer Response message, see 3GPP TS 29.274 Release 9 V9.3.0 section 7.2.10.2
+   */
+  struct DeleteBearerResponseMessage : public GtpcMessage
+  {
+    std::list<BearerContextRemovedSgwPgw> bearerContextsRemoved;
+  };
+
+  /**
+    * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Command message shall be sent on the S11 interface by the MME to the SGW
+    * \param msg the message
+    */
+  virtual void DeleteBearerResponse (DeleteBearerResponseMessage msg) = 0;
 
   /**     
    * Modify Bearer Request message, see 3GPP TS 29.274 7.2.7
@@ -200,6 +258,7 @@
   // inherited from EpcS11SapMme
   virtual void CreateSessionResponse (CreateSessionResponseMessage msg);
   virtual void ModifyBearerResponse (ModifyBearerResponseMessage msg);
+  virtual void DeleteBearerRequest (DeleteBearerRequestMessage msg);
 
 private:
   MemberEpcS11SapMme ();
@@ -224,6 +283,12 @@
 }
 
 template <class C>
+void MemberEpcS11SapMme<C>::DeleteBearerRequest (DeleteBearerRequestMessage msg)
+{
+  m_owner->DoDeleteBearerRequest (msg);
+}
+
+template <class C>
 void MemberEpcS11SapMme<C>::ModifyBearerResponse (ModifyBearerResponseMessage msg)
 {
   m_owner->DoModifyBearerResponse (msg);
@@ -247,6 +312,8 @@
   // inherited from EpcS11SapSgw
   virtual void CreateSessionRequest (CreateSessionRequestMessage msg);
   virtual void ModifyBearerRequest (ModifyBearerRequestMessage msg);
+  virtual void DeleteBearerCommand (DeleteBearerCommandMessage msg);
+  virtual void DeleteBearerResponse (DeleteBearerResponseMessage msg);
 
 private:
   MemberEpcS11SapSgw ();
@@ -276,10 +343,17 @@
   m_owner->DoModifyBearerRequest (msg);
 }
 
+template <class C>
+void MemberEpcS11SapSgw<C>::DeleteBearerCommand (DeleteBearerCommandMessage msg)
+{
+  m_owner->DoDeleteBearerCommand (msg);
+}
 
-
-
-
+template <class C>
+void MemberEpcS11SapSgw<C>::DeleteBearerResponse (DeleteBearerResponseMessage msg)
+{
+  m_owner->DoDeleteBearerResponse (msg);
+}
 
 
 
diff -Naur ns-3.21/src/lte/model/epc-s1ap-sap.h ns-3.22/src/lte/model/epc-s1ap-sap.h
--- ns-3.21/src/lte/model/epc-s1ap-sap.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-s1ap-sap.h	2015-02-05 15:46:23.000000000 -0800
@@ -61,6 +61,25 @@
 
 
   /**
+   *  E-RAB Release Indication Item IEs, 3GPP TS 36.413 version 9.8.0 section 9.1.3.7
+   *
+   */
+  struct ErabToBeReleasedIndication
+  {
+    uint8_t erabId;
+  };
+
+  /**
+    * \brief As per 3GPP TS 23.401 Release 9 V9.5.0 Figure 5.4.4.2-1  eNB sends indication of Bearer Release to MME
+    * \brief As per 3GPP TS version 9.8.0 section 8.2.3.2.2, the eNB initiates the procedure by sending an E-RAB RELEASE INDICATION message towards MME
+    * \param mmeUeS1Id in practice, we use the IMSI
+    * \param enbUeS1Id in practice, we use the RNTI
+    * \param erabToBeReleaseIndication, List of bearers to be deactivated
+    *
+    */
+  virtual void ErabReleaseIndication (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ErabToBeReleasedIndication> erabToBeReleaseIndication ) = 0;
+
+  /**
    *  E-RAB Setup Item IEs, see 3GPP TS 36.413 9.1.4.2 
    * 
    */
@@ -174,6 +193,8 @@
 
   // inherited from EpcS1apSapMme
   virtual void InitialUeMessage (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, uint64_t imsi, uint16_t ecgi);
+  virtual void ErabReleaseIndication (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ErabToBeReleasedIndication> erabToBeReleaseIndication );
+
   virtual void InitialContextSetupResponse (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ErabSetupItem> erabSetupList);
   virtual void PathSwitchRequest (uint64_t enbUeS1Id, uint64_t mmeUeS1Id, uint16_t cgi, std::list<ErabSwitchedInDownlinkItem> erabToBeSwitchedInDownlinkList);
 
@@ -200,6 +221,12 @@
 }
 
 template <class C>
+void MemberEpcS1apSapMme<C>::ErabReleaseIndication (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ErabToBeReleasedIndication> erabToBeReleaseIndication)
+{
+  m_owner->DoErabReleaseIndication (mmeUeS1Id, enbUeS1Id, erabToBeReleaseIndication);
+}
+
+template <class C>
 void MemberEpcS1apSapMme<C>::InitialContextSetupResponse (uint64_t mmeUeS1Id, uint16_t enbUeS1Id, std::list<ErabSetupItem> erabSetupList)
 {
   m_owner->DoInitialContextSetupResponse (mmeUeS1Id, enbUeS1Id, erabSetupList);
diff -Naur ns-3.21/src/lte/model/epc-sgw-pgw-application.cc ns-3.22/src/lte/model/epc-sgw-pgw-application.cc
--- ns-3.21/src/lte/model/epc-sgw-pgw-application.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-sgw-pgw-application.cc	2015-02-05 15:46:23.000000000 -0800
@@ -32,7 +32,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("EpcSgwPgwApplication");
 
-
 /////////////////////////
 // UeInfo
 /////////////////////////
@@ -51,6 +50,13 @@
   return m_tftClassifier.Add (tft, teid);
 }
 
+void
+EpcSgwPgwApplication::UeInfo::RemoveBearer (uint8_t bearerId)
+{
+  NS_LOG_FUNCTION (this << bearerId);
+  m_teidByBearerIdMap.erase (bearerId);
+}
+
 uint32_t
 EpcSgwPgwApplication::UeInfo::Classify (Ptr<Packet> p)
 {
@@ -144,7 +150,7 @@
   std::map<Ipv4Address, Ptr<UeInfo> >::iterator it = m_ueInfoByAddrMap.find (ueAddr);
   if (it == m_ueInfoByAddrMap.end ())
     {        
-      NS_LOG_WARN ("unknown UE address " << ueAddr) ;
+      NS_LOG_WARN ("unknown UE address " << ueAddr);
     }
   else
     {
@@ -204,7 +210,7 @@
   gtpu.SetLength (packet->GetSize () + gtpu.GetSerializedSize () - 8);  
   packet->AddHeader (gtpu);
   uint32_t flags = 0;
-  m_s1uSocket->SendTo (packet, flags, InetSocketAddress(enbAddr, m_gtpuUdpPort));
+  m_s1uSocket->SendTo (packet, flags, InetSocketAddress (enbAddr, m_gtpuUdpPort));
 }
 
 
@@ -305,4 +311,44 @@
   m_s11SapMme->ModifyBearerResponse (res);
 }
  
-}; // namespace ns3
+void
+EpcSgwPgwApplication::DoDeleteBearerCommand (EpcS11SapSgw::DeleteBearerCommandMessage req)
+{
+  NS_LOG_FUNCTION (this << req.teid);
+  uint64_t imsi = req.teid; // trick to avoid the need for allocating TEIDs on the S11 interface
+  std::map<uint64_t, Ptr<UeInfo> >::iterator ueit = m_ueInfoByImsiMap.find (imsi);
+  NS_ASSERT_MSG (ueit != m_ueInfoByImsiMap.end (), "unknown IMSI " << imsi);
+
+  EpcS11SapMme::DeleteBearerRequestMessage res;
+  res.teid = imsi;
+
+  for (std::list<EpcS11SapSgw::BearerContextToBeRemoved>::iterator bit = req.bearerContextsToBeRemoved.begin ();
+       bit != req.bearerContextsToBeRemoved.end ();
+       ++bit)
+    {
+      EpcS11SapMme::BearerContextRemoved bearerContext;
+      bearerContext.epsBearerId =  bit->epsBearerId;
+      res.bearerContextsRemoved.push_back (bearerContext);
+    }
+  //schedules Delete Bearer Request towards MME
+  m_s11SapMme->DeleteBearerRequest (res);
+}
+
+void
+EpcSgwPgwApplication::DoDeleteBearerResponse (EpcS11SapSgw::DeleteBearerResponseMessage req)
+{
+  NS_LOG_FUNCTION (this << req.teid);
+  uint64_t imsi = req.teid; // trick to avoid the need for allocating TEIDs on the S11 interface
+  std::map<uint64_t, Ptr<UeInfo> >::iterator ueit = m_ueInfoByImsiMap.find (imsi);
+  NS_ASSERT_MSG (ueit != m_ueInfoByImsiMap.end (), "unknown IMSI " << imsi);
+
+  for (std::list<EpcS11SapSgw::BearerContextRemovedSgwPgw>::iterator bit = req.bearerContextsRemoved.begin ();
+       bit != req.bearerContextsRemoved.end ();
+       ++bit)
+    {
+      //Function to remove de-activated bearer contexts from S-Gw and P-Gw side
+      ueit->second->RemoveBearer (bit->epsBearerId);
+    }
+}
+
+}  // namespace ns3
diff -Naur ns-3.21/src/lte/model/epc-sgw-pgw-application.h ns-3.22/src/lte/model/epc-sgw-pgw-application.h
--- ns-3.21/src/lte/model/epc-sgw-pgw-application.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-sgw-pgw-application.h	2015-02-05 15:46:23.000000000 -0800
@@ -156,12 +156,16 @@
   void DoCreateSessionRequest (EpcS11SapSgw::CreateSessionRequestMessage msg);
   void DoModifyBearerRequest (EpcS11SapSgw::ModifyBearerRequestMessage msg);  
 
+  void DoDeleteBearerCommand (EpcS11SapSgw::DeleteBearerCommandMessage req);
+  void DoDeleteBearerResponse (EpcS11SapSgw::DeleteBearerResponseMessage req);
+
+
   /**
    * store info for each UE connected to this SGW
    */
   class UeInfo : public SimpleRefCount<UeInfo>
   {
-  public:
+public:
     UeInfo ();  
 
     /** 
@@ -173,6 +177,12 @@
     void AddBearer (Ptr<EpcTft> tft, uint8_t epsBearerId, uint32_t teid);
 
     /** 
+     * \brief Function, deletes contexts of bearer on SGW and PGW side
+     * \param bearerId, the Bearer Id whose contexts to be removed
+     */
+    void RemoveBearer (uint8_t bearerId);
+
+    /**
      * 
      * 
      * \param p the IP packet from the internet to be classified
diff -Naur ns-3.21/src/lte/model/epc-tft-classifier.cc ns-3.22/src/lte/model/epc-tft-classifier.cc
--- ns-3.21/src/lte/model/epc-tft-classifier.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-tft-classifier.cc	2015-02-05 15:46:23.000000000 -0800
@@ -36,10 +36,10 @@
 #include "ns3/udp-l4-protocol.h"
 #include "ns3/tcp-l4-protocol.h"
 
-NS_LOG_COMPONENT_DEFINE ("EpcTftClassifier");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EpcTftClassifier");
+
 EpcTftClassifier::EpcTftClassifier ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/lte/model/epc-ue-nas.cc ns-3.22/src/lte/model/epc-ue-nas.cc
--- ns-3.21/src/lte/model/epc-ue-nas.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-ue-nas.cc	2015-02-05 15:46:23.000000000 -0800
@@ -27,14 +27,13 @@
 #include "epc-ue-nas.h"
 #include "lte-as-sap.h"
 
-NS_LOG_COMPONENT_DEFINE ("EpcUeNas");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EpcUeNas");
 
 
 
-
+/// Map each of UE NAS states to its string representation.
 static const std::string g_ueNasStateName[EpcUeNas::NUM_STATES] =
 {
   "OFF",
@@ -44,6 +43,10 @@
   "ACTIVE"
 };
 
+/**
+ * \param s The UE NAS state.
+ * \return The string representation of the given state.
+ */
 static inline const std::string & ToString (EpcUeNas::State s)
 {
   return g_ueNasStateName[s];
@@ -85,7 +88,8 @@
     .AddConstructor<EpcUeNas> ()
     .AddTraceSource ("StateTransition",
                      "fired upon every UE NAS state transition",
-                     MakeTraceSourceAccessor (&EpcUeNas::m_stateTransitionCallback))
+                     MakeTraceSourceAccessor (&EpcUeNas::m_stateTransitionCallback),
+                     "ns3::EpcUeNas::StateTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/lte/model/epc-ue-nas.h ns-3.22/src/lte/model/epc-ue-nas.h
--- ns-3.21/src/lte/model/epc-ue-nas.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-ue-nas.h	2015-02-05 15:46:23.000000000 -0800
@@ -168,6 +168,14 @@
    */
   State GetState () const;
 
+  /**
+   * TracedCallback signature for state change events.
+   *
+   * \param [in] oldState The old State.
+   * \pararm [in] newState the new State.
+   */
+  typedef void (* StateTracedCallback)
+    (const State oldState, const State newState);
  
 private:
 
@@ -179,16 +187,29 @@
 
   // internal methods
   void DoActivateEpsBearer (EpsBearer bearer, Ptr<EpcTft> tft);
+  /**
+   * Switch the UE RRC to the given state.
+   * \param s the destination state
+   */
   void SwitchToState (State s);
 
+  /// The current UE NAS state.
   State m_state;
 
+  /**
+   * The `StateTransition` trace source. Fired upon every UE NAS state
+   * transition. Exporting old state and new state.
+   * \todo This should be a TracedValue
+   */
   TracedCallback<State, State> m_stateTransitionCallback;
 
+  /// The UE NetDevice.
   Ptr<NetDevice> m_device;
 
+  /// The unique UE identifier.
   uint64_t m_imsi;
 
+  /// Closed Subscriber Group identity.
   uint32_t m_csgId;
 
   LteAsSapProvider* m_asSapProvider;
diff -Naur ns-3.21/src/lte/model/epc-x2.cc ns-3.22/src/lte/model/epc-x2.cc
--- ns-3.21/src/lte/model/epc-x2.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-x2.cc	2015-02-05 15:46:23.000000000 -0800
@@ -27,10 +27,9 @@
 #include "ns3/epc-x2-header.h"
 #include "ns3/epc-x2.h"
 
-NS_LOG_COMPONENT_DEFINE ("EpcX2");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EpcX2");
 
 X2IfaceInfo::X2IfaceInfo (Ipv4Address remoteIpAddr, Ptr<Socket> localCtrlPlaneSocket, Ptr<Socket> localUserPlaneSocket)
 {
diff -Naur ns-3.21/src/lte/model/epc-x2-header.cc ns-3.22/src/lte/model/epc-x2-header.cc
--- ns-3.21/src/lte/model/epc-x2-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/epc-x2-header.cc	2015-02-05 15:46:23.000000000 -0800
@@ -22,10 +22,9 @@
 #include "ns3/epc-x2-header.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("EpcX2Header");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EpcX2Header");
 
 NS_OBJECT_ENSURE_REGISTERED (EpcX2Header);
 
diff -Naur ns-3.21/src/lte/model/fdbet-ff-mac-scheduler.cc ns-3.22/src/lte/model/fdbet-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/fdbet-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/fdbet-ff-mac-scheduler.cc	2015-02-05 15:46:23.000000000 -0800
@@ -31,10 +31,10 @@
 #include <set>
 #include <cfloat>
 
-NS_LOG_COMPONENT_DEFINE ("FdBetFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("FdBetFfMacScheduler");
+
 static const int FdBetType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1334,7 +1334,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/fdmt-ff-mac-scheduler.cc ns-3.22/src/lte/model/fdmt-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/fdmt-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/fdmt-ff-mac-scheduler.cc	2015-02-05 15:46:23.000000000 -0800
@@ -31,10 +31,10 @@
 #include <set>
 #include <cfloat>
 
-NS_LOG_COMPONENT_DEFINE ("FdMtFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("FdMtFfMacScheduler");
+
 static const int FdMtType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1313,7 +1313,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/fdtbfq-ff-mac-scheduler.cc ns-3.22/src/lte/model/fdtbfq-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2015-02-05 15:46:23.000000000 -0800
@@ -32,10 +32,10 @@
 #include <set>
 #include <cfloat>
 
-NS_LOG_COMPONENT_DEFINE ("FdTbfqFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("FdTbfqFfMacScheduler");
+
 static const int FdTbfqType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1620,7 +1620,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/ff-mac-scheduler.cc ns-3.22/src/lte/model/ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/ff-mac-scheduler.cc	2015-02-05 15:46:23.000000000 -0800
@@ -24,10 +24,10 @@
 #include <ns3/enum.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("FfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("FfMacScheduler");
+
 NS_OBJECT_ENSURE_REGISTERED (FfMacScheduler);
 
 
diff -Naur ns-3.21/src/lte/model/lte-amc.cc ns-3.22/src/lte/model/lte-amc.cc
--- ns-3.21/src/lte/model/lte-amc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-amc.cc	2015-02-05 15:46:23.000000000 -0800
@@ -32,16 +32,19 @@
 #include <ns3/lte-mi-error-model.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("LteAmc");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteAmc");
+
 NS_OBJECT_ENSURE_REGISTERED (LteAmc);
 
-// from 3GPP R1-081483 "Conveying MCS and TB size via PDCCH"
-// file TBS_support.xls
-// tab "MCS table" (rounded to 2 decimal digits)
-// the index in the vector (0-15) identifies the CQI value
+/**
+ * Table of CQI index and its spectral efficiency. Taken from 3GPP TSG-RAN WG1
+ * [R1-081483 Conveying MCS and TB size via PDCCH]
+ * (http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip)
+ * file `TBS_support.xls` tab "MCS Table" (rounded to 2 decimal digits).
+ * The index of the vector (range 0-15) identifies the CQI value.
+ */
 static const double SpectralEfficiencyForCqi[16] = {
   0.0, // out of range
   0.15, 0.23, 0.38, 0.6, 0.88, 1.18,
@@ -49,13 +52,15 @@
   2.73, 3.32, 3.9, 4.52, 5.12, 5.55
 };
 
-
 #if 0 // currently unused
-// Table 7.1.7.1-1 of 3GPP TS 36.213 v8.8.0
-// the index in the vector (range 0-31; valid values 0-28) identifies the MCS index
-// note that this is similar to the one in R1-081483 but:
-//  1) a few values are different
-//  2) in R1-081483, a valid MCS index is in the range 1-30 (not 0-28)
+/**
+ * Table of MCS index (IMCS) and its TBS index (ITBS). Taken from 3GPP TS
+ * 36.213 v8.8.0 Table 7.1.7.1-1: _Modulation and TBS index table for PDSCH_.
+ * The index of the vector (range 0-31; valid values 0-28) identifies the MCS
+ * index. Note that this is similar to the one in R1-081483, but:
+ * - a few values are different; and
+ * - in R1-081483, a valid MCS index is in the range of 1-30 (not 0-28).
+ */
 static const int ModulationSchemeForMcs[32] = {
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
   4, 4, 4, 4, 4, 4, 4,
@@ -66,12 +71,15 @@
 };
 #endif
 
-
-// from 3GPP R1-081483 "Conveying MCS and TB size via PDCCH"
-// file TBS_support.xls
-// tab "MCS table" (rounded to 2 decimal digits)
-// the index in the table corresponds to the MCS index according to the convention in TS 36.213
-// (i.e., the MCS index reported in R1-081483 minus one)
+/**
+ * Table of MCS index and its spectral efficiency. Taken from 3GPP TSG-RAN WG1
+ * [R1-081483 Conveying MCS and TB size via PDCCH]
+ * (http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip)
+ * file `TBS_support.xls` tab "MCS Table" (rounded to 2 decimal digits).
+ * The index of the vector (range 0-31) corresponds to the MCS index according
+ * to the convention in TS 36.213 (i.e., the MCS index reported in R1-081483
+ * minus one)
+ */
 static const double SpectralEfficiencyForMcs[32] = {
   0.15, 0.19, 0.23, 0.31, 0.38, 0.49, 0.6, 0.74, 0.88, 1.03, 1.18,
   1.33, 1.48, 1.7, 1.91, 2.16, 2.41, 2.57,
@@ -79,20 +87,26 @@
   0, 0, 0
 };
 
-// Table 7.1.7.1-1 of 3GPP TS 36.213 v8.8.0
+/**
+ * Table of MCS index (IMCS) and its TBS index (ITBS). Taken from 3GPP TS
+ * 36.213 v8.8.0 Table 7.1.7.1-1: _Modulation and TBS index table for PDSCH_.
+ * The index of the vector (range 0-28) identifies the MCS index.
+ */
 static const int McsToItbs[29] = {
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 14, 15, 15, 16, 17, 18,
   19, 20, 21, 22, 23, 24, 25, 26
 };
 
-
-// 3GPP TS 36.213 v8.8.0 Table 7.1.7.2.1-1: Transport block size table (dimension 27×110)
-// for NPRB = 1 and Itbs = 6 the stadard returns 328, but it not consisent with the
-// other values, therefore we used 88 obtained following the sequence of NPRB = 1 values
+/**
+ * Table of number of physical resource blocks (NPRB), TBS index (ITBS), and
+ * their associated transport block size. Taken from 3GPP TS 36.213 v8.8.0
+ * Table 7.1.7.2.1-1: _Transport block size table (dimension 27×110)_.
+ * \note For NPRB = 1 and ITBS = 6 the standard returns 328, but it is not
+ *       consistent with the other values, therefore we use 88 obtained by
+ *       following the sequence of NPRB = 1 values.
+ */
 static const int TransportBlockSizeTable [110][27] = {
-
-  /* NPRB 001*/
-  { 16, 24, 32, 40, 56, 72, 88, 104, 120, 136, 144, 176, 208, 224, 256, 280, 328, 336, 376, 408, 440, 488, 520, 552, 584, 616, 712},
+  /* NPRB 001*/ { 16, 24, 32, 40, 56, 72, 88, 104, 120, 136, 144, 176, 208, 224, 256, 280, 328, 336, 376, 408, 440, 488, 520, 552, 584, 616, 712},
   /* NPRB 002*/ { 32, 56, 72, 104, 120, 144, 176, 224, 256, 296, 328, 376, 440, 488, 552, 600, 632, 696, 776, 840, 904, 1000, 1064, 1128, 1192, 1256, 1480},
   /* NPRB 003*/ { 56, 88, 144, 176, 208, 224, 256, 328, 392, 456, 504, 584, 680, 744, 840, 904, 968, 1064, 1160, 1288, 1384, 1480, 1608, 1736, 1800, 1864, 2216},
   /* NPRB 004*/ { 88, 144, 176, 208, 256, 328, 392, 472, 536, 616, 680, 776, 904, 1000, 1128, 1224, 1288, 1416, 1544, 1736, 1864, 1992, 2152, 2280, 2408, 2536, 2984},
diff -Naur ns-3.21/src/lte/model/lte-amc.h ns-3.22/src/lte/model/lte-amc.h
--- ns-3.21/src/lte/model/lte-amc.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-amc.h	2015-02-05 15:46:23.000000000 -0800
@@ -33,12 +33,12 @@
 
 /**
  * \ingroup lte
- * \brief The LteAmc class implements the Adaptive Modulation And Coding Scheme
- * as proposed in 3GPP TSG-RAN WG1 - R1-081483
- * http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip
+ * Implements the Adaptive Modulation And Coding Scheme. As proposed in 3GPP
+ * TSG-RAN WG1 [R1-081483 Conveying MCS and TB size via PDCCH]
+ * (http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip).
  *
  * \note All the methods of this class are static, so you'll never
- * need to create and manage instances of this class.
+ *       need to create and manage instances of this class.
  */
 class LteAmc : public Object
 {
@@ -49,13 +49,21 @@
   LteAmc ();
   virtual ~LteAmc();
   
+  /// Types of AMC model.
   enum AmcModel
     {
+      /**
+       * \details
+       * An AMC model based on Piro, G.; Grieco, L.A; Boggia, G.; Camarda, P.,
+       * "A two-level scheduling algorithm for QoS support in the downlink of
+       * LTE cellular networks," _Wireless Conference (EW), 2010 European_,
+       * pp.246,253, 12-15 April 2010.
+       */
       PiroEW2010,
-      // model based on Piro, G.; Grieco, L.A.; Boggia, G.; Camarda, P.;
-      //A two-level scheduling algorithm for QoS support in the downlink of 
-      //LTE cellular networks European Wireless Conference (EW), 2010
-      MiErrorModel // model based on 10% of BER according to LteMiErrorModel
+      /**
+       * An AMC model based on 10% of BER according to LteMiErrorModel.
+       */
+      MiErrorModel
     };
   
   /**
@@ -102,12 +110,21 @@
   
 private:
   
+  /**
+   * The `Ber` attribute.
+   *
+   * The requested BER in assigning MCS (default is 0.00005).
+   */
   double m_ber;
-  AmcModel m_amcModel;
-
 
+  /**
+   * The `AmcModel` attribute.
+   *
+   * AMC model used to assign CQI.
+   */
+  AmcModel m_amcModel;
 
-};
+}; // end of `class LteAmc`
 
 
 }
diff -Naur ns-3.21/src/lte/model/lte-anr.cc ns-3.22/src/lte/model/lte-anr.cc
--- ns-3.21/src/lte/model/lte-anr.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-anr.cc	2015-02-05 15:46:23.000000000 -0800
@@ -29,10 +29,10 @@
 #include <ns3/log.h>
 #include <ns3/uinteger.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteAnr");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteAnr");
+
 NS_OBJECT_ENSURE_REGISTERED (LteAnr);
 
 
diff -Naur ns-3.21/src/lte/model/lte-asn1-header.cc ns-3.22/src/lte/model/lte-asn1-header.cc
--- ns-3.21/src/lte/model/lte-asn1-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-asn1-header.cc	2015-02-05 15:46:23.000000000 -0800
@@ -25,10 +25,10 @@
 #include <sstream>
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("Asn1Header");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Asn1Header");
+
 NS_OBJECT_ENSURE_REGISTERED (Asn1Header);
 
 TypeId
diff -Naur ns-3.21/src/lte/model/lte-asn1-header.h ns-3.22/src/lte/model/lte-asn1-header.h
--- ns-3.21/src/lte/model/lte-asn1-header.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-asn1-header.h	2015-02-05 15:46:23.000000000 -0800
@@ -26,8 +26,6 @@
 #include <bitset>
 #include <string>
 
-#include "ns3/lte-rrc-sap.h"
-
 namespace ns3 {
 
 /**
@@ -41,7 +39,10 @@
   Asn1Header ();
   virtual ~Asn1Header ();
 
-  // Inherited from ns3::Header base class
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   uint32_t GetSerializedSize (void) const;
@@ -53,97 +54,475 @@
   virtual void Print (std::ostream &os) const = 0;
     
   /**
-   * This function serializes class attributes to m_serializationResult local Buffer.
-   * As ASN1 encoding produces a bitstream that does not have a fixed length,
-   * this function is needed to store the result, so its length can be retrieved
-   * with Header::GetSerializedSize() function.
-   * This method is pure virtual in this class (needs to be implemented in child classes)
-   * as the meningful information elements are in the subclasses.
+   * This function serializes class attributes to m_serializationResult
+   * local Buffer.  As ASN1 encoding produces a bitstream that does not have
+   * a fixed length, this function is needed to store the result, so
+   * its length can be retrieved with Header::GetSerializedSize() function.
+   * This method is pure virtual in this class (needs to be implemented
+   * in child classes) as the meaningful information elements are in
+   * the subclasses.
    */
   virtual void PreSerialize (void) const = 0;
 
 protected:
-  mutable uint8_t m_serializationPendingBits;
-  mutable uint8_t m_numSerializationPendingBits;
-  mutable bool m_isDataSerialized;
-  mutable Buffer m_serializationResult;
+  mutable uint8_t m_serializationPendingBits; //!< pending bits
+  mutable uint8_t m_numSerializationPendingBits; //!< number of pending bits
+  mutable bool m_isDataSerialized; //!< true if data is serialized
+  mutable Buffer m_serializationResult; //!< serialization result
 
-  // Function to write in m_serializationResult, after resizing its size
+  /**
+   * Function to write in m_serializationResult, after resizing its size
+   * \param octet bits to write
+   */
   void WriteOctet (uint8_t octet) const;
 
   // Serialization functions
+
+  /**
+   * Serialize a bool
+   * \param value value to serialize
+   */
   void SerializeBoolean (bool value) const;
+  /**
+   * Serialize an Integer
+   * \param n value to serialize
+   * \param nmin min value to serialize
+   * \param nmax max value to serialize
+   */
   void SerializeInteger (int n, int nmin, int nmax) const;
-  void SerializeOctetstring (std::string s) const;
+  // void SerializeOctetstring (std::string s) const;
+  /**
+   * Serialize a Sequence
+   * \param numElems element number to serialize
+   * \param nMax max value to serialize
+   * \param nMin min value to serialize
+   */
   void SerializeSequenceOf (int numElems, int nMax, int nMin) const;
-  void SerializeChoice (int numOptions, int selectedOption, bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a Choice (set of options)
+   * \param numOptions number of options
+   * \param selectedOption selected option
+   * \param isExtensionMarkerPresent true if extension mark is present
+   */
+  void SerializeChoice (int numOptions, int selectedOption,
+                        bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize an Enum
+   * \param numElems number of elements in the enum
+   * \param selectedElem selected element
+   */
   void SerializeEnum (int numElems, int selectedElem) const;
+  /**
+   * Serialize nothing (null op)
+   */
   void SerializeNull () const;
+  /**
+   * Finalizes an in progress serialization.
+   */
   void FinalizeSerialization () const;
 
+  /**
+   * Serialize a bitset
+   * \param data data to serialize
+   */
   template <int N>
   void SerializeBitset (std::bitset<N> data) const;
 
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
   template <int N>
-  void SerializeSequence (std::bitset<N> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<0> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<1> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<2> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<3> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<4> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<5> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<6> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<9> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<10> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
-  void SerializeSequence (std::bitset<11> optionalOrDefaultMask, bool isExtensionMarkerPresent) const;
+  void SerializeSequence (std::bitset<N> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<0> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<1> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<2> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<3> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<4> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<5> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<6> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<9> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<10> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
+  /**
+   * Serialize a sequence
+   * \param optionalOrDefaultMask Mask to serialize
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   */
+  void SerializeSequence (std::bitset<11> optionalOrDefaultMask,
+                          bool isExtensionMarkerPresent) const;
 
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   template <int N>
   void SerializeBitstring (std::bitset<N> bitstring) const;
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   void SerializeBitstring (std::bitset<1> bitstring) const;
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   void SerializeBitstring (std::bitset<2> bitstring) const;
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   void SerializeBitstring (std::bitset<8> bitstring) const;
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   void SerializeBitstring (std::bitset<10> bitstring) const;
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   void SerializeBitstring (std::bitset<16> bitstring) const;
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   void SerializeBitstring (std::bitset<27> bitstring) const;
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   void SerializeBitstring (std::bitset<28> bitstring) const;
+  /**
+   * Serialize a bitstring
+   * \param bitstring bitstring to serialize
+   */
   void SerializeBitstring (std::bitset<32> bitstring) const;
 
   // Deserialization functions
+
+  /**
+   * Deserialize a bitset
+   * \param data buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
   template <int N>
-  Buffer::Iterator DeserializeBitset (std::bitset<N> *data, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitset (std::bitset<8> *data, Buffer::Iterator bIterator);
+  Buffer::Iterator DeserializeBitset (std::bitset<N> *data,
+                                      Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitset
+   * \param data buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBitset (std::bitset<8> *data,
+                                      Buffer::Iterator bIterator);
 
-  Buffer::Iterator DeserializeBoolean (bool *value, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeInteger (int *n, int nmin, int nmax, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeChoice (int numOptions, bool isExtensionMarkerPresent, int *selectedOption, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeEnum (int numElems, int *selectedElem, Buffer::Iterator bIterator);
+  /**
+   * Deserialize a boolean
+   * \param value buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBoolean (bool *value,
+                                       Buffer::Iterator bIterator);
+  /**
+   * Deserialize an integer
+   * \param n buffer to store the result
+   * \param nmin min value to serialize
+   * \param nmax max value to serialize
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeInteger (int *n, int nmin, int nmax,
+                                       Buffer::Iterator bIterator);
+  /**
+   * Deserialize a Choice (set of options)
+   * \param numOptions number of options
+   * \param isExtensionMarkerPresent true if extension mark is present
+   * \param selectedOption buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeChoice (int numOptions,
+                                      bool isExtensionMarkerPresent,
+                                      int *selectedOption,
+                                      Buffer::Iterator bIterator);
+  /**
+   * Deserialize an Enum
+   * \param numElems number of elements in the enum
+   * \param selectedElem buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeEnum (int numElems, int *selectedElem,
+                                    Buffer::Iterator bIterator);
 
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
   template <int N>
-  Buffer::Iterator DeserializeSequence (std::bitset<N> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<0> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<1> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<2> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<3> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<4> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<5> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<6> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<9> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<10> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequence (std::bitset<11> *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<N> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<0> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<1> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<2> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<3> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<4> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<5> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<6> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<9> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<10> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
+  /**
+   * Deserialize a sequence
+   * \param optionalOrDefaultMask buffer to store the result
+   * \param isExtensionMarkerPresent true if Extension Marker is present
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequence (std::bitset<11> *optionalOrDefaultMask,
+                                        bool isExtensionMarkerPresent,
+                                        Buffer::Iterator bIterator);
 
-  template <int N>
-  Buffer::Iterator DeserializeBitstring (std::bitset<N> *bitstring, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitstring (std::bitset<1> *bitstring, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitstring (std::bitset<2> *bitstring, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitstring (std::bitset<8> *bitstring, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitstring (std::bitset<10> *bitstring, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitstring (std::bitset<16> *bitstring, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitstring (std::bitset<27> *bitstring, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitstring (std::bitset<28> *bitstring, Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeBitstring (std::bitset<32> *bitstring, Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitstring
+   * \param bitstring buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+ template <int N>
+  Buffer::Iterator DeserializeBitstring (std::bitset<N> *bitstring,
+                                         Buffer::Iterator bIterator);
+ /**
+  * Deserialize a bitstring
+  * \param bitstring buffer to store the result
+  * \param bIterator buffer iterator
+  * \returns the modified buffer iterator
+  */
+  Buffer::Iterator DeserializeBitstring (std::bitset<1> *bitstring,
+                                         Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitstring
+   * \param bitstring buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBitstring (std::bitset<2> *bitstring,
+                                         Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitstring
+   * \param bitstring buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBitstring (std::bitset<8> *bitstring,
+                                         Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitstring
+   * \param bitstring buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBitstring (std::bitset<10> *bitstring,
+                                         Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitstring
+   * \param bitstring buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBitstring (std::bitset<16> *bitstring,
+                                         Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitstring
+   * \param bitstring buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBitstring (std::bitset<27> *bitstring,
+                                         Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitstring
+   * \param bitstring buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBitstring (std::bitset<28> *bitstring,
+                                         Buffer::Iterator bIterator);
+  /**
+   * Deserialize a bitstring
+   * \param bitstring buffer to store the result
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeBitstring (std::bitset<32> *bitstring,
+                                         Buffer::Iterator bIterator);
 
+  /**
+   * Deserialize nothing (null op)
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
   Buffer::Iterator DeserializeNull (Buffer::Iterator bIterator);
-  Buffer::Iterator DeserializeSequenceOf (int *numElems, int nMax, int nMin, Buffer::Iterator bIterator);
+  /**
+   * Deserialize a Sequence
+   * \param numElems buffer to store the result
+   * \param nMax max value to serialize
+   * \param nMin min value to serialize
+   * \param bIterator buffer iterator
+   * \returns the modified buffer iterator
+   */
+  Buffer::Iterator DeserializeSequenceOf (int *numElems, int nMax, int nMin,
+                                          Buffer::Iterator bIterator);
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/lte/model/lte-chunk-processor.cc ns-3.22/src/lte/model/lte-chunk-processor.cc
--- ns-3.21/src/lte/model/lte-chunk-processor.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-chunk-processor.cc	2015-02-05 15:46:23.000000000 -0800
@@ -25,10 +25,10 @@
 #include <ns3/spectrum-value.h>
 #include "lte-chunk-processor.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteChunkProcessor");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteChunkProcessor");
+
 LteChunkProcessor::LteChunkProcessor ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/lte/model/lte-common.cc ns-3.22/src/lte/model/lte-common.cc
--- ns-3.21/src/lte/model/lte-common.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-common.cc	2015-02-05 15:46:23.000000000 -0800
@@ -23,10 +23,9 @@
 #include <ns3/log.h>
 #include <ns3/abort.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteCommon");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteCommon");
 
 LteFlowId_t::LteFlowId_t ()
 {
diff -Naur ns-3.21/src/lte/model/lte-common.h ns-3.22/src/lte/model/lte-common.h
--- ns-3.21/src/lte/model/lte-common.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-common.h	2015-02-05 15:46:23.000000000 -0800
@@ -127,6 +127,14 @@
   uint16_t m_size;    ///< Size of transport block
   uint8_t  m_rv;      ///< the redundancy version (HARQ)
   uint8_t  m_ndi;     ///< new data indicator flag
+  
+  /**
+   *  TracedCallback signature.
+   *
+   * \param [in] params Value of the PhyTransmissionionStatParameters.
+   */
+  typedef void (* TracedCallback)(const PhyTransmissionStatParameters params);
+  
 };
 
 
@@ -143,6 +151,14 @@
   uint8_t  m_rv;           ///< the redundancy version (HARQ)
   uint8_t  m_ndi;          ///< new data indicator flag
   uint8_t  m_correctness;  ///< correctness of the TB received
+
+  /**
+   *  TracedCallback signature.
+   *
+   * \param [in] params Value of the PhyReceptionStatParameters.
+   */
+  typedef void (* TracedCallback)(const PhyReceptionStatParameters params);
+  
 };
 
 
diff -Naur ns-3.21/src/lte/model/lte-control-messages.cc ns-3.22/src/lte/model/lte-control-messages.cc
--- ns-3.21/src/lte/model/lte-control-messages.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-control-messages.cc	2015-02-05 15:46:23.000000000 -0800
@@ -26,11 +26,10 @@
 #include "lte-net-device.h"
 #include "lte-ue-net-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteControlMessage");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteControlMessage");
+
 LteControlMessage::LteControlMessage (void)
 {
 }
diff -Naur ns-3.21/src/lte/model/lte-enb-mac.cc ns-3.22/src/lte/model/lte-enb-mac.cc
--- ns-3.21/src/lte/model/lte-enb-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-enb-mac.cc	2015-02-05 15:46:23.000000000 -0800
@@ -38,10 +38,9 @@
 #include <ns3/lte-common.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("LteEnbMac");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteEnbMac");
 
 NS_OBJECT_ENSURE_REGISTERED (LteEnbMac);
 
@@ -333,10 +332,12 @@
                    MakeUintegerChecker<uint8_t> (2, 10))
     .AddTraceSource ("DlScheduling",
                      "Information regarding DL scheduling.",
-                     MakeTraceSourceAccessor (&LteEnbMac::m_dlScheduling))
+                     MakeTraceSourceAccessor (&LteEnbMac::m_dlScheduling),
+                     "ns3::LteEnbMac::DlSchedulingTracedCallback")
     .AddTraceSource ("UlScheduling",
                      "Information regarding UL scheduling.",
-                     MakeTraceSourceAccessor (&LteEnbMac::m_ulScheduling))
+                     MakeTraceSourceAccessor (&LteEnbMac::m_ulScheduling),
+                     "ns3::LteEnbMac::UlSchedulingTracedCallback")
   ;
 
   return tid;
@@ -544,13 +545,13 @@
   std::vector <FfMacSchedSapProvider::SchedUlCqiInfoReqParameters>::iterator itCqi;
   for (uint16_t i = 0; i < m_ulCqiReceived.size (); i++)
     {
-      if (subframeNo>1)
+      if (subframeNo > 1)
         {        
           m_ulCqiReceived.at (i).m_sfnSf = ((0x3FF & frameNo) << 4) | (0xF & (subframeNo - 1));
         }
       else
         {
-          m_ulCqiReceived.at (i).m_sfnSf = ((0x3FF & (frameNo-1)) << 4) | (0xF & 10);
+          m_ulCqiReceived.at (i).m_sfnSf = ((0x3FF & (frameNo - 1)) << 4) | (0xF & 10);
         }
       m_schedSapProvider->SchedUlCqiInfoReq (m_ulCqiReceived.at (i));
     }
@@ -571,14 +572,14 @@
   uint32_t ulSchedFrameNo = m_frameNo;
   uint32_t ulSchedSubframeNo = m_subframeNo;
   //   NS_LOG_DEBUG (this << " sfn " << frameNo << " sbfn " << subframeNo);
-  if (ulSchedSubframeNo + (m_macChTtiDelay+UL_PUSCH_TTIS_DELAY) > 10)
+  if (ulSchedSubframeNo + (m_macChTtiDelay + UL_PUSCH_TTIS_DELAY) > 10)
     {
       ulSchedFrameNo++;
-      ulSchedSubframeNo = (ulSchedSubframeNo + (m_macChTtiDelay+UL_PUSCH_TTIS_DELAY)) % 10;
+      ulSchedSubframeNo = (ulSchedSubframeNo + (m_macChTtiDelay + UL_PUSCH_TTIS_DELAY)) % 10;
     }
   else
     {
-      ulSchedSubframeNo = ulSchedSubframeNo + (m_macChTtiDelay+UL_PUSCH_TTIS_DELAY);
+      ulSchedSubframeNo = ulSchedSubframeNo + (m_macChTtiDelay + UL_PUSCH_TTIS_DELAY);
     }
   FfMacSchedSapProvider::SchedUlTriggerReqParameters ulparams;
   ulparams.m_sfnSf = ((0x3FF & ulSchedFrameNo) << 4) | (0xF & ulSchedSubframeNo);
@@ -711,9 +712,13 @@
   std::map <uint16_t, std::map<uint8_t, LteMacSapUser*> >::iterator rntiIt = m_rlcAttached.find (rnti);
   NS_ASSERT_MSG (rntiIt != m_rlcAttached.end (), "could not find RNTI" << rnti);
   std::map<uint8_t, LteMacSapUser*>::iterator lcidIt = rntiIt->second.find (lcid);
-  NS_ASSERT_MSG (lcidIt != rntiIt->second.end (), "could not find LCID" << lcid);
-  (*lcidIt).second->ReceivePdu (p);
+  //NS_ASSERT_MSG (lcidIt != rntiIt->second.end (), "could not find LCID" << lcid);
 
+  //Receive PDU only if LCID is found
+  if (lcidIt != rntiIt->second.end ())
+    {
+      (*lcidIt).second->ReceivePdu (p);
+    }
 }
 
 
@@ -840,7 +845,16 @@
 void
 LteEnbMac::DoReleaseLc (uint16_t rnti, uint8_t lcid)
 {
-  NS_FATAL_ERROR ("not implemented");
+  NS_LOG_FUNCTION (this);
+
+  //Find user based on rnti and then erase lcid stored against the same
+  std::map <uint16_t, std::map<uint8_t, LteMacSapUser*> >::iterator rntiIt = m_rlcAttached.find (rnti);
+  rntiIt->second.erase (lcid);
+
+  struct FfMacCschedSapProvider::CschedLcReleaseReqParameters params;
+  params.m_rnti = rnti;
+  params.m_logicalChannelIdentity.push_back (lcid);
+  m_cschedSapProvider->CschedLcReleaseReq (params);
 }
 
 void
@@ -919,8 +933,8 @@
   params.pdu->AddPacketTag (tag);
   // Store pkt in HARQ buffer
   std::map <uint16_t, DlHarqProcessesBuffer_t>::iterator it =  m_miDlHarqProcessesPackets.find (params.rnti);
-  NS_ASSERT (it!=m_miDlHarqProcessesPackets.end ());
-  NS_LOG_DEBUG (this << " LAYER " <<(uint16_t)tag.GetLayer () << " HARQ ID " << (uint16_t)params.harqProcessId);
+  NS_ASSERT (it != m_miDlHarqProcessesPackets.end ());
+  NS_LOG_DEBUG (this << " LAYER " << (uint16_t)tag.GetLayer () << " HARQ ID " << (uint16_t)params.harqProcessId);
   
   //(*it).second.at (params.layer).at (params.harqProcessId) = params.pdu;//->Copy ();
   (*it).second.at (params.layer).at (params.harqProcessId)->AddPacket (params.pdu);
@@ -966,8 +980,8 @@
             {
               // new data -> force emptying correspondent harq pkt buffer
               std::map <uint16_t, DlHarqProcessesBuffer_t>::iterator it = m_miDlHarqProcessesPackets.find (ind.m_buildDataList.at (i).m_rnti);
-              NS_ASSERT(it!=m_miDlHarqProcessesPackets.end());
-              for (uint16_t lcId = 0; lcId < (*it).second.size (); lcId ++)
+              NS_ASSERT (it != m_miDlHarqProcessesPackets.end ());
+              for (uint16_t lcId = 0; lcId < (*it).second.size (); lcId++)
                 {
                   Ptr<PacketBurst> pb = CreateObject <PacketBurst> ();
                   (*it).second.at (lcId).at (ind.m_buildDataList.at (i).m_dci.m_harqProcess) = pb;
@@ -992,11 +1006,11 @@
                 }
               else
                 {
-                  if (ind.m_buildDataList.at (i).m_dci.m_tbsSize.at (k)>0)
+                  if (ind.m_buildDataList.at (i).m_dci.m_tbsSize.at (k) > 0)
                     {
                       // HARQ retransmission -> retrieve TB from HARQ buffer
                       std::map <uint16_t, DlHarqProcessesBuffer_t>::iterator it = m_miDlHarqProcessesPackets.find (ind.m_buildDataList.at (i).m_rnti);
-                      NS_ASSERT(it!=m_miDlHarqProcessesPackets.end());
+                      NS_ASSERT (it != m_miDlHarqProcessesPackets.end ());
                       Ptr<PacketBurst> pb = (*it).second.at (k).at ( ind.m_buildDataList.at (i).m_dci.m_harqProcess);
                       for (std::list<Ptr<Packet> >::const_iterator j = pb->Begin (); j != pb->End (); ++j)
                         {
@@ -1171,17 +1185,17 @@
   NS_LOG_FUNCTION (this);
   // Update HARQ buffer
   std::map <uint16_t, DlHarqProcessesBuffer_t>::iterator it =  m_miDlHarqProcessesPackets.find (params.m_rnti);
-  NS_ASSERT (it!=m_miDlHarqProcessesPackets.end ());
+  NS_ASSERT (it != m_miDlHarqProcessesPackets.end ());
   for (uint8_t layer = 0; layer < params.m_harqStatus.size (); layer++)
     {
-      if (params.m_harqStatus.at (layer)==DlInfoListElement_s::ACK)
+      if (params.m_harqStatus.at (layer) == DlInfoListElement_s::ACK)
         {
           // discard buffer
           Ptr<PacketBurst> emptyBuf = CreateObject <PacketBurst> ();
           (*it).second.at (layer).at (params.m_harqProcessId) = emptyBuf;
           NS_LOG_DEBUG (this << " HARQ-ACK UE " << params.m_rnti << " harqId " << (uint16_t)params.m_harqProcessId << " layer " << (uint16_t)layer);
         }
-      else if (params.m_harqStatus.at (layer)==DlInfoListElement_s::NACK)
+      else if (params.m_harqStatus.at (layer) == DlInfoListElement_s::NACK)
         {
           NS_LOG_DEBUG (this << " HARQ-NACK UE " << params.m_rnti << " harqId " << (uint16_t)params.m_harqProcessId << " layer " << (uint16_t)layer);
         }
diff -Naur ns-3.21/src/lte/model/lte-enb-mac.h ns-3.22/src/lte/model/lte-enb-mac.h
--- ns-3.21/src/lte/model/lte-enb-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-enb-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -120,7 +120,35 @@
   */
   void SetLteEnbPhySapProvider (LteEnbPhySapProvider* s);
 
+  /**
+   * TracedCallback signature for DL scheduling events.
+   *
+   * \param [in] frame Frame number.
+   * \param [in] subframe Subframe number.
+   * \param [in] rnti The C-RNTI identifying the UE.
+   * \param [in] mcs0 The MCS for transport block.. 
+   * \param [in] tbs0Size
+   * \param [in] mcs1 The MCS for transport block.
+   * \param [in] tbs1Size
+   */
+  typedef void (* DlSchedulingTracedCallback)
+    (const uint32_t frame, const uint32_t subframe, const uint16_t rnti,
+     const uint8_t mcs0, const uint16_t tbs0Size,
+     const uint8_t mcs1, const uint16_t tbs1Size);
 
+  /**
+   *  TracedCallback signature for UL scheduling events.
+   *
+   * \param [in] frame Frame number.
+   * \param [in] subframe Subframe number.
+   * \param [in] rnti The C-RNTI identifying the UE.
+   * \param [in] mcs  The MCS for transport block
+   * \param [in] tbsSize
+   */
+  typedef void (* UlSchedulingTracedCallback)
+    (const uint32_t frame, const uint32_t subframe, const uint16_t rnti,
+     const uint8_t mcs, const uint16_t tbsSize);
+  
 private:
 
   /**
diff -Naur ns-3.21/src/lte/model/lte-enb-net-device.cc ns-3.22/src/lte/model/lte-enb-net-device.cc
--- ns-3.21/src/lte/model/lte-enb-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-enb-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -45,10 +45,10 @@
 #include <ns3/abort.h>
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteEnbNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteEnbNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED ( LteEnbNetDevice);
 
 TypeId LteEnbNetDevice::GetTypeId (void)
diff -Naur ns-3.21/src/lte/model/lte-enb-phy.cc ns-3.22/src/lte/model/lte-enb-phy.cc
--- ns-3.21/src/lte/model/lte-enb-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-enb-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -45,25 +45,32 @@
 #include <ns3/lte-ue-net-device.h>
 #include <ns3/pointer.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteEnbPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteEnbPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (LteEnbPhy);
 
-// duration of the data part of a subframe in DL
-// = 0.001 / 14 * 11 (fixed to 11 symbols) -1ns as margin to avoid overlapping simulator events
+/**
+ * Duration of the data portion of a DL subframe.
+ * Equals to "TTI length * (11/14) - margin".
+ * Data portion is fixed to 11 symbols out of the available 14 symbols.
+ * 1 nanosecond margin is added to avoid overlapping simulator events.
+ */
 static const Time DL_DATA_DURATION = NanoSeconds (785714 -1);
 
-//  delay from subframe start to transmission of the data in DL 
-// = 0.001 / 14 * 3 (ctrl fixed to 3 symbols)
+/**
+ * Delay from the start of a DL subframe to transmission of the data portion.
+ * Equals to "TTI length * (3/14)".
+ * Control portion is fixed to 3 symbols out of the available 14 symbols.
+ */
 static const Time DL_CTRL_DELAY_FROM_SUBFRAME_START = NanoSeconds (214286);
 
 ////////////////////////////////////////
 // member SAP forwarders
 ////////////////////////////////////////
 
-
+/// \todo SetBandwidth() and SetCellId() can be removed.
 class EnbMemberLteEnbPhySapProvider : public LteEnbPhySapProvider
 {
 public:
@@ -161,42 +168,51 @@
                                        &LteEnbPhy::GetTxPower),
                    MakeDoubleChecker<double> ())
     .AddAttribute ("NoiseFigure",
-                   "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver."
-                   " According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is "
+                   "Loss (dB) in the Signal-to-Noise-Ratio due to "
+                   "non-idealities in the receiver.  According to Wikipedia "
+                   "(http://en.wikipedia.org/wiki/Noise_figure), this is "
                    "\"the difference in decibels (dB) between"
-                   " the noise output of the actual receiver to the noise output of an "
-                   " ideal receiver with the same overall gain and bandwidth when the receivers "
-                   " are connected to sources at the standard noise temperature T0.\" "
-                   "In this model, we consider T0 = 290K.",
+                   " the noise output of the actual receiver to "
+                   "the noise output of an ideal receiver with "
+                   "the same overall gain and bandwidth when the receivers "
+                   "are connected to sources at the standard noise "
+                   "temperature T0.\"  In this model, we consider T0 = 290K.",
                    DoubleValue (5.0),
                    MakeDoubleAccessor (&LteEnbPhy::SetNoiseFigure, 
                                        &LteEnbPhy::GetNoiseFigure),
                    MakeDoubleChecker<double> ())
     .AddAttribute ("MacToChannelDelay",
-                   "The delay in TTI units that occurs between a scheduling decision in the MAC and the actual start of the transmission by the PHY. This is intended to be used to model the latency of real PHY and MAC implementations.",
+                   "The delay in TTI units that occurs between "
+                   "a scheduling decision in the MAC and the actual "
+                   "start of the transmission by the PHY. This is "
+                   "intended to be used to model the latency of real PHY "
+                   "and MAC implementations.",
                    UintegerValue (2),
                    MakeUintegerAccessor (&LteEnbPhy::SetMacChDelay, 
                                          &LteEnbPhy::GetMacChDelay),
                    MakeUintegerChecker<uint8_t> ())
     .AddTraceSource ("ReportUeSinr",
                      "Report UEs' averaged linear SINR",
-                     MakeTraceSourceAccessor (&LteEnbPhy::m_reportUeSinr))
+                     MakeTraceSourceAccessor (&LteEnbPhy::m_reportUeSinr),
+                     "ns3::LteEnbPhy::ReportUeSinrTracedCallback")
     .AddAttribute ("UeSinrSamplePeriod",
-                   "The sampling period for reporting UEs' SINR stats (default value 1)",
-                   UintegerValue (1),
+                   "The sampling period for reporting UEs' SINR stats.",
+                   UintegerValue (1),  /// \todo In what unit is this?
                    MakeUintegerAccessor (&LteEnbPhy::m_srsSamplePeriod),
                    MakeUintegerChecker<uint16_t> ())
     .AddTraceSource ("ReportInterference",
                      "Report linear interference power per PHY RB",
-                     MakeTraceSourceAccessor (&LteEnbPhy::m_reportInterferenceTrace))
+                     MakeTraceSourceAccessor (&LteEnbPhy::m_reportInterferenceTrace),
+                     "ns3::LteEnbPhy::ReportInterferenceTracedCallback")
     .AddAttribute ("InterferenceSamplePeriod",
-                   "The sampling period for reporting interference stats (default value 1)",
-                   UintegerValue (1),
+                   "The sampling period for reporting interference stats",
+                   UintegerValue (1),  /// \todo In what unit is this?
                    MakeUintegerAccessor (&LteEnbPhy::m_interferenceSamplePeriod),
                    MakeUintegerChecker<uint16_t> ())
     .AddTraceSource ("DlPhyTransmission",
                      "DL transmission PHY layer statistics.",
-                     MakeTraceSourceAccessor (&LteEnbPhy::m_dlPhyTransmission))
+                     MakeTraceSourceAccessor (&LteEnbPhy::m_dlPhyTransmission),
+                     "ns3::PhyTransmissionStatParameters::TracedCallback")
     .AddAttribute ("DlSpectrumPhy",
                    "The downlink LteSpectrumPhy associated to this LtePhy",
                    TypeId::ATTR_GET,
diff -Naur ns-3.21/src/lte/model/lte-enb-phy.h ns-3.22/src/lte/model/lte-enb-phy.h
--- ns-3.21/src/lte/model/lte-enb-phy.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-enb-phy.h	2015-02-05 15:46:22.000000000 -0800
@@ -283,6 +283,25 @@
 
   void SetHarqPhyModule (Ptr<LteHarqPhy> harq);
 
+  /**
+   * TracedCallback signature for the linear average of SRS SINRs.
+   *
+   * \param [in] cellId
+   * \param [in] rnti
+   * \param [in] sinrLinear
+   */
+  typedef void (* ReportUeSinrTracedCallback)
+    (const uint16_t cellId, const uint16_t rnti, const double sinrLinear);
+
+  /**
+   * TracedCallback signature for the linear average of SRS SINRs.
+   *
+   * \param [in] cellId
+   * \param [in] spectrumValue
+   */
+  typedef void (* ReportInterferenceTracedCallback)
+    (const uint16_t cellId, const Ptr<const SpectrumValue> spectrumValue);
+
 
 private:
 
@@ -302,27 +321,46 @@
   void DoSendLteControlMessage (Ptr<LteControlMessage> msg);
   uint8_t DoGetMacChTtiDelay ();
 
+  /**
+   * Add the given RNTI to the list of attached UE #m_ueAttached.
+   * \param rnti RNTI of a UE
+   * \return true if the RNTI has _not_ existed before, or false otherwise.
+   */
   bool AddUePhy (uint16_t rnti);
-
+  /**
+   * Remove the given RNTI from the list of attached UE #m_ueAttached.
+   * \param rnti RNTI of a UE
+   * \return true if the RNTI has existed before, or false otherwise.
+   */
   bool DeleteUePhy (uint16_t rnti);
 
   void CreateSrsReport (uint16_t rnti, double srs);
 
-
+  /**
+   * List of RNTI of attached UEs. Used for quickly determining whether a UE is
+   * attached to this eNodeB or not.
+   */
   std::set <uint16_t> m_ueAttached;
 
 
-  // P_A per UE RNTI
+  /// P_A per UE RNTI.
   std::map <uint16_t,double> m_paMap;
 
-  // DL power allocation map
+  /// DL power allocation map.
   std::map <int, double> m_dlPowerAllocationMap;
 
+  /**
+   * A vector of integers, if the i-th value is j it means that the j-th
+   * resource block is used for transmission in the downlink. If there is
+   * no i such that the value of the i-th element is j, it means that RB j
+   * is not used.
+   */
   std::vector <int> m_listOfDownlinkSubchannel;
 
   std::vector <int> m_dlDataRbMap;
 
-  std::vector< std::list<UlDciLteControlMessage> > m_ulDciQueue; // for storing info on future receptions
+  /// For storing info on future receptions.
+  std::vector< std::list<UlDciLteControlMessage> > m_ulDciQueue;
 
   LteEnbPhySapProvider* m_enbPhySapProvider;
   LteEnbPhySapUser* m_enbPhySapUser;
@@ -330,7 +368,16 @@
   LteEnbCphySapProvider* m_enbCphySapProvider;
   LteEnbCphySapUser* m_enbCphySapUser;
 
+  /**
+   * The frame number currently served. In ns-3, frame number starts from 1.
+   * In contrast, the 3GPP standard's frame number starts from 0.
+   */
   uint32_t m_nrFrames;
+  /**
+   * The subframe number currently served. In ns-3, subframe number starts
+   * from 1. In contrast, the 3GPP standard's subframe number starts from 0.
+   * The number resets to the beginning again after 10 subframes.
+   */
   uint32_t m_nrSubFrames;
 
   uint16_t m_srsPeriodicity;
@@ -339,35 +386,54 @@
   std::vector <uint16_t> m_srsUeOffset;
   uint16_t m_currentSrsOffset;
 
+  /**
+   * The Master Information Block message to be broadcasted every frame.
+   * The message content is specified by the upper layer through the RRC SAP.
+   */
   LteRrcSap::MasterInformationBlock m_mib;
+  /**
+   * The System Information Block Type 1 message to be broadcasted. SIB1 is
+   * broadcasted every 6th subframe of every odd-numbered radio frame.
+   * The message content is specified by the upper layer through the RRC SAP.
+   */
   LteRrcSap::SystemInformationBlockType1 m_sib1;
 
   Ptr<LteHarqPhy> m_harqPhyModule;
 
   /**
-   * Trace reporting the linear average of SRS SINRs 
-   * uint16_t cellId, uint16_t rnti,  double sinrLinear
+   * The `ReportUeSinr` trace source. Reporting the linear average of SRS SINR.
+   * Exporting cell ID, RNTI, and SINR in linear unit.
    */
   TracedCallback<uint16_t, uint16_t, double> m_reportUeSinr;
+  /**
+   * The `UeSinrSamplePeriod` trace source. The sampling period for reporting
+   * UEs' SINR stats.
+   */
   uint16_t m_srsSamplePeriod;
   std::map <uint16_t,uint16_t> m_srsSampleCounterMap;
 
   /**
-   * Trace reporting the interference per PHY RB (TS 36.214 section 5.2.2,
-   *  measured on DATA) 
-   * uint16_t cellId, Ptr<SpectrumValue> interference linear power per RB basis
+   * The `ReportInterference` trace source. Reporting the interference per PHY
+   * RB (TS 36.214 section 5.2.2, measured on DATA). Exporting cell ID and
+   * interference linear power per RB basis.
    */
   TracedCallback<uint16_t, Ptr<SpectrumValue> > m_reportInterferenceTrace;
+  /**
+   * The `InterferenceSamplePeriod` attribute. The sampling period for
+   * reporting interference stats.
+   * \todo In what unit is this?
+   */
   uint16_t m_interferenceSamplePeriod;
   uint16_t m_interferenceSampleCounter;
 
   /**
-   * Trace information regarding PHY stats from UL Tx perspective
-   * PhyTrasmissionStatParameters see lte-common.h
+   * The `DlPhyTransmission` trace source. Contains trace information regarding
+   * PHY stats from DL Tx perspective. Exporting a structure with type
+   * PhyTransmissionStatParameters.
    */
   TracedCallback<PhyTransmissionStatParameters> m_dlPhyTransmission;
 
-};
+}; // end of `class LteEnbPhy`
 
 
 }
diff -Naur ns-3.21/src/lte/model/lte-enb-rrc.cc ns-3.22/src/lte/model/lte-enb-rrc.cc
--- ns-3.21/src/lte/model/lte-enb-rrc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-enb-rrc.cc	2015-02-05 15:46:22.000000000 -0800
@@ -44,11 +44,9 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("LteEnbRrc");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteEnbRrc");
 
 ///////////////////////////////////////////
 // CMAC SAP forwarder
@@ -100,6 +98,7 @@
 ///////////////////////////////////////////
 
 
+/// Map each of UE Manager states to its string representation.
 static const std::string g_ueManagerStateName[UeManager::NUM_STATES] =
 {
   "INITIAL_RANDOM_ACCESS",
@@ -114,6 +113,10 @@
   "HANDOVER_LEAVING",
 };
 
+/**
+ * \param s The UE manager state.
+ * \return The string representation of the given state.
+ */
 static const std::string & ToString (UeManager::State s)
 {
   return g_ueManagerStateName[s];
@@ -303,8 +306,10 @@
                    MakeUintegerAccessor (&UeManager::m_rnti),
                    MakeUintegerChecker<uint16_t> ())
     .AddTraceSource ("StateTransition",
-                     "fired upon every UE state transition seen by the UeManager at the eNB RRC",
-                     MakeTraceSourceAccessor (&UeManager::m_stateTransitionTrace))
+                     "fired upon every UE state transition seen by the "
+                     "UeManager at the eNB RRC",
+                     MakeTraceSourceAccessor (&UeManager::m_stateTransitionTrace),
+                     "ns3::UeManager::StateTracedCallback")
   ;
   return tid;
 }
@@ -460,14 +465,29 @@
   LteRrcSap::RadioResourceConfigDedicated rrcd;
   rrcd.havePhysicalConfigDedicated = false;
   rrcd.drbToReleaseList.push_back (drbid);
+  //populating RadioResourceConfigDedicated information element as per 3GPP TS 36.331 version 9.2.0
+  rrcd.havePhysicalConfigDedicated = true;
+  rrcd.physicalConfigDedicated = m_physicalConfigDedicated;
  
+  //populating RRCConnectionReconfiguration message as per 3GPP TS 36.331 version 9.2.0 Release 9
   LteRrcSap::RrcConnectionReconfiguration msg;
   msg.haveMeasConfig = false;
   msg.haveMobilityControlInfo = false;
- 
+  msg.radioResourceConfigDedicated = rrcd;
+  msg.haveRadioResourceConfigDedicated = true;
+  //RRC Connection Reconfiguration towards UE
   m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (m_rnti, msg);
 }
 
+void
+LteEnbRrc::DoSendReleaseDataRadioBearer (uint64_t imsi, uint16_t rnti, uint8_t bearerId)
+{
+  Ptr<UeManager> ueManager = GetUeManager (rnti);
+  // Bearer de-activation towards UE
+  ueManager->ReleaseDataRadioBearer (bearerId);
+  // Bearer de-activation indication towards epc-enb application
+  m_s1SapProvider->DoSendReleaseIndication (imsi,rnti,bearerId);
+}
 
 void 
 UeManager::ScheduleRrcConnectionReconfiguration ()
@@ -644,9 +664,18 @@
         params.rnti = m_rnti;
         params.lcid = Bid2Lcid (bid);
         uint8_t drbid = Bid2Drbid (bid);
-        LtePdcpSapProvider* pdcpSapProvider = GetDataRadioBearerInfo (drbid)->m_pdcp->GetLtePdcpSapProvider ();
+        //Transmit PDCP sdu only if DRB ID found in drbMap
+        std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = m_drbMap.find (drbid);
+        if (it != m_drbMap.end ())
+          {
+            Ptr<LteDataRadioBearerInfo> bearerInfo = GetDataRadioBearerInfo (drbid);
+            if (bearerInfo != NULL)
+              {
+                LtePdcpSapProvider* pdcpSapProvider = bearerInfo->m_pdcp->GetLtePdcpSapProvider ();
         pdcpSapProvider->TransmitPdcpSdu (params);
       }
+          }
+      }
       break;
 
     case HANDOVER_LEAVING:
@@ -867,6 +896,11 @@
       m_rrc->m_connectionReconfigurationTrace (m_imsi, m_rrc->m_cellId, m_rnti);
       break;
 
+    // This case is added to NS-3 in order to handle bearer de-activation scenario for CONNECTED state UE
+    case CONNECTED_NORMALLY:
+      NS_LOG_INFO ("ignoring RecvRrcConnectionReconfigurationCompleted in state " << ToString (m_state));
+      break;
+
     case HANDOVER_LEAVING:
       NS_LOG_INFO ("ignoring RecvRrcConnectionReconfigurationCompleted in state " << ToString (m_state));
       break;
@@ -1430,23 +1464,29 @@
 
     // Trace sources
     .AddTraceSource ("NewUeContext",
-                     "trace fired upon creation of a new UE context",
-                     MakeTraceSourceAccessor (&LteEnbRrc::m_newUeContextTrace))
+                     "Fired upon creation of a new UE context.",
+                     MakeTraceSourceAccessor (&LteEnbRrc::m_newUeContextTrace),
+                     "ns3::LteEnbRrc::NewUeContextTracedCallback")
     .AddTraceSource ("ConnectionEstablished",
-                     "trace fired upon successful RRC connection establishment",
-                     MakeTraceSourceAccessor (&LteEnbRrc::m_connectionEstablishedTrace))
+                     "Fired upon successful RRC connection establishment.",
+                     MakeTraceSourceAccessor (&LteEnbRrc::m_connectionEstablishedTrace),
+                     "ns3::LteEnbRrc::ConnectionHandoverTracedCallback")
     .AddTraceSource ("ConnectionReconfiguration",
                      "trace fired upon RRC connection reconfiguration",
-                     MakeTraceSourceAccessor (&LteEnbRrc::m_connectionReconfigurationTrace))
+                     MakeTraceSourceAccessor (&LteEnbRrc::m_connectionReconfigurationTrace),
+                     "ns3::LteEnbRrc::ConnectionHandoverTracedCallback")
     .AddTraceSource ("HandoverStart",
                      "trace fired upon start of a handover procedure",
-                     MakeTraceSourceAccessor (&LteEnbRrc::m_handoverStartTrace))
+                     MakeTraceSourceAccessor (&LteEnbRrc::m_handoverStartTrace),
+                     "ns3::LteEnbRrc::HandoverStartTracedCallback")
     .AddTraceSource ("HandoverEndOk",
                      "trace fired upon successful termination of a handover procedure",
-                     MakeTraceSourceAccessor (&LteEnbRrc::m_handoverEndOkTrace))
+                     MakeTraceSourceAccessor (&LteEnbRrc::m_handoverEndOkTrace),
+                     "ns3::LteEnbRrc::ConnectionHandoverTracedCallback")
     .AddTraceSource ("RecvMeasurementReport",
                      "trace fired when measurement report is received",
-                     MakeTraceSourceAccessor (&LteEnbRrc::m_recvMeasurementReportTrace))
+                     MakeTraceSourceAccessor (&LteEnbRrc::m_recvMeasurementReportTrace),
+                     "ns3::LteEnbRrc::ReceiveReportTracedCallback")
   ;
   return tid;
 }
@@ -2307,10 +2347,24 @@
 }
 
 
-// from 3GPP TS 36.213 table 8.2-1 UE Specific SRS Periodicity
+/// Number of distinct SRS periodicity plus one.
 static const uint8_t SRS_ENTRIES = 9;
+/**
+ * Sounding Reference Symbol (SRS) periodicity (TSRS) in milliseconds. Taken
+ * from 3GPP TS 36.213 Table 8.2-1. Index starts from 1.
+ */
 static const uint16_t g_srsPeriodicity[SRS_ENTRIES] = {0, 2, 5, 10, 20, 40,  80, 160, 320};
+/**
+ * The lower bound (inclusive) of the SRS configuration indices (ISRS) which
+ * use the corresponding SRS periodicity (TSRS). Taken from 3GPP TS 36.213
+ * Table 8.2-1. Index starts from 1.
+ */
 static const uint16_t g_srsCiLow[SRS_ENTRIES] =       {0, 0, 2,  7, 17, 37,  77, 157, 317};
+/**
+ * The upper bound (inclusive) of the SRS configuration indices (ISRS) which
+ * use the corresponding SRS periodicity (TSRS). Taken from 3GPP TS 36.213
+ * Table 8.2-1. Index starts from 1.
+ */
 static const uint16_t g_srsCiHigh[SRS_ENTRIES] =      {0, 1, 6, 16, 36, 76, 156, 316, 636};
 
 void 
@@ -2384,7 +2438,7 @@
           for (uint16_t srcCi = g_srsCiLow[m_srsCurrentPeriodicityId]; srcCi < g_srsCiHigh[m_srsCurrentPeriodicityId]; srcCi++) 
             {
               std::set<uint16_t>::iterator it = m_ueSrsConfigurationIndexSet.find (srcCi);
-              if (it==m_ueSrsConfigurationIndexSet.end ())
+              if (it == m_ueSrsConfigurationIndexSet.end ())
                 {
                   m_lastAllocatedConfigurationIndex = srcCi;
                   m_ueSrsConfigurationIndexSet.insert (srcCi);
diff -Naur ns-3.21/src/lte/model/lte-enb-rrc.h ns-3.22/src/lte/model/lte-enb-rrc.h
--- ns-3.21/src/lte/model/lte-enb-rrc.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-enb-rrc.h	2015-02-05 15:46:22.000000000 -0800
@@ -55,8 +55,9 @@
 
 
 /**
- * Manages all the radio bearer information possessed by the ENB RRC for a single UE
- *
+ * \ingroup lte
+ * Manages all the radio bearer information possessed by the ENB RRC for a
+ * single UE.
  */
 class UeManager : public Object
 {
@@ -303,6 +304,19 @@
    */
   void SetPdschConfigDedicated (LteRrcSap::PdschConfigDedicated pdschConfigDedicated);
 
+  /**
+   * TracedCallback signature for state transition events.
+   *
+   * \param [in] imsi
+   * \param [in] cellId
+   * \param [in] rnti
+   * \param [in] oldState
+   * \param [in] newState
+   */
+  typedef void (* StateTracedCallback)
+    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
+     const State oldState, const State newState);
+
 private:
 
   /** 
@@ -397,34 +411,93 @@
    */
   void SwitchToState (State s);
 
+  uint8_t m_lastAllocatedDrbid;
 
+  /**
+   * The `DataRadioBearerMap` attribute. List of UE DataRadioBearerInfo by
+   * DRBID.
+   */
   std::map <uint8_t, Ptr<LteDataRadioBearerInfo> > m_drbMap;
+
+  /**
+   * The `Srb0` attribute. SignalingRadioBearerInfo for SRB0.
+   */
   Ptr<LteSignalingRadioBearerInfo> m_srb0;
+  /**
+   * The `Srb1` attribute. SignalingRadioBearerInfo for SRB1.
+   */
   Ptr<LteSignalingRadioBearerInfo> m_srb1;
-  uint8_t m_lastAllocatedDrbid;
+
+  /**
+   * The `C-RNTI` attribute. Cell Radio Network Temporary Identifier.
+   */
   uint16_t m_rnti;
+  /**
+   * International Mobile Subscriber Identity assigned to this UE. A globally
+   * unique UE identifier.
+   */
   uint64_t m_imsi;
+  ///
   uint8_t m_lastRrcTransactionIdentifier;
+  ///
   LteRrcSap::PhysicalConfigDedicated m_physicalConfigDedicated;
+  /// Pointer to the parent eNodeB RRC.
   Ptr<LteEnbRrc> m_rrc;
+  /// The current UeManager state.
   State m_state;
+  ///
   LtePdcpSapUser* m_drbPdcpSapUser;
+  ///
   bool m_pendingRrcConnectionReconfiguration;
-  //             imsi      cellid    rnti      old    new
+
+  /**
+   * The `StateTransition` trace source. Fired upon every UE state transition
+   * seen by the UeManager at the eNB RRC. Exporting IMSI, cell ID, RNTI, old
+   * state, and new state.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t, State, State> m_stateTransitionTrace;
+
   uint16_t m_sourceX2apId;
   uint16_t m_sourceCellId;
   uint16_t m_targetCellId;
   std::list<uint8_t> m_drbsToBeStarted;
   bool m_needPhyMacConfiguration;
 
+  /**
+   * Time limit before a _connection request timeout_ occurs. Set after a new
+   * UE context is added after a successful Random Access. Calling
+   * LteEnbRrc::ConnectionRequestTimeout() when it expires. Cancelled when RRC
+   * CONNECTION REQUEST is received.
+   */
   EventId m_connectionRequestTimeout;
+  /**
+   * Time limit before a _connection setup timeout_ occurs. Set after an RRC
+   * CONNECTION SETUP is sent. Calling LteEnbRrc::ConnectionSetupTimeout() when
+   * it expires. Cancelled when RRC CONNECTION SETUP COMPLETE is received.
+   */
   EventId m_connectionSetupTimeout;
+  /**
+   * The delay before a _connection rejected timeout_ occurs. Set after an RRC
+   * CONNECTION REJECT is sent. Calling LteEnbRrc::ConnectionRejectedTimeout()
+   * when it expires.
+   */
   EventId m_connectionRejectedTimeout;
+  /**
+   * Time limit before a _handover joining timeout_ occurs. Set after a new UE
+   * context is added after receiving a handover request. Calling
+   * LteEnbRrc::HandoverJoiningTimeout() when it expires. Cancelled when
+   * RRC CONNECTION RECONFIGURATION COMPLETE is received.
+   */
   EventId m_handoverJoiningTimeout;
+  /**
+   * Time limit before a _handover leaving timeout_ occurs. Set after a
+   * handover command is sent. Calling LteEnbRrc::HandoverLeavingTimeout()
+   * when it expires. Cancelled when RRC CONNECTION RE-ESTABLISHMENT or X2
+   * UE CONTEXT RELEASE is received.
+   */
   EventId m_handoverLeavingTimeout;
 
-};
+}; // end of `class UeManager`
 
 
 
@@ -679,7 +752,7 @@
 
   /** 
    * Method triggered when a UE is expected to request for connection but does
-   * not do so in a reasonable time
+   * not do so in a reasonable time. The method will remove the UE context.
    * 
    * \param rnti the T-C-RNTI whose timeout expired
    */
@@ -687,14 +760,16 @@
 
   /** 
    * Method triggered when a UE is expected to complete a connection setup
-   * procedure but does not do so in a reasonable time
+   * procedure but does not do so in a reasonable time. The method will remove
+   * the UE context.
    *
    * \param rnti the T-C-RNTI whose timeout expired
    */
   void ConnectionSetupTimeout (uint16_t rnti);
 
   /**
-   * Method triggered a while after sending RRC Connection Rejected
+   * Method triggered a while after sending RRC Connection Rejected. The method
+   * will remove the UE context.
    * 
    * \param rnti the T-C-RNTI whose timeout expired
    */
@@ -702,7 +777,8 @@
 
   /** 
    * Method triggered when a UE is expected to join the cell for a handover 
-   * but does not do so in a reasonable time
+   * but does not do so in a reasonable time. The method will remove the UE
+   * context.
    * 
    * \param rnti the C-RNTI whose timeout expired
    */
@@ -710,18 +786,17 @@
 
   /** 
    * Method triggered when a UE is expected to leave a cell for a handover
-   * but no feedback is received in a reasonable time
+   * but no feedback is received in a reasonable time. The method will remove
+   * the UE context.
    * 
    * \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
-   * by sending a handover request to the target eNB over the X2
-   * interface 
+   * Send a HandoverRequest through the X2 SAP interface. This method will
+   * trigger a handover which is started by the RRC by sending a handover
+   * request to the target eNB over the X2 interface
    *
    * \param rnti the ID of the UE to be handed over
    * \param cellId the ID of the target eNB
@@ -729,6 +804,14 @@
   void SendHandoverRequest (uint16_t rnti, uint16_t cellId);
 
   /**
+   *  \brief This function acts as an interface to trigger Release indication messages towards eNB and EPC
+   *  \param imsi the IMSI
+   *  \param rnti the RNTI
+   *  \param bearerId Bearer Identity which is to be de-activated
+   */
+  void DoSendReleaseDataRadioBearer (uint64_t imsi, uint16_t rnti, uint8_t bearerId);
+
+  /**
    * Identifies how EPS Bearer parameters are mapped to different RLC types
    * 
    */
@@ -737,6 +820,49 @@
                                    RLC_AM_ALWAYS = 3,
                                    PER_BASED = 4};
 
+  /**
+   * TracedCallback signature for new Ue Context events.
+   *
+   * \param [in] cellId
+   * \param [in] rnti
+   */
+  typedef void (* NewUeContextTracedCallback)
+    (const uint16_t cellId, const uint16_t rnti);
+
+  /**
+   * TracedCallback signature for connection and handover end events.
+   *
+   * \param [in] imsi
+   * \param [in] cellId
+   * \param [in] rnti
+   */
+  typedef void (* ConnectionHandoverTracedCallback)
+    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti);
+  
+  /**
+   * TracedCallback signature for handover start events.
+   *
+   * \param [in] imsi
+   * \param [in] cellId
+   * \param [in] rnti
+   * \param [in] targetCid
+   */
+  typedef void (* HandoverStartTracedCallback)
+    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
+     const uint16_t targetCid);
+
+  /**
+   * TracedCallback signature for receive measurement report events.
+   *
+   * \param [in] imsi
+   * \param [in] cellId
+   * \param [in] rnti
+   * \param [in] report
+   */
+  typedef void (* ReceiveReportTracedCallback)
+    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
+     const LteRrcSap::MeasurementReport report);
+  
 private:
 
 
@@ -918,53 +1044,83 @@
 
   Callback <void, Ptr<Packet> > m_forwardUpCallback;
 
+  /// Interface to receive messages from neighbour eNodeB over the X2 interface.
   EpcX2SapUser* m_x2SapUser;
+  /// Interface to send messages to neighbour eNodeB over the X2 interface.
   EpcX2SapProvider* m_x2SapProvider;
 
+  /// Receive API calls from the eNodeB MAC instance.
   LteEnbCmacSapUser* m_cmacSapUser;
+  /// Interface to the eNodeB MAC instance.
   LteEnbCmacSapProvider* m_cmacSapProvider;
 
+  /// Receive API calls from the handover algorithm instance.
   LteHandoverManagementSapUser* m_handoverManagementSapUser;
+  /// Interface to the handover algorithm instance.
   LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
 
+  /// Receive API calls from the ANR instance.
   LteAnrSapUser* m_anrSapUser;
+  /// Interface to the ANR instance.
   LteAnrSapProvider* m_anrSapProvider;
 
+  /// Receive API calls from the FFR algorithm instance.
   LteFfrRrcSapUser* m_ffrRrcSapUser;
+  /// Interface to the FFR algorithm instance.
   LteFfrRrcSapProvider* m_ffrRrcSapProvider;
 
+  /// Interface to send messages to UE over the RRC protocol.
   LteEnbRrcSapUser* m_rrcSapUser;
+  /// Interface to receive messages from UE over the RRC protocol.
   LteEnbRrcSapProvider* m_rrcSapProvider;
 
+  /// Interface to the eNodeB MAC instance, to be used by RLC instances.
   LteMacSapProvider* m_macSapProvider;
 
+  /// Interface to send messages to core network over the S1 protocol.
   EpcEnbS1SapProvider* m_s1SapProvider;
+  /// Interface to receive messages from core network over the S1 protocol.
   EpcEnbS1SapUser* m_s1SapUser;
 
+  /// Receive API calls from the eNodeB PHY instance.
   LteEnbCphySapUser* m_cphySapUser;
+  /// Interface to the eNodeB PHY instance.
   LteEnbCphySapProvider* m_cphySapProvider;
 
+  /// True if ConfigureCell() has been completed.
   bool m_configured;
+  /// Cell identifier. Must be unique across the simulation.
   uint16_t m_cellId;
+  /// Downlink E-UTRA Absolute Radio Frequency Channel Number.
   uint16_t m_dlEarfcn;
+  /// Uplink E-UTRA Absolute Radio Frequency Channel Number.
   uint16_t m_ulEarfcn;
+  /// Downlink transmission bandwidth configuration in number of Resource Blocks.
   uint16_t m_dlBandwidth;
+  /// Uplink transmission bandwidth configuration in number of Resource Blocks.
   uint16_t m_ulBandwidth;
+  ///
   uint16_t m_lastAllocatedRnti;
 
-  /// the System Information Block Type 1 that is currently broadcasted over BCH
+  /// The System Information Block Type 1 that is currently broadcasted over BCH.
   LteRrcSap::SystemInformationBlockType1 m_sib1;
 
+  /**
+   * The `UeMap` attribute. List of UeManager by C-RNTI.
+   */
   std::map<uint16_t, Ptr<UeManager> > m_ueMap;
 
   /**
-   * \brief List of measurement configuration which are active in every UE
-   *        attached to this eNodeB instance.
+   * List of measurement configuration which are active in every UE attached to
+   * this eNodeB instance.
    */
   LteRrcSap::MeasConfig m_ueMeasConfig;
 
+  /// List of measurement identities which are intended for handover purpose.
   std::set<uint8_t> m_handoverMeasIds;
+  /// List of measurement identities which are intended for ANR purpose.
   std::set<uint8_t> m_anrMeasIds;
+  /// List of measurement identities which are intended for FFR purpose.
   std::set<uint8_t> m_ffrMeasIds;
 
   struct X2uTeidInfo
@@ -976,51 +1132,124 @@
   //       TEID      RNTI, DRBID
   std::map<uint32_t, X2uTeidInfo> m_x2uTeidInfoMap;
 
+  /**
+   * The `DefaultTransmissionMode` attribute. The default UEs' transmission
+   * mode (0: SISO).
+   */
   uint8_t m_defaultTransmissionMode;
-
+  /**
+   * The `EpsBearerToRlcMapping` attribute. Specify which type of RLC will be
+   * used for each type of EPS bearer.
+   */
   enum LteEpsBearerToRlcMapping_t m_epsBearerToRlcMapping;
-
+  /**
+   * The `SystemInformationPeriodicity` attribute. The interval for sending
+   * system information.
+   */
   Time m_systemInformationPeriodicity;
-
-  // SRS related attributes
+  /**
+   * The `SrsPeriodicity` attribute. The SRS periodicity in milliseconds.
+   */
   uint16_t m_srsCurrentPeriodicityId;
   std::set<uint16_t> m_ueSrsConfigurationIndexSet;
   uint16_t m_lastAllocatedConfigurationIndex;
   bool m_reconfigureUes;
 
-  // Cell selection related attribute
+  /**
+   * The `QRxLevMin` attribute. One of information transmitted within the SIB1
+   * message, indicating the required minimum RSRP level that any UE must
+   * receive from this cell before it is allowed to camp to this cell.
+   */
   int8_t m_qRxLevMin;
-
-  // Handover related attributes
+  /**
+   * The `AdmitHandoverRequest` attribute. Whether to admit an X2 handover
+   * request from another eNB.
+   */
   bool m_admitHandoverRequest;
+  /**
+   * The `AdmitRrcConnectionRequest` attribute. Whether to admit a connection
+   * request from a UE.
+   */
   bool m_admitRrcConnectionRequest;
-
-  // UE measurements related attributes
+  /**
+   * The `RsrpFilterCoefficient` attribute. Determines the strength of
+   * smoothing effect induced by layer 3 filtering of RSRP in all attached UE.
+   * If equals to 0, no layer 3 filtering is applicable.
+   */
   uint8_t m_rsrpFilterCoefficient;
+  /**
+   * The `RsrqFilterCoefficient` attribute. Determines the strength of
+   * smoothing effect induced by layer 3 filtering of RSRQ in all attached UE.
+   * If equals to 0, no layer 3 filtering is applicable.
+   */
   uint8_t m_rsrqFilterCoefficient;
-
-  // timeouts
+  /**
+   * The `ConnectionRequestTimeoutDuration` attribute. 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.
+   */
   Time m_connectionRequestTimeoutDuration;
+  /**
+   * The `ConnectionSetupTimeoutDuration` attribute. After accepting connection
+   * request, if no RRC CONNECTION SETUP COMPLETE is received before this time,
+   * the UE context is destroyed. Must account for the UE's reception of RRC
+   * CONNECTION SETUP and transmission of RRC CONNECTION SETUP COMPLETE.
+   */
   Time m_connectionSetupTimeoutDuration;
+  /**
+   * The `ConnectionRejectedTimeoutDuration` attribute. Time to wait between
+   * sending a RRC CONNECTION REJECT and destroying the UE context.
+   */
   Time m_connectionRejectedTimeoutDuration;
+  /**
+   * The `HandoverJoiningTimeoutDuration` attribute. After accepting a handover
+   * request, if no RRC CONNECTION RECONFIGURATION COMPLETE 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 COMPLETE message.
+   */
   Time m_handoverJoiningTimeoutDuration;
+  /**
+   * The `HandoverLeavingTimeoutDuration` attribute. After issuing a Handover
+   * Command, if neither RRC CONNECTION RE-ESTABLISHMENT nor X2 UE Context
+   * Release has been previously received, the UE context is destroyed.
+   */
   Time m_handoverLeavingTimeoutDuration;
 
-  //             cellid    rnti
+  /**
+   * The `NewUeContext` trace source. Fired upon creation of a new UE context.
+   * Exporting cell ID and RNTI.
+   */
   TracedCallback<uint16_t, uint16_t> m_newUeContextTrace;
-  //             imsi      cellid    rnti
+  /**
+   * The `ConnectionEstablished` trace source. Fired upon successful RRC
+   * connection establishment. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionEstablishedTrace;
-  //             imsi      cellid    rnti
+  /**
+   * The `ConnectionReconfiguration` trace source. Fired upon RRC connection
+   * reconfiguration. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionReconfigurationTrace;
-  //             imsi      cellid    rnti     targetCellId
+  /**
+   * The `HandoverStart` trace source. Fired upon start of a handover
+   * procedure. Exporting IMSI, cell ID, RNTI, and target cell ID.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_handoverStartTrace;
-  //             imsi      cellid    rnti
+  /**
+   * The `HandoverEndOk` trace source. Fired upon successful termination of a
+   * handover procedure. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverEndOkTrace;
-
-  //             imsi      cellid    rnti
+  /**
+   * The `RecvMeasurementReport` trace source. Fired when measurement report is
+   * received. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t, LteRrcSap::MeasurementReport> m_recvMeasurementReportTrace;
 
-};
+}; // end of `class LteEnbRrc`
 
 
 } // namespace ns3
diff -Naur ns-3.21/src/lte/model/lte-ffr-algorithm.cc ns-3.22/src/lte/model/lte-ffr-algorithm.cc
--- ns-3.21/src/lte/model/lte-ffr-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ffr-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/boolean.h"
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteFfrAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFfrAlgorithm");
+
 static const int Type0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
diff -Naur ns-3.21/src/lte/model/lte-ffr-distributed-algorithm.cc ns-3.22/src/lte/model/lte-ffr-distributed-algorithm.cc
--- ns-3.21/src/lte/model/lte-ffr-distributed-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ffr-distributed-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "lte-ffr-distributed-algorithm.h"
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteFfrDistributedAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFfrDistributedAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteFfrDistributedAlgorithm);
 
 
diff -Naur ns-3.21/src/lte/model/lte-ffr-enhanced-algorithm.cc ns-3.22/src/lte/model/lte-ffr-enhanced-algorithm.cc
--- ns-3.21/src/lte/model/lte-ffr-enhanced-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ffr-enhanced-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include <ns3/double.h>
 #include <cfloat>
 
-NS_LOG_COMPONENT_DEFINE ("LteFfrEnhancedAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFfrEnhancedAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteFfrEnhancedAlgorithm);
 
 static const double SpectralEfficiencyForCqi[16] = {
diff -Naur ns-3.21/src/lte/model/lte-ffr-soft-algorithm.cc ns-3.22/src/lte/model/lte-ffr-soft-algorithm.cc
--- ns-3.21/src/lte/model/lte-ffr-soft-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ffr-soft-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include <ns3/log.h>
 #include "ns3/boolean.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteFfrSoftAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFfrSoftAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteFfrSoftAlgorithm);
 
 static const struct FfrSoftDownlinkDefaultConfiguration
diff -Naur ns-3.21/src/lte/model/lte-fr-hard-algorithm.cc ns-3.22/src/lte/model/lte-fr-hard-algorithm.cc
--- ns-3.21/src/lte/model/lte-fr-hard-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-fr-hard-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "lte-fr-hard-algorithm.h"
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteFrHardAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFrHardAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteFrHardAlgorithm);
 
 static const struct FrHardDownlinkDefaultConfiguration
diff -Naur ns-3.21/src/lte/model/lte-fr-no-op-algorithm.cc ns-3.22/src/lte/model/lte-fr-no-op-algorithm.cc
--- ns-3.21/src/lte/model/lte-fr-no-op-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-fr-no-op-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "lte-fr-no-op-algorithm.h"
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteFrNoOpAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFrNoOpAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteFrNoOpAlgorithm);
 
 
diff -Naur ns-3.21/src/lte/model/lte-fr-soft-algorithm.cc ns-3.22/src/lte/model/lte-fr-soft-algorithm.cc
--- ns-3.21/src/lte/model/lte-fr-soft-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-fr-soft-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include <ns3/log.h>
 #include "ns3/boolean.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteFrSoftAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFrSoftAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteFrSoftAlgorithm);
 
 static const struct FrSoftDownlinkDefaultConfiguration
diff -Naur ns-3.21/src/lte/model/lte-fr-strict-algorithm.cc ns-3.22/src/lte/model/lte-fr-strict-algorithm.cc
--- ns-3.21/src/lte/model/lte-fr-strict-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-fr-strict-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include <ns3/log.h>
 #include "ns3/boolean.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteFrStrictAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFrStrictAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteFrStrictAlgorithm);
 
 static const struct FrStrictDownlinkDefaultConfiguration
diff -Naur ns-3.21/src/lte/model/lte-handover-algorithm.cc ns-3.22/src/lte/model/lte-handover-algorithm.cc
--- ns-3.21/src/lte/model/lte-handover-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-handover-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "lte-handover-algorithm.h"
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteHandoverAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteHandoverAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteHandoverAlgorithm);
 
 
diff -Naur ns-3.21/src/lte/model/lte-harq-phy.cc ns-3.22/src/lte/model/lte-harq-phy.cc
--- ns-3.21/src/lte/model/lte-harq-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-harq-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include <ns3/log.h>
 #include <ns3/assert.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteHarqPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteHarqPhy");
+
 //NS_OBJECT_ENSURE_REGISTERED (LteHarqPhy)
 //  ;
 
diff -Naur ns-3.21/src/lte/model/lte-interference.cc ns-3.22/src/lte/model/lte-interference.cc
--- ns-3.21/src/lte/model/lte-interference.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-interference.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,9 @@
 #include <ns3/log.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("LteInterference");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteInterference");
 
 LteInterference::LteInterference ()
   : m_receiving (false),
diff -Naur ns-3.21/src/lte/model/lte-mi-error-model.cc ns-3.22/src/lte/model/lte-mi-error-model.cc
--- ns-3.21/src/lte/model/lte-mi-error-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-mi-error-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -42,10 +42,10 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("LteMiErrorModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteMiErrorModel");
+
   // global table of the effective code rates (ECR)s that have BLER performance curves
   static const double BlerCurvesEcrMap[38] = {
     // QPSK (M=2)
diff -Naur ns-3.21/src/lte/model/lte-net-device.cc ns-3.22/src/lte/model/lte-net-device.cc
--- ns-3.21/src/lte/model/lte-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,10 @@
 #include <ns3/ipv4-l3-protocol.h>
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED ( LteNetDevice);
 
 ////////////////////////////////
diff -Naur ns-3.21/src/lte/model/lte-pdcp.cc ns-3.22/src/lte/model/lte-pdcp.cc
--- ns-3.21/src/lte/model/lte-pdcp.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-pdcp.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,9 @@
 #include "ns3/lte-pdcp-sap.h"
 #include "ns3/lte-pdcp-tag.h"
 
-NS_LOG_COMPONENT_DEFINE ("LtePdcp");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LtePdcp");
 
 class LtePdcpSpecificLteRlcSapUser : public LteRlcSapUser
 {
@@ -88,10 +87,12 @@
     .SetParent<Object> ()
     .AddTraceSource ("TxPDU",
                      "PDU transmission notified to the RLC.",
-                     MakeTraceSourceAccessor (&LtePdcp::m_txPdu))
+                     MakeTraceSourceAccessor (&LtePdcp::m_txPdu),
+                     "ns3::LtePdcp::PduTxTracedCallback")
     .AddTraceSource ("RxPDU",
                      "PDU received.",
-                     MakeTraceSourceAccessor (&LtePdcp::m_rxPdu))
+                     MakeTraceSourceAccessor (&LtePdcp::m_rxPdu),
+                     "ns3::LtePdcp::PduRxTracedCallback")
     ;
   return tid;
 }
diff -Naur ns-3.21/src/lte/model/lte-pdcp.h ns-3.22/src/lte/model/lte-pdcp.h
--- ns-3.21/src/lte/model/lte-pdcp.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-pdcp.h	2015-02-05 15:46:22.000000000 -0800
@@ -111,6 +111,30 @@
    */
   void SetStatus (Status s);
 
+  /**
+   * TracedCallback for PDU transmission event.
+   *
+   * \param [in] rnti The C-RNTI identifying the UE.
+   * \param [in] lcid The logical channel id corresponding to
+   *             the sending RLC instance.
+   * \param [in] size Packet size.
+   */
+  typedef void (* PduTxTracedCallback)
+    (const uint16_t rnti, const uint8_t lcid, const uint32_t size);
+
+  /**
+   * TracedCallback signature for PDU receive event.
+   *
+   * \param [in] rnti The C-RNTI identifying the UE.
+   * \param [in] lcid The logical channel id corresponding to
+   *             the sending RLC instance.
+   * \param [in] size Packet size.
+   * \param [in] delay Delay since packet sent, in ns..
+   */
+  typedef void (* PduRxTracedCallback)
+    (const uint16_t rnti, const uint8_t lcid,
+     const uint32_t size, const uint64_t delay);
+
 protected:
   // Interface provided to upper RRC entity
   virtual void DoTransmitPdcpSdu (Ptr<Packet> p);
diff -Naur ns-3.21/src/lte/model/lte-pdcp-header.cc ns-3.22/src/lte/model/lte-pdcp-header.cc
--- ns-3.21/src/lte/model/lte-pdcp-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-pdcp-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 
 #include "ns3/lte-pdcp-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("LtePdcpHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LtePdcpHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (LtePdcpHeader);
 
 LtePdcpHeader::LtePdcpHeader ()
diff -Naur ns-3.21/src/lte/model/lte-phy.cc ns-3.22/src/lte/model/lte-phy.cc
--- ns-3.21/src/lte/model/lte-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,9 @@
 #include "lte-phy.h"
 #include "lte-net-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("LtePhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LtePhy");
 
 NS_OBJECT_ENSURE_REGISTERED (LtePhy);
 
diff -Naur ns-3.21/src/lte/model/lte-phy.h ns-3.22/src/lte/model/lte-phy.h
--- ns-3.21/src/lte/model/lte-phy.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-phy.h	2015-02-05 15:46:22.000000000 -0800
@@ -212,29 +212,86 @@
 
 
 protected:
+  /// Pointer to the NetDevice where this PHY layer is attached.
   Ptr<LteNetDevice> m_netDevice;
 
+  /**
+   * The downlink LteSpectrumPhy associated to this LtePhy. Also available as
+   * attribute `DlSpectrumPhy` in the child classes LteEnbPhy and LteUePhy.
+   */
   Ptr<LteSpectrumPhy> m_downlinkSpectrumPhy;
+  /**
+   * The uplink LteSpectrumPhy associated to this LtePhy. Also available as
+   * attribute `UlSpectrumPhy` in the child classes LteEnbPhy and LteUePhy.
+   */
   Ptr<LteSpectrumPhy> m_uplinkSpectrumPhy;
 
+  /**
+   * Transmission power in dBm. Also available as attribute `TxPower` in the
+   * child classes LteEnbPhy and LteUePhy.
+   */
   double m_txPower;
+  /**
+   * Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the
+   * receiver. Also available as attribute `NoiseFigure` in the child classes
+   * LteEnbPhy and LteUePhy.
+   *
+   * According to [Wikipedia](http://en.wikipedia.org/wiki/Noise_figure), this
+   * is "the difference in decibels (dB) between the noise output of the actual
+   * receiver to the noise output of an ideal receiver with the same overall
+   * gain and bandwidth when the receivers are connected to sources at the
+   * standard noise temperature T0." In this model, we consider T0 = 290K.
+   */
   double m_noiseFigure;
 
+  /// Transmission time interval.
   double m_tti;
+  /**
+   * The UL bandwidth in number of PRBs.
+   * Specified by the upper layer through CPHY SAP.
+   */
   uint8_t m_ulBandwidth;
+  /**
+   * The DL bandwidth in number of PRBs.
+   * Specified by the upper layer through CPHY SAP.
+   */
   uint8_t m_dlBandwidth;
+  /// The RB gruop size according to the bandwidth.
   uint8_t m_rbgSize;
-
+  /**
+   * The downlink carrier frequency.
+   * Specified by the upper layer through CPHY SAP.
+   */
   uint16_t m_dlEarfcn;
+  /**
+   * The uplink carrier frequency.
+   * Specified by the upper layer through CPHY SAP.
+   */
   uint16_t m_ulEarfcn;
 
+  /// A queue of packet bursts to be sent.
   std::vector< Ptr<PacketBurst> > m_packetBurstQueue;
+  /// A queue of control messages to be sent.
   std::vector< std::list<Ptr<LteControlMessage> > > m_controlMessagesQueue;
-  uint8_t m_macChTtiDelay; // delay between MAC and channel layer in terms of TTIs
-
+  /**
+   * Delay between MAC and channel layer in terms of TTIs. It is the delay that
+   * occurs between a scheduling decision in the MAC and the actual start of
+   * the transmission by the PHY. This is intended to be used to model the
+   * latency of real PHY and MAC implementations.
+   *
+   * In LteEnbPhy, it is 2 TTIs by default and can be configured through the
+   * `MacToChannelDelay` attribute. In LteUePhy, it is 4 TTIs.
+   */
+  uint8_t m_macChTtiDelay;
+
+  /**
+   * Cell identifier. In LteEnbPhy, this corresponds to the ID of the cell
+   * which hosts this PHY layer. In LteUePhy, this corresponds to the ID of the
+   * eNodeB which this PHY layer is synchronized with.
+   */
   uint16_t m_cellId;
 
-};
+}; // end of `class LtePhy`
 
 
 }
diff -Naur ns-3.21/src/lte/model/lte-rlc-am.cc ns-3.22/src/lte/model/lte-rlc-am.cc
--- ns-3.21/src/lte/model/lte-rlc-am.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rlc-am.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/lte-rlc-sdu-status-tag.h"
 #include "ns3/lte-rlc-tag.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcAm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcAm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteRlcAm);
 
 LteRlcAm::LteRlcAm ()
diff -Naur ns-3.21/src/lte/model/lte-rlc-am-header.cc ns-3.22/src/lte/model/lte-rlc-am-header.cc
--- ns-3.21/src/lte/model/lte-rlc-am-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rlc-am-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 
 #include "ns3/lte-rlc-am-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcAmHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcAmHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (LteRlcAmHeader);
 
 LteRlcAmHeader::LteRlcAmHeader ()
diff -Naur ns-3.21/src/lte/model/lte-rlc.cc ns-3.22/src/lte/model/lte-rlc.cc
--- ns-3.21/src/lte/model/lte-rlc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rlc.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,9 @@
 #include "ns3/lte-rlc-sap.h"
 // #include "ff-mac-sched-sap.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRlc");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteRlc");
 
 
 ///////////////////////////////////////
@@ -105,10 +104,12 @@
     .SetParent<Object> ()
     .AddTraceSource ("TxPDU",
                      "PDU transmission notified to the MAC.",
-                     MakeTraceSourceAccessor (&LteRlc::m_txPdu))
+                     MakeTraceSourceAccessor (&LteRlc::m_txPdu),
+                     "ns3::LteRlc::NotifyTxTracedCallback")
     .AddTraceSource ("RxPDU",
                      "PDU received.",
-                     MakeTraceSourceAccessor (&LteRlc::m_rxPdu))
+                     MakeTraceSourceAccessor (&LteRlc::m_rxPdu),
+                     "ns3::LteRlc::ReceiveTracedCallback")
     ;
   return tid;
 }
diff -Naur ns-3.21/src/lte/model/lte-rlc.h ns-3.22/src/lte/model/lte-rlc.h
--- ns-3.21/src/lte/model/lte-rlc.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rlc.h	2015-02-05 15:46:22.000000000 -0800
@@ -100,6 +100,29 @@
   LteMacSapUser* GetLteMacSapUser ();
 
 
+  /**
+   * TracedCallback signature for NotifyTxOpportunity events.
+   *
+   * \param [in] rnti C-RNTI scheduled.
+   * \param [in] lcid The logical channel id corresponding to
+   *             the sending RLC instance.
+   * \param [in] bytes The number of bytes to transmit
+   */
+  typedef void (* NotifyTxTracedCallback)
+    (const uint16_t rnti, const uint8_t lcid, const uint32_t bytes);
+
+  /**
+   * TracedCallback signature for
+   *
+   * \param [in] rnti C-RNTI scheduled.
+   * \param [in] lcid The logical channel id corresponding to
+   *             the sending RLC instance.
+   * \param [in] bytes The packet size.
+   * \param [in] delay Delay since sender timestamp, in ns.
+   */
+  typedef void (* ReceiveTracedCallback)
+    (const uint16_t rnti, const uint8_t lcid,
+     const uint32_t bytes, const uint64_t delay);
 
   /// \todo MRE What is the sense to duplicate all the interfaces here???
   // NB to avoid the use of multiple inheritance
diff -Naur ns-3.21/src/lte/model/lte-rlc-header.cc ns-3.22/src/lte/model/lte-rlc-header.cc
--- ns-3.21/src/lte/model/lte-rlc-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rlc-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 
 #include "ns3/lte-rlc-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (LteRlcHeader);
 
 LteRlcHeader::LteRlcHeader ()
diff -Naur ns-3.21/src/lte/model/lte-rlc-tm.cc ns-3.22/src/lte/model/lte-rlc-tm.cc
--- ns-3.21/src/lte/model/lte-rlc-tm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rlc-tm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include "ns3/lte-rlc-tm.h"
 #include "ns3/lte-rlc-tag.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcTm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcTm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteRlcTm);
 
 LteRlcTm::LteRlcTm ()
diff -Naur ns-3.21/src/lte/model/lte-rlc-um.cc ns-3.22/src/lte/model/lte-rlc-um.cc
--- ns-3.21/src/lte/model/lte-rlc-um.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rlc-um.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/lte-rlc-sdu-status-tag.h"
 #include "ns3/lte-rlc-tag.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcUm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcUm");
+
 NS_OBJECT_ENSURE_REGISTERED (LteRlcUm);
 
 LteRlcUm::LteRlcUm ()
diff -Naur ns-3.21/src/lte/model/lte-rrc-header.cc ns-3.22/src/lte/model/lte-rrc-header.cc
--- ns-3.21/src/lte/model/lte-rrc-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rrc-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,10 @@
 #define MAX_CELL_MEAS 32
 #define MAX_CELL_REPORT 8
 
-NS_LOG_COMPONENT_DEFINE ("RrcHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RrcHeader");
+
 //////////////////// RrcAsn1Header class ///////////////////////////////
 RrcAsn1Header::RrcAsn1Header ()
 {
diff -Naur ns-3.21/src/lte/model/lte-rrc-protocol-ideal.cc ns-3.22/src/lte/model/lte-rrc-protocol-ideal.cc
--- ns-3.21/src/lte/model/lte-rrc-protocol-ideal.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rrc-protocol-ideal.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,11 +31,9 @@
 #include "lte-enb-net-device.h"
 #include "lte-ue-net-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRrcProtocolIdeal");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteRrcProtocolIdeal");
 
 static const Time RRC_IDEAL_MSG_DELAY = MilliSeconds (0);
 
diff -Naur ns-3.21/src/lte/model/lte-rrc-protocol-real.cc ns-3.22/src/lte/model/lte-rrc-protocol-real.cc
--- ns-3.21/src/lte/model/lte-rrc-protocol-real.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-rrc-protocol-real.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,11 +32,9 @@
 #include "lte-enb-net-device.h"
 #include "lte-ue-net-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRrcProtocolReal");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteRrcProtocolReal");
 
 const Time RRC_REAL_MSG_DELAY = MilliSeconds (0); 
 
diff -Naur ns-3.21/src/lte/model/lte-spectrum-phy.cc ns-3.22/src/lte/model/lte-spectrum-phy.cc
--- ns-3.21/src/lte/model/lte-spectrum-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-spectrum-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,10 +39,9 @@
 #include <ns3/double.h>
 #include <ns3/config.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteSpectrumPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteSpectrumPhy");
 
 
 // duration of SRS portion of UL subframe  
@@ -190,19 +189,24 @@
     .SetParent<SpectrumPhy> ()
     .AddTraceSource ("TxStart",
                      "Trace fired when a new transmission is started",
-                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyTxStartTrace))
+                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyTxStartTrace),
+                     "ns3::PacketBurst::TracedCallback")
     .AddTraceSource ("TxEnd",
                      "Trace fired when a previosuly started transmission is finished",
-                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyTxEndTrace))
+                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyTxEndTrace),
+                     "ns3::PacketBurst::TracedCallback")
     .AddTraceSource ("RxStart",
                      "Trace fired when the start of a signal is detected",
-                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyRxStartTrace))
+                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyRxStartTrace),
+                     "ns3::PacketBurst::TracedCallback")
     .AddTraceSource ("RxEndOk",
                      "Trace fired when a previosuly started RX terminates successfully",
-                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyRxEndOkTrace))
+                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyRxEndOkTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("RxEndError",
                      "Trace fired when a previosuly started RX terminates with an error",
-                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyRxEndErrorTrace))
+                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_phyRxEndErrorTrace),
+                     "ns3::Packet::TracedCallback")
     .AddAttribute ("DataErrorModelEnabled",
                     "Activate/Deactivate the error model of data (TBs of PDSCH and PUSCH) [by default is active].",
                     BooleanValue (true),
@@ -215,10 +219,12 @@
                     MakeBooleanChecker ())
     .AddTraceSource ("DlPhyReception",
                      "DL reception PHY layer statistics.",
-                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_dlPhyReception))
+                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_dlPhyReception),
+                     "ns3::PhyReceptionStatParameters::TracedCallback")
     .AddTraceSource ("UlPhyReception",
                      "DL reception PHY layer statistics.",
-                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_ulPhyReception))
+                     MakeTraceSourceAccessor (&LteSpectrumPhy::m_ulPhyReception),
+                     "ns3::PhyReceptionStatParameters::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/lte/model/lte-spectrum-signal-parameters.cc ns-3.22/src/lte/model/lte-spectrum-signal-parameters.cc
--- ns-3.21/src/lte/model/lte-spectrum-signal-parameters.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-spectrum-signal-parameters.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include <ns3/lte-control-messages.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("LteSpectrumSignalParameters");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteSpectrumSignalParameters");
+
 LteSpectrumSignalParameters::LteSpectrumSignalParameters ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/lte/model/lte-spectrum-value-helper.cc ns-3.22/src/lte/model/lte-spectrum-value-helper.cc
--- ns-3.21/src/lte/model/lte-spectrum-value-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-spectrum-value-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -45,10 +45,10 @@
 
 }
 
-NS_LOG_COMPONENT_DEFINE ("LteSpectrumValueHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteSpectrumValueHelper");
+
 /**
  * Table 5.7.3-1 "E-UTRA channel numbers" from 3GPP TS 36.101
  * The table was converted to C syntax doing a cut & paste from TS 36.101 and running the following filter:
diff -Naur ns-3.21/src/lte/model/lte-ue-cphy-sap.h ns-3.22/src/lte/model/lte-ue-cphy-sap.h
--- ns-3.21/src/lte/model/lte-ue-cphy-sap.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-cphy-sap.h	2015-02-05 15:46:22.000000000 -0800
@@ -139,6 +139,11 @@
    */
   virtual void SetSrsConfigurationIndex (uint16_t srcCi) = 0;
 
+  /**
+   * \param pa the P_A value
+   */
+  virtual void SetPa (double pa) = 0;
+
 };
 
 
@@ -231,6 +236,7 @@
   virtual void SetRnti (uint16_t rnti);
   virtual void SetTransmissionMode (uint8_t txMode);
   virtual void SetSrsConfigurationIndex (uint16_t srcCi);
+  virtual void SetPa (double pa);
 
 private:
   MemberLteUeCphySapProvider ();
@@ -318,6 +324,12 @@
   m_owner->DoSetSrsConfigurationIndex (srcCi);
 }
 
+template <class C>
+void
+MemberLteUeCphySapProvider<C>::SetPa (double pa)
+{
+  m_owner->DoSetPa (pa);
+}
 
 
 /**
diff -Naur ns-3.21/src/lte/model/lte-ue-mac.cc ns-3.22/src/lte/model/lte-ue-mac.cc
--- ns-3.21/src/lte/model/lte-ue-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,7 +25,7 @@
 #include <ns3/pointer.h>
 #include <ns3/packet.h>
 #include <ns3/packet-burst.h>
-#include <ns3/random-variable.h>
+#include <ns3/random-variable-stream.h>
 
 #include "lte-ue-mac.h"
 #include "lte-ue-net-device.h"
@@ -37,10 +37,10 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("LteUeMac");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteUeMac");
+
 NS_OBJECT_ENSURE_REGISTERED (LteUeMac);
 
 
@@ -297,7 +297,7 @@
   
   
   it = m_ulBsrReceived.find (params.lcid);
-  if (it!=m_ulBsrReceived.end ())
+  if (it != m_ulBsrReceived.end ())
     {
       // update entry
       (*it).second = params;
@@ -543,8 +543,14 @@
     {
       // packet is for the current user
       std::map <uint8_t, LcInfo>::const_iterator it = m_lcInfoMap.find (tag.GetLcid ());
-      NS_ASSERT_MSG (it != m_lcInfoMap.end (), "received packet with unknown lcid");
-      it->second.macSapUser->ReceivePdu (p);
+      if (it != m_lcInfoMap.end ())
+        {
+          it->second.macSapUser->ReceivePdu (p);
+        }
+      else
+        {
+          NS_LOG_WARN ("received packet with unknown lcid " << (uint32_t) tag.GetLcid ());
+        }
     }
 }
 
@@ -557,7 +563,7 @@
     {
       Ptr<UlDciLteControlMessage> msg2 = DynamicCast<UlDciLteControlMessage> (msg);
       UlDciListElement_s dci = msg2->GetDci ();
-      if (dci.m_ndi==1)
+      if (dci.m_ndi == 1)
         {
           // New transmission -> emtpy pkt buffer queue (for deleting eventual pkts not acked )
           Ptr<PacketBurst> pb = CreateObject <PacketBurst> ();
@@ -571,11 +577,11 @@
               if (((*itBsr).second.statusPduSize > 0) || ((*itBsr).second.retxQueueSize > 0) || ((*itBsr).second.txQueueSize > 0))
                 {
                   activeLcs++;
-                  if (((*itBsr).second.statusPduSize!=0)&&((*itBsr).second.statusPduSize < statusPduMinSize))
+                  if (((*itBsr).second.statusPduSize != 0)&&((*itBsr).second.statusPduSize < statusPduMinSize))
                     {
                       statusPduMinSize = (*itBsr).second.statusPduSize;
                     }
-                  if (((*itBsr).second.statusPduSize!=0)&&(statusPduMinSize == 0))
+                  if (((*itBsr).second.statusPduSize != 0)&&(statusPduMinSize == 0))
                     {
                       statusPduMinSize = (*itBsr).second.statusPduSize;
                     }
@@ -600,14 +606,14 @@
                 }
             }
           NS_LOG_LOGIC (this << " UE " << m_rnti << ": UL-CQI notified TxOpportunity of " << dci.m_tbSize << " => " << bytesPerActiveLc << " bytes per active LC" << " statusPduMinSize " << statusPduMinSize);
-          for (it = m_lcInfoMap.begin (); it!=m_lcInfoMap.end (); it++)
+          for (it = m_lcInfoMap.begin (); it != m_lcInfoMap.end (); it++)
             {
               itBsr = m_ulBsrReceived.find ((*it).first);
               NS_LOG_DEBUG (this << " Processing LC " << (uint32_t)(*it).first << " bytesPerActiveLc " << bytesPerActiveLc);
-              if ( (itBsr!=m_ulBsrReceived.end ()) &&
-                  ( ((*itBsr).second.statusPduSize > 0) ||
-                  ((*itBsr).second.retxQueueSize > 0) ||
-                  ((*itBsr).second.txQueueSize > 0)) )
+              if ( (itBsr != m_ulBsrReceived.end ())
+                   && ( ((*itBsr).second.statusPduSize > 0)
+                        || ((*itBsr).second.retxQueueSize > 0)
+                        || ((*itBsr).second.txQueueSize > 0)) )
                 {
                   if ((statusPduPriority) && ((*itBsr).second.statusPduSize == statusPduMinSize))
                     {
@@ -629,15 +635,15 @@
                         }
                       else
                         {
-                          if ((*itBsr).second.statusPduSize>bytesForThisLc)
+                          if ((*itBsr).second.statusPduSize > bytesForThisLc)
                             {
                               NS_FATAL_ERROR ("Insufficient Tx Opportunity for sending a status message");
                             }
                         }
                         
-                      if ((bytesForThisLc > 7) && // 7 is the min TxOpportunity useful for Rlc
-                         (((*itBsr).second.retxQueueSize > 0) ||
-                         ((*itBsr).second.txQueueSize > 0)))
+                      if ((bytesForThisLc > 7)    // 7 is the min TxOpportunity useful for Rlc
+                          && (((*itBsr).second.retxQueueSize > 0)
+                              || ((*itBsr).second.txQueueSize > 0)))
                         {
                           if ((*itBsr).second.retxQueueSize > 0)
                             {
@@ -771,7 +777,7 @@
   m_frameNo = frameNo;
   m_subframeNo = subframeNo;
   RefreshHarqProcessesPacketBuffer ();
-  if ((Simulator::Now () >= m_bsrLast + m_bsrPeriodicity) && (m_freshUlBsr==true))
+  if ((Simulator::Now () >= m_bsrLast + m_bsrPeriodicity) && (m_freshUlBsr == true))
     {
       SendReportBufferStatus ();
       m_bsrLast = Simulator::Now ();
diff -Naur ns-3.21/src/lte/model/lte-ue-net-device.cc ns-3.22/src/lte/model/lte-ue-net-device.cc
--- ns-3.21/src/lte/model/lte-ue-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -44,10 +44,10 @@
 #include <ns3/log.h>
 #include "epc-tft.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteUeNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteUeNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED ( LteUeNetDevice);
 
 
diff -Naur ns-3.21/src/lte/model/lte-ue-phy.cc ns-3.22/src/lte/model/lte-ue-phy.cc
--- ns-3.21/src/lte/model/lte-ue-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -41,21 +41,25 @@
 #include <ns3/boolean.h>
 #include <ns3/lte-ue-power-control.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteUePhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteUePhy");
 
 
 
-// duration of data portion of UL subframe
-// = TTI - 1 symbol for SRS - 1ns as margin to avoid overlapping simulator events
-// (symbol duration in nanoseconds = TTI / 14 (rounded))
-// in other words, duration of data portion of UL subframe = TTI*(13/14) -1ns
+/**
+ * Duration of the data portion of a UL subframe.
+ * Equals to "TTI length - 1 symbol length for SRS - margin".
+ * The margin is 1 nanosecond and is intended to avoid overlapping simulator
+ * events. The duration of one symbol is TTI/14 (rounded). In other words,
+ * duration of data portion of UL subframe = 1 ms * (13/14) - 1 ns.
+ */
 static const Time UL_DATA_DURATION = NanoSeconds (1e6 - 71429 - 1); 
 
-// delay from subframe start to transmission of SRS 
-// = TTI - 1 symbol for SRS 
+/**
+ * Delay from subframe start to transmission of SRS.
+ * Equals to "TTI length - 1 symbol for SRS".
+ */
 static const Time UL_SRS_DELAY_FROM_SUBFRAME_START = NanoSeconds (1e6 - 71429); 
 
 
@@ -108,12 +112,17 @@
 // LteUePhy methods
 ////////////////////////////////////////
 
+/// Map each of UE PHY states to its string representation.
 static const std::string g_uePhyStateName[LteUePhy::NUM_STATES] =
 {
   "CELL_SEARCH",
   "SYNCHRONIZED"
 };
 
+/**
+ * \param s The UE PHY state.
+ * \return The string representation of the given state.
+ */
 static inline const std::string & ToString (LteUePhy::State s)
 {
   return g_uePhyStateName[s];
@@ -237,7 +246,8 @@
                    MakeDoubleChecker<double> ())
     .AddTraceSource ("ReportCurrentCellRsrpSinr",
                      "RSRP and SINR statistics.",
-                     MakeTraceSourceAccessor (&LteUePhy::m_reportCurrentCellRsrpSinrTrace))
+                     MakeTraceSourceAccessor (&LteUePhy::m_reportCurrentCellRsrpSinrTrace),
+                     "ns3::LteUePhy::RsrpSinrTracedCallback")
     .AddAttribute ("RsrpSinrSamplePeriod",
                    "The sampling period for reporting RSRP-SINR stats (default value 1)",
                    UintegerValue (1),
@@ -245,7 +255,8 @@
                    MakeUintegerChecker<uint16_t> ())
     .AddTraceSource ("UlPhyTransmission",
                      "DL transmission PHY layer statistics.",
-                     MakeTraceSourceAccessor (&LteUePhy::m_ulPhyTransmission))
+                     MakeTraceSourceAccessor (&LteUePhy::m_ulPhyTransmission),
+                     "ns3::PhyTransmissionStatParameters::TracedCallback")
     .AddAttribute ("DlSpectrumPhy",
                    "The downlink LteSpectrumPhy associated to this LtePhy",
                    TypeId::ATTR_GET,
@@ -264,18 +275,21 @@
                    MakeDoubleAccessor (&LteUePhy::m_pssReceptionThreshold),
                    MakeDoubleChecker<double> ())
     .AddAttribute ("UeMeasurementsFilterPeriod",
-                   "Time period for reporting UE measurements (default 200 ms.) ",
+                   "Time period for reporting UE measurements, i.e., the"
+                   "length of layer-1 filtering.",
                    TimeValue (MilliSeconds (200)),
                    MakeTimeAccessor (&LteUePhy::m_ueMeasurementsFilterPeriod),
                    MakeTimeChecker ())
     .AddTraceSource ("ReportUeMeasurements",
                      "Report UE measurements RSRP (dBm) and RSRQ (dB).",
-                     MakeTraceSourceAccessor (&LteUePhy::m_reportUeMeasurements))
+                     MakeTraceSourceAccessor (&LteUePhy::m_reportUeMeasurements),
+                     "ns3::LteUePhy::RsrpRsrqTracedCallback")
     .AddTraceSource ("StateTransition",
                      "Trace fired upon every UE PHY state transition",
-                     MakeTraceSourceAccessor (&LteUePhy::m_stateTransitionTrace))
+                     MakeTraceSourceAccessor (&LteUePhy::m_stateTransitionTrace),
+                     "ns3::LteUePhy::StateTracedCallback")
     .AddAttribute ("EnableUplinkPowerControl",
-                   "If true Uplink Power Control will be enabled",
+                   "If true, Uplink Power Control will be enabled.",
                    BooleanValue (true),
                    MakeBooleanAccessor (&LteUePhy::m_enableUplinkPowerControl),
                    MakeBooleanChecker ())
@@ -438,14 +452,14 @@
 LteUePhy::GenerateCtrlCqiReport (const SpectrumValue& sinr)
 {
   NS_LOG_FUNCTION (this);
+  
+  GenerateCqiRsrpRsrq (sinr);
+}
 
-  if (m_dataInterferencePowerUpdated)
-    {
-      SpectrumValue mixedSinr = m_rsReceivedPower / m_dataInterferencePower;
-      GenerateMixedCqiReport (mixedSinr);
-      m_dataInterferencePowerUpdated = false;
-      return;
-    }
+void
+LteUePhy::GenerateCqiRsrpRsrq (const SpectrumValue& sinr)
+{
+  NS_LOG_FUNCTION (this << sinr);
 
   NS_ASSERT (m_state != CELL_SEARCH);
   NS_ASSERT (m_cellId > 0);
@@ -519,7 +533,7 @@
       while (itPss != m_pssList.end ())
         {
           uint16_t rbNum = 0;
-          double rsrqSum = 0.0;
+          double rssiSum = 0.0;
 
           Values::const_iterator itIntN = m_rsInterferencePower.ConstValuesBegin ();
           Values::const_iterator itPj = m_rsReceivedPower.ConstValuesBegin ();
@@ -529,13 +543,13 @@
             {
               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));
+              double interfPlusNoisePowerTxW = ((*itIntN) * 180000.0) / 12.0;
+              double signalPowerTxW = ((*itPj) * 180000.0) / 12.0;
+              rssiSum += (2 * (interfPlusNoisePowerTxW + signalPowerTxW));
             }
 
           NS_ASSERT (rbNum == (*itPss).nRB);
-          double rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rsrqSum);
+          double rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rssiSum);
 
           if (rsrq_dB > m_pssReceptionThreshold)
             {
@@ -572,114 +586,45 @@
 
   NS_ASSERT (m_state != CELL_SEARCH);
   NS_ASSERT (m_cellId > 0);
-
-  if (m_dlConfigured && m_ulConfigured && (m_rnti > 0))
+  
+  SpectrumValue mixedSinr = (m_rsReceivedPower * m_paLinear);
+  if (m_dataInterferencePowerUpdated)
     {
-      // check periodic wideband CQI
-      if (Simulator::Now () > m_p10CqiLast + m_p10CqiPeriocity)
-        {
-          Ptr<LteUeNetDevice> thisDevice = GetDevice ()->GetObject<LteUeNetDevice> ();
-          Ptr<DlCqiLteControlMessage> msg = CreateDlCqiFeedbackMessage (sinr);
-          if (msg)
-            {
-              DoSendLteControlMessage (msg);
-            }
-          m_p10CqiLast = Simulator::Now ();
-        }
-      // check aperiodic high-layer configured subband CQI
-      if  (Simulator::Now () > m_a30CqiLast + m_a30CqiPeriocity)
-        {
-          Ptr<LteUeNetDevice> thisDevice = GetDevice ()->GetObject<LteUeNetDevice> ();
-          Ptr<DlCqiLteControlMessage> msg = CreateDlCqiFeedbackMessage (sinr);
-          if (msg)
-            {
-              DoSendLteControlMessage (msg);
-            }
-          m_a30CqiLast = Simulator::Now ();
-        }
+      // we have a measurement of interf + noise for the denominator
+      // of SINR = S/(I+N)
+      mixedSinr /= m_dataInterferencePower;
+      m_dataInterferencePowerUpdated = false;
+      NS_LOG_LOGIC ("data interf measurement available, SINR = " << mixedSinr);
     }
-
-  // Generate PHY trace
-  m_rsrpSinrSampleCounter++;
-  if (m_rsrpSinrSampleCounter==m_rsrpSinrSamplePeriod)
+  else
     {
-      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;
+      // we did not see any interference on data, so interference is
+      // there and we have only noise at the denominator of SINR
+      mixedSinr /= (*m_noisePsd);
+      NS_LOG_LOGIC ("no data interf measurement available, SINR = " << mixedSinr);
     }
 
-  if (m_pssReceived)
+  /*
+   * some RBs are not used in PDSCH and their SINR is very high
+   * for example with bandwidth 25, last RB is not used
+   * it can make avgSinr value very high, what is incorrect
+   */
+  uint32_t rbgSize = GetRbgSize ();
+  uint32_t modulo = m_dlBandwidth % rbgSize;
+  double avgMixedSinr = 0;
+  uint32_t usedRbgNum = 0;
+  for(uint32_t i = 0; i < (m_dlBandwidth-1-modulo); i++) 
     {
-      // measure instantaneous RSRQ now
-      NS_ASSERT_MSG (m_rsInterferencePowerUpdated, " RS interference power info obsolete");
-
-      std::list <PssElement>::iterator itPss = m_pssList.begin ();
-      while (itPss != m_pssList.end ())
-        {
-          uint16_t rbNum = 0;
-          double rsrqSum = 0.0;
-
-          Values::const_iterator itIntN = m_rsInterferencePower.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 rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rsrqSum);
-
-          if (rsrq_dB > m_pssReceptionThreshold)
-            {
-              NS_LOG_INFO (this << " PSS RNTI " << m_rnti << " cellId " << m_cellId
-                                << " has RSRQ " << rsrq_dB << " and RBnum " << rbNum);
-              // store measurements
-              std::map <uint16_t, UeMeasurementsElement>::iterator itMeasMap;
-              itMeasMap = m_ueMeasurementsMap.find ((*itPss).cellId);
-              NS_ASSERT (itMeasMap != m_ueMeasurementsMap.end ());
-              (*itMeasMap).second.rsrqSum += rsrq_dB;
-              (*itMeasMap).second.rsrqNum++;
-            }
-
-          itPss++;
-
-        }         // end of while (itPss != m_pssList.end ())
-
-      m_pssList.clear ();
-
-    }     // end of if (m_pssReceived)
+      usedRbgNum++;
+      avgMixedSinr+=mixedSinr[i];
+    }
+  avgMixedSinr = avgMixedSinr/usedRbgNum;
+  for(uint32_t i = 0; i < modulo; i++) 
+    {
+      mixedSinr[m_dlBandwidth-1-i] = avgMixedSinr;
+    }
 
+  GenerateCqiRsrpRsrq (mixedSinr);
 }
 
 void
@@ -1229,6 +1174,7 @@
   m_rsrpSinrSampleCounter = 0;
   m_p10CqiLast = Simulator::Now ();
   m_a30CqiLast = Simulator::Now ();
+  m_paLinear = 1;
 
   m_packetBurstQueue.clear ();
   m_controlMessagesQueue.clear ();
@@ -1312,8 +1258,8 @@
             }
         }
 
-      Ptr<SpectrumValue> noisePsd = LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (m_dlEarfcn, m_dlBandwidth, m_noiseFigure);
-      m_downlinkSpectrumPhy->SetNoisePowerSpectralDensity (noisePsd);
+      m_noisePsd = LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (m_dlEarfcn, m_dlBandwidth, m_noiseFigure);
+      m_downlinkSpectrumPhy->SetNoisePowerSpectralDensity (m_noisePsd);
       m_downlinkSpectrumPhy->GetChannel ()->AddRx (m_downlinkSpectrumPhy);
     }
   m_dlConfigured = true;
@@ -1367,6 +1313,12 @@
   NS_LOG_DEBUG (this << " UE SRS P " << m_srsPeriodicity << " RNTI " << m_rnti << " offset " << m_srsSubframeOffset << " cellId " << m_cellId << " CI " << srcCi);
 }
 
+void
+LteUePhy::DoSetPa (double pa)
+{
+  NS_LOG_FUNCTION (this << pa);
+  m_paLinear = pow (10,(pa/10));
+}
 
 void 
 LteUePhy::SetTxMode1Gain (double gain)
diff -Naur ns-3.21/src/lte/model/lte-ue-phy.h ns-3.22/src/lte/model/lte-ue-phy.h
--- ns-3.21/src/lte/model/lte-ue-phy.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-phy.h	2015-02-05 15:46:22.000000000 -0800
@@ -200,7 +200,6 @@
   virtual void ReceivePss (uint16_t cellId, Ptr<SpectrumValue> p);
 
 
-
   /**
    * \brief PhySpectrum received a new PHY-PDU
    */
@@ -236,7 +235,42 @@
    */
   State GetState () const;
 
+  /**
+   * TracedCallback signature for state transition events.
+   *
+   * \param [in] cellId
+   * \param [in] rnti
+   * \param [in] oldState
+   * \param [in] newState
+   */
+  typedef void (* StateTracedCallback)
+    (const uint16_t cellId, const uint16_t rnti,
+     const State oldState, const State newState);
 
+  /**
+   * TracedCallback signature for cell RSRP and SINR report.
+   *
+   * \param [in] cellId
+   * \param [in] rnti
+   * \param [in] rsrp
+   * \param [in] sinr
+   */
+  typedef void (* RsrpSinrTracedCallback)
+    (const uint16_t cellId, const uint16_t rnti,
+     const double rsrp, const double sinr);
+
+  /**
+   * TracedCallback signature for cell RSRP and RSRQ.
+   *
+   * \param [in] rnti
+   * \param [in] cellId
+   * \param [in] rsrp
+   * \param [in] rsrq
+   * \param [in] isServingCell
+   */
+  typedef void (* RsrpRsrqTracedCallback)
+    (const uint16_t rnti, const uint16_t cellId,
+     const double rsrp, const double rsrq, const bool isServingCell);
 
 private:
 
@@ -251,6 +285,16 @@
 
   void QueueSubChannelsForTransmission (std::vector <int> rbMap);
 
+
+  /** 
+   * internal method that takes care of generating CQI reports,
+   * calculating the RSRP and RSRQ metrics, and generating RSRP+SINR traces
+   * 
+   * \param sinr 
+   */
+  void GenerateCqiRsrpRsrq (const SpectrumValue& sinr);
+
+
   /**
    * \brief Layer-1 filtering of RSRP and RSRQ measurements and reporting to
    *        the RRC entity.
@@ -260,6 +304,10 @@
    */
   void ReportUeMeasurements ();
 
+  /**
+   * Switch the UE PHY to the given state.
+   * \param s the destination state
+   */
   void SwitchToState (State s);
 
   // UE CPHY SAP methods
@@ -273,13 +321,16 @@
   void DoSetRnti (uint16_t rnti);
   void DoSetTransmissionMode (uint8_t txMode);
   void DoSetSrsConfigurationIndex (uint16_t srcCi);
+  void DoSetPa (double pa);
 
   // UE PHY SAP methods 
   virtual void DoSendMacPdu (Ptr<Packet> p);
   virtual void DoSendLteControlMessage (Ptr<LteControlMessage> msg);
   virtual void DoSendRachPreamble (uint32_t prachId, uint32_t raRnti);
 
+  /// A list of sub channels to use in TX.
   std::vector <int> m_subChannelsForTransmission;
+  /// A list of sub channels to use in RX.
   std::vector <int> m_subChannelsForReception;
 
   std::vector< std::vector <int> > m_subChannelsForTransmissionQueue;
@@ -287,14 +338,23 @@
 
   Ptr<LteAmc> m_amc;
 
+  /**
+   * The `EnableUplinkPowerControl` attribute. If true, Uplink Power Control
+   * will be enabled.
+   */
   bool m_enableUplinkPowerControl;
+  /// Pointer to UE Uplink Power Control entity.
   Ptr<LteUePowerControl> m_powerControl;
 
-  Time m_p10CqiPeriocity; /**< Wideband Periodic CQI: 2, 5, 10, 16, 20, 32, 40, 64, 80 or 160 ms */
+  /// Wideband Periodic CQI. 2, 5, 10, 16, 20, 32, 40, 64, 80 or 160 ms.
+  Time m_p10CqiPeriocity;
   Time m_p10CqiLast;
 
-  /**< SubBand Aperiodic CQI: activated by  DCI format 0 or Random Access Response Grant */
-  // NOTE defines a periodicity for academic studies
+  /**
+   * SubBand Aperiodic CQI. Activated by DCI format 0 or Random Access Response
+   * Grant.
+   * \note Defines a periodicity for academic studies.
+   */
   Time m_a30CqiPeriocity;
   Time m_a30CqiLast;
 
@@ -314,13 +374,20 @@
   uint16_t m_srsConfigured;
   Time     m_srsStartTime;
 
+  double m_paLinear;
+
   bool m_dlConfigured;
   bool m_ulConfigured;
 
+  /// The current UE PHY state.
   State m_state;
-  //             cellid    rnti
+  /**
+   * The `StateTransition` trace source. Fired upon every UE PHY state
+   * transition. Exporting the serving cell ID, RNTI, old state, and new state.
+   */
   TracedCallback<uint16_t, uint16_t, State, State> m_stateTransitionTrace;
 
+  /// \todo Can be removed.
   uint8_t m_subframeNo;
 
   bool m_rsReceivedPowerUpdated;
@@ -341,18 +408,32 @@
   };
   std::list <PssElement> m_pssList;
 
-  double m_pssReceptionThreshold; // on RSRQ [W]
+  /**
+   * The `RsrqUeMeasThreshold` attribute. Receive threshold for PSS on RSRQ
+   * in dB.
+   */
+  double m_pssReceptionThreshold;
 
+  /// Summary results of measuring a specific cell. Used for layer-1 filtering.
   struct UeMeasurementsElement
   {
-    double rsrpSum;
-    uint8_t rsrpNum;
-    double rsrqSum;
-    uint8_t rsrqNum;
+    double rsrpSum;   ///< Sum of RSRP sample values in linear unit.
+    uint8_t rsrpNum;  ///< Number of RSRP samples.
+    double rsrqSum;   ///< Sum of RSRQ sample values in linear unit.
+    uint8_t rsrqNum;  ///< Number of RSRQ samples.
   };
 
+  /**
+   * Store measurement results during the last layer-1 filtering period.
+   * Indexed by the cell ID where the measurements come from.
+   */
   std::map <uint16_t, UeMeasurementsElement> m_ueMeasurementsMap;
+  /**
+   * The `UeMeasurementsFilterPeriod` attribute. Time period for reporting UE
+   * measurements, i.e., the length of layer-1 filtering (default 200 ms).
+   */
   Time m_ueMeasurementsFilterPeriod;
+  /// \todo Can be removed.
   Time m_ueMeasurementsFilterLast;
 
   Ptr<LteHarqPhy> m_harqPhyModule;
@@ -361,28 +442,40 @@
   uint32_t m_raRnti;
 
   /**
-   * Trace information regarding RSRP and average SINR (see TS 36.214)
-   * uint16_t cellId, uint16_t rnti, double rsrp, double sinr
+   * The `ReportCurrentCellRsrpSinr` trace source. Trace information regarding
+   * RSRP and average SINR (see TS 36.214). Exporting cell ID, RNTI, RSRP, and
+   * SINR.
    */
   TracedCallback<uint16_t, uint16_t, double, double> m_reportCurrentCellRsrpSinrTrace;
+  /**
+   * The `RsrpSinrSamplePeriod` attribute. The sampling period for reporting
+   * RSRP-SINR stats.
+   */
   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 rsrpDbm, double rsrqDb, bool isServingCell
+   * The `ReportUeMeasurements` trace source. Contains trace information
+   * regarding RSRP and RSRQ measured from a specific cell (see TS 36.214).
+   * Exporting RNTI, the ID of the measured cell, RSRP (in dBm), RSRQ (in dB),
+   * and whether the cell is the serving cell.
    */
   TracedCallback<uint16_t, uint16_t, double, double, bool> m_reportUeMeasurements;
 
   EventId m_sendSrsEvent;
 
   /**
-   * Trace information regarding PHY stats from DL Tx perspective
-   * PhyTrasmissionStatParameters  see lte-common.h
+   * The `UlPhyTransmission` trace source. Contains trace information regarding
+   * PHY stats from UL Tx perspective. Exporting a structure with type
+   * PhyTransmissionStatParameters.
    */
   TracedCallback<PhyTransmissionStatParameters> m_ulPhyTransmission;
 
-};
+  
+  Ptr<SpectrumValue> m_noisePsd; ///< Noise power spectral density for
+                                 ///the configured bandwidth 
+
+}; // end of `class LteUePhy`
 
 
 }
diff -Naur ns-3.21/src/lte/model/lte-ue-power-control.cc ns-3.22/src/lte/model/lte-ue-power-control.cc
--- ns-3.21/src/lte/model/lte-ue-power-control.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-power-control.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include <ns3/integer.h>
 #include <ns3/math.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteUePowerControl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteUePowerControl");
+
 NS_OBJECT_ENSURE_REGISTERED (LteUePowerControl);
 
 LteUePowerControl::LteUePowerControl ()
@@ -117,13 +117,16 @@
                    MakeIntegerChecker<int16_t> ())
     .AddTraceSource ("ReportPuschTxPower",
                      "Report PUSCH TxPower in dBm",
-                     MakeTraceSourceAccessor (&LteUePowerControl::m_reportPuschTxPower))
+                     MakeTraceSourceAccessor (&LteUePowerControl::m_reportPuschTxPower),
+                     "ns3::LteUePowerControl::TxPowerTracedCallback")
     .AddTraceSource ("ReportPucchTxPower",
                      "Report PUCCH TxPower in dBm",
-                     MakeTraceSourceAccessor (&LteUePowerControl::m_reportPucchTxPower))
+                     MakeTraceSourceAccessor (&LteUePowerControl::m_reportPucchTxPower),
+                     "ns3::LteUePowerControl::TxPowerTracedCallback")
     .AddTraceSource ("ReportSrsTxPower",
                      "Report SRS TxPower in dBm",
-                     MakeTraceSourceAccessor (&LteUePowerControl::m_reportSrsTxPower))
+                     MakeTraceSourceAccessor (&LteUePowerControl::m_reportSrsTxPower),
+                     "ns3::LteUePowerControl::TxPowerTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/lte/model/lte-ue-power-control.h ns-3.22/src/lte/model/lte-ue-power-control.h
--- ns-3.21/src/lte/model/lte-ue-power-control.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-power-control.h	2015-02-05 15:46:22.000000000 -0800
@@ -87,6 +87,16 @@
   double GetPucchTxPower (std::vector <int> rb);
   double GetSrsTxPower (std::vector <int> rb);
 
+  /**
+   * TracedCallback signature for uplink transmit power.
+   *
+   * \param [in] cellId Cell identifier.
+   * \param [in] rnti The C-RNTI identifying the UE.
+   * \param [in] power The current TX power.
+   */
+  typedef void (* TxPowerTracedCallback)
+    (const uint16_t cellId, const uint16_t rnti, const double power);
+
 private:
   void SetSubChannelMask (std::vector <int> mask);
 
diff -Naur ns-3.21/src/lte/model/lte-ue-rrc.cc ns-3.22/src/lte/model/lte-ue-rrc.cc
--- ns-3.21/src/lte/model/lte-ue-rrc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-rrc.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,9 @@
 
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("LteUeRrc");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteUeRrc");
 
 /////////////////////////////
 // CMAC SAP forwarder
@@ -87,7 +86,7 @@
 
 
 
-
+/// Map each of UE RRC states to its string representation.
 static const std::string g_ueRrcStateName[LteUeRrc::NUM_STATES] =
 {
   "IDLE_START",
@@ -105,6 +104,10 @@
   "CONNECTED_REESTABLISHING"
 };
 
+/**
+ * \param s The UE RRC state.
+ * \return The string representation of the given state.
+ */
 static const std::string & ToString (LteUeRrc::State s)
 {
   return g_ueRrcStateName[s];
@@ -197,46 +200,60 @@
                    MakeTimeChecker ())
     .AddTraceSource ("MibReceived",
                      "trace fired upon reception of Master Information Block",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_mibReceivedTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_mibReceivedTrace),
+                     "ns3::LteUeRrc::MibSibHandoverTracedCallback")
     .AddTraceSource ("Sib1Received",
                      "trace fired upon reception of System Information Block Type 1",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_sib1ReceivedTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_sib1ReceivedTrace),
+                     "ns3::LteUeRrc::MibSibHandoverTracedCallback")
     .AddTraceSource ("Sib2Received",
                      "trace fired upon reception of System Information Block Type 2",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_sib2ReceivedTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_sib2ReceivedTrace),
+                     "ns3::LteUeRrc::ImsiCidRntiTracedCallback")
     .AddTraceSource ("StateTransition",
                      "trace fired upon every UE RRC state transition",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_stateTransitionTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_stateTransitionTrace),
+                     "ns3::LteUeRrc::StateTracedCallback")
     .AddTraceSource ("InitialCellSelectionEndOk",
                      "trace fired upon successful initial cell selection procedure",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_initialCellSelectionEndOkTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_initialCellSelectionEndOkTrace),
+                     "ns3::LteUeRrc::CellSelectionTracedCallback")
     .AddTraceSource ("InitialCellSelectionEndError",
                      "trace fired upon failed initial cell selection procedure",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_initialCellSelectionEndErrorTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_initialCellSelectionEndErrorTrace),
+                     "ns3::LteUeRrc::CellSelectionTracedCallback")
     .AddTraceSource ("RandomAccessSuccessful",
                      "trace fired upon successful completion of the random access procedure",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_randomAccessSuccessfulTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_randomAccessSuccessfulTrace),
+                     "ns3::LteUeRrc::ImsiCidRntiTracedCallback")
     .AddTraceSource ("RandomAccessError",
                      "trace fired upon failure of the random access procedure",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_randomAccessErrorTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_randomAccessErrorTrace),
+                     "ns3::LteUeRrc::ImsiCidRntiTracedCallback")
     .AddTraceSource ("ConnectionEstablished",
                      "trace fired upon successful RRC connection establishment",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_connectionEstablishedTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_connectionEstablishedTrace),
+                     "ns3::LteUeRrc::ImsiCidRntiTracedCallback")
     .AddTraceSource ("ConnectionTimeout",
                      "trace fired upon timeout RRC connection establishment because of T300",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_connectionTimeoutTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_connectionTimeoutTrace),
+                     "ns3::LteUeRrc::ImsiCidRntiTracedCallback")
     .AddTraceSource ("ConnectionReconfiguration",
                      "trace fired upon RRC connection reconfiguration",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_connectionReconfigurationTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_connectionReconfigurationTrace),
+                     "ns3::LteUeRrc::ImsiCidRntiTracedCallback")
     .AddTraceSource ("HandoverStart",
                      "trace fired upon start of a handover procedure",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_handoverStartTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_handoverStartTrace),
+                     "ns3::LteUeRrc::MibSibHandoverTracedCallback")
     .AddTraceSource ("HandoverEndOk",
                      "trace fired upon successful termination of a handover procedure",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_handoverEndOkTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_handoverEndOkTrace),
+                     "ns3::LteUeRrc::ImsiCidRntiTracedCallback")
     .AddTraceSource ("HandoverEndError",
                      "trace fired upon failure of a handover procedure",
-                     MakeTraceSourceAccessor (&LteUeRrc::m_handoverEndErrorTrace))
+                     MakeTraceSourceAccessor (&LteUeRrc::m_handoverEndErrorTrace),
+                     "ns3::LteUeRrc::ImsiCidRntiTracedCallback")
   ;
   return tid;
 }
@@ -413,6 +430,8 @@
 
   uint8_t drbid = Bid2Drbid (bid);
 
+  if (drbid != 0)
+    {
   std::map<uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it =   m_drbMap.find (drbid);
   NS_ASSERT_MSG (it != m_drbMap.end (), "could not find bearer with drbid == " << drbid);
 
@@ -426,6 +445,7 @@
                      << " (LCID " << (uint32_t) params.lcid << ")"
                      << " (" << packet->GetSize () << " bytes)");
   it->second->m_pdcp->GetLtePdcpSapProvider ()->TransmitPdcpSdu (params);
+    }
 }
 
 
@@ -1116,8 +1136,10 @@
   if (pcd.havePdschConfigDedicated)
     {
       // update PdschConfigDedicated (i.e. P_A value)
-	  m_pdschConfigDedicated = pcd.pdschConfigDedicated;
-   }
+      m_pdschConfigDedicated = pcd.pdschConfigDedicated;
+      double paDouble = LteRrcSap::ConvertPdschConfigDedicated2Double (m_pdschConfigDedicated);
+      m_cphySapProvider->SetPa (paDouble);
+    }
 
   std::list<LteRrcSap::SrbToAddMod>::const_iterator stamIt = rrcd.srbToAddModList.begin ();
   if (stamIt != rrcd.srbToAddModList.end ())
@@ -1274,6 +1296,8 @@
       NS_ASSERT_MSG (it != m_drbMap.end (), "could not find bearer with given lcid");
       m_drbMap.erase (it);      
       m_bid2DrbidMap.erase (drbid);
+      //Remove LCID
+      m_cmacSapProvider->RemoveLc (drbid + 2);
     }
 }
 
@@ -1422,8 +1446,8 @@
       NS_LOG_LOGIC (this << " setting quantityConfig");
       m_varMeasConfig.quantityConfig = mc.quantityConfig;
       // 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);
+      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);
 
       for (std::map<uint8_t, LteRrcSap::MeasIdToAddMod>::iterator measIdIt
@@ -1501,7 +1525,7 @@
 {
   NS_LOG_FUNCTION (this << cellId << rsrp << rsrq << useLayer3Filtering);
 
-  std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.find (cellId);;
+  std::map<uint16_t, MeasValues>::iterator storedMeasIt = m_storedMeasValues.find (cellId);
 
   if (storedMeasIt != m_storedMeasValues.end ())
     {
@@ -2773,11 +2797,17 @@
 LteUeRrc::Bid2Drbid (uint8_t bid)
 {
   std::map<uint8_t, uint8_t>::iterator it = m_bid2DrbidMap.find (bid);
-  NS_ASSERT_MSG (it != m_bid2DrbidMap.end (), "could not find BID " << bid);
+  //NS_ASSERT_MSG (it != m_bid2DrbidMap.end (), "could not find BID " << bid);
+  if (it == m_bid2DrbidMap.end ())
+    {
+      return 0;
+    }
+  else
+    {
   return it->second;
+    }
 }
 
-
 void 
 LteUeRrc::SwitchToState (State newState)
 {
diff -Naur ns-3.21/src/lte/model/lte-ue-rrc.h ns-3.22/src/lte/model/lte-ue-rrc.h
--- ns-3.21/src/lte/model/lte-ue-rrc.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-ue-rrc.h	2015-02-05 15:46:22.000000000 -0800
@@ -247,6 +247,52 @@
   void SetUseRlcSm (bool val);
 
 
+  /**
+   * TracedCallback signature for imsi, cellId and rnti events.
+   *
+   * \param [in] imsi
+   * \param [in] cellId
+   */
+  typedef void (* CellSelectionTracedCallback)
+    (const uint64_t imsi, const uint16_t cellId);
+
+  /**
+   * TracedCallback signature for imsi, cellId and rnti events.
+   *
+   * \param [in] imsi
+   * \param [in] cellId
+   * \param [in] rnti
+   */
+  typedef void (* ImsiCidRntiTracedCallback)
+    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti);
+
+  /**
+   * TracedCallback signature for MIBRecieved, Sib1Received and
+   * HandoverStart events.
+   *
+   * \param [in] imsi
+   * \param [in] cellId
+   * \param [in] rnti
+   * \param [in] otherCid
+   */
+  typedef void (* MibSibHandoverTracedCallback)
+    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
+     const uint16_t otherCid);
+
+  /**
+   * TracedCallback signature for state transition events.
+   *
+   * \param [in] imsi
+   * \param [in] cellId
+   * \param [in] rnti
+   * \param [in] oldState
+   * \param [in] newState
+   */
+  typedef void (* StateTracedCallback)
+    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
+     const State oldState, const State newState);
+
+
 private:
 
 
@@ -467,6 +513,10 @@
   void LeaveConnectedMode ();
   void DisposeOldSrb1 ();
   uint8_t Bid2Drbid (uint8_t bid);
+  /**
+   * Switch the UE RRC to the given state.
+   * \param s the destination state
+   */
   void SwitchToState (State s);
 
   std::map<uint8_t, uint8_t> m_bid2DrbidMap;
@@ -486,62 +536,137 @@
   LteAsSapProvider* m_asSapProvider;
   LteAsSapUser* m_asSapUser;
 
+  /// The current UE RRC state.
   State m_state;
 
+  /// The unique UE identifier.
   uint64_t m_imsi;
+  /**
+   * The `C-RNTI` attribute. Cell Radio Network Temporary Identifier.
+   */
   uint16_t m_rnti;
+  /**
+   * The `CellId` attribute. Serving cell identifier.
+   */
   uint16_t m_cellId;
 
+  /**
+   * The `Srb0` attribute. SignalingRadioBearerInfo for SRB0.
+   */
   Ptr<LteSignalingRadioBearerInfo> m_srb0;
+  /**
+   * The `Srb1` attribute. SignalingRadioBearerInfo for SRB1.
+   */
   Ptr<LteSignalingRadioBearerInfo> m_srb1;
+  /**
+   * SRB1 configuration before RRC connection reconfiguration. To be deleted
+   * soon by DisposeOldSrb1().
+   */
   Ptr<LteSignalingRadioBearerInfo> m_srb1Old;
+  /**
+   * The `DataRadioBearerMap` attribute. List of UE RadioBearerInfo for Data
+   * Radio Bearers by LCID.
+   */
   std::map <uint8_t, Ptr<LteDataRadioBearerInfo> > m_drbMap;
 
+  /**
+   * True if RLC SM is to be used, false if RLC UM/AM are to be used.
+   * Can be modified using SetUseRlcSm().
+   */
   bool m_useRlcSm;
 
   uint8_t m_lastRrcTransactionIdentifier;
 
   LteRrcSap::PdschConfigDedicated m_pdschConfigDedicated;
 
-  uint8_t m_dlBandwidth; /**< downlink bandwidth in RBs */
-  uint8_t m_ulBandwidth; /**< uplink bandwidth in RBs */
+  uint8_t m_dlBandwidth; /**< Downlink bandwidth in RBs. */
+  uint8_t m_ulBandwidth; /**< Uplink bandwidth in RBs. */
 
-  uint16_t m_dlEarfcn;  /**< downlink carrier frequency */
-  uint16_t m_ulEarfcn;  /**< uplink carrier frequency */
+  uint16_t m_dlEarfcn;  /**< Downlink carrier frequency. */
+  uint16_t m_ulEarfcn;  /**< Uplink carrier frequency. */
 
-  //             imsi      cellId    rnti,     sourceCellId
+  /**
+   * The `MibReceived` trace source. Fired upon reception of Master Information
+   * Block. Exporting IMSI, the serving cell ID, RNTI, and the source cell ID.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_mibReceivedTrace;
-  //             imsi      cellId    rnti,     sourceCellId
+  /**
+   * The `Sib1Received` trace source. Fired upon reception of System
+   * Information Block Type 1. Exporting IMSI, the serving cell ID, RNTI, and
+   * the source cell ID.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_sib1ReceivedTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `Sib2Received` trace source. Fired upon reception of System
+   * Information Block Type 2. Exporting IMSI, the serving cell ID, RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_sib2ReceivedTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `StateTransition` trace source. Fired upon every UE RRC state
+   * transition. Exporting IMSI, the serving cell ID, RNTI, old state, and new
+   * state.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t, State, State> m_stateTransitionTrace;
-  //             imsi      cellId
+  /**
+   * The `InitialCellSelectionEndOk` trace source. Fired upon successful
+   * initial cell selection procedure. Exporting IMSI and the selected cell ID.
+   */
   TracedCallback<uint64_t, uint16_t> m_initialCellSelectionEndOkTrace;
-  //             imsi      cellId
+  /**
+   * The `InitialCellSelectionEndError` trace source. Fired upon failed initial
+   * cell selection procedure. Exporting IMSI and the cell ID under evaluation.
+   */
   TracedCallback<uint64_t, uint16_t> m_initialCellSelectionEndErrorTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `RandomAccessSuccessful` trace source. Fired upon successful
+   * completion of the random access procedure. Exporting IMSI, cell ID, and
+   * RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_randomAccessSuccessfulTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `RandomAccessError` trace source. Fired upon failure of the random
+   * access procedure. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_randomAccessErrorTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `ConnectionEstablished` trace source. Fired upon successful RRC
+   * connection establishment. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionEstablishedTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `ConnectionTimeout` trace source. Fired upon timeout RRC connection
+   * establishment because of T300. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionTimeoutTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `ConnectionReconfiguration` trace source. Fired upon RRC connection
+   * reconfiguration. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_connectionReconfigurationTrace;
-  //             imsi      cellId    rnti      targetCellId
+  /**
+   * The `HandoverStart` trace source. Fired upon start of a handover
+   * procedure. Exporting IMSI, source cell ID, RNTI, and target cell ID.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t, uint16_t> m_handoverStartTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `HandoverEndOk` trace source. Fired upon successful termination of a
+   * handover procedure. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverEndOkTrace;
-  //             imsi      cellId    rnti
+  /**
+   * The `HandoverEndError` trace source. Fired upon failure of a handover
+   * procedure. Exporting IMSI, cell ID, and RNTI.
+   */
   TracedCallback<uint64_t, uint16_t, uint16_t> m_handoverEndErrorTrace;
 
-  bool m_connectionPending; /**< true if a connection request by upper layers is pending */
-  bool m_hasReceivedMib; /**< true if MIB was received for the current cell  */
-  bool m_hasReceivedSib1; /**< true if SIB1 was received for the current cell  */
-  bool m_hasReceivedSib2; /**< true if SIB2 was received for the current cell  */
+  /// True if a connection request by upper layers is pending.
+  bool m_connectionPending;
+  /// True if MIB was received for the current cell.
+  bool m_hasReceivedMib;
+  /// True if SIB1 was received for the current cell.
+  bool m_hasReceivedSib1;
+  /// True if SIB2 was received for the current cell.
+  bool m_hasReceivedSib2;
 
   /// Stored content of the last SIB1 received.
   LteRrcSap::SystemInformationBlockType1 m_lastSib1;
@@ -801,9 +926,9 @@
   void CancelLeavingTrigger (uint8_t measId, uint16_t cellId);
 
   /**
-   * \brief Timer for RRC connection establishment procedure.
-   *
-   * Section 7.3 of 3GPP TS 36.331.
+   * The `T300` attribute. Timer for RRC connection establishment procedure
+   * (i.e., the procedure is deemed as failed if it takes longer than this).
+   * See Section 7.3 of 3GPP TS 36.331.
    */
   Time m_t300;
 
diff -Naur ns-3.21/src/lte/model/lte-vendor-specific-parameters.cc ns-3.22/src/lte/model/lte-vendor-specific-parameters.cc
--- ns-3.21/src/lte/model/lte-vendor-specific-parameters.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/lte-vendor-specific-parameters.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,9 +21,9 @@
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteVendorSpecificParameters");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("LteVendorSpecificParameters");
   
 SrsCqiRntiVsp::SrsCqiRntiVsp (uint16_t rnti)
 :  m_rnti (rnti)
diff -Naur ns-3.21/src/lte/model/no-op-handover-algorithm.cc ns-3.22/src/lte/model/no-op-handover-algorithm.cc
--- ns-3.21/src/lte/model/no-op-handover-algorithm.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/no-op-handover-algorithm.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "no-op-handover-algorithm.h"
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("NoOpHandoverAlgorithm");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("NoOpHandoverAlgorithm");
+
 NS_OBJECT_ENSURE_REGISTERED (NoOpHandoverAlgorithm);
 
 
diff -Naur ns-3.21/src/lte/model/no-op-handover-algorithm.h ns-3.22/src/lte/model/no-op-handover-algorithm.h
--- ns-3.21/src/lte/model/no-op-handover-algorithm.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/no-op-handover-algorithm.h	2015-02-05 15:46:22.000000000 -0800
@@ -41,9 +41,7 @@
 class NoOpHandoverAlgorithm : public LteHandoverAlgorithm
 {
 public:
-  /**
-   * \brief Creates a No-op handover algorithm instance.
-   */
+  /// Creates a No-op handover algorithm instance.
   NoOpHandoverAlgorithm ();
 
   virtual ~NoOpHandoverAlgorithm ();
@@ -67,8 +65,9 @@
   void DoReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults);
 
 private:
-  // Handover Management SAPs
+  /// Interface to the eNodeB RRC instance.
   LteHandoverManagementSapUser* m_handoverManagementSapUser;
+  /// Receive API calls from the eNodeB RRC instance.
   LteHandoverManagementSapProvider* m_handoverManagementSapProvider;
 
 }; // end of class NoOpHandoverAlgorithm
diff -Naur ns-3.21/src/lte/model/pf-ff-mac-scheduler.cc ns-3.22/src/lte/model/pf-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/pf-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/pf-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include <set>
 
 
-NS_LOG_COMPONENT_DEFINE ("PfFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PfFfMacScheduler");
+
 static const int PfType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1415,7 +1415,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/pss-ff-mac-scheduler.cc ns-3.22/src/lte/model/pss-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/pss-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/pss-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,10 @@
 #include <algorithm>
 
 
-NS_LOG_COMPONENT_DEFINE ("PssFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PssFfMacScheduler");
+
 static const int PssType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1298,13 +1298,14 @@
                 {
                   if (rbgMap.at (i) == true)
                     continue;
-                  if ((m_ffrSapProvider->IsDlRbgAvailableForUe (i, (*it).first)) == false)
-                    continue;
 
                   std::map <uint16_t, pssFlowPerf_t>::iterator itMax = tdUeSet.end ();
                   double metricMax = 0.0;
                   for (it = tdUeSet.begin (); it != tdUeSet.end (); it++)
                     {
+                      if ((m_ffrSapProvider->IsDlRbgAvailableForUe (i, (*it).first)) == false)
+                        continue;
+
                       // calculate PF weigth 
                       double weight = (*it).second.targetThroughput / (*it).second.lastAveragedThroughput;
                       if (weight < 1.0)
@@ -1373,11 +1374,10 @@
                           itMax = it;
                         }
                     } // end of tdUeSet
-        
-                  if (itMax == m_flowStatsDl.end ())
+
+                  if (itMax == tdUeSet.end ())
                     {
-                      // no UE available for downlink 
-                      return;
+                      // no UE available for downlink
                     }
                   else
                     {
@@ -1397,13 +1397,12 @@
                   if (rbgMap.at (i) == true)
                     continue;
 
-                  if ((m_ffrSapProvider->IsDlRbgAvailableForUe (i, (*it).first)) == false)
-                    continue;
-        
                   std::map <uint16_t, pssFlowPerf_t>::iterator itMax = tdUeSet.end ();
                   double metricMax = 0.0;
                   for (it = tdUeSet.begin (); it != tdUeSet.end (); it++)
                     {
+                      if ((m_ffrSapProvider->IsDlRbgAvailableForUe (i, (*it).first)) == false)
+                        continue;
                       // calculate PF weigth 
                       double weight = (*it).second.targetThroughput / (*it).second.lastAveragedThroughput;
                       if (weight < 1.0)
@@ -1468,11 +1467,10 @@
                           itMax = it;
                         }
                     } // end of tdUeSet
-         
-                  if (itMax == m_flowStatsDl.end ())
+
+                  if (itMax == tdUeSet.end ())
                     {
                       // no UE available for downlink 
-                      return;
                     }
                   else
                     {
@@ -1722,7 +1720,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/rem-spectrum-phy.cc ns-3.22/src/lte/model/rem-spectrum-phy.cc
--- ns-3.21/src/lte/model/rem-spectrum-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/rem-spectrum-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 
 #include "rem-spectrum-phy.h"
 
-NS_LOG_COMPONENT_DEFINE ("RemSpectrumPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RemSpectrumPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (RemSpectrumPhy);
 
 RemSpectrumPhy::RemSpectrumPhy ()
diff -Naur ns-3.21/src/lte/model/rr-ff-mac-scheduler.cc ns-3.22/src/lte/model/rr-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/rr-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/rr-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include <ns3/lte-vendor-specific-parameters.h>
 #include <ns3/boolean.h>
 
-NS_LOG_COMPONENT_DEFINE ("RrFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RrFfMacScheduler");
+
 static const int Type0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1251,7 +1251,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/tdbet-ff-mac-scheduler.cc ns-3.22/src/lte/model/tdbet-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/tdbet-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/tdbet-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include <set>
 #include <cfloat>
 
-NS_LOG_COMPONENT_DEFINE ("TdBetFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TdBetFfMacScheduler");
+
 static const int TdBetType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1256,7 +1256,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/tdmt-ff-mac-scheduler.cc ns-3.22/src/lte/model/tdmt-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/tdmt-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/tdmt-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include <set>
 #include <cfloat>
 
-NS_LOG_COMPONENT_DEFINE ("TdMtFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TdMtFfMacScheduler");
+
 static const int TdMtType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1253,7 +1253,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/tdtbfq-ff-mac-scheduler.cc ns-3.22/src/lte/model/tdtbfq-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include <set>
 #include <cfloat>
 
-NS_LOG_COMPONENT_DEFINE ("TdTbfqFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TdTbfqFfMacScheduler");
+
 static const int TdTbfqType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1407,7 +1407,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/model/trace-fading-loss-model.cc ns-3.22/src/lte/model/trace-fading-loss-model.cc
--- ns-3.21/src/lte/model/trace-fading-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/trace-fading-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include <fstream>
 #include <ns3/simulator.h>
 
-NS_LOG_COMPONENT_DEFINE ("TraceFadingLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TraceFadingLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (TraceFadingLossModel);
   
 
diff -Naur ns-3.21/src/lte/model/tta-ff-mac-scheduler.cc ns-3.22/src/lte/model/tta-ff-mac-scheduler.cc
--- ns-3.21/src/lte/model/tta-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/model/tta-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include <set>
 #include <cfloat>
 
-NS_LOG_COMPONENT_DEFINE ("TtaFfMacScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TtaFfMacScheduler");
+
 static const int TtaType0AllocationRbg[4] = {
   10,       // RGB size 1
   26,       // RGB size 2
@@ -1332,7 +1332,7 @@
     {
       if ( params.m_cqiList.at (i).m_cqiType == CqiListElement_s::P10 )
         {
-          // wideband CQI reporting
+          NS_LOG_LOGIC ("wideband CQI " <<  (uint32_t) params.m_cqiList.at (i).m_wbCqi.at (0) << " reported");
           std::map <uint16_t,uint8_t>::iterator it;
           uint16_t rnti = params.m_cqiList.at (i).m_rnti;
           it = m_p10CqiRxed.find (rnti);
diff -Naur ns-3.21/src/lte/test/epc-test-gtpu.cc ns-3.22/src/lte/test/epc-test-gtpu.cc
--- ns-3.21/src/lte/test/epc-test-gtpu.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/epc-test-gtpu.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,9 @@
 
 #include "epc-test-gtpu.h"
 
-NS_LOG_COMPONENT_DEFINE ("EpcGtpuTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("EpcGtpuTest");
 
 /**
  * TestSuite
diff -Naur ns-3.21/src/lte/test/epc-test-s1u-downlink.cc ns-3.22/src/lte/test/epc-test-s1u-downlink.cc
--- ns-3.21/src/lte/test/epc-test-s1u-downlink.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/epc-test-s1u-downlink.cc	2015-02-05 15:46:22.000000000 -0800
@@ -43,11 +43,9 @@
 
 using namespace ns3;
 
-
 NS_LOG_COMPONENT_DEFINE ("EpcTestS1uDownlink");
 
 
-
 struct UeDlTestData
 {
   UeDlTestData (uint32_t n, uint32_t s);
diff -Naur ns-3.21/src/lte/test/epc-test-s1u-uplink.cc ns-3.22/src/lte/test/epc-test-s1u-uplink.cc
--- ns-3.21/src/lte/test/epc-test-s1u-uplink.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/epc-test-s1u-uplink.cc	2015-02-05 15:46:22.000000000 -0800
@@ -50,8 +50,6 @@
 
 using namespace ns3;
 
-
-
 NS_LOG_COMPONENT_DEFINE ("EpcTestS1uUplink");
 
 /*
diff -Naur ns-3.21/src/lte/test/lte-ffr-simple.cc ns-3.22/src/lte/test/lte-ffr-simple.cc
--- ns-3.21/src/lte/test/lte-ffr-simple.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-ffr-simple.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include <ns3/log.h>
 #include "ns3/lte-rrc-sap.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteFfrSimple");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteFfrSimple");
+
 NS_OBJECT_ENSURE_REGISTERED (LteFfrSimple);
 
 
@@ -92,7 +92,8 @@
                    MakeUintegerChecker<uint8_t> ())
     .AddTraceSource ("ChangePdschConfigDedicated",
                      "trace fired upon change of PdschConfigDedicated",
-                     MakeTraceSourceAccessor (&LteFfrSimple::m_changePdschConfigDedicatedTrace))
+                     MakeTraceSourceAccessor (&LteFfrSimple::m_changePdschConfigDedicatedTrace),
+                     "ns3::LteFfrSimple::PdschTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/lte/test/lte-ffr-simple.h ns-3.22/src/lte/test/lte-ffr-simple.h
--- ns-3.21/src/lte/test/lte-ffr-simple.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-ffr-simple.h	2015-02-05 15:46:22.000000000 -0800
@@ -120,6 +120,8 @@
 
   LteRrcSap::PdschConfigDedicated m_pdschConfigDedicated;
 
+  typedef void (* PdschTracedCallback)(uint16_t, uint8_t);
+
   TracedCallback<uint16_t, uint8_t> m_changePdschConfigDedicatedTrace;
 
 
diff -Naur ns-3.21/src/lte/test/lte-simple-helper.cc ns-3.22/src/lte/test/lte-simple-helper.cc
--- ns-3.21/src/lte/test/lte-simple-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-simple-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,9 @@
 #include "lte-test-entities.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("LteSimpleHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteSimpleHelper");
 
 NS_OBJECT_ENSURE_REGISTERED (LteSimpleHelper);
 
diff -Naur ns-3.21/src/lte/test/lte-simple-net-device.cc ns-3.22/src/lte/test/lte-simple-net-device.cc
--- ns-3.21/src/lte/test/lte-simple-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-simple-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,9 @@
 #include "ns3/log.h"
 #include "lte-simple-net-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteSimpleNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteSimpleNetDevice");
 
 NS_OBJECT_ENSURE_REGISTERED (LteSimpleNetDevice);
 
diff -Naur ns-3.21/src/lte/test/lte-simple-spectrum-phy.cc ns-3.22/src/lte/test/lte-simple-spectrum-phy.cc
--- ns-3.21/src/lte/test/lte-simple-spectrum-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-simple-spectrum-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include <ns3/boolean.h>
 #include <ns3/double.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteSimpleSpectrumPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteSimpleSpectrumPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (LteSimpleSpectrumPhy);
 
 LteSimpleSpectrumPhy::LteSimpleSpectrumPhy ()
@@ -64,7 +64,8 @@
     .SetParent<SpectrumPhy> ()
     .AddTraceSource ("RxStart",
                      "Data reception start",
-                     MakeTraceSourceAccessor (&LteSimpleSpectrumPhy::m_rxStart))
+                     MakeTraceSourceAccessor (&LteSimpleSpectrumPhy::m_rxStart),
+                     "ns3::SpectrumValue::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/lte/test/lte-test-cell-selection.cc ns-3.22/src/lte/test/lte-test-cell-selection.cc
--- ns-3.21/src/lte/test/lte-test-cell-selection.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-cell-selection.cc	2015-02-05 15:46:22.000000000 -0800
@@ -43,10 +43,9 @@
 #include <ns3/lte-ue-rrc.h>
 #include <ns3/lte-enb-net-device.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteCellSelectionTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteCellSelectionTest");
 
 /*
  * Test Suite
diff -Naur ns-3.21/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -60,10 +60,10 @@
 
 #include "lte-test-cqa-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestCqaFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestCqaFfMacScheduler");
+
 LenaTestCqaFfMacSchedulerSuite::LenaTestCqaFfMacSchedulerSuite ()
   : TestSuite ("lte-cqa-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-cqi-generation.cc ns-3.22/src/lte/test/lte-test-cqi-generation.cc
--- ns-3.21/src/lte/test/lte-test-cqi-generation.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-cqi-generation.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,12 +32,15 @@
 #include "ns3/mobility-helper.h"
 #include "ns3/lte-helper.h"
 
-#include "lte-test-cqi-generation.h"
+#include "lte-ffr-simple.h"
+#include "ns3/lte-rrc-sap.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteCqiGenerationTest");
+#include "lte-test-cqi-generation.h"
 
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteCqiGenerationTest");
+
 void
 LteTestDlSchedulingCallback (LteCqiGenerationTestCase *testcase, std::string path,
                              uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
@@ -54,6 +57,22 @@
   testcase->UlScheduling (frameNo, subframeNo, rnti, mcs, sizeTb);
 }
 
+void
+LteTestDlSchedulingCallback2 (LteCqiGenerationDlPowerControlTestCase *testcase, std::string path,
+                              uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
+                              uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
+{
+  testcase->DlScheduling (frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
+}
+
+void
+LteTestUlSchedulingCallback2 (LteCqiGenerationDlPowerControlTestCase *testcase, std::string path,
+                              uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
+                              uint8_t mcs, uint16_t sizeTb)
+{
+  testcase->UlScheduling (frameNo, subframeNo, rnti, mcs, sizeTb);
+}
+
 
 /**
  * TestSuite
@@ -69,6 +88,20 @@
   AddTestCase (new LteCqiGenerationTestCase ("UsePdcchForCqiGeneration", false, 4, 2), TestCase::QUICK);
   AddTestCase (new LteCqiGenerationTestCase ("UsePdschForCqiGeneration", true, 28, 2), TestCase::QUICK);
 
+  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
+                                                           LteRrcSap::PdschConfigDedicated::dB0, LteRrcSap::PdschConfigDedicated::dB0, 4, 2), TestCase::QUICK);
+  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
+                                                           LteRrcSap::PdschConfigDedicated::dB0, LteRrcSap::PdschConfigDedicated::dB_3, 8, 2), TestCase::QUICK);
+  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
+                                                           LteRrcSap::PdschConfigDedicated::dB0, LteRrcSap::PdschConfigDedicated::dB_6, 10, 2), TestCase::QUICK);
+  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
+                                                           LteRrcSap::PdschConfigDedicated::dB1, LteRrcSap::PdschConfigDedicated::dB_6, 12, 2), TestCase::QUICK);
+  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
+                                                           LteRrcSap::PdschConfigDedicated::dB2, LteRrcSap::PdschConfigDedicated::dB_6, 14, 2), TestCase::QUICK);
+  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
+                                                           LteRrcSap::PdschConfigDedicated::dB3, LteRrcSap::PdschConfigDedicated::dB_6, 14, 2), TestCase::QUICK);
+  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
+                                                           LteRrcSap::PdschConfigDedicated::dB3, LteRrcSap::PdschConfigDedicated::dB0, 8, 2), TestCase::QUICK);
 }
 
 static LteCqiGenerationTestSuite lteCqiGenerationTestSuite;
@@ -206,3 +239,137 @@
 
   Simulator::Destroy ();
 }
+
+LteCqiGenerationDlPowerControlTestCase::LteCqiGenerationDlPowerControlTestCase (std::string name,
+                                                                                uint8_t cell0Pa, uint8_t cell1Pa, uint16_t dlMcs, uint16_t ulMcs)
+  : TestCase ("Downlink Power Control: " + name),
+    m_cell0Pa (cell0Pa),
+    m_cell1Pa (cell1Pa),
+    m_dlMcs (dlMcs),
+    m_ulMcs (ulMcs)
+{
+  NS_LOG_INFO ("Creating LteCqiGenerationTestCase");
+}
+
+LteCqiGenerationDlPowerControlTestCase::~LteCqiGenerationDlPowerControlTestCase ()
+{
+}
+
+void
+LteCqiGenerationDlPowerControlTestCase::DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
+                                                      uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
+{
+  // need to allow for RRC connection establishment + CQI feedback reception
+  if (Simulator::Now () > MilliSeconds (500))
+    {
+//	  NS_LOG_UNCOND("DL MSC: " << (uint32_t)mcsTb1 << " expected DL MCS: " << (uint32_t)m_dlMcs);
+      NS_TEST_ASSERT_MSG_EQ ((uint32_t)mcsTb1, (uint32_t)m_dlMcs, "Wrong DL MCS ");
+    }
+}
+
+void
+LteCqiGenerationDlPowerControlTestCase::UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
+                                                      uint8_t mcs, uint16_t sizeTb)
+{
+  // need to allow for RRC connection establishment + SRS transmission
+  if (Simulator::Now () > MilliSeconds (500))
+    {
+//	  NS_LOG_UNCOND("UL MSC: " << (uint32_t)mcs << " expected UL MCS: " << (uint32_t)m_ulMcs);
+      NS_TEST_ASSERT_MSG_EQ ((uint32_t)mcs, (uint32_t)m_ulMcs, "Wrong UL MCS");
+    }
+}
+
+void
+LteCqiGenerationDlPowerControlTestCase::DoRun (void)
+{
+  NS_LOG_DEBUG ("LteCqiGenerationTestCase");
+
+  Config::Reset ();
+  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
+  Config::SetDefault ("ns3::LteHelper::UsePdschForCqiGeneration", BooleanValue (true));
+
+  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (true));
+  Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (true));
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  lteHelper->SetFfrAlgorithmType ("ns3::LteFfrSimple");
+
+  // 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:
+   *
+   *  eNB1                        UE1 UE2                        eNB2
+   *    |                            |                            |
+   *    x -------------------------- x -------------------------- x
+   *                  500 m                       500 m
+   *
+   */
+
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));   // eNB1
+  positionAlloc->Add (Vector (1000, 0.0, 0.0)); // eNB2
+  positionAlloc->Add (Vector (500.0, 0.0, 0.0));  // UE1
+  positionAlloc->Add (Vector (500, 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::PfFfMacScheduler");
+  lteHelper->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::PUSCH_UL_CQI));
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  ueDevs1 = lteHelper->InstallUeDevice (ueNodes1);
+  ueDevs2 = lteHelper->InstallUeDevice (ueNodes2);
+
+  // Attach a UE to a eNB
+  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);
+
+  PointerValue tmp;
+  enbDevs.Get (0)->GetAttribute ("LteFfrAlgorithm", tmp);
+  Ptr<LteFfrSimple> simpleFfrAlgorithmEnb0 = DynamicCast<LteFfrSimple>(tmp.GetObject ());
+  simpleFfrAlgorithmEnb0->ChangePdschConfigDedicated (true);
+
+  LteRrcSap::PdschConfigDedicated pdschConfigDedicatedEnb0;
+  pdschConfigDedicatedEnb0.pa = m_cell0Pa;
+  simpleFfrAlgorithmEnb0->SetPdschConfigDedicated (pdschConfigDedicatedEnb0);
+
+  enbDevs.Get (1)->GetAttribute ("LteFfrAlgorithm", tmp);
+  Ptr<LteFfrSimple> simpleFfrAlgorithmEnb1 = DynamicCast<LteFfrSimple>(tmp.GetObject ());
+  simpleFfrAlgorithmEnb1->ChangePdschConfigDedicated (true);
+
+  LteRrcSap::PdschConfigDedicated pdschConfigDedicatedEnb1;
+  pdschConfigDedicatedEnb1.pa = m_cell1Pa;
+  simpleFfrAlgorithmEnb1->SetPdschConfigDedicated (pdschConfigDedicatedEnb1);
+
+
+  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
+                   MakeBoundCallback (&LteTestDlSchedulingCallback2, this));
+
+  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/UlScheduling",
+                   MakeBoundCallback (&LteTestUlSchedulingCallback2, this));
+
+  Simulator::Stop (Seconds (1.100));
+  Simulator::Run ();
+
+  Simulator::Destroy ();
+}
+
diff -Naur ns-3.21/src/lte/test/lte-test-cqi-generation.h ns-3.22/src/lte/test/lte-test-cqi-generation.h
--- ns-3.21/src/lte/test/lte-test-cqi-generation.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-cqi-generation.h	2015-02-05 15:46:22.000000000 -0800
@@ -54,4 +54,28 @@
 
 };
 
+class LteCqiGenerationDlPowerControlTestCase : public TestCase
+{
+public:
+  LteCqiGenerationDlPowerControlTestCase (std::string name, uint8_t cell0Pa, uint8_t cell1Pa,
+                                          uint16_t dlMcs, uint16_t ulMcs);
+  virtual ~LteCqiGenerationDlPowerControlTestCase ();
+
+  void DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
+                     uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2);
+
+  void UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
+                     uint8_t mcs, uint16_t sizeTb);
+
+private:
+  virtual void DoRun (void);
+
+  uint8_t m_cell0Pa;
+  uint8_t m_cell1Pa;
+
+  uint16_t m_dlMcs;
+  uint16_t m_ulMcs;
+
+};
+
 #endif /* LTE_TEST_CQI_GENERATION_H */
diff -Naur ns-3.21/src/lte/test/lte-test-deactivate-bearer.cc ns-3.22/src/lte/test/lte-test-deactivate-bearer.cc
--- ns-3.21/src/lte/test/lte-test-deactivate-bearer.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/test/lte-test-deactivate-bearer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,347 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011, 2012 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:Gaurav Sathe <gaurav.sathe@tcs.com>
+ */
+
+#include <iostream>
+#include <sstream>
+#include <string>
+
+#include <ns3/object.h>
+#include <ns3/spectrum-interference.h>
+#include <ns3/spectrum-error-model.h>
+#include <ns3/log.h>
+#include <ns3/test.h>
+#include <ns3/simulator.h>
+#include <ns3/packet.h>
+#include <ns3/ptr.h>
+#include "ns3/radio-bearer-stats-calculator.h"
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/eps-bearer.h>
+#include <ns3/node-container.h>
+#include <ns3/mobility-helper.h>
+#include <ns3/net-device-container.h>
+#include <ns3/lte-ue-net-device.h>
+#include <ns3/lte-enb-net-device.h>
+#include <ns3/lte-ue-rrc.h>
+#include <ns3/lte-helper.h>
+#include "ns3/string.h"
+#include "ns3/double.h"
+#include <ns3/lte-enb-phy.h>
+#include <ns3/lte-ue-phy.h>
+#include <ns3/boolean.h>
+#include <ns3/enum.h>
+
+#include "ns3/point-to-point-epc-helper.h"
+#include "ns3/network-module.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/internet-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/point-to-point-helper.h"
+
+#include "lte-test-deactivate-bearer.h"
+
+NS_LOG_COMPONENT_DEFINE ("LenaTestDeactivateBearer");
+
+namespace ns3 {
+
+LenaTestBearerDeactivateSuite::LenaTestBearerDeactivateSuite ()
+  : TestSuite ("lte-test-deactivate-bearer", SYSTEM)
+{
+  NS_LOG_INFO ("creating LenaTestPssFfMacSchedulerSuite");
+
+  bool errorModel = false;
+
+  // Test Case: 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 = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
+  // 132000 * 3 = 396000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
+  std::vector<uint16_t> dist_1;
+
+  dist_1.push_back (0);       // User 0 distance --> MCS 28
+  dist_1.push_back (0);    // User 1 distance --> MCS 22
+  dist_1.push_back (0);    // User 2 distance --> MCS 20
+
+  std::vector<uint16_t> packetSize_1;
+
+  packetSize_1.push_back (100); //1
+  packetSize_1.push_back (100); //2
+  packetSize_1.push_back (100); //3
+
+  std::vector<uint32_t> estThrPssDl_1;
+
+  estThrPssDl_1.push_back (132000); // User 0 estimated TTI throughput from PSS
+  estThrPssDl_1.push_back (132000); // User 1 estimated TTI throughput from PSS
+  estThrPssDl_1.push_back (132000); // User 2 estimated TTI throughput from PSS
+
+  AddTestCase (new LenaDeactivateBearerTestCase (dist_1,estThrPssDl_1,packetSize_1,1,errorModel,true), TestCase::QUICK);
+}
+
+static LenaTestBearerDeactivateSuite lenaTestBearerDeactivateSuite;
+
+
+std::string
+LenaDeactivateBearerTestCase::BuildNameString (uint16_t nUser, std::vector<uint16_t> dist)
+{
+  std::ostringstream oss;
+  oss << "distances (m) = [ ";
+  for (std::vector<uint16_t>::iterator it = dist.begin (); it != dist.end (); ++it)
+    {
+      oss << *it << " ";
+    }
+  oss << "]";
+  return oss.str ();
+}
+
+LenaDeactivateBearerTestCase::LenaDeactivateBearerTestCase (std::vector<uint16_t> dist, std::vector<uint32_t> estThrPssDl, std::vector<uint16_t> packetSize, uint16_t interval,bool errorModelEnabled, bool useIdealRrc)
+  : TestCase (BuildNameString (dist.size (), dist)),
+    m_nUser (dist.size ()),
+    m_dist (dist),
+    m_packetSize (packetSize),
+    m_interval (interval),
+    m_estThrPssDl (estThrPssDl),
+    m_errorModelEnabled (errorModelEnabled)
+{
+}
+
+LenaDeactivateBearerTestCase::~LenaDeactivateBearerTestCase ()
+{
+}
+
+void
+LenaDeactivateBearerTestCase::DoRun (void)
+{
+  if (!m_errorModelEnabled)
+    {
+      Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
+      Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
+    }
+
+  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
+
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
+  lteHelper->SetEpcHelper (epcHelper);
+
+  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.001)));
+  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
+  Ipv4AddressHelper ipv4h;
+  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
+  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
+  // interface 0 is localhost, 1 is the p2p device
+  Ipv4Address 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);
+
+  // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
+
+  // LogComponentEnable ("LenaTestDeactivateBearer", LOG_LEVEL_ALL);
+  // LogComponentEnable ("LteHelper", logLevel);
+  // LogComponentEnable ("EpcHelper", logLevel);
+  // LogComponentEnable ("EpcEnbApplication", logLevel);
+  // LogComponentEnable ("EpcSgwPgwApplication", logLevel);
+  // LogComponentEnable ("EpcMme", logLevel);
+  // LogComponentEnable ("LteEnbRrc", logLevel);
+
+  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  NodeContainer ueNodes;
+  enbNodes.Create (1);
+  ueNodes.Create (m_nUser);
+
+  // Install Mobility Model
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (ueNodes);
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  NetDeviceContainer ueDevs;
+  lteHelper->SetSchedulerType ("ns3::PssFfMacScheduler");
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  ueDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
+  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
+  enbPhy->SetAttribute ("TxPower", DoubleValue (30.0));
+  enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
+
+  // Set UEs' position and power
+  for (int i = 0; i < m_nUser; i++)
+    {
+      Ptr<ConstantPositionMobilityModel> mm = ueNodes.Get (i)->GetObject<ConstantPositionMobilityModel> ();
+      mm->SetPosition (Vector (m_dist.at (i), 0.0, 0.0));
+      Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> ();
+      Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
+      uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
+      uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
+    }
+
+  // Install the IP stack on the UEs
+  internet.Install (ueNodes);
+  Ipv4InterfaceContainer ueIpIface;
+  ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueDevs));
+
+  // Assign IP address to UEs
+  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 a UE to a eNB
+  lteHelper->Attach (ueDevs, enbDevs.Get (0));
+
+  // Activate an EPS bearer on all UEs
+
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      Ptr<NetDevice> ueDevice = ueDevs.Get (u);
+      GbrQosInformation qos;
+      qos.gbrDl = (m_packetSize.at (u) + 32) * (1000 / m_interval) * 8;  // bit/s, considering IP, UDP, RLC, PDCP header size
+      qos.gbrUl = (m_packetSize.at (u) + 32) * (1000 / m_interval) * 8;
+      qos.mbrDl = qos.gbrDl;
+      qos.mbrUl = qos.gbrUl;
+
+      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+      EpsBearer bearer (q, qos);
+      bearer.arp.priorityLevel = 15 - (u + 1);
+      bearer.arp.preemptionCapability = true;
+      bearer.arp.preemptionVulnerability = true;
+      lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer, EpcTft::Default ());
+    }
+
+
+  // Install downlink and uplink applications
+  uint16_t dlPort = 1234;
+  uint16_t ulPort = 2000;
+  PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), dlPort));
+  PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), ulPort));
+  ApplicationContainer clientApps;
+  ApplicationContainer serverApps;
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      ++ulPort;
+      serverApps.Add (dlPacketSinkHelper.Install (ueNodes.Get (u))); // receive packets from remotehost
+      serverApps.Add (ulPacketSinkHelper.Install (remoteHost));  // receive packets from UEs
+
+      UdpClientHelper dlClient (ueIpIface.GetAddress (u), dlPort); // uplink packets generator
+      dlClient.SetAttribute ("Interval", TimeValue (MilliSeconds (m_interval)));
+      dlClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
+      dlClient.SetAttribute ("PacketSize", UintegerValue (m_packetSize.at (u)));
+
+      UdpClientHelper ulClient (remoteHostAddr, ulPort);           // downlink packets generator
+      ulClient.SetAttribute ("Interval", TimeValue (MilliSeconds (m_interval)));
+      ulClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
+      ulClient.SetAttribute ("PacketSize", UintegerValue (m_packetSize.at (u)));
+
+      clientApps.Add (dlClient.Install (remoteHost));
+      clientApps.Add (ulClient.Install (ueNodes.Get (u)));
+    }
+
+
+  serverApps.Start (Seconds (0.030));
+  clientApps.Start (Seconds (0.030));
+
+  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
+  double statsDuration = 1.0;
+  double tolerance = 0.1;
+
+  lteHelper->EnableRlcTraces ();
+  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
+  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
+
+
+  //get ue device pointer for UE-ID 0 IMSI 1 and enb device pointer
+  Ptr<NetDevice> ueDevice = ueDevs.Get (0);
+  Ptr<NetDevice> enbDevice = enbDevs.Get (0);
+
+  /*
+   *   Instantiate De-activation using Simulator::Schedule() method which will initiate bearer de-activation after deActivateTime
+   *   Instantiate De-activation in sequence (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
+   */
+  Time deActivateTime (Seconds (1.5));
+  Simulator::Schedule (deActivateTime, &LteHelper::DeActivateDedicatedEpsBearer, lteHelper, ueDevice, enbDevice, 2);
+
+  //stop simulation after 3 seconds
+  Simulator::Stop (Seconds (3.0));
+
+  Simulator::Run ();
+
+  NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s)");
+  std::vector <uint64_t> dlDataRxed;
+  std::vector <uint64_t> dlDataTxed;
+  for (int i = 0; i < m_nUser; i++)
+    {
+      // get the imsi
+      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
+      // get the lcId
+      // lcId is hard-coded, since only one dedicated bearer is added
+      uint8_t lcId = 4;
+      dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
+      dlDataTxed.push_back (rlcStats->GetDlTxData (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_estThrPssDl.at (i));
+      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes txed " << (double)dlDataTxed.at (i) << "  thr " << (double)dlDataTxed.at (i) / statsDuration);
+    }
+
+  for (int i = 0; i < m_nUser; i++)
+    {
+      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
+
+      /*
+       * For UE ID-0 IMSI 1, LCID=4 is deactivated hence If traffic seen on it, test case should fail
+       * Else For other UE's, test case should validate throughput
+       */
+      if (imsi == 1)
+        {
+          NS_TEST_ASSERT_MSG_EQ ((double)dlDataTxed.at (i), 0, "Invalid LCID in Statistics ");
+        }
+      else
+        {
+          NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataTxed.at (i) / statsDuration, m_estThrPssDl.at (i), m_estThrPssDl.at (i) * tolerance, " Unfair Throughput!");
+        }
+    }
+
+  Simulator::Destroy ();
+}
+}
diff -Naur ns-3.21/src/lte/test/lte-test-deactivate-bearer.h ns-3.22/src/lte/test/lte-test-deactivate-bearer.h
--- ns-3.21/src/lte/test/lte-test-deactivate-bearer.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/lte/test/lte-test-deactivate-bearer.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,37 @@
+#ifndef LENA_TEST_DEACTIVATE_BEARER_H
+#define LENA_TEST_DEACTIVATE_BEARER_H
+
+#include "ns3/simulator.h"
+#include "ns3/test.h"
+
+
+namespace ns3 {
+
+class LenaDeactivateBearerTestCase : public TestCase
+{
+public:
+  LenaDeactivateBearerTestCase (std::vector<uint16_t> dist, std::vector<uint32_t> estThrPssDl, std::vector<uint16_t> packetSize, uint16_t interval, bool  errorModelEnabled, bool useIdealRrc);
+  virtual ~LenaDeactivateBearerTestCase ();
+
+private:
+  static std::string BuildNameString (uint16_t nUser, std::vector<uint16_t> dist);
+  virtual void DoRun (void);
+  uint16_t m_nUser;
+  std::vector<uint16_t> m_dist;
+  std::vector<uint16_t> m_packetSize;  // byte
+  uint16_t m_interval;    // ms
+  std::vector<uint32_t> m_estThrPssDl;
+  bool m_errorModelEnabled;
+};
+
+
+
+class LenaTestBearerDeactivateSuite : public TestSuite
+{
+public:
+  LenaTestBearerDeactivateSuite ();
+};
+
+} // namespace ns3
+
+#endif
diff -Naur ns-3.21/src/lte/test/lte-test-downlink-power-control.cc ns-3.22/src/lte/test/lte-test-downlink-power-control.cc
--- ns-3.21/src/lte/test/lte-test-downlink-power-control.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-downlink-power-control.cc	2015-02-05 15:46:22.000000000 -0800
@@ -47,10 +47,10 @@
 #include "lte-test-downlink-power-control.h"
 #include <ns3/lte-rrc-sap.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteDownlinkPowerControlTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteDownlinkPowerControlTest");
+
 /**
  * TestSuite
  */
diff -Naur ns-3.21/src/lte/test/lte-test-downlink-sinr.cc ns-3.22/src/lte/test/lte-test-downlink-sinr.cc
--- ns-3.21/src/lte/test/lte-test-downlink-sinr.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-downlink-sinr.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,10 +35,10 @@
 #include <ns3/lte-control-messages.h>
 #include "ns3/lte-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteDownlinkSinrTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteDownlinkSinrTest");
+
 /**
  * Test 1.1 SINR calculation in downlink
  */
diff -Naur ns-3.21/src/lte/test/lte-test-earfcn.cc ns-3.22/src/lte/test/lte-test-earfcn.cc
--- ns-3.21/src/lte/test/lte-test-earfcn.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-earfcn.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 
 #include "ns3/lte-spectrum-value-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteTestEarfcn");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteTestEarfcn");
+
 class LteEarfcnTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/lte/test/lte-test-entities.cc ns-3.22/src/lte/test/lte-test-entities.cc
--- ns-3.21/src/lte/test/lte-test-entities.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-entities.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,9 @@
 
 #include "lte-test-entities.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteTestEntities");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteTestEntities");
 
 /////////////////////////////////////////////////////////////////////
 
diff -Naur ns-3.21/src/lte/test/lte-test-fading.cc ns-3.22/src/lte/test/lte-test-fading.cc
--- ns-3.21/src/lte/test/lte-test-fading.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-fading.cc	2015-02-05 15:46:22.000000000 -0800
@@ -50,10 +50,9 @@
 // #include <ns3/trace-fading-loss-model.h>
 // #include <ns3/spectrum-value.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteFadingTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteFadingTest");
 
 /**
 * Test 1.1 Fading compound test
diff -Naur ns-3.21/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -51,10 +51,10 @@
 
 #include "lte-test-fdbet-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestFdBetFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestFdBetFfMacScheduler");
+
 LenaTestFdBetFfMacSchedulerSuite::LenaTestFdBetFfMacSchedulerSuite ()
   : TestSuite ("lte-fdbet-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -53,10 +53,10 @@
 
 #include "lte-test-fdmt-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestFdMtFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestFdMtFfMacScheduler");
+
 LenaTestFdMtFfMacSchedulerSuite::LenaTestFdMtFfMacSchedulerSuite ()
   : TestSuite ("lte-fdmt-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -58,10 +58,10 @@
 
 #include "lte-test-fdtbfq-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestFdTbfqFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestFdTbfqFfMacScheduler");
+
 LenaTestFdTbfqFfMacSchedulerSuite::LenaTestFdTbfqFfMacSchedulerSuite ()
   : TestSuite ("lte-fdtbfq-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-frequency-reuse.cc ns-3.22/src/lte/test/lte-test-frequency-reuse.cc
--- ns-3.21/src/lte/test/lte-test-frequency-reuse.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-frequency-reuse.cc	2015-02-05 15:46:22.000000000 -0800
@@ -52,10 +52,10 @@
 #include "lte-test-frequency-reuse.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("LteFrequencyReuseTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteFrequencyReuseTest");
+
 /**
  * TestSuite
  */
diff -Naur ns-3.21/src/lte/test/lte-test-harq.cc ns-3.22/src/lte/test/lte-test-harq.cc
--- ns-3.21/src/lte/test/lte-test-harq.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-harq.cc	2015-02-05 15:46:22.000000000 -0800
@@ -52,10 +52,9 @@
 
 #include "lte-test-harq.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestHarq");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestHarq");
 
 LenaTestHarqSuite::LenaTestHarqSuite ()
   : TestSuite ("lte-harq", SYSTEM)
@@ -254,7 +253,7 @@
       double rxed = rlcStats->GetDlRxData (imsi, lcId);
       double tolerance = 0.1;
 
-      NS_LOG_INFO (" User " << i << " imsi " << imsi << " bytes rxed/t " << rxed/statsDuration << " txed/t " << txed/statsDuration << " thr Ref " << m_throughputRef << " Err " << (abs (txed/statsDuration - m_throughputRef)) / m_throughputRef);
+      NS_LOG_INFO (" User " << i << " imsi " << imsi << " bytes rxed/t " << rxed/statsDuration << " txed/t " << txed/statsDuration << " thr Ref " << m_throughputRef << " Err " << (std::abs (txed/statsDuration - m_throughputRef)) / m_throughputRef);
 
       NS_TEST_ASSERT_MSG_EQ_TOL (txed/statsDuration, m_throughputRef, m_throughputRef * tolerance, " Unexpected Throughput!");
       NS_TEST_ASSERT_MSG_EQ_TOL (rxed/statsDuration, m_throughputRef, m_throughputRef * tolerance, " Unexpected Throughput!");
diff -Naur ns-3.21/src/lte/test/lte-test-interference.cc ns-3.22/src/lte/test/lte-test-interference.cc
--- ns-3.21/src/lte/test/lte-test-interference.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-interference.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,10 +39,9 @@
 
 #include "lte-test-sinr-chunk-processor.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteInterferenceTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteInterferenceTest");
 
 void
 LteTestDlSchedulingCallback (LteInterferenceTestCase *testcase, std::string path,
@@ -119,6 +118,7 @@
   Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
   lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
   lteHelper->SetAttribute ("UseIdealRrc", BooleanValue (false));
+  lteHelper->SetAttribute ("UsePdschForCqiGeneration", BooleanValue (true));
 
   //Disable Uplink Power Control
   Config::SetDefault ("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue (false));
@@ -234,8 +234,9 @@
 LteInterferenceTestCase::DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
                                        uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
 {
-  // need to allow for RRC connection establishment + CQI feedback reception
-  if (Simulator::Now () > MilliSeconds (35))
+  NS_LOG_FUNCTION (frameNo << subframeNo << rnti << (uint32_t) mcsTb1 << sizeTb1 << (uint32_t) mcsTb2 << sizeTb2);
+  // need to allow for RRC connection establishment + CQI feedback reception + persistent data transmission
+  if (Simulator::Now () > MilliSeconds (65))
     {
       NS_TEST_ASSERT_MSG_EQ ((uint32_t)mcsTb1, (uint32_t)m_dlMcs, "Wrong DL MCS ");
     }
@@ -245,6 +246,7 @@
 LteInterferenceTestCase::UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
                                        uint8_t mcs, uint16_t sizeTb)
 {
+  NS_LOG_FUNCTION (frameNo << subframeNo << rnti << (uint32_t) mcs << sizeTb);
   // need to allow for RRC connection establishment + SRS transmission
   if (Simulator::Now () > MilliSeconds (50))
     {
diff -Naur ns-3.21/src/lte/test/lte-test-interference-fr.cc ns-3.22/src/lte/test/lte-test-interference-fr.cc
--- ns-3.21/src/lte/test/lte-test-interference-fr.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-interference-fr.cc	2015-02-05 15:46:22.000000000 -0800
@@ -46,10 +46,10 @@
 #include "ns3/lte-spectrum-value-helper.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("LteInterferenceFrTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteInterferenceFrTest");
+
 /**
  * TestSuite
  */
diff -Naur ns-3.21/src/lte/test/lte-test-link-adaptation.cc ns-3.22/src/lte/test/lte-test-link-adaptation.cc
--- ns-3.21/src/lte/test/lte-test-link-adaptation.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-link-adaptation.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,10 +35,9 @@
 
 #include "lte-test-sinr-chunk-processor.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteLinkAdaptationTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteLinkAdaptationTest");
 
 /**
  * Test 1.3 Link Adaptation
diff -Naur ns-3.21/src/lte/test/lte-test-mimo.cc ns-3.22/src/lte/test/lte-test-mimo.cc
--- ns-3.21/src/lte/test/lte-test-mimo.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-mimo.cc	2015-02-05 15:46:22.000000000 -0800
@@ -56,10 +56,9 @@
 #include "lte-test-mimo.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("LteTestMimo");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteTestMimo");
 
 LenaTestMimoSuite::LenaTestMimoSuite ()
   : TestSuite ("lte-mimo", SYSTEM)
diff -Naur ns-3.21/src/lte/test/lte-test-pathloss-model.cc ns-3.22/src/lte/test/lte-test-pathloss-model.cc
--- ns-3.21/src/lte/test/lte-test-pathloss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-pathloss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -51,10 +51,9 @@
 #include "lte-test-ue-phy.h"
 #include "lte-test-pathloss-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("LtePathlossModelTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LtePathlossModelTest");
 
 /**
  * Test 1.1 Pathloss compound test
diff -Naur ns-3.21/src/lte/test/lte-test-pf-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-pf-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -50,10 +50,10 @@
 
 #include "lte-test-pf-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestPfFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestPfFfMacScheduler");
+
 LenaTestPfFfMacSchedulerSuite::LenaTestPfFfMacSchedulerSuite ()
   : TestSuite ("lte-pf-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-phy-error-model.cc ns-3.22/src/lte/test/lte-test-phy-error-model.cc
--- ns-3.21/src/lte/test/lte-test-phy-error-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-phy-error-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -53,10 +53,9 @@
 
 #include "lte-test-phy-error-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteTestPhyErrorModel");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteTestPhyErrorModel");
 
 LenaTestPhyErrorModelSuite::LenaTestPhyErrorModelSuite ()
   : TestSuite ("lte-phy-error-model", SYSTEM)
diff -Naur ns-3.21/src/lte/test/lte-test-pss-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-pss-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -58,10 +58,10 @@
 
 #include "lte-test-pss-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestPssFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestPssFfMacScheduler");
+
 LenaTestPssFfMacSchedulerSuite::LenaTestPssFfMacSchedulerSuite ()
   : TestSuite ("lte-pss-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-rlc-am-e2e.cc ns-3.22/src/lte/test/lte-test-rlc-am-e2e.cc
--- ns-3.21/src/lte/test/lte-test-rlc-am-e2e.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-rlc-am-e2e.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,10 +37,9 @@
 #include "lte-test-entities.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcAmE2eTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcAmE2eTest");
 
 /**
  * Test x.x.x RLC AM: End-to-end flow
diff -Naur ns-3.21/src/lte/test/lte-test-rlc-am-transmitter.cc ns-3.22/src/lte/test/lte-test-rlc-am-transmitter.cc
--- ns-3.21/src/lte/test/lte-test-rlc-am-transmitter.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-rlc-am-transmitter.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,9 @@
 #include "lte-test-rlc-am-transmitter.h"
 #include "lte-test-entities.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcAmTransmitterTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcAmTransmitterTest");
 
 /**
  * TestSuite 4.1.1 RLC AM: Only transmitter
diff -Naur ns-3.21/src/lte/test/lte-test-rlc-um-e2e.cc ns-3.22/src/lte/test/lte-test-rlc-um-e2e.cc
--- ns-3.21/src/lte/test/lte-test-rlc-um-e2e.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-rlc-um-e2e.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,9 @@
 #include "lte-test-rlc-um-e2e.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcUmE2eTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcUmE2eTest");
 
 /**
  * Test x.x.x RLC UM: End-to-end flow
diff -Naur ns-3.21/src/lte/test/lte-test-rlc-um-transmitter.cc ns-3.22/src/lte/test/lte-test-rlc-um-transmitter.cc
--- ns-3.21/src/lte/test/lte-test-rlc-um-transmitter.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-rlc-um-transmitter.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,9 @@
 #include "lte-test-rlc-um-transmitter.h"
 #include "lte-test-entities.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteRlcUmTransmitterTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteRlcUmTransmitterTest");
 
 /**
  * TestSuite 4.1.1 RLC UM: Only transmitter
diff -Naur ns-3.21/src/lte/test/lte-test-rr-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-rr-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -48,10 +48,9 @@
 
 #include "lte-test-rr-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestRrFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestRrFfMacScheduler");
 
 LenaTestRrFfMacSchedulerSuite::LenaTestRrFfMacSchedulerSuite ()
   : TestSuite ("lte-rr-ff-mac-scheduler", SYSTEM)
diff -Naur ns-3.21/src/lte/test/lte-test-sinr-chunk-processor.cc ns-3.22/src/lte/test/lte-test-sinr-chunk-processor.cc
--- ns-3.21/src/lte/test/lte-test-sinr-chunk-processor.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-sinr-chunk-processor.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,9 @@
 #include <ns3/spectrum-value.h>
 #include "lte-test-sinr-chunk-processor.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteTestSinrChunkProcessor");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteTestSinrChunkProcessor");
 
 LteTestSinrChunkProcessor::LteTestSinrChunkProcessor ()
 {
diff -Naur ns-3.21/src/lte/test/lte-test-spectrum-value-helper.cc ns-3.22/src/lte/test/lte-test-spectrum-value-helper.cc
--- ns-3.21/src/lte/test/lte-test-spectrum-value-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-spectrum-value-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/spectrum-test.h"
 #include "ns3/lte-spectrum-value-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteTestSpectrumValueHelper");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteTestSpectrumValueHelper");
+
 class LteSpectrumModelTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -51,10 +51,10 @@
 
 #include "lte-test-tdbet-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestTdBetFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestTdBetFfMacScheduler");
+
 LenaTestTdBetFfMacSchedulerSuite::LenaTestTdBetFfMacSchedulerSuite ()
   : TestSuite ("lte-tdbet-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -53,10 +53,10 @@
 
 #include "lte-test-tdmt-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestTdMtFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestTdMtFfMacScheduler");
+
 LenaTestTdMtFfMacSchedulerSuite::LenaTestTdMtFfMacSchedulerSuite ()
   : TestSuite ("lte-tdmt-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -58,10 +58,10 @@
 
 #include "lte-test-tdtbfq-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestTdTbfqFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestTdTbfqFfMacScheduler");
+
 LenaTestTdTbfqFfMacSchedulerSuite::LenaTestTdTbfqFfMacSchedulerSuite ()
   : TestSuite ("lte-tdtbfq-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-tta-ff-mac-scheduler.cc ns-3.22/src/lte/test/lte-test-tta-ff-mac-scheduler.cc
--- ns-3.21/src/lte/test/lte-test-tta-ff-mac-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-tta-ff-mac-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -53,10 +53,10 @@
 
 #include "lte-test-tta-ff-mac-scheduler.h"
 
-NS_LOG_COMPONENT_DEFINE ("LenaTestTtaFfMacScheduler");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LenaTestTtaFfMacScheduler");
+
 LenaTestTtaFfMacSchedulerSuite::LenaTestTtaFfMacSchedulerSuite ()
   : TestSuite ("lte-tta-ff-mac-scheduler", SYSTEM)
 {
diff -Naur ns-3.21/src/lte/test/lte-test-ue-measurements.cc ns-3.22/src/lte/test/lte-test-ue-measurements.cc
--- ns-3.21/src/lte/test/lte-test-ue-measurements.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-ue-measurements.cc	2015-02-05 15:46:22.000000000 -0800
@@ -54,10 +54,9 @@
 #include "lte-test-sinr-chunk-processor.h"
 #include <ns3/lte-common.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteUeMeasurementsTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteUeMeasurementsTest");
 
 // ===== LTE-UE-MEASUREMENTS TEST SUITE ==================================== //
 
diff -Naur ns-3.21/src/lte/test/lte-test-ue-phy.cc ns-3.22/src/lte/test/lte-test-ue-phy.cc
--- ns-3.21/src/lte/test/lte-test-ue-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-ue-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,9 @@
 #include "ns3/log.h"
 #include "lte-test-ue-phy.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteTestUePhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LteTestUePhy");
  
 NS_OBJECT_ENSURE_REGISTERED (LteTestUePhy);
 
diff -Naur ns-3.21/src/lte/test/lte-test-uplink-power-control.cc ns-3.22/src/lte/test/lte-test-uplink-power-control.cc
--- ns-3.21/src/lte/test/lte-test-uplink-power-control.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-uplink-power-control.cc	2015-02-05 15:46:22.000000000 -0800
@@ -48,10 +48,10 @@
 #include "lte-test-uplink-power-control.h"
 #include <ns3/lte-rrc-sap.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteUplinkPowerControlTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteUplinkPowerControlTest");
+
 /**
  * TestSuite
  */
diff -Naur ns-3.21/src/lte/test/lte-test-uplink-sinr.cc ns-3.22/src/lte/test/lte-test-uplink-sinr.cc
--- ns-3.21/src/lte/test/lte-test-uplink-sinr.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/lte-test-uplink-sinr.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,10 +35,9 @@
 
 #include <ns3/lte-helper.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteUplinkSinrTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteUplinkSinrTest");
 
 /**
  * Test 1.2 SINR calculation in uplink
diff -Naur ns-3.21/src/lte/test/test-asn1-encoding.cc ns-3.22/src/lte/test/test-asn1-encoding.cc
--- ns-3.21/src/lte/test/test-asn1-encoding.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-asn1-encoding.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ns3/lte-rrc-header.h"
 #include "ns3/lte-rrc-sap.h"
 
-NS_LOG_COMPONENT_DEFINE ("Asn1EncodingTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("Asn1EncodingTest");
+
 class TestUtils
 {
 public:
diff -Naur ns-3.21/src/lte/test/test-epc-tft-classifier.cc ns-3.22/src/lte/test/test-epc-tft-classifier.cc
--- ns-3.21/src/lte/test/test-epc-tft-classifier.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-epc-tft-classifier.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,10 +33,10 @@
 
 #include <iomanip>
 
-NS_LOG_COMPONENT_DEFINE ("TestEpcTftClassifier");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("TestEpcTftClassifier");
+
 class EpcTftClassifierTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/lte/test/test-lte-antenna.cc ns-3.22/src/lte/test/test-lte-antenna.cc
--- ns-3.21/src/lte/test/test-lte-antenna.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-lte-antenna.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,10 +39,9 @@
 
 #include "lte-test-sinr-chunk-processor.h"
 
-NS_LOG_COMPONENT_DEFINE ("LteAntennaTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteAntennaTest");
 
 
 class LteEnbAntennaTestCase : public TestCase
@@ -176,7 +175,7 @@
   const double noisePowerDbm = ktDbm + 10 * std::log10 (25 * 180000); // corresponds to kT*bandwidth in linear units
   const double ueNoiseFigureDb = 9.0; // default UE noise figure
   const double enbNoiseFigureDb = 5.0; // default eNB noise figure
-  double tolerance = (m_antennaGainDb != 0) ? abs (m_antennaGainDb)*0.001 : 0.001;
+  double tolerance = (m_antennaGainDb != 0) ? std::abs (m_antennaGainDb) * 0.001 : 0.001;
 
   // first test with SINR from LteTestSinrChunkProcessor
   // this can only be done for not-too-bad SINR otherwise the measurement won't be available
diff -Naur ns-3.21/src/lte/test/test-lte-epc-e2e-data.cc ns-3.22/src/lte/test/test-lte-epc-e2e-data.cc
--- ns-3.21/src/lte/test/test-lte-epc-e2e-data.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-lte-epc-e2e-data.cc	2015-02-05 15:46:22.000000000 -0800
@@ -46,11 +46,9 @@
 
 using namespace ns3;
 
-
 NS_LOG_COMPONENT_DEFINE ("LteEpcE2eData");
 
 
-
 struct BearerTestData
 {
   BearerTestData (uint32_t n, uint32_t s, double i);
diff -Naur ns-3.21/src/lte/test/test-lte-handover-delay.cc ns-3.22/src/lte/test/test-lte-handover-delay.cc
--- ns-3.21/src/lte/test/test-lte-handover-delay.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-lte-handover-delay.cc	2015-02-05 15:46:22.000000000 -0800
@@ -44,10 +44,9 @@
 #include <ns3/position-allocator.h>
 
 
-NS_LOG_COMPONENT_DEFINE("LteHandoverDelayTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE("LteHandoverDelayTest");
 
 /*
  * HANDOVER DELAY TEST CASE
diff -Naur ns-3.21/src/lte/test/test-lte-handover-target.cc ns-3.22/src/lte/test/test-lte-handover-target.cc
--- ns-3.21/src/lte/test/test-lte-handover-target.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-lte-handover-target.cc	2015-02-05 15:46:22.000000000 -0800
@@ -48,10 +48,9 @@
 #include <ns3/lte-enb-net-device.h>
 #include <ns3/lte-enb-phy.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteHandoverTargetTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteHandoverTargetTest");
 
 /**
  * \brief Testing a handover algorithm, verifying that it selects the right
diff -Naur ns-3.21/src/lte/test/test-lte-rrc.cc ns-3.22/src/lte/test/test-lte-rrc.cc
--- ns-3.21/src/lte/test/test-lte-rrc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-lte-rrc.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include <ns3/lte-module.h>
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("LteRrcTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteRrcTest");
+
 class LteRrcConnectionEstablishmentTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/lte/test/test-lte-x2-handover.cc ns-3.22/src/lte/test/test-lte-x2-handover.cc
--- ns-3.21/src/lte/test/test-lte-x2-handover.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-lte-x2-handover.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include <ns3/applications-module.h>
 #include <ns3/point-to-point-module.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteX2HandoverTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteX2HandoverTest");
+
 struct HandoverEvent
 {
   Time startTime;
diff -Naur ns-3.21/src/lte/test/test-lte-x2-handover-measures.cc ns-3.22/src/lte/test/test-lte-x2-handover-measures.cc
--- ns-3.21/src/lte/test/test-lte-x2-handover-measures.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/test/test-lte-x2-handover-measures.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,9 @@
 #include <ns3/applications-module.h>
 #include <ns3/point-to-point-module.h>
 
-NS_LOG_COMPONENT_DEFINE ("LteX2HandoverMeasuresTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("LteX2HandoverMeasuresTest");
 
 struct CheckPointEvent
 {
diff -Naur ns-3.21/src/lte/wscript ns-3.22/src/lte/wscript
--- ns-3.21/src/lte/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/lte/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -169,6 +169,7 @@
         'test/lte-test-cell-selection.cc',
         'test/test-lte-handover-delay.cc',
         'test/test-lte-handover-target.cc',
+        'test/lte-test-deactivate-bearer.cc',
         'test/lte-ffr-simple.cc',
         'test/lte-test-downlink-power-control.cc',
         'test/lte-test-uplink-power-control.cc',
diff -Naur ns-3.21/src/mesh/bindings/modulegen__gcc_ILP32.py ns-3.22/src/mesh/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/mesh/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -23,7 +23,7 @@
     ## 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_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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], 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]
@@ -1075,11 +1075,21 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): uint16_t ns3::BlockAckAgreement::GetWinEnd() const [member function]
+    cls.add_method('GetWinEnd', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsAmsduSupported() const [member function]
     cls.add_method('IsAmsduSupported', 
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsHtSupported() const [member function]
+    cls.add_method('IsHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsImmediateBlockAck() const [member function]
     cls.add_method('IsImmediateBlockAck', 
                    'bool', 
@@ -1097,6 +1107,10 @@
     cls.add_method('SetDelayedBlockAck', 
                    'void', 
                    [])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetHtSupported(bool htSupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'htSupported')])
     ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetImmediateBlockAck() [member function]
     cls.add_method('SetImmediateBlockAck', 
                    'void', 
@@ -1109,11 +1123,23 @@
     cls.add_method('SetTimeout', 
                    'void', 
                    [param('uint16_t', 'timeout')])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetWinEnd(uint16_t seq) [member function]
+    cls.add_method('SetWinEnd', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
     return
 
 def register_Ns3BlockAckManager_methods(root_module, cls):
     ## block-ack-manager.h (module 'wifi'): ns3::BlockAckManager::BlockAckManager() [constructor]
     cls.add_constructor([])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::AlreadyExists(uint16_t currentSeq, ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('AlreadyExists', 
+                   'bool', 
+                   [param('uint16_t', 'currentSeq'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CompleteAmpduExchange(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduExchange', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CreateAgreement(ns3::MgtAddBaRequestHeader const * reqHdr, ns3::Mac48Address recipient) [member function]
     cls.add_method('CreateAgreement', 
                    'void', 
@@ -1170,6 +1196,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::NeedBarRetransmission(uint8_t tid, uint16_t seqNumber, ns3::Mac48Address recipient) [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('uint16_t', 'seqNumber'), param('ns3::Mac48Address', 'recipient')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyAgreementEstablished(ns3::Mac48Address recipient, uint8_t tid, uint16_t startingSeq) [member function]
     cls.add_method('NotifyAgreementEstablished', 
                    'void', 
@@ -1178,14 +1208,22 @@
     cls.add_method('NotifyAgreementUnsuccessful', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('NotifyGotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber) [member function]
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, ns3::WifiMacHeader::QosAckPolicy policy) [member function]
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
-                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber')])
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemovePacket', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetBlockAckInactivityCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetBlockAckInactivityCallback', 
                    'void', 
@@ -1210,14 +1248,26 @@
     cls.add_method('SetQueue', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiMacQueue >', 'queue')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxFailedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
     cls.add_method('SetTxMiddle', 
                    'void', 
                    [param('ns3::MacTxMiddle *', 'txMiddle')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetUnblockDestinationCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetUnblockDestinationCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> manager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'manager')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::StorePacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr, ns3::Time tStamp) [member function]
     cls.add_method('StorePacket', 
                    'void', 
@@ -2427,10 +2477,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2856,10 +2906,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3158,7 +3208,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3209,6 +3264,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3285,6 +3345,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3319,6 +3383,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3453,10 +3519,10 @@
     cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
-    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::WifiNetDevice> device) const [member function]
+    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::WifiNetDevice >', 'device')], 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
@@ -3553,6 +3619,8 @@
     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_ness [variable]
+    cls.add_instance_attribute('m_ness', 'uint32_t', 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]
@@ -5145,6 +5213,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiMac::GetWifiPhy() const [member function]
+    cls.add_method('GetWifiPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiRemoteStationManager> ns3::WifiMac::GetWifiRemoteStationManager() const [member function]
+    cls.add_method('GetWifiRemoteStationManager', 
+                   'ns3::Ptr< ns3::WifiRemoteStationManager >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyPromiscRx', 
                    'void', 
@@ -5165,6 +5243,11 @@
     cls.add_method('NotifyTxDrop', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -5713,11 +5796,10 @@
                    '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -5743,6 +5825,11 @@
                    'uint16_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -6163,14 +6250,13 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
@@ -6178,19 +6264,19 @@
                    '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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
                    [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')], 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
@@ -6305,10 +6391,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
     cls.add_method('SetChannelBonding', 
@@ -6370,6 +6456,11 @@
                    'void', 
                    [param('bool', 'stbc')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -6382,6 +6473,10 @@
     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::AddAllSupportedModes(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedModes', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
@@ -6640,6 +6735,11 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -6660,6 +6760,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiRemoteStationManager::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::WifiMac >', 
+                   [], 
+                   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', 
@@ -6675,6 +6780,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNess(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNess', 
+                   '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', 
@@ -6685,6 +6795,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   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', 
@@ -7396,8 +7511,8 @@
                    'ns3::TypeOfStation', 
                    [], 
                    is_const=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetQueue() const [member function]
-    cls.add_method('GetQueue', 
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetEdcaQueue() const [member function]
+    cls.add_method('GetEdcaQueue', 
                    'ns3::Ptr< ns3::WifiMacQueue >', 
                    [], 
                    is_const=True)
@@ -7440,6 +7555,23 @@
                    'ns3::Ptr< ns3::MsduAggregator >', 
                    [], 
                    is_const=True)
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBaAgreementExists', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPacketsInBa', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteAmpduTransfer(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduTransfer', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedsAccess() const [member function]
     cls.add_method('NeedsAccess', 
                    'bool', 
@@ -7461,6 +7593,14 @@
     cls.add_method('NotifyChannelSwitching', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifySleep() [member function]
+    cls.add_method('NotifySleep', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyWakeUp() [member function]
+    cls.add_method('NotifyWakeUp', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
                    'void', 
@@ -7473,10 +7613,10 @@
     cls.add_method('GotAck', 
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
@@ -7525,6 +7665,10 @@
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedFragmentation() const [member function]
     cls.add_method('NeedFragmentation', 
                    'bool', 
@@ -7592,6 +7736,42 @@
     cls.add_method('SendDelbaFrame', 
                    'void', 
                    [param('ns3::Mac48Address', 'addr'), param('uint8_t', 'tid'), param('bool', 'byOriginator')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist() [member function]
+    cls.add_method('GetAmpduExist', 
+                   'bool', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(bool ampdu) [member function]
+    cls.add_method('SetAmpduExist', 
+                   'void', 
+                   [param('bool', 'ampdu')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RemoveRetransmitPacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveRetransmitPacket', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::EdcaTxopN::PeekNextRetransmitPacket(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextRetransmitPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxOk(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxOk', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxFailed(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxFailed', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): int64_t ns3::EdcaTxopN::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -7630,14 +7810,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -7675,8 +7855,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -7697,10 +7877,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3EventImpl_methods(root_module, cls):
@@ -7764,6 +7944,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SetSupportedRates(ns3::SupportedRates * rates) [member function]
+    cls.add_method('SetSupportedRates', 
+                   'void', 
+                   [param('ns3::SupportedRates *', 'rates')])
     return
 
 def register_Ns3HtCapabilities_methods(root_module, cls):
@@ -8685,11 +8869,6 @@
                    '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', 
@@ -8760,6 +8939,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3RegularWifiMac_methods(root_module, cls):
@@ -8909,6 +9093,11 @@
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
     cls.add_method('SetWifiRemoteStationManager', 
                    'void', 
@@ -9140,10 +9329,10 @@
 
 def register_Ns3SupportedRates_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates() [constructor]
     cls.add_constructor([])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -9192,6 +9381,8 @@
     cls.add_method('SetBasicRate', 
                    'void', 
                    [param('uint32_t', 'bs')])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::MAX_SUPPORTED_RATES [variable]
+    cls.add_static_attribute('MAX_SUPPORTED_RATES', 'uint8_t const', is_const=True)
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::extended [variable]
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
diff -Naur ns-3.21/src/mesh/bindings/modulegen__gcc_LP64.py ns-3.22/src/mesh/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/mesh/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -23,7 +23,7 @@
     ## 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_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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], 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]
@@ -1075,11 +1075,21 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): uint16_t ns3::BlockAckAgreement::GetWinEnd() const [member function]
+    cls.add_method('GetWinEnd', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsAmsduSupported() const [member function]
     cls.add_method('IsAmsduSupported', 
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsHtSupported() const [member function]
+    cls.add_method('IsHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsImmediateBlockAck() const [member function]
     cls.add_method('IsImmediateBlockAck', 
                    'bool', 
@@ -1097,6 +1107,10 @@
     cls.add_method('SetDelayedBlockAck', 
                    'void', 
                    [])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetHtSupported(bool htSupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'htSupported')])
     ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetImmediateBlockAck() [member function]
     cls.add_method('SetImmediateBlockAck', 
                    'void', 
@@ -1109,11 +1123,23 @@
     cls.add_method('SetTimeout', 
                    'void', 
                    [param('uint16_t', 'timeout')])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetWinEnd(uint16_t seq) [member function]
+    cls.add_method('SetWinEnd', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
     return
 
 def register_Ns3BlockAckManager_methods(root_module, cls):
     ## block-ack-manager.h (module 'wifi'): ns3::BlockAckManager::BlockAckManager() [constructor]
     cls.add_constructor([])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::AlreadyExists(uint16_t currentSeq, ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('AlreadyExists', 
+                   'bool', 
+                   [param('uint16_t', 'currentSeq'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CompleteAmpduExchange(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduExchange', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CreateAgreement(ns3::MgtAddBaRequestHeader const * reqHdr, ns3::Mac48Address recipient) [member function]
     cls.add_method('CreateAgreement', 
                    'void', 
@@ -1170,6 +1196,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::NeedBarRetransmission(uint8_t tid, uint16_t seqNumber, ns3::Mac48Address recipient) [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('uint16_t', 'seqNumber'), param('ns3::Mac48Address', 'recipient')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyAgreementEstablished(ns3::Mac48Address recipient, uint8_t tid, uint16_t startingSeq) [member function]
     cls.add_method('NotifyAgreementEstablished', 
                    'void', 
@@ -1178,14 +1208,22 @@
     cls.add_method('NotifyAgreementUnsuccessful', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('NotifyGotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber) [member function]
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, ns3::WifiMacHeader::QosAckPolicy policy) [member function]
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
-                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber')])
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemovePacket', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetBlockAckInactivityCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetBlockAckInactivityCallback', 
                    'void', 
@@ -1210,14 +1248,26 @@
     cls.add_method('SetQueue', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiMacQueue >', 'queue')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxFailedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
     cls.add_method('SetTxMiddle', 
                    'void', 
                    [param('ns3::MacTxMiddle *', 'txMiddle')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetUnblockDestinationCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetUnblockDestinationCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> manager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'manager')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::StorePacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr, ns3::Time tStamp) [member function]
     cls.add_method('StorePacket', 
                    'void', 
@@ -2427,10 +2477,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2856,10 +2906,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3158,7 +3208,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3209,6 +3264,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3285,6 +3345,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3319,6 +3383,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3453,10 +3519,10 @@
     cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
-    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::WifiNetDevice> device) const [member function]
+    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::WifiNetDevice >', 'device')], 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
@@ -3553,6 +3619,8 @@
     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_ness [variable]
+    cls.add_instance_attribute('m_ness', 'uint32_t', 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]
@@ -5145,6 +5213,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiMac::GetWifiPhy() const [member function]
+    cls.add_method('GetWifiPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiRemoteStationManager> ns3::WifiMac::GetWifiRemoteStationManager() const [member function]
+    cls.add_method('GetWifiRemoteStationManager', 
+                   'ns3::Ptr< ns3::WifiRemoteStationManager >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyPromiscRx', 
                    'void', 
@@ -5165,6 +5243,11 @@
     cls.add_method('NotifyTxDrop', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -5713,11 +5796,10 @@
                    '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -5743,6 +5825,11 @@
                    'uint16_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -6163,14 +6250,13 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
@@ -6178,19 +6264,19 @@
                    '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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
                    [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')], 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
@@ -6305,10 +6391,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
     cls.add_method('SetChannelBonding', 
@@ -6370,6 +6456,11 @@
                    'void', 
                    [param('bool', 'stbc')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -6382,6 +6473,10 @@
     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::AddAllSupportedModes(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedModes', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
@@ -6640,6 +6735,11 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -6660,6 +6760,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiRemoteStationManager::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::WifiMac >', 
+                   [], 
+                   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', 
@@ -6675,6 +6780,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNess(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNess', 
+                   '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', 
@@ -6685,6 +6795,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   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', 
@@ -7396,8 +7511,8 @@
                    'ns3::TypeOfStation', 
                    [], 
                    is_const=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetQueue() const [member function]
-    cls.add_method('GetQueue', 
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetEdcaQueue() const [member function]
+    cls.add_method('GetEdcaQueue', 
                    'ns3::Ptr< ns3::WifiMacQueue >', 
                    [], 
                    is_const=True)
@@ -7440,6 +7555,23 @@
                    'ns3::Ptr< ns3::MsduAggregator >', 
                    [], 
                    is_const=True)
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBaAgreementExists', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPacketsInBa', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteAmpduTransfer(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduTransfer', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedsAccess() const [member function]
     cls.add_method('NeedsAccess', 
                    'bool', 
@@ -7461,6 +7593,14 @@
     cls.add_method('NotifyChannelSwitching', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifySleep() [member function]
+    cls.add_method('NotifySleep', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyWakeUp() [member function]
+    cls.add_method('NotifyWakeUp', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
                    'void', 
@@ -7473,10 +7613,10 @@
     cls.add_method('GotAck', 
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
@@ -7525,6 +7665,10 @@
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedFragmentation() const [member function]
     cls.add_method('NeedFragmentation', 
                    'bool', 
@@ -7592,6 +7736,42 @@
     cls.add_method('SendDelbaFrame', 
                    'void', 
                    [param('ns3::Mac48Address', 'addr'), param('uint8_t', 'tid'), param('bool', 'byOriginator')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist() [member function]
+    cls.add_method('GetAmpduExist', 
+                   'bool', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(bool ampdu) [member function]
+    cls.add_method('SetAmpduExist', 
+                   'void', 
+                   [param('bool', 'ampdu')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RemoveRetransmitPacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveRetransmitPacket', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::EdcaTxopN::PeekNextRetransmitPacket(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextRetransmitPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxOk(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxOk', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxFailed(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxFailed', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): int64_t ns3::EdcaTxopN::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -7630,14 +7810,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -7675,8 +7855,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -7697,10 +7877,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3EventImpl_methods(root_module, cls):
@@ -7764,6 +7944,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SetSupportedRates(ns3::SupportedRates * rates) [member function]
+    cls.add_method('SetSupportedRates', 
+                   'void', 
+                   [param('ns3::SupportedRates *', 'rates')])
     return
 
 def register_Ns3HtCapabilities_methods(root_module, cls):
@@ -8685,11 +8869,6 @@
                    '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', 
@@ -8760,6 +8939,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3RegularWifiMac_methods(root_module, cls):
@@ -8909,6 +9093,11 @@
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
     cls.add_method('SetWifiRemoteStationManager', 
                    'void', 
@@ -9140,10 +9329,10 @@
 
 def register_Ns3SupportedRates_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates() [constructor]
     cls.add_constructor([])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -9192,6 +9381,8 @@
     cls.add_method('SetBasicRate', 
                    'void', 
                    [param('uint32_t', 'bs')])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::MAX_SUPPORTED_RATES [variable]
+    cls.add_static_attribute('MAX_SUPPORTED_RATES', 'uint8_t const', is_const=True)
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::extended [variable]
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
diff -Naur ns-3.21/src/mesh/examples/mesh.cc ns-3.22/src/mesh/examples/mesh.cc
--- ns-3.21/src/mesh/examples/mesh.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/examples/mesh.cc	2015-02-05 15:46:22.000000000 -0800
@@ -60,6 +60,7 @@
 using namespace ns3;
 
 NS_LOG_COMPONENT_DEFINE ("TestMeshScript");
+
 class MeshTest
 {
 public:
diff -Naur ns-3.21/src/mesh/helper/dot11s/dot11s-installer.h ns-3.22/src/mesh/helper/dot11s/dot11s-installer.h
--- ns-3.21/src/mesh/helper/dot11s/dot11s-installer.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/helper/dot11s/dot11s-installer.h	2015-02-05 15:46:22.000000000 -0800
@@ -31,9 +31,7 @@
 class Dot11sStack : public MeshStack
 {
 public:
-  /**
-   * \internal
-   */
+  
   static TypeId GetTypeId ();
 
   /**
diff -Naur ns-3.21/src/mesh/helper/flame/flame-installer.h ns-3.22/src/mesh/helper/flame/flame-installer.h
--- ns-3.21/src/mesh/helper/flame/flame-installer.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/helper/flame/flame-installer.h	2015-02-05 15:46:22.000000000 -0800
@@ -34,9 +34,7 @@
 class FlameStack : public MeshStack
 {
 public:
-  /*
-   * \internal
-   */
+
   static TypeId GetTypeId ();
 
   /**
@@ -50,7 +48,6 @@
   ~FlameStack ();
 
   /**
-   * \internal
    * Break any reference cycles in the installer helper.  Required for ns-3
    * Object support.
    */
diff -Naur ns-3.21/src/mesh/helper/mesh-helper.h ns-3.22/src/mesh/helper/mesh-helper.h
--- ns-3.21/src/mesh/helper/mesh-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/helper/mesh-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -206,7 +206,6 @@
 
 private:
   /**
-   * \internal
    * \returns a WifiNetDevice with ready-to-use interface
    */
   Ptr<WifiNetDevice> CreateInterface (const WifiPhyHelper &phyHelper, Ptr<Node> node, uint16_t channelId) const;
@@ -214,12 +213,12 @@
   ChannelPolicy m_spreadChannelPolicy;
   Ptr<MeshStack> m_stack;
   ObjectFactory m_stackFactory;
-  ///\name Interface factory
-  ///\{
+
+  // Interface factory
   ObjectFactory m_mac;
   ObjectFactory m_stationManager;
   enum WifiPhyStandard m_standard;
-  ///\}
+
 };
 } // namespace ns3
 
diff -Naur ns-3.21/src/mesh/model/dot11s/airtime-metric.cc ns-3.22/src/mesh/model/dot11s/airtime-metric.cc
--- ns-3.21/src/mesh/model/dot11s/airtime-metric.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/airtime-metric.cc	2015-02-05 15:46:22.000000000 -0800
@@ -95,7 +95,7 @@
   //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 (), txVector, WIFI_PREAMBLE_LONG)
+                                 mac->GetWifiPhy ()->CalculateTxDuration (m_testFrame->GetSize (), txVector, WIFI_PREAMBLE_LONG, mac->GetWifiPhy ()->GetFrequency(), 0, 0)
                                  ).GetMicroSeconds () / (10.24 * (1.0 - failAvg)));
   return metric;
 }
diff -Naur ns-3.21/src/mesh/model/dot11s/hwmp-protocol.cc ns-3.22/src/mesh/model/dot11s/hwmp-protocol.cc
--- ns-3.21/src/mesh/model/dot11s/hwmp-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/hwmp-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,9 +36,10 @@
 #include "ns3/trace-source-accessor.h"
 #include "ie-dot11s-perr.h"
 
-NS_LOG_COMPONENT_DEFINE ("HwmpProtocol");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("HwmpProtocol");
+  
 namespace dot11s {
 
 NS_OBJECT_ENSURE_REGISTERED (HwmpProtocol);
@@ -163,7 +164,8 @@
     .AddTraceSource ( "RouteDiscoveryTime",
                       "The time of route discovery procedure",
                       MakeTraceSourceAccessor (
-                        &HwmpProtocol::m_routeDiscoveryTimeCallback)
+                        &HwmpProtocol::m_routeDiscoveryTimeCallback),
+                      "ns3::Time::TracedCallback"
                       )
   ;
   return tid;
diff -Naur ns-3.21/src/mesh/model/dot11s/hwmp-protocol.h ns-3.22/src/mesh/model/dot11s/hwmp-protocol.h
--- ns-3.21/src/mesh/model/dot11s/hwmp-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/hwmp-protocol.h	2015-02-05 15:46:22.000000000 -0800
@@ -261,8 +261,10 @@
   ///\}
   /// Packet Queue
   std::vector<QueuedPacket> m_rqueue;
-  ///\name HWMP-protocol parameters (attributes of GetTypeId)
-  ///\{
+  
+  /// \name HWMP-protocol parameters
+  /// These are all Aattributes
+  /// \{
   uint16_t m_maxQueueSize;
   uint8_t m_dot11MeshHWMPmaxPREQretries;
   Time m_dot11MeshHWMPnetDiameterTraversalTime;
@@ -280,6 +282,7 @@
   bool m_doFlag;
   bool m_rfFlag;
   ///\}
+  
   /// Random variable for random start time
   Ptr<UniformRandomVariable> m_coefficient;
   Callback <std::vector<Mac48Address>, uint32_t> m_neighboursCallback;
diff -Naur ns-3.21/src/mesh/model/dot11s/hwmp-protocol-mac.cc ns-3.22/src/mesh/model/dot11s/hwmp-protocol-mac.cc
--- ns-3.21/src/mesh/model/dot11s/hwmp-protocol-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/hwmp-protocol-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,9 +33,11 @@
 #include "ie-dot11s-perr.h"
 
 namespace ns3 {
-namespace dot11s {
 
 NS_LOG_COMPONENT_DEFINE ("HwmpProtocolMac");
+  
+namespace dot11s {
+
 HwmpProtocolMac::HwmpProtocolMac (uint32_t ifIndex, Ptr<HwmpProtocol> protocol) :
   m_ifIndex (ifIndex), m_protocol (protocol)
 {
diff -Naur ns-3.21/src/mesh/model/dot11s/hwmp-rtable.cc ns-3.22/src/mesh/model/dot11s/hwmp-rtable.cc
--- ns-3.21/src/mesh/model/dot11s/hwmp-rtable.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/hwmp-rtable.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,11 @@
 #include "hwmp-rtable.h"
 
 namespace ns3 {
-namespace dot11s {
 
 NS_LOG_COMPONENT_DEFINE ("HwmpRtable");
 
+namespace dot11s {
+  
 NS_OBJECT_ENSURE_REGISTERED (HwmpRtable);
 
 TypeId
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h	2015-02-05 15:46:22.000000000 -0800
@@ -83,16 +83,14 @@
     Time  beacon_interval
     );
   void   ClearTimingElement ();
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+  
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual uint8_t GetInformationFieldSize () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length);
   virtual void Print (std::ostream& os) const;
-  ///\}
+
   bool operator== (WifiInformationElement const & a) const;
 private:
   /**
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-configuration.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-configuration.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-configuration.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-configuration.h	2015-02-05 15:46:22.000000000 -0800
@@ -109,16 +109,14 @@
   void SetNeighborCount (uint8_t neighbors);
   uint8_t GetNeighborCount ();
   Dot11sMeshCapability const& MeshCapability ();
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+  
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual uint8_t GetInformationFieldSize () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length);
   virtual void Print (std::ostream& os) const;
-  ///\}
+
 private:
   /** Active Path Selection Protocol ID */
   dot11sPathSelectionProtocol m_APSPId;
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-id.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-id.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-id.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-id.h	2015-02-05 15:46:22.000000000 -0800
@@ -29,7 +29,7 @@
 namespace dot11s {
 /**
  * \brief a IEEE 802.11s Mesh ID 7.3.287 of 802.11s draft 3.0
- *
+ * \see attribute_IeMeshId
  */
 class IeMeshId : public WifiInformationElement
 {
@@ -42,16 +42,14 @@
   bool IsBroadcast (void) const;
   //uint32_t GetLength (void) const;
   char *PeekString (void) const;
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length);
   virtual void Print (std::ostream& os) const;
   virtual uint8_t GetInformationFieldSize () const;
-  ///\}
+
 private:
   uint8_t m_meshId[33];
   friend bool operator== (const IeMeshId & a, const IeMeshId & b);
@@ -60,12 +58,8 @@
 
 std::ostream &operator << (std::ostream &os, const IeMeshId &meshId);
 
-/**
- * \class ns3::IeMeshIdValue
- * \brief hold objects of type ns3::IeMeshId
- */
-
 ATTRIBUTE_HELPER_HEADER (IeMeshId);
+  
 } // namespace dot11s
 } // namespace ns3
 #endif /* MESH_ID_H */
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-metric-report.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-metric-report.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-metric-report.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-metric-report.h	2015-02-05 15:46:22.000000000 -0800
@@ -38,16 +38,14 @@
   IeLinkMetricReport (uint32_t metric);
   void SetMetric (uint32_t metric);
   uint32_t GetMetric ();
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length);
   virtual void Print (std::ostream& os) const;
   virtual uint8_t GetInformationFieldSize () const;
-  ///\}
+
 private:
   uint32_t m_metric;
   friend bool operator== (const IeLinkMetricReport & a, const IeLinkMetricReport & b);
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h	2015-02-05 15:46:22.000000000 -0800
@@ -31,16 +31,14 @@
 {
 public:
   IePeeringProtocol ();
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual uint8_t GetInformationFieldSize () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length);
   virtual void Print (std::ostream& os) const;
-  ///\}
+
 private:
   uint8_t m_protocol;
 };
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-peer-management.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-peer-management.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-peer-management.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-peer-management.h	2015-02-05 15:46:22.000000000 -0800
@@ -70,16 +70,14 @@
   bool   SubtypeIsClose () const;
   bool   SubtypeIsConfirm () const;
   uint8_t GetSubtype () const;
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual uint8_t GetInformationFieldSize (void) const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length);
   virtual void Print (std::ostream& os) const;
-  ///\}
+
 private:
   uint8_t m_length;
   uint8_t m_subtype;
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-perr.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-perr.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-perr.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-perr.h	2015-02-05 15:46:22.000000000 -0800
@@ -42,16 +42,14 @@
   std::vector<HwmpProtocol::FailedDestination> GetAddressUnitVector () const;
   void DeleteAddressUnit (Mac48Address address);
   void ResetPerr ();
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length);
   virtual void Print (std::ostream& os) const;
   virtual uint8_t GetInformationFieldSize () const;
-  ///\}
+
 private:
   std::vector<HwmpProtocol::FailedDestination> m_addressUnits;
   friend bool operator== (const IePerr & a, const IePerr & b);
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-prep.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-prep.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-prep.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-prep.h	2015-02-05 15:46:22.000000000 -0800
@@ -57,16 +57,14 @@
 
   void  DecrementTtl ();
   void  IncrementMetric (uint32_t metric);
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length);
   virtual uint8_t GetInformationFieldSize () const;
   virtual void Print (std::ostream& os) const;
-  ///\}
+
 private:
   uint8_t  m_flags;
   uint8_t  m_hopcount;
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-preq.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-preq.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-preq.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-preq.h	2015-02-05 15:46:22.000000000 -0800
@@ -85,8 +85,8 @@
    * \brief In proactive case: need we send PREP
    */
   void SetNeedNotPrep ();
-  ///\name Setters for fields:
-  ///\{
+
+  // Setters for fields:
   void SetHopcount (uint8_t hopcount);
   void SetTTL (uint8_t ttl);
   void SetPreqID (uint32_t id);
@@ -95,9 +95,8 @@
   void SetLifetime (uint32_t lifetime);
   void SetMetric (uint32_t metric);
   void SetDestCount (uint8_t dest_count);
-  ///\}
-  ///\name Getters for fields:
-  ///\{
+
+  // Getters for fields:
   bool  IsUnicastPreq () const;
   bool  IsNeedNotPrep () const;
   uint8_t  GetHopCount () const;
@@ -108,7 +107,7 @@
   uint32_t GetLifetime () const;
   uint32_t GetMetric () const;
   uint8_t  GetDestCount () const;
-  ///\}
+
   /// Handle TTL and Metric:
   void  DecrementTtl ();
   void  IncrementMetric (uint32_t metric);
@@ -118,24 +117,21 @@
    */
   bool MayAddAddress (Mac48Address originator);
   bool IsFull () const;
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+  
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator i, uint8_t length);
   virtual uint8_t GetInformationFieldSize () const;
   virtual void Print (std::ostream& os) const;
-  ///\}
+
 private:
   /**
    * how many destinations we support
+   * \todo make as an attribute
    */
-  uint8_t m_maxSize; /// \todo make as an attribute
-  /**
-   * Fields of information element:
-   */
+  uint8_t m_maxSize; 
+
   uint8_t m_flags;
   uint8_t m_hopCount;
   uint8_t m_ttl;
diff -Naur ns-3.21/src/mesh/model/dot11s/ie-dot11s-rann.h ns-3.22/src/mesh/model/dot11s/ie-dot11s-rann.h
--- ns-3.21/src/mesh/model/dot11s/ie-dot11s-rann.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/ie-dot11s-rann.h	2015-02-05 15:46:22.000000000 -0800
@@ -49,16 +49,14 @@
   uint32_t GetMetric ();
   void DecrementTtl ();
   void IncrementMetric (uint32_t metric);
-  /**
-   * \name Inherited from WifiInformationElement
-   * \{
-   */
+
+  // Inherited from WifiInformationElement
   virtual WifiInformationElementId ElementId () const;
   virtual void SerializeInformationField (Buffer::Iterator i) const;
   virtual uint8_t DeserializeInformationField (Buffer::Iterator start, uint8_t length);
   virtual uint8_t GetInformationFieldSize () const;
   virtual void Print (std::ostream &os) const;
-  ///\}
+
 private:
   uint8_t m_flags;
   uint8_t m_hopcount;
diff -Naur ns-3.21/src/mesh/model/dot11s/peer-link.cc ns-3.22/src/mesh/model/dot11s/peer-link.cc
--- ns-3.21/src/mesh/model/dot11s/peer-link.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/peer-link.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,9 +26,10 @@
 #include "ns3/simulator.h"
 #include "ns3/traced-value.h"
 
-NS_LOG_COMPONENT_DEFINE ("Dot11sPeerManagementProtocol");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Dot11sPeerManagementProtocol");
+  
 namespace dot11s {
 
 NS_OBJECT_ENSURE_REGISTERED ( PeerLink);
diff -Naur ns-3.21/src/mesh/model/dot11s/peer-link-frame.h ns-3.22/src/mesh/model/dot11s/peer-link-frame.h
--- ns-3.21/src/mesh/model/dot11s/peer-link-frame.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/peer-link-frame.h	2015-02-05 15:46:22.000000000 -0800
@@ -63,18 +63,15 @@
   void SetPlinkFrameSubtype (uint8_t subtype);
   void SetPlinkFrameStart (PlinkFrameStartFields);
   PlinkFrameStartFields GetFields () const;
-  /** \name Inherited from header:
-   * \{
-   */
+
+  // Inherited from header:
   static  TypeId   GetTypeId ();
   virtual TypeId   GetInstanceTypeId () const;
   virtual void     Print (std::ostream &os) const;
   virtual uint32_t GetSerializedSize () const;
   virtual void     Serialize (Buffer::Iterator start) const;
   virtual uint32_t Deserialize (Buffer::Iterator start);
-  /**
-   * \}
-   */
+
 private:
   uint8_t m_subtype;
   IePeeringProtocol m_protocol;
diff -Naur ns-3.21/src/mesh/model/dot11s/peer-management-protocol.cc ns-3.22/src/mesh/model/dot11s/peer-management-protocol.cc
--- ns-3.21/src/mesh/model/dot11s/peer-management-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/peer-management-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,9 +33,12 @@
 #include "ns3/wifi-net-device.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("PeerManagementProtocol");
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("PeerManagementProtocol");
+  
 namespace dot11s {
+  
 /***************************************************
  * PeerManager
  ***************************************************/
@@ -72,11 +75,13 @@
                     )
     .AddTraceSource ("LinkOpen",
                      "New peer link opened",
-                     MakeTraceSourceAccessor (&PeerManagementProtocol::m_linkOpenTraceSrc)
+                     MakeTraceSourceAccessor (&PeerManagementProtocol::m_linkOpenTraceSrc),
+                     "ns3::PeerManagementProtocol::LinkOpenCloseTracedCallback"
                      )
     .AddTraceSource ("LinkClose",
                      "New peer link closed",
-                     MakeTraceSourceAccessor (&PeerManagementProtocol::m_linkCloseTraceSrc)
+                     MakeTraceSourceAccessor (&PeerManagementProtocol::m_linkCloseTraceSrc),
+                     "ns3::PeerManagementProtocol::LinkOpenCloseTracedCallback"
                      )
 
   ;
diff -Naur ns-3.21/src/mesh/model/dot11s/peer-management-protocol.h ns-3.22/src/mesh/model/dot11s/peer-management-protocol.h
--- ns-3.21/src/mesh/model/dot11s/peer-management-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/peer-management-protocol.h	2015-02-05 15:46:22.000000000 -0800
@@ -148,6 +148,8 @@
   bool GetBeaconCollisionAvoidance () const;
   /// Notify about beacon send event, needed to schedule BCA
   void NotifyBeaconSent (uint32_t interface, Time beaconInterval);
+  // \}
+  
   ///\brief: Report statistics
   void Report (std::ostream &) const;
   void ResetStats ();
@@ -161,12 +163,20 @@
    */
   int64_t AssignStreams (int64_t stream);
 
-private:
-  virtual void DoInitialize ();
   /**
-   * \name Private structures
-   * \{
+   * TracedCallback signature for link open/close events.
+   *
+   * \param [in] myIface MAC address of my interface.
+   * \param [in] peerIface MAC address of peer interface.
    */
+  typedef void (* LinkOpenCloseTracedCallback)
+    (const Mac48Address myIface, const Mac48Address peerIface);
+   
+
+private:
+  virtual void DoInitialize ();
+  
+  // Private structures
   /// Keeps information about beacon of peer station: beacon interval, association ID, last time we have received a beacon
   struct BeaconInfo
   {
@@ -185,7 +195,7 @@
   typedef std::map<uint32_t, BeaconsOnInterface> BeaconInfoMap;
   ///\brief this vector keeps pointers to MAC-plugins
   typedef std::map<uint32_t, Ptr<PeerManagementProtocolMac> > PeerManagementProtocolMacMap;
-  // \}
+
 private:
   PeerManagementProtocol& operator= (const PeerManagementProtocol &);
   PeerManagementProtocol (const PeerManagementProtocol &);
diff -Naur ns-3.21/src/mesh/model/dot11s/peer-management-protocol-mac.h ns-3.22/src/mesh/model/dot11s/peer-management-protocol-mac.h
--- ns-3.21/src/mesh/model/dot11s/peer-management-protocol-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/dot11s/peer-management-protocol-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -44,14 +44,13 @@
 public:
   PeerManagementProtocolMac (uint32_t interface, Ptr<PeerManagementProtocol> protocol);
   ~PeerManagementProtocolMac ();
-  ///\name Inherited from plugin abstract class
-  // \{
+  
+  // Inherited from plugin abstract class
   void SetParent (Ptr<MeshWifiInterfaceMac> parent);
   bool Receive (Ptr<Packet> packet, const WifiMacHeader & header);
   bool UpdateOutcomingFrame (Ptr<Packet> packet, WifiMacHeader & header, Mac48Address from, Mac48Address to);
   void UpdateBeacon (MeshWifiBeacon & beacon) const;
   int64_t AssignStreams (int64_t stream);
-  // \}
   ///\name Statistics
   // \{
   void Report (std::ostream &) const;
diff -Naur ns-3.21/src/mesh/model/flame/flame-header.h ns-3.22/src/mesh/model/flame/flame-header.h
--- ns-3.21/src/mesh/model/flame/flame-header.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/flame/flame-header.h	2015-02-05 15:46:22.000000000 -0800
@@ -40,21 +40,16 @@
 
   FlameHeader ();
   ~FlameHeader ();
-  /**
-   * \name Inherited from Header class:
-   * \{
-   */
+
+  // Inherited from Header class:
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
   virtual uint32_t GetSerializedSize (void) const;
   virtual void Serialize (Buffer::Iterator start) const;
   virtual uint32_t Deserialize (Buffer::Iterator start);
-  ///\}
-  /**
-   * \name Seeters/Getters for fields:
-   * \{
-   */
+
+  // Seeters/Getters for fields:
   void AddCost (uint8_t cost);
   uint8_t GetCost () const;
   void SetSeqno (uint16_t seqno);
@@ -65,7 +60,7 @@
   Mac48Address GetOrigSrc () const;
   void SetProtocol (uint16_t protocol);
   uint16_t GetProtocol () const;
-  ///\}
+
 private:
   uint8_t m_cost;
   uint16_t m_seqno;
diff -Naur ns-3.21/src/mesh/model/flame/flame-protocol.cc ns-3.22/src/mesh/model/flame/flame-protocol.cc
--- ns-3.21/src/mesh/model/flame/flame-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/flame/flame-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,12 @@
 #include "ns3/mesh-point-device.h"
 #include "ns3/mesh-wifi-interface-mac.h"
 
-NS_LOG_COMPONENT_DEFINE ("FlameProtocol");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("FlameProtocol");
+  
 namespace flame {
+  
 //-----------------------------------------------------------------------------
 // FlameTag
 //-----------------------------------------------------------------------------
diff -Naur ns-3.21/src/mesh/model/flame/flame-protocol.h ns-3.22/src/mesh/model/flame/flame-protocol.h
--- ns-3.21/src/mesh/model/flame/flame-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/flame/flame-protocol.h	2015-02-05 15:46:22.000000000 -0800
@@ -62,15 +62,14 @@
   FlameTag (Mac48Address a = Mac48Address ()) :
     receiver (a){}
 
-  ///\name Inherited from Tag
-  //\{
+  // Inherited from Tag
   static  TypeId  GetTypeId ();
   TypeId  GetInstanceTypeId () const;
   uint32_t GetSerializedSize () const;
   void  Serialize (TagBuffer i) const;
   void  Deserialize (TagBuffer i);
   void  Print (std::ostream &os) const;
-  //\}
+
 };
 
 /**
diff -Naur ns-3.21/src/mesh/model/flame/flame-protocol-mac.cc ns-3.22/src/mesh/model/flame/flame-protocol-mac.cc
--- ns-3.21/src/mesh/model/flame/flame-protocol-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/flame/flame-protocol-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,9 +22,13 @@
 #include "flame-protocol.h"
 #include "flame-header.h"
 #include "ns3/log.h"
+
 namespace ns3 {
-namespace flame {
+  
 NS_LOG_COMPONENT_DEFINE ("FlameProtocolMac");
+  
+namespace flame {
+  
 FlameProtocolMac::FlameProtocolMac (Ptr<FlameProtocol> protocol) :
   m_protocol (protocol)
 {
diff -Naur ns-3.21/src/mesh/model/flame/flame-protocol-mac.h ns-3.22/src/mesh/model/flame/flame-protocol-mac.h
--- ns-3.21/src/mesh/model/flame/flame-protocol-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/flame/flame-protocol-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -36,8 +36,8 @@
 public:
   FlameProtocolMac (Ptr<FlameProtocol>);
   ~FlameProtocolMac ();
-  ///\name Inherited from MAC plugin
-  //\{
+  
+  // Inherited from MAC plugin
   void SetParent (Ptr<MeshWifiInterfaceMac> parent);
   bool Receive (Ptr<Packet> packet, const WifiMacHeader & header);
   bool UpdateOutcomingFrame (Ptr<Packet> packet, WifiMacHeader & header, Mac48Address from, Mac48Address to);
@@ -45,19 +45,17 @@
   void UpdateBeacon (MeshWifiBeacon & beacon) const {};
   /// AssignStreams is empty, because this model doesn't use random variables
   int64_t AssignStreams (int64_t stream) { return 0; }
-  //\}
+
   uint16_t GetChannelId () const;
   /// Report statistics
   void Report (std::ostream &) const;
   void ResetStats ();
+
 private:
-  /**
-   * \name MeshPointDevice parameters:
-   * \{
-   */
+  
+  // MeshPointDevice parameters:
   Ptr<FlameProtocol> m_protocol;
   Ptr<MeshWifiInterfaceMac> m_parent;
-  ///\}
   ///\name Statistics:
   ///\{
   struct Statistics
diff -Naur ns-3.21/src/mesh/model/flame/flame-rtable.cc ns-3.22/src/mesh/model/flame/flame-rtable.cc
--- ns-3.21/src/mesh/model/flame/flame-rtable.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/flame/flame-rtable.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,11 +23,13 @@
 #include "ns3/log.h"
 
 #include "flame-rtable.h"
+
 namespace ns3 {
-namespace flame {
 
 NS_LOG_COMPONENT_DEFINE ("FlameRtable");
 
+namespace flame {
+  
 NS_OBJECT_ENSURE_REGISTERED (FlameRtable);
 
 TypeId
diff -Naur ns-3.21/src/mesh/model/mesh-l2-routing-protocol.cc ns-3.22/src/mesh/model/mesh-l2-routing-protocol.cc
--- ns-3.21/src/mesh/model/mesh-l2-routing-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/mesh-l2-routing-protocol.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/mesh-l2-routing-protocol.h"
 #include "ns3/mesh-point-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("MeshL2RoutingProtocol");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MeshL2RoutingProtocol");
+
 NS_OBJECT_ENSURE_REGISTERED (MeshL2RoutingProtocol);
 
 TypeId
diff -Naur ns-3.21/src/mesh/model/mesh-point-device.cc ns-3.22/src/mesh/model/mesh-point-device.cc
--- ns-3.21/src/mesh/model/mesh-point-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/mesh-point-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/wifi-net-device.h"
 #include "ns3/mesh-wifi-interface-mac.h"
 
-NS_LOG_COMPONENT_DEFINE ("MeshPointDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MeshPointDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (MeshPointDevice);
 
 TypeId
@@ -57,13 +57,13 @@
 MeshPointDevice::MeshPointDevice () :
   m_ifIndex (0)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   m_channel = CreateObject<BridgeChannel> ();
 }
 
 MeshPointDevice::~MeshPointDevice ()
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   m_node = 0;
   m_channel = 0;
   m_routingProtocol = 0;
@@ -72,7 +72,7 @@
 void
 MeshPointDevice::DoDispose ()
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   for (std::vector<Ptr<NetDevice> >::iterator iter = m_ifaces.begin (); iter != m_ifaces.end (); iter++)
     {
       *iter = 0;
@@ -93,7 +93,7 @@
 MeshPointDevice::ReceiveFromDevice (Ptr<NetDevice> incomingPort, Ptr<const Packet> packet, uint16_t protocol,
                                     Address const &src, Address const &dst, PacketType packetType)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this << incomingPort << packet);
   NS_LOG_DEBUG ("UID is " << packet->GetUid ());
   const Mac48Address src48 = Mac48Address::ConvertFrom (src);
   const Mac48Address dst48 = Mac48Address::ConvertFrom (dst);
@@ -143,34 +143,35 @@
 void
 MeshPointDevice::SetIfIndex (const uint32_t index)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   m_ifIndex = index;
 }
 
 uint32_t
 MeshPointDevice::GetIfIndex () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return m_ifIndex;
 }
 
 Ptr<Channel>
 MeshPointDevice::GetChannel () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return m_channel;
 }
 
 Address
 MeshPointDevice::GetAddress () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return m_address;
 }
 
 void
 MeshPointDevice::SetAddress (Address a)
 {
+  NS_LOG_FUNCTION (this);
   NS_LOG_WARN ("Manual changing mesh point address can cause routing errors.");
   m_address = Mac48Address::ConvertFrom (a);
 }
@@ -178,7 +179,7 @@
 bool
 MeshPointDevice::SetMtu (const uint16_t mtu)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   m_mtu = mtu;
   return true;
 }
@@ -186,41 +187,43 @@
 uint16_t
 MeshPointDevice::GetMtu () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return m_mtu;
 }
 
 bool
 MeshPointDevice::IsLinkUp () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return true;
 }
 
 void
 MeshPointDevice::AddLinkChangeCallback (Callback<void> callback)
 {
+  NS_LOG_FUNCTION (this);
   // do nothing
+  NS_LOG_WARN ("AddLinkChangeCallback does nothing");
 }
 
 bool
 MeshPointDevice::IsBroadcast () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return true;
 }
 
 Address
 MeshPointDevice::GetBroadcast () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return Mac48Address ("ff:ff:ff:ff:ff:ff");
 }
 
 bool
 MeshPointDevice::IsMulticast () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return true;
 }
 
@@ -235,20 +238,21 @@
 bool
 MeshPointDevice::IsPointToPoint () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return false;
 }
 
 bool
 MeshPointDevice::IsBridge () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return false;
 }
 
 bool
 MeshPointDevice::Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber)
 {
+  NS_LOG_FUNCTION (this);
   const Mac48Address dst48 = Mac48Address::ConvertFrom (dest);
   return m_routingProtocol->RequestRoute (m_ifIndex, m_address, dst48, packet, protocolNumber, MakeCallback (
                                             &MeshPointDevice::DoSend, this));
@@ -258,6 +262,7 @@
 MeshPointDevice::SendFrom (Ptr<Packet> packet, const Address& src, const Address& dest,
                            uint16_t protocolNumber)
 {
+  NS_LOG_FUNCTION (this);
   const Mac48Address src48 = Mac48Address::ConvertFrom (src);
   const Mac48Address dst48 = Mac48Address::ConvertFrom (dest);
   return m_routingProtocol->RequestRoute (m_ifIndex, src48, dst48, packet, protocolNumber, MakeCallback (
@@ -267,42 +272,42 @@
 Ptr<Node>
 MeshPointDevice::GetNode () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return m_node;
 }
 
 void
 MeshPointDevice::SetNode (Ptr<Node> node)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   m_node = node;
 }
 
 bool
 MeshPointDevice::NeedsArp () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return true;
 }
 
 void
 MeshPointDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   m_rxCallback = cb;
 }
 
 void
 MeshPointDevice::SetPromiscReceiveCallback (NetDevice::PromiscReceiveCallback cb)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   m_promiscRxCallback = cb;
 }
 
 bool
 MeshPointDevice::SupportsSendFrom () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return false; // don't allow to bridge mesh network with something else.
 }
 
@@ -319,13 +324,14 @@
 uint32_t
 MeshPointDevice::GetNInterfaces () const
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   return m_ifaces.size ();
 }
 
 Ptr<NetDevice>
 MeshPointDevice::GetInterface (uint32_t n) const
 {
+  NS_LOG_FUNCTION (this << n);
   for (std::vector<Ptr<NetDevice> >::const_iterator i = m_ifaces.begin (); i != m_ifaces.end (); i++)
     {
       if ((*i)->GetIfIndex () == n)
@@ -344,7 +350,7 @@
 void
 MeshPointDevice::AddInterface (Ptr<NetDevice> iface)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this << iface);
 
   NS_ASSERT (iface != this);
   if (!Mac48Address::IsMatchingType (iface->GetAddress ()))
@@ -388,7 +394,7 @@
 void
 MeshPointDevice::SetRoutingProtocol (Ptr<MeshL2RoutingProtocol> protocol)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this << protocol);
   NS_ASSERT_MSG (PeekPointer (protocol->GetMeshPoint ()) == this,
                  "Routing protocol must be installed on mesh point to be useful.");
   m_routingProtocol = protocol;
@@ -397,6 +403,7 @@
 Ptr<MeshL2RoutingProtocol>
 MeshPointDevice::GetRoutingProtocol () const
 {
+  NS_LOG_FUNCTION (this);
   return m_routingProtocol;
 }
 
@@ -404,6 +411,7 @@
 MeshPointDevice::DoSend (bool success, Ptr<Packet> packet, Mac48Address src, Mac48Address dst,
                          uint16_t protocol, uint32_t outIface)
 {
+  NS_LOG_FUNCTION (this << success << packet << src << dst << protocol << outIface);
   if (!success)
     {
       NS_LOG_DEBUG ("Resolve failed");
@@ -440,11 +448,13 @@
 MeshPointDevice::Statistics::Statistics () :
   unicastData (0), unicastDataBytes (0), broadcastData (0), broadcastDataBytes (0)
 {
+  NS_LOG_FUNCTION (this);
 }
 
 void
 MeshPointDevice::Report (std::ostream & os) const
 {
+  NS_LOG_FUNCTION (this);
   os << "<Statistics" << std::endl <<
   "txUnicastData=\"" << m_txStats.unicastData << "\"" << std::endl <<
   "txUnicastDataBytes=\"" << m_txStats.unicastDataBytes << "\"" << std::endl <<
@@ -464,6 +474,7 @@
 void
 MeshPointDevice::ResetStats ()
 {
+  NS_LOG_FUNCTION (this);
   m_rxStats = Statistics ();
   m_txStats = Statistics ();
   m_fwdStats = Statistics ();
diff -Naur ns-3.21/src/mesh/model/mesh-point-device.h ns-3.22/src/mesh/model/mesh-point-device.h
--- ns-3.21/src/mesh/model/mesh-point-device.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/mesh-point-device.h	2015-02-05 15:46:22.000000000 -0800
@@ -87,8 +87,7 @@
   Ptr<MeshL2RoutingProtocol> GetRoutingProtocol () const;
   //\}
 
-  ///\name NetDevice interface for upper layers
-  //\{
+  // Inherited from NetDevice
   virtual void SetIfIndex (const uint32_t index);
   virtual uint32_t GetIfIndex () const;
   virtual Ptr<Channel> GetChannel () const;
@@ -114,7 +113,6 @@
   virtual bool SupportsSendFrom () const;
   virtual Address GetMulticast (Ipv6Address addr) const;
   virtual void DoDispose ();
-  //\}
 
   ///\name Statistics
   //\{
diff -Naur ns-3.21/src/mesh/model/mesh-wifi-interface-mac.cc ns-3.22/src/mesh/model/mesh-wifi-interface-mac.cc
--- ns-3.21/src/mesh/model/mesh-wifi-interface-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/mesh-wifi-interface-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,10 @@
 #include "ns3/trace-source-accessor.h"
 #include "ns3/qos-tag.h"
 
-NS_LOG_COMPONENT_DEFINE ("MeshWifiInterfaceMac");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MeshWifiInterfaceMac");
+
 NS_OBJECT_ENSURE_REGISTERED (MeshWifiInterfaceMac);
 
 TypeId
@@ -129,6 +129,7 @@
 void
 MeshWifiInterfaceMac::DoInitialize ()
 {
+  NS_LOG_FUNCTION (this);
   m_coefficient->SetAttribute ("Max", DoubleValue (m_randomStart.GetSeconds ()));
   if (m_beaconEnable)
     {
diff -Naur ns-3.21/src/mesh/model/mesh-wifi-interface-mac.h ns-3.22/src/mesh/model/mesh-wifi-interface-mac.h
--- ns-3.21/src/mesh/model/mesh-wifi-interface-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/model/mesh-wifi-interface-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -61,13 +61,11 @@
   /// D-tor
   virtual ~MeshWifiInterfaceMac ();
 
-  ///\name Inherited from WifiMac
-  // \{
+  // Inherited from WifiMac
   virtual void  Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
   virtual void  Enqueue (Ptr<const Packet> packet, Mac48Address to);
   virtual bool  SupportsSendFrom () const;
   virtual void  SetLinkUpCallback (Callback<void> linkUp);
-  // \}
   ///\name Each mesh point interfaces must know the mesh point address
   // \{
   void SetMeshPointAddress (Mac48Address);
diff -Naur ns-3.21/src/mesh/test/dot11s/dot11s-test-suite.cc ns-3.22/src/mesh/test/dot11s/dot11s-test-suite.cc
--- ns-3.21/src/mesh/test/dot11s/dot11s-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/dot11s-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -93,20 +93,15 @@
 private:
   /// Test Add apth and lookup path;
   void TestLookup ();
-  /**
-   * \name Test add path and try to lookup after entry has expired
-   * \{
-   */
+
+  // Test add path and try to lookup after entry has expired
   void TestAddPath ();
   void TestExpire ();
-  ///\}
-  /**
-   * \name Test add precursors and find precursor list in rtable
-   * \{
-   */
+
+  // Test add precursors and find precursor list in rtable
   void TestPrecursorAdd ();
   void TestPrecursorFind ();
-  ///\}
+
 private:
   Mac48Address dst;
   Mac48Address hop;
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression.cc ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression.cc
--- ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression.cc	2015-02-05 15:46:22.000000000 -0800
@@ -128,6 +128,7 @@
   // 3. setup TCP/IP
   InternetStackHelper internetStack;
   internetStack.Install (*m_nodes);
+  streamsUsed += internetStack.AssignStreams (*m_nodes, streamsUsed);
   Ipv4AddressHelper address;
   address.SetBase ("10.1.1.0", "255.255.255.0");
   m_interfaces = address.Assign (meshDevices);
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,29 +1,36 @@
-ò            i       B  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          a        Ԁ               H        Ԁ                  P   P   Ѐ<                 J     $0H`l3         9 7            A   A                           $0H`l  4mesh        %  R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                0 J    $0H`l3         9 7                  Ԁ                 R   R   Ѐ<                @  J   $0H`l4mesh3         9 7                  Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               JO A   A                 JO         $0H`l  4mesh        qu ?   ?   Ѐ<                P   E                                 Iw E   E   Ѐ            `   D%                             kw ?   ?   Ѐ<                0   E                                 x       Ԁ               x ?   ?   Ѐ<                p   E                              y ?   ?   Ј<                p   E                              "z E   E   Ѐ            @   D%              ,              +b F   F                a         $0H`l
- 7O4mesh        j A   A               P j         $0H`l b4mesh         F   F                         $0H`l
+ò            i       B  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          a        Ԁ               H        Ԁ                  P   P   Ѐ<                 J     $0H`l3         9 7            A   A                           $0H`l  4mesh        %  R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                0 J    $0H`l3         9 7                  Ԁ                 R   R   Ѐ<                @  J   $0H`l4mesh3         9 7                  Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               JO A   A                 JO         $0H`l  4mesh        +b F   F               P a         $0H`l
+ 7O4mesh        j A   A               0 j         $0H`l b4mesh        
+ ?   ?   Ѐ<                `   E                                 a
+ E   E   Ѐ            p   D%                             
+ ?   ?   Ѐ<                @   E                                 ,
+       Ԁ               
+ ?   ?   Ѐ<                   E                              
+ ?   ?   Ј<                   E                              :
+ E   E   Ѐ            P   D%              ,               F   F                         $0H`l
  4mesh       JO A   A               `          $0H`l 4mesh       +b F   F                         $0H`l
  z4mesh       j A   A               p 2         $0H`l 4mesh         ?   ?   Ѐ<                   E                                  F   F                E         $0H`l
- 34mesh         ?   ?   Ј<                   E                                  E   E   Ѐ               D%                            A  ?   ?   Ѐ<                   E                                        Ԁ                ?   ?   Ѐ<                   E                             O  E   E   Ѐ               D%              ,             JO A   A                         $0H`l F4mesh       0 ?   ?   Ѐ<                   E                                1 E   E   Ѐ               D%                            2 ?   ?   Ѐ<                   E                                2       Ԁ              S3 ?   ?   Ѐ<                  E                             3 E   E   Ѐ               D%                           0 L   L                               
+ 34mesh         ?   ?   Ј<                   E                                  E   E   Ѐ               D%                            A  ?   ?   Ѐ<                   E                                        Ԁ                ?   ?   Ѐ<                   E                             O  E   E   Ѐ               D%              ,             JO A   A                         $0H`l F4mesh       [ L   L                               
 
-       [ L   L   <                                       
+        L   L   <                                       
      
-              Ԁ              B L   L                               
+       B       Ԁ              m L   L                               
 
-        L   L   <                0                     
+        L   L   <                                      
      
-       x       Ԁ                     <                @              E      @  
+              Ԁ                     <                              E      @  
 
- 	 l                                                                                                                    Ԁ              / L   L                                
+ 	 l                                                                                                                    Ԁ               L   L                                
 
-       [ L   L          P                    
+       G L   L                               
 
-              Ԁ              m L   L   <                `                     
+       Y       Ԁ               L   L   <                0                     
      
-       }       Ԁ                     <                                E      @  
+              Ԁ              k       <                                E      @  
 
- 	 l                                                                                                                    Ԁ              U       <                p              E      @  
+ 	 l                                                                                                                    Ԁ                     <                @              E      @  
 
- 	 l                                                                                                             +b F   F               3&         $0H`l
- &4mesh       j A   A               t'         $0H`l &4mesh               Ԁ              F        <                              E     @  
+ 	 l                                                                                                             +b F   F               P3&         $0H`l
+ &4mesh       j A   A                t'         $0H`l &4mesh       k ?   ?   Ѐ<                `  E                                l E   E   Ѐ            p  D%                            *l ?   ?   Ѐ<                   E                                l       Ԁ              jm ?   ?   Ѐ<                  E                             m E   E   Ѐ              D%              Y                     Ԁ              F        <                              E     @  
 
  	 l                                                                                                             V        Ԁ                      <                                E     @  
 
@@ -45,11 +52,11 @@
  	 l                                                                                                                     Ԁ                      <                               E     @  
 
  	 l                                                                                                               F   F               =         $0H`l
- =64mesh       JO A   A               pJX>         $0H`l =4mesh       | ?   ?   Ѐ<                   E                                } ?   ?   Ј<                   E                                ~ E   E   Ѐ            0  D%              n              /~ ?   ?   Ѐ<                  E                                ~       Ԁ              J ?   ?   Ѐ<                @  E                              E   E   Ѐ              D%                            q ?   ?   Ѐ<                P  E                                p E   E   Ѐ            `  D%                             ?   ?   Ѐ<                  E                                       Ԁ               ?   ?   Ѐ<                p  E                             ^ E   E   Ѐ              D%                                  Ԁ                     <                              E     @  
+ =64mesh       JO A   A               pJX>         $0H`l =4mesh       | ?   ?   Ѐ<                   E                                } ?   ?   Ј<                   E                                ~ E   E   Ѐ            0  D%              m              /~ ?   ?   Ѐ<                  E                                ~       Ԁ              J ?   ?   Ѐ<                @  E                              E   E   Ѐ              D%                                   Ԁ                     <                P              E     @  
 
- 	 l                                                                                                             &       Ԁ              }       <                               E     @  
+ 	 l                                                                                                             &       Ԁ              }       <                               E     @  
 
- 	 l                                                                                                             m       Ԁ                     <                              E     @  
+ 	 l                                                                                                             m       Ԁ                     <                `              E     @  
 
- 	 l                                                                                                             +b F   F               jE         $0H`l
- @EX>4mesh       j A   A               jE         $0H`l kE4mesh    
\ No newline at end of file
+ 	 l                                                                                                             +b F   F               pjE         $0H`l
+ @EX>4mesh       j A   A               jE         $0H`l kE4mesh       & ?   ?   Ѐ<                  E                                ' E   E   Ѐ              D%                            ' ?   ?   Ѐ<                  E                                7(       Ԁ              ( ?   ?   Ѐ<                  E                             v) E   E   Ѐ              D%                        
\ No newline at end of file
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,46 +1,58 @@
-ò            i         E   E   Ѐ                D%                                %  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          >&        Ԁ               7'        Ԁ               '  P   P   Ѐ<                  J     $0H`l3         9 7            A   A               0 (          $0H`l $ 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ               %  P   P   Ѐ<                @ J    $0H`l3         9 7          5        Ԁ                 R   R   Ѐ<                P  J   $0H`l4mesh3         9 7                  Ԁ               {  P   P   Ѐ<                 J     $0H`l3         9 7          <        Ԁ                 A   A                           $0H`l  4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                0 J    $0H`l3         9 7                  Ԁ               	  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7                  Ԁ               t  P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               O A   A                 JO         $0H`l  4mesh        t E   E   Ѐ            `   D%                                u ?   ?   Ѐ<                P   E                                 u       Ԁ               v       Ԁ               v E   E   Ѐ            `   D%                             w ?   ?   Ѐ<                0   E                                 w       Ԁ               6x ?   ?   Ѐ<                p   E                              x       Ԁ               *y ?   ?   Ј<                p   E                              y       Ԁ               z E   E   Ѐ            @   D%              ,              7 F   F               p H7         $0H`l
-  4mesh        a F   F                a         $0H`l
- 7O4mesh         A   A               P j         $0H`l b4mesh         F   F                h         $0H`l
+ò            i         E   E   Ѐ                D%                                %  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          >&        Ԁ               7'        Ԁ               '  P   P   Ѐ<                  J     $0H`l3         9 7            A   A               0 (          $0H`l $ 4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ               %  P   P   Ѐ<                @ J    $0H`l3         9 7          5        Ԁ                 R   R   Ѐ<                P  J   $0H`l4mesh3         9 7                  Ԁ               {  P   P   Ѐ<                 J     $0H`l3         9 7          <        Ԁ                 A   A                           $0H`l  4mesh          R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                0 J    $0H`l3         9 7                  Ԁ               	  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7                  Ԁ               t  P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               O A   A                 JO         $0H`l  4mesh        7 F   F               ` H7         $0H`l
+  4mesh        a F   F               P a         $0H`l
+ 7O4mesh         A   A               0 j         $0H`l b4mesh        
+ E   E   Ѐ            p   D%                                
+ ?   ?   Ѐ<                `   E                                 ů
+       Ԁ               
+       Ԁ               
+ E   E   Ѐ            p   D%                             
+ ?   ?   Ѐ<                @   E                                 
+       Ԁ               N
+ ?   ?   Ѐ<                   E                              
+       Ԁ               B
+ ?   ?   Ј<                   E                              
+       Ԁ               
+ E   E   Ѐ            P   D%              ,               F   F                h         $0H`l
  fb4mesh         F   F                         $0H`l
  4mesh       O A   A               `          $0H`l 4mesh       7 F   F                y         $0H`l
  4mesh       a F   F                         $0H`l
  z4mesh        A   A               p 2         $0H`l 4mesh         F   F                         $0H`l
  4mesh         E   E   Ѐ               D%                               @  ?   ?   Ѐ<                   E                                  F   F                E         $0H`l
- 34mesh         ?   ?   Ј<                   E                                \        Ԁ                E   E   Ѐ               D%                              ?   ?   Ѐ<                   E                                        Ԁ              5        Ԁ              W  ?   ?   Ѐ<                   E                                      Ԁ                E   E   Ѐ               D%              ,                     Ԁ              O A   A                         $0H`l F4mesh       b0 E   E   Ѐ               D%                               0 ?   ?   Ѐ<                   E                                -1       Ԁ              |1 E   E   Ѐ               D%                            2 ?   ?   Ѐ<                   E                                2       Ԁ              2 ?   ?   Ѐ<                  E                             3       Ԁ              S4 E   E   Ѐ               D%                           5       Ԁ               L   L                               
+ 34mesh         ?   ?   Ј<                   E                                \        Ԁ                E   E   Ѐ               D%                              ?   ?   Ѐ<                   E                                        Ԁ              5        Ԁ              W  ?   ?   Ѐ<                   E                                      Ԁ                E   E   Ѐ               D%              ,                     Ԁ              O A   A                         $0H`l F4mesh        L   L                               
 
-        L   L                               
+        L   L                               
 
-       ۬ L   L   <                                       
+        L   L   <                                       
      
-              Ԁ              í L   L                               
+              Ԁ               L   L                               
 
-       - L   L   <                0                     
+       X L   L   <                                      
      
-              Ԁ               L   L   <                                      
+              Ԁ               L   L   <                                      
      
-              Ԁ              <       <                               E      @  
+       /       Ԁ              p       <                               E      @  
 
- 	 l                                                                                                             L       Ԁ                     <                @              E      @  
+ 	 l                                                                                                                    Ԁ                     <                              E      @  
 
- 	 l                                                                                                                    Ԁ               L   L                                
+ 	 l                                                                                                                    Ԁ               L   L                                
 
-        L   L          P                    
+        L   L                               
 
-        L   L                               
+        L   L                               
 
-              Ԁ               L   L   <                                     
+       r       Ԁ               L   L   <                                      
      
-              Ԁ               L   L   <                `                     
+       -       Ԁ               L   L   <                0                     
      
-              Ԁ                     <                                E      @  
+       A       Ԁ              p       <                                E      @  
 
- 	 l                                                                                                                    Ԁ              Q       <                p              E      @  
+ 	 l                                                                                                                    Ԁ                     <                @              E      @  
 
- 	 l                                                                                                                    Ԁ              $       <                               E      @  
+ 	 l                                                                                                             )       Ԁ                     <                              E      @  
 
- 	 l                                                                                                             7 F   F               0Ȼ&         $0H`l
- J&F4mesh       a F   F               3&         $0H`l
- &4mesh        A   A               t'         $0H`l &4mesh               Ԁ                      <                @              E     @  
+ 	 l                                                                                                             7 F   F                Ȼ&         $0H`l
+ J&F4mesh       a F   F               P3&         $0H`l
+ &4mesh        A   A                t'         $0H`l &4mesh       zj E   E   Ѐ            0  D%                               j ?   ?   Ѐ<                `  E                                Ek       Ԁ              k E   E   Ѐ            p  D%                            l ?   ?   Ѐ<                   E                                l       Ԁ              l ?   ?   Ѐ<                  E                             m       Ԁ              jn E   E   Ѐ              D%              Y             o       Ԁ                      Ԁ                      <                @              E     @  
 
  	 l                                                                                                                     Ԁ              A        <                              E     @  
 
@@ -79,16 +91,17 @@
 
  	 l                                                                                                               F   F               (=         $0H`l
  -=(64mesh         F   F               =         $0H`l
- =64mesh       O A   A               pJX>         $0H`l =4mesh       { E   E   Ѐ              D%                               { ?   ?   Ѐ<                   E                                | ?   ?   Ј<                   E                                J}       Ԁ              } E   E   Ѐ            0  D%              n              ~ ?   ?   Ѐ<                  E                                ~       Ԁ              ~ ?   ?   Ѐ<                @  E                                    Ԁ              J E   E   Ѐ              D%                            &       Ԁ               E   E   Ѐ              D%                                ?   ?   Ѐ<                P  E                                       Ԁ               E   E   Ѐ            `  D%                             ?   ?   Ѐ<                  E                                       Ԁ              f ?   ?   Ѐ<                p  E                                    Ԁ               E   E   Ѐ              D%                           K       Ԁ              {       Ԁ                     <                              E     @  
+ =64mesh       O A   A               pJX>         $0H`l =4mesh       { E   E   Ѐ              D%                               { ?   ?   Ѐ<                   E                                | ?   ?   Ј<                   E                                J}       Ԁ              } E   E   Ѐ            0  D%              m              ~ ?   ?   Ѐ<                  E                                ~       Ԁ              ~ ?   ?   Ѐ<                @  E                                    Ԁ              J E   E   Ѐ              D%                            &       Ԁ              {       Ԁ                     <                              E     @  
 
- 	 l                                                                                                                    Ԁ                     <                              E     @  
+ 	 l                                                                                                                    Ԁ                     <                P              E     @  
 
- 	 l                                                                                                             R       Ԁ              1       <                               E     @  
+ 	 l                                                                                                             R       Ԁ              1       <                               E     @  
 
- 	 l                                                                                                             A       Ԁ                     <                              E     @  
+ 	 l                                                                                                             A       Ԁ                     <                `              E     @  
 
- 	 l                                                                                                             E       Ԁ              t       <                               E     @  
+ 	 l                                                                                                             E       Ԁ              t       <                              E     @  
 
- 	 l                                                                                                             7 F   F               H@E         $0H`l
- D=4mesh       a F   F               jE         $0H`l
- @EX>4mesh        A   A               jE         $0H`l kE4mesh    
\ No newline at end of file
+ 	 l                                                                                                             7 F   F                H@E         $0H`l
+ D=4mesh       a F   F               pjE         $0H`l
+ @EX>4mesh        A   A               jE         $0H`l kE4mesh       % E   E   Ѐ              D%                               & ?   ?   Ѐ<                  E                                &       Ԁ              ' E   E   Ѐ              D%                            ' ?   ?   Ѐ<                  E                                
+(       Ԁ              ~( ?   ?   Ѐ<                  E                             ')       Ԁ              ) E   E   Ѐ              D%                           c+       Ԁ           
\ No newline at end of file
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,8 +1,19 @@
 ò            i       *  E   E   Ѐ                D%                                u$  <   <                 $          $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          "(        Ԁ               )        Ԁ               )  P   P   Ѐ<                0 J    $0H`l3         9 7          *  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          +        Ԁ               (  A   A               0 (          $0H`l $ 4mesh        B  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          R        Ԁ                 P   P   Ѐ<                @ J    $0H`l3         9 7          a        Ԁ                 R   R   Ѐ<                P  J   $0H`l4mesh3         9 7          H        Ԁ                  P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ                 A   A                           $0H`l  4mesh                Ԁ                 P   P   Ѐ<                0 J    $0H`l3         9 7            R   R   Ѐ<                @  J   $0H`l4mesh3         9 7                  Ԁ               nt E   E   Ѐ            `   D%                                qu ?   ?   Ѐ<                P   E                                 u       Ԁ               Jv ?   ?   Ј<                P   E                                 Zv       Ԁ               Iw E   E   Ѐ            `   D%                             x ?   ?   Ѐ<                p   E                              x       Ԁ               y ?   ?   Ј<                p   E                              y       Ԁ                F   F                -         $0H`l
-  4mesh        H7 F   F               p H7         $0H`l
-  4mesh        +b F   F                a         $0H`l
- 7O4mesh       $  F   F                Mf         $0H`l
+'        Ԁ               a'  P   P   Ѐ<                  J     $0H`l3         9 7          "(        Ԁ               $)        Ԁ               )  P   P   Ѐ<                0 J    $0H`l3         9 7          *  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          +        Ԁ               (  A   A               0 (          $0H`l $ 4mesh        B  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          R        Ԁ                 P   P   Ѐ<                @ J    $0H`l3         9 7          a        Ԁ                 R   R   Ѐ<                P  J   $0H`l4mesh3         9 7          H        Ԁ                  P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ                 A   A                           $0H`l  4mesh                Ԁ                 P   P   Ѐ<                0 J    $0H`l3         9 7            R   R   Ѐ<                @  J   $0H`l4mesh3         9 7                  Ԁ                F   F               P -         $0H`l
+  4mesh        H7 F   F               ` H7         $0H`l
+  4mesh        +b F   F               P a         $0H`l
+ 7O4mesh        
+ E   E   Ѐ            p   D%                                
+ ?   ?   Ѐ<                `   E                                 
+       Ԁ               a
+ ?   ?   Ј<                `   E                                 q
+       Ԁ               a
+ E   E   Ѐ            p   D%                             ,
+       Ԁ               
+ ?   ?   Ѐ<                   E                              ʲ
+       Ԁ               
+ ?   ?   Ј<                   E                              
+       Ԁ              $  F   F                Mf         $0H`l
  7J4mesh       (  F   F                h         $0H`l
  fb4mesh         F   F                         $0H`l
  4mesh        F   F                m         $0H`l
@@ -11,46 +22,46 @@
  z4mesh       $  F   F                         $0H`l
  z4mesh       (  F   F                         $0H`l
  4mesh         E   E   Ѐ               D%                                 F   F                E         $0H`l
- 34mesh         ?   ?   Ј<                   E                                /        Ԁ                E   E   Ѐ               D%                              ?   ?   Ј<                   E                                	        Ԁ                ?   ?   Ѐ<                   E                                     Ԁ              A  E   E   Ѐ               D%                                    Ԁ                ?   ?   Ѐ<                   E                                     Ԁ              / E   E   Ѐ               D%                               0 ?   ?   Ѐ<                   E                                1       Ԁ              1 E   E   Ѐ               D%                            2 ?   ?   Ј<                   E                                2       Ԁ              S3 ?   ?   Ѐ<                  E                             c3       Ԁ              R4 E   E   Ѐ               D%              `             5       Ԁ              5 ?   ?   Ѐ<                  E                             5       Ԁ              ٪ L   L                               
+ 34mesh         ?   ?   Ј<                   E                                /        Ԁ                E   E   Ѐ               D%                              ?   ?   Ј<                   E                                	        Ԁ                ?   ?   Ѐ<                   E                                     Ԁ              A  E   E   Ѐ               D%                                    Ԁ                ?   ?   Ѐ<                   E                                     Ԁ              s L   L                               
 
-        L   L                               
+        F   F                I&         $0H`l
+ -&4mesh       / L   L                               
 
-       0 L   L                               
+       [ L   L                               
 
-              Ԁ               L   L   <                0                     
+       B       Ԁ               L   L   <                                      
      
-              Ԁ              A L   L   <                                      
+              Ԁ              u L   L   <                                      
      
-              Ԁ               L   L   <                0                     
+       2       Ԁ               L   L   <                                     
      
-       P       Ԁ                     <                @              E      @  
+              Ԁ                     <                               E      @  
 
- 	 l                                                                                                             γ       Ԁ              7       <                               E      @  
+ 	 l                                                                                                                    Ԁ              k       <                               E      @  
 
- 	 l                                                                                                             x       Ԁ                     <                @              E      @  
+ 	 l                                                                                                                    Ԁ                     <                              E      @  
 
- 	 l                                                                                                              F   F               PI&         $0H`l
- -&4mesh       [ L   L          P                    
+ 	 l                                                                                                             G L   L                               
 
-        L   L                               
+       r L   L                               
 
-        L   L          `                    
+        L   L          0                    
 
-              Ԁ               L   L   <                p                     
+              Ԁ              6 L   L   <                @                     
      
-              Ԁ               L   L   <                                     
+       F       Ԁ               L   L   <                                      
      
-              Ԁ              m L   L   <                `                     
+       Y       Ԁ               L   L   <                0                     
      
-              Ԁ              U       <                p              E      @  
+              Ԁ                     <                @              E      @  
 
- 	 l                                                                                                             e       Ԁ                     <                               E      @  
+ 	 l                                                                                                                    Ԁ                     <                              E      @  
 
- 	 l                                                                                                             `       Ԁ                     <                              E      @  
+ 	 l                                                                                                                    Ԁ              '       <                P              E      @  
 
- 	 l                                                                                                             H7 F   F               0Ȼ&         $0H`l
- J&F4mesh       +b F   F               3&         $0H`l
- &4mesh       @        Ԁ              o        <                              E     @  
+ 	 l                                                                                                             H7 F   F                Ȼ&         $0H`l
+ J&F4mesh       +b F   F               P3&         $0H`l
+ &4mesh       j E   E   Ѐ            0  D%                               k ?   ?   Ѐ<                `  E                                k       Ԁ              l E   E   Ѐ            p  D%                            l ?   ?   Ј<                `  E                                l       Ԁ              jm ?   ?   Ѐ<                  E                             zm       Ԁ              jn E   E   Ѐ            p  D%                            5o       Ԁ              o ?   ?   Ѐ<                  E                             o       Ԁ              @        Ԁ              o        <                              E     @  
 
  	 l                                                                                                                     Ԁ                      <                @              E     @  
 
@@ -97,19 +108,19 @@
  	 l                                                                                                             $  F   F               -=         $0H`l
  5=4mesh       (  F   F               (=         $0H`l
  -=(64mesh         F   F               =         $0H`l
- =64mesh       *{ E   E   Ѐ              D%                               } ?   ?   Ј<                   E                                }       Ԁ              ~ E   E   Ѐ            0  D%              n              ~       Ԁ              J ?   ?   Ѐ<                @  E                             Z       Ԁ              & ?   ?   Ј<                   E                                6       Ԁ               E   E   Ѐ            0  D%                            \       Ԁ               ?   ?   Ѐ<                @  E                                    Ԁ              n E   E   Ѐ              D%                               q ?   ?   Ѐ<                P  E                                       Ԁ              p E   E   Ѐ            `  D%                             ?   ?   Ј<                P  E                                       Ԁ               ?   ?   Ѐ<                p  E                                    Ԁ               E   E   Ѐ            `  D%                                   Ԁ               ?   ?   Ѐ<                p  E                                    Ԁ                     Ԁ              ?       <                              E     @  
+ =64mesh       *{ E   E   Ѐ              D%                               } ?   ?   Ј<                   E                                }       Ԁ              ~ E   E   Ѐ            0  D%              m              ~       Ԁ              J ?   ?   Ѐ<                @  E                             Z       Ԁ              & ?   ?   Ј<                   E                                6       Ԁ               E   E   Ѐ            0  D%                            \       Ԁ               ?   ?   Ѐ<                @  E                                    Ԁ                     Ԁ              ?       <                P              E     @  
 
- 	 l                                                                                                             O       Ԁ                     <                              E     @  
+ 	 l                                                                                                             O       Ԁ                     <                              E     @  
 
- 	 l                                                                                                                    Ԁ                     <                              E     @  
+ 	 l                                                                                                                    Ԁ                     <                P              E     @  
 
- 	 l                                                                                                             m       Ԁ                     <                              E     @  
+ 	 l                                                                                                             m       Ԁ                     <                `              E     @  
 
- 	 l                                                                                                                    Ԁ              o       <                               E     @  
+ 	 l                                                                                                                    Ԁ              o       <                              E     @  
 
- 	 l                                                                                                                    Ԁ              ߫       <                              E     @  
+ 	 l                                                                                                                    Ԁ              ߫       <                `              E     @  
 
- 	 l                                                                                                              F   F               -D         $0H`l
- =D4mesh       H7 F   F               H@E         $0H`l
- D=4mesh       +b F   F               jE         $0H`l
- @EX>4mesh    
\ No newline at end of file
+ 	 l                                                                                                              F   F               p-D         $0H`l
+ =D4mesh       H7 F   F                H@E         $0H`l
+ D=4mesh       +b F   F               pjE         $0H`l
+ @EX>4mesh       % E   E   Ѐ              D%                               & ?   ?   Ѐ<                  E                                &       Ԁ              ' E   E   Ѐ              D%                             ( ?   ?   Ј<                  E                                0(       Ԁ              ( ?   ?   Ѐ<                  E                             (       Ԁ              ) E   E   Ѐ              D%                            *       Ԁ              '+ ?   ?   Ѐ<                  E                             7+       Ԁ           
\ No newline at end of file
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,46 +1,58 @@
-ò            i         E   E   Ѐ                D%                                $  <   <                 $          $0H`l 4mesh        %  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          /%        Ԁ               }%  P   P   Ѐ<                 J     $0H`l3          9 7          >&        Ԁ               r&  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          7'        Ԁ               '  P   P   Ѐ<                  J     $0H`l3         9 7          '        Ԁ               (  R   R   Ј<                   J   $0H`l4mesh3          9 7          (        Ԁ               <)  P   P   Ѐ<                0 J    $0H`l3         9 7          )        Ԁ               :*  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          *        Ԁ               +  P   P   Ѐ<                 J     $0H`l3         9 7          +        Ԁ               ?  A   A                 k?          $0H`l $ 4mesh          A   A               0 (          $0H`l $ 4mesh                Ԁ               %  P   P   Ѐ<                @ J    $0H`l3         9 7            R   R   Ѐ<                P  J   $0H`l4mesh3         9 7          <        Ԁ               t E   E   Ѐ            `   D%                                u ?   ?   Ѐ<                P   E                                 u       Ԁ               u ?   ?   Ј<                P   E                                 v       Ԁ               v E   E   Ѐ            `   D%                             w ?   ?   Ѐ<                0   E                                 w       Ԁ               6x ?   ?   Ѐ<                p   E                              x       Ԁ               y E   E   Ѐ            @   D%              -              y       Ԁ                A   A               P          $0H`l $ 4mesh        - F   F                -         $0H`l
-  4mesh        7 F   F               p H7         $0H`l
-  4mesh         A   A               ` I         $0H`l 4mesh       $  F   F                Mf         $0H`l
+ò            i         E   E   Ѐ                D%                                $  <   <                 $          $0H`l 4mesh        %  R   R   Ѐ<                  J   $0H`l4mesh3          9 7          /%        Ԁ               }%  P   P   Ѐ<                 J     $0H`l3          9 7          >&        Ԁ               r&  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          7'        Ԁ               '  P   P   Ѐ<                  J     $0H`l3         9 7          '        Ԁ               (  R   R   Ј<                   J   $0H`l4mesh3          9 7          (        Ԁ               E)  P   P   Ѐ<                0 J    $0H`l3         9 7          *        Ԁ               C*  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          +        Ԁ               +  P   P   Ѐ<                 J     $0H`l3         9 7          +        Ԁ               ?  A   A                 k?          $0H`l $ 4mesh          A   A               0 (          $0H`l $ 4mesh                Ԁ               %  P   P   Ѐ<                @ J    $0H`l3         9 7            R   R   Ѐ<                P  J   $0H`l4mesh3         9 7          <        Ԁ                A   A               0          $0H`l $ 4mesh        - F   F               P -         $0H`l
+  4mesh        7 F   F               ` H7         $0H`l
+  4mesh        
+ E   E   Ѐ            p   D%                                
+ ?   ?   Ѐ<                `   E                                 ů
+       Ԁ               
+ ?   ?   Ј<                `   E                                 
+       Ԁ               
+ E   E   Ѐ            p   D%                             
+ ?   ?   Ѐ<                @   E                                 
+       Ԁ               N
+ ?   ?   Ѐ<                   E                              
+       Ԁ               
+ E   E   Ѐ            P   D%              -              
+       Ԁ                A   A               ` I         $0H`l 4mesh       $  F   F                Mf         $0H`l
  7J4mesh         F   F                h         $0H`l
  fb4mesh        A   A               p          $0H`l f4mesh       - F   F                m         $0H`l
  4mesh       7 F   F                y         $0H`l
  4mesh         A   A                         $0H`l 4mesh       $  F   F                         $0H`l
  z4mesh         F   F                         $0H`l
- 4mesh         E   E   Ѐ               D%                               @  ?   ?   Ѐ<                   E                                \        Ԁ                ?   ?   Ј<                   E                                  ?   ?   Ј<                   E                                5        Ԁ                       Ԁ                E   E   Ѐ               D%                              ?   ?   Ѐ<                   E                                        Ԁ              .  ?   ?   Ѐ<                   E                                     Ԁ                E   E   Ѐ               D%              B             b0 E   E   Ѐ               D%                               0 ?   ?   Ѐ<                   E                                -1       Ԁ              2 ?   ?   Ј<                   E                                2       Ԁ              3       Ԁ              3 E   E   Ѐ               D%              `             4 ?   ?   Ѐ<                   E                                4       Ԁ              ?5 ?   ?   Ѐ<                  E                             5       Ԁ              6 E   E   Ѐ               D%                            A   A                -&         $0H`l 4mesh       . L   L                                
+ 4mesh         E   E   Ѐ               D%                               @  ?   ?   Ѐ<                   E                                \        Ԁ                ?   ?   Ј<                   E                                  ?   ?   Ј<                   E                                5        Ԁ                       Ԁ                E   E   Ѐ               D%                              ?   ?   Ѐ<                   E                                        Ԁ              .  ?   ?   Ѐ<                   E                                     Ԁ                E   E   Ѐ               D%              ^              A   A                -&         $0H`l 4mesh        L   L                                
 
-       Y L   L                               
+        L   L                               
 
-        L   L                               
+        F   F                I&         $0H`l
+ -&4mesh        L   L                               
 
-              Ԁ               L   L   <                                      
+              Ԁ               L   L   <                                      
      
-       ѯ       Ԁ              ( L   L   <                0                     
+              Ԁ              \ L   L   <                                     
      
-              Ԁ                     <                                E      @  
+              Ԁ              H       <                                E      @  
 
- 	 l                                                                                                             $       Ԁ                     <                @              E      @  
+ 	 l                                                                                                             X       Ԁ                     <                               E      @  
 
- 	 l                                                                                                                    Ԁ              <       <                               E      @  
+ 	 l                                                                                                             /       Ԁ              p       <                               E      @  
 
- 	 l                                                                                                             - F   F               PI&         $0H`l
- -&4mesh        L   L                               
+ 	 l                                                                                                              L   L                               
 
-       1 L   L          `                    
+        L   L          0                    
 
-       ] L   L   <                                       
+       I L   L   <                                       
      
-       m       Ԁ               L   L   <                p                     
+       Y       Ԁ              T L   L                               
+
+        L   L   <                @                     
      
-              Ԁ               L   L   <                                     
+       r       Ԁ               L   L   <                                      
      
-       U L   L                              
-
-              Ԁ              $       <                               E      @  
+       )       Ԁ                     <                              E      @  
 
- 	 l                                                                                                             4       Ԁ                     <                              E      @  
+ 	 l                                                                                                                    Ԁ              "       <                P              E      @  
 
- 	 l                                                                                                                    Ԁ              7 F   F               0Ȼ&         $0H`l
- J&F4mesh               <                                E     @  
+ 	 l                                                                                                             c       Ԁ              7 F   F                Ȼ&         $0H`l
+ J&F4mesh       zj E   E   Ѐ            0  D%                               j ?   ?   Ѐ<                `  E                                Ek       Ԁ              3l ?   ?   Ј<                `  E                                l       Ԁ              m       Ԁ              m E   E   Ѐ            p  D%                            n ?   ?   Ѐ<                   E                                o       Ԁ              Vo ?   ?   Ѐ<                  E                             o       Ԁ              p E   E   Ѐ              D%              }                     <                                E     @  
 
  	 l                                                                                                                     Ԁ              k        <                              E     @  
 
@@ -80,16 +92,16 @@
 
  	 l                                                                                                                     Ԁ              $  F   F               -=         $0H`l
  5=4mesh         F   F               (=         $0H`l
- -=(64mesh       { E   E   Ѐ              D%                               { ?   ?   Ѐ<                   E                                J}       Ԁ              } ?   ?   Ј<                   E                                       Ԁ               ?   ?   Ј<                   E                                c       Ԁ              9 E   E   Ѐ            0  D%                             ?   ?   Ѐ<                  E                                /       Ԁ              } ?   ?   Ѐ<                @  E                             &       Ԁ               E   E   Ѐ              D%                            E   E   Ѐ              D%                                ?   ?   Ѐ<                P  E                                       Ԁ               ?   ?   Ј<                P  E                                D       Ԁ                     Ԁ              ^ E   E   Ѐ            `  D%                            E ?   ?   Ѐ<                  E                                U       Ԁ               ?   ?   Ѐ<                p  E                             K       Ԁ               E   E   Ѐ              D%                           ԡ       <                               E     @  
+ -=(64mesh       { E   E   Ѐ              D%                               { ?   ?   Ѐ<                   E                                J}       Ԁ              } ?   ?   Ј<                   E                                       Ԁ               ?   ?   Ј<                   E                                c       Ԁ              9 E   E   Ѐ            0  D%                             ?   ?   Ѐ<                  E                                /       Ԁ              } ?   ?   Ѐ<                @  E                             &       Ԁ               E   E   Ѐ              D%                           ԡ       <                               E     @  
 
- 	 l                                                                                                                    Ԁ              ;       <                              E     @  
+ 	 l                                                                                                                    Ԁ              ;       <                P              E     @  
 
- 	 l                                                                                                             {       Ԁ                     <                              E     @  
+ 	 l                                                                                                             {       Ԁ                     <                              E     @  
 
- 	 l                                                                                                              A   A               D         $0H`l -=4mesh       E       Ԁ              t       <                               E     @  
+ 	 l                                                                                                              A   A               D         $0H`l -=4mesh       E       Ԁ              t       <                              E     @  
 
- 	 l                                                                                                                    Ԁ              ۪       <                              E     @  
+ 	 l                                                                                                                    Ԁ              ۪       <                `              E     @  
 
- 	 l                                                                                                                    Ԁ              - F   F               -D         $0H`l
- =D4mesh       7 F   F               H@E         $0H`l
- D=4mesh    
\ No newline at end of file
+ 	 l                                                                                                                    Ԁ              - F   F               p-D         $0H`l
+ =D4mesh       7 F   F                H@E         $0H`l
+ D=4mesh       % E   E   Ѐ              D%                               & ?   ?   Ѐ<                  E                                &       Ԁ              ' ?   ?   Ј<                  E                                \(       Ԁ              ')       Ԁ              v) E   E   Ѐ              D%                            \* ?   ?   Ѐ<                  E                                l*       Ԁ              * ?   ?   Ѐ<                  E                             c+       Ԁ              ', E   E   Ѐ              D%                        
\ No newline at end of file
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,29 +1,36 @@
-ò            i       u$  <   <                 $          $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          "(        Ԁ               V(  R   R   Ј<                   J   $0H`l4mesh3          9 7          )        Ԁ               )  P   P   Ѐ<                0 J    $0H`l3         9 7          )        Ԁ               *  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          *        Ԁ                +  P   P   Ѐ<                 J     $0H`l3         9 7          +        Ԁ               k?  A   A                 k?          $0H`l $ 4mesh        qu ?   ?   Ѐ<                P   E                                 Jv ?   ?   Ј<                P   E                                 Iw E   E   Ѐ            `   D%                             kw ?   ?   Ѐ<                0   E                                 x       Ԁ               x ?   ?   Ѐ<                p   E                              .y E   E   Ѐ            @   D%              -               A   A               P          $0H`l $ 4mesh         F   F                -         $0H`l
-  4mesh       k  A   A               ` I         $0H`l 4mesh       $  F   F                Mf         $0H`l
+ò            i       u$  <   <                 $          $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          "(        Ԁ               _(  R   R   Ј<                   J   $0H`l4mesh3          9 7          $)        Ԁ               )  P   P   Ѐ<                0 J    $0H`l3         9 7          )        Ԁ               *  R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          *        Ԁ               )+  P   P   Ѐ<                 J     $0H`l3         9 7          +        Ԁ               k?  A   A                 k?          $0H`l $ 4mesh         A   A               0          $0H`l $ 4mesh         F   F               P -         $0H`l
+  4mesh        
+ ?   ?   Ѐ<                `   E                                 a
+ ?   ?   Ј<                `   E                                 a
+ E   E   Ѐ            p   D%                             
+ ?   ?   Ѐ<                @   E                                 ,
+       Ԁ               
+ ?   ?   Ѐ<                   E                              F
+ E   E   Ѐ            P   D%              -             k  A   A               ` I         $0H`l 4mesh       $  F   F                Mf         $0H`l
  7J4mesh        A   A               p          $0H`l f4mesh        F   F                m         $0H`l
  4mesh       k  A   A                         $0H`l 4mesh       $  F   F                         $0H`l
- z4mesh         ?   ?   Ѐ<                   E                                  ?   ?   Ј<                   E                                  ?   ?   Ј<                   E                                A  E   E   Ѐ               D%                            c  ?   ?   Ѐ<                   E                                        Ԁ                ?   ?   Ѐ<                   E                             &  E   E   Ѐ               D%              B             0 ?   ?   Ѐ<                   E                                2 ?   ?   Ј<                   E                                R4 E   E   Ѐ               D%              `             t4 ?   ?   Ѐ<                   E                                5       Ԁ              5 ?   ?   Ѐ<                  E                             76 E   E   Ѐ               D%                            A   A                -&         $0H`l 4mesh        L   L                                
+ z4mesh         ?   ?   Ѐ<                   E                                  ?   ?   Ј<                   E                                  ?   ?   Ј<                   E                                A  E   E   Ѐ               D%                            c  ?   ?   Ѐ<                   E                                        Ԁ                ?   ?   Ѐ<                   E                             &  E   E   Ѐ               D%              ^              A   A                -&         $0H`l 4mesh       H L   L                                
 
-       ٪ L   L                               
+       s L   L                               
 
-              Ԁ               L   L   <                0                     
+        F   F                I&         $0H`l
+ -&4mesh       2       Ԁ               L   L   <                                     
      
-              Ԁ                     <                                E      @  
+              Ԁ              D       <                                E      @  
 
- 	 l                                                                                                             P       Ԁ                     <                @              E      @  
+ 	 l                                                                                                                    Ԁ                     <                               E      @  
 
- 	 l                                                                                                              F   F               PI&         $0H`l
- -&4mesh        L   L          `                    
+ 	 l                                                                                                              L   L          0                    
 
-        L   L   <                                       
+        L   L   <                                       
      
-              Ԁ               L   L   <                p                     
-     
-        L   L                              
+              Ԁ               L   L                               
 
-       `       Ԁ                     <                              E      @  
+       6 L   L   <                @                     
+     
+              Ԁ              '       <                P              E      @  
 
- 	 l                                                                                                                    Ԁ                        <                                E     @  
+ 	 l                                                                                                             7       Ԁ              k ?   ?   Ѐ<                `  E                                l ?   ?   Ј<                `  E                                jn E   E   Ѐ            p  D%                            n ?   ?   Ѐ<                   E                                5o       Ԁ              o ?   ?   Ѐ<                  E                             Np E   E   Ѐ              D%              }                       <                                E     @  
 
  	 l                                                                                                             @        Ԁ              o        <                              E     @  
 
@@ -46,11 +53,11 @@
         Ԁ              q        <                               E     @  
 
  	 l                                                                                                                     Ԁ              $  F   F               -=         $0H`l
- 5=4mesh       ,| ?   ?   Ѐ<                   E                                ~ ?   ?   Ј<                   E                                & ?   ?   Ј<                   E                                 E   E   Ѐ            0  D%                            ρ ?   ?   Ѐ<                  E                                \       Ԁ               ?   ?   Ѐ<                @  E                             u E   E   Ѐ              D%                           q ?   ?   Ѐ<                P  E                                 ?   ?   Ј<                P  E                                 E   E   Ѐ            `  D%                             ?   ?   Ѐ<                  E                                       Ԁ               ?   ?   Ѐ<                p  E                              E   E   Ѐ              D%                                   <                               E     @  
+ 5=4mesh       ,| ?   ?   Ѐ<                   E                                ~ ?   ?   Ј<                   E                                & ?   ?   Ј<                   E                                 E   E   Ѐ            0  D%                            ρ ?   ?   Ѐ<                  E                                \       Ԁ               ?   ?   Ѐ<                @  E                             u E   E   Ѐ              D%                                   <                               E     @  
 
- 	 l                                                                                                                    Ԁ              ?       <                              E     @  
+ 	 l                                                                                                                    Ԁ              ?       <                P              E     @  
 
- 	 l                                                                                                              A   A               D         $0H`l -=4mesh              Ԁ              ߫       <                              E     @  
+ 	 l                                                                                                              A   A               D         $0H`l -=4mesh              Ԁ              ߫       <                `              E     @  
 
- 	 l                                                                                                                    Ԁ               F   F               -D         $0H`l
- =D4mesh    
\ No newline at end of file
+ 	 l                                                                                                                    Ԁ               F   F               p-D         $0H`l
+ =D4mesh       & ?   ?   Ѐ<                  E                                 ( ?   ?   Ј<                  E                                ) E   E   Ѐ              D%                            * ?   ?   Ѐ<                  E                                *       Ԁ              '+ ?   ?   Ѐ<                  E                             + E   E   Ѐ              D%                        
\ No newline at end of file
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression.cc ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression.cc
--- ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression.cc	2015-02-05 15:46:22.000000000 -0800
@@ -125,6 +125,7 @@
   // 3. setup TCP/IP
   InternetStackHelper internetStack;
   internetStack.Install (*m_nodes);
+  streamsUsed += internetStack.AssignStreams (*m_nodes, streamsUsed);
   Ipv4AddressHelper address;
   address.SetBase ("10.1.1.0", "255.255.255.0");
   m_interfaces = address.Assign (meshDevices);
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -36,9 +36,9 @@
  	                              s        Ԁ                      Ԁ                `   `   <                      
          E  0   @  
 
- 	                                      Ԁ              B&  L   L                                
+ 	                                      Ԁ              **  L   L                                
 
-       n'  L   L                              
+       V+  L   L                              
 
          F   F                S.         $0H`l
  &u'4mesh       JO A   A                
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -57,11 +57,11 @@
  	                                      Ԁ              %  `   `   <                      
          E  0   @  
 
- 	                                      Ԁ              &  L   L                                
+ 	                                      Ԁ              *  L   L                                
 
-       &  L   L                              
+       *  L   L                              
 
-       (  L   L          P                    
+       ,  L   L          P                    
 
          F   F                S.         $0H`l
  &u'4mesh         F   F               `.         $0H`l
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -7,7 +7,7 @@
  4mesh       U R   R   Ѐ<      	            J   $0H`l4mesh3         9 7         V       Ԁ       	       W       Ԁ       	       \X P   P   Ѐ<      	          J    $0H`l3         9 7          F   F                m         $0H`l
  74mesh       5 2   2   Ѐ<                0J 4mesh 7          5       Ԁ              ;6 2   2   Ѐ<                p J 4mesh 7          6       Ԁ              7 2   2   Ј<                0J 4mesh 7          7       Ԁ              7 F   F                y         $0H`l
  4mesh       8 R   R   Ѐ<                @ J   $0H`l4mesh3         9 7         9       Ԁ              U9 2   2   Ѐ<                 J 4mesh 7          9       Ԁ              u: 2   2   Ѐ<                PJ 4mesh 7          :       Ԁ              +b F   F               p          $0H`l
- z4mesh       $  L   L          `     
+ z4mesh       	  L   L          `     
                
 
 
@@ -77,11 +77,11 @@
  	                                      Ԁ                `   `   <                      
          E  0   @  
 
- 	                              n'  L   L                              
+ 	                              V+  L   L                              
 
-       '  L   L          P                    
+       +  L   L          P                    
 
-       ,  F   F                -         $0H`l
+       ,  F   F                -         $0H`l
 z-&4mesh         F   F                S.         $0H`l
  &u'4mesh       (  F   F               `.         $0H`l
 .-4mesh       S       Ԁ       	        `   `   <                0     
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -21,11 +21,11 @@
         P   P   Ѐ<      
      	     	J    $0H`l3         9 7          R   R   Ѐ<      
      	     	  J   $0H`l4mesh3         9 7                Ԁ       
-       T$  L   L          	0     
+         L   L          	0     
                
 
 
-       $  L   L          `     
+       '	  L   L          `     
                
 
 
@@ -95,7 +95,7 @@
  	                                      Ԁ                `   `   <                @     
          E  0   @  
 
- 	                              ,  F   F                -         $0H`l
+ 	                              W,  F   F                -         $0H`l
 z-&4mesh         F   F               `.         $0H`l
 .-4mesh       T       Ԁ       
         `   `   <           	          
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -40,16 +40,16 @@
      	     	  J   $0H`l4mesh3         9 7                Ԁ       	        P   P   Ѐ<      	     
      
 J    $0H`l3         9 7                Ԁ       
-       #  L   L          
+       P  L   L          
       
                 
 
 
-       #  L   L          	0     
+       {  L   L          	0     
                
 
 
-       $  L   L          `     
+       	  L   L          `     
                
 
 
@@ -114,7 +114,7 @@
  	                                      Ԁ       	         `   `   <                     
          E  0   @  
 
- 	                              ,  F   F                -         $0H`l
+ 	                              ,  F   F                -         $0H`l
 z-&4mesh         A   A          
      
 I.         $0H`lz-4mesh       T F   F          	     	K5         $0H`l
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -123,12 +123,12 @@
      	     	  J   $0H`l4mesh3         9 7                Ԁ       	       	 P   P   Ѐ<      	     
      
 J    $0H`l3         9 7                Ԁ       
-       (#  L   L          
+         L   L          
       
                 
 
 
-       T$  L   L          	0     
+         L   L          	0     
                
 
 
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-simplest-regression.cc ns-3.22/src/mesh/test/dot11s/hwmp-simplest-regression.cc
--- ns-3.21/src/mesh/test/dot11s/hwmp-simplest-regression.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-simplest-regression.cc	2015-02-05 15:46:22.000000000 -0800
@@ -136,6 +136,7 @@
   // 3. setup TCP/IP
   InternetStackHelper internetStack;
   internetStack.Install (*m_nodes);
+  streamsUsed += internetStack.AssignStreams (*m_nodes, streamsUsed);
   Ipv4AddressHelper address;
   address.SetBase ("10.1.1.0", "255.255.255.0");
   m_interfaces = address.Assign (meshDevices);
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,21 +1,21 @@
 ò            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                  Ԁ               JO A   A                 JO         $0H`l  4mesh        #j A   A               0 i         $0H`l O4mesh        j A   A               0 j         $0H`l j4mesh         A   A               @ 
-         $0H`l 4mesh       JO A   A               @          $0H`l 4mesh       #j A   A               P          $0H`l 4mesh       j A   A               P 2         $0H`l 4mesh         L   L          `                      
+         $0H`l 4mesh       JO A   A               @          $0H`l 4mesh       #j A   A               P          $0H`l 4mesh       j A   A               P 2         $0H`l 4mesh       #  L   L          `                      
 
-         L   L          `                     
+       #  L   L          `                     
 
-          E   E   Ѐ            p   D%                                    !  ?   ?   Ѐ<                p   E                                !        Ԁ              #"  L   L   <                                       
+       $  E   E   Ѐ            p   D%                                    %  ?   ?   Ѐ<                p   E                                %        Ԁ              &  L   L   <                                       
      
-       "        Ԁ              )$        <                                E      @  
+       &        Ԁ              (        <                                E      @  
 
- 	 l                                                                                                             9$        Ԁ              QG  L   L                                
+ 	 l                                                                                                             !(        Ԁ              9K  L   L                                
 
-       |H  L   L   <                                       
+       dL  L   L   <                                       
      
-       H        Ԁ              I  L   L                               
+       tL        Ԁ              M  L   L                               
 
-       J        <                                E      @  
+       M        <                                E      @  
 
- 	 l                                                                                                             UK        Ԁ              T        <                                E     @  
+ 	 l                                                                                                             =O        Ԁ              T        <                                E     @  
 
  	 l                                                                                                             d        Ԁ                      <                                E     @  
 
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,21 +1,22 @@
 ò            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                  Ԁ               a  P   P   Ѐ<                 J     $0H`l3         9 7          q        Ԁ               O A   A                 JO         $0H`l  4mesh        i A   A               0 i         $0H`l O4mesh         A   A               0 j         $0H`l j4mesh         A   A               @ 
-         $0H`l 4mesh       O A   A               @          $0H`l 4mesh       i A   A               P          $0H`l 4mesh        A   A               P 2         $0H`l 4mesh       @  L   L          `                      
+         $0H`l 4mesh       O A   A               @          $0H`l 4mesh       i A   A               P          $0H`l 4mesh        A   A               P 2         $0H`l 4mesh       (#  L   L          `                      
 
-       k   L   L          `                     
+       S$  L   L          `                     
 
-       .!  E   E   Ѐ            p   D%                                    P!  ?   ?   Ѐ<                p   E                                !        Ԁ              "  L   L   <                                       
+       %  E   E   Ѐ            p   D%                                    8%  ?   ?   Ѐ<                p   E                                %        Ԁ              &  L   L   <                                       
      
-       "        Ԁ              %#        <                                E      @  
+       &        Ԁ              '        <                                E      @  
 
- 	 l                                                                                                             e$        Ԁ              G  L   L                                
+ 	 l                                                                                                             M(        Ԁ              K  L   L                                
 
-       G  L   L   <                                       
+       K  L   L   <                                       
      
-       H        Ԁ              "I  L   L                               
+       L        Ԁ              
+M  L   L                               
 
-       K        <                                E      @  
+       O        <                                E      @  
 
- 	 l                                                                                                             )K        Ԁ              P        <                                E     @  
+ 	 l                                                                                                             O        Ԁ              P        <                                E     @  
 
  	 l                                                                                                                     Ԁ                      <                                E     @  
 
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression.cc ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression.cc
--- ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression.cc	2015-02-05 15:46:22.000000000 -0800
@@ -143,6 +143,7 @@
   // 3. setup TCP/IP
   InternetStackHelper internetStack;
   internetStack.Install (*m_nodes);
+  streamsUsed += internetStack.AssignStreams (*m_nodes, streamsUsed);
   Ipv4AddressHelper address;
   address.SetBase ("10.1.1.0", "255.255.255.0");
   m_interfaces = address.Assign (meshDevices);
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,69 +1,69 @@
 ò            i       B  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          a        Ԁ               H        Ԁ                  P   P   Ѐ<                 J     $0H`l3         9 7            A   A                           $0H`l  4mesh        %  R   R   Ѐ<                   J   $0H`l4mesh3          9 7                  Ԁ                 P   P   Ѐ<                0 J    $0H`l3         9 7                  Ԁ                 R   R   Ѐ<                @  J   $0H`l4mesh3         9 7                  Ԁ                 P   P   Ѐ<                 J     $0H`l3         9 7                  Ԁ               JO A   A                 JO         $0H`l  4mesh        +b F   F               P a         $0H`l
  7O4mesh        j A   A               0 j         $0H`l b4mesh         F   F               `          $0H`l
  4mesh       JO A   A               @          $0H`l 4mesh       +b F   F               p          $0H`l
- z4mesh       j A   A               P 2         $0H`l 4mesh         L   L                               
+ z4mesh       j A   A               P 2         $0H`l 4mesh         L   L                               
 
-         L   L          `                     
+         L   L          `                     
 
-         E   E   Ѐ            p   D%                                      E   E   Ѐ               D%                                         Ԁ              U  ?   ?   Ѐ<                   E                             e        Ԁ                L   L   <                                       
+         E   E   Ѐ            p   D%                                      E   E   Ѐ               D%                                         Ԁ              =  ?   ?   Ѐ<                   E                             M        Ԁ                L   L   <                                       
      
-       y        Ԁ              $  L   L   <                                      
+       a        Ԁ                L   L   <                                      
      
-               Ԁ              L        <                               E      @  
+               Ԁ              4        <                               E      @  
 
- 	 l                                                                                                             \        Ԁ              8  L   L                                
+ 	 l                                                                                                             D        Ԁ                L   L                                
 
-       9  L   L                               
+         L   L                               
 
-       :        Ԁ              w;  L   L   <                                      
+               Ԁ                 L   L   <                                      
      
-       ;        Ԁ              <        <                                E      @  
+                Ԁ              G!        <                                E      @  
 
- 	 l                                                                                                             %>        Ԁ              T?        <                               E      @  
+ 	 l                                                                                                             "        Ԁ              #        <                               E      @  
 
  	 l                                                                                                               F   F                E         $0H`l
- 34mesh       JO A   A                         $0H`l E4mesh       x L   L                               
+ 34mesh       JO A   A                         $0H`l E4mesh       0 L   L                               
 
-        L   L   <                                       
+       1 L   L   <                                       
      
-        L   L   <                                       
+        3 L   L   <                                       
      
-       l       Ԁ                     <                                E      @  
+       3       Ԁ              5       <                                E      @  
 
- 	 l                                                                                                                    Ԁ              J L   L                               
+ 	 l                                                                                                             5       Ԁ              5 L   L                               
 
-       O L   L                                
+       8 L   L                                
 
-       {  L   L   <                0                      
+       : L   L   <                0                      
      
-               Ԁ              ! L   L          @                    
+       /:       Ԁ              F; L   L          @                    
 
-       "       <                                E      @  
+       7<       <                                E      @  
 
- 	 l                                                                                                             #       Ԁ              5 L   L                                
+ 	 l                                                                                                             x=       Ԁ              g L   L                                
 
-       7 L   L          P                    
+        L   L          P                    
 
-       ;       Ԁ              F= E   E   Ѐ            `  D%              ,                  h= ?   ?   Ѐ<                  E                                >       Ԁ              > ?   ?   Ѐ<                p  E                             Z@ L   L   <                                     
+       O$       Ԁ              % E   E   Ѐ            `  D%              ,                  % ?   ?   Ѐ<                  E                                &       Ԁ              .' ?   ?   Ѐ<                p  E                             ( L   L   <                                     
      
-       j@       Ԁ              @       <                                E      @  
+       (       Ԁ              Q)       <                                E      @  
 
  
- l                                                                                                             B       Ԁ              C       <                              E      @  
+ l                                                                                                             *       Ԁ              >,       <                              E      @  
 
  
- l                                                                                                             Ib L   L                              
+ l                                                                                                             f0 L   L                              
 
-       tb L   L   <                0                      
+       0 L   L   <                0                      
      
-       0c       Ԁ              c L   L   <                                     
+       M1       Ԁ              2 L   L   <                                     
      
-       d L   L          @                    
+       2 L   L          @                    
 
-       -i       Ԁ              \j       <                              E      @  
+       J7       Ԁ              y8       <                              E      @  
 
  
- l                                                                                                             lj       Ԁ              +b F   F               3&         $0H`l
+ l                                                                                                             8       Ԁ              +b F   F               3&         $0H`l
  &4mesh       j A   A               Pt'         $0H`l &4mesh       @        Ԁ              o        <                              E     @  
 
  	 l                                                                                                                     Ԁ                      <                `               E     @  
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -4,92 +4,92 @@
  fb4mesh         F   F               `          $0H`l
  4mesh       O A   A               @          $0H`l 4mesh       7 F   F               p y         $0H`l
  4mesh       a F   F               p          $0H`l
- z4mesh        A   A               P 2         $0H`l 4mesh          L   L                                
+ z4mesh        A   A               P 2         $0H`l 4mesh         L   L                                
 
-       K  L   L                               
+       3  L   L                               
 
-       v  L   L          `                     
+       ^  L   L          `                     
 
-       9  E   E   Ѐ            p   D%                                      E   E   Ѐ               D%                                   ?   ?   Ѐ<                   E                                        Ԁ                ?   ?   Ѐ<                   E                                     Ԁ              =  L   L   <                                       
+       !  E   E   Ѐ            p   D%                                    p  E   E   Ѐ               D%                                 s  ?   ?   Ѐ<                   E                                        Ԁ                ?   ?   Ѐ<                   E                             z        Ԁ              %  L   L   <                                       
      
-       M        Ԁ                L   L   <                                      
+       5        Ԁ                L   L   <                                      
      
-       `        Ԁ                      <                                E      @  
+       H        Ԁ                      <                                E      @  
 
- 	 l                                                                                                                     Ԁ              G        <                               E      @  
+ 	 l                                                                                                                     Ԁ              /        <                               E      @  
 
- 	 l                                                                                                                     Ԁ              9  L   L                                
+ 	 l                                                                                                             p        Ԁ                L   L                                
 
-       79  L   L                               
+         L   L                               
 
-       c:  L   L   <                                       
+         L   L   <                                       
      
-       s:        Ԁ              :  L   L   <                                      
+               Ԁ              E   L   L   <                                      
      
-       ;        Ԁ              <  L   L                               
-
-       =        <                                E      @  
+       !        Ԁ              K"        <                                E      @  
 
- 	 l                                                                                                             =        Ԁ              P>        <                               E      @  
+ 	 l                                                                                                             ["        Ԁ              "        <                               E      @  
 
- 	 l                                                                                                             ?        Ԁ                F   F                         $0H`l
+ 	 l                                                                                                             #        Ԁ              :%  L   L                               
+
+         F   F                         $0H`l
  4mesh         F   F                E         $0H`l
- 34mesh       O A   A                         $0H`l E4mesh        L   L                               
+ 34mesh       O A   A                         $0H`l E4mesh       h0 L   L                               
 
-       0 L   L   <                                       
+       3 L   L   <                                       
      
-       @       Ԁ                     <                                E      @  
+       3       Ԁ              4       <                                E      @  
 
- 	 l                                                                                                                    Ԁ               L   L                               
+ 	 l                                                                                                             H5       Ԁ              ;6 L   L                               
 
-        L   L                                
+       t9 L   L                                
 
-        L   L   <                0                      
+       9 L   L   <                0                      
      
-               Ԁ              !! L   L          @                    
+       [:       Ԁ              : L   L          @                    
 
-       M" L   L                               
+       ; L   L                               
 
-       #       <                                E      @  
+       <=       <                                E      @  
 
- 	 l                                                                                                             #       Ԁ              X6 L   L                                
+ 	 l                                                                                                             L=       Ԁ               L   L                                
 
-       6 L   L          P                    
+        L   L          P                    
 
-       7 L   L                               
+       >  L   L                               
 
-       9 ?   ?   Ѐ<                  E             ,                 :       Ԁ              ; L   L   <                                      
+       ;" ?   ?   Ѐ<                  E             ,                 _#       Ԁ              $ L   L   <                                      
      
-       ;       Ԁ              < E   E   Ѐ            0  D%                                 < E   E   Ѐ            `  D%              ,                  = ?   ?   Ѐ<                  E                                =       Ԁ              2> ?   ?   Ѐ<                p  E                             >       Ԁ              i? ?   ?   Ѐ<                @  E           ,                 ? L   L   <                                     
+       #$       Ԁ              % E   E   Ѐ            0  D%                                 a% E   E   Ѐ            `  D%              ,                  d& ?   ?   Ѐ<                  E                                t&       Ԁ              & ?   ?   Ѐ<                p  E                             k'       Ԁ              ' ?   ?   Ѐ<                @  E           ,                 i( L   L   <                                     
      
-       @       Ԁ              A       <                                E      @  
+       &)       Ԁ              U*       <                                E      @  
 
  
- l                                                                                                             A       Ԁ              B       <                              E      @  
+ l                                                                                                             e*       Ԁ              :+       <                              E      @  
 
  
- l                                                                                                             C       Ԁ              E       <                P              E      @  
+ l                                                                                                             {,       Ԁ              -       <                P              E      @  
 
  
- l                                                                                                             a L   L          `                    
+ l                                                                                                             / L   L          `                    
 
-       a L   L                              
+       / L   L                              
 
-       b L   L   <                0                      
+       1 L   L   <                0                      
      
-       c       Ԁ              vc L   L   <                                     
+       !1       Ԁ              1 L   L   <                                     
      
-       3d       Ԁ              e L   L          @                    
+       P2       Ԁ              3 L   L          @                    
 
-       e L   L   <                p                     
+       3 L   L   <                p                     
      
-       zg       Ԁ              h       <                              E      @  
+       5       Ԁ              7       <                              E      @  
 
  
- l                                                                                                             i       Ԁ              Xi       <                              E      @  
+ l                                                                                                             7       Ԁ              u7       <                              E      @  
 
  
- l                                                                                                             j       Ԁ              7 F   F               Ȼ&         $0H`l
+ l                                                                                                             8       Ԁ              7 F   F               Ȼ&         $0H`l
  J&E4mesh       a F   F               3&         $0H`l
  &4mesh        A   A               Pt'         $0H`l &4mesh               <                               E     @  
 
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -5,81 +5,81 @@
  fb4mesh         F   F               `          $0H`l
  4mesh        A   A               P m         $0H`l 4mesh       H7 F   F               p y         $0H`l
  4mesh       +b F   F               p          $0H`l
- z4mesh         L   L                                
+ z4mesh         L   L                                
 
-         L   L                               
+         L   L                               
 
-         E   E   Ѐ               D%                                   ?   ?   Ѐ<                   E                                        Ԁ              U  ?   ?   Ѐ<                   E                             y        Ԁ              $  L   L   <                                      
+         E   E   Ѐ               D%                                   ?   ?   Ѐ<                   E                                        Ԁ              =  ?   ?   Ѐ<                   E                             a        Ԁ                L   L   <                                      
      
-       4        Ԁ                      <                                E      @  
+               Ԁ                      <                                E      @  
 
- 	 l                                                                                                                     Ԁ              L        <                               E      @  
+ 	 l                                                                                                                     Ԁ              4        <                               E      @  
 
- 	 l                                                                                                             }$  A   A               p          $0H`l z4mesh       9  L   L                               
+ 	 l                                                                                                               L   L                               
 
-       9  L   L   <                                       
+       0  L   L   <                                       
      
-       :        Ԁ              w;  L   L   <                                      
+               Ԁ                 L   L   <                                      
      
-       <  L   L                               
+       "        Ԁ              #        <                               E      @  
+
+ 	 l                                                                                                             #        Ԁ              }$  A   A               p          $0H`l z4mesh       $  L   L                               
 
-       7=  L   L                               
+       %  L   L                               
 
-       %>        Ԁ              T?        <                               E      @  
-
- 	 l                                                                                                             d?        Ԁ              (  F   F                         $0H`l
+       (  F   F                         $0H`l
  4mesh         F   F                E         $0H`l
- 34mesh       x L   L                               
+ 34mesh       0 L   L                               
 
-        L   L                               
+       1 L   L                               
 
-        L   L                               
+       >2 L   L                               
 
-       l       Ԁ                     <                                E      @  
+       3       Ԁ              5       <                                E      @  
 
- 	 l                                                                                                             {  L   L   <                0                      
+ 	 l                                                                                                             : L   L   <                0                      
      
-       ! L   L          @                    
+       F; L   L          @                    
 
-       ! L   L                               
+       q; L   L                               
 
-       " L   L                               
+       < L   L                               
 
-       #       Ԁ              7 L   L          P                    
+       x=       Ԁ               L   L          P                    
 
-       .7 L   L                               
+        L   L                               
 
-       Z8 L   L                               
+         L   L                               
 
-       9 E   E   Ѐ               D%                                    ?9 ?   ?   Ѐ<                  E             ,                 9       Ԁ              : L   L   <                                       
+       ! E   E   Ѐ               D%                                    ! ?   ?   Ѐ<                  E             ,                 w"       Ԁ              "# L   L   <                                       
      
-       :       Ԁ              ; L   L   <                                      
+       2#       Ԁ              # L   L   <                                      
      
-       ;       Ԁ              < E   E   Ѐ            0  D%                                 F= E   E   Ѐ            `  D%              ,                  >       Ԁ              > ?   ?   Ѐ<                p  E                             >       Ԁ              > ?   ?   Ѐ<                @  E           ,                 ?       Ԁ              Z@ L   L   <                                     
+       O$       Ԁ              $ E   E   Ѐ            0  D%                                 % E   E   Ѐ            `  D%              ,                  &       Ԁ              .' ?   ?   Ѐ<                p  E                             >'       Ԁ              ' ?   ?   Ѐ<                @  E           ,                 5(       Ԁ              ( L   L   <                                     
      
-       B       Ԁ              C       <                              E      @  
+       *       Ԁ              >,       <                              E      @  
 
  
- l                                                                                                             C       Ԁ              D       <                P              E      @  
+ l                                                                                                             N,       Ԁ              ,       <                P              E      @  
 
  
- l                                                                                                             VE       Ԁ              ` L   L                                
+ l                                                                                                             -       Ԁ              . L   L                                
 
-       a L   L          `                    
+       :/ L   L          `                    
 
-       Ib L   L                              
+       f0 L   L                              
 
-       0c       Ԁ              c L   L   <                                     
+       M1       Ԁ              2 L   L   <                                     
      
-       d       Ԁ              Re L   L   <                p                     
+       #2       Ԁ              o3 L   L   <                p                     
      
-       f       Ԁ              =g       <                                E      @  
+       +4       Ԁ              Z5       <                                E      @  
 
  
- l                                                                                                             Mg       Ԁ              g       <                              E      @  
+ l                                                                                                             j5       Ԁ              	6       <                              E      @  
 
  
- l                                                                                                             -i       Ԁ              \j       <                              E      @  
+ l                                                                                                             J7       Ԁ              y8       <                              E      @  
 
  
  l                                                                                                              A   A                I&         $0H`l 4mesh       H7 F   F               Ȼ&         $0H`l
diff -Naur ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap
--- ns-3.21/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,48 +1,48 @@
 ò            i       $  <   <                 $          $0H`l 4mesh        %  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          /%        Ԁ               }%  P   P   Ѐ<                 J     $0H`l3          9 7          >&        Ԁ               r&  R   R   Ѐ<                   J   $0H`l4mesh3          9 7          7'        Ԁ               '  P   P   Ѐ<                 J     $0H`l3         9 7          '        Ԁ                 A   A                 (          $0H`l $ 4mesh                Ԁ               %  P   P   Ѐ<                0 J    $0H`l3         9 7            R   R   Ѐ<                @  J   $0H`l4mesh3         9 7          <        Ԁ               - A   A               0 -         $0H`l  4mesh        7 F   F               P H7         $0H`l
   4mesh       $  A   A               @ Mf         $0H`l 74mesh         F   F               ` h         $0H`l
  fb4mesh       - A   A               P m         $0H`l 4mesh       7 F   F               p y         $0H`l
- 4mesh          L   L                                
+ 4mesh         L   L                                
 
-       K  L   L          `                     
+       3  L   L          `                     
 
-         ?   ?   Ѐ<                   E                                `        Ԁ                      <                                E      @  
+       s  ?   ?   Ѐ<                   E                                H        Ԁ                      <                                E      @  
 
- 	 l                                                                                                             $  A   A               p          $0H`l z4mesh       c:  L   L   <                                       
+ 	 l                                                                                                               L   L   <                                       
      
-       <  L   L                               
+       #        Ԁ              $  A   A               p          $0H`l z4mesh       :%  L   L                               
 
-       <  L   L                               
+       e%  L   L                               
 
-       ?        Ԁ                F   F                         $0H`l
- 4mesh       # L   L                               
+         F   F                         $0H`l
+ 4mesh       1 L   L                               
 
-       N L   L                               
+       1 L   L                               
 
-       M" L   L                               
+       ; L   L                               
 
-       x" L   L                               
+       < L   L                               
 
-       7 L   L                               
+       >  L   L                               
 
-       7 L   L                               
+       i  L   L                               
 
-       8 E   E   Ѐ               D%                                    9 ?   ?   Ѐ<                  E             ,                 9       Ԁ              : L   L   <                                       
+       8! E   E   Ѐ               D%                                    ;" ?   ?   Ѐ<                  E             ,                 K"       Ԁ              " L   L   <                                       
      
-       :       Ԁ              ; L   L   <                                      
+       _#       Ԁ              $ L   L   <                                      
      
-       < E   E   Ѐ            0  D%                                 >       Ԁ              i? ?   ?   Ѐ<                @  E           ,                 y?       Ԁ              C       Ԁ              E       <                P              E      @  
+       % E   E   Ѐ            0  D%                                 k'       Ԁ              ' ?   ?   Ѐ<                @  E           ,                 	(       Ԁ              {,       Ԁ              -       <                P              E      @  
 
  
- l                                                                                                             *E       Ԁ              r` L   L                                
+ l                                                                                                             -       Ԁ              . L   L                                
 
-       a L   L          `                    
+       / L   L          `                    
 
-       3d       Ԁ              e L   L   <                p                     
+       P2       Ԁ              3 L   L   <                p                     
      
-       e       Ԁ              9f       <                                E      @  
+       3       Ԁ              V4       <                                E      @  
 
  
- l                                                                                                             zg       Ԁ              h       <                              E      @  
+ l                                                                                                             5       Ԁ              7       <                              E      @  
 
  
  l                                                                                                             - A   A                I&         $0H`l 4mesh       7 F   F               Ȼ&         $0H`l
diff -Naur ns-3.21/src/mesh/test/flame/flame-regression.cc ns-3.22/src/mesh/test/flame/flame-regression.cc
--- ns-3.21/src/mesh/test/flame/flame-regression.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/flame/flame-regression.cc	2015-02-05 15:46:22.000000000 -0800
@@ -114,6 +114,7 @@
   // 3. setup TCP/IP
   InternetStackHelper internetStack;
   internetStack.Install (*m_nodes);
+  streamsUsed += internetStack.AssignStreams (*m_nodes, streamsUsed);
   Ipv4AddressHelper address;
   address.SetBase ("10.1.1.0", "255.255.255.0");
   m_interfaces = address.Assign (meshDevices);
diff -Naur ns-3.21/src/mesh/test/flame/flame-regression-test-0-1.pcap ns-3.22/src/mesh/test/flame/flame-regression-test-0-1.pcap
--- ns-3.21/src/mesh/test/flame/flame-regression-test-0-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/flame/flame-regression-test-0-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -8,15 +8,15 @@
 
                Ԁ              n  l   l   <                          @@             E  0    @  
 
- 	                              ~        Ԁ                <   <                    @@                 "	  <   <          0         @@                >  X   X          0         @@                
+ 	                              ~        Ԁ                <   <                    @@                 "	  <   <          0         @@                *  X   X          0         @@                
 
-         X   X          @         @@               
+       +  X   X          @         @@               
 
-               Ԁ              n  X   X   <                P         @@                    
+       ,        Ԁ              .  X   X   <                P         @@                    
      
-       ~        Ԁ                l   l   <                @         @@              E  0    @  
+       .        Ԁ              -/  l   l   <                @         @@              E  0    @  
 
- 	                                      Ԁ                l   l   <                `         @@             E  0    @  
+ 	                              0        Ԁ              	1  l   l   <                `         @@             E  0    @  
 
  	                                     Ԁ              X l   l   <                p         @@             E  0   @  
 
diff -Naur ns-3.21/src/mesh/test/flame/flame-regression-test-1-1.pcap ns-3.22/src/mesh/test/flame/flame-regression-test-1-1.pcap
--- ns-3.21/src/mesh/test/flame/flame-regression-test-1-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/flame/flame-regression-test-1-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -10,21 +10,21 @@
 
  	                              n        Ԁ                l   l   <                          @@             E  0    @  
 
- 	                                      Ԁ              =  <   <                    @@                   <   <          0         @@                	  <   <          0         @@                  X   X          0         @@                
+ 	                                      Ԁ              =  <   <                    @@                   <   <          0         @@                	  <   <          0         @@                &+  X   X          0         @@                
 
-         X   X          @         @@               
+       Q+  X   X          @         @@               
 
-       E  X   X   <                @         @@                     
+       ,  X   X   <                @         @@                     
      
-       U        Ԁ              O  X   X          P         @@               
+       ,        Ԁ              -  X   X          P         @@               
 
-         X   X   <                P         @@                    
+       5.  X   X   <                P         @@                    
      
-               Ԁ              }  l   l   <                @         @@              E  0    @  
+       /        Ԁ              /  l   l   <                @         @@              E  0    @  
 
- 	                                      Ԁ                l   l   <                `         @@             E  0    @  
+ 	                              /        Ԁ              `0  l   l   <                `         @@             E  0    @  
 
- 	                                      Ԁ              H l   l   <                `         @@              E  0   @  
+ 	                              E1        Ԁ              H l   l   <                `         @@              E  0   @  
 
  	                              X       Ԁ               l   l   <                p         @@             E  0   @  
 
diff -Naur ns-3.21/src/mesh/test/flame/flame-regression-test-2-1.pcap ns-3.22/src/mesh/test/flame/flame-regression-test-2-1.pcap
--- ns-3.21/src/mesh/test/flame/flame-regression-test-2-1.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/flame/flame-regression-test-2-1.pcap	2015-02-05 15:46:22.000000000 -0800
@@ -1,4 +1,4 @@
-ò            i      X  X   X                    @@                
+ò            i      (#  X   X                    @@                
 
            X   X                   @@                
 
@@ -12,17 +12,17 @@
 
  	                                      Ԁ              n  l   l   <                          @@             E  0    @  
 
- 	                              "	  <   <          0         @@                M	  <   <          0         @@                  X   X          @         @@               
+ 	                              "	  <   <          0         @@                M	  <   <          0         @@                +  X   X          @         @@               
 
-         X   X   <                @         @@                     
+       ,  X   X   <                @         @@                     
      
-               Ԁ                X   X          P         @@               
+       ,        Ԁ              -  X   X          P         @@               
 
-       n  X   X   <                P         @@                    
+       .  X   X   <                P         @@                    
      
-               Ԁ                l   l   <                `         @@             E  0    @  
+       0        Ԁ              	1  l   l   <                `         @@             E  0    @  
 
- 	                                      Ԁ               l   l   <                `         @@              E  0   @  
+ 	                              1        Ԁ               l   l   <                `         @@              E  0   @  
 
  	                                     Ԁ              X l   l   <                p         @@             E  0   @  
 
diff -Naur ns-3.21/src/mesh/test/flame/flame-test-suite.cc ns-3.22/src/mesh/test/flame/flame-test-suite.cc
--- ns-3.21/src/mesh/test/flame/flame-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mesh/test/flame/flame-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -65,13 +65,11 @@
 private:
   /// Test Add apth and lookup path;
   void TestLookup ();
-  /**
-   * \name Test add path and try to lookup after entry has expired
-   * \{
-   */
+  
+  // Test add path and try to lookup after entry has expired
   void TestAddPath ();
   void TestExpire ();
-  ///\}
+
 private:
   Mac48Address dst;
   Mac48Address hop;
diff -Naur ns-3.21/src/mobility/bindings/modulegen__gcc_ILP32.py ns-3.22/src/mobility/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/mobility/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1191,6 +1191,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_static=True)
+    ## mobility-helper.h (module 'mobility'): static double ns3::MobilityHelper::GetDistanceSquaredBetween(ns3::Ptr<ns3::Node> n1, ns3::Ptr<ns3::Node> n2) [member function]
+    cls.add_method('GetDistanceSquaredBetween', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::Node >', 'n1'), param('ns3::Ptr< ns3::Node >', 'n2')], 
+                   is_static=True)
     ## mobility-helper.h (module 'mobility'): std::string ns3::MobilityHelper::GetMobilityModelType() const [member function]
     cls.add_method('GetMobilityModelType', 
                    'std::string', 
@@ -1327,10 +1332,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1564,7 +1569,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1615,6 +1625,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1691,6 +1706,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1725,6 +1744,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
diff -Naur ns-3.21/src/mobility/bindings/modulegen__gcc_LP64.py ns-3.22/src/mobility/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/mobility/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1191,6 +1191,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
                    is_static=True)
+    ## mobility-helper.h (module 'mobility'): static double ns3::MobilityHelper::GetDistanceSquaredBetween(ns3::Ptr<ns3::Node> n1, ns3::Ptr<ns3::Node> n2) [member function]
+    cls.add_method('GetDistanceSquaredBetween', 
+                   'double', 
+                   [param('ns3::Ptr< ns3::Node >', 'n1'), param('ns3::Ptr< ns3::Node >', 'n2')], 
+                   is_static=True)
     ## mobility-helper.h (module 'mobility'): std::string ns3::MobilityHelper::GetMobilityModelType() const [member function]
     cls.add_method('GetMobilityModelType', 
                    'std::string', 
@@ -1327,10 +1332,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1564,7 +1569,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1615,6 +1625,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1691,6 +1706,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1725,6 +1744,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
diff -Naur ns-3.21/src/mobility/helper/mobility-helper.cc ns-3.22/src/mobility/helper/mobility-helper.cc
--- ns-3.21/src/mobility/helper/mobility-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/helper/mobility-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -179,6 +179,12 @@
 {
   Install (NodeContainer::GetGlobal ());
 }
+/**
+ * Utility function that rounds |1e-4| < input value < |1e-3| up to +/- 1e-3
+ * and value <= |1e-4| to zero
+ * \param v value to round
+ * \return rounded value
+ */
 static double
 DoRound (double v)
 {
@@ -264,4 +270,22 @@
   return (currentStream - stream);
 }
 
+double
+MobilityHelper::GetDistanceSquaredBetween (Ptr<Node> n1, Ptr<Node> n2)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  double distSq = 0.0;
+
+  Ptr<MobilityModel> rxPosition = n1->GetObject<MobilityModel> ();
+  NS_ASSERT (rxPosition != 0);
+
+  Ptr<MobilityModel> txPosition = n2->GetObject<MobilityModel> ();
+  NS_ASSERT (txPosition != 0);
+
+  double dist = rxPosition -> GetDistanceFrom (txPosition);
+  distSq = dist * dist;
+
+  return distSq;
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/helper/mobility-helper.h ns-3.22/src/mobility/helper/mobility-helper.h
--- ns-3.21/src/mobility/helper/mobility-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/helper/mobility-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -49,7 +49,6 @@
   MobilityHelper ();
 
   /**
-   * \internal
    * Destroy a Mobility Helper
    */
   ~MobilityHelper ();
@@ -261,14 +260,24 @@
    */
   int64_t AssignStreams (NodeContainer c, int64_t stream);
 
+  /**
+   * \param n1 node 1
+   * \param n2 node 2
+   * \return the distance (squared), in meters, between two nodes
+   */
+  static double GetDistanceSquaredBetween (Ptr<Node> n1, Ptr<Node> n2);
+
 private:
+
   /**
-   * \internal
+   * Output course change events from mobility model to output stream
+   * \param stream output stream
+   * \param mobility mobility model
    */
   static void CourseChanged (Ptr<OutputStreamWrapper> stream, Ptr<const MobilityModel> mobility);
-  std::vector<Ptr<MobilityModel> > m_mobilityStack;
-  ObjectFactory m_mobility;
-  Ptr<PositionAllocator> m_position;
+  std::vector<Ptr<MobilityModel> > m_mobilityStack; //!< Internal stack of mobility models
+  ObjectFactory m_mobility; //!< Object factory to create mobility objects
+  Ptr<PositionAllocator> m_position; //!< Position allocator for use in hierarchical mobility model
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/helper/ns2-mobility-helper.cc ns-3.22/src/mobility/helper/ns2-mobility-helper.cc
--- ns-3.21/src/mobility/helper/ns2-mobility-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/helper/ns2-mobility-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -49,10 +49,10 @@
 #include "ns3/constant-velocity-mobility-model.h"
 #include "ns2-mobility-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ns2MobilityHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ns2MobilityHelper");
+
 // Constants definitions
 #define  NS2_AT       "at"
 #define  NS2_X_COORD  "X_"
@@ -64,18 +64,20 @@
 #define  NS2_NS_SCH   "$ns_"
 
 
-// Type to maintain line parsed and its values
+/**
+ * Type to maintain line parsed and its values
+ */
 struct ParseResult
 {
-  std::vector<std::string> tokens; // tokens from a line
-  std::vector<int> ivals;     // int values for each tokens
-  std::vector<bool> has_ival; // points if a tokens has an int value
-  std::vector<double> dvals;  // double values for each tokens
-  std::vector<bool> has_dval; // points if a tokens has a double value
-  std::vector<std::string> svals;  // string value for each token
+  std::vector<std::string> tokens; //!< tokens from a line
+  std::vector<int> ivals;     //!< int values for each tokens
+  std::vector<bool> has_ival; //!< points if a tokens has an int value
+  std::vector<double> dvals;  //!< double values for each tokens
+  std::vector<bool> has_dval; //!< points if a tokens has a double value
+  std::vector<std::string> svals;  //!< string value for each token
 };
 /**
- * \brief Keeps last movement schedule. If new movement occurs during
+ * Keeps last movement schedule. If new movement occurs during
  * a current one, node stopping must be cancels (stored in a proper
  * event ID), actually reached point must be calculated and new
  * velocity must be calculated in accordance with actually reached
@@ -83,12 +85,12 @@
  */
 struct DestinationPoint
 {
-  Vector m_startPosition;     // Start position of last movement
-  Vector m_speed;             // Speed of the last movement (needed to derive reached destination at next schedule = start + velocity * actuallyTravelled)
-  Vector m_finalPosition;     // Final destination to be reached before next schedule. Replaced with actually reached if needed.
-  EventId m_stopEvent;        // Event scheduling node's stop. May be canceled if needed.
-  double m_travelStartTime;   // Travel start time is needed to calculate actually traveled time
-  double m_targetArrivalTime; // When a station arrives to a destination
+  Vector m_startPosition;     //!< Start position of last movement
+  Vector m_speed;             //!< Speed of the last movement (needed to derive reached destination at next schedule = start + velocity * actuallyTravelled)
+  Vector m_finalPosition;     //!< Final destination to be reached before next schedule. Replaced with actually reached if needed.
+  EventId m_stopEvent;        //!< Event scheduling node's stop. May be canceled if needed.
+  double m_travelStartTime;   //!< Travel start time is needed to calculate actually traveled time
+  double m_targetArrivalTime; //!< When a station arrives to a destination
   DestinationPoint () :
     m_startPosition (Vector (0,0,0)),
     m_speed (Vector (0,0,0)),
@@ -99,51 +101,84 @@
 };
 
 
-// Parses a line of ns2 mobility
+/**
+ * Parses a line of ns2 mobility
+ */
 static ParseResult ParseNs2Line (const std::string& str);
 
-// Put out blank spaces at the start and end of a line
+/** 
+ * Put out blank spaces at the start and end of a line
+ */
 static std::string TrimNs2Line (const std::string& str);
 
-// Checks if a string represents a number or it has others characters than digits an point.
+/**
+ * Checks if a string represents a number or it has others characters than digits an point.
+ */
 static bool IsNumber (const std::string& s);
 
-// Check if s string represents a numeric value
+/**
+ * Check if s string represents a numeric value
+ * \param str string to check
+ * \param ret numeric value to return
+ * \return true if string represents a numeric value
+ */
 template<class T>
 static bool IsVal (const std::string& str, T& ret);
 
-// Checks if the value between brackets is a correct nodeId number
+/**
+ * Checks if the value between brackets is a correct nodeId number
+ */ 
 static bool HasNodeIdNumber (std::string str);
 
-// Gets nodeId number in string format from the string like $node_(4)
+/** 
+ * Gets nodeId number in string format from the string like $node_(4)
+ */
 static std::string GetNodeIdFromToken (std::string str);
 
-// Get node id number in int format
+/** 
+ * Get node id number in int format
+ */
 static int GetNodeIdInt (ParseResult pr);
 
-// Get node id number in string format
+/**  
+ * Get node id number in string format
+ */
 static std::string GetNodeIdString (ParseResult pr);
 
-// Add one coord to a vector position
+/**
+ * Add one coord to a vector position
+ */
 static Vector SetOneInitialCoord (Vector actPos, std::string& coord, double value);
 
-// Check if this corresponds to a line like this: $node_(0) set X_ 123
+/** 
+ * Check if this corresponds to a line like this: $node_(0) set X_ 123
+ */
 static bool IsSetInitialPos (ParseResult pr);
 
-// Check if this corresponds to a line like this: $ns_ at 1 "$node_(0) setdest 2 3 4"
+/** 
+ * Check if this corresponds to a line like this: $ns_ at 1 "$node_(0) setdest 2 3 4"
+ */
 static bool IsSchedSetPos (ParseResult pr);
 
-// Check if this corresponds to a line like this: $ns_ at 1 "$node_(0) set X_ 2"
+/**
+ * Check if this corresponds to a line like this: $ns_ at 1 "$node_(0) set X_ 2"
+ */
 static bool IsSchedMobilityPos (ParseResult pr);
 
-// Set waypoints and speed for movement.
+/**
+ * Set waypoints and speed for movement.
+ */
 static DestinationPoint SetMovement (Ptr<ConstantVelocityMobilityModel> model, Vector lastPos, double at,
                                      double xFinalPosition, double yFinalPosition, double speed);
 
-// Set initial position for a node
+/**
+ * Set initial position for a node
+ */
 static Vector SetInitialPosition (Ptr<ConstantVelocityMobilityModel> model, std::string coord, double coordVal);
 
-// Schedule a set of position for a node
+/** 
+ * Schedule a set of position for a node
+ */
 static Vector SetSchedPosition (Ptr<ConstantVelocityMobilityModel> model, double at, std::string coord, double coordVal);
 
 
diff -Naur ns-3.21/src/mobility/helper/ns2-mobility-helper.h ns-3.22/src/mobility/helper/ns2-mobility-helper.h
--- ns-3.21/src/mobility/helper/ns2-mobility-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/helper/ns2-mobility-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -104,15 +104,33 @@
   template <typename T>
   void Install (T begin, T end) const;
 private:
+  /**
+   * \brief a class to hold input objects internally
+   */
   class ObjectStore
   {
 public:
     virtual ~ObjectStore () {}
+    /**
+     * Return ith object in store
+     * \param i index
+     * \return pointer to object
+     */
     virtual Ptr<Object> Get (uint32_t i) const = 0;
   };
+  /**
+   * Parses ns-2 mobility file to create ns-3 mobility events
+   * \param store Object store containing ns-3 mobility models
+   */
   void ConfigNodesMovements (const ObjectStore &store) const;
+  /**
+   * Get or create a ConstantVelocityMobilityModel corresponding to idString
+   * \param idString string name for a node
+   * \param store Object store containing ns-3 mobility models
+   * \return pointer to a ConstantVelocityMobilityModel
+   */
   Ptr<ConstantVelocityMobilityModel> GetMobilityModel (std::string idString, const ObjectStore &store) const;
-  std::string m_filename;
+  std::string m_filename; //!< filename of file containing ns-2 mobility trace 
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/box.cc ns-3.22/src/mobility/model/box.cc
--- ns-3.21/src/mobility/model/box.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/box.cc	2015-02-05 15:46:22.000000000 -0800
@@ -145,12 +145,26 @@
 
 ATTRIBUTE_HELPER_CPP (Box);
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the stream
+ * \param box the box
+ * \returns a reference to the stream
+ */
 std::ostream &
 operator << (std::ostream &os, const Box &box)
 {
   os << box.xMin << "|" << box.xMax << "|" << box.yMin << "|" << box.yMax << "|" << box.zMin << "|" << box.zMax;
   return os;
 }
+/**
+ * \brief Stream extraction operator.
+ *
+ * \param is the stream
+ * \param box the box
+ * \returns a reference to the stream
+ */
 std::istream &
 operator >> (std::istream &is, Box &box)
 {
diff -Naur ns-3.21/src/mobility/model/box.h ns-3.22/src/mobility/model/box.h
--- ns-3.21/src/mobility/model/box.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/box.h	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,14 @@
 /**
  * \ingroup mobility
  * \brief a 3d box
+ * \see attribute_Box
  */
 class Box
 {
 public:
+  /**
+   * Enum class to specify sides of a box
+   */
   enum Side {
     RIGHT,
     LEFT,
@@ -85,28 +89,23 @@
    */
   Vector CalculateIntersection (const Vector &current, const Vector &speed) const;
 
-  /* The x coordinate of the left bound of the box */
+  /** The x coordinate of the left bound of the box */
   double xMin;
-  /* The x coordinate of the right bound of the box */
+  /** The x coordinate of the right bound of the box */
   double xMax;
-  /* The y coordinate of the bottom bound of the box */
+  /** The y coordinate of the bottom bound of the box */
   double yMin;
-  /* The y coordinate of the top bound of the box */
+  /** The y coordinate of the top bound of the box */
   double yMax;
-  /* The z coordinate of the down bound of the box */
+  /** The z coordinate of the down bound of the box */
   double zMin;
-  /* The z coordinate of the up bound of the box */
+  /** The z coordinate of the up bound of the box */
   double zMax;
 };
 
 std::ostream &operator << (std::ostream &os, const Box &box);
 std::istream &operator >> (std::istream &is, Box &box);
 
-/**
- * \class ns3::BoxValue
- * \brief hold objects of type ns3::Box
- */
-
 ATTRIBUTE_HELPER_HEADER (Box);
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/constant-acceleration-mobility-model.h ns-3.22/src/mobility/model/constant-acceleration-mobility-model.h
--- ns-3.21/src/mobility/model/constant-acceleration-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/constant-acceleration-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -31,6 +31,10 @@
 class ConstantAccelerationMobilityModel : public MobilityModel 
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create position located at coordinates (0,0,0) with
@@ -38,6 +42,11 @@
    */
   ConstantAccelerationMobilityModel ();
   virtual ~ConstantAccelerationMobilityModel ();
+  /**
+   * Set the model's velocity and acceleration
+   * \param velocity the velocity (m/s)
+   * \param acceleration the acceleration (m/s^2)
+   */
   void SetVelocityAndAcceleration (const Vector &velocity, const Vector &acceleration);
 
 private:
@@ -45,10 +54,10 @@
   virtual void DoSetPosition (const Vector &position);
   virtual Vector DoGetVelocity (void) const;
 
-  Time m_baseTime;
-  Vector m_basePosition;
-  Vector m_baseVelocity;
-  Vector m_acceleration;
+  Time m_baseTime;  //!< the base time
+  Vector m_basePosition; //!< the base position
+  Vector m_baseVelocity; //!< the base velocity
+  Vector m_acceleration;  //!< the acceleration
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/constant-position-mobility-model.h ns-3.22/src/mobility/model/constant-position-mobility-model.h
--- ns-3.21/src/mobility/model/constant-position-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/constant-position-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -32,6 +32,10 @@
 class ConstantPositionMobilityModel : public MobilityModel 
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create a position located at coordinates (0,0,0)
@@ -44,7 +48,7 @@
   virtual void DoSetPosition (const Vector &position);
   virtual Vector DoGetVelocity (void) const;
 
-  Vector m_position;
+  Vector m_position; //!< the constant position
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/constant-velocity-helper.cc ns-3.22/src/mobility/model/constant-velocity-helper.cc
--- ns-3.21/src/mobility/model/constant-velocity-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/constant-velocity-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/log.h"
 #include "constant-velocity-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("ConstantVelocityHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ConstantVelocityHelper");
+
 ConstantVelocityHelper::ConstantVelocityHelper ()
   : m_paused (true)
 {
diff -Naur ns-3.21/src/mobility/model/constant-velocity-helper.h ns-3.22/src/mobility/model/constant-velocity-helper.h
--- ns-3.21/src/mobility/model/constant-velocity-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/constant-velocity-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -37,25 +37,67 @@
 {
 public:
   ConstantVelocityHelper ();
+  /** 
+   * Create object and set position
+   * \param position the position vector
+   */
   ConstantVelocityHelper (const Vector &position);
+  /** 
+   * Create object and set position and velocity
+   * \param position the position vector
+   * \param vel the velocity vector
+   */
   ConstantVelocityHelper (const Vector &position,
                           const Vector &vel);
 
+  /**
+   * Set position vector
+   * \param position Position vector
+   */
   void SetPosition (const Vector &position);
+  /**
+   * Get current position vector
+   * \return Position vector
+   */
   Vector GetCurrentPosition (void) const;
+  /**
+   * Get velocity; if paused, will return a zero vector
+   * \return Velocity vector
+   */
   Vector GetVelocity (void) const;
+  /**
+   * Set new velocity vector
+   * \param vel Velocity vector
+   */
   void SetVelocity (const Vector &vel);
+  /**
+   * Pause mobility at current position
+   */
   void Pause (void);
+  /**
+   * Resume mobility from current position at current velocity
+   */
   void Unpause (void);
 
+  /**
+   * Update position, if not paused, from last position and time of last update
+   * \param rectangle 2D bounding rectangle for resulting position; object will not move outside the rectangle 
+   */
   void UpdateWithBounds (const Rectangle &rectangle) const;
+  /**
+   * Update position, if not paused, from last position and time of last update
+   * \param bounds 3D bounding box for resulting position; object will not move outside the box 
+   */
   void UpdateWithBounds (const Box &bounds) const;
+  /**
+   * Update position, if not paused, from last position and time of last update
+   */
   void Update (void) const;
 private:
-  mutable Time m_lastUpdate;
-  mutable Vector m_position;
-  Vector m_velocity;
-  bool m_paused;
+  mutable Time m_lastUpdate; //!< time of last update
+  mutable Vector m_position; //!< state variable for current position
+  Vector m_velocity; //!< state variable for velocity
+  bool m_paused;  //!< state variable for paused
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/constant-velocity-mobility-model.h ns-3.22/src/mobility/model/constant-velocity-mobility-model.h
--- ns-3.21/src/mobility/model/constant-velocity-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/constant-velocity-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,10 @@
 class ConstantVelocityMobilityModel : public MobilityModel 
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   /**
    * Create position located at coordinates (0,0,0) with
@@ -54,8 +58,7 @@
   virtual Vector DoGetPosition (void) const;
   virtual void DoSetPosition (const Vector &position);
   virtual Vector DoGetVelocity (void) const;
-  void Update (void) const;
-  ConstantVelocityHelper m_helper;
+  ConstantVelocityHelper m_helper;  //!< helper object for this model
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/gauss-markov-mobility-model.cc ns-3.22/src/mobility/model/gauss-markov-mobility-model.cc
--- ns-3.21/src/mobility/model/gauss-markov-mobility-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/gauss-markov-mobility-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -168,7 +168,7 @@
       if (nextPosition.x > m_bounds.xMax || nextPosition.x < m_bounds.xMin) 
         {
           speed.x = -speed.x;
-          m_meanDirection = 3.14159265 - m_meanDirection;
+          m_meanDirection = M_PI - m_meanDirection;
         }
 
       if (nextPosition.y > m_bounds.yMax || nextPosition.y < m_bounds.yMin) 
diff -Naur ns-3.21/src/mobility/model/gauss-markov-mobility-model.h ns-3.22/src/mobility/model/gauss-markov-mobility-model.h
--- ns-3.21/src/mobility/model/gauss-markov-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/gauss-markov-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -80,33 +80,44 @@
 class GaussMarkovMobilityModel : public MobilityModel
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   GaussMarkovMobilityModel ();
 private:
+  /**
+   * Initialize the model and calculate new velocity, direction, and pitch
+   */
   void Start (void);
+  /**
+   * Perform a walk operation
+   * \param timeLeft time until Start method is called again
+   */
   void DoWalk (Time timeLeft);
   virtual void DoDispose (void);
   virtual Vector DoGetPosition (void) const;
   virtual void DoSetPosition (const Vector &position);
   virtual Vector DoGetVelocity (void) const;
   virtual int64_t DoAssignStreams (int64_t);
-  ConstantVelocityHelper m_helper;
-  Time m_timeStep;
-  double m_alpha;
-  double m_meanVelocity;
-  double m_meanDirection;
-  double m_meanPitch;
-  double m_Velocity;
-  double m_Direction;
-  double m_Pitch;
-  Ptr<RandomVariableStream> m_rndMeanVelocity;
-  Ptr<NormalRandomVariable> m_normalVelocity;
-  Ptr<RandomVariableStream> m_rndMeanDirection;
-  Ptr<NormalRandomVariable> m_normalDirection;
-  Ptr<RandomVariableStream> m_rndMeanPitch;
-  Ptr<NormalRandomVariable> m_normalPitch;
-  EventId m_event;
-  Box m_bounds;
+  ConstantVelocityHelper m_helper; //!< constant velocity helper
+  Time m_timeStep; //!< duraiton after which direction and speed should change
+  double m_alpha; //!< tunable constant in the model
+  double m_meanVelocity; //!< current mean velocity
+  double m_meanDirection; //!< current mean direction
+  double m_meanPitch; //!< current mean pitch
+  double m_Velocity; //!< current velocity
+  double m_Direction; //!< current direction
+  double m_Pitch;  //!< current pitch
+  Ptr<RandomVariableStream> m_rndMeanVelocity; //!< rv used to assign avg velocity
+  Ptr<NormalRandomVariable> m_normalVelocity; //!< Gaussian rv used to for next velocity
+  Ptr<RandomVariableStream> m_rndMeanDirection; //!< rv used to assign avg direction
+  Ptr<NormalRandomVariable> m_normalDirection; //!< Gaussian rv for next direction value
+  Ptr<RandomVariableStream> m_rndMeanPitch; //!< rv used to assign avg. pitch 
+  Ptr<NormalRandomVariable> m_normalPitch; //!< Gaussian rv for next pitch
+  EventId m_event; //!< event id of scheduled start
+  Box m_bounds; //!< bounding box
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/hierarchical-mobility-model.h ns-3.22/src/mobility/model/hierarchical-mobility-model.h
--- ns-3.21/src/mobility/model/hierarchical-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/hierarchical-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -57,6 +57,10 @@
 class HierarchicalMobilityModel : public MobilityModel
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   HierarchicalMobilityModel ();
@@ -98,11 +102,17 @@
   virtual void DoSetPosition (const Vector &position);
   virtual Vector DoGetVelocity (void) const;
 
+  /**
+   * Callback for when parent mobility model course change occurs
+   */
   void ParentChanged (Ptr<const MobilityModel> model);
+  /**
+   * Callback for when child mobility model course change occurs
+   */
   void ChildChanged (Ptr<const MobilityModel> model);
 
-  Ptr<MobilityModel> m_child;
-  Ptr<MobilityModel> m_parent;
+  Ptr<MobilityModel> m_child; //!< pointer to child mobility model
+  Ptr<MobilityModel> m_parent; //!< pointer to parent mobility model
 };
 
 
diff -Naur ns-3.21/src/mobility/model/mobility-model.cc ns-3.22/src/mobility/model/mobility-model.cc
--- ns-3.21/src/mobility/model/mobility-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/mobility-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -45,7 +45,8 @@
                    MakeVectorChecker ())
     .AddTraceSource ("CourseChange", 
                      "The value of the position and/or velocity vector changed",
-                     MakeTraceSourceAccessor (&MobilityModel::m_courseChangeTrace))
+                     MakeTraceSourceAccessor (&MobilityModel::m_courseChangeTrace),
+                     "ns3::MobilityModel::CourseChangeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/mobility/model/mobility-model.h ns-3.22/src/mobility/model/mobility-model.h
--- ns-3.21/src/mobility/model/mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -39,6 +39,10 @@
 class MobilityModel : public Object
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   MobilityModel ();
   virtual ~MobilityModel () = 0;
@@ -75,6 +79,27 @@
    */
   int64_t AssignStreams (int64_t stream);
 
+  /**
+   *  TracedCallback signature.
+   *
+   * \param [in] model Value of the MobilityModel.
+   * @{
+   */
+  typedef void (* TracedCallback)(const Ptr<const MobilityModel> model);
+  
+  /**
+   * TracedCallback signature for course change notifications.
+   *
+   * If the callback is connected using Config::ConnectWithoutContext()
+   * omit the \c context argument from the signature.
+   *
+   * \param [in] context The context string, supplied by the Trace source.
+   * \param [in] model The MobilityModel which is changing course.
+   */
+  typedef void (* CourseChangeTracedCallback)
+    (const std::string context, const Ptr<const MobilityModel> model);
+  
+  
 protected:
   /**
    * Must be invoked by subclasses when the course of the
@@ -107,6 +132,8 @@
    * The default implementation does nothing but return the passed-in
    * parameter.  Subclasses using random variables are expected to
    * override this.
+   * \param start  starting stream index
+   * \return the number of streams used
    */
   virtual int64_t DoAssignStreams (int64_t start);
 
@@ -114,7 +141,7 @@
    * Used to alert subscribers that a change in direction, velocity,
    * or position has occurred.
    */
-  TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
+  ns3::TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
 
 };
 
diff -Naur ns-3.21/src/mobility/model/position-allocator.cc ns-3.22/src/mobility/model/position-allocator.cc
--- ns-3.21/src/mobility/model/position-allocator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/position-allocator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/log.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("PositionAllocator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PositionAllocator");
+
 NS_OBJECT_ENSURE_REGISTERED (PositionAllocator);
 
 TypeId 
diff -Naur ns-3.21/src/mobility/model/position-allocator.h ns-3.22/src/mobility/model/position-allocator.h
--- ns-3.21/src/mobility/model/position-allocator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/position-allocator.h	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,10 @@
 class PositionAllocator : public Object
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   PositionAllocator ();
   virtual ~PositionAllocator ();
@@ -67,18 +71,23 @@
 class ListPositionAllocator : public PositionAllocator
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   ListPositionAllocator ();
 
   /**
+   * \brief Add a position to the list of positions
    * \param v the position to append at the end of the list of positions to return from GetNext.
    */
   void Add (Vector v);
   virtual Vector GetNext (void) const;
   virtual int64_t AssignStreams (int64_t stream);
 private:
-  std::vector<Vector> m_positions;
-  mutable std::vector<Vector>::const_iterator m_current;
+  std::vector<Vector> m_positions;  //!< vector of positions
+  mutable std::vector<Vector>::const_iterator m_current; //!< vector iterator
 };
 
 /**
@@ -88,6 +97,10 @@
 class GridPositionAllocator : public PositionAllocator
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -145,11 +158,11 @@
    */
   double GetMinY (void) const;
   /**
-   * \return the x interval between two x-consecutive positions.
+   * \return the x interval between two consecutive x-positions.
    */
   double GetDeltaX (void) const;
   /**
-   * \return the y interval between two y-consecutive positions.
+   * \return the y interval between two consecutive y-positions.
    */
   double GetDeltaY (void) const;
   /**
@@ -165,13 +178,13 @@
   virtual Vector GetNext (void) const;
   virtual int64_t AssignStreams (int64_t stream);
 private:
-  mutable uint32_t m_current;
-  enum LayoutType m_layoutType;
-  double m_xMin;
-  double m_yMin;
-  uint32_t m_n;
-  double m_deltaX;
-  double m_deltaY;
+  mutable uint32_t m_current; //!< currently position
+  enum LayoutType m_layoutType;  //!< currently selected layout type
+  double m_xMin; //!< minimum boundary on x positions
+  double m_yMin; //!< minimum boundary on y positions
+  uint32_t m_n;  //!< number of positions to allocate on each row or column
+  double m_deltaX; //!< x interval between two consecutive x positions
+  double m_deltaY; //!< y interval between two consecutive y positions
 };
 
 /**
@@ -181,18 +194,30 @@
 class RandomRectanglePositionAllocator : public PositionAllocator
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   RandomRectanglePositionAllocator ();
   virtual ~RandomRectanglePositionAllocator ();
 
+  /**
+   * \brief Set the random variable stream object that generates x-positions
+   * \param x pointer to a RandomVariableStream object
+   */
   void SetX (Ptr<RandomVariableStream> x);
+  /**
+   * \brief Set the random variable stream object that generates y-positions
+   * \param y pointer to a RandomVariableStream object
+   */
   void SetY (Ptr<RandomVariableStream> y);
 
   virtual Vector GetNext (void) const;
   virtual int64_t AssignStreams (int64_t stream);
 private:
-  Ptr<RandomVariableStream> m_x;
-  Ptr<RandomVariableStream> m_y;
+  Ptr<RandomVariableStream> m_x; //!< pointer to x's random variable stream
+  Ptr<RandomVariableStream> m_y; //!< pointer to y's random variable stream
 };
 
 /**
@@ -202,20 +227,36 @@
 class RandomBoxPositionAllocator : public PositionAllocator
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   RandomBoxPositionAllocator ();
   virtual ~RandomBoxPositionAllocator ();
 
+  /**
+   * \brief Set the random variable stream object that generates x-positions
+   * \param x pointer to a RandomVariableStream object
+   */
   void SetX (Ptr<RandomVariableStream> x);
+  /**
+   * \brief Set the random variable stream object that generates y-positions
+   * \param y pointer to a RandomVariableStream object
+   */
   void SetY (Ptr<RandomVariableStream> y);
+  /**
+   * \brief Set the random variable stream object that generates z-positions
+   * \param z pointer to a RandomVariableStream object
+   */
   void SetZ (Ptr<RandomVariableStream> z);
 
   virtual Vector GetNext (void) const;
   virtual int64_t AssignStreams (int64_t stream);
 private:
-  Ptr<RandomVariableStream> m_x;
-  Ptr<RandomVariableStream> m_y;
-  Ptr<RandomVariableStream> m_z;
+  Ptr<RandomVariableStream> m_x; //!< pointer to x's random variable stream
+  Ptr<RandomVariableStream> m_y; //!< pointer to y's random variable stream
+  Ptr<RandomVariableStream> m_z; //!< pointer to z's random variable stream
 };
 
 /**
@@ -226,22 +267,40 @@
 class RandomDiscPositionAllocator : public PositionAllocator
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   RandomDiscPositionAllocator ();
   virtual ~RandomDiscPositionAllocator ();
 
+  /**
+   * \brief Set the random variable that generates position radius
+   * \param theta random variable that represents the radius of a position in a random disc.
+   */
   void SetTheta (Ptr<RandomVariableStream> theta);
+  /**
+   * \brief Set the random variable that generates position angle
+   * \param rho random variable that represents the angle (gradients) of a position in a random disc.
+   */
   void SetRho (Ptr<RandomVariableStream> rho);
+  /** 
+   * \param x  the X coordinate of the center of the disc
+   */
   void SetX (double x);
+  /** 
+   * \param y   the Y coordinate of the center of the disc 
+   */
   void SetY (double y);
 
   virtual Vector GetNext (void) const;
   virtual int64_t AssignStreams (int64_t stream);
 private:
-  Ptr<RandomVariableStream> m_theta;
-  Ptr<RandomVariableStream> m_rho;
-  double m_x;
-  double m_y;
+  Ptr<RandomVariableStream> m_theta; //!< pointer to theta's random variable stream
+  Ptr<RandomVariableStream> m_rho; //!< pointer to rho's random variable stream
+  double m_x; //!< x coordinate of center of disc
+  double m_y; //!< y coordinate of center of disc
 };
 
 
@@ -265,6 +324,10 @@
 class UniformDiscPositionAllocator : public PositionAllocator
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   UniformDiscPositionAllocator ();
   virtual ~UniformDiscPositionAllocator ();
@@ -287,10 +350,10 @@
   virtual Vector GetNext (void) const;
   virtual int64_t AssignStreams (int64_t stream);
 private:
-  Ptr<UniformRandomVariable> m_rv;
-  double m_rho;
-  double m_x;
-  double m_y;
+  Ptr<UniformRandomVariable> m_rv;  //!< pointer to uniform random variable 
+  double m_rho; //!< value of the radius of the disc
+  double m_x;  //!< x coordinate of center of disc
+  double m_y;  //!< y coordinate of center of disc
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/random-direction-2d-mobility-model.cc ns-3.22/src/mobility/model/random-direction-2d-mobility-model.cc
--- ns-3.21/src/mobility/model/random-direction-2d-mobility-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/random-direction-2d-mobility-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,11 +25,9 @@
 #include "ns3/pointer.h"
 #include "random-direction-2d-mobility-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("RandomDirection2dMobilityModel");
-
 namespace ns3 {
 
-const double RandomDirection2dMobilityModel::PI = 3.14159265358979323846;
+NS_LOG_COMPONENT_DEFINE ("RandomDirection2dMobilityModel");
 
 NS_OBJECT_ENSURE_REGISTERED (RandomDirection2dMobilityModel);
 
@@ -78,7 +76,7 @@
 void
 RandomDirection2dMobilityModel::DoInitializePrivate (void)
 {
-  double direction = m_direction->GetValue (0, 2 * PI);
+  double direction = m_direction->GetValue (0, 2 * M_PI);
   SetDirectionAndSpeed (direction);
 }
 
@@ -115,20 +113,20 @@
 void
 RandomDirection2dMobilityModel::ResetDirectionAndSpeed (void)
 {
-  double direction = m_direction->GetValue (0, PI);
+  double direction = m_direction->GetValue (0, M_PI);
 
   m_helper.UpdateWithBounds (m_bounds);
   Vector position = m_helper.GetCurrentPosition ();
   switch (m_bounds.GetClosestSide (position))
     {
     case Rectangle::RIGHT:
-      direction += PI / 2;
+      direction += M_PI / 2;
       break;
     case Rectangle::LEFT:
-      direction += -PI / 2;
+      direction += -M_PI / 2;
       break;
     case Rectangle::TOP:
-      direction += PI;
+      direction += M_PI;
       break;
     case Rectangle::BOTTOM:
       direction += 0.0;
diff -Naur ns-3.21/src/mobility/model/random-direction-2d-mobility-model.h ns-3.22/src/mobility/model/random-direction-2d-mobility-model.h
--- ns-3.21/src/mobility/model/random-direction-2d-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/random-direction-2d-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -44,14 +44,30 @@
 class RandomDirection2dMobilityModel : public MobilityModel
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   RandomDirection2dMobilityModel ();
 
 private:
+  /**
+   * Set a new direction and speed
+   */
   void ResetDirectionAndSpeed (void);
+  /**
+   * Pause, cancel currently scheduled event, schedule end of pause event
+   */
   void BeginPause (void);
+  /**
+   * Set new velocity and direction, and schedule next pause event  
+   * \param direction (radians)
+   */
   void SetDirectionAndSpeed (double direction);
-  void InitializeDirectionAndSpeed (void);
+  /**
+   * Sets a new random direction and calls SetDirectionAndSpeed
+   */
   void DoInitializePrivate (void);
   virtual void DoDispose (void);
   virtual void DoInitialize (void);
@@ -60,13 +76,12 @@
   virtual Vector DoGetVelocity (void) const;
   virtual int64_t DoAssignStreams (int64_t);
 
-  static const double PI;
-  Ptr<UniformRandomVariable> m_direction;
-  Rectangle m_bounds;
-  Ptr<RandomVariableStream> m_speed;
-  Ptr<RandomVariableStream> m_pause;
-  EventId m_event;
-  ConstantVelocityHelper m_helper;
+  Ptr<UniformRandomVariable> m_direction; //!< rv to control direction
+  Rectangle m_bounds; //!< the 2D bounding area
+  Ptr<RandomVariableStream> m_speed; //!< a random variable to control speed
+  Ptr<RandomVariableStream> m_pause; //!< a random variable to control pause 
+  EventId m_event; //!< event ID of next scheduled event
+  ConstantVelocityHelper m_helper; //!< helper for velocity computations
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/random-walk-2d-mobility-model.cc ns-3.22/src/mobility/model/random-walk-2d-mobility-model.cc
--- ns-3.21/src/mobility/model/random-walk-2d-mobility-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/random-walk-2d-mobility-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/log.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("RandomWalk2d");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RandomWalk2d");
+
 NS_OBJECT_ENSURE_REGISTERED (RandomWalk2dMobilityModel);
 
 TypeId
@@ -62,7 +62,7 @@
                    MakeEnumChecker (RandomWalk2dMobilityModel::MODE_DISTANCE, "Distance",
                                     RandomWalk2dMobilityModel::MODE_TIME, "Time"))
     .AddAttribute ("Direction",
-                   "A random variable used to pick the direction (gradients).",
+                   "A random variable used to pick the direction (radians).",
                    StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=6.283184]"),
                    MakePointerAccessor (&RandomWalk2dMobilityModel::m_direction),
                    MakePointerChecker<RandomVariableStream> ())
diff -Naur ns-3.21/src/mobility/model/random-walk-2d-mobility-model.h ns-3.22/src/mobility/model/random-walk-2d-mobility-model.h
--- ns-3.21/src/mobility/model/random-walk-2d-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/random-walk-2d-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -46,16 +46,31 @@
 class RandomWalk2dMobilityModel : public MobilityModel 
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
-
+  /** An enum representing the different working modes of this module. */
   enum Mode  {
     MODE_DISTANCE,
     MODE_TIME
   };
 
 private:
+  /**
+   * \brief Performs the rebound of the node if it reaches a boundary
+   * \param timeLeft The remaining time of the walk
+   */
   void Rebound (Time timeLeft);
+  /**
+   * Walk according to position and velocity, until distance is reached,
+   * time is reached, or intersection with the bounding box
+   */
   void DoWalk (Time timeLeft);
+  /**
+   * Perform initialization of the object before MobilityModel::DoInitialize ()
+   */
   void DoInitializePrivate (void);
   virtual void DoDispose (void);
   virtual void DoInitialize (void);
@@ -64,14 +79,14 @@
   virtual Vector DoGetVelocity (void) const;
   virtual int64_t DoAssignStreams (int64_t);
 
-  ConstantVelocityHelper m_helper;
-  EventId m_event;
-  enum Mode m_mode;
-  double m_modeDistance;
-  Time m_modeTime;
-  Ptr<RandomVariableStream> m_speed;
-  Ptr<RandomVariableStream> m_direction;
-  Rectangle m_bounds;
+  ConstantVelocityHelper m_helper; //!< helper for this object
+  EventId m_event; //!< stored event ID 
+  enum Mode m_mode; //!< whether in time or distance mode
+  double m_modeDistance; //!< Change direction and speed after this distance
+  Time m_modeTime; //!< Change current direction and speed after this delay
+  Ptr<RandomVariableStream> m_speed; //!< rv for picking speed
+  Ptr<RandomVariableStream> m_direction; //!< rv for picking direction
+  Rectangle m_bounds; //!< Bounds of the area to cruise
 };
 
 
diff -Naur ns-3.21/src/mobility/model/random-waypoint-mobility-model.h ns-3.22/src/mobility/model/random-waypoint-mobility-model.h
--- ns-3.21/src/mobility/model/random-waypoint-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/random-waypoint-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -52,22 +52,32 @@
 class RandomWaypointMobilityModel : public MobilityModel
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 protected:
   virtual void DoInitialize (void);
 private:
+  /**
+   * Get next position, begin moving towards it, schedule future pause event
+   */
   void BeginWalk (void);
+  /**
+   * Begin current pause event, schedule future walk event
+   */
   void DoInitializePrivate (void);
   virtual Vector DoGetPosition (void) const;
   virtual void DoSetPosition (const Vector &position);
   virtual Vector DoGetVelocity (void) const;
   virtual int64_t DoAssignStreams (int64_t);
 
-  ConstantVelocityHelper m_helper;
-  Ptr<PositionAllocator> m_position;
-  Ptr<RandomVariableStream> m_speed;
-  Ptr<RandomVariableStream> m_pause;
-  EventId m_event;
+  ConstantVelocityHelper m_helper; //!< helper for velocity computations
+  Ptr<PositionAllocator> m_position; //!< pointer to position allocator
+  Ptr<RandomVariableStream> m_speed; //!< random variable to generate speeds
+  Ptr<RandomVariableStream> m_pause; //!< random variable to generate pauses
+  EventId m_event; //!< event ID of next scheduled event
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/rectangle.cc ns-3.22/src/mobility/model/rectangle.cc
--- ns-3.21/src/mobility/model/rectangle.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/rectangle.cc	2015-02-05 15:46:22.000000000 -0800
@@ -124,12 +124,26 @@
 
 ATTRIBUTE_HELPER_CPP (Rectangle);
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the stream
+ * \param rectangle the rectangle
+ * \returns a reference to the stream
+ */
 std::ostream &
 operator << (std::ostream &os, const Rectangle &rectangle)
 {
   os << rectangle.xMin << "|" << rectangle.xMax << "|" << rectangle.yMin << "|" << rectangle.yMax;
   return os;
 }
+/**
+ * \brief Stream extraction operator.
+ *
+ * \param is the stream
+ * \param rectangle the rectangle
+ * \returns a reference to the stream
+ */
 std::istream &
 operator >> (std::istream &is, Rectangle &rectangle)
 {
diff -Naur ns-3.21/src/mobility/model/rectangle.h ns-3.22/src/mobility/model/rectangle.h
--- ns-3.21/src/mobility/model/rectangle.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/rectangle.h	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,14 @@
 /**
  * \ingroup mobility
  * \brief a 2d rectangle
+ * \see attribute_Rectangle
  */
 class Rectangle
 {
 public:
+  /**
+   * enum for naming sides
+   */
   enum Side {
     RIGHT,
     LEFT,
@@ -81,25 +85,15 @@
    */
   Vector CalculateIntersection (const Vector &current, const Vector &speed) const;
 
-  /* The x coordinate of the left bound of the rectangle */
-  double xMin;
-  /* The x coordinate of the right bound of the rectangle */
-  double xMax;
-  /* The y coordinate of the bottom bound of the rectangle */
-  double yMin;
-  /* The y coordinate of the top bound of the rectangle */
-  double yMax;
+  double xMin; //!< The x coordinate of the left bound of the rectangle
+  double xMax; //!< The x coordinate of the right bound of the rectangle
+  double yMin; //!< The y coordinate of the bottom bound of the rectangle
+  double yMax; //!< The y coordinate of the top bound of the rectangle
 };
 
 std::ostream &operator << (std::ostream &os, const Rectangle &rectangle);
 std::istream &operator >> (std::istream &is, Rectangle &rectangle);
 
-/**
- * \ingroup mobility
- * \class ns3::RectangleValue
- * \brief hold objects of type ns3::Rectangle
- */
-
 ATTRIBUTE_HELPER_HEADER (Rectangle);
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/steady-state-random-waypoint-mobility-model.h ns-3.22/src/mobility/model/steady-state-random-waypoint-mobility-model.h
--- ns-3.21/src/mobility/model/steady-state-random-waypoint-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/steady-state-random-waypoint-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -55,42 +55,62 @@
 class SteadyStateRandomWaypointMobilityModel : public MobilityModel
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   SteadyStateRandomWaypointMobilityModel ();
 protected:
   virtual void DoInitialize (void);
 private:
+  /**
+   * Configure random variables based on attributes; calculate the steady
+   * state probability that node is initially paused; schedule either end
+   * of pause time or initial motion of the node.
+   */
   void DoInitializePrivate (void);
+  /**
+   * Use provided destination to calculate travel delay, and schedule a
+   * Start() event at that time.
+   * \param destination the destination to move to
+   */
   void SteadyStateBeginWalk (const Vector &destination);
+  /**
+   * Start a pause period and schedule the ending of the pause
+   */
   void Start (void);
+  /**
+   * Start a motion period and schedule the ending of the motion
+   */
   void BeginWalk (void);
   virtual Vector DoGetPosition (void) const;
   virtual void DoSetPosition (const Vector &position);
   virtual Vector DoGetVelocity (void) const;
   virtual int64_t DoAssignStreams (int64_t);
 
-  ConstantVelocityHelper m_helper;
-  double m_maxSpeed;
-  double m_minSpeed;
-  Ptr<UniformRandomVariable> m_speed;
-  double m_minX;
-  double m_maxX;
-  double m_minY;
-  double m_maxY;
-  double m_z;
-  Ptr<RandomRectanglePositionAllocator> m_position;
-  double m_minPause;
-  double m_maxPause;
-  Ptr<UniformRandomVariable> m_pause;
-  EventId m_event;
-  bool alreadyStarted;
-  Ptr<UniformRandomVariable> m_x1_r;
-  Ptr<UniformRandomVariable> m_y1_r;
-  Ptr<UniformRandomVariable> m_x2_r;
-  Ptr<UniformRandomVariable> m_y2_r;
-  Ptr<UniformRandomVariable> m_u_r;
-  Ptr<UniformRandomVariable> m_x;
-  Ptr<UniformRandomVariable> m_y;
+  ConstantVelocityHelper m_helper; //!< helper for velocity computations
+  double m_maxSpeed; //!< maximum speed value (m/s)
+  double m_minSpeed; //!< minimum speed value (m/s)
+  Ptr<UniformRandomVariable> m_speed; //!< random variable for speed values
+  double m_minX; //!< minimum x value of traveling region (m)
+  double m_maxX; //!< maximum x value of traveling region (m)
+  double m_minY; //!< minimum y value of traveling region (m)
+  double m_maxY; //!< maximum y value of traveling region (m)
+  double m_z; //!< z value of traveling region
+  Ptr<RandomRectanglePositionAllocator> m_position; //!< position allocator
+  double m_minPause; //!< minimum pause value (s)
+  double m_maxPause; //!< maximum pause value (s)
+  Ptr<UniformRandomVariable> m_pause; //!< random variable for pause values
+  EventId m_event; //!< current event ID
+  bool alreadyStarted; //!< flag for starting state
+  Ptr<UniformRandomVariable> m_x1_r; //!< rv used in rejection sampling phase 
+  Ptr<UniformRandomVariable> m_y1_r; //!< rv used in rejection sampling phase
+  Ptr<UniformRandomVariable> m_x2_r; //!< rv used in rejection sampling phase
+  Ptr<UniformRandomVariable> m_y2_r; //!< rv used in rejection sampling phase
+  Ptr<UniformRandomVariable> m_u_r; //!< rv used in step 5 of algorithm
+  Ptr<UniformRandomVariable> m_x; //!< rv used for position allocator
+  Ptr<UniformRandomVariable> m_y; //!< rv used for position allocator
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/mobility/model/waypoint.cc ns-3.22/src/mobility/model/waypoint.cc
--- ns-3.21/src/mobility/model/waypoint.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/waypoint.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,11 +34,26 @@
 {
 }
 
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the stream
+ * \param waypoint the waypoint
+ * \returns a reference to the stream
+ */
 std::ostream &operator << (std::ostream &os, const Waypoint &waypoint)
 {
   os << waypoint.time.GetSeconds () << "$" << waypoint.position;
   return os;
 }
+
+/**
+ * \brief Stream extraction operator.
+ *
+ * \param is the stream
+ * \param waypoint the waypoint
+ * \returns a reference to the stream
+ */
 std::istream &operator >> (std::istream &is, Waypoint &waypoint)
 {
   char separator;
diff -Naur ns-3.21/src/mobility/model/waypoint.h ns-3.22/src/mobility/model/waypoint.h
--- ns-3.21/src/mobility/model/waypoint.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/waypoint.h	2015-02-05 15:46:22.000000000 -0800
@@ -30,6 +30,7 @@
 /**
  * \ingroup mobility
  * \brief a (time, location) pair.
+ * \see attribute_Waypoint
  */
 class Waypoint
 {
@@ -46,17 +47,16 @@
    * Create a waypoint at time 0 and position (0,0,0).
    */
   Waypoint ();
-  /* The waypoint time */
+  /**
+   * \brief The waypoint time
+   */
   Time time;
-  /* The position of the waypoint */
+  /**
+   * \brief The position of the waypoint 
+   */
   Vector position;
 };
 
-/**
- * \ingroup mobility
- * \class ns3::WaypointValue
- * \brief hold objects of type ns3::Waypoint
- */
 ATTRIBUTE_HELPER_HEADER ( Waypoint);
 
 std::ostream &
diff -Naur ns-3.21/src/mobility/model/waypoint-mobility-model.cc ns-3.22/src/mobility/model/waypoint-mobility-model.cc
--- ns-3.21/src/mobility/model/waypoint-mobility-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/waypoint-mobility-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/config.h"
 #include "ns3/test.h"
 
-NS_LOG_COMPONENT_DEFINE ("WaypointMobilityModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WaypointMobilityModel");
+
 NS_OBJECT_ENSURE_REGISTERED (WaypointMobilityModel);
 
 
diff -Naur ns-3.21/src/mobility/model/waypoint-mobility-model.h ns-3.22/src/mobility/model/waypoint-mobility-model.h
--- ns-3.21/src/mobility/model/waypoint-mobility-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/model/waypoint-mobility-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -86,6 +86,10 @@
 class WaypointMobilityModel : public MobilityModel
 {
 public:
+  /**
+   * Register this type with the TypeId system.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -127,18 +131,60 @@
 private:
   friend class ::WaypointMobilityModelNotifyTest; // To allow Update() calls and access to m_current
 
+  /**
+   * Update the underlying state corresponding to the stored waypoints
+   */
   void Update (void) const;
+  /**
+   * \brief The dispose method.
+   * 
+   * Subclasses must override this method.
+   */
   virtual void DoDispose (void);
+  /**
+   * \brief Get current position.
+   * \return A vector with the current position of the node.  
+   */
   virtual Vector DoGetPosition (void) const;
+  /**
+   * \brief Sets a new position for the node  
+   * \param position A vector to be added as the new position
+   */
   virtual void DoSetPosition (const Vector &position);
+  /**
+   * \brief Returns the current velocity of a node
+   * \return The velocity vector of a node. 
+   */
   virtual Vector DoGetVelocity (void) const;
 
+  /**
+   * \brief This variable is set to true if there are no waypoints in the std::deque
+   */
   bool m_first;
+  /**
+   * \brief If true, course change updates are only notified when position
+   * is calculated.
+   */
   bool m_lazyNotify;
+  /**
+   * \brief If true, calling SetPosition with no waypoints creates a waypoint
+   */
   bool m_initialPositionIsWaypoint;
+  /**
+   * \brief The double ended queue containing the ns3::Waypoint objects
+   */
   mutable std::deque<Waypoint> m_waypoints;
+  /**
+   * \brief The ns3::Waypoint currently being used
+   */
   mutable Waypoint m_current;
+  /**
+   * \brief The next ns3::Waypoint in the deque
+   */
   mutable Waypoint m_next;
+  /**
+   * \brief The current velocity vector
+   */
   mutable Vector m_velocity;
 };
 
diff -Naur ns-3.21/src/mobility/test/ns2-mobility-helper-test-suite.cc ns-3.22/src/mobility/test/ns2-mobility-helper-test-suite.cc
--- ns-3.21/src/mobility/test/ns2-mobility-helper-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mobility/test/ns2-mobility-helper-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -49,10 +49,10 @@
 #include "ns3/config.h"
 #include "ns3/ns2-mobility-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("ns2-mobility-helper-test-suite");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("ns2-mobility-helper-test-suite");
+
 // -----------------------------------------------------------------------------
 // Testing
 // -----------------------------------------------------------------------------
@@ -229,10 +229,6 @@
   void DoTeardown ()
   {
     Names::Clear ();
-    if (std::remove (m_traceFile.c_str ()))
-      {
-        NS_LOG_ERROR ("Failed to delete file " << m_traceFile);
-      }
     Simulator::Destroy ();
   }
 
diff -Naur ns-3.21/src/mpi/bindings/modulegen__gcc_ILP32.py ns-3.22/src/mpi/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/mpi/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -761,10 +761,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1194,7 +1194,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1245,6 +1250,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1321,6 +1331,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1355,6 +1369,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -2247,11 +2263,6 @@
                    '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', 
@@ -2322,6 +2333,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/mpi/bindings/modulegen__gcc_LP64.py ns-3.22/src/mpi/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/mpi/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -761,10 +761,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1194,7 +1194,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1245,6 +1250,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1321,6 +1331,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1355,6 +1369,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -2247,11 +2263,6 @@
                    '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', 
@@ -2322,6 +2333,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/mpi/model/distributed-simulator-impl.cc ns-3.22/src/mpi/model/distributed-simulator-impl.cc
--- ns-3.21/src/mpi/model/distributed-simulator-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/model/distributed-simulator-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,10 +37,10 @@
 #include <mpi.h>
 #endif
 
-NS_LOG_COMPONENT_DEFINE ("DistributedSimulatorImpl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DistributedSimulatorImpl");
+
 NS_OBJECT_ENSURE_REGISTERED (DistributedSimulatorImpl);
 
 LbtsMessage::~LbtsMessage ()
@@ -595,30 +595,30 @@
 }
 
 bool
-DistributedSimulatorImpl::IsExpired (const EventId &ev) const
+DistributedSimulatorImpl::IsExpired (const EventId &id) const
 {
-  if (ev.GetUid () == 2)
+  if (id.GetUid () == 2)
     {
-      if (ev.PeekEventImpl () == 0
-          || ev.PeekEventImpl ()->IsCancelled ())
+      if (id.PeekEventImpl () == 0
+          || id.PeekEventImpl ()->IsCancelled ())
         {
           return true;
         }
       // destroy events.
       for (DestroyEvents::const_iterator i = m_destroyEvents.begin (); i != m_destroyEvents.end (); i++)
         {
-          if (*i == ev)
+          if (*i == id)
             {
               return false;
             }
         }
       return true;
     }
-  if (ev.PeekEventImpl () == 0
-      || ev.GetTs () < m_currentTs
-      || (ev.GetTs () == m_currentTs
-          && ev.GetUid () <= m_currentUid)
-      || ev.PeekEventImpl ()->IsCancelled ())
+  if (id.PeekEventImpl () == 0
+      || id.GetTs () < m_currentTs
+      || (id.GetTs () == m_currentTs
+          && id.GetUid () <= m_currentUid)
+      || id.PeekEventImpl ()->IsCancelled ())
     {
       return true;
     }
diff -Naur ns-3.21/src/mpi/model/distributed-simulator-impl.h ns-3.22/src/mpi/model/distributed-simulator-impl.h
--- ns-3.21/src/mpi/model/distributed-simulator-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/model/distributed-simulator-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -115,9 +115,9 @@
   virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
-  virtual void Remove (const EventId &ev);
-  virtual void Cancel (const EventId &ev);
-  virtual bool IsExpired (const EventId &ev) const;
+  virtual void Remove (const EventId &id);
+  virtual void Cancel (const EventId &id);
+  virtual bool IsExpired (const EventId &id) const;
   virtual void Run (void);
   virtual Time Now (void) const;
   virtual Time GetDelayLeft (const EventId &id) const;
diff -Naur ns-3.21/src/mpi/model/granted-time-window-mpi-interface.cc ns-3.22/src/mpi/model/granted-time-window-mpi-interface.cc
--- ns-3.21/src/mpi/model/granted-time-window-mpi-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/model/granted-time-window-mpi-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -44,7 +44,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("GrantedTimeWindowMpiInterface");
 
-
 SentBuffer::SentBuffer ()
 {
   m_buffer = 0;
diff -Naur ns-3.21/src/mpi/model/mpi-interface.cc ns-3.22/src/mpi/model/mpi-interface.cc
--- ns-3.21/src/mpi/model/mpi-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/model/mpi-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "null-message-mpi-interface.h"
 #include "granted-time-window-mpi-interface.h"
 
-NS_LOG_COMPONENT_DEFINE ("MpiInterface");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MpiInterface");
+
 ParallelCommunicationInterface* MpiInterface::g_parallelCommunicationInterface = 0;
 
 void
diff -Naur ns-3.21/src/mpi/model/null-message-mpi-interface.cc ns-3.22/src/mpi/model/null-message-mpi-interface.cc
--- ns-3.21/src/mpi/model/null-message-mpi-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/model/null-message-mpi-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -41,10 +41,10 @@
 #include <iomanip>
 #include <list>
 
-NS_LOG_COMPONENT_DEFINE ("NullMessageMpiInterface");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("NullMessageMpiInterface");
+
 /**
  * maximum MPI message size for easy
  * buffer creation
diff -Naur ns-3.21/src/mpi/model/null-message-simulator-impl.cc ns-3.22/src/mpi/model/null-message-simulator-impl.cc
--- ns-3.21/src/mpi/model/null-message-simulator-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/model/null-message-simulator-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -42,10 +42,10 @@
 #include <fstream>
 #include <iomanip>
 
-NS_LOG_COMPONENT_DEFINE ("NullMessageSimulatorImpl");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("NullMessageSimulatorImpl");
+
 NS_OBJECT_ENSURE_REGISTERED (NullMessageSimulatorImpl);
 
 NullMessageSimulatorImpl* NullMessageSimulatorImpl::g_instance = 0;
@@ -527,30 +527,30 @@
 }
 
 bool
-NullMessageSimulatorImpl::IsExpired (const EventId &ev) const
+NullMessageSimulatorImpl::IsExpired (const EventId &id) const
 {
-  if (ev.GetUid () == 2)
+  if (id.GetUid () == 2)
     {
-      if (ev.PeekEventImpl () == 0
-          || ev.PeekEventImpl ()->IsCancelled ())
+      if (id.PeekEventImpl () == 0
+          || id.PeekEventImpl ()->IsCancelled ())
         {
           return true;
         }
       // destroy events.
       for (DestroyEvents::const_iterator i = m_destroyEvents.begin (); i != m_destroyEvents.end (); i++)
         {
-          if (*i == ev)
+          if (*i == id)
             {
               return false;
             }
         }
       return true;
     }
-  if (ev.PeekEventImpl () == 0
-      || ev.GetTs () < m_currentTs
-      || (ev.GetTs () == m_currentTs
-          && ev.GetUid () <= m_currentUid)
-      || ev.PeekEventImpl ()->IsCancelled ())
+  if (id.PeekEventImpl () == 0
+      || id.GetTs () < m_currentTs
+      || (id.GetTs () == m_currentTs
+          && id.GetUid () <= m_currentUid)
+      || id.PeekEventImpl ()->IsCancelled ())
     {
       return true;
     }
diff -Naur ns-3.21/src/mpi/model/null-message-simulator-impl.h ns-3.22/src/mpi/model/null-message-simulator-impl.h
--- ns-3.21/src/mpi/model/null-message-simulator-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/mpi/model/null-message-simulator-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -60,9 +60,9 @@
   virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
-  virtual void Remove (const EventId &ev);
-  virtual void Cancel (const EventId &ev);
-  virtual bool IsExpired (const EventId &ev) const;
+  virtual void Remove (const EventId &id);
+  virtual void Cancel (const EventId &id);
+  virtual bool IsExpired (const EventId &id) const;
   virtual void Run (void);
   virtual void RunOneEvent (void);
   virtual Time Now (void) const;
diff -Naur ns-3.21/src/netanim/model/animation-interface.cc ns-3.22/src/netanim/model/animation-interface.cc
--- ns-3.21/src/netanim/model/animation-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/netanim/model/animation-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -51,10 +51,10 @@
 #include "ns3/ipv4-routing-protocol.h"
 #include "ns3/energy-source-container.h"
 
-NS_LOG_COMPONENT_DEFINE ("AnimationInterface");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AnimationInterface");
+
 // Globals
 
 static bool initialized = false;
diff -Naur ns-3.21/src/network/bindings/modulegen__gcc_ILP32.py ns-3.22/src/network/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/network/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -483,6 +483,9 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndErrorCallback&')
@@ -2460,10 +2463,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -3124,10 +3127,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3565,7 +3568,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3616,6 +3624,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3692,6 +3705,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3726,6 +3743,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -6436,14 +6455,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -6481,8 +6500,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -6503,10 +6522,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -7750,11 +7769,6 @@
                    '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', 
@@ -7825,6 +7839,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, cls):
diff -Naur ns-3.21/src/network/bindings/modulegen__gcc_LP64.py ns-3.22/src/network/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/network/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -483,6 +483,9 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndErrorCallback&')
@@ -2460,10 +2463,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -3124,10 +3127,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3565,7 +3568,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3616,6 +3624,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3692,6 +3705,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3726,6 +3743,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -6436,14 +6455,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -6481,8 +6500,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -6503,10 +6522,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -7750,11 +7769,6 @@
                    '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', 
@@ -7825,6 +7839,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3PacketSizeMinMaxAvgTotalCalculator_methods(root_module, cls):
diff -Naur ns-3.21/src/network/helper/simple-net-device-helper.cc ns-3.22/src/network/helper/simple-net-device-helper.cc
--- ns-3.21/src/network/helper/simple-net-device-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/helper/simple-net-device-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,10 @@
 
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("SimpleNetDeviceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SimpleNetDeviceHelper");
+
 SimpleNetDeviceHelper::SimpleNetDeviceHelper ()
 {
   m_queueFactory.SetTypeId ("ns3::DropTailQueue");
diff -Naur ns-3.21/src/network/helper/simple-net-device-helper.h ns-3.22/src/network/helper/simple-net-device-helper.h
--- ns-3.21/src/network/helper/simple-net-device-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/helper/simple-net-device-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -27,7 +27,6 @@
 #include "ns3/net-device-container.h"
 #include "ns3/node-container.h"
 #include "ns3/simple-channel.h"
-#include "ns3/deprecated.h"
 
 namespace ns3 {
 
@@ -174,7 +173,7 @@
    * attaches the provided channel to the device.
    *
    * \param node The node to install the device in
-   * \param channelName The name of the channel to attach to the device.
+   * \param channel The channel to attach to the device.
    * \returns The new net device.
    */
   Ptr<NetDevice> InstallPriv (Ptr<Node> node, Ptr<SimpleChannel> channel) const;
diff -Naur ns-3.21/src/network/helper/trace-helper.cc ns-3.22/src/network/helper/trace-helper.cc
--- ns-3.21/src/network/helper/trace-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/helper/trace-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 
 #include "trace-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("TraceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TraceHelper");
+
 PcapHelper::PcapHelper ()
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.21/src/network/helper/trace-helper.h ns-3.22/src/network/helper/trace-helper.h
--- ns-3.21/src/network/helper/trace-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/helper/trace-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -100,7 +100,7 @@
    * @returns a smart pointer to the Pcap file
    */
   Ptr<PcapFileWrapper> CreateFile (std::string filename, std::ios::openmode filemode,
-                                   uint32_t dataLinkType,  uint32_t snapLen = 65535, int32_t tzCorrection = 0);
+                                   uint32_t dataLinkType,  uint32_t snapLen = std::numeric_limits<uint32_t>::max (), int32_t tzCorrection = 0);
   /**
    * @brief Hook a trace source to the default trace sink
    * 
@@ -544,7 +544,6 @@
 
   /**
    * @brief Enable pcap output the indicated net device.
-   * @internal
    *
    * @param prefix Filename prefix to use for pcap files.
    * @param nd Net device for which you want to enable tracing.
@@ -634,7 +633,6 @@
 
   /**
    * @brief Enable ascii trace output on the indicated net device.
-   * @internal
    *
    * The implementation is expected to use a provided Ptr<OutputStreamWrapper>
    * if it is non-null.  If the OutputStreamWrapper is null, the implementation
@@ -794,9 +792,7 @@
    *               ascii tracing
    * @param explicitFilename Treat the prefix as an explicit filename if true
    */
-  /**
-   * @internal Avoid code duplication.
-   */
+
   void EnableAsciiImpl (Ptr<OutputStreamWrapper> stream, 
                         std::string prefix, 
                         uint32_t nodeid, 
diff -Naur ns-3.21/src/network/model/address.cc ns-3.22/src/network/model/address.cc
--- ns-3.21/src/network/model/address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 #include <iostream>
 #include <iomanip>
 
-NS_LOG_COMPONENT_DEFINE ("Address");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Address");
+
 Address::Address ()
   : m_type (0),
     m_len (0)
@@ -169,7 +169,7 @@
   buffer.Read (m_data, m_len);
 }
 
-ATTRIBUTE_HELPER_CPP (Address);   //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_CPP (Address);
 
 
 bool operator == (const Address &a, const Address &b)
diff -Naur ns-3.21/src/network/model/address.h ns-3.22/src/network/model/address.h
--- ns-3.21/src/network/model/address.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/address.h	2015-02-05 15:46:22.000000000 -0800
@@ -32,6 +32,8 @@
 /**
  * \ingroup network
  * \defgroup address Address
+ *
+ * Network Address abstractions, including MAC, IPv4 and IPv6.
  */
 /**
  * \ingroup address
@@ -82,6 +84,8 @@
  *   return type;
  * }
  * \endcode
+ *
+ * \see attribute_Address
  */
 class Address 
 {
@@ -271,12 +275,7 @@
   uint8_t m_data[MAX_SIZE]; //!< The address value
 };
 
-/**
- * \class ns3::AddressValue
- * \brief hold objects of type ns3::Address
- */
-
-ATTRIBUTE_HELPER_HEADER (Address);  //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_HEADER (Address);
 
 bool operator == (const Address &a, const Address &b);
 bool operator != (const Address &a, const Address &b);
diff -Naur ns-3.21/src/network/model/application.cc ns-3.22/src/network/model/application.cc
--- ns-3.21/src/network/model/application.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/application.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/nstime.h"
 #include "ns3/simulator.h"
 
-NS_LOG_COMPONENT_DEFINE ("Application");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Application");
+
 NS_OBJECT_ENSURE_REGISTERED (Application);
 
 // Application Methods
diff -Naur ns-3.21/src/network/model/buffer.cc ns-3.22/src/network/model/buffer.cc
--- ns-3.21/src/network/model/buffer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/buffer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,8 +21,6 @@
 #include "ns3/assert.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Buffer");
-
 #define LOG_INTERNAL_STATE(y)                                                                    \
   NS_LOG_LOGIC (y << "start="<<m_start<<", end="<<m_end<<", zero start="<<m_zeroAreaStart<<              \
                 ", zero end="<<m_zeroAreaEnd<<", count="<<m_data->m_count<<", size="<<m_data->m_size<<   \
@@ -49,6 +47,8 @@
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Buffer");
+
 
 uint32_t Buffer::g_recommendedStart = 0;
 #ifdef BUFFER_FREE_LIST
diff -Naur ns-3.21/src/network/model/buffer.h ns-3.22/src/network/model/buffer.h
--- ns-3.21/src/network/model/buffer.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/buffer.h	2015-02-05 15:46:22.000000000 -0800
@@ -139,7 +139,7 @@
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by one byte.
      */
     inline void WriteU8 (uint8_t  data);
@@ -147,14 +147,14 @@
      * \param data data to write in buffer
      * \param len number of times data must be written in buffer
      *
-     * Write the data in buffer len times and avance the iterator position
+     * Write the data in buffer len times and advance the iterator position
      * by len byte.
      */
     inline void WriteU8 (uint8_t data, uint32_t len);
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by two bytes. The format of the data written in the byte
      * buffer is non-portable. We only ensure that readU16 will
      * return exactly what we wrote with writeU16 if the program
@@ -164,7 +164,7 @@
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by four bytes. The format of the data written in the byte
      * buffer is non-portable. We only ensure that readU32 will
      * return exactly what we wrote with writeU32 if the program
@@ -174,7 +174,7 @@
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by eight bytes. The format of the data written in the byte
      * buffer is non-portable. We only ensure that readU64 will
      * return exactly what we wrote with writeU64 if the program
@@ -184,15 +184,15 @@
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
-     * by two bytes. The data is written in network order and the
+     * Write the data in buffer and advance the iterator position
+     * by two bytes. The data is written in least significant byte order and the
      * input data is expected to be in host order.
      */
     void WriteHtolsbU16 (uint16_t data);
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by four bytes. The data is written in least significant byte order and the
      * input data is expected to be in host order.
      */
@@ -200,7 +200,7 @@
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by eight bytes. The data is written in least significant byte order and the
      * input data is expected to be in host order.
      */
@@ -208,15 +208,15 @@
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
-     * by two bytes. The data is written in least significant byte order and the
+     * Write the data in buffer and advance the iterator position
+     * by two bytes. The data is written in network order and the
      * input data is expected to be in host order.
      */
     inline void WriteHtonU16 (uint16_t data);
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by four bytes. The data is written in network order and the
      * input data is expected to be in host order.
      */
@@ -224,7 +224,7 @@
     /**
      * \param data data to write in buffer
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by eight bytes. The data is written in network order and the
      * input data is expected to be in host order.
      */
@@ -233,7 +233,7 @@
      * \param buffer a byte buffer to copy in the internal buffer.
      * \param size number of bytes to copy.
      *
-     * Write the data in buffer and avance the iterator position
+     * Write the data in buffer and advance the iterator position
      * by size bytes.
      */
     void Write (uint8_t const*buffer, uint32_t size);
@@ -242,7 +242,7 @@
      * \param end the end of the data to copy
      *
      * Write the data delimited by start and end in internal buffer
-     * and avance the iterator position by the number of bytes
+     * and advance the iterator position by the number of bytes
      * copied.
      * The input interators _must_ not point to the same Buffer as
      * we do to avoid overlapping copies. This is enforced
@@ -293,7 +293,7 @@
      *
      * Read data and advance the Iterator by the number of bytes
      * read.
-     * The data is read in network format and return in host format.
+     * The data is read in network format and returned in host format.
      */
     inline uint16_t ReadNtohU16 (void);
     /**
@@ -301,7 +301,7 @@
      *
      * Read data and advance the Iterator by the number of bytes
      * read.
-     * The data is read in network format and return in host format.
+     * The data is read in network format and returned in host format.
      */
     inline uint32_t ReadNtohU32 (void);
     /**
@@ -309,7 +309,7 @@
      *
      * Read data and advance the Iterator by the number of bytes
      * read.
-     * The data is read in network format and return in host format.
+     * The data is read in network format and returned in host format.
      */
     uint64_t ReadNtohU64 (void);
     /**
@@ -317,7 +317,7 @@
      *
      * Read data and advance the Iterator by the number of bytes
      * read.
-     * The data is read in network format and return in host format.
+     * The data is read in least significant byte format and returned in host format.
      */
     uint16_t ReadLsbtohU16 (void);
     /**
@@ -325,7 +325,7 @@
      *
      * Read data and advance the Iterator by the number of bytes
      * read.
-     * The data is read in network format and return in host format.
+     * The data is read in least significant byte format and returned in host format.
      */
     uint32_t ReadLsbtohU32 (void);
     /**
@@ -333,7 +333,7 @@
      *
      * Read data and advance the Iterator by the number of bytes
      * read.
-     * The data is read in network format and return in host format.
+     * The data is read in least signficant byte format and returned in host format.
      */
     uint64_t ReadLsbtohU64 (void);
     /**
@@ -417,7 +417,7 @@
      *
      * Read data and advance the Iterator by the number of bytes
      * read.
-     * The data is read in network format and return in host format.
+     * The data is read in network format and returned in host format.
      *
      * \warning this is the slow version, please use ReadNtohU16 (void)
      */
@@ -427,7 +427,7 @@
      *
      * Read data and advance the Iterator by the number of bytes
      * read.
-     * The data is read in network format and return in host format.
+     * The data is read in network format and returned in host format.
      *
      * \warning this is the slow version, please use ReadNtohU32 (void)
      */
@@ -959,7 +959,7 @@
     }
   else if (m_current >= m_zeroEnd)
     {
-      buffer = &m_data[m_current];
+      buffer = &m_data[m_current - (m_zeroEnd - m_zeroStart)];
     }
   else
     {
@@ -983,7 +983,7 @@
     }
   else if (m_current >= m_zeroEnd)
     {
-      buffer = &m_data[m_current];
+      buffer = &m_data[m_current - (m_zeroEnd - m_zeroStart)];
     }
   else
     {
diff -Naur ns-3.21/src/network/model/byte-tag-list.cc ns-3.22/src/network/model/byte-tag-list.cc
--- ns-3.21/src/network/model/byte-tag-list.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/byte-tag-list.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,14 +22,14 @@
 #include <vector>
 #include <cstring>
 
-NS_LOG_COMPONENT_DEFINE ("ByteTagList");
-
 #define USE_FREE_LIST 1
 #define FREE_LIST_SIZE 1000
 #define OFFSET_MAX (2147483647)
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ByteTagList");
+
 /**
  * \ingroup packet
  *
diff -Naur ns-3.21/src/network/model/channel.cc ns-3.22/src/network/model/channel.cc
--- ns-3.21/src/network/model/channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/log.h"
 #include "ns3/uinteger.h"
 
-NS_LOG_COMPONENT_DEFINE ("Channel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Channel");
+
 NS_OBJECT_ENSURE_REGISTERED (Channel);
 
 TypeId 
diff -Naur ns-3.21/src/network/model/header.cc ns-3.22/src/network/model/header.cc
--- ns-3.21/src/network/model/header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,10 +1,10 @@
 #include "header.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Header");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Header");
+
 NS_OBJECT_ENSURE_REGISTERED (Header);
 
 Header::~Header ()
diff -Naur ns-3.21/src/network/model/net-device.cc ns-3.22/src/network/model/net-device.cc
--- ns-3.21/src/network/model/net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/uinteger.h"
 #include "net-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("NetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("NetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (NetDevice);
 
 TypeId NetDevice::GetTypeId (void)
diff -Naur ns-3.21/src/network/model/net-device.h ns-3.22/src/network/model/net-device.h
--- ns-3.21/src/network/model/net-device.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/net-device.h	2015-02-05 15:46:22.000000000 -0800
@@ -183,9 +183,7 @@
    * multicast group.
    *
    * \warning Calling this method is invalid if IsMulticast returns not true.
-   * \see Ipv4Address
-   * \see Address
-   * \see NetDevice::IsMulticast
+   * \see IsMulticast()
    */
   virtual Address GetMulticast (Ipv4Address multicastGroup) const = 0;
 
diff -Naur ns-3.21/src/network/model/nix-vector.cc ns-3.22/src/network/model/nix-vector.cc
--- ns-3.21/src/network/model/nix-vector.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/nix-vector.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 
 #include "nix-vector.h"
 
-NS_LOG_COMPONENT_DEFINE ("NixVector");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("NixVector");
+
 typedef std::vector<uint32_t> NixBits_t;  //!< typedef for the nixVector
 
 NixVector::NixVector ()
diff -Naur ns-3.21/src/network/model/node.cc ns-3.22/src/network/model/node.cc
--- ns-3.21/src/network/model/node.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/node.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include "ns3/boolean.h"
 #include "ns3/simulator.h"
 
-NS_LOG_COMPONENT_DEFINE ("Node");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Node");
+
 NS_OBJECT_ENSURE_REGISTERED (Node);
 
 /**
@@ -66,7 +66,7 @@
                    MakeUintegerAccessor (&Node::m_id),
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("SystemId", "The systemId of this node: a unique integer used for parallel simulations.",
-                   TypeId::ATTR_GET|TypeId::ATTR_SET,
+                   TypeId::ATTR_GET || TypeId::ATTR_SET,
                    UintegerValue (0),
                    MakeUintegerAccessor (&Node::m_sid),
                    MakeUintegerChecker<uint32_t> ())
diff -Naur ns-3.21/src/network/model/packet.cc ns-3.22/src/network/model/packet.cc
--- ns-3.21/src/network/model/packet.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/packet.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include <string>
 #include <cstdarg>
 
-NS_LOG_COMPONENT_DEFINE ("Packet");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Packet");
+
 uint32_t Packet::m_globalUid = 0;
 
 TypeId 
@@ -364,19 +364,6 @@
   m_byteTagList.RemoveAll ();
 }
 
-uint8_t const *
-Packet::PeekData (void) const
-{
-  NS_LOG_FUNCTION (this);
-  uint32_t oldStart = m_buffer.GetCurrentStartOffset ();
-  uint8_t const * data = m_buffer.PeekData ();
-  uint32_t newStart = m_buffer.GetCurrentStartOffset ();
- 
-  // Update tag offsets if buffer offsets were changed
-  const_cast<ByteTagList &>(m_byteTagList).AddAtStart (newStart - oldStart, newStart);
-  return data;
-}
-
 uint32_t 
 Packet::CopyData (uint8_t *buffer, uint32_t size) const
 {
@@ -425,6 +412,14 @@
     }
 }
 
+std::string
+Packet::ToString() const
+{
+  std::ostringstream oss;
+  Print (oss);
+  return oss.str();
+}
+
 void 
 Packet::Print (std::ostream &os) const
 {
diff -Naur ns-3.21/src/network/model/packet.h ns-3.22/src/network/model/packet.h
--- ns-3.21/src/network/model/packet.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/packet.h	2015-02-05 15:46:22.000000000 -0800
@@ -36,6 +36,9 @@
 
 namespace ns3 {
 
+// Forward declaration
+class Address;
+  
 /**
  * \ingroup network
  * \defgroup packet Packet
@@ -388,21 +391,6 @@
   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
-   * 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.
-   *
-   */
-  uint8_t const *PeekData (void) const NS_DEPRECATED;
-
-  /**
    * \brief Copy the packet contents to a byte buffer.
    *
    * \param buffer a pointer to a byte buffer where the packet data 
@@ -469,6 +457,15 @@
   void Print (std::ostream &os) const;
 
   /**
+   * \brief Return a string representation of the packet
+   *
+   * An empty string is returned if you haven't called EnablePrinting ()
+   *
+   * \return String representation
+   */
+  std::string ToString (void) const;
+
+  /**
    * \brief Returns an iterator which points to the first 'item'
    * stored in this buffer.
    *
@@ -658,6 +655,31 @@
    */
   Ptr<NixVector> GetNixVector (void) const; 
 
+  /**
+   * TracedCallback signature for Ptr<Packet>
+   *
+   * \param [in] packet The packet.
+   */
+  typedef void (* TracedCallback) (const Ptr<const Packet> packet);
+  
+  /**
+   * TracedCallback signature for packet and address.
+   *
+   * \param [in] packet The packet.
+   * \param [in] address The address.
+   */
+  typedef void (* PacketAddressTracedCallback)
+    (const Ptr<const Packet> packet, const Address &address);
+  
+  /**
+   * TracedCallback signature for changes in packet size.
+   *
+   * \param [in] oldSize The previous packet's size.
+   * \param [in] newSize The actual packet's size.
+   */
+  typedef void (* PacketSizeTracedCallback)
+    (const uint32_t oldSize, const uint32_t newSize);
+
 private:
   /**
    * \brief Constructor
diff -Naur ns-3.21/src/network/model/packet-metadata.cc ns-3.22/src/network/model/packet-metadata.cc
--- ns-3.21/src/network/model/packet-metadata.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/packet-metadata.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "header.h"
 #include "trailer.h"
 
-NS_LOG_COMPONENT_DEFINE ("PacketMetadata");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PacketMetadata");
+
 bool PacketMetadata::m_enable = false;
 bool PacketMetadata::m_enableChecking = false;
 bool PacketMetadata::m_metadataSkipped = false;
diff -Naur ns-3.21/src/network/model/packet-metadata.h ns-3.22/src/network/model/packet-metadata.h
--- ns-3.21/src/network/model/packet-metadata.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/packet-metadata.h	2015-02-05 15:46:22.000000000 -0800
@@ -36,7 +36,6 @@
 class Trailer;
 
 /**
- * \internal
  * \ingroup packet
  * \brief Handle packet metadata about packet headers and trailers
  *
diff -Naur ns-3.21/src/network/model/packet-tag-list.cc ns-3.22/src/network/model/packet-tag-list.cc
--- ns-3.21/src/network/model/packet-tag-list.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/packet-tag-list.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ns3/log.h"
 #include <cstring>
 
-NS_LOG_COMPONENT_DEFINE ("PacketTagList");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PacketTagList");
+
 bool
 PacketTagList::COWTraverse (Tag & tag, PacketTagList::COWWriter Writer)
 {
diff -Naur ns-3.21/src/network/model/socket.cc ns-3.22/src/network/model/socket.cc
--- ns-3.21/src/network/model/socket.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/socket.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "socket-factory.h"
 #include <limits>
 
-NS_LOG_COMPONENT_DEFINE ("Socket");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Socket");
+
 NS_OBJECT_ENSURE_REGISTERED (Socket);
 
 TypeId
diff -Naur ns-3.21/src/network/model/socket-factory.cc ns-3.22/src/network/model/socket-factory.cc
--- ns-3.21/src/network/model/socket-factory.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/socket-factory.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,10 +20,10 @@
 #include "socket-factory.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("SocketFactory");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SocketFactory");
+
 NS_OBJECT_ENSURE_REGISTERED (SocketFactory);
 
 TypeId SocketFactory::GetTypeId (void)
diff -Naur ns-3.21/src/network/model/tag-buffer.cc ns-3.22/src/network/model/tag-buffer.cc
--- ns-3.21/src/network/model/tag-buffer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/tag-buffer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/log.h"
 #include <cstring>
 
-NS_LOG_COMPONENT_DEFINE ("TagBuffer");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TagBuffer");
+
 #ifndef TAG_BUFFER_USE_INLINE
 
 void 
diff -Naur ns-3.21/src/network/model/trailer.cc ns-3.22/src/network/model/trailer.cc
--- ns-3.21/src/network/model/trailer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/model/trailer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -1,10 +1,10 @@
 #include "trailer.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Trailer");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Trailer");
+
 NS_OBJECT_ENSURE_REGISTERED (Trailer);
 
 Trailer::~Trailer ()
diff -Naur ns-3.21/src/network/test/buffer-test.cc ns-3.22/src/network/test/buffer-test.cc
--- ns-3.21/src/network/test/buffer-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/test/buffer-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -321,6 +321,25 @@
       NS_TEST_ASSERT_MSG_EQ ( evilBuffer [i], cBuf [i] , "Bad buffer peeked");
     }
   free (cBuf);
+
+  /// \internal See \bugid{2044}  Will not pass without bug2044 fix.
+  buffer = Buffer (1);
+  buffer.AddAtEnd (2);
+  i = buffer.Begin ();
+  i.Next (1);
+  i.WriteU8 (0x77);
+  i.WriteU8 (0x66);
+  ENSURE_WRITTEN_BYTES (buffer, 3, 0x00, 0x77, 0x66);
+  i = buffer.Begin ();
+  i.ReadU8 ();
+  uint16_t val1 = i.ReadNtohU16 ();
+  i = buffer.Begin ();
+  i.ReadU8 ();
+  uint16_t val2 = 0;
+  val2 |= i.ReadU8 ();
+  val2 <<= 8;
+  val2 |= i.ReadU8 ();
+  NS_TEST_ASSERT_MSG_EQ (val1, val2, "Bad ReadNtohU16()");
 }
 //-----------------------------------------------------------------------------
 class BufferTestSuite : public TestSuite
diff -Naur ns-3.21/src/network/test/sequence-number-test-suite.cc ns-3.22/src/network/test/sequence-number-test-suite.cc
--- ns-3.21/src/network/test/sequence-number-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/test/sequence-number-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -44,7 +44,8 @@
       .SetParent<Object> ()
       .AddTraceSource ("TestTracedSequenceNumber",
                        "A traceable sequence number",
-                       MakeTraceSourceAccessor (&SequenceNumberTestObj::m_testTracedSequenceNumber))
+                       MakeTraceSourceAccessor (&SequenceNumberTestObj::m_testTracedSequenceNumber),
+                       "ns3::SequenceNumber32TracedValueCallback")
       .AddConstructor<SequenceNumberTestObj> ()
     ;
     return tid;
diff -Naur ns-3.21/src/network/utils/address-utils.cc ns-3.22/src/network/utils/address-utils.cc
--- ns-3.21/src/network/utils/address-utils.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/address-utils.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "inet-socket-address.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("AddressUtils");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AddressUtils");
+
 void WriteTo (Buffer::Iterator &i, Ipv4Address ad)
 {
   NS_LOG_FUNCTION (&i << &ad);
diff -Naur ns-3.21/src/network/utils/data-rate.cc ns-3.22/src/network/utils/data-rate.cc
--- ns-3.21/src/network/utils/data-rate.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/data-rate.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,15 @@
 #include "ns3/fatal-error.h"
 #include "ns3/log.h"
 
+namespace ns3 {
+  
 NS_LOG_COMPONENT_DEFINE ("DataRate");
 
-static bool
-DoParse (const std::string s, uint64_t *v)
+ATTRIBUTE_HELPER_CPP (DataRate);
+
+/* static */
+bool
+DataRate::DoParse (const std::string s, uint64_t *v)
 {
   NS_LOG_FUNCTION (s << v);
   std::string::size_type n = s.find_first_not_of ("0123456789.");
@@ -179,11 +184,6 @@
   return true;
 }
 
-
-namespace ns3 {
-
-ATTRIBUTE_HELPER_CPP (DataRate);  //!< Macro to make help make data-rate an ns-3 attribute
-
 DataRate::DataRate ()
   : m_bps (0)
 {
@@ -260,7 +260,7 @@
   std::string value;
   is >> value;
   uint64_t v;
-  bool ok = DoParse (value, &v);
+  bool ok = DataRate::DoParse (value, &v);
   if (!ok)
     {
       is.setstate (std::ios_base::failbit);
diff -Naur ns-3.21/src/network/utils/data-rate.h ns-3.22/src/network/utils/data-rate.h
--- ns-3.21/src/network/utils/data-rate.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/data-rate.h	2015-02-05 15:46:22.000000000 -0800
@@ -41,32 +41,48 @@
  * Allows for natural and familiar use of data rates.  Allows construction
  * from strings, natural multiplication e.g.:
  * \code
- * DataRate x("56kbps");
- * double nBits = x*ns3::Seconds(19.2);
- * uint32_t nBytes = 20;
- * double txtime = x.CalclulateTxTime(nBytes);
+ *   DataRate x("56kbps");
+ *   double nBits = x*ns3::Seconds(19.2);
+ *   uint32_t nBytes = 20;
+ *   double txtime = x.CalclulateTxTime(nBytes);
  * \endcode
- * This class also supports the regular comparison operators <, >, <=, >=, ==,
- * and !=
+ * This class also supports the regular comparison operators \c <, \c >,
+ * \c <=, \c >=, \c ==, and \c !=
  *
- * Conventions used:
- * "b" stands for bits, "B" for bytes (8 bits) \n
- * "k" stands for 1000, "K" also stands for 1000, "Ki" stands for 1024 \n
- * "M" stand for 1000000, "Mib" stands for 1024 kibibits, or 1048576 bits \n
- * "G" stand for 10^9, "Gib" stands for 1024 mebibits \n
- * whitespace is allowed but not required between the numeric value and units
+ * Data rate specifiers consist of
+ * * A numeric value,
+ * * An optional multiplier prefix and
+ * * A unit.
+ *
+ * Whitespace is allowed but not required between the numeric value and
+ * multipler or unit.
+ *
+ * Supported multiplier prefixes:
+ *
+ * | Prefix   | Value       |
+ * | :------- | ----------: |
+ * | "k", "K" | 1000        |
+ * | "Ki"     | 1024        |
+ * | "M"      | 1000000     |
+ * | "Mi"     | 1024 Ki     |
+ * | "G"      | 10^9        |
+ * | "Gi "    | 1024 Mi     |
  *
  * Supported unit strings:
- * bps, b/s, Bps, B/s \n
- * kbps, kb/s, Kbps, Kb/s, kBps, kB/s, KBps, KB/s, Kib/s, KiB/s \n
- * Mbps, Mb/s, MBps, MB/s, Mib/s, MiB/s \n
- * Gbps, Gb/s, GBps, GB/s, Gib/s, GiB/s \n
- * 
+ *
+ * | Symbol   | Meaning     |
+ * | :------- | :---------- |
+ * | "b"      | bits        |
+ * | "B"      | 8-bit bytes |
+ * | "s", "/s"| per second  |
+ *
  * Examples:
- * "56kbps" = 56,000 bits/s \n
- * "128 kb/s" = 128,000 bits/s \n
- * "8Kib/s" = 1 KiB/s = 8192 bits/s \n
- * "1kB/s" = 8000 bits/s 
+ * * "56kbps" = 56,000 bits/s
+ * * "128 kb/s" = 128,000 bits/s
+ * * "8Kib/s" = 1 KiB/s = 8192 bits/s
+ * * "1kB/s" = 8000 bits/s 
+ *
+ * \see attribute_DataRate
  */
 class DataRate
 {
@@ -159,6 +175,26 @@
   uint64_t GetBitRate () const;
 
 private:
+
+  /**
+   * \brief Parse a string representing a DataRate into an uint64_t
+   *
+   * Allowed unit representations include all combinations of
+   *
+   * * An SI prefix: k, K, M, G
+   * * Decimal or kibibit (as in "Kibps", meaning 1024 bps)
+   * * Bits or bytes (8 bits)
+   * * "bps" or "/s"
+   *
+   * \param [in] s The string representation, including unit
+   * \param [in,out] v The location to put the value, in bits/sec.
+   * \return true if parsing was successful.
+   */
+  static bool DoParse (const std::string s, uint64_t *v);
+
+  // Uses DoParse
+  friend std::istream &operator >> (std::istream &is, DataRate &rate);
+  
   uint64_t m_bps; //!< data rate [bps]
 };
 
@@ -180,13 +216,7 @@
  */
 std::istream &operator >> (std::istream &is, DataRate &rate);
 
-/**
- * \class ns3::DataRateValue
- * \brief hold objects of type ns3::DataRate
- */
-
-
-ATTRIBUTE_HELPER_HEADER (DataRate);   //!< Macro to make help make data-rate an ns-3 attribute
+ATTRIBUTE_HELPER_HEADER (DataRate);
 
 
 /**
diff -Naur ns-3.21/src/network/utils/drop-tail-queue.cc ns-3.22/src/network/utils/drop-tail-queue.cc
--- ns-3.21/src/network/utils/drop-tail-queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/drop-tail-queue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "ns3/uinteger.h"
 #include "drop-tail-queue.h"
 
-NS_LOG_COMPONENT_DEFINE ("DropTailQueue");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DropTailQueue");
+
 NS_OBJECT_ENSURE_REGISTERED (DropTailQueue);
 
 TypeId DropTailQueue::GetTypeId (void) 
diff -Naur ns-3.21/src/network/utils/error-model.cc ns-3.22/src/network/utils/error-model.cc
--- ns-3.21/src/network/utils/error-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/error-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -73,10 +73,10 @@
 #include "ns3/string.h"
 #include "ns3/pointer.h"
 
-NS_LOG_COMPONENT_DEFINE ("ErrorModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ErrorModel");
+
 NS_OBJECT_ENSURE_REGISTERED (ErrorModel);
 
 TypeId ErrorModel::GetTypeId (void)
diff -Naur ns-3.21/src/network/utils/ethernet-header.cc ns-3.22/src/network/utils/ethernet-header.cc
--- ns-3.21/src/network/utils/ethernet-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/ethernet-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ethernet-header.h"
 #include "address-utils.h"
 
-NS_LOG_COMPONENT_DEFINE ("EthernetHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EthernetHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (EthernetHeader);
 
 EthernetHeader::EthernetHeader (bool hasPreamble)
diff -Naur ns-3.21/src/network/utils/ethernet-trailer.cc ns-3.22/src/network/utils/ethernet-trailer.cc
--- ns-3.21/src/network/utils/ethernet-trailer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/ethernet-trailer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ethernet-trailer.h"
 #include "crc32.h"
 
-NS_LOG_COMPONENT_DEFINE ("EthernetTrailer");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EthernetTrailer");
+
 NS_OBJECT_ENSURE_REGISTERED (EthernetTrailer);
 
 EthernetTrailer::EthernetTrailer ()
diff -Naur ns-3.21/src/network/utils/flow-id-tag.cc ns-3.22/src/network/utils/flow-id-tag.cc
--- ns-3.21/src/network/utils/flow-id-tag.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/flow-id-tag.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,10 +20,10 @@
 #include "flow-id-tag.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("FlowIdTag");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("FlowIdTag");
+
 NS_OBJECT_ENSURE_REGISTERED (FlowIdTag);
 
 TypeId 
diff -Naur ns-3.21/src/network/utils/inet6-socket-address.cc ns-3.22/src/network/utils/inet6-socket-address.cc
--- ns-3.21/src/network/utils/inet6-socket-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/inet6-socket-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,11 +22,11 @@
 #include "inet6-socket-address.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Inet6SocketAddress");
-
 namespace ns3
 {
 
+NS_LOG_COMPONENT_DEFINE ("Inet6SocketAddress");
+
 Inet6SocketAddress::Inet6SocketAddress (Ipv6Address ipv6, uint16_t port)
   : m_ipv6 (ipv6),
     m_port (port)
diff -Naur ns-3.21/src/network/utils/inet-socket-address.cc ns-3.22/src/network/utils/inet-socket-address.cc
--- ns-3.21/src/network/utils/inet-socket-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/inet-socket-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/assert.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("InetSocketAddress");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("InetSocketAddress");
+
 InetSocketAddress::InetSocketAddress (Ipv4Address ipv4, uint16_t port)
   : m_ipv4 (ipv4),
     m_port (port)
diff -Naur ns-3.21/src/network/utils/ipv4-address.cc ns-3.22/src/network/utils/ipv4-address.cc
--- ns-3.21/src/network/utils/ipv4-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/ipv4-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ipv4-address.h"
 #include "ns3/assert.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4Address");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4Address");
+
 #define ASCII_DOT (0x2e)
 #define ASCII_ZERO (0x30)
 #define ASCII_SLASH (0x2f)
@@ -422,7 +422,7 @@
   return !a.IsEqual (b);
 }
 
-ATTRIBUTE_HELPER_CPP (Ipv4Address); //!< Macro to make help make class an ns-3 attribute
-ATTRIBUTE_HELPER_CPP (Ipv4Mask);    //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_CPP (Ipv4Address);
+ATTRIBUTE_HELPER_CPP (Ipv4Mask);
 
 } // namespace ns3
diff -Naur ns-3.21/src/network/utils/ipv4-address.h ns-3.22/src/network/utils/ipv4-address.h
--- ns-3.21/src/network/utils/ipv4-address.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/ipv4-address.h	2015-02-05 15:46:22.000000000 -0800
@@ -34,6 +34,8 @@
  * \ingroup address
  *
  * \brief Ipv4 addresses are stored in host order in this class.
+ *
+ * \see attribute_Ipv4Address
  */
 class Ipv4Address {
 public:
@@ -218,6 +220,8 @@
  * The constructor takes arguments according to a few formats. 
  * Ipv4Mask ("255.255.255.255"), Ipv4Mask ("/32"), and Ipv4Mask (0xffffffff)
  * are all equivalent.
+ *
+ * \see attribute_Ipv4Mask
  */
 class Ipv4Mask {
 public:
@@ -289,17 +293,8 @@
   uint32_t m_mask; //!< IP mask
 };
 
-/**
- * \class ns3::Ipv4AddressValue
- * \brief hold objects of type ns3::Ipv4Address
- */
-/**
- * \class ns3::Ipv4MaskValue
- * \brief hold objects of type ns3::Ipv4Mask
- */
-
-ATTRIBUTE_HELPER_HEADER (Ipv4Address);  //!< Macro to make help make class an ns-3 attribute
-ATTRIBUTE_HELPER_HEADER (Ipv4Mask);     //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_HEADER (Ipv4Address);
+ATTRIBUTE_HELPER_HEADER (Ipv4Mask);
 
 /**
  * \brief Stream insertion operator.
diff -Naur ns-3.21/src/network/utils/ipv6-address.cc ns-3.22/src/network/utils/ipv6-address.cc
--- ns-3.21/src/network/utils/ipv6-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/ipv6-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -52,10 +52,10 @@
 #include "mac64-address.h"
 #include "ipv6-address.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv6Address");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv6Address");
+
 #ifdef __cplusplus
 extern "C"
 { /* } */
@@ -1010,8 +1010,8 @@
   return lookuphash (buf, sizeof (buf), 0);
 }
 
-ATTRIBUTE_HELPER_CPP (Ipv6Address); //!< Macro to make help make class an ns-3 attribute
-ATTRIBUTE_HELPER_CPP (Ipv6Prefix);  //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_CPP (Ipv6Address);
+ATTRIBUTE_HELPER_CPP (Ipv6Prefix);
 
 } /* namespace ns3 */
 
diff -Naur ns-3.21/src/network/utils/ipv6-address.h ns-3.22/src/network/utils/ipv6-address.h
--- ns-3.21/src/network/utils/ipv6-address.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/ipv6-address.h	2015-02-05 15:46:22.000000000 -0800
@@ -42,6 +42,7 @@
  * \class Ipv6Address
  * \brief Describes an IPv6 address.
  * \see Ipv6Prefix
+ * \see attribute_Ipv6Address
  */
 class Ipv6Address
 {
@@ -383,6 +384,7 @@
  * \class Ipv6Prefix
  * \brief Describes an IPv6 prefix. It is just a bitmask like Ipv4Mask.
  * \see Ipv6Address
+ * \see attribute_Ipv6Prefix
  */
 class Ipv6Prefix
 {
@@ -506,17 +508,8 @@
   friend bool operator != (Ipv6Prefix const &a, Ipv6Prefix const &b);
 };
 
-/**
- * \class ns3::Ipv6AddressValue
- * \brief Hold objects of type ns3::Ipv6Address
- */
-ATTRIBUTE_HELPER_HEADER (Ipv6Address);  //!< Macro to make help make class an ns-3 attribute
-
-/**
- * \class ns3::Ipv6PrefixValue
- * \brief Hold objects of type ns3::Ipv6Prefix
- */
-ATTRIBUTE_HELPER_HEADER (Ipv6Prefix);   //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_HEADER (Ipv6Address);
+ATTRIBUTE_HELPER_HEADER (Ipv6Prefix);
 
 /**
  * \brief Stream insertion operator.
diff -Naur ns-3.21/src/network/utils/llc-snap-header.cc ns-3.22/src/network/utils/llc-snap-header.cc
--- ns-3.21/src/network/utils/llc-snap-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/llc-snap-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/log.h"
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("LlcSnalHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("LlcSnalHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (LlcSnapHeader);
 
 LlcSnapHeader::LlcSnapHeader ()
diff -Naur ns-3.21/src/network/utils/mac16-address.cc ns-3.22/src/network/utils/mac16-address.cc
--- ns-3.21/src/network/utils/mac16-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/mac16-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,11 +26,11 @@
 #include <iostream>
 #include <cstring>
 
-NS_LOG_COMPONENT_DEFINE ("Mac16Address");
-
 namespace ns3 {
 
-ATTRIBUTE_HELPER_CPP (Mac16Address);  //!< Macro to make help make class an ns-3 attribute
+NS_LOG_COMPONENT_DEFINE ("Mac16Address");
+
+ATTRIBUTE_HELPER_CPP (Mac16Address);
 
 #define ASCII_a (0x41)
 #define ASCII_z (0x5a)
diff -Naur ns-3.21/src/network/utils/mac16-address.h ns-3.22/src/network/utils/mac16-address.h
--- ns-3.21/src/network/utils/mac16-address.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/mac16-address.h	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,8 @@
  * \ingroup address
  *
  * This class can contain 16 bit addresses.
+ *
+ * \see attribute_Mac16Address
  */
 class Mac16Address
 {
@@ -146,12 +148,7 @@
   uint8_t m_address[2]; //!< address value
 };
 
-/**
- * \class ns3::Mac16AddressValue
- * \brief hold objects of type ns3::Mac16Address
- */
-
-ATTRIBUTE_HELPER_HEADER (Mac16Address); //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_HEADER (Mac16Address);
 
 inline bool operator == (const Mac16Address &a, const Mac16Address &b)
 {
diff -Naur ns-3.21/src/network/utils/mac48-address.cc ns-3.22/src/network/utils/mac48-address.cc
--- ns-3.21/src/network/utils/mac48-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/mac48-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,11 +25,11 @@
 #include <iostream>
 #include <cstring>
 
-NS_LOG_COMPONENT_DEFINE ("Mac48Address");
-
 namespace ns3 {
 
-ATTRIBUTE_HELPER_CPP (Mac48Address);  //!< Macro to make help make class an ns-3 attribute
+NS_LOG_COMPONENT_DEFINE ("Mac48Address");
+
+ATTRIBUTE_HELPER_CPP (Mac48Address);
 
 #define ASCII_a (0x41)
 #define ASCII_z (0x5a)
diff -Naur ns-3.21/src/network/utils/mac48-address.h ns-3.22/src/network/utils/mac48-address.h
--- ns-3.21/src/network/utils/mac48-address.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/mac48-address.h	2015-02-05 15:46:22.000000000 -0800
@@ -37,6 +37,8 @@
  * \brief an EUI-48 address
  *
  * This class can contain 48 bit IEEE addresses.
+ *
+ * \see attribute_Mac48Address
  */
 class Mac48Address
 {
@@ -126,6 +128,14 @@
    * \returns a multicast address.
    */
   static Mac48Address GetMulticast6Prefix (void);
+
+  /**
+   * TracedCallback signature for Mac48Address
+   *
+   * \param [in] value Current value of the Mac48Address
+   */
+  typedef void (* TracedCallback)(const Mac48Address value);
+  
 private:
   /**
    * \returns a new Address instance
@@ -188,12 +198,7 @@
   uint8_t m_address[6]; //!< address value
 };
 
-/**
- * \class ns3::Mac48AddressValue
- * \brief hold objects of type ns3::Mac48Address
- */
-
-ATTRIBUTE_HELPER_HEADER (Mac48Address); //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_HEADER (Mac48Address);
 
 inline bool operator == (const Mac48Address &a, const Mac48Address &b)
 {
diff -Naur ns-3.21/src/network/utils/mac64-address.cc ns-3.22/src/network/utils/mac64-address.cc
--- ns-3.21/src/network/utils/mac64-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/mac64-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,11 +25,11 @@
 #include <iostream>
 #include <cstring>
 
-NS_LOG_COMPONENT_DEFINE ("Mac64Address");
-
 namespace ns3 {
 
-ATTRIBUTE_HELPER_CPP (Mac64Address);  //!< Macro to make help make class an ns-3 attribute
+NS_LOG_COMPONENT_DEFINE ("Mac64Address");
+
+ATTRIBUTE_HELPER_CPP (Mac64Address);
 
 #define ASCII_a (0x41)
 #define ASCII_z (0x5a)
diff -Naur ns-3.21/src/network/utils/mac64-address.h ns-3.22/src/network/utils/mac64-address.h
--- ns-3.21/src/network/utils/mac64-address.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/mac64-address.h	2015-02-05 15:46:22.000000000 -0800
@@ -37,6 +37,8 @@
  * \brief an EUI-64 address
  *
  * This class can contain 64 bit IEEE addresses.
+ *
+ * \see attribute_Mac64Address
  */
 class Mac64Address
 {
@@ -153,7 +155,7 @@
  * \brief hold objects of type ns3::Mac64Address
  */
 
-ATTRIBUTE_HELPER_HEADER (Mac64Address); //!< Macro to make help make class an ns-3 attribute
+ATTRIBUTE_HELPER_HEADER (Mac64Address);
 
 inline bool operator == (const Mac64Address &a, const Mac64Address &b)
 {
diff -Naur ns-3.21/src/network/utils/output-stream-wrapper.cc ns-3.22/src/network/utils/output-stream-wrapper.cc
--- ns-3.21/src/network/utils/output-stream-wrapper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/output-stream-wrapper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/abort.h"
 #include <fstream>
 
-NS_LOG_COMPONENT_DEFINE ("OutputStreamWrapper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("OutputStreamWrapper");
+
 OutputStreamWrapper::OutputStreamWrapper (std::string filename, std::ios::openmode filemode)
   : m_destroyable (true)
 {
diff -Naur ns-3.21/src/network/utils/packetbb.cc ns-3.22/src/network/utils/packetbb.cc
--- ns-3.21/src/network/utils/packetbb.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packetbb.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,8 +28,6 @@
 #include "ns3/log.h"
 #include "packetbb.h"
 
-NS_LOG_COMPONENT_DEFINE ("PacketBB");
-
 static const uint8_t VERSION = 0;
 /* Packet flags */
 static const uint8_t PHAS_SEQ_NUM = 0x8;
@@ -58,6 +56,8 @@
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PacketBB");
+
 NS_OBJECT_ENSURE_REGISTERED (PbbPacket);
 
 PbbTlvBlock::PbbTlvBlock (void)
diff -Naur ns-3.21/src/network/utils/packet-burst.cc ns-3.22/src/network/utils/packet-burst.cc
--- ns-3.21/src/network/utils/packet-burst.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-burst.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "packet-burst.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("PacketBurst");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PacketBurst");
+
 NS_OBJECT_ENSURE_REGISTERED (PacketBurst);
 
 TypeId
diff -Naur ns-3.21/src/network/utils/packet-burst.h ns-3.22/src/network/utils/packet-burst.h
--- ns-3.21/src/network/utils/packet-burst.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-burst.h	2015-02-05 15:46:22.000000000 -0800
@@ -74,6 +74,15 @@
    * \return iterator to the burst list end
    */
   std::list<Ptr<Packet> >::const_iterator End (void) const;
+
+  /**
+   * TracedCallback signature for Ptr<PacketBurst>
+   *
+   * \param [in] burst The PacketBurst
+   */
+  typedef void (* TracedCallback)(const Ptr<const PacketBurst> burst);
+
+  
 private:
   void DoDispose (void);
   std::list<Ptr<Packet> > m_packets; //!< the list of packets in the burst
diff -Naur ns-3.21/src/network/utils/packet-data-calculators.cc ns-3.22/src/network/utils/packet-data-calculators.cc
--- ns-3.21/src/network/utils/packet-data-calculators.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-data-calculators.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,7 +29,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("PacketDataCalculators");
 
-
 //--------------------------------------------------------------
 //----------------------------------------------
 PacketCounterCalculator::PacketCounterCalculator()
diff -Naur ns-3.21/src/network/utils/packet-probe.cc ns-3.22/src/network/utils/packet-probe.cc
--- ns-3.21/src/network/utils/packet-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("PacketProbe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PacketProbe");
+
 NS_OBJECT_ENSURE_REGISTERED (PacketProbe);
 
 TypeId
@@ -42,10 +42,12 @@
     .AddConstructor<PacketProbe> ()
     .AddTraceSource ( "Output",
                       "The packet that serve as the output for this probe",
-                      MakeTraceSourceAccessor (&PacketProbe::m_output))
+                      MakeTraceSourceAccessor (&PacketProbe::m_output),
+                      "ns3::Packet::TracedCallback")
     .AddTraceSource ( "OutputBytes",
                       "The number of bytes in the packet",
-                      MakeTraceSourceAccessor (&PacketProbe::m_outputBytes))
+                      MakeTraceSourceAccessor (&PacketProbe::m_outputBytes),
+                      "ns3::Packet::PacketSizeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/network/utils/packet-probe.h ns-3.22/src/network/utils/packet-probe.h
--- ns-3.21/src/network/utils/packet-probe.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-probe.h	2015-02-05 15:46:22.000000000 -0800
@@ -95,8 +95,6 @@
    * arguments of type Ptr<const Packet>
    *
    * \param packet the traced packet
-   *
-   * \internal
    */
   void TraceSink (Ptr<const Packet> packet);
 
diff -Naur ns-3.21/src/network/utils/packet-socket-address.cc ns-3.22/src/network/utils/packet-socket-address.cc
--- ns-3.21/src/network/utils/packet-socket-address.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-socket-address.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "ns3/net-device.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("PacketSocketAddress");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PacketSocketAddress");
+
 PacketSocketAddress::PacketSocketAddress ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/network/utils/packet-socket.cc ns-3.22/src/network/utils/packet-socket.cc
--- ns-3.21/src/network/utils/packet-socket.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-socket.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,10 @@
 
 #include <algorithm>
 
-NS_LOG_COMPONENT_DEFINE ("PacketSocket");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PacketSocket");
+
 NS_OBJECT_ENSURE_REGISTERED (PacketSocket);
 
 TypeId
@@ -42,7 +42,8 @@
     .SetParent<Socket> ()
     .AddConstructor<PacketSocket> ()
     .AddTraceSource ("Drop", "Drop packet due to receive buffer overflow",
-                     MakeTraceSourceAccessor (&PacketSocket::m_dropTrace))
+                     MakeTraceSourceAccessor (&PacketSocket::m_dropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddAttribute ("RcvBufSize",
                    "PacketSocket maximum receive buffer size (bytes)",
                    UintegerValue (131072),
diff -Naur ns-3.21/src/network/utils/packet-socket-client.cc ns-3.22/src/network/utils/packet-socket-client.cc
--- ns-3.21/src/network/utils/packet-socket-client.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-socket-client.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,6 +36,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("PacketSocketClient");
+
 NS_OBJECT_ENSURE_REGISTERED (PacketSocketClient);
 
 TypeId
@@ -59,7 +60,8 @@
                    MakeUintegerAccessor (&PacketSocketClient::m_size),
                    MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("Tx", "A packet has been sent",
-                     MakeTraceSourceAccessor (&PacketSocketClient::m_txTrace))
+                     MakeTraceSourceAccessor (&PacketSocketClient::m_txTrace),
+                     "ns3::Packet::PacketAddressTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/network/utils/packet-socket-factory.cc ns-3.22/src/network/utils/packet-socket-factory.cc
--- ns-3.21/src/network/utils/packet-socket-factory.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-socket-factory.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/log.h"
 #include "packet-socket.h"
 
-NS_LOG_COMPONENT_DEFINE ("PacketSocketFactory");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PacketSocketFactory");
+
 NS_OBJECT_ENSURE_REGISTERED (PacketSocketFactory);
 
 TypeId 
diff -Naur ns-3.21/src/network/utils/packet-socket-server.cc ns-3.22/src/network/utils/packet-socket-server.cc
--- ns-3.21/src/network/utils/packet-socket-server.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/packet-socket-server.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,6 +36,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("PacketSocketServer");
+
 NS_OBJECT_ENSURE_REGISTERED (PacketSocketServer);
 
 TypeId
@@ -45,7 +46,8 @@
     .SetParent<Application> ()
     .AddConstructor<PacketSocketServer> ()
     .AddTraceSource ("Rx", "A packet has been received",
-                     MakeTraceSourceAccessor (&PacketSocketServer::m_rxTrace))
+                     MakeTraceSourceAccessor (&PacketSocketServer::m_rxTrace),
+                     "ns3::Packet::PacketAddressTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/network/utils/pcap-file.cc ns-3.22/src/network/utils/pcap-file.cc
--- ns-3.21/src/network/utils/pcap-file.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/pcap-file.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,10 +33,10 @@
 // adding any ns-3 specific constructs such as Packet to this file.
 //
 
-NS_LOG_COMPONENT_DEFINE ("PcapFile");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PcapFile");
+
 const uint32_t MAGIC = 0xa1b2c3d4;            /**< Magic number identifying standard pcap file format */
 const uint32_t SWAPPED_MAGIC = 0xd4c3b2a1;    /**< Looks this way if byte swapping is required */
 
diff -Naur ns-3.21/src/network/utils/pcap-file-wrapper.cc ns-3.22/src/network/utils/pcap-file-wrapper.cc
--- ns-3.21/src/network/utils/pcap-file-wrapper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/pcap-file-wrapper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/header.h"
 #include "pcap-file-wrapper.h"
 
-NS_LOG_COMPONENT_DEFINE ("PcapFileWrapper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PcapFileWrapper");
+
 NS_OBJECT_ENSURE_REGISTERED (PcapFileWrapper);
 
 TypeId 
diff -Naur ns-3.21/src/network/utils/queue.cc ns-3.22/src/network/utils/queue.cc
--- ns-3.21/src/network/utils/queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/queue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,10 +20,10 @@
 #include "ns3/trace-source-accessor.h"
 #include "queue.h"
 
-NS_LOG_COMPONENT_DEFINE ("Queue");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Queue");
+
 NS_OBJECT_ENSURE_REGISTERED (Queue);
 
 TypeId 
@@ -32,11 +32,14 @@
   static TypeId tid = TypeId ("ns3::Queue")
     .SetParent<Object> ()
     .AddTraceSource ("Enqueue", "Enqueue a packet in the queue.",
-                     MakeTraceSourceAccessor (&Queue::m_traceEnqueue))
+                     MakeTraceSourceAccessor (&Queue::m_traceEnqueue),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("Dequeue", "Dequeue a packet from the queue.",
-                     MakeTraceSourceAccessor (&Queue::m_traceDequeue))
+                     MakeTraceSourceAccessor (&Queue::m_traceDequeue),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("Drop", "Drop a packet stored in the queue.",
-                     MakeTraceSourceAccessor (&Queue::m_traceDrop))
+                     MakeTraceSourceAccessor (&Queue::m_traceDrop),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/network/utils/radiotap-header.cc ns-3.22/src/network/utils/radiotap-header.cc
--- ns-3.21/src/network/utils/radiotap-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/radiotap-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/log.h"
 #include "radiotap-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("RadiotapHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RadiotapHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (RadiotapHeader);
  
 RadiotapHeader::RadiotapHeader()
diff -Naur ns-3.21/src/network/utils/red-queue.cc ns-3.22/src/network/utils/red-queue.cc
--- ns-3.21/src/network/utils/red-queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/red-queue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -65,10 +65,10 @@
 #include "ns3/random-variable-stream.h"
 #include "red-queue.h"
 
-NS_LOG_COMPONENT_DEFINE ("RedQueue");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RedQueue");
+
 NS_OBJECT_ENSURE_REGISTERED (RedQueue);
 
 TypeId RedQueue::GetTypeId (void)
diff -Naur ns-3.21/src/network/utils/sequence-number.h ns-3.22/src/network/utils/sequence-number.h
--- ns-3.21/src/network/utils/sequence-number.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/sequence-number.h	2015-02-05 15:46:22.000000000 -0800
@@ -28,6 +28,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup network
  * \brief Generic "sequence number" class
  *
  * This class can be used to handle sequence numbers.  In networking
@@ -465,12 +466,32 @@
   return is;
 }
 
-/// 32 bit Sequence number
+/**
+ * \ingroup network
+ * 32 bit Sequence number.
+ */
 typedef SequenceNumber<uint32_t, int32_t> SequenceNumber32;
-/// 16 bit Sequence number
+/**
+ * \ingroup network
+ * 16 bit Sequence number.
+ */
 typedef SequenceNumber<uint16_t, int16_t> SequenceNumber16;
+/**
+ * \ingroup network
+ * 8 bit Sequence number.
+ */
 typedef SequenceNumber<uint8_t, int8_t> SequenceNumber8;
 
+/**
+ * \ingroup network
+ * TracedValue callback signature for SequenceNumber32
+ *
+ * \param [in] oldValue original value of the traced variable
+ * \param [in] newValue new value of the traced variable
+ */
+typedef void (* SequenceNumber32TracedValueCallback)(const SequenceNumber32 oldValue,
+                                                     const SequenceNumber32 newValue);
+
 } // namespace ns3
 
 #endif /* NS3_SEQ_NUM_H */
diff -Naur ns-3.21/src/network/utils/simple-channel.cc ns-3.22/src/network/utils/simple-channel.cc
--- ns-3.21/src/network/utils/simple-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/simple-channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/node.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("SimpleChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SimpleChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (SimpleChannel);
 
 TypeId 
diff -Naur ns-3.21/src/network/utils/simple-net-device.cc ns-3.22/src/network/utils/simple-net-device.cc
--- ns-3.21/src/network/utils/simple-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/network/utils/simple-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,19 +26,24 @@
 #include "ns3/error-model.h"
 #include "ns3/trace-source-accessor.h"
 #include "ns3/boolean.h"
+#include "ns3/string.h"
 #include "ns3/tag.h"
 #include "ns3/simulator.h"
 #include "ns3/drop-tail-queue.h"
 
-NS_LOG_COMPONENT_DEFINE ("SimpleNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SimpleNetDevice");
+
 /**
- * \brief Internal tag to store source, destination and protocol of each packet.
+ * \brief SimpleNetDevice tag to store source, destination and protocol of each packet.
  */
 class SimpleTag : public Tag {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -46,21 +51,45 @@
   virtual void Serialize (TagBuffer i) const;
   virtual void Deserialize (TagBuffer i);
 
+  /**
+   * Set the source address
+   * \param src source address
+   */
   void SetSrc (Mac48Address src);
+  /**
+   * Get the source address
+   * \return the source address
+   */
   Mac48Address GetSrc (void) const;
 
+  /**
+   * Set the destination address
+   * \param dst destination address
+   */
   void SetDst (Mac48Address dst);
+  /**
+   * Get the destination address
+   * \return the destination address
+   */
   Mac48Address GetDst (void) const;
 
+  /**
+   * Set the protocol number
+   * \param proto protocol number
+   */
   void SetProto (uint16_t proto);
+  /**
+   * Get the protocol number
+   * \return the protocol number
+   */
   uint16_t GetProto (void) const;
 
   void Print (std::ostream &os) const;
 
 private:
-  Mac48Address m_src;
-  Mac48Address m_dst;
-  uint16_t m_protocolNumber;
+  Mac48Address m_src; //!< source address
+  Mac48Address m_dst; //!< destination address
+  uint16_t m_protocolNumber; //!< protocol number
 };
 
 
@@ -171,7 +200,7 @@
                    MakeBooleanChecker ())
     .AddAttribute ("TxQueue",
                    "A queue to use as the transmit queue in the device.",
-                   PointerValue (CreateObject<DropTailQueue> ()),
+                   StringValue ("ns3::DropTailQueue"),
                    MakePointerAccessor (&SimpleNetDevice::m_queue),
                    MakePointerChecker<Queue> ())
     .AddAttribute ("DataRate",
@@ -180,8 +209,10 @@
                    MakeDataRateAccessor (&SimpleNetDevice::m_bps),
                    MakeDataRateChecker ())
     .AddTraceSource ("PhyRxDrop",
-                     "Trace source indicating a packet has been dropped by the device during reception",
-                     MakeTraceSourceAccessor (&SimpleNetDevice::m_phyRxDropTrace))
+                     "Trace source indicating a packet has been dropped "
+                     "by the device during reception",
+                     MakeTraceSourceAccessor (&SimpleNetDevice::m_phyRxDropTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py ns-3.22/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:23.000000000 -0800
@@ -1347,26 +1347,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
@@ -1849,10 +1869,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2356,7 +2376,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2407,6 +2432,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2483,6 +2513,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2517,6 +2551,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4405,11 +4441,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -5078,11 +5109,6 @@
                    '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', 
@@ -5153,6 +5179,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
@@ -5548,10 +5579,11 @@
     cls.add_constructor([param('ns3::Ipv4NixVectorRouting const &', 'arg0')])
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorRouting::Ipv4NixVectorRouting() [constructor]
     cls.add_constructor([])
-    ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): void ns3::Ipv4NixVectorRouting::FlushGlobalNixRoutingCache() [member function]
+    ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): void ns3::Ipv4NixVectorRouting::FlushGlobalNixRoutingCache() const [member function]
     cls.add_method('FlushGlobalNixRoutingCache', 
                    'void', 
-                   [])
+                   [], 
+                   is_const=True)
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): static ns3::TypeId ns3::Ipv4NixVectorRouting::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
diff -Naur ns-3.21/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py ns-3.22/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:23.000000000 -0800
@@ -1347,26 +1347,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
@@ -1849,10 +1869,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2356,7 +2376,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2407,6 +2432,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2483,6 +2513,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2517,6 +2551,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4405,11 +4441,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -5078,11 +5109,6 @@
                    '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', 
@@ -5153,6 +5179,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
@@ -5548,10 +5579,11 @@
     cls.add_constructor([param('ns3::Ipv4NixVectorRouting const &', 'arg0')])
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorRouting::Ipv4NixVectorRouting() [constructor]
     cls.add_constructor([])
-    ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): void ns3::Ipv4NixVectorRouting::FlushGlobalNixRoutingCache() [member function]
+    ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): void ns3::Ipv4NixVectorRouting::FlushGlobalNixRoutingCache() const [member function]
     cls.add_method('FlushGlobalNixRoutingCache', 
                    'void', 
-                   [])
+                   [], 
+                   is_const=True)
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): static ns3::TypeId ns3::Ipv4NixVectorRouting::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
diff -Naur ns-3.21/src/nix-vector-routing/helper/ipv4-nix-vector-helper.h ns-3.22/src/nix-vector-routing/helper/ipv4-nix-vector-helper.h
--- ns-3.21/src/nix-vector-routing/helper/ipv4-nix-vector-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/nix-vector-routing/helper/ipv4-nix-vector-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -36,7 +36,7 @@
 class Ipv4NixVectorHelper : public Ipv4RoutingHelper
 {
 public:
-  /*
+  /**
    * Construct an Ipv4NixVectorHelper to make life easier while adding Nix-vector
    * routing to nodes.
    */
@@ -49,7 +49,6 @@
   Ipv4NixVectorHelper (const Ipv4NixVectorHelper &);
 
   /**
-   * \internal
    * \returns pointer to clone of this Ipv4NixVectorHelper 
    * 
    * This method is mainly for internal use by the other helpers;
@@ -67,13 +66,12 @@
 
 private:
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    */
-  Ipv4NixVectorHelper &operator = (const Ipv4NixVectorHelper &o);
+  Ipv4NixVectorHelper &operator = (const Ipv4NixVectorHelper &);
 
-  ObjectFactory m_agentFactory;
+  ObjectFactory m_agentFactory; //!< Object factory
 };
 } // namespace ns3
 
diff -Naur ns-3.21/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc ns-3.22/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc
--- ns-3.21/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc	2015-02-05 15:46:23.000000000 -0800
@@ -28,12 +28,14 @@
 
 #include "ipv4-nix-vector-routing.h"
 
-NS_LOG_COMPONENT_DEFINE ("Ipv4NixVectorRouting");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Ipv4NixVectorRouting");
+
 NS_OBJECT_ENSURE_REGISTERED (Ipv4NixVectorRouting);
 
+bool Ipv4NixVectorRouting::g_isCacheDirty = false;
+
 TypeId 
 Ipv4NixVectorRouting::GetTypeId (void)
 {
@@ -86,7 +88,7 @@
 }
 
 void
-Ipv4NixVectorRouting::FlushGlobalNixRoutingCache ()
+Ipv4NixVectorRouting::FlushGlobalNixRoutingCache (void) const
 {
   NS_LOG_FUNCTION_NOARGS ();
   NodeList::Iterator listEnd = NodeList::End ();
@@ -105,14 +107,14 @@
 }
 
 void
-Ipv4NixVectorRouting::FlushNixCache ()
+Ipv4NixVectorRouting::FlushNixCache (void) const
 {
   NS_LOG_FUNCTION_NOARGS ();
   m_nixCache.clear ();
 }
 
 void
-Ipv4NixVectorRouting::FlushIpv4RouteCache ()
+Ipv4NixVectorRouting::FlushIpv4RouteCache (void) const
 {
   NS_LOG_FUNCTION_NOARGS ();
   m_ipv4RouteCache.clear ();
@@ -168,6 +170,8 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
 
+  CheckCacheStateAndFlush ();
+
   NixMap_t::iterator iter = m_nixCache.find (address);
   if (iter != m_nixCache.end ())
     {
@@ -184,6 +188,8 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
 
+  CheckCacheStateAndFlush ();
+
   Ipv4RouteMap_t::iterator iter = m_ipv4RouteCache.find (address);
   if (iter != m_ipv4RouteCache.end ())
     {
@@ -364,7 +370,7 @@
 }
 
 uint32_t
-Ipv4NixVectorRouting::FindTotalNeighbors ()
+Ipv4NixVectorRouting::FindTotalNeighbors (void)
 {
   uint32_t numberOfDevices = m_node->GetNDevices ();
   uint32_t totalNeighbors = 0;
@@ -488,6 +494,8 @@
   Ptr<NixVector> nixVectorInCache;
   Ptr<NixVector> nixVectorForPacket;
 
+  CheckCacheStateAndFlush ();
+
   NS_LOG_DEBUG ("Dest IP from header: " << header.GetDestination ());
   // check if cache
   nixVectorInCache = GetNixVectorInCache (header.GetDestination ());
@@ -608,6 +616,8 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
 
+  CheckCacheStateAndFlush ();
+
   Ptr<Ipv4Route> rtentry;
 
   // Get the nix-vector from the packet
@@ -663,6 +673,8 @@
 Ipv4NixVectorRouting::PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const
 {
 
+  CheckCacheStateAndFlush ();
+
   std::ostream* os = stream->GetStream ();
   *os << "NixCache:" << std::endl;
   if (m_nixCache.size () > 0)
@@ -707,22 +719,22 @@
 void
 Ipv4NixVectorRouting::NotifyInterfaceUp (uint32_t i)
 {
-  FlushGlobalNixRoutingCache ();
+  g_isCacheDirty = true;
 }
 void
 Ipv4NixVectorRouting::NotifyInterfaceDown (uint32_t i)
 {
-  FlushGlobalNixRoutingCache ();
+  g_isCacheDirty = true;
 }
 void
 Ipv4NixVectorRouting::NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address)
 {
-  FlushGlobalNixRoutingCache ();
+  g_isCacheDirty = true;
 }
 void
 Ipv4NixVectorRouting::NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address)
 {
-  FlushGlobalNixRoutingCache ();
+  g_isCacheDirty = true;
 }
 
 bool
@@ -873,4 +885,14 @@
   return false;
 }
 
+void 
+Ipv4NixVectorRouting::CheckCacheStateAndFlush (void) const
+{
+  if (g_isCacheDirty)
+    {
+      FlushGlobalNixRoutingCache ();
+      g_isCacheDirty = false;
+    }
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/nix-vector-routing/model/ipv4-nix-vector-routing.h ns-3.22/src/nix-vector-routing/model/ipv4-nix-vector-routing.h
--- ns-3.21/src/nix-vector-routing/model/ipv4-nix-vector-routing.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/nix-vector-routing/model/ipv4-nix-vector-routing.h	2015-02-05 15:46:23.000000000 -0800
@@ -73,17 +73,22 @@
    * which iterates through the node list and flushes any
    * nix vector caches
    *
+   * \internal
+   * \c const is used here due to need to potentially flush the cache
+   * in const methods such as PrintRoutingTable.  Caches are stored in
+   * mutable variables and flushed in const methods.
    */
-  void FlushGlobalNixRoutingCache (void);
+  void FlushGlobalNixRoutingCache (void) const;
 
 private:
+
   /* flushes the cache which stores nix-vector based on
    * destination IP */
-  void FlushNixCache (void);
+  void FlushNixCache (void) const;
 
   /* flushes the cache which stores the Ipv4 route
    * based on the destination IP */
-  void FlushIpv4RouteCache (void);
+  void FlushIpv4RouteCache (void) const;
 
   /* upon a run-time topology change caches are
    * flushed and the total number of neighbors is
@@ -155,17 +160,27 @@
   virtual void SetIpv4 (Ptr<Ipv4> ipv4);
   virtual void PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const;
 
+  /* 
+   * Flushes routing caches if required.
+   */
+  void CheckCacheStateAndFlush (void) const;
+
+  /* 
+   * Flag to mark when caches are dirty and need to be flushed.  
+   * Used for lazy cleanup of caches when there are many topology changes.
+   */
+  static bool g_isCacheDirty;
 
-  /* cache stores nix-vectors based on destination ip */
-  NixMap_t m_nixCache;
+  /* Cache stores nix-vectors based on destination ip */
+  mutable NixMap_t m_nixCache;
 
-  /* cache stores Ipv4Routes based on destination ip */
-  Ipv4RouteMap_t m_ipv4RouteCache;
+  /* Cache stores Ipv4Routes based on destination ip */
+  mutable Ipv4RouteMap_t m_ipv4RouteCache;
 
   Ptr<Ipv4> m_ipv4;
   Ptr<Node> m_node;
 
-  /* total neighbors used for nix-vector to determine
+  /* Total neighbors used for nix-vector to determine
    * number of bits */
   uint32_t m_totalNeighbors;
 };
diff -Naur ns-3.21/src/olsr/bindings/modulegen__gcc_ILP32.py ns-3.22/src/olsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/olsr/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:23.000000000 -0800
@@ -456,6 +456,9 @@
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >', u'ns3::olsr::MprSelectorSet')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >*', u'ns3::olsr::MprSelectorSet*')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >&', u'ns3::olsr::MprSelectorSet&')
+    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >', u'ns3::olsr::TopologySet')
+    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >*', u'ns3::olsr::TopologySet*')
+    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >&', u'ns3::olsr::TopologySet&')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >', u'ns3::olsr::NeighborSet')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >*', u'ns3::olsr::NeighborSet*')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >&', u'ns3::olsr::NeighborSet&')
@@ -480,9 +483,6 @@
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::TwoHopNeighborTuple, std::allocator< ns3::olsr::TwoHopNeighborTuple > >', u'ns3::olsr::TwoHopNeighborSet')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::TwoHopNeighborTuple, std::allocator< ns3::olsr::TwoHopNeighborTuple > >*', u'ns3::olsr::TwoHopNeighborSet*')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::TwoHopNeighborTuple, std::allocator< ns3::olsr::TwoHopNeighborTuple > >&', u'ns3::olsr::TwoHopNeighborSet&')
-    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >', u'ns3::olsr::TopologySet')
-    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >*', u'ns3::olsr::TopologySet*')
-    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >&', u'ns3::olsr::TopologySet&')
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
@@ -1596,26 +1596,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
@@ -1949,10 +1969,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2599,7 +2619,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2650,6 +2675,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2726,6 +2756,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2760,6 +2794,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5087,11 +5123,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -5929,11 +5960,6 @@
                    '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', 
@@ -6004,6 +6030,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/olsr/bindings/modulegen__gcc_LP64.py ns-3.22/src/olsr/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/olsr/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:23.000000000 -0800
@@ -456,6 +456,9 @@
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >', u'ns3::olsr::MprSelectorSet')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >*', u'ns3::olsr::MprSelectorSet*')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >&', u'ns3::olsr::MprSelectorSet&')
+    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >', u'ns3::olsr::TopologySet')
+    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >*', u'ns3::olsr::TopologySet*')
+    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >&', u'ns3::olsr::TopologySet&')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >', u'ns3::olsr::NeighborSet')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >*', u'ns3::olsr::NeighborSet*')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >&', u'ns3::olsr::NeighborSet&')
@@ -480,9 +483,6 @@
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::TwoHopNeighborTuple, std::allocator< ns3::olsr::TwoHopNeighborTuple > >', u'ns3::olsr::TwoHopNeighborSet')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::TwoHopNeighborTuple, std::allocator< ns3::olsr::TwoHopNeighborTuple > >*', u'ns3::olsr::TwoHopNeighborSet*')
     typehandlers.add_type_alias(u'std::vector< ns3::olsr::TwoHopNeighborTuple, std::allocator< ns3::olsr::TwoHopNeighborTuple > >&', u'ns3::olsr::TwoHopNeighborSet&')
-    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >', u'ns3::olsr::TopologySet')
-    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >*', u'ns3::olsr::TopologySet*')
-    typehandlers.add_type_alias(u'std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >&', u'ns3::olsr::TopologySet&')
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
@@ -1596,26 +1596,46 @@
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAllEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheAt', 
+                   'void', 
+                   [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintNeighborCacheEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('PrintNeighborCacheEvery', 
+                   'void', 
+                   [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllAt(ns3::Time printTime, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAllEvery(ns3::Time printInterval, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAllEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableAt(ns3::Time printTime, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableAt', 
                    'void', 
                    [param('ns3::Time', 'printTime'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
-    ## ipv4-routing-helper.h (module 'internet'): void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+                   is_static=True)
+    ## ipv4-routing-helper.h (module 'internet'): static void ns3::Ipv4RoutingHelper::PrintRoutingTableEvery(ns3::Time printInterval, ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
     cls.add_method('PrintRoutingTableEvery', 
                    'void', 
                    [param('ns3::Time', 'printInterval'), param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')], 
-                   is_const=True)
+                   is_static=True)
     return
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
@@ -1949,10 +1969,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2599,7 +2619,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2650,6 +2675,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2726,6 +2756,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2760,6 +2794,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5087,11 +5123,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -5929,11 +5960,6 @@
                    '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', 
@@ -6004,6 +6030,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/olsr/examples/olsr-hna.cc ns-3.22/src/olsr/examples/olsr-hna.cc
--- ns-3.21/src/olsr/examples/olsr-hna.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/examples/olsr-hna.cc	2015-02-05 15:46:23.000000000 -0800
@@ -65,10 +65,10 @@
 #include <vector>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("OlsrHna");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("OlsrHna");
+
 void ReceivePacket (Ptr<Socket> socket)
 {
   NS_LOG_UNCOND ("Received one packet!");
diff -Naur ns-3.21/src/olsr/helper/olsr-helper.h ns-3.22/src/olsr/helper/olsr-helper.h
--- ns-3.21/src/olsr/helper/olsr-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/helper/olsr-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -51,7 +51,6 @@
   OlsrHelper (const OlsrHelper &);
 
   /**
-   * \internal
    * \returns pointer to clone of this OlsrHelper 
    * 
    * This method is mainly for internal use by the other helpers;
@@ -98,14 +97,13 @@
 
 private:
   /**
-   * \internal
    * \brief Assignment operator declared private and not implemented to disallow
    * assignment and prevent the compiler from happily inserting its own.
    */
-  OlsrHelper &operator = (const OlsrHelper &o);
-  ObjectFactory m_agentFactory;
+  OlsrHelper &operator = (const OlsrHelper &);
+  ObjectFactory m_agentFactory; //!< Object factory
 
-  std::map< Ptr<Node>, std::set<uint32_t> > m_interfaceExclusions;
+  std::map< Ptr<Node>, std::set<uint32_t> > m_interfaceExclusions; //!< container of interfaces excluded from OLSR operations
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/olsr/model/olsr-header.cc ns-3.22/src/olsr/model/olsr-header.cc
--- ns-3.21/src/olsr/model/olsr-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/model/olsr-header.cc	2015-02-05 15:46:23.000000000 -0800
@@ -30,10 +30,11 @@
 #define OLSR_PKT_HEADER_SIZE 4
 
 namespace ns3 {
-namespace olsr {
+  
+NS_LOG_COMPONENT_DEFINE ("OlsrHeader");
 
+namespace olsr {
 
-NS_LOG_COMPONENT_DEFINE ("OlsrHeader");
 
 /// Scaling factor used in RFC 3626.
 #define OLSR_C 0.0625
diff -Naur ns-3.21/src/olsr/model/olsr-routing-protocol.cc ns-3.22/src/olsr/model/olsr-routing-protocol.cc
--- ns-3.21/src/olsr/model/olsr-routing-protocol.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/model/olsr-routing-protocol.cc	2015-02-05 15:46:23.000000000 -0800
@@ -139,10 +139,10 @@
 
 
 namespace ns3 {
-namespace olsr {
 
 NS_LOG_COMPONENT_DEFINE ("OlsrRoutingProtocol");
-
+  
+namespace olsr {
 
 /********** OLSR class **********/
 
@@ -179,11 +179,14 @@
                                     OLSR_WILL_HIGH, "high",
                                     OLSR_WILL_ALWAYS, "always"))
     .AddTraceSource ("Rx", "Receive OLSR packet.",
-                     MakeTraceSourceAccessor (&RoutingProtocol::m_rxPacketTrace))
+                     MakeTraceSourceAccessor (&RoutingProtocol::m_rxPacketTrace),
+                     "ns3::olsr::RoutingProtocol::PacketTxRxTracedCallback")
     .AddTraceSource ("Tx", "Send OLSR packet.",
-                     MakeTraceSourceAccessor (&RoutingProtocol::m_txPacketTrace))
+                     MakeTraceSourceAccessor (&RoutingProtocol::m_txPacketTrace),
+                     "ns3::olsr::RoutingProtocol::PacketTxRxTracedCallback")
     .AddTraceSource ("RoutingTableChanged", "The OLSR routing table has changed.",
-                     MakeTraceSourceAccessor (&RoutingProtocol::m_routingTableChanged))
+                     MakeTraceSourceAccessor (&RoutingProtocol::m_routingTableChanged),
+                     "ns3::olsr::RoutingProtocol::TableChangeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/olsr/model/olsr-routing-protocol.h ns-3.22/src/olsr/model/olsr-routing-protocol.h
--- ns-3.21/src/olsr/model/olsr-routing-protocol.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/model/olsr-routing-protocol.h	2015-02-05 15:46:23.000000000 -0800
@@ -112,6 +112,22 @@
   */
   int64_t AssignStreams (int64_t stream);
 
+  /**
+   * TracedCallback signature for Packet transmit and receive events.
+   *
+   * \param [in] header
+   * \param [in] messages
+   */
+  typedef void (* PacketTxRxTracedCallback)
+    (const PacketHeader & header, const MessageList & messages);
+
+  /**
+   * TracedCallback signature for routing table computation.
+   *
+   * \param [in] size Final routing table size.
+   */
+  typedef void (* TableChangeTracedCallback) (const uint32_t size);
+
 private:
   std::set<uint32_t> m_interfaceExclusions;
   Ptr<Ipv4StaticRouting> m_routingTableAssociation;
diff -Naur ns-3.21/src/olsr/test/bug780-0-0.pcap ns-3.22/src/olsr/test/bug780-0-0.pcap
--- ns-3.21/src/olsr/test/bug780-0-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/test/bug780-0-0.pcap	2015-02-05 15:46:23.000000000 -0800
@@ -1506,9 +1506,9 @@
       Z                                                                       Ԁ              m
   x   x   :               P    E  T Z  ?  
 
-      Z                                                                       Ԁ              J  x   x   :               `    E  T V  ?  
+      Z                                                                       Ԁ              K  x   x   :               `    E  T V  ?  
 
-       Z                                                               T        Ԁ              Tr  \   \               P
+       Z                                                               U        Ԁ              Tr  \   \               P
     E  8 F  @  
 
  $    F 
diff -Naur ns-3.21/src/olsr/test/bug780-2-0.pcap ns-3.22/src/olsr/test/bug780-2-0.pcap
--- ns-3.21/src/olsr/test/bug780-2-0.pcap	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/olsr/test/bug780-2-0.pcap	2015-02-05 15:46:23.000000000 -0800
@@ -695,7 +695,7 @@
       '                                                            Y           Ԁ           Y   m
   x   x   :                   E  T '  @  
 
-       '                                                            Y           Ԁ           Z     x   x   :               p    E  T (  @  
+       '                                                            Y           Ԁ           Z     x   x   :               p    E  T (  @  
 
       (                                                            Z           Ԁ           Z   l
   x   x   :                   E  T (  @  
@@ -893,7 +893,7 @@
   
     i     x   x   :                   E  T 7  @  
 
-      7                                                            i           Ԁ           i   l
+      7                                                            i           Ԁ           i   m
   x   x   :               `    E  T 7  @  
 
        7                                                            i           Ԁ           j     x   x   :                   E  T 8  @  
@@ -1021,7 +1021,7 @@
       A                                                            s           Ԁ           s   m
   x   x   :               P    E  T A  @  
 
-       A                                                            s           Ԁ           t     x   x   :                   E  T B  @  
+       A                                                            s           Ԁ           t     x   x   :                   E  T B  @  
 
       B                                                            t           Ԁ           t   m
   x   x   :               `    E  T B  @  
diff -Naur ns-3.21/src/openflow/helper/openflow-switch-helper.cc ns-3.22/src/openflow/helper/openflow-switch-helper.cc
--- ns-3.21/src/openflow/helper/openflow-switch-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/openflow/helper/openflow-switch-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/node.h"
 #include "ns3/names.h"
 
-NS_LOG_COMPONENT_DEFINE ("OpenFlowSwitchHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("OpenFlowSwitchHelper");
+
 OpenFlowSwitchHelper::OpenFlowSwitchHelper ()
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.21/src/openflow/helper/openflow-switch-helper.h ns-3.22/src/openflow/helper/openflow-switch-helper.h
--- ns-3.21/src/openflow/helper/openflow-switch-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/openflow/helper/openflow-switch-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -94,7 +94,7 @@
   Install (std::string nodeName, NetDeviceContainer c);
 
 private:
-  ObjectFactory m_deviceFactory;
+  ObjectFactory m_deviceFactory; //!< Object factory
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/openflow/model/openflow-interface.cc ns-3.22/src/openflow/model/openflow-interface.cc
--- ns-3.21/src/openflow/model/openflow-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/openflow/model/openflow-interface.cc	2015-02-05 15:46:23.000000000 -0800
@@ -22,10 +22,10 @@
 
 namespace ns3 {
 
-namespace ofi {
-
 NS_LOG_COMPONENT_DEFINE ("OpenFlowInterface");
 
+namespace ofi {
+
 Stats::Stats (ofp_stats_types _type, size_t body_len)
 {
   type = _type;
diff -Naur ns-3.21/src/openflow/model/openflow-interface.h ns-3.22/src/openflow/model/openflow-interface.h
--- ns-3.21/src/openflow/model/openflow-interface.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/openflow/model/openflow-interface.h	2015-02-05 15:46:23.000000000 -0800
@@ -398,8 +398,6 @@
 
 protected:
   /**
-   * \internal
-   *
    * However the controller is implemented, this method is to
    * be used to pass a message on to a switch.
    *
@@ -410,8 +408,6 @@
   virtual void SendToSwitch (Ptr<OpenFlowSwitchNetDevice> swtch, void * msg, size_t length);
 
   /**
-   * \internal
-   *
    * Construct flow data from a matching key to build a flow
    * entry for adding, modifying, or deleting a flow.
    *
@@ -427,8 +423,6 @@
   ofp_flow_mod* BuildFlow (sw_flow_key key, uint32_t buffer_id, uint16_t command, void* acts, size_t actions_len, int idle_timeout, int hard_timeout);
 
   /**
-   * \internal
-   *
    * Get the packet type on the buffer, which can then be used
    * to determine how to handle the buffer.
    *
diff -Naur ns-3.21/src/openflow/model/openflow-switch-net-device.cc ns-3.22/src/openflow/model/openflow-switch-net-device.cc
--- ns-3.21/src/openflow/model/openflow-switch-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/openflow/model/openflow-switch-net-device.cc	2015-02-05 15:46:23.000000000 -0800
@@ -21,10 +21,10 @@
 #include "ns3/udp-l4-protocol.h"
 #include "ns3/tcp-l4-protocol.h"
 
-NS_LOG_COMPONENT_DEFINE ("OpenFlowSwitchNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("OpenFlowSwitchNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (OpenFlowSwitchNetDevice);
 
 const char *
diff -Naur ns-3.21/src/openflow/model/openflow-switch-net-device.h ns-3.22/src/openflow/model/openflow-switch-net-device.h
--- ns-3.21/src/openflow/model/openflow-switch-net-device.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/openflow/model/openflow-switch-net-device.h	2015-02-05 15:46:23.000000000 -0800
@@ -89,20 +89,24 @@
   static TypeId GetTypeId (void);
 
   /**
-   * \name OpenFlowSwitchNetDevice Description Data
-   * \brief These four data describe the OpenFlowSwitchNetDevice as if it were a real OpenFlow switch.
+   * \name Descriptive Data
+   * \brief OpenFlowSwitchNetDevice Description Data
+   *
+   * These four data describe the OpenFlowSwitchNetDevice as if it were
+   * a real OpenFlow switch.
    *
    * There is a type of stats request that OpenFlow switches are supposed
    * to handle that returns the description of the OpenFlow switch. Currently
    * manufactured by "The ns-3 team", software description is "Simulated
    * OpenFlow Switch", and the other two are "N/A".
+   * @{
    */
-  //\{
+  /** \returns The descriptive string. */
   static const char * GetManufacturerDescription ();
   static const char * GetHardwareDescription ();
   static const char * GetSoftwareDescription ();
   static const char * GetSerialNumber ();
-  //\}
+  /**@}*/
 
   OpenFlowSwitchNetDevice ();
   virtual ~OpenFlowSwitchNetDevice ();
@@ -121,7 +125,7 @@
    * the new switch port NetDevice becomes part of the switch and L2
    * frames start being forwarded to/from this NetDevice.
    *
-   * \attention The netdevice that is being added as switch port must
+   * \note The netdevice that is being added as switch port must
    * _not_ have an IP address.  In order to add IP connectivity to a
    * bridging node you must enable IP on the OpenFlowSwitchNetDevice itself,
    * never on its port netdevices.
@@ -213,8 +217,7 @@
    */
   vport_table_t GetVPortTable ();
 
-  ///\name From NetDevice
-  //\{
+  // From NetDevice
   virtual void SetIfIndex (const uint32_t index);
   virtual uint32_t GetIfIndex (void) const;
   virtual Ptr<Channel> GetChannel (void) const;
@@ -239,14 +242,11 @@
   virtual void SetPromiscReceiveCallback (NetDevice::PromiscReceiveCallback cb);
   virtual bool SupportsSendFrom () const;
   virtual Address GetMulticast (Ipv6Address addr) const;
-  //\}
 
 protected:
   virtual void DoDispose (void);
 
   /**
-   * \internal
-   * 
    * Called when a packet is received on one of the switch's ports.
    *
    * \param netdev The port the packet was received on.
@@ -259,8 +259,6 @@
   void ReceiveFromDevice (Ptr<NetDevice> netdev, Ptr<const Packet> packet, uint16_t protocol, const Address& src, const Address& dst, PacketType packetType);
 
   /**
-   * \internal
-   *
    * Takes a packet and generates an OpenFlow buffer from it, loading the packet data as well as its headers.
    *
    * \param packet The packet.
@@ -274,8 +272,6 @@
 
 private:
   /**
-   * \internal
-   *
    * Add a flow.
    *
    * \sa #ENOMEM, #ENOBUFS, #ESRCH
@@ -286,8 +282,6 @@
   int AddFlow (const ofp_flow_mod *ofm);
 
   /**
-   * \internal
-   *
    * Modify a flow.
    *
    * \param ofm The flow data to modify.
@@ -296,8 +290,6 @@
   int ModFlow (const ofp_flow_mod *ofm);
 
   /**
-   * \internal
-   * 
    * Send packets out all the ports except the originating one
    *
    * \param packet_uid Packet UID; used to fetch the packet and its metadata.
@@ -308,8 +300,6 @@
   int OutputAll (uint32_t packet_uid, int in_port, bool flood);
 
   /**
-   * \internal
-   * 
    * Sends a copy of the Packet over the provided output port
    *
    * \param packet_uid Packet UID; used to fetch the packet and its metadata.
@@ -317,8 +307,6 @@
   void OutputPacket (uint32_t packet_uid, int out_port);
 
   /**
-   * \internal
-   *
    * Seeks to send out a Packet over the provided output port. This is called generically
    * when we may or may not know the specific port we're outputting on. There are many
    * pre-set types of port options besides a Port that's hooked to our OpenFlowSwitchNetDevice.
@@ -332,8 +320,6 @@
   void OutputPort (uint32_t packet_uid, int in_port, int out_port, bool ignore_no_fwd);
 
   /**
-   * \internal 
-   * 
    * Sends a copy of the Packet to the controller. If the packet can be saved
    * in an OpenFlow buffer, then only the first 'max_len' bytes of the packet
    * are sent; otherwise, all of the packet is sent.
@@ -346,8 +332,6 @@
   void OutputControl (uint32_t packet_uid, int in_port, size_t max_len, int reason);
 
   /**
-   * \internal
-   * 
    * If an error message happened during the controller's request, send it to the controller.
    *
    * \param type The type of error.
@@ -358,8 +342,6 @@
   void SendErrorMsg (uint16_t type, uint16_t code, const void *data, size_t len);
 
   /**
-   * \internal
-   * 
    * Send a reply about this OpenFlow switch's features to the controller.
    *
    * List of capabilities and actions to support are found in the specification
@@ -383,8 +365,6 @@
   void SendFeaturesReply ();
 
   /**
-   * \internal
-   *
    * Send a reply to the controller that a specific flow has expired.
    *
    * \param flow The flow that expired.
@@ -393,8 +373,6 @@
   void SendFlowExpired (sw_flow *flow, enum ofp_flow_expired_reason reason);
 
   /**
-   * \internal
-   *
    * Send a reply about a Port's status to the controller.
    *
    * \param p The port to get status from.
@@ -403,15 +381,11 @@
   void SendPortStatus (ofi::Port p, uint8_t status);
 
   /**
-   * \internal
-   *
    * Send a reply about this OpenFlow switch's virtual port table features to the controller.
    */
   void SendVPortTableFeatures ();
 
   /**
-   * \internal
-   *
    * Send a message to the controller. This method is the key
    * to communicating with the controller, it does the actual
    * sending. The other Send methods call this one when they
@@ -423,8 +397,6 @@
   int SendOpenflowBuffer (ofpbuf *buffer);
 
   /**
-   * \internal
-   *
    * Run the packet through the flow table. Looks up in the flow table for a match.
    * If it doesn't match, it forwards the packet to the registered controller, if the flag is set.
    *
@@ -435,8 +407,6 @@
   void RunThroughFlowTable (uint32_t packet_uid, int port, bool send_to_controller = true);
 
   /**
-   * \internal
-   *
    * Run the packet through the vport table. As with AddVPort,
    * this doesn't have an understood use yet.
    *
@@ -448,8 +418,6 @@
   int RunThroughVPortTable (uint32_t packet_uid, int port, uint32_t vport);
 
   /**
-   * \internal
-   *
    * Called by RunThroughFlowTable on a scheduled delay
    * to account for the flow table lookup overhead.
    *
@@ -462,8 +430,6 @@
   void FlowTableLookup (sw_flow_key key, ofpbuf* buffer, uint32_t packet_uid, int port, bool send_to_controller);
 
   /**
-   * \internal
-   *
    * Update the port status field of the switch port.
    * A non-zero return value indicates some field has changed.
    *
@@ -473,8 +439,6 @@
   int UpdatePortStatus (ofi::Port& p);
 
   /**
-   * \internal
-   *
    * Fill out a description of the switch port.
    *
    * \param p The port to get the description from.
@@ -483,8 +447,6 @@
   void FillPortDesc (ofi::Port p, ofp_phy_port *desc);
 
   /**
-   * \internal
-   *
    * Generates an OpenFlow reply message based on the type.
    *
    * \param openflow_len Length of the reply to make.
@@ -495,15 +457,16 @@
   void* MakeOpenflowReply (size_t openflow_len, uint8_t type, ofpbuf **bufferp);
 
   /**
-   * \internal
    * \name Receive Methods
    *
    * Actions to do when a specific OpenFlow message/packet is received
    *
+   * @{
+   */
+  /**
    * \param msg The OpenFlow message received.
    * \return 0 if everything's ok, otherwise an error number.
    */
-  //\{
   int ReceiveFeaturesRequest (const void *msg);
   int ReceiveGetConfigRequest (const void *msg);
   int ReceiveSetConfig (const void *msg);
@@ -515,7 +478,7 @@
   int ReceiveEchoReply (const void *oh);
   int ReceiveVPortMod (const void *msg);
   int ReceiveVPortTableFeaturesRequest (const void *msg);
-  //\}
+  /**@}*/
 
   /// Callbacks
   NetDevice::ReceiveCallback m_rxCallback;
diff -Naur ns-3.21/src/point-to-point/bindings/modulegen__gcc_ILP32.py ns-3.22/src/point-to-point/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:23.000000000 -0800
@@ -1802,10 +1802,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2185,10 +2185,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2501,7 +2501,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2552,6 +2557,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2628,6 +2638,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2662,6 +2676,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4961,11 +4977,6 @@
                    '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', 
@@ -5036,6 +5047,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/point-to-point/bindings/modulegen__gcc_LP64.py ns-3.22/src/point-to-point/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/point-to-point/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:23.000000000 -0800
@@ -1802,10 +1802,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2185,10 +2185,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2501,7 +2501,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2552,6 +2557,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2628,6 +2638,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2662,6 +2676,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4961,11 +4977,6 @@
                    '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', 
@@ -5036,6 +5047,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/point-to-point/helper/point-to-point-helper.cc ns-3.22/src/point-to-point/helper/point-to-point-helper.cc
--- ns-3.21/src/point-to-point/helper/point-to-point-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/helper/point-to-point-helper.cc	2015-02-05 15:46:23.000000000 -0800
@@ -34,10 +34,10 @@
 #include "ns3/trace-helper.h"
 #include "point-to-point-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("PointToPointHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PointToPointHelper");
+
 PointToPointHelper::PointToPointHelper ()
 {
   m_queueFactory.SetTypeId ("ns3::DropTailQueue");
diff -Naur ns-3.21/src/point-to-point/helper/point-to-point-helper.h ns-3.22/src/point-to-point/helper/point-to-point-helper.h
--- ns-3.21/src/point-to-point/helper/point-to-point-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/helper/point-to-point-helper.h	2015-02-05 15:46:23.000000000 -0800
@@ -25,7 +25,6 @@
 #include "ns3/object-factory.h"
 #include "ns3/net-device-container.h"
 #include "ns3/node-container.h"
-#include "ns3/deprecated.h"
 
 #include "ns3/trace-helper.h"
 
@@ -42,7 +41,8 @@
  * PcapUserHelperForDevice and AsciiTraceUserHelperForDevice are
  * "mixins".
  */
-class PointToPointHelper : public PcapHelperForDevice, public AsciiTraceHelperForDevice
+class PointToPointHelper : public PcapHelperForDevice,
+	                   public AsciiTraceHelperForDevice
 {
 public:
   /**
@@ -102,6 +102,7 @@
 
   /**
    * \param c a set of nodes
+   * \return a NetDeviceContainer for nodes
    *
    * This method creates a ns3::PointToPointChannel with the
    * attributes configured by PointToPointHelper::SetChannelAttribute,
@@ -115,6 +116,7 @@
   /**
    * \param a first node
    * \param b second node
+   * \return a NetDeviceContainer for nodes
    *
    * Saves you from having to construct a temporary NodeContainer. 
    * Also, if MPI is enabled, for distributed simulations, 
@@ -125,6 +127,7 @@
   /**
    * \param a first node
    * \param bName name of second node
+   * \return a NetDeviceContainer for nodes
    *
    * Saves you from having to construct a temporary NodeContainer.
    */
@@ -133,6 +136,7 @@
   /**
    * \param aName Name of first node
    * \param b second node
+   * \return a NetDeviceContainer for nodes
    *
    * Saves you from having to construct a temporary NodeContainer.
    */
@@ -141,6 +145,7 @@
   /**
    * \param aNode Name of first node
    * \param bNode Name of second node
+   * \return a NetDeviceContainer for nodes
    *
    * Saves you from having to construct a temporary NodeContainer.
    */
@@ -162,7 +167,6 @@
 
   /**
    * \brief Enable ascii trace output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
@@ -178,10 +182,10 @@
     Ptr<NetDevice> nd,
     bool explicitFilename);
 
-  ObjectFactory m_queueFactory;
-  ObjectFactory m_channelFactory;
-  ObjectFactory m_remoteChannelFactory;
-  ObjectFactory m_deviceFactory;
+  ObjectFactory m_queueFactory;         //!< Queue Factory
+  ObjectFactory m_channelFactory;       //!< Channel Factory
+  ObjectFactory m_remoteChannelFactory; //!< Remote Channel Factory
+  ObjectFactory m_deviceFactory;        //!< Device Factory
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/point-to-point/model/point-to-point-channel.cc ns-3.22/src/point-to-point/model/point-to-point-channel.cc
--- ns-3.21/src/point-to-point/model/point-to-point-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/model/point-to-point-channel.cc	2015-02-05 15:46:23.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/simulator.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("PointToPointChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PointToPointChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (PointToPointChannel);
 
 TypeId 
@@ -40,8 +40,11 @@
                    MakeTimeAccessor (&PointToPointChannel::m_delay),
                    MakeTimeChecker ())
     .AddTraceSource ("TxRxPointToPoint",
-                     "Trace source indicating transmission of packet from the PointToPointChannel, used by the Animation interface.",
-                     MakeTraceSourceAccessor (&PointToPointChannel::m_txrxPointToPoint))
+                     "Trace source indicating transmission of packet "
+                     "from the PointToPointChannel, used by the Animation "
+                     "interface.",
+                     MakeTraceSourceAccessor (&PointToPointChannel::m_txrxPointToPoint),
+                     "ns3::PointToPointChannel::TxRxAnimationCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/point-to-point/model/point-to-point-channel.h ns-3.22/src/point-to-point/model/point-to-point-channel.h
--- ns-3.21/src/point-to-point/model/point-to-point-channel.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/model/point-to-point-channel.h	2015-02-05 15:46:23.000000000 -0800
@@ -43,17 +43,25 @@
  * There are two "wires" in the channel.  The first device connected gets the
  * [0] wire to transmit on.  The second device gets the [1] wire.  There is a
  * state (IDLE, TRANSMITTING) associated with each wire.
+ *
+ * \see Attach
+ * \see TransmitStart
  */
 class PointToPointChannel : public Channel 
 {
 public:
+  /**
+   * \brief Get the TypeId
+   *
+   * \return The TypeId for this class
+   */
   static TypeId GetTypeId (void);
 
   /**
    * \brief Create a PointToPointChannel
    *
-   * By default, you get a channel that
-   * has zero transmission delay.
+   * By default, you get a channel that has an "infinitely" fast 
+   * transmission speed and zero delay.
    */
   PointToPointChannel ();
 
@@ -78,14 +86,14 @@
    */
   virtual uint32_t GetNDevices (void) const;
 
-  /*
+  /**
    * \brief Get PointToPointNetDevice corresponding to index i on this channel
    * \param i Index number of the device requested
    * \returns Ptr to PointToPointNetDevice requested
    */
   Ptr<PointToPointNetDevice> GetPointToPointDevice (uint32_t i) const;
 
-  /*
+  /**
    * \brief Get NetDevice corresponding to index i on this channel
    * \param i Index number of the device requested
    * \returns Ptr to NetDevice requested
@@ -93,19 +101,19 @@
   virtual Ptr<NetDevice> GetDevice (uint32_t i) const;
 
 protected:
-  /*
+  /**
    * \brief Get the delay associated with this channel
    * \returns Time delay
    */
   Time GetDelay (void) const;
 
-  /*
+  /**
    * \brief Check to make sure the link is initialized
    * \returns true if initialized, asserts otherwise
    */
   bool IsInitialized (void) const;
 
-  /*
+  /**
    * \brief Get the net-device source 
    * \param i the link requested
    * \returns Ptr to PointToPointNetDevice source for the 
@@ -113,7 +121,7 @@
    */
   Ptr<PointToPointNetDevice> GetSource (uint32_t i) const;
 
-  /*
+  /**
    * \brief Get the net-device destination
    * \param i the link requested
    * \returns Ptr to PointToPointNetDevice destination for 
@@ -121,12 +129,26 @@
    */
   Ptr<PointToPointNetDevice> GetDestination (uint32_t i) const;
 
+  /**
+   * TracedCallback signature for packet transmission animation events.
+   *
+   * \param [in] packet The packet being transmitted.
+   * \param [in] txDevice the TransmitTing NetDevice.
+   * \param [in] rxDevice the Receiving NetDevice.
+   * \param [in] duration The amount of time to transmit the packet.
+   * \param [in] lastBitTime Last bit receive time (relative to now)
+   */
+  typedef void (* TxRxAnimationCallback)
+    (const Ptr<const Packet> packet,
+     const Ptr<const NetDevice> txDevice, const Ptr<const NetDevice> rxDevice,
+     const Time duration, const Time lastBitTime);
+                    
 private:
-  // Each point to point link has exactly two net devices
+  /** Each point to point link has exactly two net devices. */
   static const int N_DEVICES = 2;
 
-  Time          m_delay;
-  int32_t       m_nDevices;
+  Time          m_delay;    //!< Propagation delay
+  int32_t       m_nDevices; //!< Devices of this channel
 
   /**
    * The trace source for the packet transmission animation events that the 
@@ -135,7 +157,7 @@
    * net device, receiving net device, transmission time and 
    * packet receipt time.
    *
-   * @see class CallBackTraceSource
+   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet>, // Packet being transmitted
                  Ptr<NetDevice>,    // Transmitting NetDevice
@@ -144,24 +166,38 @@
                  Time               // Last bit receive time (relative to now)
                  > m_txrxPointToPoint;
 
+  /** \brief Wire states
+   *
+   */
   enum WireState
   {
+    /** Initializing state */
     INITIALIZING,
+    /** Idle state (no transmission from NetDevice) */
     IDLE,
+    /** Transmitting state (data being transmitted from NetDevice. */
     TRANSMITTING,
+    /** Propagating state (data is being propagated in the channel. */
     PROPAGATING
   };
 
+  /**
+   * \brief Wire model for the PointToPointChannel
+   */
   class Link
   {
 public:
+    /** \brief Create the link, it will be in INITIALIZING state
+     *
+     */
     Link() : m_state (INITIALIZING), m_src (0), m_dst (0) {}
-    WireState                  m_state;
-    Ptr<PointToPointNetDevice> m_src;
-    Ptr<PointToPointNetDevice> m_dst;
+
+    WireState                  m_state; //!< State of the link
+    Ptr<PointToPointNetDevice> m_src;   //!< First NetDevice
+    Ptr<PointToPointNetDevice> m_dst;   //!< Second NetDevice
   };
 
-  Link    m_link[N_DEVICES];
+  Link    m_link[N_DEVICES]; //!< Link model
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/point-to-point/model/point-to-point-net-device.cc ns-3.22/src/point-to-point/model/point-to-point-net-device.cc
--- ns-3.21/src/point-to-point/model/point-to-point-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/model/point-to-point-net-device.cc	2015-02-05 15:46:23.000000000 -0800
@@ -29,10 +29,10 @@
 #include "point-to-point-channel.h"
 #include "ppp-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("PointToPointNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PointToPointNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (PointToPointNetDevice);
 
 TypeId 
@@ -82,50 +82,74 @@
     // to/from higher layers.
     //
     .AddTraceSource ("MacTx", 
-                     "Trace source indicating a packet has arrived for transmission by this device",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macTxTrace))
+                     "Trace source indicating a packet has arrived "
+                     "for transmission by this device",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macTxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTxDrop", 
-                     "Trace source indicating a packet has been dropped by the device before transmission",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macTxDropTrace))
+                     "Trace source indicating a packet has been dropped "
+                     "by the device before transmission",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacPromiscRx", 
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macPromiscRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a promiscuous trace,",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRx", 
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a non-promiscuous trace,",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macRxTrace),
+                     "ns3::Packet::TracedCallback")
 #if 0
     // Not currently implemented for this device
     .AddTraceSource ("MacRxDrop", 
-                     "Trace source indicating a packet was dropped before being forwarded up the stack",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macRxDropTrace))
+                     "Trace source indicating a packet was dropped "
+                     "before being forwarded up the stack",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_macRxDropTrace),
+                     "ns3::Packet::TracedCallback")
 #endif
     //
     // Trace souces at the "bottom" of the net device, where packets transition
     // to/from the channel.
     //
     .AddTraceSource ("PhyTxBegin", 
-                     "Trace source indicating a packet has begun transmitting over the channel",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyTxBeginTrace))
+                     "Trace source indicating a packet has begun "
+                     "transmitting over the channel",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyTxBeginTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxEnd", 
-                     "Trace source indicating a packet has been completely transmitted over the channel",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyTxEndTrace))
+                     "Trace source indicating a packet has been "
+                     "completely transmitted over the channel",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyTxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxDrop", 
-                     "Trace source indicating a packet has been dropped by the device during transmission",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyTxDropTrace))
+                     "Trace source indicating a packet has been "
+                     "dropped by the device during transmission",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyTxDropTrace),
+                     "ns3::Packet::TracedCallback")
 #if 0
     // Not currently implemented for this device
     .AddTraceSource ("PhyRxBegin", 
-                     "Trace source indicating a packet has begun being received by the device",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyRxBeginTrace))
+                     "Trace source indicating a packet has begun "
+                     "being received by the device",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyRxBeginTrace),
+                     "ns3::Packet::TracedCallback")
 #endif
     .AddTraceSource ("PhyRxEnd", 
-                     "Trace source indicating a packet has been completely received by the device",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyRxEndTrace))
+                     "Trace source indicating a packet has been "
+                     "completely received by the device",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyRxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxDrop", 
-                     "Trace source indicating a packet has been dropped by the device during reception",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyRxDropTrace))
+                     "Trace source indicating a packet has been "
+                     "dropped by the device during reception",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_phyRxDropTrace),
+                     "ns3::Packet::TracedCallback")
 
     //
     // Trace sources designed to simulate a packet sniffer facility (tcpdump).
@@ -133,11 +157,15 @@
     // non-promiscuous traces in a point-to-point link.
     //
     .AddTraceSource ("Sniffer", 
-                     "Trace source simulating a non-promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_snifferTrace))
+                    "Trace source simulating a non-promiscuous packet sniffer "
+                     "attached to the device",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_snifferTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PromiscSniffer", 
-                     "Trace source simulating a promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_promiscSnifferTrace))
+                     "Trace source simulating a promiscuous packet sniffer "
+                     "attached to the device",
+                     MakeTraceSourceAccessor (&PointToPointNetDevice::m_promiscSnifferTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/point-to-point/model/point-to-point-net-device.h ns-3.22/src/point-to-point/model/point-to-point-net-device.h
--- ns-3.21/src/point-to-point/model/point-to-point-net-device.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/model/point-to-point-net-device.h	2015-02-05 15:46:23.000000000 -0800
@@ -39,7 +39,11 @@
 
 /**
  * \defgroup point-to-point Point-To-Point Network Device
- * This section documents the API of the ns-3 point-to-point module. For a generic functional description, please refer to the ns-3 manual.
+ * This section documents the API of the ns-3 point-to-point module. For a
+ * functional description, please refer to the ns-3 manual here:
+ * http://www.nsnam.org/docs/models/html/point-to-point.html
+ *
+ * Be sure to read the manual BEFORE going down to the API.
  */
 
 /**
@@ -58,6 +62,11 @@
 class PointToPointNetDevice : public NetDevice
 {
 public:
+  /**
+   * \brief Get the TypeId
+   *
+   * \return The TypeId for this class
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -81,8 +90,7 @@
    * set in the Attach () method from the corresponding field in the channel
    * to which the device is attached.  It can be overridden using this method.
    *
-   * @see Attach ()
-   * @param bps the data rate at which this object operates
+   * \param bps the data rate at which this object operates
    */
   void SetDataRate (DataRate bps);
 
@@ -90,14 +98,15 @@
    * Set the interframe gap used to separate packets.  The interframe gap
    * defines the minimum space required between packets sent by this device.
    *
-   * @param t the interframe gap time
+   * \param t the interframe gap time
    */
   void SetInterframeGap (Time t);
 
   /**
    * Attach the device to a channel.
    *
-   * @param ch Ptr to the channel to which this object is being attached.
+   * \param ch Ptr to the channel to which this object is being attached.
+   * \return true if the operation was successfull (always true actually)
    */
   bool Attach (Ptr<PointToPointChannel> ch);
 
@@ -105,18 +114,16 @@
    * Attach a queue to the PointToPointNetDevice.
    *
    * The PointToPointNetDevice "owns" a queue that implements a queueing 
-   * method such as DropTail or RED.
+   * method such as DropTailQueue or RedQueue
    *
-   * @see Queue
-   * @see DropTailQueue
-   * @param queue Ptr to the new queue.
+   * \param queue Ptr to the new queue.
    */
   void SetQueue (Ptr<Queue> queue);
 
   /**
    * Get a copy of the attached Queue.
    *
-   * @returns Ptr to the queue.
+   * \returns Ptr to the queue.
    */
   Ptr<Queue> GetQueue (void) const;
 
@@ -126,8 +133,7 @@
    * The PointToPointNetDevice may optionally include an ErrorModel in
    * the packet receive chain.
    *
-   * @see ErrorModel
-   * @param em Ptr to the ErrorModel.
+   * \param em Ptr to the ErrorModel.
    */
   void SetReceiveErrorModel (Ptr<ErrorModel> em);
 
@@ -139,8 +145,7 @@
    * used by the channel to indicate that the last bit of a packet has 
    * arrived at the device.
    *
-   * @see PointToPointChannel
-   * @param p Ptr to the received packet.
+   * \param p Ptr to the received packet.
    */
   void Receive (Ptr<Packet> p);
 
@@ -159,6 +164,11 @@
 
   virtual bool IsLinkUp (void) const;
 
+  /**
+   * TracedCallback signature for link changed event.
+   */
+  typedef void (* LinkChangeTracedCallback) (void);
+  
   virtual void AddLinkChangeCallback (Callback<void> callback);
 
   virtual bool IsBroadcast (void) const;
@@ -186,13 +196,37 @@
   virtual bool SupportsSendFrom (void) const;
 
 protected:
+  /**
+   * \brief Handler for MPI receive event
+   *
+   * \param p Packet received
+   */
   void DoMpiReceive (Ptr<Packet> p);
 
 private:
 
-  PointToPointNetDevice& operator = (const PointToPointNetDevice &);
-  PointToPointNetDevice (const PointToPointNetDevice &);
+  /**
+   * \brief Assign operator
+   *
+   * The method is private, so it is DISABLED.
+   *
+   * \param o Other NetDevice
+   * \return New instance of the NetDevice
+   */
+  PointToPointNetDevice& operator = (const PointToPointNetDevice &o);
 
+  /**
+   * \brief Copy constructor
+   *
+   * The method is private, so it is DISABLED.
+
+   * \param o Other NetDevice
+   */
+  PointToPointNetDevice (const PointToPointNetDevice &o);
+
+  /**
+   * \brief Dispose of the object
+   */
   virtual void DoDispose (void);
 
 private:
@@ -231,10 +265,10 @@
    * started sending signals.  An event is scheduled for the time at which
    * the bits have been completely transmitted.
    *
-   * @see PointToPointChannel::TransmitStart ()
-   * @see TransmitCompleteEvent ()
-   * @param p a reference to the packet to send
-   * @returns true if success, false on failure
+   * \see PointToPointChannel::TransmitStart ()
+   * \see TransmitComplete()
+   * \param p a reference to the packet to send
+   * \returns true if success, false on failure
    */
   bool TransmitStart (Ptr<Packet> p);
 
@@ -246,6 +280,11 @@
    */
   void TransmitComplete (void);
 
+  /**
+   * \brief Make the link up and running
+   *
+   * It calls also the linkChange callback.
+   */
   void NotifyLinkUp (void);
 
   /**
@@ -258,28 +297,24 @@
   };
   /**
    * The state of the Net Device transmit state machine.
-   * @see TxMachineState
    */
   TxMachineState m_txMachineState;
 
   /**
    * The data rate that the Net Device uses to simulate packet transmission
    * timing.
-   * @see class DataRate
    */
   DataRate       m_bps;
 
   /**
    * The interframe gap that the Net Device uses to throttle packet
    * transmission
-   * @see class Time
    */
   Time           m_tInterframeGap;
 
   /**
    * The PointToPointChannel to which this PointToPointNetDevice has been
    * attached.
-   * @see class PointToPointChannel
    */
   Ptr<PointToPointChannel> m_channel;
 
@@ -287,8 +322,7 @@
    * The Queue which this PointToPointNetDevice uses as a packet source.
    * Management of this Queue has been delegated to the PointToPointNetDevice
    * and it has the responsibility for deletion.
-   * @see class Queue
-   * @see class DropTailQueue
+   * \see class DropTailQueue
    */
   Ptr<Queue> m_queue;
 
@@ -300,16 +334,12 @@
   /**
    * The trace source fired when packets come into the "top" of the device
    * at the L3/L2 transition, before being queued for transmission.
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_macTxTrace;
 
   /**
    * The trace source fired when packets coming into the "top" of the device
    * at the L3/L2 transition are dropped before being queued for transmission.
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_macTxDropTrace;
 
@@ -318,8 +348,6 @@
    * immediately before being forwarded up to higher layers (at the L2/L3 
    * transition).  This is a promiscuous trace (which doesn't mean a lot here
    * in the point-to-point device).
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_macPromiscRxTrace;
 
@@ -328,8 +356,6 @@
    * immediately before being forwarded up to higher layers (at the L2/L3 
    * transition).  This is a non-promiscuous trace (which doesn't mean a lot 
    * here in the point-to-point device).
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_macRxTrace;
 
@@ -337,48 +363,36 @@
    * The trace source fired for packets successfully received by the device
    * but are dropped before being forwarded up to higher layers (at the L2/L3 
    * transition).
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_macRxDropTrace;
 
   /**
    * The trace source fired when a packet begins the transmission process on
    * the medium.
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_phyTxBeginTrace;
 
   /**
    * The trace source fired when a packet ends the transmission process on
    * the medium.
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;
 
   /**
    * The trace source fired when the phy layer drops a packet before it tries
    * to transmit it.
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_phyTxDropTrace;
 
   /**
    * The trace source fired when a packet begins the reception process from
    * the medium -- when the simulated first bit(s) arrive.
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_phyRxBeginTrace;
 
   /**
    * The trace source fired when a packet ends the reception process from
    * the medium.
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_phyRxEndTrace;
 
@@ -386,8 +400,6 @@
    * The trace source fired when the phy layer drops a packet it has received.
    * This happens if the receiver is not enabled or the error model is active
    * and indicates that the packet is corrupt.
-   *
-   * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
 
@@ -398,16 +410,14 @@
    *
    * On the transmit size, this trace hook will fire after a packet is dequeued
    * from the device queue for transmission.  In Linux, for example, this would
-   * correspond to the point just before a device hard_start_xmit where 
-   * dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET 
+   * correspond to the point just before a device \c hard_start_xmit where 
+   * \c dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET 
    * ETH_P_ALL handlers.
    *
    * On the receive side, this trace hook will fire when a packet is received,
    * just before the receive callback is executed.  In Linux, for example, 
    * this would correspond to the point at which the packet is dispatched to 
-   * packet sniffers in netif_receive_skb.
-   *
-   * \see class CallBackTraceSource
+   * packet sniffers in \c netif_receive_skb.
    */
   TracedCallback<Ptr<const Packet> > m_snifferTrace;
 
@@ -418,38 +428,39 @@
    *
    * On the transmit size, this trace hook will fire after a packet is dequeued
    * from the device queue for transmission.  In Linux, for example, this would
-   * correspond to the point just before a device hard_start_xmit where 
-   * dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET 
+   * correspond to the point just before a device \c hard_start_xmit where 
+   * \c dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET 
    * ETH_P_ALL handlers.
    *
    * On the receive side, this trace hook will fire when a packet is received,
    * just before the receive callback is executed.  In Linux, for example, 
    * this would correspond to the point at which the packet is dispatched to 
-   * packet sniffers in netif_receive_skb.
-   *
-   * \see class CallBackTraceSource
+   * packet sniffers in \c netif_receive_skb.
    */
   TracedCallback<Ptr<const Packet> > m_promiscSnifferTrace;
 
-  Ptr<Node> m_node;
-  Mac48Address m_address;
-  NetDevice::ReceiveCallback m_rxCallback;
-  NetDevice::PromiscReceiveCallback m_promiscCallback;
-  uint32_t m_ifIndex;
-  bool m_linkUp;
-  TracedCallback<> m_linkChangeCallbacks;
+  Ptr<Node> m_node;         //!< Node owning this NetDevice
+  Mac48Address m_address;   //!< Mac48Address of this NetDevice
+  NetDevice::ReceiveCallback m_rxCallback;   //!< Receive callback
+  NetDevice::PromiscReceiveCallback m_promiscCallback;  //!< Receive callback
+                                                        //   (promisc data)
+  uint32_t m_ifIndex; //!< Index of the interface
+  bool m_linkUp;      //!< Identify if the link is up or not
+  TracedCallback<> m_linkChangeCallbacks;  //!< Callback for the link change event
 
-  static const uint16_t DEFAULT_MTU = 1500;
+  static const uint16_t DEFAULT_MTU = 1500; //!< Default MTU
 
   /**
-   * The Maximum Transmission Unit.  This corresponds to the maximum 
+   * \brief The Maximum Transmission Unit
+   *
+   * This corresponds to the maximum 
    * number of bytes that can be transmitted as seen from higher layers.
    * This corresponds to the 1500 byte MTU size often seen on IP over 
    * Ethernet.
    */
   uint32_t m_mtu;
 
-  Ptr<Packet> m_currentPkt;
+  Ptr<Packet> m_currentPkt; //!< Current packet processed
 
   /**
    * \brief PPP to Ethernet protocol number mapping
diff -Naur ns-3.21/src/point-to-point/model/point-to-point-remote-channel.cc ns-3.22/src/point-to-point/model/point-to-point-remote-channel.cc
--- ns-3.21/src/point-to-point/model/point-to-point-remote-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/model/point-to-point-remote-channel.cc	2015-02-05 15:46:23.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/log.h"
 #include "ns3/mpi-interface.h"
 
-NS_LOG_COMPONENT_DEFINE ("PointToPointRemoteChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PointToPointRemoteChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (PointToPointRemoteChannel);
 
 TypeId
diff -Naur ns-3.21/src/point-to-point/model/point-to-point-remote-channel.h ns-3.22/src/point-to-point/model/point-to-point-remote-channel.h
--- ns-3.21/src/point-to-point/model/point-to-point-remote-channel.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/model/point-to-point-remote-channel.h	2015-02-05 15:46:23.000000000 -0800
@@ -31,16 +31,46 @@
 
 /**
  * \ingroup point-to-point
+ *
+ * \brief A Remote Point-To-Point Channel
+ * 
+ * This object connects two point-to-point net devices where at least one
+ * is not local to this simulator object. It simply override the transmit
+ * method and uses an MPI Send operation instead.
  */
 class PointToPointRemoteChannel : public PointToPointChannel
 {
 public:
+  /**
+   * \brief Get the TypeId
+   *
+   * \return The TypeId for this class
+   */
   static TypeId GetTypeId (void);
+
+  /** 
+   * \brief Constructor
+   */
   PointToPointRemoteChannel ();
+
+  /** 
+   * \brief Deconstructor
+   */
   ~PointToPointRemoteChannel ();
-  virtual bool TransmitStart (Ptr<Packet> p, Ptr<PointToPointNetDevice> src, Time txTime);
+
+  /**
+   * \brief Transmit the packet
+   *
+   * \param p Packet to transmit
+   * \param src Source PointToPointNetDevice
+   * \param txTime Transmit time to apply
+   * \returns true if successful (currently always true)
+   */
+  virtual bool TransmitStart (Ptr<Packet> p, Ptr<PointToPointNetDevice> src,
+                              Time txTime);
 };
-}
+
+} // namespace ns3
 
 #endif
 
diff -Naur ns-3.21/src/point-to-point/model/ppp-header.cc ns-3.22/src/point-to-point/model/ppp-header.cc
--- ns-3.21/src/point-to-point/model/ppp-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/model/ppp-header.cc	2015-02-05 15:46:23.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/header.h"
 #include "ppp-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("PppHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PppHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (PppHeader);
 
 PppHeader::PppHeader ()
diff -Naur ns-3.21/src/point-to-point/model/ppp-header.h ns-3.22/src/point-to-point/model/ppp-header.h
--- ns-3.21/src/point-to-point/model/ppp-header.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/model/ppp-header.h	2015-02-05 15:46:23.000000000 -0800
@@ -45,7 +45,7 @@
  * to the packet.  The ns-3 way to do this is via a class that inherits from
  * class Header.
  */
-class PppHeader : public Header 
+class PppHeader : public Header
 {
 public:
 
@@ -59,8 +59,21 @@
    */
   virtual ~PppHeader ();
 
+  /**
+   * \brief Get the TypeId
+   *
+   * \return The TypeId for this class
+   */
   static TypeId GetTypeId (void);
+
+  /**
+   * \brief Get the TypeId of the instance
+   *
+   * \return The TypeId for this instance
+   */
   virtual TypeId GetInstanceTypeId (void) const;
+
+
   virtual void Print (std::ostream &os) const;
   virtual void Serialize (Buffer::Iterator start) const;
   virtual uint32_t Deserialize (Buffer::Iterator start);
diff -Naur ns-3.21/src/point-to-point/test/point-to-point-test.cc ns-3.22/src/point-to-point/test/point-to-point-test.cc
--- ns-3.21/src/point-to-point/test/point-to-point-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point/test/point-to-point-test.cc	2015-02-05 15:46:23.000000000 -0800
@@ -6,14 +6,31 @@
 
 using namespace ns3;
 
+/**
+ * \brief Test class for PointToPoint model
+ *
+ * It tries to send one packet from one NetDevice to another, over a
+ * PointToPointChannel.
+ */
 class PointToPointTest : public TestCase
 {
 public:
+  /**
+   * \brief Create the test
+   */
   PointToPointTest ();
 
+  /**
+   * \brief Run the test
+   */
   virtual void DoRun (void);
 
 private:
+  /**
+   * \brief Send one packet to the device specified
+   *
+   * \param device NetDevice to send to
+   */
   void SendOnePacket (Ptr<PointToPointNetDevice> device);
 };
 
@@ -55,10 +72,16 @@
 
   Simulator::Destroy ();
 }
-//-----------------------------------------------------------------------------
+
+/**
+ * \brief TestSuite for PointToPoint module
+ */
 class PointToPointTestSuite : public TestSuite
 {
 public:
+  /**
+   * \brief Constructor
+   */
   PointToPointTestSuite ();
 };
 
@@ -68,4 +91,4 @@
   AddTestCase (new PointToPointTest, TestCase::QUICK);
 }
 
-static PointToPointTestSuite g_pointToPointTestSuite;
+static PointToPointTestSuite g_pointToPointTestSuite; //!< The testsuite
diff -Naur ns-3.21/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py ns-3.22/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:23.000000000 -0800
@@ -1921,11 +1921,6 @@
     cls.add_method('NewAddress', 
                    'ns3::Ipv6Address', 
                    [])
-    ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork(ns3::Ipv6Address network, ns3::Ipv6Prefix prefix) [member function]
-    cls.add_method('NewNetwork', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'prefix')], 
-                   deprecated=True)
     ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork() [member function]
     cls.add_method('NewNetwork', 
                    'void', 
@@ -2066,11 +2061,6 @@
     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')], 
-                   deprecated=True)
     return
 
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
@@ -2250,10 +2240,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2633,10 +2623,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3187,7 +3177,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3238,6 +3233,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3314,6 +3314,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3348,6 +3352,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5668,11 +5674,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -6740,11 +6741,6 @@
                    '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', 
@@ -6815,6 +6811,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py ns-3.22/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:23.000000000 -0800
@@ -1921,11 +1921,6 @@
     cls.add_method('NewAddress', 
                    'ns3::Ipv6Address', 
                    [])
-    ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork(ns3::Ipv6Address network, ns3::Ipv6Prefix prefix) [member function]
-    cls.add_method('NewNetwork', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'prefix')], 
-                   deprecated=True)
     ## ipv6-address-helper.h (module 'internet'): void ns3::Ipv6AddressHelper::NewNetwork() [member function]
     cls.add_method('NewNetwork', 
                    'void', 
@@ -2066,11 +2061,6 @@
     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')], 
-                   deprecated=True)
     return
 
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
@@ -2250,10 +2240,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2633,10 +2623,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3187,7 +3177,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3238,6 +3233,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3314,6 +3314,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3348,6 +3352,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5668,11 +5674,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -6740,11 +6741,6 @@
                    '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', 
@@ -6815,6 +6811,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
diff -Naur ns-3.21/src/point-to-point-layout/model/point-to-point-dumbbell.cc ns-3.22/src/point-to-point-layout/model/point-to-point-dumbbell.cc
--- ns-3.21/src/point-to-point-layout/model/point-to-point-dumbbell.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point-layout/model/point-to-point-dumbbell.cc	2015-02-05 15:46:23.000000000 -0800
@@ -32,10 +32,10 @@
 #include "ns3/vector.h"
 #include "ns3/ipv6-address-generator.h"
 
-NS_LOG_COMPONENT_DEFINE ("PointToPointDumbbellHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PointToPointDumbbellHelper");
+
 PointToPointDumbbellHelper::PointToPointDumbbellHelper (uint32_t nLeftLeaf,
                                                         PointToPointHelper leftHelper,
                                                         uint32_t nRightLeaf,
diff -Naur ns-3.21/src/point-to-point-layout/model/point-to-point-grid.cc ns-3.22/src/point-to-point-layout/model/point-to-point-grid.cc
--- ns-3.21/src/point-to-point-layout/model/point-to-point-grid.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point-layout/model/point-to-point-grid.cc	2015-02-05 15:46:23.000000000 -0800
@@ -25,10 +25,10 @@
 #include "ns3/log.h"
 #include "ns3/ipv6-address-generator.h"
 
-NS_LOG_COMPONENT_DEFINE ("PointToPointGridHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PointToPointGridHelper");
+
 PointToPointGridHelper::PointToPointGridHelper (uint32_t nRows, 
                                                 uint32_t nCols, 
                                                 PointToPointHelper pointToPoint)
diff -Naur ns-3.21/src/point-to-point-layout/model/point-to-point-star.cc ns-3.22/src/point-to-point-layout/model/point-to-point-star.cc
--- ns-3.21/src/point-to-point-layout/model/point-to-point-star.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/point-to-point-layout/model/point-to-point-star.cc	2015-02-05 15:46:23.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/vector.h"
 #include "ns3/ipv6-address-generator.h"
 
-NS_LOG_COMPONENT_DEFINE ("PointToPointStarHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PointToPointStarHelper");
+
 PointToPointStarHelper::PointToPointStarHelper (uint32_t numSpokes,
                                                 PointToPointHelper p2pHelper)
 {
diff -Naur ns-3.21/src/propagation/bindings/modulegen__gcc_ILP32.py ns-3.22/src/propagation/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/propagation/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:23.000000000 -0800
@@ -130,8 +130,6 @@
     module.add_class('ConstantSpeedPropagationDelayModel', parent=root_module['ns3::PropagationDelayModel'])
     ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel [class]
     module.add_class('Cost231PropagationLossModel', parent=root_module['ns3::PropagationLossModel'])
-    ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel::Environment [enumeration]
-    module.add_enum('Environment', ['SubUrban', 'MediumCity', 'Metropolitan'], outer_class=root_module['ns3::Cost231PropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
@@ -430,10 +428,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -550,7 +548,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -601,6 +604,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -677,6 +685,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -711,6 +723,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -1881,14 +1895,14 @@
     cls.add_method('SetSSAntennaHeight', 
                    'void', 
                    [param('double', 'height')])
-    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetEnvironment(ns3::Cost231PropagationLossModel::Environment env) [member function]
-    cls.add_method('SetEnvironment', 
-                   'void', 
-                   [param('ns3::Cost231PropagationLossModel::Environment', 'env')])
     ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double lambda) [member function]
     cls.add_method('SetLambda', 
                    'void', 
                    [param('double', 'lambda')])
+    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double frequency, double speed) [member function]
+    cls.add_method('SetLambda', 
+                   'void', 
+                   [param('double', 'frequency'), param('double', 'speed')])
     ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetMinDistance(double minDistance) [member function]
     cls.add_method('SetMinDistance', 
                    'void', 
@@ -1903,11 +1917,6 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel::Environment ns3::Cost231PropagationLossModel::GetEnvironment() const [member function]
-    cls.add_method('GetEnvironment', 
-                   'ns3::Cost231PropagationLossModel::Environment', 
-                   [], 
-                   is_const=True)
     ## cost231-propagation-loss-model.h (module 'propagation'): double ns3::Cost231PropagationLossModel::GetMinDistance() const [member function]
     cls.add_method('GetMinDistance', 
                    'double', 
@@ -1918,10 +1927,6 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
     ## cost231-propagation-loss-model.h (module 'propagation'): double ns3::Cost231PropagationLossModel::GetShadowing() [member function]
     cls.add_method('GetShadowing', 
                    'double', 
@@ -2290,15 +2295,13 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## jakes-process.h (module 'propagation'): void ns3::JakesProcess::SetPropagationLossModel(ns3::Ptr<const ns3::PropagationLossModel> arg0) [member function]
+    ## jakes-process.h (module 'propagation'): void ns3::JakesProcess::SetPropagationLossModel(ns3::Ptr<const ns3::PropagationLossModel> model) [member function]
     cls.add_method('SetPropagationLossModel', 
                    'void', 
-                   [param('ns3::Ptr< ns3::PropagationLossModel const >', 'arg0')])
+                   [param('ns3::Ptr< ns3::PropagationLossModel const >', 'model')])
     return
 
 def register_Ns3JakesPropagationLossModel_methods(root_module, cls):
-    ## jakes-propagation-loss-model.h (module 'propagation'): ns3::JakesPropagationLossModel::PI [variable]
-    cls.add_static_attribute('PI', 'double const', is_const=True)
     ## jakes-propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::JakesPropagationLossModel::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -2426,10 +2429,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
diff -Naur ns-3.21/src/propagation/bindings/modulegen__gcc_LP64.py ns-3.22/src/propagation/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/propagation/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:23.000000000 -0800
@@ -130,8 +130,6 @@
     module.add_class('ConstantSpeedPropagationDelayModel', parent=root_module['ns3::PropagationDelayModel'])
     ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel [class]
     module.add_class('Cost231PropagationLossModel', parent=root_module['ns3::PropagationLossModel'])
-    ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel::Environment [enumeration]
-    module.add_enum('Environment', ['SubUrban', 'MediumCity', 'Metropolitan'], outer_class=root_module['ns3::Cost231PropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
@@ -430,10 +428,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -550,7 +548,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -601,6 +604,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -677,6 +685,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -711,6 +723,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -1881,14 +1895,14 @@
     cls.add_method('SetSSAntennaHeight', 
                    'void', 
                    [param('double', 'height')])
-    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetEnvironment(ns3::Cost231PropagationLossModel::Environment env) [member function]
-    cls.add_method('SetEnvironment', 
-                   'void', 
-                   [param('ns3::Cost231PropagationLossModel::Environment', 'env')])
     ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double lambda) [member function]
     cls.add_method('SetLambda', 
                    'void', 
                    [param('double', 'lambda')])
+    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double frequency, double speed) [member function]
+    cls.add_method('SetLambda', 
+                   'void', 
+                   [param('double', 'frequency'), param('double', 'speed')])
     ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetMinDistance(double minDistance) [member function]
     cls.add_method('SetMinDistance', 
                    'void', 
@@ -1903,11 +1917,6 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel::Environment ns3::Cost231PropagationLossModel::GetEnvironment() const [member function]
-    cls.add_method('GetEnvironment', 
-                   'ns3::Cost231PropagationLossModel::Environment', 
-                   [], 
-                   is_const=True)
     ## cost231-propagation-loss-model.h (module 'propagation'): double ns3::Cost231PropagationLossModel::GetMinDistance() const [member function]
     cls.add_method('GetMinDistance', 
                    'double', 
@@ -1918,10 +1927,6 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
     ## cost231-propagation-loss-model.h (module 'propagation'): double ns3::Cost231PropagationLossModel::GetShadowing() [member function]
     cls.add_method('GetShadowing', 
                    'double', 
@@ -2290,15 +2295,13 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## jakes-process.h (module 'propagation'): void ns3::JakesProcess::SetPropagationLossModel(ns3::Ptr<const ns3::PropagationLossModel> arg0) [member function]
+    ## jakes-process.h (module 'propagation'): void ns3::JakesProcess::SetPropagationLossModel(ns3::Ptr<const ns3::PropagationLossModel> model) [member function]
     cls.add_method('SetPropagationLossModel', 
                    'void', 
-                   [param('ns3::Ptr< ns3::PropagationLossModel const >', 'arg0')])
+                   [param('ns3::Ptr< ns3::PropagationLossModel const >', 'model')])
     return
 
 def register_Ns3JakesPropagationLossModel_methods(root_module, cls):
-    ## jakes-propagation-loss-model.h (module 'propagation'): ns3::JakesPropagationLossModel::PI [variable]
-    cls.add_static_attribute('PI', 'double const', is_const=True)
     ## jakes-propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::JakesPropagationLossModel::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -2426,10 +2429,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
diff -Naur ns-3.21/src/propagation/model/cost231-propagation-loss-model.cc ns-3.22/src/propagation/model/cost231-propagation-loss-model.cc
--- ns-3.21/src/propagation/model/cost231-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/cost231-propagation-loss-model.cc	2015-02-05 15:46:23.000000000 -0800
@@ -30,6 +30,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("Cost231PropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (Cost231PropagationLossModel);
 
 TypeId
@@ -54,13 +55,13 @@
                    MakeDoubleChecker<double> ())
 
     .AddAttribute ("BSAntennaHeight",
-                   " BS Antenna Height (default is 50m).",
+                   "BS Antenna Height (default is 50m).",
                    DoubleValue (50.0),
                    MakeDoubleAccessor (&Cost231PropagationLossModel::m_BSAntennaHeight),
                    MakeDoubleChecker<double> ())
 
     .AddAttribute ("SSAntennaHeight",
-                   " SS Antenna Height (default is 3m).",
+                   "SS Antenna Height (default is 3m).",
                    DoubleValue (3),
                    MakeDoubleAccessor (&Cost231PropagationLossModel::m_SSAntennaHeight),
                    MakeDoubleChecker<double> ())
@@ -75,7 +76,6 @@
 
 Cost231PropagationLossModel::Cost231PropagationLossModel ()
 {
-  C = 0;
   m_shadowing = 10;
 }
 
@@ -145,17 +145,6 @@
   return m_SSAntennaHeight;
 }
 
-void
-Cost231PropagationLossModel::SetEnvironment (Environment env)
-{
-  m_environment = env;
-}
-Cost231PropagationLossModel::Environment
-Cost231PropagationLossModel::GetEnvironment (void) const
-{
-  return m_environment;
-}
-
 double
 Cost231PropagationLossModel::GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const
 {
@@ -177,7 +166,7 @@
   // Ch. 4, eq. 4.4.3, pg. 135
 
   double loss_in_db = 46.3 + (33.9 * std::log10(frequency_MHz)) - (13.82 * std::log10 (m_BSAntennaHeight)) - C_H
-		  	  	  + ((44.9 - 6.55 * std::log10 (m_BSAntennaHeight)) * std::log10 (distance_km)) + C + m_shadowing;
+		  	  	  + ((44.9 - 6.55 * std::log10 (m_BSAntennaHeight)) * std::log10 (distance_km)) + m_shadowing;
 
   NS_LOG_DEBUG ("dist =" << distance << ", Path Loss = " << loss_in_db);
 
diff -Naur ns-3.21/src/propagation/model/cost231-propagation-loss-model.h ns-3.22/src/propagation/model/cost231-propagation-loss-model.h
--- ns-3.21/src/propagation/model/cost231-propagation-loss-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/cost231-propagation-loss-model.h	2015-02-05 15:46:23.000000000 -0800
@@ -51,43 +51,101 @@
 {
 
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   Cost231PropagationLossModel ();
-  enum Environment
-  {
-    SubUrban, MediumCity, Metropolitan
-  };
 
   /**
+   * Get the propagation loss
    * \param a the mobility model of the source
    * \param b the mobility model of the destination
    * \returns the propagation loss (in dBm)
    */
   double GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
+
+  /**
+   * Set the BS antenna height
+   * \param height BS antenna height [m]
+   */
   void SetBSAntennaHeight (double height);
+  /**
+   * Set the SS antenna height
+   * \param height SS antenna height [m]
+   */
   void SetSSAntennaHeight (double height);
-  void SetEnvironment (Environment env);
+
+  /**
+   * Set the wavelength
+   * \param lambda the wavelength
+   */
   void SetLambda (double lambda);
+  /**
+   * Set the wavelength
+   * \param frequency the signal frequency [Hz]
+   * \param speed the signal speed [m/s]
+   */
+  void SetLambda (double frequency, double speed);
+  /**
+   * Set the minimum model distance
+   * \param minDistance the minimum model distance
+   */
   void SetMinDistance (double minDistance);
+  /**
+   * Get the BS antenna height
+   * \returns BS antenna height [m]
+   */
   double GetBSAntennaHeight (void) const;
+  /**
+   * Get the SS antenna height
+   * \returns SS antenna height [m]
+   */
   double GetSSAntennaHeight (void) const;
-  Environment GetEnvironment (void) const;
+  /**
+   * Get the minimum model distance
+   * \returns the minimum model distance
+   */
   double GetMinDistance (void) const;
+  /**
+   * Get the wavelength
+   * \returns the wavelength
+   */
   double GetLambda (void) const;
-  void SetLambda (double frequency, double speed);
+  /**
+   * Get the shadowing value
+   * \returns the shadowing value
+   */
   double GetShadowing (void);
+  /**
+   * Set the shadowing value
+   * \param shadowing the shadowing value
+   */
   void SetShadowing (double shadowing);
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  Cost231PropagationLossModel (const Cost231PropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  Cost231PropagationLossModel & operator = (const Cost231PropagationLossModel &);
+
   virtual double DoCalcRxPower (double txPowerDbm, Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
-  double m_BSAntennaHeight; // in meter
-  double m_SSAntennaHeight; // in meter
-  double C;
-  double m_lambda;
-  Environment m_environment;
-  double m_minDistance; // in meter
-  double m_frequency; // frequency in MHz
-  double m_shadowing;
+  double m_BSAntennaHeight; //!< BS Antenna Height [m]
+  double m_SSAntennaHeight; //!< SS Antenna Height [m]
+  double m_lambda; //!< The wavelength
+  double m_minDistance; //!< minimum distance [m]
+  double m_frequency; //!< frequency [Hz]
+  double m_shadowing; //!< Shadowing loss [dB]
 
 };
 
diff -Naur ns-3.21/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc ns-3.22/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc
--- ns-3.21/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc	2015-02-05 15:46:23.000000000 -0800
@@ -27,10 +27,10 @@
 
 #include "itu-r-1411-los-propagation-loss-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("ItuR1411LosPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ItuR1411LosPropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (ItuR1411LosPropagationLossModel);
 
 TypeId
diff -Naur ns-3.21/src/propagation/model/itu-r-1411-los-propagation-loss-model.h ns-3.22/src/propagation/model/itu-r-1411-los-propagation-loss-model.h
--- ns-3.21/src/propagation/model/itu-r-1411-los-propagation-loss-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/itu-r-1411-los-propagation-loss-model.h	2015-02-05 15:46:23.000000000 -0800
@@ -44,7 +44,10 @@
 
 public:
 
-  // inherited from Object
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   ItuR1411LosPropagationLossModel ();
@@ -69,14 +72,26 @@
   double GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
 
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  ItuR1411LosPropagationLossModel (const ItuR1411LosPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  ItuR1411LosPropagationLossModel & operator = (const ItuR1411LosPropagationLossModel &);
 
-  // inherited from PropagationLossModel
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
   
-  double m_lambda; // wavelength
+  double m_lambda; //!< wavelength
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc ns-3.22/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc
--- ns-3.21/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc	2015-02-05 15:46:23.000000000 -0800
@@ -27,10 +27,10 @@
 
 #include "itu-r-1411-nlos-over-rooftop-propagation-loss-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("ItuR1411NlosOverRooftopPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ItuR1411NlosOverRooftopPropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (ItuR1411NlosOverRooftopPropagationLossModel);
 
 
diff -Naur ns-3.21/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h ns-3.22/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h
--- ns-3.21/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h	2015-02-05 15:46:23.000000000 -0800
@@ -44,7 +44,10 @@
 
 public:
 
-  // inherited from Object
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   ItuR1411NlosOverRooftopPropagationLossModel ();
@@ -69,22 +72,34 @@
   double GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
 
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  ItuR1411NlosOverRooftopPropagationLossModel (const ItuR1411NlosOverRooftopPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  ItuR1411NlosOverRooftopPropagationLossModel & operator = (const ItuR1411NlosOverRooftopPropagationLossModel &);
 
-  // inherited from PropagationLossModel
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
   
-  double m_frequency; ///< frequency in MHz
-  double m_lambda; ///< wavelength
-  EnvironmentType m_environment;
-  CitySize m_citySize;
-  double m_rooftopHeight; ///< in meters
-  double m_streetsOrientation; ///< in degrees [0,90]
-  double m_streetsWidth; ///< in meters
-  double m_buildingsExtend; ///< in meters
-  double m_buildingSeparation; ///< in meters
+  double m_frequency; //!< frequency in MHz
+  double m_lambda; //!< wavelength
+  EnvironmentType m_environment; //!< Environment Scenario
+  CitySize m_citySize; //!< Dimension of the city
+  double m_rooftopHeight; //!< in meters
+  double m_streetsOrientation; //!< in degrees [0,90]
+  double m_streetsWidth; //!< in meters
+  double m_buildingsExtend; //!< in meters
+  double m_buildingSeparation; //!< in meters
 
 };
 
diff -Naur ns-3.21/src/propagation/model/jakes-process.cc ns-3.22/src/propagation/model/jakes-process.cc
--- ns-3.21/src/propagation/model/jakes-process.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/jakes-process.cc	2015-02-05 15:46:23.000000000 -0800
@@ -26,10 +26,10 @@
 #include "propagation-loss-model.h"
 #include "jakes-propagation-loss-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("JakesProcess");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("JakesProcess");
+
 /// Represents a single oscillator
 JakesProcess::Oscillator::Oscillator (std::complex<double> amplitude, double initialPhase, double omega) :
   m_amplitude (amplitude),
@@ -85,7 +85,7 @@
 void
 JakesProcess::SetDopplerFrequencyHz (double dopplerFrequencyHz)
 {
-  m_omegaDopplerMax = 2 * dopplerFrequencyHz * JakesPropagationLossModel::PI;
+  m_omegaDopplerMax = 2 * dopplerFrequencyHz * M_PI;
 }
 
 void
@@ -101,7 +101,7 @@
       unsigned int n = i + 1;
       /// 1. Rotation speed
       /// 1a. Initiate \f[ \alpha_n = \frac{2\pi n - \pi + \theta}{4M},  n=1,2, \ldots,M\f], n is oscillatorNumber, M is m_nOscillators
-      double alpha = (2.0 * JakesPropagationLossModel::PI * n - JakesPropagationLossModel::PI + theta) / (4.0 * m_nOscillators);
+      double alpha = (2.0 * M_PI * n - M_PI + theta) / (4.0 * m_nOscillators);
       /// 1b. Initiate rotation speed:
       double omega = m_omegaDopplerMax * std::cos (alpha);
       /// 2. Initiate complex amplitude:
diff -Naur ns-3.21/src/propagation/model/jakes-process.h ns-3.22/src/propagation/model/jakes-process.h
--- ns-3.21/src/propagation/model/jakes-process.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/jakes-process.h	2015-02-05 15:46:23.000000000 -0800
@@ -55,43 +55,79 @@
 class JakesProcess : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   JakesProcess ();
   virtual ~JakesProcess();
   virtual void DoDispose ();
+
+  /**
+   * Get the channel complex gain
+   * \return the channel complex gain
+   */
   std::complex<double> GetComplexGain () const;
-  /// Get Channel gain [dB]
+  /**
+   * Get the channel gain in dB
+   * \return the channel gain [dB]
+   */
   double GetChannelGainDb () const;
-  void SetPropagationLossModel (Ptr<const PropagationLossModel>);
+
+  /**
+   * Set the propagation model using this class
+   * \param model the propagation model using this class
+   */
+  void SetPropagationLossModel (Ptr<const PropagationLossModel> model);
 private:
-  /// Represents a single oscillator
+  /**
+   * This class Represents a single oscillator
+   */
   struct Oscillator
   {
-    /// Initiate oscillator with complex amplitude, initial phase and rotation speed
+    /**
+     * Initiate oscillator with complex amplitude, initial phase and rotation speed
+     * \param amplitude initial complex amplitude
+     * \param initialPhase initial phase
+     * \param omega rotation speed
+     */
     Oscillator (std::complex<double> amplitude, double initialPhase, double omega);
-    // Get the complex amplitude at moment \param t
+    /**
+     * Get the complex amplitude at a given moment
+     * \param t time instant
+     * \returns the complex amplitude
+     */
     std::complex<double> GetValueAt (Time t) const;
-    /// Complex number \f$Re=\cos(\psi_n), Im = i\sin(\psi_n)]\f$
-    std::complex<double> m_amplitude;
-    /// Phase \f$\phi_n\f$ of the oscillator
-    double m_phase;
-    /// Rotation speed of the oscillator \f$\omega_d \cos(\alpha_n)\f$
-    double m_omega;
+
+    std::complex<double> m_amplitude; //!< Complex number \f$Re=\cos(\psi_n), Im = i\sin(\psi_n)]\f$
+    double m_phase; //!< Phase \f$\phi_n\f$ of the oscillator
+    double m_omega; //!< Rotation speed of the oscillator \f$\omega_d \cos(\alpha_n)\f$
   };
 private:
+
+  /**
+   * Set the number of Oscillators to use
+   * @param nOscillators the number of oscillators
+   */
   void SetNOscillators (unsigned int nOscillators);
+
+  /**
+   * Set the Doppler frequency
+   * @param dopplerFrequencyHz the Doppler frequency [Hz]
+   */
   void SetDopplerFrequencyHz (double dopplerFrequencyHz);
+
+  /**
+   *
+   */
   void ConstructOscillators ();
 private:
-  /// Vector of oscillators:
-  std::vector<Oscillator> m_oscillators;
-  ///\name Attributes:
-  ///\{
-  double m_omegaDopplerMax;
-  unsigned int m_nOscillators;
-  Ptr<UniformRandomVariable> m_uniformVariable;
-  Ptr<const JakesPropagationLossModel> m_jakes;
-  ///\}
+  std::vector<Oscillator> m_oscillators; //!< Vector of oscillators
+  double m_omegaDopplerMax; //!< max rotation speed Doppler frequency
+  unsigned int m_nOscillators;  //!< number of oscillators
+  Ptr<UniformRandomVariable> m_uniformVariable; //!< random stream
+  Ptr<const JakesPropagationLossModel> m_jakes; //!< pointer to the propagation loss model
 };
 } // namespace ns3
 #endif // DOPPLER_PROCESS_H
diff -Naur ns-3.21/src/propagation/model/jakes-propagation-loss-model.cc ns-3.22/src/propagation/model/jakes-propagation-loss-model.cc
--- ns-3.21/src/propagation/model/jakes-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/jakes-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,20 +22,19 @@
 #include "ns3/double.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Jakes");
-
 namespace ns3
 {
-NS_OBJECT_ENSURE_REGISTERED (JakesPropagationLossModel);
 
+NS_LOG_COMPONENT_DEFINE ("Jakes");
+  
+NS_OBJECT_ENSURE_REGISTERED (JakesPropagationLossModel);
 
-const double JakesPropagationLossModel::PI = 3.14159265358979323846;
 
 JakesPropagationLossModel::JakesPropagationLossModel()
 {
   m_uniformVariable = CreateObject<UniformRandomVariable> ();
-  m_uniformVariable->SetAttribute ("Min", DoubleValue (-1.0 * PI));
-  m_uniformVariable->SetAttribute ("Max", DoubleValue (PI));
+  m_uniformVariable->SetAttribute ("Min", DoubleValue (-1.0 * M_PI));
+  m_uniformVariable->SetAttribute ("Max", DoubleValue (M_PI));
 }
 
 JakesPropagationLossModel::~JakesPropagationLossModel()
@@ -61,7 +60,7 @@
     {
       pathData = CreateObject<JakesProcess> ();
       pathData->SetPropagationLossModel (this);
-      m_propagationCache.AddPathData (pathData, a, b, 0/**Spectrum model uid is not used in PropagationLossModel*/);
+      m_propagationCache.AddPathData (pathData, a, b, 0 /**Spectrum model uid is not used in PropagationLossModel*/);
     }
   return txPowerDbm + pathData->GetChannelGainDb ();
 }
diff -Naur ns-3.21/src/propagation/model/jakes-propagation-loss-model.h ns-3.22/src/propagation/model/jakes-propagation-loss-model.h
--- ns-3.21/src/propagation/model/jakes-propagation-loss-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/jakes-propagation-loss-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -29,30 +29,50 @@
 /**
  * \ingroup propagation
  *
- * \brief a  jakes narrowband propagation model.
+ * \brief a  Jakes narrowband propagation model.
  * Symmetrical cache for JakesProcess
  */
 
 class JakesPropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
   JakesPropagationLossModel ();
   virtual ~JakesPropagationLossModel ();
   
-  static const double PI;
-
 private:
   friend class JakesProcess;
+
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  JakesPropagationLossModel (const JakesPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  JakesPropagationLossModel & operator = (const JakesPropagationLossModel &);
   double DoCalcRxPower (double txPowerDbm,
                         Ptr<MobilityModel> a,
                         Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
+
+  /**
+   * Get the underlying RNG stream
+   * \return the RNG stream
+   */
   Ptr<UniformRandomVariable> GetUniformRandomVariable () const;
 
-  Ptr<UniformRandomVariable> m_uniformVariable;
-private:
-  mutable PropagationCache<JakesProcess> m_propagationCache;
+  Ptr<UniformRandomVariable> m_uniformVariable; //!< random stream
+  mutable PropagationCache<JakesProcess> m_propagationCache; //!< Propagation cache
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc ns-3.22/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc
--- ns-3.21/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 
 #include "kun-2600-mhz-propagation-loss-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("Kun2600MhzPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Kun2600MhzPropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (Kun2600MhzPropagationLossModel);
 
 
diff -Naur ns-3.21/src/propagation/model/kun-2600-mhz-propagation-loss-model.h ns-3.22/src/propagation/model/kun-2600-mhz-propagation-loss-model.h
--- ns-3.21/src/propagation/model/kun-2600-mhz-propagation-loss-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/kun-2600-mhz-propagation-loss-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -42,8 +42,10 @@
 {
 
 public:
-
-  // inherited from Object
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   Kun2600MhzPropagationLossModel ();
@@ -59,6 +61,19 @@
   double GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
 
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  Kun2600MhzPropagationLossModel (const Kun2600MhzPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  Kun2600MhzPropagationLossModel & operator = (const Kun2600MhzPropagationLossModel &);
 
   // inherited from PropagationLossModel
   virtual double DoCalcRxPower (double txPowerDbm,
diff -Naur ns-3.21/src/propagation/model/okumura-hata-propagation-loss-model.cc ns-3.22/src/propagation/model/okumura-hata-propagation-loss-model.cc
--- ns-3.21/src/propagation/model/okumura-hata-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/okumura-hata-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 
 #include "okumura-hata-propagation-loss-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("OkumuraHataPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("OkumuraHataPropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (OkumuraHataPropagationLossModel);
 
 
diff -Naur ns-3.21/src/propagation/model/okumura-hata-propagation-loss-model.h ns-3.22/src/propagation/model/okumura-hata-propagation-loss-model.h
--- ns-3.21/src/propagation/model/okumura-hata-propagation-loss-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/okumura-hata-propagation-loss-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -45,7 +45,10 @@
 
 public:
 
-  // inherited from Object
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   OkumuraHataPropagationLossModel ();
@@ -61,16 +64,28 @@
   double GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
 
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  OkumuraHataPropagationLossModel (const OkumuraHataPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  OkumuraHataPropagationLossModel & operator = (const OkumuraHataPropagationLossModel &);
 
-  // inherited from PropagationLossModel
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
   
-  EnvironmentType m_environment;
-  CitySize m_citySize;
-  double m_frequency; // frequency in MHz
+  EnvironmentType m_environment;  //!< Environment Scenario
+  CitySize m_citySize;  //!< Size of the city
+  double m_frequency; //!< frequency in Hz
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/propagation/model/propagation-cache.h ns-3.22/src/propagation/model/propagation-cache.h
--- ns-3.21/src/propagation/model/propagation-cache.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/propagation-cache.h	2015-02-05 15:46:22.000000000 -0800
@@ -27,7 +27,7 @@
 {
 /**
  * \ingroup propagation
- * \brief Constructs a cache of objects, where each obect is responsible for a single propagation path loss calculations.
+ * \brief Constructs a cache of objects, where each object is responsible for a single propagation path loss calculations.
  * Propagation path a-->b and b-->a is the same thing. Propagation path is identified by
  * a couple of MobilityModels and a spectrum model UID
  */
@@ -37,6 +37,14 @@
 public:
   PropagationCache () {};
   ~PropagationCache () {};
+
+  /**
+   * Get the model associated with the path
+   * \param a 1st node mobility model
+   * \param b 2nd node mobility model
+   * \param modelUid model UID
+   * \return the model
+   */
   Ptr<T> GetPathData (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b, uint32_t modelUid)
   {
     PropagationPathIdentifier key = PropagationPathIdentifier (a, b, modelUid);
@@ -47,6 +55,14 @@
       }
     return it->second;
   };
+
+  /**
+   * Add a model to the path
+   * \param data the model to associate to the path
+   * \param a 1st node mobility model
+   * \param b 2nd node mobility model
+   * \param modelUid model UID
+   */
   void AddPathData (Ptr<T> data, Ptr<const MobilityModel> a, Ptr<const MobilityModel> b, uint32_t modelUid)
   {
     PropagationPathIdentifier key = PropagationPathIdentifier (a, b, modelUid);
@@ -57,12 +73,18 @@
   /// Each path is identified by
   struct PropagationPathIdentifier
   {
+    /**
+     * Constructor
+     * @param a 1st node mobility model
+     * @param b 2nd node mobility model
+     * @param modelUid model UID
+     */
     PropagationPathIdentifier (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b, uint32_t modelUid) :
       m_srcMobility (a), m_dstMobility (b), m_spectrumModelUid (modelUid)
     {};
-    Ptr<const MobilityModel> m_srcMobility;
-    Ptr<const MobilityModel> m_dstMobility;
-    uint32_t m_spectrumModelUid;
+    Ptr<const MobilityModel> m_srcMobility; //!< 1st node mobility model
+    Ptr<const MobilityModel> m_dstMobility; //!< 2nd node mobility model
+    uint32_t m_spectrumModelUid; //!< model UID
     bool operator < (const PropagationPathIdentifier & other) const
     {
       if (m_spectrumModelUid != other.m_spectrumModelUid)
@@ -81,9 +103,11 @@
       return false;
     }
   };
+
+  /// Typedef: PropagationPathIdentifier, Ptr<T>
   typedef std::map<PropagationPathIdentifier, Ptr<T> > PathCache;
 private:
-  PathCache m_pathCache;
+  PathCache m_pathCache; //!< Path cache
 };
 } // namespace ns3
 
diff -Naur ns-3.21/src/propagation/model/propagation-delay-model.cc ns-3.22/src/propagation/model/propagation-delay-model.cc
--- ns-3.21/src/propagation/model/propagation-delay-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/propagation-delay-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -92,8 +92,8 @@
   static TypeId tid = TypeId ("ns3::ConstantSpeedPropagationDelayModel")
     .SetParent<PropagationDelayModel> ()
     .AddConstructor<ConstantSpeedPropagationDelayModel> ()
-    .AddAttribute ("Speed", "The speed (m/s)",
-                   DoubleValue (300000000.0),
+    .AddAttribute ("Speed", "The propagation speed (m/s) in the propagation medium being considered. The default value is the propagation speed of light in the vacuum.",
+                   DoubleValue (299792458),
                    MakeDoubleAccessor (&ConstantSpeedPropagationDelayModel::m_speed),
                    MakeDoubleChecker<double> ())
   ;
diff -Naur ns-3.21/src/propagation/model/propagation-delay-model.h ns-3.22/src/propagation/model/propagation-delay-model.h
--- ns-3.21/src/propagation/model/propagation-delay-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/propagation-delay-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -37,6 +37,10 @@
 class PropagationDelayModel : public Object
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual ~PropagationDelayModel ();
   /**
@@ -74,6 +78,10 @@
 class RandomPropagationDelayModel : public PropagationDelayModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -84,7 +92,7 @@
   virtual Time GetDelay (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
 private:
   virtual int64_t DoAssignStreams (int64_t stream);
-  Ptr<RandomVariableStream> m_variable;
+  Ptr<RandomVariableStream> m_variable; //!< random generator
 };
 
 /**
@@ -95,6 +103,10 @@
 class ConstantSpeedPropagationDelayModel : public PropagationDelayModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -112,7 +124,7 @@
   double GetSpeed (void) const;
 private:
   virtual int64_t DoAssignStreams (int64_t stream);
-  double m_speed;
+  double m_speed; //!< speed
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/propagation/model/propagation-loss-model.cc ns-3.22/src/propagation/model/propagation-loss-model.cc
--- ns-3.21/src/propagation/model/propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ns3/pointer.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("PropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("PropagationLossModel");
+
 // ------------------------------------------------------------------------- //
 
 NS_OBJECT_ENSURE_REGISTERED (PropagationLossModel);
@@ -140,8 +140,6 @@
 
 NS_OBJECT_ENSURE_REGISTERED (FriisPropagationLossModel);
 
-const double FriisPropagationLossModel::PI = 3.14159265358979323846;
-
 TypeId 
 FriisPropagationLossModel::GetTypeId (void)
 {
@@ -264,7 +262,7 @@
       return txPowerDbm - m_minLoss;
     }
   double numerator = m_lambda * m_lambda;
-  double denominator = 16 * PI * PI * distance * distance * m_systemLoss;
+  double denominator = 16 * M_PI * M_PI * distance * distance * m_systemLoss;
   double lossDb = -10 * log10 (numerator / denominator);
   NS_LOG_DEBUG ("distance=" << distance<< "m, loss=" << lossDb <<"dB");
   return txPowerDbm - std::max (lossDb, m_minLoss);
@@ -281,8 +279,6 @@
 
 NS_OBJECT_ENSURE_REGISTERED (TwoRayGroundPropagationLossModel);
 
-const double TwoRayGroundPropagationLossModel::PI = 3.14159265358979323846;
-
 TypeId 
 TwoRayGroundPropagationLossModel::GetTypeId (void)
 {
@@ -419,13 +415,13 @@
    *
    */
 
-  double dCross = (4 * PI * txAntHeight * rxAntHeight) / m_lambda;
+  double dCross = (4 * M_PI * txAntHeight * rxAntHeight) / m_lambda;
   double tmp = 0;
   if (distance <= dCross)
     {
       // We use Friis
       double numerator = m_lambda * m_lambda;
-      tmp = PI * distance;
+      tmp = M_PI * distance;
       double denominator = 16 * tmp * tmp * m_systemLoss;
       double pr = 10 * std::log10 (numerator / denominator);
       NS_LOG_DEBUG ("Receiver within crossover (" << dCross << "m) for Two_ray path; using Friis");
diff -Naur ns-3.21/src/propagation/model/propagation-loss-model.h ns-3.22/src/propagation/model/propagation-loss-model.h
--- ns-3.21/src/propagation/model/propagation-loss-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/model/propagation-loss-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -41,7 +41,7 @@
 /**
  * \ingroup propagation
  *
- * \brief Modelize the propagation loss through a transmission medium
+ * \brief Models the propagation loss through a transmission medium
  *
  * Calculate the receive power (dbm) from a transmit power (dbm)
  * and a mobility model for the source and destination positions.
@@ -49,6 +49,11 @@
 class PropagationLossModel : public Object
 {
 public:
+  /**
+   * Get the type ID.
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   PropagationLossModel ();
@@ -76,6 +81,9 @@
   Ptr<PropagationLossModel> GetNext ();
 
   /**
+   * Returns the Rx Power taking into account all the PropagatinLossModel(s)
+   * chained to the current one.
+   *
    * \param txPowerDbm current transmission power (in dBm)
    * \param a the mobility model of the source
    * \param b the mobility model of the destination
@@ -99,8 +107,29 @@
   int64_t AssignStreams (int64_t stream);
 
 private:
-  PropagationLossModel (const PropagationLossModel &o);
-  PropagationLossModel &operator = (const PropagationLossModel &o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  PropagationLossModel (const PropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  PropagationLossModel &operator = (const PropagationLossModel &);
+
+  /**
+   * Returns the Rx Power taking into account only the particular
+   * PropagatinLossModel.
+   *
+   * \param txPowerDbm current transmission power (in dBm)
+   * \param a the mobility model of the source
+   * \param b the mobility model of the destination
+   * \returns the reception power after adding/multiplying propagation loss (in dBm)
+   */
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const = 0;
@@ -111,7 +140,7 @@
    */
   virtual int64_t DoAssignStreams (int64_t stream) = 0;
 
-  Ptr<PropagationLossModel> m_next;
+  Ptr<PropagationLossModel> m_next; //!< Next propagation loss model in the list
 };
 
 /**
@@ -122,19 +151,34 @@
 class RandomPropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   RandomPropagationLossModel ();
   virtual ~RandomPropagationLossModel ();
 
 private:
-  RandomPropagationLossModel (const RandomPropagationLossModel &o);
-  RandomPropagationLossModel & operator = (const RandomPropagationLossModel &o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  RandomPropagationLossModel (const RandomPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  RandomPropagationLossModel & operator = (const RandomPropagationLossModel &);
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
-  Ptr<RandomVariableStream> m_variable;
+  Ptr<RandomVariableStream> m_variable; //!< random generator
 };
 
 /**
@@ -217,6 +261,10 @@
 class FriisPropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   FriisPropagationLossModel ();
   /**
@@ -256,20 +304,43 @@
   double GetSystemLoss (void) const;
 
 private:
-  FriisPropagationLossModel (const FriisPropagationLossModel &o);
-  FriisPropagationLossModel & operator = (const FriisPropagationLossModel &o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  FriisPropagationLossModel (const FriisPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  FriisPropagationLossModel & operator = (const FriisPropagationLossModel &);
+
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
+
+  /**
+   * Transforms a Dbm value to Watt
+   * \param dbm the Dbm value
+   * \return the Watts
+   */
   double DbmToW (double dbm) const;
+
+  /**
+   * Transforms a Watt value to Dbm
+   * \param w the Watt value
+   * \return the Dbm
+   */
   double DbmFromW (double w) const;
 
-  static const double PI;
-  double m_lambda;
-  double m_frequency;
-  double m_systemLoss;
-  double m_minLoss;
+  double m_lambda;        //!< the carrier wavelength
+  double m_frequency;     //!< the carrier frequency
+  double m_systemLoss;    //!< the system loss
+  double m_minLoss;       //!< the minimum loss
 };
 
 /**
@@ -303,6 +374,10 @@
 class TwoRayGroundPropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   TwoRayGroundPropagationLossModel ();
 
@@ -349,21 +424,44 @@
   void SetHeightAboveZ (double heightAboveZ);
 
 private:
-  TwoRayGroundPropagationLossModel (const TwoRayGroundPropagationLossModel &o);
-  TwoRayGroundPropagationLossModel & operator = (const TwoRayGroundPropagationLossModel &o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  TwoRayGroundPropagationLossModel (const TwoRayGroundPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  TwoRayGroundPropagationLossModel & operator = (const TwoRayGroundPropagationLossModel &);
+
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
+
+  /**
+   * Transforms a Dbm value to Watt
+   * \param dbm the Dbm value
+   * \return the Watts
+   */
   double DbmToW (double dbm) const;
+
+  /**
+   * Transforms a Watt value to Dbm
+   * \param w the Watt value
+   * \return the Dbm
+   */
   double DbmFromW (double w) const;
 
-  static const double PI;
-  double m_lambda;
-  double m_frequency;
-  double m_systemLoss;
-  double m_minDistance;
-  double m_heightAboveZ;
+  double m_lambda;        //!< the carrier wavelength
+  double m_frequency;     //!< the carrier frequency
+  double m_systemLoss;    //!< the system loss
+  double m_minDistance;   //!< minimum distance for the model
+  double m_heightAboveZ;  //!< antenna height above the node's Z coordinate
 };
 
 /**
@@ -389,6 +487,10 @@
 class LogDistancePropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   LogDistancePropagationLossModel ();
 
@@ -402,20 +504,42 @@
    */
   double GetPathLossExponent (void) const;
 
+  /**
+   * Set the reference path loss at a given distance
+   * \param referenceDistance reference distance
+   * \param referenceLoss reference path loss
+   */
   void SetReference (double referenceDistance, double referenceLoss);
 
 private:
-  LogDistancePropagationLossModel (const LogDistancePropagationLossModel &o);
-  LogDistancePropagationLossModel & operator = (const LogDistancePropagationLossModel &o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  LogDistancePropagationLossModel (const LogDistancePropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  LogDistancePropagationLossModel & operator = (const LogDistancePropagationLossModel &);
+
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
+
+  /**
+   *  Creates a default reference loss model
+   * \return a default reference loss model
+   */
   static Ptr<PropagationLossModel> CreateDefaultReference (void);
 
-  double m_exponent;
-  double m_referenceDistance;
-  double m_referenceLoss;
+  double m_exponent; //!< model exponent
+  double m_referenceDistance; //!< reference distance
+  double m_referenceLoss; //!< reference loss
 };
 
 /**
@@ -461,29 +585,44 @@
 class ThreeLogDistancePropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   ThreeLogDistancePropagationLossModel ();
 
   // Parameters are all accessible via attributes.
 
 private:
-  ThreeLogDistancePropagationLossModel (const ThreeLogDistancePropagationLossModel& o);
-  ThreeLogDistancePropagationLossModel& operator= (const ThreeLogDistancePropagationLossModel& o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  ThreeLogDistancePropagationLossModel (const ThreeLogDistancePropagationLossModel&);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  ThreeLogDistancePropagationLossModel& operator= (const ThreeLogDistancePropagationLossModel&);
 
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
 
-  double m_distance0;
-  double m_distance1;
-  double m_distance2;
-
-  double m_exponent0;
-  double m_exponent1;
-  double m_exponent2;
+  double m_distance0; //!< Beginning of the first (near) distance field
+  double m_distance1; //!< Beginning of the second (middle) distance field.
+  double m_distance2; //!< Beginning of the third (far) distance field.
+
+  double m_exponent0; //!< The exponent for the first field.
+  double m_exponent1; //!< The exponent for the second field.
+  double m_exponent2; //!< The exponent for the third field.
 
-  double m_referenceLoss;
+  double m_referenceLoss; //!< The reference loss at distance d0 (dB).
 };
 
 /**
@@ -509,6 +648,10 @@
 class NakagamiPropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   NakagamiPropagationLossModel ();
@@ -516,23 +659,34 @@
   // Parameters are all accessible via attributes.
 
 private:
-  NakagamiPropagationLossModel (const NakagamiPropagationLossModel& o);
-  NakagamiPropagationLossModel& operator= (const NakagamiPropagationLossModel& o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  NakagamiPropagationLossModel (const NakagamiPropagationLossModel&);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  NakagamiPropagationLossModel& operator= (const NakagamiPropagationLossModel&);
 
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
 
-  double m_distance1;
-  double m_distance2;
+  double m_distance1; //!< Distance1
+  double m_distance2; //!< Distance2
 
-  double m_m0;
-  double m_m1;
-  double m_m2;
+  double m_m0;        //!< m for distances smaller than Distance1
+  double m_m1;        //!< m for distances smaller than Distance2
+  double m_m2;        //!< m for distances greater than Distance2
 
-  Ptr<ErlangRandomVariable>  m_erlangRandomVariable;
-  Ptr<GammaRandomVariable> m_gammaRandomVariable;
+  Ptr<ErlangRandomVariable>  m_erlangRandomVariable; //!< Erlang random variable
+  Ptr<GammaRandomVariable> m_gammaRandomVariable;    //!< Gamma random variable
 };
 
 /**
@@ -551,6 +705,10 @@
 class FixedRssLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   FixedRssLossModel ();
@@ -563,13 +721,26 @@
   void SetRss (double rss);
 
 private:
-  FixedRssLossModel (const FixedRssLossModel &o);
-  FixedRssLossModel & operator = (const FixedRssLossModel &o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  FixedRssLossModel (const FixedRssLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  FixedRssLossModel & operator = (const FixedRssLossModel &);
+
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
+
   virtual int64_t DoAssignStreams (int64_t stream);
-  double m_rss;
+  double m_rss; //!< the received signal strength
 };
 
 /**
@@ -582,6 +753,10 @@
 class MatrixPropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   MatrixPropagationLossModel ();
@@ -597,21 +772,40 @@
    * \param symmetric   If true (default), both a->b and b->a paths will be affected
    */ 
   void SetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b, double loss, bool symmetric = true);
-  /// Set default loss (in dB, positive) to be used, infinity if not set
-  void SetDefaultLoss (double);
+
+  /**
+   * Set the default propagation loss (in dB, positive) to be used, infinity if not set
+   * \param defaultLoss the default proagation loss
+   */
+  void SetDefaultLoss (double defaultLoss);
 
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  MatrixPropagationLossModel (const MatrixPropagationLossModel &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  MatrixPropagationLossModel &operator = (const MatrixPropagationLossModel &);
+
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
+
   virtual int64_t DoAssignStreams (int64_t stream);
 private:
-  /// default loss
-  double m_default; 
+  double m_default; //!< default loss
 
+  /// Typedef: Mobility models pair
   typedef std::pair< Ptr<MobilityModel>, Ptr<MobilityModel> > MobilityPair; 
-  /// Fixed loss between pair of nodes
-  std::map<MobilityPair, double> m_loss;
+
+  std::map<MobilityPair, double> m_loss; //!< Propagation loss between pair of nodes
 };
 
 /**
@@ -627,17 +821,32 @@
 class RangePropagationLossModel : public PropagationLossModel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   RangePropagationLossModel ();
 private:
-  RangePropagationLossModel (const RangePropagationLossModel& o);
-  RangePropagationLossModel& operator= (const RangePropagationLossModel& o);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  RangePropagationLossModel (const RangePropagationLossModel&);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  RangePropagationLossModel& operator= (const RangePropagationLossModel&);
   virtual double DoCalcRxPower (double txPowerDbm,
                                 Ptr<MobilityModel> a,
                                 Ptr<MobilityModel> b) const;
   virtual int64_t DoAssignStreams (int64_t stream);
 private:
-  double m_range;
+  double m_range; //!< Maximum Transmission Range (meters)
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/propagation/test/itu-r-1411-los-test-suite.cc ns-3.22/src/propagation/test/itu-r-1411-los-test-suite.cc
--- ns-3.21/src/propagation/test/itu-r-1411-los-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/test/itu-r-1411-los-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,7 +33,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("ItuR1411LosPropagationLossModelTest");
 
-
 class ItuR1411LosPropagationLossModelTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc ns-3.22/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc
--- ns-3.21/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,7 +33,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("ItuR1411NlosOverRooftopPropagationLossModelTest");
 
-
 class ItuR1411NlosOverRooftopPropagationLossModelTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/propagation/test/kun-2600-mhz-test-suite.cc ns-3.22/src/propagation/test/kun-2600-mhz-test-suite.cc
--- ns-3.21/src/propagation/test/kun-2600-mhz-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/test/kun-2600-mhz-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,7 +33,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("Kun2600MhzPropagationLossModelTest");
 
-
 class Kun2600MhzPropagationLossModelTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/propagation/test/okumura-hata-test-suite.cc ns-3.22/src/propagation/test/okumura-hata-test-suite.cc
--- ns-3.21/src/propagation/test/okumura-hata-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/propagation/test/okumura-hata-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,7 +33,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("OkumuraHataPropagationLossModelTest");
 
-
 class OkumuraHataPropagationLossModelTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/sixlowpan/bindings/modulegen__gcc_ILP32.py ns-3.22/src/sixlowpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1478,10 +1478,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1941,7 +1941,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1992,6 +1997,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2068,6 +2078,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2102,6 +2116,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4677,11 +4693,6 @@
                    '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', 
@@ -4752,6 +4763,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/sixlowpan/bindings/modulegen__gcc_LP64.py ns-3.22/src/sixlowpan/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1478,10 +1478,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1941,7 +1941,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1992,6 +1997,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2068,6 +2078,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2102,6 +2116,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4677,11 +4693,6 @@
                    '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', 
@@ -4752,6 +4763,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/sixlowpan/helper/sixlowpan-helper.cc ns-3.22/src/sixlowpan/helper/sixlowpan-helper.cc
--- ns-3.21/src/sixlowpan/helper/sixlowpan-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/sixlowpan/helper/sixlowpan-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/node.h"
 #include "ns3/names.h"
 
-NS_LOG_COMPONENT_DEFINE ("SixLowPanHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SixLowPanHelper");
+
 SixLowPanHelper::SixLowPanHelper ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/sixlowpan/model/sixlowpan-net-device.cc ns-3.22/src/sixlowpan/model/sixlowpan-net-device.cc
--- ns-3.21/src/sixlowpan/model/sixlowpan-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/sixlowpan/model/sixlowpan-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,7 +29,6 @@
 #include "ns3/uinteger.h"
 #include "ns3/icmpv6-header.h"
 #include "ns3/ipv6-header.h"
-#include "ns3/random-variable.h"
 #include "ns3/mac16-address.h"
 #include "ns3/mac48-address.h"
 #include "ns3/mac64-address.h"
@@ -85,12 +84,21 @@
                    UintegerValue (0xFFFF),
                    MakeUintegerAccessor (&SixLowPanNetDevice::m_etherType),
                    MakeUintegerChecker<uint16_t> ())
-    .AddTraceSource ("Tx", "Send - packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.",
-                     MakeTraceSourceAccessor (&SixLowPanNetDevice::m_txTrace))
-    .AddTraceSource ("Rx", "Receive - packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.",
-                     MakeTraceSourceAccessor (&SixLowPanNetDevice::m_rxTrace))
-    .AddTraceSource ("Drop", "Drop - DropReason, packet (including 6LoWPAN header), SixLoWPanNetDevice Ptr, interface index.",
-                     MakeTraceSourceAccessor (&SixLowPanNetDevice::m_dropTrace))
+    .AddTraceSource ("Tx",
+                     "Send - packet (including 6LoWPAN header), "
+                     "SixLoWPanNetDevice Ptr, interface index.",
+                     MakeTraceSourceAccessor (&SixLowPanNetDevice::m_txTrace),
+                     "ns3::SixLowPanNetDevice::RxTxTracedCallback")
+    .AddTraceSource ("Rx",
+                     "Receive - packet (including 6LoWPAN header), "
+                     "SixLoWPanNetDevice Ptr, interface index.",
+                     MakeTraceSourceAccessor (&SixLowPanNetDevice::m_rxTrace),
+                     "ns3::SixLowPanNetDevice::RxTxTracedCallback")
+    .AddTraceSource ("Drop",
+                     "Drop - DropReason, packet (including 6LoWPAN header), "
+                     "SixLoWPanNetDevice Ptr, interface index.",
+                     MakeTraceSourceAccessor (&SixLowPanNetDevice::m_dropTrace),
+                     "ns3::SixLowPanNetDevice::DropTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/sixlowpan/model/sixlowpan-net-device.h ns-3.22/src/sixlowpan/model/sixlowpan-net-device.h
--- ns-3.21/src/sixlowpan/model/sixlowpan-net-device.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/sixlowpan/model/sixlowpan-net-device.h	2015-02-05 15:46:22.000000000 -0800
@@ -145,6 +145,31 @@
    */
   int64_t AssignStreams (int64_t stream);
 
+  /**
+   * TracedCallback signature for packet send/receive events.
+   *
+   * \param [in] packet The packet.
+   * \param [in] sixNetDevice The SixLowPanNetDevice
+   * \param [in] ifindex The ifindex of the device.
+   */
+  typedef void (* RxTxTracedCallback)
+    (const Ptr<const Packet> packet,
+     const Ptr<const SixLowPanNetDevice> sixNetDevice,
+     const uint32_t ifindex);
+
+  /**
+   * TracedCallback signature for
+   *
+   * \param [in] reason The reason for the drop.
+   * \param [in] packet The packet.
+   * \param [in] sixNetDevice The SixLowPanNetDevice
+   * \param [in] ifindex The ifindex of the device.
+   */
+  typedef void (* DropTracedCallback)
+    (const DropReason reason, const Ptr<const Packet> packet,
+     const Ptr<const SixLowPanNetDevice> sixNetDevice,
+     const uint32_t ifindex);
+   
 protected:
   virtual void DoDispose (void);
 
diff -Naur ns-3.21/src/sixlowpan/test/error-channel-sixlow.cc ns-3.22/src/sixlowpan/test/error-channel-sixlow.cc
--- ns-3.21/src/sixlowpan/test/error-channel-sixlow.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/sixlowpan/test/error-channel-sixlow.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/node.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("ErrorChannelSixlow");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ErrorChannelSixlow");
+
 NS_OBJECT_ENSURE_REGISTERED (ErrorChannelSixlow);
 
 TypeId
diff -Naur ns-3.21/src/spectrum/bindings/modulegen__gcc_ILP32.py ns-3.22/src/spectrum/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/spectrum/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -2032,10 +2032,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2630,7 +2630,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2681,6 +2686,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2757,6 +2767,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2791,6 +2805,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5596,10 +5612,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
@@ -6299,11 +6315,6 @@
                    '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', 
@@ -6374,6 +6385,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/spectrum/bindings/modulegen__gcc_LP64.py ns-3.22/src/spectrum/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/spectrum/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -2032,10 +2032,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2630,7 +2630,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2681,6 +2686,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2757,6 +2767,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2791,6 +2805,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -5596,10 +5612,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
@@ -6299,11 +6315,6 @@
                    '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', 
@@ -6374,6 +6385,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/spectrum/examples/adhoc-aloha-ideal-phy.cc ns-3.22/src/spectrum/examples/adhoc-aloha-ideal-phy.cc
--- ns-3.21/src/spectrum/examples/adhoc-aloha-ideal-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/examples/adhoc-aloha-ideal-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,10 +39,10 @@
 #include <ns3/applications-module.h>
 #include <ns3/adhoc-aloha-noack-ideal-phy-helper.h>
 
-NS_LOG_COMPONENT_DEFINE ("TestAdhocOfdmAloha");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("TestAdhocOfdmAloha");
+
 static bool g_verbose = false;
 
 void
diff -Naur ns-3.21/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc ns-3.22/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc
--- ns-3.21/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -41,10 +41,10 @@
 #include <ns3/adhoc-aloha-noack-ideal-phy-helper.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("TestAdhocOfdmAloha");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("TestAdhocOfdmAloha");
+
 static bool g_verbose = false;
 static uint64_t g_rxBytes;
 
diff -Naur ns-3.21/src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven.cc ns-3.22/src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven.cc
--- ns-3.21/src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven.cc	2015-02-05 15:46:22.000000000 -0800
@@ -43,10 +43,10 @@
 #include <ns3/non-communicating-net-device.h>
 #include <ns3/microwave-oven-spectrum-value-helper.h>
 
-NS_LOG_COMPONENT_DEFINE ("OfdmWithWaveformGenerator");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("OfdmWithWaveformGenerator");
+
 static bool g_verbose = false;
 
 
diff -Naur ns-3.21/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.cc ns-3.22/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.cc
--- ns-3.21/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,9 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("AdhocAlohaNoackIdealPhyHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AdhocAlohaNoackIdealPhyHelper");
 
 AdhocAlohaNoackIdealPhyHelper::AdhocAlohaNoackIdealPhyHelper ()
 {
diff -Naur ns-3.21/src/spectrum/helper/spectrum-analyzer-helper.cc ns-3.22/src/spectrum/helper/spectrum-analyzer-helper.cc
--- ns-3.21/src/spectrum/helper/spectrum-analyzer-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/helper/spectrum-analyzer-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,10 +35,9 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumAnalyzerHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumAnalyzerHelper");
 
 static void
 WriteAveragePowerSpectralDensityReport (Ptr<OutputStreamWrapper> streamWrapper,
diff -Naur ns-3.21/src/spectrum/helper/waveform-generator-helper.cc ns-3.22/src/spectrum/helper/waveform-generator-helper.cc
--- ns-3.21/src/spectrum/helper/waveform-generator-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/helper/waveform-generator-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,10 +33,9 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("WaveformGeneratorHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WaveformGeneratorHelper");
 
 WaveformGeneratorHelper::WaveformGeneratorHelper ()
 {
diff -Naur ns-3.21/src/spectrum/model/aloha-noack-mac-header.cc ns-3.22/src/spectrum/model/aloha-noack-mac-header.cc
--- ns-3.21/src/spectrum/model/aloha-noack-mac-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/aloha-noack-mac-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "aloha-noack-mac-header.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("AlohaNoackMacHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AlohaNoackMacHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (AlohaNoackMacHeader);
 
 TypeId
diff -Naur ns-3.21/src/spectrum/model/aloha-noack-net-device.cc ns-3.22/src/spectrum/model/aloha-noack-net-device.cc
--- ns-3.21/src/spectrum/model/aloha-noack-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/aloha-noack-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,11 +31,9 @@
 #include "aloha-noack-net-device.h"
 #include "ns3/llc-snap-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("AlohaNoackNetDevice");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AlohaNoackNetDevice");
 
 std::ostream& operator<< (std::ostream& os, AlohaNoackNetDevice::State state)
 {
@@ -84,19 +82,29 @@
                                         &AlohaNoackNetDevice::SetPhy),
                    MakePointerChecker<Object> ())
     .AddTraceSource ("MacTx",
-                     "Trace source indicating a packet has arrived for transmission by this device",
-                     MakeTraceSourceAccessor (&AlohaNoackNetDevice::m_macTxTrace))
+                     "Trace source indicating a packet has arrived "
+                     "for transmission by this device",
+                     MakeTraceSourceAccessor (&AlohaNoackNetDevice::m_macTxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTxDrop",
-                     "Trace source indicating a packet has been dropped by the device before transmission",
-                     MakeTraceSourceAccessor (&AlohaNoackNetDevice::m_macTxDropTrace))
+                     "Trace source indicating a packet has been dropped "
+                     "by the device before transmission",
+                     MakeTraceSourceAccessor (&AlohaNoackNetDevice::m_macTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacPromiscRx",
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&AlohaNoackNetDevice::m_macPromiscRxTrace))
+                     "A packet has been received by this device, has been "
+                     "passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a promiscuous trace,",
+                     MakeTraceSourceAccessor (&AlohaNoackNetDevice::m_macPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRx",
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&AlohaNoackNetDevice::m_macRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a non-promiscuous trace,",
+                     MakeTraceSourceAccessor (&AlohaNoackNetDevice::m_macRxTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/spectrum/model/constant-spectrum-propagation-loss.cc ns-3.22/src/spectrum/model/constant-spectrum-propagation-loss.cc
--- ns-3.21/src/spectrum/model/constant-spectrum-propagation-loss.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/constant-spectrum-propagation-loss.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,9 @@
 #include "ns3/double.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("ConstantSpectrumPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ConstantSpectrumPropagationLossModel");
 
 NS_OBJECT_ENSURE_REGISTERED (ConstantSpectrumPropagationLossModel);
 
diff -Naur ns-3.21/src/spectrum/model/half-duplex-ideal-phy.cc ns-3.22/src/spectrum/model/half-duplex-ideal-phy.cc
--- ns-3.21/src/spectrum/model/half-duplex-ideal-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/half-duplex-ideal-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include "spectrum-error-model.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("HalfDuplexIdealPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("HalfDuplexIdealPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (HalfDuplexIdealPhy);
 
 HalfDuplexIdealPhy::HalfDuplexIdealPhy ()
@@ -106,22 +106,28 @@
                    MakeDataRateChecker ())
     .AddTraceSource ("TxStart",
                      "Trace fired when a new transmission is started",
-                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyTxStartTrace))
+                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyTxStartTrace),
+                     "ns3::Packet::TraceCallback")
     .AddTraceSource ("TxEnd",
                      "Trace fired when a previosuly started transmission is finished",
-                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyTxEndTrace))
+                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyTxEndTrace),
+                     "ns3::Packet::TraceCallback")
     .AddTraceSource ("RxStart",
                      "Trace fired when the start of a signal is detected",
-                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyRxStartTrace))
+                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyRxStartTrace),
+                     "ns3::Packet::TraceCallback")
     .AddTraceSource ("RxAbort",
                      "Trace fired when a previously started RX is aborted before time",
-                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyRxAbortTrace))
+                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyRxAbortTrace),
+                     "ns3::Packet::TraceCallback")
     .AddTraceSource ("RxEndOk",
                      "Trace fired when a previosuly started RX terminates successfully",
-                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyRxEndOkTrace))
+                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyRxEndOkTrace),
+                     "ns3::Packet::TraceCallback")
     .AddTraceSource ("RxEndError",
                      "Trace fired when a previosuly started RX terminates with an error (packet is corrupted)",
-                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyRxEndErrorTrace))
+                     MakeTraceSourceAccessor (&HalfDuplexIdealPhy::m_phyRxEndErrorTrace),
+                     "ns3::Packet::TraceCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.cc ns-3.22/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.cc
--- ns-3.21/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "half-duplex-ideal-phy-signal-parameters.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("HalfDuplexIdealPhySignalParameters");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("HalfDuplexIdealPhySignalParameters");
+
 HalfDuplexIdealPhySignalParameters::HalfDuplexIdealPhySignalParameters ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/spectrum/model/microwave-oven-spectrum-value-helper.cc ns-3.22/src/spectrum/model/microwave-oven-spectrum-value-helper.cc
--- ns-3.21/src/spectrum/model/microwave-oven-spectrum-value-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/microwave-oven-spectrum-value-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,9 @@
 #include "ns3/log.h"
 #include "microwave-oven-spectrum-value-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("MicrowaveOvenSpectrumValue");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MicrowaveOvenSpectrumValue");
 
 static Ptr<SpectrumModel> g_MicrowaveOvenSpectrumModel5Mhz;
 static Ptr<SpectrumModel> g_MicrowaveOvenSpectrumModel6Mhz;
diff -Naur ns-3.21/src/spectrum/model/multi-model-spectrum-channel.cc ns-3.22/src/spectrum/model/multi-model-spectrum-channel.cc
--- ns-3.21/src/spectrum/model/multi-model-spectrum-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/multi-model-spectrum-channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,11 +39,9 @@
 #include "multi-model-spectrum-channel.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("MultiModelSpectrumChannel");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MultiModelSpectrumChannel");
 
 NS_OBJECT_ENSURE_REGISTERED (MultiModelSpectrumChannel);
 
@@ -101,27 +99,34 @@
     .SetParent<SpectrumChannel> ()
     .AddConstructor<MultiModelSpectrumChannel> ()
     .AddAttribute ("MaxLossDb",
-                   "If a single-frequency PropagationLossModel is used, this value "
-                   "represents the maximum loss in dB for which transmissions will be "
-                   "passed to the receiving PHY. Signals for which the PropagationLossModel "
-                   "returns a loss bigger than this value will not be propagated to the receiver. "
-                   "This parameter is to be used to reduce "
-                   "the computational load by not propagating signals that are far beyond "
-                   "the interference range. Note that the default value corresponds to "
-                   "considering all signals for reception. Tune this value with care. ",
+                   "If a single-frequency PropagationLossModel is used, "
+                   "this value represents the maximum loss in dB for which "
+                   "transmissions will be passed to the receiving PHY.  "
+                   "Signals for which the PropagationLossModel returns "
+                   "a loss bigger than this value will not be propagated "
+                   "to the receiver.  This parameter is to be used to reduce "
+                   "the computational load by not propagating signals that "
+                   "are far beyond the interference range. Note that the "
+                   "default value corresponds to considering all signals "
+                   "for reception. Tune this value with care. ",
                    DoubleValue (1.0e9),
                    MakeDoubleAccessor (&MultiModelSpectrumChannel::m_maxLossDb),
                    MakeDoubleChecker<double> ())
     .AddTraceSource ("PathLoss",
-                     "This trace is fired "
-                     "whenever a new path loss value is calculated. The first and second parameters "
-                     "to the trace are pointers respectively to the TX and RX SpectrumPhy instances, "
-                     "whereas the third parameters is the loss value in dB. Note that the loss value "
-                     "reported by this trace is the single-frequency loss value obtained by evaluating "
-                     "only the TX and RX AntennaModels and the PropagationLossModel. In particular, note that "
-                     "SpectrumPropagationLossModel (even if present) is never used to evaluate the loss value "
+                     "This trace is fired whenever a new path loss value "
+                     "is calculated. The first and second parameters "
+                     "to the trace are pointers respectively to the "
+                     "TX and RX SpectrumPhy instances, whereas the "
+                     "third parameters is the loss value in dB.  "
+                     "Note that the loss value reported by this trace is "
+                     "the single-frequency loss value obtained by evaluating "
+                     "only the TX and RX AntennaModels and the "
+                     "PropagationLossModel. In particular, note that "
+                     "SpectrumPropagationLossModel (even if present) "
+                     "is never used to evaluate the loss value "
                      "reported in this trace. ",
-                     MakeTraceSourceAccessor (&MultiModelSpectrumChannel::m_pathLossTrace))
+                     MakeTraceSourceAccessor (&MultiModelSpectrumChannel::m_pathLossTrace),
+                     "ns3::SpectrumChannel::LossTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/spectrum/model/non-communicating-net-device.cc ns-3.22/src/spectrum/model/non-communicating-net-device.cc
--- ns-3.21/src/spectrum/model/non-communicating-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/non-communicating-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,12 +29,9 @@
 #include "non-communicating-net-device.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("NonCommunicatingNetDevice");
-
-
 namespace ns3 {
 
-
+NS_LOG_COMPONENT_DEFINE ("NonCommunicatingNetDevice");
 
 NS_OBJECT_ENSURE_REGISTERED (NonCommunicatingNetDevice);
 
diff -Naur ns-3.21/src/spectrum/model/single-model-spectrum-channel.cc ns-3.22/src/spectrum/model/single-model-spectrum-channel.cc
--- ns-3.21/src/spectrum/model/single-model-spectrum-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/single-model-spectrum-channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -38,11 +38,9 @@
 #include "single-model-spectrum-channel.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("SingleModelSpectrumChannel");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SingleModelSpectrumChannel");
 
 NS_OBJECT_ENSURE_REGISTERED (SingleModelSpectrumChannel);
 
@@ -71,27 +69,33 @@
     .SetParent<SpectrumChannel> ()
     .AddConstructor<SingleModelSpectrumChannel> ()
     .AddAttribute ("MaxLossDb",
-                   "If a single-frequency PropagationLossModel is used, this value "
-                   "represents the maximum loss in dB for which transmissions will be "
-                   "passed to the receiving PHY. Signals for which the PropagationLossModel "
-                   "returns a loss bigger than this value will not be propagated to the receiver. "
-                   "This parameter is to be used to reduce "
-                   "the computational load by not propagating signals that are far beyond "
-                   "the interference range. Note that the default value corresponds to "
-                   "considering all signals for reception. Tune this value with care. ",
+                   "If a single-frequency PropagationLossModel is used, "
+                   "this value represents the maximum loss in dB for which "
+                   "transmissions will be passed to the receiving PHY. "
+                   "Signals for which the PropagationLossModel returns "
+                   "a loss bigger than this value will not be propagated "
+                   "to the receiver. This parameter is to be used to reduce "
+                   "the computational load by not propagating signals "
+                   "that are far beyond the interference range. Note that "
+                   "the default value corresponds to considering all signals "
+                   "for reception. Tune this value with care. ",
                    DoubleValue (1.0e9),
                    MakeDoubleAccessor (&SingleModelSpectrumChannel::m_maxLossDb),
                    MakeDoubleChecker<double> ())
     .AddTraceSource ("PathLoss",
-                     "This trace is fired "
-                     "whenever a new path loss value is calculated. The first and second parameters "
-                     "to the trace are pointers respectively to the TX and RX SpectrumPhy instances, "
-                     "whereas the third parameters is the loss value in dB. Note that the loss value "
-                     "reported by this trace is the single-frequency loss value obtained by evaluating "
-                     "only the TX and RX AntennaModels and the PropagationLossModel. In particular, note that "
-                     "SpectrumPropagationLossModel (even if present) is never used to evaluate the loss value "
-                     "reported in this trace. ",
-                     MakeTraceSourceAccessor (&SingleModelSpectrumChannel::m_pathLossTrace))
+                     "This trace is fired whenever a new path loss value "
+                     "is calculated. The first and second parameters "
+                     "to the trace are pointers respectively to the TX and "
+                     "RX SpectrumPhy instances, whereas the third parameters "
+                     "is the loss value in dB. Note that the loss value "
+                     "reported by this trace is the single-frequency loss "
+                     "value obtained by evaluating only the TX and RX "
+                     "AntennaModels and the PropagationLossModel. "
+                     "In particular, note that SpectrumPropagationLossModel "
+                     "(even if present) is never used to evaluate the "
+                     "loss value reported in this trace. ",
+                     MakeTraceSourceAccessor (&SingleModelSpectrumChannel::m_pathLossTrace),
+                     "ns3::SpectrumChannel::LossTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/spectrum/model/spectrum-analyzer.cc ns-3.22/src/spectrum/model/spectrum-analyzer.cc
--- ns-3.21/src/spectrum/model/spectrum-analyzer.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-analyzer.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 
 #include "spectrum-analyzer.h"
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumAnalyzer");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumAnalyzer");
+
 NS_OBJECT_ENSURE_REGISTERED (SpectrumAnalyzer);
 
 SpectrumAnalyzer::SpectrumAnalyzer ()
@@ -73,19 +73,24 @@
     .SetParent<SpectrumPhy> ()
     .AddConstructor<SpectrumAnalyzer> ()
     .AddAttribute ("Resolution",
-                   "the lengh of the time interval over which the power spectral "
-                   "density of incoming signals is averaged",
+                   "The lengh of the time interval over which the "
+                   "power spectral density of incoming signals is averaged",
                    TimeValue (MilliSeconds (1)),
                    MakeTimeAccessor (&SpectrumAnalyzer::m_resolution),
                    MakeTimeChecker ())
     .AddAttribute ("NoisePowerSpectralDensity",
-                   "the power spectral density of the measuring instrument noise, in Watt/Hz. Mostly useful to make spectrograms look more similar to those obtained by real devices. Defaults to the value for thermal noise at 300K.",
+                   "The power spectral density of the measuring instrument "
+                   "noise, in Watt/Hz. Mostly useful to make spectrograms "
+                   "look more similar to those obtained by real devices. "
+                   "Defaults to the value for thermal noise at 300K.",
                    DoubleValue (1.38e-23 * 300),
                    MakeDoubleAccessor (&SpectrumAnalyzer::m_noisePowerSpectralDensity),
                    MakeDoubleChecker<double> ())
     .AddTraceSource ("AveragePowerSpectralDensityReport",
-                     "Trace fired whenever a new value for the average Power Spectral Density is calculated",
-                     MakeTraceSourceAccessor (&SpectrumAnalyzer::m_averagePowerSpectralDensityReportTrace))
+                     "Trace fired whenever a new value for the average "
+                     "Power Spectral Density is calculated",
+                     MakeTraceSourceAccessor (&SpectrumAnalyzer::m_averagePowerSpectralDensityReportTrace),
+                     "ns3::SpectrumValue::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/spectrum/model/spectrum-channel.h ns-3.22/src/spectrum/model/spectrum-channel.h
--- ns-3.21/src/spectrum/model/spectrum-channel.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-channel.h	2015-02-05 15:46:22.000000000 -0800
@@ -95,6 +95,17 @@
    */
   virtual void AddRx (Ptr<SpectrumPhy> phy) = 0;
 
+  /**
+   * TracedCallback signature for path loss calculation events.
+   *
+   * \param [in] txPhy The TX SpectrumPhy instance.
+   * \param [in] rxPhy The RX SpectrumPhy instance.
+   * \param [in] lossDb The loss value, in dB.
+   */
+  typedef void (* LossTracedCallback)
+    (const Ptr<const SpectrumPhy> txPhy, const Ptr<const SpectrumPhy> rxPhy,
+     const double lossDb);
+  
 };
 
 
diff -Naur ns-3.21/src/spectrum/model/spectrum-converter.cc ns-3.22/src/spectrum/model/spectrum-converter.cc
--- ns-3.21/src/spectrum/model/spectrum-converter.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-converter.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumConverter");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumConverter");
+
 SpectrumConverter::SpectrumConverter ()
 {
 }
diff -Naur ns-3.21/src/spectrum/model/spectrum-error-model.cc ns-3.22/src/spectrum/model/spectrum-error-model.cc
--- ns-3.21/src/spectrum/model/spectrum-error-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-error-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include <ns3/nstime.h>
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("ShannonSpectrumErrorModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ShannonSpectrumErrorModel");
+
 NS_OBJECT_ENSURE_REGISTERED (SpectrumErrorModel);
 
 TypeId
diff -Naur ns-3.21/src/spectrum/model/spectrum-interference.cc ns-3.22/src/spectrum/model/spectrum-interference.cc
--- ns-3.21/src/spectrum/model/spectrum-interference.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-interference.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,9 @@
 #include <ns3/log.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumInterference");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumInterference");
 
 SpectrumInterference::SpectrumInterference ()
   : m_receiving (false),
diff -Naur ns-3.21/src/spectrum/model/spectrum-model.cc ns-3.22/src/spectrum/model/spectrum-model.cc
--- ns-3.21/src/spectrum/model/spectrum-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,12 +27,9 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumModel");
-
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumModel");
 
 bool operator== (const SpectrumModel& lhs, const SpectrumModel& rhs)
 {
diff -Naur ns-3.21/src/spectrum/model/spectrum-phy.cc ns-3.22/src/spectrum/model/spectrum-phy.cc
--- ns-3.21/src/spectrum/model/spectrum-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,11 +25,10 @@
 #include <ns3/spectrum-channel.h>
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumPhy");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (SpectrumPhy);
 
 
diff -Naur ns-3.21/src/spectrum/model/spectrum-propagation-loss-model.cc ns-3.22/src/spectrum/model/spectrum-propagation-loss-model.cc
--- ns-3.21/src/spectrum/model/spectrum-propagation-loss-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-propagation-loss-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "spectrum-propagation-loss-model.h"
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumPropagationLossModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumPropagationLossModel");
+
 NS_OBJECT_ENSURE_REGISTERED (SpectrumPropagationLossModel);
 
 SpectrumPropagationLossModel::SpectrumPropagationLossModel ()
diff -Naur ns-3.21/src/spectrum/model/spectrum-signal-parameters.cc ns-3.22/src/spectrum/model/spectrum-signal-parameters.cc
--- ns-3.21/src/spectrum/model/spectrum-signal-parameters.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-signal-parameters.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include <ns3/antenna-model.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumSignalParameters");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumSignalParameters");
+
 SpectrumSignalParameters::SpectrumSignalParameters ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.21/src/spectrum/model/spectrum-value.cc ns-3.22/src/spectrum/model/spectrum-value.cc
--- ns-3.21/src/spectrum/model/spectrum-value.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-value.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,11 +23,9 @@
 #include <ns3/math.h>
 #include <ns3/log.h>
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumValue");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumValue");
 
 SpectrumValue::SpectrumValue ()
 {
diff -Naur ns-3.21/src/spectrum/model/spectrum-value.h ns-3.22/src/spectrum/model/spectrum-value.h
--- ns-3.21/src/spectrum/model/spectrum-value.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/spectrum-value.h	2015-02-05 15:46:22.000000000 -0800
@@ -503,6 +503,12 @@
    */
   Ptr<SpectrumValue> Copy () const;
 
+  /**
+   *  TracedCallback signature for SpectrumValue.
+   *
+   * \param [in] value Value of the traced variable.
+   */
+  typedef void (* TracedCallback)(const Ptr<const SpectrumValue> value);
 
 
 private:
diff -Naur ns-3.21/src/spectrum/model/waveform-generator.cc ns-3.22/src/spectrum/model/waveform-generator.cc
--- ns-3.21/src/spectrum/model/waveform-generator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/waveform-generator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,19 +28,18 @@
 
 #include "waveform-generator.h"
 
-NS_LOG_COMPONENT_DEFINE ("WaveformGenerator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WaveformGenerator");
+
 NS_OBJECT_ENSURE_REGISTERED (WaveformGenerator);
 
 WaveformGenerator::WaveformGenerator ()
   : m_mobility (0),
-    m_netDevice (0),
-    m_channel (0),
-    m_txPowerSpectralDensity (0),
-    m_startTime (Seconds (0)),
-    m_active (false)
+  m_netDevice (0),
+  m_channel (0),
+  m_txPowerSpectralDensity (0),
+  m_startTime (Seconds (0))
 {
 
 }
@@ -59,6 +58,10 @@
   m_channel = 0;
   m_netDevice = 0;
   m_mobility = 0;
+  if (m_nextWave.IsRunning ())
+    {
+      m_nextWave.Cancel ();
+    }
 }
 
 TypeId
@@ -81,10 +84,12 @@
                    MakeDoubleChecker<double> ())
     .AddTraceSource ("TxStart",
                      "Trace fired when a new transmission is started",
-                     MakeTraceSourceAccessor (&WaveformGenerator::m_phyTxStartTrace))
+                     MakeTraceSourceAccessor (&WaveformGenerator::m_phyTxStartTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("TxEnd",
                      "Trace fired when a previosuly started transmission is finished",
-                     MakeTraceSourceAccessor (&WaveformGenerator::m_phyTxEndTrace))
+                     MakeTraceSourceAccessor (&WaveformGenerator::m_phyTxEndTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
@@ -203,11 +208,8 @@
   m_phyTxStartTrace (0);
   m_channel->StartTx (txParams);
 
-  if (m_active)
-    {
-      NS_LOG_LOGIC ("scheduling next waveform");
-      Simulator::Schedule (m_period, &WaveformGenerator::GenerateWaveform, this);
-    }
+  NS_LOG_LOGIC ("scheduling next waveform");
+  m_nextWave = Simulator::Schedule (m_period, &WaveformGenerator::GenerateWaveform, this);
 }
 
 
@@ -215,12 +217,11 @@
 WaveformGenerator::Start ()
 {
   NS_LOG_FUNCTION (this);
-  if (!m_active)
+  if (!m_nextWave.IsRunning ())
     {
       NS_LOG_LOGIC ("generator was not active, now starting");
-      m_active = true;
       m_startTime = Now ();
-      Simulator::ScheduleNow (&WaveformGenerator::GenerateWaveform, this);
+      m_nextWave = Simulator::ScheduleNow (&WaveformGenerator::GenerateWaveform, this);
     }
 }
 
@@ -229,8 +230,10 @@
 WaveformGenerator::Stop ()
 {
   NS_LOG_FUNCTION (this);
-  m_active = false;
-}
-
+  if (m_nextWave.IsRunning ())
+    {
+      m_nextWave.Cancel ();
 
+    }
+}
 } // namespace ns3
diff -Naur ns-3.21/src/spectrum/model/waveform-generator.h ns-3.22/src/spectrum/model/waveform-generator.h
--- ns-3.21/src/spectrum/model/waveform-generator.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/model/waveform-generator.h	2015-02-05 15:46:22.000000000 -0800
@@ -30,6 +30,7 @@
 #include <ns3/spectrum-phy.h>
 #include <ns3/spectrum-channel.h>
 #include <ns3/trace-source-accessor.h>
+#include <ns3/event-id.h>
 
 namespace ns3 {
 
@@ -105,9 +106,9 @@
    */
   double GetDutyCycle () const;
 
-  /** 
+  /**
    * set the AntennaModel to be used
-   * 
+   *
    * \param a the Antenna Model
    */
   void SetAntenna (Ptr<AntennaModel> a);
@@ -139,7 +140,7 @@
   Time   m_period;
   double m_dutyCycle;
   Time m_startTime;
-  bool m_active;
+  EventId m_nextWave;
 
   TracedCallback<Ptr<const Packet> > m_phyTxStartTrace;
   TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;
diff -Naur ns-3.21/src/spectrum/test/spectrum-ideal-phy-test.cc ns-3.22/src/spectrum/test/spectrum-ideal-phy-test.cc
--- ns-3.21/src/spectrum/test/spectrum-ideal-phy-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/test/spectrum-ideal-phy-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -50,10 +50,9 @@
 #include <ns3/config.h>
 
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumIdealPhyTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumIdealPhyTest");
 
 static uint64_t g_rxBytes;
 static double g_bandwidth = 20e6; // Hz
diff -Naur ns-3.21/src/spectrum/test/spectrum-interference-test.cc ns-3.22/src/spectrum/test/spectrum-interference-test.cc
--- ns-3.21/src/spectrum/test/spectrum-interference-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/test/spectrum-interference-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,9 @@
 #include <ns3/ptr.h>
 #include <iostream>
 
-NS_LOG_COMPONENT_DEFINE ("SpectrumInterferenceTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("SpectrumInterferenceTest");
 
 
 
diff -Naur ns-3.21/src/spectrum/test/spectrum-test.h ns-3.22/src/spectrum/test/spectrum-test.h
--- ns-3.21/src/spectrum/test/spectrum-test.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/test/spectrum-test.h	2015-02-05 15:46:22.000000000 -0800
@@ -41,9 +41,6 @@
   NS_TEST_ASSERT_MSG_SPECTRUM_MODEL_EQ_TOL_INTERNAL (actual, expected, tol, msg, __FILE__, __LINE__)
 
 
-/**
- * \internal
- */
 #define NS_TEST_ASSERT_MSG_SPECTRUM_MODEL_EQ_TOL_INTERNAL(actual, expected, tol, msg, file, line) \
   do                                                                           \
     {                                                                          \
@@ -105,9 +102,6 @@
   NS_TEST_ASSERT_MSG_SPECTRUM_VALUE_EQ_TOL_INTERNAL (actual, expected, tol, msg, __FILE__, __LINE__)
 
 
-/**
- * \internal
- */
 #define NS_TEST_ASSERT_MSG_SPECTRUM_VALUE_EQ_TOL_INTERNAL(actual, expected, tol, msg, file, line) \
   do                                                                           \
     {                                                                          \
diff -Naur ns-3.21/src/spectrum/test/spectrum-value-test.cc ns-3.22/src/spectrum/test/spectrum-value-test.cc
--- ns-3.21/src/spectrum/test/spectrum-value-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/test/spectrum-value-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,9 @@
 
 #include "spectrum-test.h"
 
-// NS_LOG_COMPONENT_DEFINE ("SpectrumValueTest");
-
 using namespace ns3;
 
+// NS_LOG_COMPONENT_DEFINE ("SpectrumValueTest");
 
 #define TOLERANCE 1e-6
 
diff -Naur ns-3.21/src/spectrum/test/spectrum-waveform-generator-test.cc ns-3.22/src/spectrum/test/spectrum-waveform-generator-test.cc
--- ns-3.21/src/spectrum/test/spectrum-waveform-generator-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/spectrum/test/spectrum-waveform-generator-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,121 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 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: Luis Pacheco <luisbelem@gmail.com>
+ */
+#include <ns3/core-module.h>
+#include <ns3/test.h>
+#include <ns3/spectrum-module.h>
+
+
+NS_LOG_COMPONENT_DEFINE ("WaveformGeneratorTest");
+
+using namespace ns3;
+
+
+
+class WaveformGeneratorTestCase : public TestCase
+{
+public:
+  WaveformGeneratorTestCase (double period, double dutyCycle, double stop);
+  virtual ~WaveformGeneratorTestCase ();
+
+private:
+  virtual void DoRun (void);
+
+  void    TraceWave (Ptr<const Packet> newPkt);
+  double  m_period;
+  double  m_dutyCycle;
+  double  m_stop;
+  int     m_fails;
+};
+
+void
+WaveformGeneratorTestCase::TraceWave (Ptr<const Packet> newPkt)
+{
+  if (Now ().GetSeconds () > m_stop)
+    {
+      m_fails++;
+    }
+}
+
+WaveformGeneratorTestCase::WaveformGeneratorTestCase (double period, double dutyCycle, double stop)
+  : TestCase ("Check stop method"),
+  m_period (period),
+  m_dutyCycle (dutyCycle),
+  m_stop (stop),
+  m_fails (0)
+{
+}
+
+WaveformGeneratorTestCase::~WaveformGeneratorTestCase ()
+{
+}
+
+
+void
+WaveformGeneratorTestCase::DoRun (void)
+{
+  Ptr<SpectrumValue> txPsd = MicrowaveOvenSpectrumValueHelper::CreatePowerSpectralDensityMwo1 ();
+
+  SpectrumChannelHelper channelHelper = SpectrumChannelHelper::Default ();
+  channelHelper.SetChannel ("ns3::SingleModelSpectrumChannel");
+  Ptr<SpectrumChannel> channel = channelHelper.Create ();
+
+  Ptr<Node> n = CreateObject<Node> ();
+
+  WaveformGeneratorHelper waveformGeneratorHelper;
+  waveformGeneratorHelper.SetTxPowerSpectralDensity (txPsd);
+  waveformGeneratorHelper.SetChannel (channel);
+  waveformGeneratorHelper.SetPhyAttribute ("Period", TimeValue (Seconds (m_period)));
+  waveformGeneratorHelper.SetPhyAttribute ("DutyCycle", DoubleValue (m_dutyCycle));
+  NetDeviceContainer waveformGeneratorDevices = waveformGeneratorHelper.Install (n);
+
+  Ptr<WaveformGenerator> wave = waveformGeneratorDevices.Get (0)->GetObject<NonCommunicatingNetDevice> ()->GetPhy ()->GetObject<WaveformGenerator> ();
+
+  wave->TraceConnectWithoutContext ("TxStart", MakeCallback (&WaveformGeneratorTestCase::TraceWave,this));
+
+  Simulator::Schedule (Seconds (1.0), &WaveformGenerator::Start, wave);
+  Simulator::Schedule (Seconds (m_stop), &WaveformGenerator::Stop, wave);
+
+  Simulator::Stop (Seconds (3.0));
+  Simulator::Run ();
+
+  NS_TEST_ASSERT_MSG_EQ (m_fails, 0, "Wave started after the stop method was called");
+
+  Simulator::Destroy ();
+}
+
+
+class WaveformGeneratorTestSuite : public TestSuite
+{
+public:
+  WaveformGeneratorTestSuite ();
+};
+
+WaveformGeneratorTestSuite::WaveformGeneratorTestSuite ()
+  : TestSuite ("waveform-generator", SYSTEM)
+{
+  NS_LOG_INFO ("creating WaveformGeneratorTestSuite");
+
+  // Stop while wave is active
+  AddTestCase (new WaveformGeneratorTestCase (1.0, 0.5, 1.2), TestCase::QUICK);
+  // Stop after wave
+  AddTestCase (new WaveformGeneratorTestCase (1.0, 0.5, 1.7), TestCase::QUICK);
+}
+
+static WaveformGeneratorTestSuite g_waveformGeneratorTestSuite;
diff -Naur ns-3.21/src/spectrum/wscript ns-3.22/src/spectrum/wscript
--- ns-3.21/src/spectrum/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/spectrum/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -39,6 +39,7 @@
         'test/spectrum-interference-test.cc',
         'test/spectrum-value-test.cc',
         'test/spectrum-ideal-phy-test.cc',
+        'test/spectrum-waveform-generator-test.cc',
         ]
     
     headers = bld(features='ns3header')
diff -Naur ns-3.21/src/stats/bindings/modulegen__gcc_ILP32.py ns-3.22/src/stats/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/stats/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -176,6 +176,8 @@
     module.add_class('SqliteDataOutput', parent=root_module['ns3::DataOutputInterface'])
     ## time-data-calculators.h (module 'stats'): ns3::TimeMinMaxAvgTotalCalculator [class]
     module.add_class('TimeMinMaxAvgTotalCalculator', parent=root_module['ns3::DataCalculator'])
+    ## time-probe.h (module 'stats'): ns3::TimeProbe [class]
+    module.add_class('TimeProbe', parent=root_module['ns3::Probe'])
     ## 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]
@@ -330,6 +332,7 @@
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3SqliteDataOutput_methods(root_module, root_module['ns3::SqliteDataOutput'])
     register_Ns3TimeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::TimeMinMaxAvgTotalCalculator'])
+    register_Ns3TimeProbe_methods(root_module, root_module['ns3::TimeProbe'])
     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'])
@@ -499,10 +502,6 @@
     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', 
@@ -681,10 +680,6 @@
     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', 
@@ -747,10 +742,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1185,7 +1180,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1236,6 +1236,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1312,6 +1317,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1346,6 +1355,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -2318,14 +2329,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -2363,8 +2374,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -2385,10 +2396,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3EventImpl_methods(root_module, cls):
@@ -2820,6 +2831,42 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TimeProbe_methods(root_module, cls):
+    ## time-probe.h (module 'stats'): ns3::TimeProbe::TimeProbe(ns3::TimeProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimeProbe const &', 'arg0')])
+    ## time-probe.h (module 'stats'): ns3::TimeProbe::TimeProbe() [constructor]
+    cls.add_constructor([])
+    ## time-probe.h (module 'stats'): bool ns3::TimeProbe::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)
+    ## time-probe.h (module 'stats'): void ns3::TimeProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## time-probe.h (module 'stats'): static ns3::TypeId ns3::TimeProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## time-probe.h (module 'stats'): double ns3::TimeProbe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## time-probe.h (module 'stats'): void ns3::TimeProbe::SetValue(ns3::Time value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Time', 'value')])
+    ## time-probe.h (module 'stats'): static void ns3::TimeProbe::SetValueByPath(std::string path, ns3::Time value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Time', 'value')], 
+                   is_static=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')])
diff -Naur ns-3.21/src/stats/bindings/modulegen__gcc_LP64.py ns-3.22/src/stats/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/stats/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -176,6 +176,8 @@
     module.add_class('SqliteDataOutput', parent=root_module['ns3::DataOutputInterface'])
     ## time-data-calculators.h (module 'stats'): ns3::TimeMinMaxAvgTotalCalculator [class]
     module.add_class('TimeMinMaxAvgTotalCalculator', parent=root_module['ns3::DataCalculator'])
+    ## time-probe.h (module 'stats'): ns3::TimeProbe [class]
+    module.add_class('TimeProbe', parent=root_module['ns3::Probe'])
     ## 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]
@@ -330,6 +332,7 @@
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
     register_Ns3SqliteDataOutput_methods(root_module, root_module['ns3::SqliteDataOutput'])
     register_Ns3TimeMinMaxAvgTotalCalculator_methods(root_module, root_module['ns3::TimeMinMaxAvgTotalCalculator'])
+    register_Ns3TimeProbe_methods(root_module, root_module['ns3::TimeProbe'])
     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'])
@@ -499,10 +502,6 @@
     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', 
@@ -681,10 +680,6 @@
     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', 
@@ -747,10 +742,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1185,7 +1180,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1236,6 +1236,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1312,6 +1317,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1346,6 +1355,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -2318,14 +2329,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -2363,8 +2374,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -2385,10 +2396,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3EventImpl_methods(root_module, cls):
@@ -2820,6 +2831,42 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3TimeProbe_methods(root_module, cls):
+    ## time-probe.h (module 'stats'): ns3::TimeProbe::TimeProbe(ns3::TimeProbe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimeProbe const &', 'arg0')])
+    ## time-probe.h (module 'stats'): ns3::TimeProbe::TimeProbe() [constructor]
+    cls.add_constructor([])
+    ## time-probe.h (module 'stats'): bool ns3::TimeProbe::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)
+    ## time-probe.h (module 'stats'): void ns3::TimeProbe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_virtual=True)
+    ## time-probe.h (module 'stats'): static ns3::TypeId ns3::TimeProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## time-probe.h (module 'stats'): double ns3::TimeProbe::GetValue() const [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## time-probe.h (module 'stats'): void ns3::TimeProbe::SetValue(ns3::Time value) [member function]
+    cls.add_method('SetValue', 
+                   'void', 
+                   [param('ns3::Time', 'value')])
+    ## time-probe.h (module 'stats'): static void ns3::TimeProbe::SetValueByPath(std::string path, ns3::Time value) [member function]
+    cls.add_method('SetValueByPath', 
+                   'void', 
+                   [param('std::string', 'path'), param('ns3::Time', 'value')], 
+                   is_static=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')])
diff -Naur ns-3.21/src/stats/doc/data-collection-helpers.rst ns-3.22/src/stats/doc/data-collection-helpers.rst
--- ns-3.21/src/stats/doc/data-collection-helpers.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/doc/data-collection-helpers.rst	2015-02-05 15:46:22.000000000 -0800
@@ -75,7 +75,7 @@
                        const std::string &yLegend,
                        const std::string &terminalType = ".png");
 
-The second statement hooks the ``Probe`` of interest:
+The second statement hooks the trace source of interest:
 
 ::
 
@@ -87,9 +87,9 @@
 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)
+* path:  The path in the |ns3| configuration namespace to one or more trace sources 
+* probeTraceSource:  Which output of the probe (itself a trace source) should be plotted
+* title:  The title to associate with the dataset(s) (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.
@@ -102,20 +102,41 @@
    GnuplotHelper plotHelper;
  
    // Configure the plot.
+   // 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",
                              "png");
 
-   // Plot the values generated by the probe.
-   plotHelper.PlotProbe ("ns3::Ipv4PacketProbe",
-                         "/NodeList/*/$ns3::Ipv4L3Protocol/Tx",
+   // Specify the probe type, trace source 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 (probeType,
+                         tracePath,
                          "OutputBytes",
                          "Packet Byte Count",
                          GnuplotAggregator::KEY_BELOW);
 
-Note that the path specified may contain wildcards.  In this case, multiple
+In this example, the ``probeType`` and ``tracePath`` are as follows (for IPv4):
+
+::
+
+   probeType = "ns3::Ipv4PacketProbe";
+   tracePath = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
+
+The probeType is a key parameter for this helper to work.  This TypeId
+must be registered in the system, and the signature on the Probe's trace
+sink must match that of the trace source it is being hooked to.  Probe
+types are pre-defined for a number of data types corresponding to |ns3|
+traced values, and for a few other trace source signatures such as the 
+'Tx' trace source of ``ns3::Ipv4L3Protocol`` class.
+
+Note that the trace source 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:
@@ -224,10 +245,10 @@
   | Argument         | Description                  |
   +==================+==============================+
   | typeId           | The type ID for the probe    |
-  |                  | used when it is created.     |
+  |                  | created by this helper.      |
   +------------------+------------------------------+
   | path             | Config path to access the    |
-  |                  | probe.                       |
+  |                  | trace source.                |
   +------------------+------------------------------+
   | probeTraceSource | The probe trace source to    |
   |                  | access.                      |
@@ -242,7 +263,8 @@
   
 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. 
+probe created by the helper, and then plotting the values from the 
+probeTraceSource. 
 The dataset will have the provided title, and will consist of 
 the 'newValue' at each timestamp.
 
@@ -256,7 +278,8 @@
 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:
+``seventh.cc`` code described above where it was used (with
+variable substitution) as follows:
 
 ::
 
@@ -273,11 +296,8 @@
 ~~~~~~~~~~~~~~~~~~~~~~
 
 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.
+found in ``src/stats/examples/gnuplot-helper-example.cc``.  The 
+following 2-D gnuplot was created using the example.
 
 .. _gnuplot-helper-example:
 
@@ -286,7 +306,7 @@
   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 
+its counter according to a Poisson process and then emits the counter's 
 value as a trace source.
 
 ::
@@ -294,25 +314,10 @@
   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 
+"Emitter Count", with no extra suffixes like one would 
 see if there were wildcards in the path.
 
 ::
@@ -329,8 +334,8 @@
 
   // 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",
+  plotHelper.PlotProbe ("ns3::Uinteger32Probe",
+                        "/Names/Emitter/Counter",
                         "Output",
                         "Emitter Count",
                         GnuplotAggregator::KEY_INSIDE);
@@ -492,10 +497,10 @@
   | Argument         | Description                  |
   +==================+==============================+
   | typeId           | The type ID for the probe    |
-  |                  | used when it is created.     |
+  |                  | to be created.               |
   +------------------+------------------------------+
   | path             | Config path to access the    |
-  |                  | probe.                       |
+  |                  | trace source.                |
   +------------------+------------------------------+
   | probeTraceSource | The probe trace source to    |
   |                  | access.                      |
@@ -503,7 +508,7 @@
   
 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
+with a probe created by the helper, 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.
@@ -537,9 +542,7 @@
 
 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.
+This example only uses the FileHelper.
 
 The following text file with 2 columns of formatted values named 
 ``file-helper-example.txt`` was created using the example.  
@@ -547,21 +550,19 @@
 
 .. sourcecode:: text
 
-  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
-  
+  Time (Seconds) = 0.203  Count = 1
+  Time (Seconds) = 0.702  Count = 2
+  Time (Seconds) = 1.404  Count = 3
+  Time (Seconds) = 2.368  Count = 4
+  Time (Seconds) = 3.364  Count = 5
+  Time (Seconds) = 3.579  Count = 6
+  Time (Seconds) = 5.873  Count = 7
+  Time (Seconds) = 6.410  Count = 8
+  Time (Seconds) = 6.472  Count = 9
   ...
 
 In this example, there is an Emitter object that increments 
-its counter at various random times and then emits the counter's 
+its counter according to a Poisson process and then emits the counter's 
 value as a trace source.
 
 ::
@@ -569,21 +570,6 @@
   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 
@@ -604,8 +590,8 @@
 
   // 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",
+  fileHelper.WriteProbe ("ns3::Uinteger32Probe",
+                         "/Names/Emitter/Counter",
                          "Output");
 
 Scope and Limitations
@@ -619,11 +605,12 @@
 - Uinteger8Probe
 - Uinteger16Probe
 - Uinteger32Probe
+- TimeProbe
 - PacketProbe
 - ApplicationPacketProbe
 - Ipv4PacketProbe
 
-These Probes, therefore, are the only ones available to be used 
+These Probes, therefore, are the only TypeIds available to be used 
 in ``PlotProbe()`` and ``WriteProbe()``.
 
 In the next few sections, we cover each of the fundamental object
diff -Naur ns-3.21/src/stats/doc/scope-and-limitations.rst ns-3.22/src/stats/doc/scope-and-limitations.rst
--- ns-3.21/src/stats/doc/scope-and-limitations.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/doc/scope-and-limitations.rst	2015-02-05 15:46:22.000000000 -0800
@@ -18,6 +18,7 @@
 - Uinteger8Probe
 - Uinteger16Probe
 - Uinteger32Probe
+- TimeProbe
 - PacketProbe
 - ApplicationPacketProbe
 - Ipv4PacketProbe
diff -Naur ns-3.21/src/stats/examples/double-probe-example.cc ns-3.22/src/stats/examples/double-probe-example.cc
--- ns-3.21/src/stats/examples/double-probe-example.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/examples/double-probe-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -60,7 +60,8 @@
     .SetParent<Object> ()
     .AddTraceSource ("Counter",
                      "sample counter",
-                     MakeTraceSourceAccessor (&Emitter::m_counter))
+                     MakeTraceSourceAccessor (&Emitter::m_counter),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/stats/examples/file-helper-example.cc ns-3.22/src/stats/examples/file-helper-example.cc
--- ns-3.21/src/stats/examples/file-helper-example.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/examples/file-helper-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,11 @@
 
 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.
- */
+//
+// This is our test object, an object that increments a counter according
+// to a Poisson process, and exports the (integer-valued) count as a
+// trace source.
+//
 class Emitter : public Object
 {
 public:
@@ -45,10 +46,9 @@
   Emitter ();
 private:
   void DoInitialize (void);
-  void Emit (void);
   void Count (void);
 
-  TracedValue<double> m_counter;  // normally this would be integer type
+  TracedValue<uint32_t> m_counter;
   Ptr<ExponentialRandomVariable> m_var;
 
 };
@@ -63,7 +63,8 @@
     .SetParent<Object> ()
     .AddTraceSource ("Counter",
                      "sample counter",
-                     MakeTraceSourceAccessor (&Emitter::m_counter))
+                     MakeTraceSourceAccessor (&Emitter::m_counter),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
@@ -79,19 +80,10 @@
 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);
@@ -114,18 +106,6 @@
   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.
   //
 
@@ -137,12 +117,12 @@
                             FileAggregator::FORMATTED);
 
   // Set the labels for this formatted output file.
-  fileHelper.Set2dFormat ("Time (Seconds) = %.3e\tCount = %.0f");
+  fileHelper.Set2dFormat ("Time (Seconds) = %.3f\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",
+  fileHelper.WriteProbe ("ns3::Uinteger32Probe",
+                         "/Names/Emitter/Counter",
                          "Output");
 
   // The Emitter object is not associated with an ns-3 node, so
diff -Naur ns-3.21/src/stats/examples/gnuplot-helper-example.cc ns-3.22/src/stats/examples/gnuplot-helper-example.cc
--- ns-3.21/src/stats/examples/gnuplot-helper-example.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/examples/gnuplot-helper-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,11 @@
 
 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.
- */
+//
+// This is our test object, an object that increments a counter according
+// to a Poisson process, and exports the (integer-valued) count as a
+// trace source.
+//
 class Emitter : public Object
 {
 public:
@@ -45,12 +46,10 @@
   Emitter ();
 private:
   void DoInitialize (void);
-  void Emit (void);
   void Count (void);
 
-  TracedValue<double> m_counter;  // normally this would be integer type
+  TracedValue<uint32_t> m_counter;
   Ptr<ExponentialRandomVariable> m_var;
-
 };
 
 NS_OBJECT_ENSURE_REGISTERED (Emitter);
@@ -63,7 +62,8 @@
     .SetParent<Object> ()
     .AddTraceSource ("Counter",
                      "sample counter",
-                     MakeTraceSourceAccessor (&Emitter::m_counter))
+                     MakeTraceSourceAccessor (&Emitter::m_counter),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
@@ -79,19 +79,10 @@
 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);
@@ -114,18 +105,6 @@
   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.
   //
@@ -133,17 +112,19 @@
   // Create the gnuplot helper.
   GnuplotHelper plotHelper;
 
-  // Configure the plot.
+  // Configure the plot.  Arguments include file prefix, plot title,
+  // x-label, y-label, and output file type
   plotHelper.ConfigurePlot ("gnuplot-helper-example",
-                            "Emitter Counts vs. Time",
+                            "Emitter Count 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",
+  // Create a probe.  Because the trace source we are interested in is 
+  // of type uint32_t, we specify the type of probe to use by the first
+  // argument specifying its ns3 TypeId.
+  plotHelper.PlotProbe ("ns3::Uinteger32Probe",
+                        "/Names/Emitter/Counter",
                         "Output",
                         "Emitter Count",
                         GnuplotAggregator::KEY_INSIDE);
diff -Naur ns-3.21/src/stats/examples/time-probe-example.cc ns-3.22/src/stats/examples/time-probe-example.cc
--- ns-3.21/src/stats/examples/time-probe-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/stats/examples/time-probe-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,248 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 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::TimeProbe.
+// A test object is used to emit values through a trace source.  The 
+// example shows three ways to use a ns3::TimeProbe to hook the output
+// of this trace source (in addition to hooking the raw trace source).
+//
+// It produces two types of output.  By default, it will generate a
+// gnuplot of interarrival times.  If the '--verbose=1' argument is passed,
+// it will also generate debugging output of the form (for example):
+//
+//     Emitting at 96.5378 seconds
+//     context: raw trace source old 0.293343 new 0.00760254
+//     context: probe1 old 0.293343 new 0.00760254
+//     context: probe2 old 0.293343 new 0.00760254
+//     context: probe3 old 0.293343 new 0.00760254
+//
+// The stopTime defaults to 100 seconds but can be changed by an argument.
+//
+
+#include <string>
+
+#include "ns3/core-module.h"
+#include "ns3/time-probe.h"
+#include "ns3/gnuplot-helper.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("TimeProbeExample");
+
+//
+// This is our test object, an object that emits values according to
+// a Poisson arrival process.   It emits a traced Time value as a 
+// trace source; this takes the value of interarrival time
+//
+class Emitter : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  Emitter ();
+private:
+  void DoInitialize (void);
+//  void Emit (void);
+  void Emit (void);
+
+  TracedValue<Time> m_interval;  
+  Time m_last;  
+  Ptr<ExponentialRandomVariable> m_var;
+};
+
+NS_OBJECT_ENSURE_REGISTERED (Emitter);
+
+TypeId
+Emitter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Emitter")
+    .AddConstructor<Emitter> ()
+    .SetParent<Object> ()
+    .AddTraceSource ("Interval",
+                     "Trace source",
+                     MakeTraceSourceAccessor (&Emitter::m_interval),
+                     "ns3::Time::TracedValueCallback")
+  ;
+  return tid;
+}
+
+Emitter::Emitter (void)
+  : m_interval (Seconds (0)),
+    m_last (Seconds (0))
+{
+  m_var = CreateObject<ExponentialRandomVariable> ();
+}
+
+void
+Emitter::DoInitialize (void)
+{
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Emit, this);
+}
+
+void
+Emitter::Emit (void)
+{
+  NS_LOG_DEBUG ("Emitting at " << Simulator::Now ().GetSeconds () << " seconds");
+  m_interval = Simulator::Now () - m_last;
+  m_last = Simulator::Now ();
+  TimeProbe::SetValueByPath ("/Names/probe3", m_interval);
+  Simulator::Schedule (Seconds (m_var->GetValue ()), &Emitter::Emit, this);
+}
+
+// This is a function to test hooking a raw function to the trace source
+void
+NotifyViaTraceSource (std::string context, Time oldVal, Time newVal)
+{
+  BooleanValue verbose;
+  GlobalValue::GetValueByName ("verbose", verbose);
+  if (verbose.Get ())
+    {
+      std::cout << "context: " << context << " old " << oldVal.GetSeconds () << " new " << newVal.GetSeconds () << std::endl;
+    }
+}
+
+// This is a function to test hooking it to the probe output
+void
+NotifyViaProbe (std::string context, double oldVal, double newVal)
+{
+  BooleanValue verbose;
+  GlobalValue::GetValueByName ("verbose", verbose);
+  if (verbose.Get ())
+    {
+      std::cout << "context: " << context << " old " << oldVal << " new " << newVal << std::endl;
+    }
+}
+
+static ns3::GlobalValue g_verbose ("verbose",
+                                   "Whether to enable verbose output",
+                                   ns3::BooleanValue (false),
+                                   ns3::MakeBooleanChecker ());
+
+int main (int argc, char *argv[])
+{
+  double stopTime = 100.0;
+  bool verbose = false;
+
+  CommandLine cmd;
+  cmd.AddValue ("stopTime", "Time (seconds) to terminate simulation", stopTime);
+  cmd.AddValue ("verbose", "Whether to enable verbose output", verbose);
+  cmd.Parse (argc, argv);
+  bool connected;
+
+  // Set a global value, so that the callbacks can access it
+  if (verbose)
+    {
+      GlobalValue::Bind ("verbose", BooleanValue (true));
+      LogComponentEnable ("TimeProbeExample", LOG_LEVEL_ALL);
+    }
+
+  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 ("Interval", "raw trace source", 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<TimeProbe> probe1 = CreateObject<TimeProbe> ();
+  // the probe's name can serve as its context in the tracing
+  probe1->SetName ("probe1");
+
+  // Connect the probe to the emitter's Interval
+  connected = probe1->ConnectByObject ("Interval", 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<TimeProbe> probe2 = CreateObject<TimeProbe> ();
+  probe2->SetName ("probe2");
+
+  // Note, no return value is checked here
+  probe2->ConnectByPath ("/Names/Emitter/Interval");
+
+  // 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", "probe2", 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<TimeProbe> probe3 = CreateObject<TimeProbe> ();
+  probe3->SetName ("probe3");
+
+  // By adding to the config database, we can access it later
+  Names::Add ("/Names/probe3", 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", "probe3", MakeCallback (&NotifyViaProbe));
+  NS_ASSERT_MSG (connected, "Trace source not connected to probe3 Output");
+
+  // Plot the interval values
+  GnuplotHelper plotHelper;
+  plotHelper.ConfigurePlot ("time-probe-example",
+                            "Emitter interarrivals vs. Time",
+                            "Simulation time (Seconds)",
+                            "Interarrival time (Seconds)",
+                            "png");
+
+  // Helper creates a TimeProbe and hooks it to the /Names/Emitter/Interval
+  // source.  Helper also takes the Output of the TimeProbe and plots it
+  // as a dataset labeled 'Emitter Interarrival Time'
+  plotHelper.PlotProbe ("ns3::TimeProbe",
+                        "/Names/Emitter/Interval",
+                        "Output",
+                        "Emitter Interarrival Time",
+                        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 (stopTime));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.21/src/stats/examples/wscript ns-3.22/src/stats/examples/wscript
--- ns-3.21/src/stats/examples/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/examples/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -10,6 +10,9 @@
     program = bld.create_ns3_program('double-probe-example', ['network', 'stats'])
     program.source = 'double-probe-example.cc'
 
+    program = bld.create_ns3_program('time-probe-example', ['stats'])
+    program.source = 'time-probe-example.cc'
+
     program = bld.create_ns3_program('gnuplot-aggregator-example', ['network', 'stats'])
     program.source = 'gnuplot-aggregator-example.cc'
 
diff -Naur ns-3.21/src/stats/helper/file-helper.cc ns-3.22/src/stats/helper/file-helper.cc
--- ns-3.21/src/stats/helper/file-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/helper/file-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -543,6 +543,13 @@
         MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
                       m_timeSeriesAdaptorMap[probeContext]));
     }
+  else if (m_probeMap[probeName].second == "ns3::TimeProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkDouble,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
   else
     {
       NS_FATAL_ERROR ("Unknown probe type " << m_probeMap[probeName].second << "; need to add support in the helper for this");
diff -Naur ns-3.21/src/stats/helper/file-helper.h ns-3.22/src/stats/helper/file-helper.h
--- ns-3.21/src/stats/helper/file-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/helper/file-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -75,7 +75,7 @@
 
   /**
    * \param typeId the type ID for the probe used when it is created.
-   * \param path Config path to access the probe.
+   * \param path Config path for underlying trace source to be probed
    * \param probeTraceSource the probe trace source to access.
    *
    * Creates output files generated by hooking the ns-3 trace source
@@ -84,6 +84,11 @@
    * in m_outputFileNameWithoutExtension plus ".txt", and will consist
    * of the 'newValue' at each timestamp.
    *
+   * This method will create one or more probes according to the TypeId 
+   * provided, connect the probe(s) to the trace source specified by
+   * the config path, and hook the probeTraceSource(s) to the downstream 
+   * aggregator.
+   *
    * 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
@@ -103,17 +108,6 @@
                    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.
@@ -254,6 +248,17 @@
 private:
   /**
    * \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 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.
diff -Naur ns-3.21/src/stats/helper/gnuplot-helper.cc ns-3.22/src/stats/helper/gnuplot-helper.cc
--- ns-3.21/src/stats/helper/gnuplot-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/helper/gnuplot-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -113,8 +113,8 @@
   // 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);
+  // Add a subtitle to the title to show the trace source's path.
+  aggregator->SetTitle ( m_title + " \\n\\nTrace Source Path: " + path);
 
   // Set the default dataset plotting style for the values.
   aggregator->Set2dDatasetDefaultStyle (Gnuplot2dDataset::LINES_POINTS);
@@ -128,7 +128,8 @@
   // See if the path has any wildcards.
   bool pathHasNoWildcards = path.find ("*") == std::string::npos;
 
-  // Remove the last token from the path.
+  // Remove the last token from the path; this should correspond to the 
+  // trace source attribute.
   size_t lastSlash = path.find_last_of ("/");
   if (lastSlash == std::string::npos)
     {
@@ -145,9 +146,11 @@
     }
 
   // See if there are any matches for the probe's path with the last
-  // token removed.
+  // token removed; this corresponds to the traced object itself.
+  NS_LOG_DEBUG ("Searching config database for trace source " << path);
   Config::MatchContainer matches = Config::LookupMatches (pathWithoutLastToken);
   uint32_t matchCount = matches.GetN ();
+  NS_LOG_DEBUG ("Found " << matchCount << " matches for trace source " << path);
 
   // This is used to make the probe's context be unique.
   std::string matchIdentifier;
@@ -400,6 +403,13 @@
         MakeCallback (&TimeSeriesAdaptor::TraceSinkUinteger32,
                       m_timeSeriesAdaptorMap[probeContext]));
     }
+  else if (m_probeMap[probeName].second == "ns3::TimeProbe")
+    {
+      m_probeMap[probeName].first->TraceConnectWithoutContext
+        (probeTraceSource,
+        MakeCallback (&TimeSeriesAdaptor::TraceSinkDouble,
+                      m_timeSeriesAdaptorMap[probeContext]));
+    }
   else
     {
       NS_FATAL_ERROR ("Unknown probe type " << m_probeMap[probeName].second << "; need to add support in the helper for this");
diff -Naur ns-3.21/src/stats/helper/gnuplot-helper.h ns-3.22/src/stats/helper/gnuplot-helper.h
--- ns-3.21/src/stats/helper/gnuplot-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/helper/gnuplot-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -95,7 +95,7 @@
 
   /**
    * \param typeId the type ID for the probe used when it is created.
-   * \param path Config path to access the probe.
+   * \param path Config path for underlying trace source to be probed
    * \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.
@@ -105,6 +105,11 @@
    * will have the provided title, and will consist of the 'newValue'
    * at each timestamp.
    *
+   * This method will create one or more probes according to the TypeId 
+   * provided, connect the probe(s) to the trace source specified by
+   * the config path, and hook the probeTraceSource(s) to the downstream 
+   * aggregator.
+   *
    * 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
@@ -121,17 +126,6 @@
                   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.
@@ -155,6 +149,18 @@
   Ptr<GnuplotAggregator> GetAggregator ();
 
 private:
+
+  /**
+   * \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);
+
   /**
    * \brief Constructs the aggregator.
    */
diff -Naur ns-3.21/src/stats/model/average.h ns-3.22/src/stats/model/average.h
--- ns-3.21/src/stats/model/average.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/average.h	2015-02-05 15:46:22.000000000 -0800
@@ -65,8 +65,7 @@
     m_max = 0;
   }
 
-  ///\name Sample statistics
-  //\{
+  // Sample statistics
   /// Sample size
   uint32_t Count   () const { return m_size; }
   /// Minimum
@@ -81,24 +80,40 @@
   double   Var     () const { return m_varianceCalculator.getVariance ();}
   /// Standard deviation
   double   Stddev  () const { return std::sqrt (Var ()); }
-  //\}
 
-  /** 
+  /**
    * \name Error of the mean estimates
    *
+   * @{
+   */
+  /**
+   * \brief Margin of error of the mean for 90% confidence level
+   *
    * 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 
+  /**
+   * \brief Margin of error of the mean for 95% confidence level 
+   *
+   * Note that estimates are valid for 
+   *   - uncorrelated measurements, 
+   *   - normal distribution and
+   *   - large enough sample size.
+   */
   double   Error95 () const { return 1.960 * std::sqrt (Var () / Count ()); }
-  /// Margin of error of the mean for 99% confidence level 
+  /**
+  * \brief Margin of error of the mean for 99% confidence level 
+   *
+   * Note that estimates are valid for 
+   *   - uncorrelated measurements, 
+   *   - normal distribution and
+   *   - large enough sample size.
+   */
   double   Error99 () const { return 2.576 * std::sqrt (Var () / Count ()); }
-  //\}
+  /**@}*/
 
 private:
   uint32_t m_size; //!< Number of sampled data.
diff -Naur ns-3.21/src/stats/model/basic-data-calculators.h ns-3.22/src/stats/model/basic-data-calculators.h
--- ns-3.21/src/stats/model/basic-data-calculators.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/basic-data-calculators.h	2015-02-05 15:46:22.000000000 -0800
@@ -51,6 +51,10 @@
    */
   void Reset ();
 
+  /**
+   * Outputs the data based on the provided callback
+   * \param callback
+   */
   virtual void Output (DataOutputCallback &callback) const;
 
   /**
diff -Naur ns-3.21/src/stats/model/boolean-probe.cc ns-3.22/src/stats/model/boolean-probe.cc
--- ns-3.21/src/stats/model/boolean-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/boolean-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("BooleanProbe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BooleanProbe");
+
 NS_OBJECT_ENSURE_REGISTERED (BooleanProbe);
 
 TypeId
@@ -42,7 +42,8 @@
     .AddConstructor<BooleanProbe> ()
     .AddTraceSource ( "Output",
                       "The bool that serves as output for this probe",
-                      MakeTraceSourceAccessor (&BooleanProbe::m_output))
+                      MakeTraceSourceAccessor (&BooleanProbe::m_output),
+                      "ns3::TracedValue::BoolCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/stats/model/boolean-probe.h ns-3.22/src/stats/model/boolean-probe.h
--- ns-3.21/src/stats/model/boolean-probe.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/boolean-probe.h	2015-02-05 15:46:22.000000000 -0800
@@ -98,8 +98,6 @@
    *
    * \param oldData previous value of the bool
    * \param newData new value of the bool
-   *
-   * \internal
    */
   void TraceSink (bool oldData, bool newData);
 
diff -Naur ns-3.21/src/stats/model/data-collection-object.cc ns-3.22/src/stats/model/data-collection-object.cc
--- ns-3.21/src/stats/model/data-collection-object.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/data-collection-object.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 
 #include "data-collection-object.h"
 
-NS_LOG_COMPONENT_DEFINE ("DataCollectionObject");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DataCollectionObject");
+
 NS_OBJECT_ENSURE_REGISTERED (DataCollectionObject);
 
 TypeId
diff -Naur ns-3.21/src/stats/model/data-output-interface.cc ns-3.22/src/stats/model/data-output-interface.cc
--- ns-3.21/src/stats/model/data-output-interface.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/data-output-interface.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,7 +26,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("DataOutputInterface");
 
-
 //--------------------------------------------------------------
 //----------------------------------------------
 DataOutputInterface::DataOutputInterface()
diff -Naur ns-3.21/src/stats/model/double-probe.cc ns-3.22/src/stats/model/double-probe.cc
--- ns-3.21/src/stats/model/double-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/double-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("DoubleProbe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DoubleProbe");
+
 NS_OBJECT_ENSURE_REGISTERED (DoubleProbe);
 
 TypeId
@@ -42,7 +42,8 @@
     .AddConstructor<DoubleProbe> ()
     .AddTraceSource ( "Output",
                       "The double that serves as output for this probe",
-                      MakeTraceSourceAccessor (&DoubleProbe::m_output))
+                      MakeTraceSourceAccessor (&DoubleProbe::m_output),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
@@ -84,7 +85,7 @@
 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));
+  NS_LOG_DEBUG ("Name of trace source (if any) in names database: " << Names::FindPath (obj));
   bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::DoubleProbe::TraceSink, this));
   return connected;
 }
@@ -93,7 +94,7 @@
 DoubleProbe::ConnectByPath (std::string path)
 {
   NS_LOG_FUNCTION (this << path);
-  NS_LOG_DEBUG ("Name of probe to search for in config database: " << path);
+  NS_LOG_DEBUG ("Name of trace source to search for in config database: " << path);
   Config::ConnectWithoutContext (path, MakeCallback (&ns3::DoubleProbe::TraceSink, this));
 }
 
diff -Naur ns-3.21/src/stats/model/gnuplot-aggregator.cc ns-3.22/src/stats/model/gnuplot-aggregator.cc
--- ns-3.21/src/stats/model/gnuplot-aggregator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/gnuplot-aggregator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,6 +29,7 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("GnuplotAggregator");
+
 NS_OBJECT_ENSURE_REGISTERED (GnuplotAggregator);
 
 TypeId
diff -Naur ns-3.21/src/stats/model/omnet-data-output.cc ns-3.22/src/stats/model/omnet-data-output.cc
--- ns-3.21/src/stats/model/omnet-data-output.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/omnet-data-output.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,7 +32,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("OmnetDataOutput");
 
-
 //--------------------------------------------------------------
 //----------------------------------------------
 OmnetDataOutput::OmnetDataOutput()
diff -Naur ns-3.21/src/stats/model/probe.cc ns-3.22/src/stats/model/probe.cc
--- ns-3.21/src/stats/model/probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/simulator.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Probe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Probe");
+
 NS_OBJECT_ENSURE_REGISTERED (Probe);
 
 TypeId
diff -Naur ns-3.21/src/stats/model/time-data-calculators.cc ns-3.22/src/stats/model/time-data-calculators.cc
--- ns-3.21/src/stats/model/time-data-calculators.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/time-data-calculators.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,7 +27,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("TimeDataCalculators");
 
-
 //--------------------------------------------------------------
 //----------------------------------------------
 TimeMinMaxAvgTotalCalculator::TimeMinMaxAvgTotalCalculator()
diff -Naur ns-3.21/src/stats/model/time-probe.cc ns-3.22/src/stats/model/time-probe.cc
--- ns-3.21/src/stats/model/time-probe.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/stats/model/time-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -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)
+ *
+ */
+
+#include "ns3/time-probe.h"
+#include "ns3/object.h"
+#include "ns3/log.h"
+#include "ns3/names.h"
+#include "ns3/config.h"
+#include "ns3/trace-source-accessor.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TimeProbe");
+
+NS_OBJECT_ENSURE_REGISTERED (TimeProbe);
+
+TypeId
+TimeProbe::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::TimeProbe")
+    .SetParent<Probe> ()
+    .AddConstructor<TimeProbe> ()
+    .AddTraceSource ("Output",
+                     "The double valued (units of seconds) probe output",
+                     MakeTraceSourceAccessor (&TimeProbe::m_output),
+                     "ns3::TracedValue::DoubleCallback")
+  ;
+  return tid;
+}
+
+TimeProbe::TimeProbe ()
+{
+  NS_LOG_FUNCTION (this);
+  m_output = 0;
+}
+
+TimeProbe::~TimeProbe ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+double
+TimeProbe::GetValue (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_output;
+}
+void
+TimeProbe::SetValue (Time newVal)
+{
+  NS_LOG_FUNCTION (this << newVal.GetSeconds ());
+  m_output = newVal.GetSeconds ();
+}
+
+void
+TimeProbe::SetValueByPath (std::string path, Time newVal)
+{
+  NS_LOG_FUNCTION (path << newVal.GetSeconds ());
+  Ptr<TimeProbe> probe = Names::Find<TimeProbe> (path);
+  NS_ASSERT_MSG (probe, "Error:  Can't find probe for path " << path);
+  probe->SetValue (newVal);
+}
+
+bool
+TimeProbe::ConnectByObject (std::string traceSource, Ptr<Object> obj)
+{
+  NS_LOG_FUNCTION (this << traceSource << obj);
+  NS_LOG_DEBUG ("Name of trace source (if any) in names database: " << Names::FindPath (obj));
+  bool connected = obj->TraceConnectWithoutContext (traceSource, MakeCallback (&ns3::TimeProbe::TraceSink, this));
+  return connected;
+}
+
+void
+TimeProbe::ConnectByPath (std::string path)
+{
+  NS_LOG_FUNCTION (this << path);
+  NS_LOG_DEBUG ("Name of trace source to search for in config database: " << path);
+  Config::ConnectWithoutContext (path, MakeCallback (&ns3::TimeProbe::TraceSink, this));
+}
+
+void
+TimeProbe::TraceSink (Time oldData, Time newData)
+{
+  NS_LOG_FUNCTION (this << oldData.GetSeconds () << newData.GetSeconds ());
+  if (IsEnabled ())
+    {
+      m_output = newData.GetSeconds ();
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/stats/model/time-probe.h ns-3.22/src/stats/model/time-probe.h
--- ns-3.21/src/stats/model/time-probe.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/stats/model/time-probe.h	2015-02-05 15:46:22.000000000 -0800
@@ -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)
+ */
+
+#ifndef TIME_PROBE_H
+#define TIME_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"
+#include "ns3/nstime.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup probes
+ *
+ * This class is designed to probe an underlying ns3 TraceSource exporting
+ * an ns3::Time.  This probe exports a trace source "Output" of type 
+ * double, in units of seconds. 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 TimeProbe : public Probe
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId ();
+  TimeProbe ();
+  virtual ~TimeProbe ();
+
+  /**
+   * \return the most recent value (units of seconds)
+   */
+  double GetValue (void) const;
+
+  /**
+   * \param value set the traced Time to a new value
+   */
+  void SetValue (Time 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 Time to a new value
+   */
+  static void SetValueByPath (std::string path, Time 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 Time 
+   *
+   * \param oldData previous value of the Time 
+   * \param newData new value of the Time 
+   */
+  void TraceSink (Time oldData, Time newData);
+
+  TracedValue<double> m_output; //!< Output trace source.
+};
+
+} // namespace ns3
+
+#endif // TIME_PROBE_H
diff -Naur ns-3.21/src/stats/model/time-series-adaptor.cc ns-3.22/src/stats/model/time-series-adaptor.cc
--- ns-3.21/src/stats/model/time-series-adaptor.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/time-series-adaptor.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/log.h"
 #include "ns3/simulator.h"
 
-NS_LOG_COMPONENT_DEFINE ("TimeSeriesAdaptor");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TimeSeriesAdaptor");
+
 NS_OBJECT_ENSURE_REGISTERED (TimeSeriesAdaptor);
 
 TypeId
@@ -40,8 +40,10 @@
     .SetParent<DataCollectionObject> ()
     .AddConstructor<TimeSeriesAdaptor> ()
     .AddTraceSource ( "Output",
-                      "The current simulation time versus the current value converted to a double",
-                      MakeTraceSourceAccessor (&TimeSeriesAdaptor::m_output))
+                      "The current simulation time versus "
+                      "the current value converted to a double",
+                      MakeTraceSourceAccessor (&TimeSeriesAdaptor::m_output),
+                      "ns3::TimeSeriesAdaptor::OutputTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/stats/model/time-series-adaptor.h ns-3.22/src/stats/model/time-series-adaptor.h
--- ns-3.21/src/stats/model/time-series-adaptor.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/time-series-adaptor.h	2015-02-05 15:46:22.000000000 -0800
@@ -112,6 +112,14 @@
    */
   void TraceSinkUinteger32 (uint32_t oldData, uint32_t newData);
 
+  /**
+   * TracedCallback signature for output trace.
+   *
+   * \param [in] now The current Time.
+   * \param [in] data The new data value.
+   */
+  typedef void (* OutputTracedCallback) (const double now, const double data);
+  
 private:
   TracedCallback<double, double> m_output; //!< output trace
 };
diff -Naur ns-3.21/src/stats/model/uinteger-16-probe.cc ns-3.22/src/stats/model/uinteger-16-probe.cc
--- ns-3.21/src/stats/model/uinteger-16-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/uinteger-16-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("Uinteger16Probe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Uinteger16Probe");
+
 NS_OBJECT_ENSURE_REGISTERED (Uinteger16Probe);
 
 TypeId
@@ -41,7 +41,8 @@
     .AddConstructor<Uinteger16Probe> ()
     .AddTraceSource ( "Output",
                       "The uint16_t that serves as output for this probe",
-                      MakeTraceSourceAccessor (&Uinteger16Probe::m_output))
+                      MakeTraceSourceAccessor (&Uinteger16Probe::m_output),
+                     "ns3::TracedValue::Uint16Callback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/stats/model/uinteger-32-probe.cc ns-3.22/src/stats/model/uinteger-32-probe.cc
--- ns-3.21/src/stats/model/uinteger-32-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/uinteger-32-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("Uinteger32Probe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Uinteger32Probe");
+
 NS_OBJECT_ENSURE_REGISTERED (Uinteger32Probe);
 
 TypeId
@@ -41,7 +41,8 @@
     .AddConstructor<Uinteger32Probe> ()
     .AddTraceSource ( "Output",
                       "The uint32_t that serves as output for this probe",
-                      MakeTraceSourceAccessor (&Uinteger32Probe::m_output))
+                      MakeTraceSourceAccessor (&Uinteger32Probe::m_output),
+                     "ns3::TracedValue::Uint32Callback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/stats/model/uinteger-8-probe.cc ns-3.22/src/stats/model/uinteger-8-probe.cc
--- ns-3.21/src/stats/model/uinteger-8-probe.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/model/uinteger-8-probe.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/config.h"
 #include "ns3/trace-source-accessor.h"
 
-NS_LOG_COMPONENT_DEFINE ("Uinteger8Probe");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Uinteger8Probe");
+
 NS_OBJECT_ENSURE_REGISTERED (Uinteger8Probe);
 
 TypeId
@@ -41,7 +41,8 @@
     .AddConstructor<Uinteger8Probe> ()
     .AddTraceSource ( "Output",
                       "The uint8_t that serves as output for this probe",
-                      MakeTraceSourceAccessor (&Uinteger8Probe::m_output))
+                      MakeTraceSourceAccessor (&Uinteger8Probe::m_output),
+                     "ns3::TracedValue::Uint8Callback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/stats/test/double-probe-test-suite.cc ns-3.22/src/stats/test/double-probe-test-suite.cc
--- ns-3.21/src/stats/test/double-probe-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/test/double-probe-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -3,7 +3,14 @@
 // Include a header file from your module to test.
 #include "ns3/double-probe.h"
 #include "ns3/test.h"
-#include "ns3/core-module.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/trace-source-accessor.h"
+#include "ns3/traced-value.h"
+#include "ns3/nstime.h"
+#include "ns3/simulator.h"
+#include "ns3/object.h"
+#include "ns3/type-id.h"
+#include "ns3/names.h"
 
 using namespace ns3;
 
@@ -13,6 +20,7 @@
   static TypeId GetTypeId (void);
   SampleEmitter ()
   {
+    m_var = CreateObject<ExponentialRandomVariable> ();
   }
   virtual ~SampleEmitter ()
   {
@@ -23,7 +31,7 @@
   }
   void Reschedule ()
   {
-    m_time = m_var.GetValue ();
+    m_time = m_var->GetValue ();
     Simulator::Schedule (Seconds (m_time), &SampleEmitter::Report, this);
     m_time += Simulator::Now ().GetSeconds ();
   }
@@ -38,11 +46,11 @@
 private:
   void Report ()
   {
-    aux = m_var.GetValue ();
+    aux = m_var->GetValue ();
     m_trace = aux;
     Reschedule ();
   }
-  ExponentialVariable m_var;
+  Ptr<ExponentialRandomVariable> m_var;
   double m_time;
   TracedValue<double> m_trace;
   double aux;
@@ -55,7 +63,9 @@
 {
   static TypeId tid = TypeId ("SampleEmitter")
     .SetParent<Object> ()
-    .AddTraceSource ("Emitter", "XX", MakeTraceSourceAccessor (&SampleEmitter::m_trace))
+    .AddTraceSource ("Emitter", "XX",
+                     MakeTraceSourceAccessor (&SampleEmitter::m_trace),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/stats/wscript ns-3.22/src/stats/wscript
--- ns-3.21/src/stats/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/stats/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -25,6 +25,7 @@
         'model/probe.cc',
         'model/boolean-probe.cc',
         'model/double-probe.cc',
+        'model/time-probe.cc',
         'model/uinteger-8-probe.cc',
         'model/uinteger-16-probe.cc',
         'model/uinteger-32-probe.cc',
@@ -58,6 +59,7 @@
         'model/probe.h',
         'model/boolean-probe.h',
         'model/double-probe.h',
+        'model/time-probe.h',
         'model/uinteger-8-probe.h',
         'model/uinteger-16-probe.h',
         'model/uinteger-32-probe.h',
diff -Naur ns-3.21/src/tap-bridge/bindings/modulegen__gcc_ILP32.py ns-3.22/src/tap-bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1521,10 +1521,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1981,7 +1981,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2032,6 +2037,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2108,6 +2118,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2142,6 +2156,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3609,11 +3625,6 @@
                    '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', 
@@ -3684,6 +3695,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TapBridge_methods(root_module, cls):
diff -Naur ns-3.21/src/tap-bridge/bindings/modulegen__gcc_LP64.py ns-3.22/src/tap-bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1521,10 +1521,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1981,7 +1981,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2032,6 +2037,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2108,6 +2118,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2142,6 +2156,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -3609,11 +3625,6 @@
                    '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', 
@@ -3684,6 +3695,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TapBridge_methods(root_module, cls):
diff -Naur ns-3.21/src/tap-bridge/helper/tap-bridge-helper.cc ns-3.22/src/tap-bridge/helper/tap-bridge-helper.cc
--- ns-3.21/src/tap-bridge/helper/tap-bridge-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/tap-bridge/helper/tap-bridge-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/names.h"
 #include "tap-bridge-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("TapBridgeHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TapBridgeHelper");
+
 TapBridgeHelper::TapBridgeHelper ()
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.21/src/tap-bridge/helper/tap-bridge-helper.h ns-3.22/src/tap-bridge/helper/tap-bridge-helper.h
--- ns-3.21/src/tap-bridge/helper/tap-bridge-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/tap-bridge/helper/tap-bridge-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -53,7 +53,7 @@
    */
   TapBridgeHelper (Ipv4Address gateway);
 
-  /*
+  /**
    * Set an attribute in the underlying TapBridge net device when these
    * devices are automatically created.
    *
@@ -126,7 +126,7 @@
    */
   Ptr<NetDevice> Install (Ptr<Node> node, Ptr<NetDevice> nd, const AttributeValue &bridgeType);
 private:
-  ObjectFactory m_deviceFactory;
+  ObjectFactory m_deviceFactory; //!< Object factory
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/tap-bridge/model/tap-bridge.cc ns-3.22/src/tap-bridge/model/tap-bridge.cc
--- ns-3.21/src/tap-bridge/model/tap-bridge.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/tap-bridge/model/tap-bridge.cc	2015-02-05 15:46:22.000000000 -0800
@@ -46,10 +46,10 @@
 #include <cstdlib>
 #include <unistd.h>
 
-NS_LOG_COMPONENT_DEFINE ("TapBridge");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("TapBridge");
+
 FdReader::Data TapBridgeFdReader::DoRead (void)
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.21/src/tap-bridge/model/tap-bridge.h ns-3.22/src/tap-bridge/model/tap-bridge.h
--- ns-3.21/src/tap-bridge/model/tap-bridge.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/tap-bridge/model/tap-bridge.h	2015-02-05 15:46:22.000000000 -0800
@@ -210,8 +210,6 @@
 
 protected:
   /**
-   * \internal
-   *
    * Call out to a separate process running as suid root in order to get our
    * tap device created.  We do this to avoid having the entire simulation 
    * running as root.  If this method returns, we'll have a socket waiting 
@@ -227,8 +225,6 @@
 private:
 
   /**
-   * \internal
-   *
    * Call out to a separate process running as suid root in order to get our
    * tap device created.  We do this to avoid having the entire simulation 
    * running as root.  If this method returns, we'll have a socket waiting 
@@ -237,29 +233,21 @@
   void CreateTap (void);
 
   /**
-   * \internal
-   *
    * Spin up the device
    */
   void StartTapDevice (void);
 
   /**
-   * \internal
-   *
    * Tear down the device
    */
   void StopTapDevice (void);
 
   /**
-   * \internal
-   *
    * Callback to process packets that are read
    */
   void ReadCallback (uint8_t *buf, ssize_t len);
 
   /*
-   * \internal
-   *
    * Forward a packet received from the tap device to the bridged ns-3 
    * device
    *
@@ -270,8 +258,6 @@
   void ForwardToBridgedDevice (uint8_t *buf, ssize_t len);
 
   /**
-   * \internal
-   *
    * The host we are bridged to is in the evil real world.  Do some sanity
    * checking on a received packet to make sure it isn't too evil for our
    * poor naive virginal simulator to handle.
@@ -294,8 +280,6 @@
   void NotifyLinkUp (void);
 
   /**
-   * \internal
-   *
    * Callback used to hook the standard packet receive callback of the TapBridge
    * ns-3 net device.  This is never called, and therefore no packets will ever
    * be received forwarded up the IP stack on the ghost node through this device.
@@ -303,8 +287,6 @@
   NetDevice::ReceiveCallback m_rxCallback;
 
   /**
-   * \internal
-   *
    * Callback used to hook the promiscuous packet receive callback of the TapBridge
    * ns-3 net device.  This is never called, and therefore no packets will ever
    * be received forwarded up the IP stack on the ghost node through this device.
@@ -316,70 +298,52 @@
   NetDevice::PromiscReceiveCallback m_promiscRxCallback;
 
   /**
-   * \internal
-   *
    * Pointer to the (ghost) Node to which we are connected.
    */
   Ptr<Node> m_node;
 
 
   /**
-   * \internal
-   *
    * The ns-3 interface index of this TapBridge net device.
    */
   uint32_t m_ifIndex;
 
   /**
-   * \internal
-   *
    * The common mtu to use for the net devices
    */
   uint16_t m_mtu;
 
   /**
-   * \internal
-   *
    * The socket (actually interpreted as fd) to use to talk to the Tap device on
    * the real internet host.
    */
   int m_sock;
 
   /**
-   * \internal
-   *
    * The ID of the ns-3 event used to schedule the start up of the underlying
    * host Tap device and ns-3 read thread.
    */
   EventId m_startEvent;
 
   /**
-   * \internal
-   *
    * The ID of the ns-3 event used to schedule the tear down of the underlying
    * host Tap device and ns-3 read thread.
    */
   EventId m_stopEvent;
 
   /**
-   * \internal
-   *
    * Includes the ns-3 read thread used to do blocking reads on the fd
    * corresponding to the host device.
    */
   Ptr<TapBridgeFdReader> m_fdReader;
 
   /**
-   * \internal
-   *
    * The operating mode of the bridge.  Tells basically who creates and
    * configures the underlying network tap.
    */
   Mode m_mode;
 
   /**
-   * \internal
-   *
    * The (unused) MAC address of the TapBridge net device.  Since the TapBridge
    * is implemented as a ns-3 net device, it is required to implement certain
    * functionality.  In this case, the TapBridge is automatically assigned a
@@ -388,43 +352,31 @@
   Mac48Address m_address;
 
   /**
-   * \internal
-   *
    * Time to start spinning up the device
    */
   Time m_tStart;
 
   /**
-   * \internal
-   *
    * Time to start tearing down the device
    */
   Time m_tStop;
 
   /**
-   * \internal
-   *
    * The name of the device to create on the host.  If the device name is the
    * empty string, we allow the host kernel to choose a name.
    */
   std::string m_tapDeviceName;
 
   /**
-   * \internal
-   *
    * The IP address to use as the device default gateway on the host.
    */
   Ipv4Address m_tapGateway;
 
   /**
-   * \internal
-   *
    * The IP address to use as the device IP on the host.
    */
   Ipv4Address m_tapIp;
   /**
-   * \internal
-   *
    * The MAC address to use as the hardware address on the host; only used
    * in UseLocal mode.  This value comes from the MAC
    * address assigned to the bridged ns-3 net device and matches the MAC 
@@ -434,21 +386,15 @@
   Mac48Address m_tapMac;
 
   /**
-   * \internal
-   *
    * The network mask to assign to the device created on the host.
    */
   Ipv4Mask m_tapNetmask;
 
   /**
-   * \internal
-   *
    * The ns-3 net device to which we are bridging.
    */
   Ptr<NetDevice> m_bridgedDevice;
   /**
-   * \internal
-   *
    * Whether the MAC address of the underlying ns-3 device has already been
    * rewritten is stored in this variable (for UseLocal/UseBridge mode only).
    */
@@ -467,8 +413,6 @@
   uint32_t m_nodeId;
 
   /**
-   * \internal
-   *
    * Flag indicating whether or not the link is up.  In this case,
    * whether or not ns-3 is connected to the underlying TAP device
    * with a file descriptor.
@@ -476,8 +420,6 @@
   bool m_linkUp;
 
   /**
-   * \internal
-   *
    * Callbacks to fire if the link changes state (up or down).
    */
   TracedCallback<> m_linkChangeCallbacks;
diff -Naur ns-3.21/src/tap-bridge/wscript ns-3.22/src/tap-bridge/wscript
--- ns-3.21/src/tap-bridge/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/tap-bridge/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -28,7 +28,7 @@
     if not bld.env['ENABLE_TAP']:
         return
 
-    module = bld.create_ns3_module('tap-bridge', ['network'])
+    module = bld.create_ns3_module('tap-bridge', ['internet', 'network', 'core'])
     module.source = [
         'model/tap-bridge.cc',
         'model/tap-encode-decode.cc',
diff -Naur ns-3.21/src/test/ns3tcp/ns3tcp-loss-test-suite.cc ns-3.22/src/test/ns3tcp/ns3tcp-loss-test-suite.cc
--- ns-3.21/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -191,7 +191,7 @@
       uint8_t *actual = new uint8_t[readLen];
       p->CopyData (actual, readLen);
 
-      uint32_t result = memcmp (actual, expected, readLen);
+      int result = memcmp (actual, expected, readLen);
 
       delete [] actual;
 
@@ -200,7 +200,7 @@
       //
       if (IsStatusSuccess ())
         {
-          NS_TEST_EXPECT_MSG_EQ (result, 0, "Expected data comparison error");
+          NS_TEST_EXPECT_MSG_EQ (result, 0, "Expected data comparison error: " << m_tcpModel << "-" << m_testCase);
         }
     }
 }
diff -Naur ns-3.21/src/test/ns3wifi/wifi-interference-test-suite.cc ns-3.22/src/test/ns3wifi/wifi-interference-test-suite.cc
--- ns-3.21/src/test/ns3wifi/wifi-interference-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/test/ns3wifi/wifi-interference-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -45,10 +45,10 @@
 #include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/simulator.h"
 
-NS_LOG_COMPONENT_DEFINE ("WifiInterferenceTestSuite");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WifiInterferenceTestSuite");
+
 class WifiInterferenceTestCase : public TestCase
 {
 public:
diff -Naur ns-3.21/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc ns-3.22/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc
--- ns-3.21/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,10 +39,10 @@
 #include "ns3/packet-sink-helper.h"
 #include "ns3/on-off-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("WifiMsduAggregatorThroughputTest");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WifiMsduAggregatorThroughputTest");
+
 class WifiMsduAggregatorThroughputTest : public TestCase
 {
 public:
diff -Naur ns-3.21/src/topology-read/bindings/modulegen__gcc_ILP32.py ns-3.22/src/topology-read/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/topology-read/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/topology-read/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -926,10 +926,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1113,7 +1113,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1164,6 +1169,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1240,6 +1250,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1274,6 +1288,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -1743,14 +1759,16 @@
     cls.add_constructor([param('ns3::TopologyReader::Link const &', 'arg0')])
     ## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link::Link(ns3::Ptr<ns3::Node> fromPtr, std::string const & fromName, ns3::Ptr<ns3::Node> toPtr, std::string const & toName) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'fromPtr'), param('std::string const &', 'fromName'), param('ns3::Ptr< ns3::Node >', 'toPtr'), param('std::string const &', 'toName')])
-    ## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesBegin() [member function]
+    ## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesBegin() const [member function]
     cls.add_method('AttributesBegin', 
                    'std::_Rb_tree_const_iterator< std::pair< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const, std::basic_string< char, std::char_traits< char >, std::allocator< char > > > >', 
-                   [])
-    ## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesEnd() [member function]
+                   [], 
+                   is_const=True)
+    ## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesEnd() const [member function]
     cls.add_method('AttributesEnd', 
                    'std::_Rb_tree_const_iterator< std::pair< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const, std::basic_string< char, std::char_traits< char >, std::allocator< char > > > >', 
-                   [])
+                   [], 
+                   is_const=True)
     ## topology-reader.h (module 'topology-read'): std::string ns3::TopologyReader::Link::GetAttribute(std::string const & name) const [member function]
     cls.add_method('GetAttribute', 
                    'std::string', 
diff -Naur ns-3.21/src/topology-read/bindings/modulegen__gcc_LP64.py ns-3.22/src/topology-read/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/topology-read/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/topology-read/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -926,10 +926,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1113,7 +1113,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1164,6 +1169,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1240,6 +1250,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1274,6 +1288,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -1743,14 +1759,16 @@
     cls.add_constructor([param('ns3::TopologyReader::Link const &', 'arg0')])
     ## topology-reader.h (module 'topology-read'): ns3::TopologyReader::Link::Link(ns3::Ptr<ns3::Node> fromPtr, std::string const & fromName, ns3::Ptr<ns3::Node> toPtr, std::string const & toName) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'fromPtr'), param('std::string const &', 'fromName'), param('ns3::Ptr< ns3::Node >', 'toPtr'), param('std::string const &', 'toName')])
-    ## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesBegin() [member function]
+    ## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesBegin() const [member function]
     cls.add_method('AttributesBegin', 
                    'std::_Rb_tree_const_iterator< std::pair< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const, std::basic_string< char, std::char_traits< char >, std::allocator< char > > > >', 
-                   [])
-    ## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesEnd() [member function]
+                   [], 
+                   is_const=True)
+    ## topology-reader.h (module 'topology-read'): std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::TopologyReader::Link::AttributesEnd() const [member function]
     cls.add_method('AttributesEnd', 
                    'std::_Rb_tree_const_iterator< std::pair< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const, std::basic_string< char, std::char_traits< char >, std::allocator< char > > > >', 
-                   [])
+                   [], 
+                   is_const=True)
     ## topology-reader.h (module 'topology-read'): std::string ns3::TopologyReader::Link::GetAttribute(std::string const & name) const [member function]
     cls.add_method('GetAttribute', 
                    'std::string', 
diff -Naur ns-3.21/src/topology-read/examples/topology-example-sim.cc ns-3.22/src/topology-read/examples/topology-example-sim.cc
--- ns-3.21/src/topology-read/examples/topology-example-sim.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/topology-read/examples/topology-example-sim.cc	2015-02-05 15:46:22.000000000 -0800
@@ -42,7 +42,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("TopologyCreationExperiment");
 
-
 static std::list<unsigned int> data;
 
 static void SinkRx (Ptr<const Packet> p, const Address &ad)
diff -Naur ns-3.21/src/topology-read/model/topology-reader.cc ns-3.22/src/topology-read/model/topology-reader.cc
--- ns-3.21/src/topology-read/model/topology-reader.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/topology-read/model/topology-reader.cc	2015-02-05 15:46:22.000000000 -0800
@@ -155,12 +155,12 @@
 }
 
 TopologyReader::Link::ConstAttributesIterator
-TopologyReader::Link::AttributesBegin (void)
+TopologyReader::Link::AttributesBegin (void) const
 {
   return m_linkAttr.begin ();
 }
 TopologyReader::Link::ConstAttributesIterator
-TopologyReader::Link::AttributesEnd (void)
+TopologyReader::Link::AttributesEnd (void) const
 {
   return m_linkAttr.end ();
 }
diff -Naur ns-3.21/src/topology-read/model/topology-reader.h ns-3.22/src/topology-read/model/topology-reader.h
--- ns-3.21/src/topology-read/model/topology-reader.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/topology-read/model/topology-reader.h	2015-02-05 15:46:22.000000000 -0800
@@ -114,12 +114,12 @@
      * \brief Returns an iterator to the begin of the attributes.
      * \return a const iterator to the first attribute of a link.
      */
-    ConstAttributesIterator AttributesBegin (void);
+    ConstAttributesIterator AttributesBegin (void) const;
     /**
      * \brief Returns an iterator to the end of the attributes.
      * \return a const iterator to the last attribute of a link.
      */
-    ConstAttributesIterator AttributesEnd (void);
+    ConstAttributesIterator AttributesEnd (void) const;
 
 private:
     Link ();
diff -Naur ns-3.21/src/uan/bindings/modulegen__gcc_ILP32.py ns-3.22/src/uan/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/uan/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1857,10 +1857,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2477,7 +2477,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2528,6 +2533,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2604,6 +2614,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2638,6 +2652,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -6416,14 +6432,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -6461,8 +6477,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -6483,10 +6499,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -7375,11 +7391,6 @@
                    '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', 
@@ -7450,6 +7461,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/uan/bindings/modulegen__gcc_LP64.py ns-3.22/src/uan/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/uan/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1857,10 +1857,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2477,7 +2477,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2528,6 +2533,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -2604,6 +2614,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2638,6 +2652,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -6416,14 +6432,14 @@
     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]
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, 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]
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
     cls.add_method('AddDefault', 
                    'void', 
-                   [param('int', 'v'), param('std::string', 'name')])
+                   [param('int', 'value'), param('std::string', 'name')])
     ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
     cls.add_method('Check', 
                    'bool', 
@@ -6461,8 +6477,8 @@
     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::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
     ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
     cls.add_method('Copy', 
                    'ns3::Ptr< ns3::AttributeValue >', 
@@ -6483,10 +6499,10 @@
                    '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]
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('int', 'v')])
+                   [param('int', 'value')])
     return
 
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
@@ -7375,11 +7391,6 @@
                    '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', 
@@ -7450,6 +7461,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/uan/examples/uan-rc-example.cc ns-3.22/src/uan/examples/uan-rc-example.cc
--- ns-3.21/src/uan/examples/uan-rc-example.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/examples/uan-rc-example.cc	2015-02-05 15:46:22.000000000 -0800
@@ -67,7 +67,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("UanRcExample");
 
-
 Experiment::Experiment () 
   : m_simMin (1),
     m_simMax (1),
diff -Naur ns-3.21/src/uan/helper/uan-helper.cc ns-3.22/src/uan/helper/uan-helper.cc
--- ns-3.21/src/uan/helper/uan-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/helper/uan-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,9 +40,10 @@
 #include <sstream>
 #include <string>
 
-NS_LOG_COMPONENT_DEFINE ("UanHelper");
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanHelper");
+
 /**
  * Ascii trace callback on Phy transmit events.
  *
diff -Naur ns-3.21/src/uan/model/acoustic-modem-energy-model.cc ns-3.22/src/uan/model/acoustic-modem-energy-model.cc
--- ns-3.21/src/uan/model/acoustic-modem-energy-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/acoustic-modem-energy-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/uan-net-device.h"
 #include "acoustic-modem-energy-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("AcousticModemEnergyModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AcousticModemEnergyModel");
+
 NS_OBJECT_ENSURE_REGISTERED (AcousticModemEnergyModel);
 
 TypeId
@@ -65,7 +65,8 @@
                    MakeDoubleChecker<double> ())
     .AddTraceSource ("TotalEnergyConsumption",
                      "Total energy consumption of the modem device.",
-                     MakeTraceSourceAccessor (&AcousticModemEnergyModel::m_totalEnergyConsumption))
+                     MakeTraceSourceAccessor (&AcousticModemEnergyModel::m_totalEnergyConsumption),
+                     "ns3::TracedValue::DoubleCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/uan/model/acoustic-modem-energy-model.h ns-3.22/src/uan/model/acoustic-modem-energy-model.h
--- ns-3.21/src/uan/model/acoustic-modem-energy-model.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/acoustic-modem-energy-model.h	2015-02-05 15:46:22.000000000 -0800
@@ -158,7 +158,7 @@
   void SetEnergyDepletionCallback (AcousticModemEnergyDepletionCallback callback);
 
   /**
-   * Changes state of the AcousticModemEnergyModel..
+   * Changes state of the AcousticModemEnergyModel.
    *
    * \param newState New state the modem is in.
    */
diff -Naur ns-3.21/src/uan/model/uan-channel.cc ns-3.22/src/uan/model/uan-channel.cc
--- ns-3.21/src/uan/model/uan-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,6 +26,7 @@
 #include "ns3/node.h"
 #include "ns3/log.h"
 #include "ns3/pointer.h"
+#include "ns3/string.h"
 #include "ns3/log.h"
 
 #include "uan-channel.h"
@@ -37,9 +38,10 @@
 #include "uan-noise-model-default.h"
 #include "uan-prop-model-ideal.h"
 
-NS_LOG_COMPONENT_DEFINE ("UanChannel");
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (UanChannel);
 
 TypeId
@@ -50,12 +52,12 @@
     .AddConstructor<UanChannel> ()
     .AddAttribute ("PropagationModel",
                    "A pointer to the propagation model.",
-                   PointerValue (CreateObject<UanPropModelIdeal> ()),
+                   StringValue ("ns3::UanPropModelIdeal"),
                    MakePointerAccessor (&UanChannel::m_prop),
                    MakePointerChecker<UanPropModel> ())
     .AddAttribute ("NoiseModel",
                    "A pointer to the model of the channel ambient noise.",
-                   PointerValue (CreateObject<UanNoiseModelDefault> ()),
+                   StringValue ("ns3::UanNoiseModelDefault"),
                    MakePointerAccessor (&UanChannel::m_noise),
                    MakePointerChecker<UanNoiseModel> ())
   ;
diff -Naur ns-3.21/src/uan/model/uan-mac-aloha.cc ns-3.22/src/uan/model/uan-mac-aloha.cc
--- ns-3.21/src/uan/model/uan-mac-aloha.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-mac-aloha.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,12 +26,12 @@
 #include "uan-header-common.h"
 
 #include <iostream>
-NS_LOG_COMPONENT_DEFINE ("UanMacAloha");
-
 
 namespace ns3
 {
 
+NS_LOG_COMPONENT_DEFINE ("UanMacAloha");
+  
 NS_OBJECT_ENSURE_REGISTERED (UanMacAloha);
 
 UanMacAloha::UanMacAloha ()
diff -Naur ns-3.21/src/uan/model/uan-mac-cw.cc ns-3.22/src/uan/model/uan-mac-cw.cc
--- ns-3.21/src/uan/model/uan-mac-cw.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-mac-cw.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/trace-source-accessor.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("UanMacCw");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanMacCw");
+
 NS_OBJECT_ENSURE_REGISTERED (UanMacCw);
 
 UanMacCw::UanMacCw ()
@@ -91,13 +91,16 @@
                    MakeTimeChecker ())
     .AddTraceSource ("Enqueue",
                      "A packet arrived at the MAC for transmission.",
-                     MakeTraceSourceAccessor (&UanMacCw::m_enqueueLogger))
+                     MakeTraceSourceAccessor (&UanMacCw::m_enqueueLogger),
+                     "ns3::UanMacCw::QueueTracedCallback")
     .AddTraceSource ("Dequeue",
                      "A was passed down to the PHY from the MAC.",
-                     MakeTraceSourceAccessor (&UanMacCw::m_dequeueLogger))
+                     MakeTraceSourceAccessor (&UanMacCw::m_dequeueLogger),
+                     "ns3::UanMacCw::QueueTracedCallback")
     .AddTraceSource ("RX",
                      "A packet was destined for this MAC and was received.",
-                     MakeTraceSourceAccessor (&UanMacCw::m_rxLogger))
+                     MakeTraceSourceAccessor (&UanMacCw::m_rxLogger),
+                     "ns3::UanMac::PacketModeTracedCallback")
 
   ;
   return tid;
diff -Naur ns-3.21/src/uan/model/uan-mac-cw.h ns-3.22/src/uan/model/uan-mac-cw.h
--- ns-3.21/src/uan/model/uan-mac-cw.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-mac-cw.h	2015-02-05 15:46:22.000000000 -0800
@@ -100,6 +100,14 @@
   virtual void NotifyCcaEnd (void);
   virtual void NotifyTxStart (Time duration);
 
+  /**
+   *  TracedCallback signature for enqueue/dequeue of a packet.
+   *
+   * \param [in] packet The Packet being received.
+   * \param [in] proto The protocol number.
+   */
+  typedef void (* QueueTracedCallback)
+    (const Ptr<const Packet> packet, const uint16_t proto);
 
 private:
   /** Enum defining possible Phy states. */
diff -Naur ns-3.21/src/uan/model/uan-mac.h ns-3.22/src/uan/model/uan-mac.h
--- ns-3.21/src/uan/model/uan-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,7 @@
 class UanChannel;
 class UanNetDevice;
 class UanTransducer;
+class UanTxMode;
 class UanAddress;
 
 
@@ -115,6 +116,15 @@
   */
   virtual int64_t AssignStreams (int64_t stream) = 0;
 
+  /**
+   *  TracedCallback signature for packet reception/enqueue/dequeue events.
+   *
+   * \param [in] packet The Packet.
+   * \param [in] mode The UanTxMode.
+   */
+  typedef void (* PacketModeTracedCallback)
+    (const Ptr<const Packet> packet, const UanTxMode & mode);
+
 };  // class UanMac
 
 } // namespace ns3
diff -Naur ns-3.21/src/uan/model/uan-mac-rc.cc ns-3.22/src/uan/model/uan-mac-rc.cc
--- ns-3.21/src/uan/model/uan-mac-rc.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-mac-rc.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,9 +37,10 @@
 
 
 
-NS_LOG_COMPONENT_DEFINE ("UanMacRc");
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanMacRc");
+
 NS_OBJECT_ENSURE_REGISTERED (UanMacRc);
 
 Reservation::Reservation ()
@@ -251,13 +252,16 @@
                    MakeTimeChecker ())
     .AddTraceSource ("Enqueue",
                      "A  (data) packet arrived at MAC for transmission.",
-                     MakeTraceSourceAccessor (&UanMacRc::m_enqueueLogger))
+                     MakeTraceSourceAccessor (&UanMacRc::m_enqueueLogger),
+                     "ns3::UanMac::PacketModeTracedCallback")
     .AddTraceSource ("Dequeue",
                      "A  (data) packet was passed down to PHY from MAC.",
-                     MakeTraceSourceAccessor (&UanMacRc::m_dequeueLogger))
+                     MakeTraceSourceAccessor (&UanMacRc::m_dequeueLogger),
+                     "ns3::UanMac::PacketModeTracedCallback")
     .AddTraceSource ("RX",
                      "A packet was destined for and received at this MAC layer.",
-                     MakeTraceSourceAccessor (&UanMacRc::m_rxLogger))
+                     MakeTraceSourceAccessor (&UanMacRc::m_rxLogger),
+                     "ns3::UanMac::PacketModeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/uan/model/uan-mac-rc-gw.cc ns-3.22/src/uan/model/uan-mac-rc-gw.cc
--- ns-3.21/src/uan/model/uan-mac-rc-gw.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-mac-rc-gw.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,10 +39,10 @@
 #include <vector>
 #include <algorithm>
 
-NS_LOG_COMPONENT_DEFINE ("UanMacRcGw");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanMacRcGw");
+
 NS_OBJECT_ENSURE_REGISTERED (UanMacRcGw);
 
 UanMacRcGw::UanMacRcGw ()
@@ -157,10 +157,12 @@
                    MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("RX",
                      "A packet was destined for and received at this MAC layer.",
-                     MakeTraceSourceAccessor (&UanMacRcGw::m_rxLogger))
+                     MakeTraceSourceAccessor (&UanMacRcGw::m_rxLogger),
+                     "ns3::UanMac::PacketModeTracedCallback")
     .AddTraceSource ("Cycle",
                      "Trace cycle statistics.",
-                     MakeTraceSourceAccessor (&UanMacRcGw::m_cycleLogger))
+                     MakeTraceSourceAccessor (&UanMacRcGw::m_cycleLogger),
+                     "ns3::UanMacRcGw::CycleCallback")
 
   ;
 
@@ -431,7 +433,9 @@
       ctsh.SetDelayToTx (arrivalTime);
       cts->AddHeader (ctsh);
 
-      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW Scheduling reception for " << (uint32_t) req.numFrames << " frames at " << (Simulator::Now () + arrivalTime).GetSeconds () << "  (delaytiltx of " << arrivalTime.GetSeconds () << ")  Total length is " << req.length << " with txtime " << req.length * 8 / dataRate << " seconds");
+      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () <<
+                    " GW Scheduling reception for " << (uint32_t) req.numFrames <<
+                    " frames at " << (Simulator::Now () + arrivalTime).GetSeconds () << "  (delaytiltx of " << arrivalTime.GetSeconds () << ")  Total length is " << req.length << " with txtime " << req.length * 8 / dataRate << " seconds");
     }
 
   UanHeaderRcCtsGlobal ctsg;
diff -Naur ns-3.21/src/uan/model/uan-mac-rc-gw.h ns-3.22/src/uan/model/uan-mac-rc-gw.h
--- ns-3.21/src/uan/model/uan-mac-rc-gw.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-mac-rc-gw.h	2015-02-05 15:46:22.000000000 -0800
@@ -76,6 +76,25 @@
   virtual void Clear (void);
   int64_t AssignStreams (int64_t stream);
 
+  /**
+   * TracedCallback signature for
+   *
+   * \param [in] now, The current simulation time.
+   * \param [in] delay Minimum path delay of first RTS.
+   * \param [in] numRts Number of pending RTS.
+   * \param [in] totalBytes Length of RTS header.
+   * \param [in] secs Effective window size for RcCtsGlobal message, or
+   *             time to next cycle, both in seconds.
+   * \param [in] ctlRate CTL rate in Bps.
+   * \param [in] actualX Current retry rate.
+   */
+  typedef void (* CycleCallback)
+    (const Time now, const Time delay,
+     const uint32_t numRts, const uint32_t totalBytes,
+     const double secs, const uint32_t ctlRate,
+     const double actualX);
+
+  
 private:
   /** Gateway state. */
   enum State {
diff -Naur ns-3.21/src/uan/model/uan-mac-rc.h ns-3.22/src/uan/model/uan-mac-rc.h
--- ns-3.21/src/uan/model/uan-mac-rc.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-mac-rc.h	2015-02-05 15:46:22.000000000 -0800
@@ -235,7 +235,7 @@
   Callback<void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
 
   /** A packet was destined for and received at this MAC layer. */
-  TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
+  TracedCallback<Ptr<const Packet>, UanTxMode &> m_rxLogger;
   /** A packet arrived at the MAC for transmission. */
   TracedCallback<Ptr<const Packet>, uint16_t > m_enqueueLogger;
   /** A was passed down to the PHY from the MAC. */
diff -Naur ns-3.21/src/uan/model/uan-net-device.cc ns-3.22/src/uan/model/uan-net-device.cc
--- ns-3.21/src/uan/model/uan-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "uan-transducer.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("UanNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (UanNetDevice);
 
 UanNetDevice::UanNetDevice ()
@@ -110,9 +110,11 @@
                                         &UanNetDevice::SetTransducer),
                    MakePointerChecker<UanTransducer> ())
     .AddTraceSource ("Rx", "Received payload from the MAC layer.",
-                     MakeTraceSourceAccessor (&UanNetDevice::m_rxLogger))
+                     MakeTraceSourceAccessor (&UanNetDevice::m_rxLogger),
+                     "ns3::UanNetDevice::RxTxTracedCallback")
     .AddTraceSource ("Tx", "Send payload to the MAC layer.",
-                     MakeTraceSourceAccessor (&UanNetDevice::m_txLogger))
+                     MakeTraceSourceAccessor (&UanNetDevice::m_txLogger),
+                     "ns3::UanNetDevice::RxTxTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/uan/model/uan-net-device.h ns-3.22/src/uan/model/uan-net-device.h
--- ns-3.21/src/uan/model/uan-net-device.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-net-device.h	2015-02-05 15:46:22.000000000 -0800
@@ -147,6 +147,15 @@
   virtual void AddLinkChangeCallback (Callback<void> callback);
   virtual void SetAddress (Address address);
 
+  /**
+   * TracedCallback signature for MAC send/receive events.
+   *
+   * \param [in] packet The Packet.
+   * \param [in] address The source address.
+   */
+  typedef void (* RxTxTracedCallback)
+    (const Ptr<const Packet> packet, const UanAddress address);
+  
 private:
   /**
    * Forward the packet to a higher level, set with SetReceiveCallback.
diff -Naur ns-3.21/src/uan/model/uan-phy.cc ns-3.22/src/uan/model/uan-phy.cc
--- ns-3.21/src/uan/model/uan-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -71,23 +71,35 @@
   static TypeId tid = TypeId ("ns3::UanPhy")
     .SetParent<Object> ()
     .AddTraceSource ("PhyTxBegin",
-                     "Trace source indicating a packet has begun transmitting over the channel medium.",
-                     MakeTraceSourceAccessor (&UanPhy::m_phyTxBeginTrace))
+                     "Trace source indicating a packet has "
+                     "begun transmitting over the channel medium.",
+                     MakeTraceSourceAccessor (&UanPhy::m_phyTxBeginTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxEnd",
-                     "Trace source indicating a packet has been completely transmitted over the channel.",
-                   MakeTraceSourceAccessor (&UanPhy::m_phyTxEndTrace))
+                     "Trace source indicating a packet has "
+                     "been completely transmitted over the channel.",
+                   MakeTraceSourceAccessor (&UanPhy::m_phyTxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxDrop",
-                     "Trace source indicating a packet has been dropped by the device during transmission.",
-                     MakeTraceSourceAccessor (&UanPhy::m_phyTxDropTrace))
+                     "Trace source indicating a packet has "
+                     "been dropped by the device during transmission.",
+                     MakeTraceSourceAccessor (&UanPhy::m_phyTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxBegin",
-                     "Trace source indicating a packet has begun being received from the channel medium by the device.",
-                     MakeTraceSourceAccessor (&UanPhy::m_phyRxBeginTrace))
+                     "Trace source indicating a packet has "
+                     "begun being received from the channel medium by the device.",
+                     MakeTraceSourceAccessor (&UanPhy::m_phyRxBeginTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxEnd",
-                     "Trace source indicating a packet has been completely received from the channel medium by the device.",
-                     MakeTraceSourceAccessor (&UanPhy::m_phyRxEndTrace))
+                     "Trace source indicating a packet has "
+                     "been completely received from the channel medium by the device.",
+                     MakeTraceSourceAccessor (&UanPhy::m_phyRxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxDrop",
-                     "Trace source indicating a packet has been dropped by the device during reception.",
-                     MakeTraceSourceAccessor (&UanPhy::m_phyRxDropTrace))
+                     "Trace source indicating a packet has "
+                     "been dropped by the device during reception.",
+                     MakeTraceSourceAccessor (&UanPhy::m_phyRxDropTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/uan/model/uan-phy-dual.cc ns-3.22/src/uan/model/uan-phy-dual.cc
--- ns-3.21/src/uan/model/uan-phy-dual.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-phy-dual.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,6 +26,7 @@
 #include "uan-net-device.h"
 #include "uan-channel.h"
 #include "ns3/double.h"
+#include "ns3/string.h"
 #include "ns3/log.h"
 #include "ns3/ptr.h"
 #include "ns3/traced-callback.h"
@@ -37,10 +38,10 @@
 #include <cmath>
 
 
-NS_LOG_COMPONENT_DEFINE ("UanPhyDual");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanPhyDual");
+
 NS_OBJECT_ENSURE_REGISTERED (UanPhyDual);
 NS_OBJECT_ENSURE_REGISTERED (UanPhyCalcSinrDual);
 
@@ -201,33 +202,36 @@
                    MakeUanModesListChecker () )
     .AddAttribute ("PerModelPhy1",
                    "Functor to calculate PER based on SINR and TxMode for Phy1.",
-                   PointerValue (CreateObject<UanPhyPerGenDefault> ()),
+                   StringValue ("ns3::UanPhyPerGenDefault"),
                    MakePointerAccessor (&UanPhyDual::GetPerModelPhy1, &UanPhyDual::SetPerModelPhy1),
                    MakePointerChecker<UanPhyPer> ())
     .AddAttribute ("PerModelPhy2",
                    "Functor to calculate PER based on SINR and TxMode for Phy2.",
-                   PointerValue (CreateObject<UanPhyPerGenDefault> ()),
+                   StringValue ("ns3::UanPhyPerGenDefault"),
                    MakePointerAccessor (&UanPhyDual::GetPerModelPhy2, &UanPhyDual::SetPerModelPhy2),
                    MakePointerChecker<UanPhyPer> ())
     .AddAttribute ("SinrModelPhy1",
                    "Functor to calculate SINR based on pkt arrivals and modes for Phy1.",
-                   PointerValue (CreateObject<UanPhyCalcSinrDual> ()),
+                   StringValue ("ns3::UanPhyCalcSinrDual"),
                    MakePointerAccessor (&UanPhyDual::GetSinrModelPhy1, &UanPhyDual::SetSinrModelPhy1),
                    MakePointerChecker<UanPhyCalcSinr> ())
     .AddAttribute ("SinrModelPhy2",
                    "Functor to calculate SINR based on pkt arrivals and modes for Phy2.",
-                   PointerValue (CreateObject<UanPhyCalcSinrDual> ()),
+                   StringValue ("ns3::UanPhyCalcSinrDual"),
                    MakePointerAccessor (&UanPhyDual::GetSinrModelPhy2, &UanPhyDual::SetSinrModelPhy2),
                    MakePointerChecker<UanPhyCalcSinr> ())
     .AddTraceSource ("RxOk",
                      "A packet was received successfully.",
-                     MakeTraceSourceAccessor (&UanPhyDual::m_rxOkLogger))
+                     MakeTraceSourceAccessor (&UanPhyDual::m_rxOkLogger),
+                     "ns3::UanPhy::TracedCallback")
     .AddTraceSource ("RxError",
                      "A packet was received unsuccessfully.",
-                     MakeTraceSourceAccessor (&UanPhyDual::m_rxErrLogger))
+                     MakeTraceSourceAccessor (&UanPhyDual::m_rxErrLogger),
+                     "ns3::UanPhy::TracedCallback")
     .AddTraceSource ("Tx",
                      "Packet transmission beginning.",
-                     MakeTraceSourceAccessor (&UanPhyDual::m_txLogger))
+                     MakeTraceSourceAccessor (&UanPhyDual::m_txLogger),
+                     "ns3::UanPhy::TracedCallback")
 
   ;
 
diff -Naur ns-3.21/src/uan/model/uan-phy-dual.h ns-3.22/src/uan/model/uan-phy-dual.h
--- ns-3.21/src/uan/model/uan-phy-dual.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-phy-dual.h	2015-02-05 15:46:22.000000000 -0800
@@ -254,11 +254,11 @@
   Ptr<UanPhy> m_phy2;
 
   /** A packet was received successfully. */
-  TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxOkLogger;
+  ns3::TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxOkLogger;
   /** A packet was received unsuccessfully. */
-  TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxErrLogger;
+  ns3::TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxErrLogger;
   /** A packet was sent from this Phy. */
-  TracedCallback<Ptr<const Packet>, double, UanTxMode > m_txLogger;
+  ns3::TracedCallback<Ptr<const Packet>, double, UanTxMode > m_txLogger;
   /** Callback when packet received without errors. */
   RxOkCallback m_recOkCb;
   /** Callback when packet received with errors. */
diff -Naur ns-3.21/src/uan/model/uan-phy-gen.cc ns-3.22/src/uan/model/uan-phy-gen.cc
--- ns-3.21/src/uan/model/uan-phy-gen.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-phy-gen.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,6 +28,7 @@
 #include "ns3/ptr.h"
 #include "ns3/trace-source-accessor.h"
 #include "ns3/double.h"
+#include "ns3/string.h"
 #include "ns3/log.h"
 #include "ns3/uan-tx-mode.h"
 #include "ns3/node.h"
@@ -36,10 +37,10 @@
 #include "ns3/acoustic-modem-energy-model.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("UanPhyGen");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanPhyGen");
+
 NS_OBJECT_ENSURE_REGISTERED (UanPhyGen);
 NS_OBJECT_ENSURE_REGISTERED (UanPhyPerGenDefault);
 NS_OBJECT_ENSURE_REGISTERED (UanPhyCalcSinrDefault);
@@ -458,23 +459,26 @@
                    MakeUanModesListChecker () )
     .AddAttribute ("PerModel",
                    "Functor to calculate PER based on SINR and TxMode.",
-                   PointerValue (CreateObject<UanPhyPerGenDefault> ()),
+                   StringValue ("ns3::UanPhyPerGenDefault"),
                    MakePointerAccessor (&UanPhyGen::m_per),
                    MakePointerChecker<UanPhyPer> ())
     .AddAttribute ("SinrModel",
                    "Functor to calculate SINR based on pkt arrivals and modes.",
-                   PointerValue (CreateObject<UanPhyCalcSinrDefault> ()),
+                   StringValue ("ns3::UanPhyCalcSinrDefault"),
                    MakePointerAccessor (&UanPhyGen::m_sinr),
                    MakePointerChecker<UanPhyCalcSinr> ())
     .AddTraceSource ("RxOk",
                      "A packet was received successfully.",
-                     MakeTraceSourceAccessor (&UanPhyGen::m_rxOkLogger))
+                     MakeTraceSourceAccessor (&UanPhyGen::m_rxOkLogger),
+                     "ns3::UanPhy::TracedCallback")
     .AddTraceSource ("RxError",
                      "A packet was received unsuccessfully.",
-                     MakeTraceSourceAccessor (&UanPhyGen::m_rxErrLogger))
+                     MakeTraceSourceAccessor (&UanPhyGen::m_rxErrLogger),
+                     "ns3::UanPhy::TracedCallback")
     .AddTraceSource ("Tx",
                      "Packet transmission beginning.",
-                     MakeTraceSourceAccessor (&UanPhyGen::m_txLogger))
+                     MakeTraceSourceAccessor (&UanPhyGen::m_txLogger),
+                     "ns3::UanPhy::TracedCallback")
   ;
   return tid;
 
diff -Naur ns-3.21/src/uan/model/uan-phy-gen.h ns-3.22/src/uan/model/uan-phy-gen.h
--- ns-3.21/src/uan/model/uan-phy-gen.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-phy-gen.h	2015-02-05 15:46:22.000000000 -0800
@@ -313,11 +313,11 @@
   /** Energy model callback. */
   DeviceEnergyModel::ChangeStateCallback m_energyCallback;
   /** A packet destined for this Phy was received without error. */
-  TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxOkLogger;
+  ns3::TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxOkLogger;
   /** A packet destined for this Phy was received with error. */
-  TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxErrLogger;
+  ns3::TracedCallback<Ptr<const Packet>, double, UanTxMode > m_rxErrLogger;
   /** A packet was sent from this Phy. */
-  TracedCallback<Ptr<const Packet>, double, UanTxMode > m_txLogger;
+  ns3::TracedCallback<Ptr<const Packet>, double, UanTxMode > m_txLogger;
 
   /**
    * Calculate the SINR value for a packet.
diff -Naur ns-3.21/src/uan/model/uan-phy.h ns-3.22/src/uan/model/uan-phy.h
--- ns-3.21/src/uan/model/uan-phy.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-phy.h	2015-02-05 15:46:22.000000000 -0800
@@ -203,6 +203,17 @@
   typedef Callback<void, Ptr<Packet>, double > RxErrCallback;
 
   /**
+   * TracedCallback signature for UanPhy packet send/receive events.
+   *
+   * \param [in] pkt The packet.
+   * \param [in] sinr The SINR.
+   * \param [in] mode The channel mode.
+   */
+  typedef void (* TracedCallback)
+    (const Ptr<const Packet> pkt, const double sinr, const UanTxMode mode);
+
+  
+  /**
    * Set the DeviceEnergyModel callback for UanPhy device. 
    * 
    * \param callback The DeviceEnergyModel change state callback.
@@ -506,7 +517,7 @@
    *
    * \see class CallBackTraceSource
    */
-  TracedCallback<Ptr<const Packet> > m_phyTxBeginTrace;
+  ns3::TracedCallback<Ptr<const Packet> > m_phyTxBeginTrace;
 
   /**
    * Trace source indicating a packet has been completely transmitted
@@ -514,7 +525,7 @@
    *
    * \see class CallBackTraceSource
    */
-  TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;
+  ns3::TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;
 
   /**
    * Trace source indicating a packet has been dropped by the device
@@ -522,7 +533,7 @@
    *
    * \see class CallBackTraceSource
    */
-  TracedCallback<Ptr<const Packet> > m_phyTxDropTrace;
+  ns3::TracedCallback<Ptr<const Packet> > m_phyTxDropTrace;
 
   /**
    * Trace source indicating a packet has begun being received
@@ -530,7 +541,7 @@
    *
    * \see class CallBackTraceSource
    */
-  TracedCallback<Ptr<const Packet> > m_phyRxBeginTrace;
+  ns3::TracedCallback<Ptr<const Packet> > m_phyRxBeginTrace;
 
   /**
    * Trace source indicating a packet has been completely received
@@ -538,7 +549,7 @@
    *
    * \see class CallBackTraceSource
    */
-  TracedCallback<Ptr<const Packet> > m_phyRxEndTrace;
+  ns3::TracedCallback<Ptr<const Packet> > m_phyRxEndTrace;
 
   /**
    * Trace source indicating a packet has been dropped by the device
@@ -546,7 +557,7 @@
    *
    * \see class CallBackTraceSource
    */
-  TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
+  ns3::TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
 
 };  // class UanPhy
 
diff -Naur ns-3.21/src/uan/model/uan-prop-model-thorp.cc ns-3.22/src/uan/model/uan-prop-model-thorp.cc
--- ns-3.21/src/uan/model/uan-prop-model-thorp.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-prop-model-thorp.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "ns3/double.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("UanPropModelThorp");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanPropModelThorp");
+
 NS_OBJECT_ENSURE_REGISTERED (UanPropModelThorp);
 
 UanPropModelThorp::UanPropModelThorp ()
diff -Naur ns-3.21/src/uan/model/uan-prop-model-thorp.h ns-3.22/src/uan/model/uan-prop-model-thorp.h
--- ns-3.21/src/uan/model/uan-prop-model-thorp.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-prop-model-thorp.h	2015-02-05 15:46:22.000000000 -0800
@@ -53,9 +53,9 @@
 
 private:
   /**
-   * Get the attenuation in dB / 1000 yards..
+   * Get the attenuation in dB / 1000 yards.
    * \param freqKhz The channel center frequency, in kHz.
-   * \return The attenuation, in dB / 1000 yards..
+   * \return The attenuation, in dB / 1000 yards.
    */
   double GetAttenDbKyd (double freqKhz);
   /**
diff -Naur ns-3.21/src/uan/model/uan-transducer-hd.cc ns-3.22/src/uan/model/uan-transducer-hd.cc
--- ns-3.21/src/uan/model/uan-transducer-hd.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-transducer-hd.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/pointer.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("UanTransducerHd");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanTransducerHd");
+
 NS_OBJECT_ENSURE_REGISTERED (UanTransducerHd);
   
 UanTransducerHd::UanTransducerHd ()
diff -Naur ns-3.21/src/uan/model/uan-tx-mode.cc ns-3.22/src/uan/model/uan-tx-mode.cc
--- ns-3.21/src/uan/model/uan-tx-mode.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-tx-mode.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include <map>
 #include <utility>
 
-NS_LOG_COMPONENT_DEFINE ("UanTxMode");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UanTxMode");
+
 UanTxMode::UanTxMode ()
 {
 }
@@ -300,7 +300,6 @@
   return is;
 }
 
-ATTRIBUTE_HELPER_CPP (UanModesList)
-  ;
+ATTRIBUTE_HELPER_CPP (UanModesList);
 
 } // namespace ns3
diff -Naur ns-3.21/src/uan/model/uan-tx-mode.h ns-3.22/src/uan/model/uan-tx-mode.h
--- ns-3.21/src/uan/model/uan-tx-mode.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/uan/model/uan-tx-mode.h	2015-02-05 15:46:22.000000000 -0800
@@ -251,6 +251,8 @@
  * \ingroup uan
  *
  * Container for UanTxModes.
+ *
+ * \see attribute_UanModesList
  */
 class UanModesList
 {
@@ -309,13 +311,7 @@
  */
 std::istream &operator >> (std::istream &is, UanModesList &ml);
 
-/**
- * \ingroup uan
- * \class ns3::UanModesListValue
- * \brief Attribute Value class for UanTxModes.
- */
-ATTRIBUTE_HELPER_HEADER (UanModesList)
-  ;
+ATTRIBUTE_HELPER_HEADER (UanModesList);
 
 } // namespace ns3
 
diff -Naur ns-3.21/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py ns-3.22/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -1252,10 +1252,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1635,7 +1635,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1686,6 +1691,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1762,6 +1772,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1796,6 +1810,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -2773,11 +2789,6 @@
                    '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', 
@@ -2848,6 +2859,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TypeIdChecker_methods(root_module, cls):
diff -Naur ns-3.21/src/virtual-net-device/bindings/modulegen__gcc_LP64.py ns-3.22/src/virtual-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -1252,10 +1252,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1635,7 +1635,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1686,6 +1691,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -1762,6 +1772,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -1796,6 +1810,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -2773,11 +2789,6 @@
                    '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', 
@@ -2848,6 +2859,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TypeIdChecker_methods(root_module, cls):
diff -Naur ns-3.21/src/virtual-net-device/model/virtual-net-device.cc ns-3.22/src/virtual-net-device/model/virtual-net-device.cc
--- ns-3.21/src/virtual-net-device/model/virtual-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/virtual-net-device/model/virtual-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ns3/uinteger.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("VirtualNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("VirtualNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (VirtualNetDevice);
 
 TypeId
@@ -48,25 +48,37 @@
                                          &VirtualNetDevice::GetMtu),
                    MakeUintegerChecker<uint16_t> ())
     .AddTraceSource ("MacTx", 
-                     "Trace source indicating a packet has arrived for transmission by this device",
-                     MakeTraceSourceAccessor (&VirtualNetDevice::m_macTxTrace))
+                     "Trace source indicating a packet has arrived "
+                     "for transmission by this device",
+                     MakeTraceSourceAccessor (&VirtualNetDevice::m_macTxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacPromiscRx", 
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&VirtualNetDevice::m_macPromiscRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a promiscuous trace,",
+                     MakeTraceSourceAccessor (&VirtualNetDevice::m_macPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRx", 
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&VirtualNetDevice::m_macRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a non-promiscuous trace,",
+                     MakeTraceSourceAccessor (&VirtualNetDevice::m_macRxTrace),
+                     "ns3::Packet::TracedCallback")
     //
     // Trace sources designed to simulate a packet sniffer facility (tcpdump). 
     //
     .AddTraceSource ("Sniffer", 
-                     "Trace source simulating a non-promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&VirtualNetDevice::m_snifferTrace))
+                     "Trace source simulating a non-promiscuous "
+                     "packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&VirtualNetDevice::m_snifferTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PromiscSniffer", 
-                     "Trace source simulating a promiscuous packet sniffer attached to the device",
-                     MakeTraceSourceAccessor (&VirtualNetDevice::m_promiscSnifferTrace))
+                     "Trace source simulating a promiscuous "
+                     "packet sniffer attached to the device",
+                     MakeTraceSourceAccessor (&VirtualNetDevice::m_promiscSnifferTrace),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/visualizer/model/pyviz.cc ns-3.22/src/visualizer/model/pyviz.cc
--- ns-3.21/src/visualizer/model/pyviz.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/visualizer/model/pyviz.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,7 @@
 #include <sstream>
 
 NS_LOG_COMPONENT_DEFINE ("PyViz");
+
 #define NUM_LAST_PACKETS 10
 
 static
diff -Naur ns-3.21/src/visualizer/model/visual-simulator-impl.cc ns-3.22/src/visualizer/model/visual-simulator-impl.cc
--- ns-3.21/src/visualizer/model/visual-simulator-impl.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/visualizer/model/visual-simulator-impl.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,11 +22,9 @@
 #include "ns3/default-simulator-impl.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("VisualSimulatorImpl");
-
 namespace ns3 {
 
-
+NS_LOG_COMPONENT_DEFINE ("VisualSimulatorImpl");
 
 NS_OBJECT_ENSURE_REGISTERED (VisualSimulatorImpl);
 
@@ -199,9 +197,9 @@
 }
 
 bool
-VisualSimulatorImpl::IsExpired (const EventId &ev) const
+VisualSimulatorImpl::IsExpired (const EventId &id) const
 {
-  return m_simulator->IsExpired (ev);
+  return m_simulator->IsExpired (id);
 }
 
 Time 
diff -Naur ns-3.21/src/visualizer/model/visual-simulator-impl.h ns-3.22/src/visualizer/model/visual-simulator-impl.h
--- ns-3.21/src/visualizer/model/visual-simulator-impl.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/visualizer/model/visual-simulator-impl.h	2015-02-05 15:46:22.000000000 -0800
@@ -36,7 +36,6 @@
  * \ingroup simulator
  *
  * \brief A replacement simulator that starts the visualizer
- * \internal
  *
  * To use this class, run any ns-3 simulation with the command-line
  * argument --SimulatorImplementationType=ns3::VisualSimulatorImpl.
@@ -58,9 +57,9 @@
   virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
-  virtual void Remove (const EventId &ev);
-  virtual void Cancel (const EventId &ev);
-  virtual bool IsExpired (const EventId &ev) const;
+  virtual void Remove (const EventId &id);
+  virtual void Cancel (const EventId &id);
+  virtual bool IsExpired (const EventId &id) const;
   virtual void Run (void);
   virtual Time Now (void) const;
   virtual Time GetDelayLeft (const EventId &id) const;
diff -Naur ns-3.21/src/wave/bindings/callbacks_list.py ns-3.22/src/wave/bindings/callbacks_list.py
--- ns-3.21/src/wave/bindings/callbacks_list.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/bindings/callbacks_list.py	2015-02-05 15:46:22.000000000 -0800
@@ -1,9 +1,16 @@
 callback_classes = [
     ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::WifiMacHeader const*', '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::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::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'],
+    ['bool', 'ns3::Ptr<ns3::Packet const>', 'ns3::Address const&', 'unsigned int', 'unsigned int', '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::Ptr<ns3::Packet>', 'ns3::Mac48Address', 'ns3::Mac48Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Mac48Address', 'unsigned char', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Mac48Address', 'unsigned char', 'bool', '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::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.21/src/wave/bindings/modulegen__gcc_ILP32.py ns-3.22/src/wave/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/wave/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -23,27 +23,37 @@
     ## 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_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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], 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_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', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelAccess [enumeration]
+    module.add_enum('ChannelAccess', ['ContinuousAccess', 'AlternatingAccess', 'ExtendedAccess', 'DefaultCchAccess', 'NoAccess'])
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
     module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA', 'OCB'], 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')
+    ## vsa-manager.h (module 'wave'): ns3::VsaTransmitInterval [enumeration]
+    module.add_enum('VsaTransmitInterval', ['VSA_TRANSMIT_IN_CCHI', 'VSA_TRANSMIT_IN_SCHI', 'VSA_TRANSMIT_IN_BOTHI'])
+    ## 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', '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]
     module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
+    ## application-container.h (module 'network'): ns3::ApplicationContainer [class]
+    module.add_class('ApplicationContainer', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper [class]
     module.add_class('AsciiTraceHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice [class]
     module.add_class('AsciiTraceHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv4 [class]
+    module.add_class('AsciiTraceHelperForIpv4', allow_subclassing=True, import_from_module='ns.internet')
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv6 [class]
+    module.add_class('AsciiTraceHelperForIpv6', allow_subclassing=True, import_from_module='ns.internet')
     ## 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]
@@ -74,20 +84,44 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## capability-information.h (module 'wifi'): ns3::CapabilityInformation [class]
     module.add_class('CapabilityInformation', import_from_module='ns.wifi')
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter [struct]
+    module.add_class('EdcaParameter')
     ## 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'])
     ## 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-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress [class]
+    module.add_class('Ipv4InterfaceAddress', import_from_module='ns.internet')
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e [enumeration]
+    module.add_enum('InterfaceAddressScope_e', ['HOST', 'LINK', 'GLOBAL'], outer_class=root_module['ns3::Ipv4InterfaceAddress'], import_from_module='ns.internet')
+    ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer [class]
+    module.add_class('Ipv4InterfaceContainer', import_from_module='ns.internet')
     ## 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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
+    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
+    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
+    module.add_enum('Scope_e', ['HOST', 'LINKLOCAL', 'GLOBAL'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6InterfaceContainer [class]
+    module.add_class('Ipv6InterfaceContainer', import_from_module='ns.internet')
     ## 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]
@@ -146,6 +180,12 @@
     module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
+    module.add_class('PcapHelperForIpv4', allow_subclassing=True, import_from_module='ns.internet')
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6 [class]
+    module.add_class('PcapHelperForIpv6', allow_subclassing=True, import_from_module='ns.internet')
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo [struct]
+    module.add_class('SchInfo')
     ## 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]
@@ -158,6 +198,10 @@
     module.add_class('TagBuffer', import_from_module='ns.network')
     ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
     module.add_class('TimeWithUnit', import_from_module='ns.core')
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo [struct]
+    module.add_class('TxInfo')
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile [struct]
+    module.add_class('TxProfile')
     ## 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]
@@ -166,8 +210,18 @@
     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'])
+    ## vector.h (module 'core'): ns3::Vector2D [class]
+    module.add_class('Vector2D', import_from_module='ns.core')
+    ## vector.h (module 'core'): ns3::Vector3D [class]
+    module.add_class('Vector3D', import_from_module='ns.core')
     ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificContentManager [class]
     module.add_class('VendorSpecificContentManager')
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo [struct]
+    module.add_class('VsaInfo')
+    ## wave-bsm-helper.h (module 'wave'): ns3::WaveBsmHelper [class]
+    module.add_class('WaveBsmHelper')
+    ## wave-helper.h (module 'wave'): ns3::WaveHelper [class]
+    module.add_class('WaveHelper', allow_subclassing=True)
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
     module.add_class('WifiHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
@@ -190,6 +244,12 @@
     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')
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper [class]
+    module.add_class('YansWifiChannelHelper', import_from_module='ns.wifi')
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper [class]
+    module.add_class('YansWifiPhyHelper', import_from_module='ns.wifi', parent=[root_module['ns3::WifiPhyHelper'], root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
+    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::YansWifiPhyHelper'], 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]
@@ -200,8 +260,20 @@
     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'])
-    ## higher-tx-tag.h (module 'wave'): ns3::HigherDataTxVectorTag [class]
-    module.add_class('HigherDataTxVectorTag', parent=root_module['ns3::Tag'])
+    ## higher-tx-tag.h (module 'wave'): ns3::HigherLayerTxVectorTag [class]
+    module.add_class('HigherLayerTxVectorTag', parent=root_module['ns3::Tag'])
+    ## internet-stack-helper.h (module 'internet'): ns3::InternetStackHelper [class]
+    module.add_class('InternetStackHelper', import_from_module='ns.internet', parent=[root_module['ns3::PcapHelperForIpv4'], root_module['ns3::PcapHelperForIpv6'], root_module['ns3::AsciiTraceHelperForIpv4'], root_module['ns3::AsciiTraceHelperForIpv6']])
+    ## 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', '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', ['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]
+    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader [class]
     module.add_class('MgtAddBaRequestHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaResponseHeader [class]
@@ -226,6 +298,10 @@
     module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper [class]
     module.add_class('QosWifiMacHelper', import_from_module='ns.wifi', parent=root_module['ns3::WifiMacHelper'])
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
+    module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
+    module.add_class('SequentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## 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]
@@ -234,10 +310,16 @@
     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::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::ChannelCoordinationListener', 'ns3::empty', 'ns3::DefaultDeleter<ns3::ChannelCoordinationListener>'], parent=root_module['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]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], parent=root_module['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]
@@ -248,6 +330,24 @@
     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'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::WifiInformationElement', 'ns3::empty', 'ns3::DefaultDeleter<ns3::WifiInformationElement>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## socket.h (module 'network'): ns3::Socket [class]
+    module.add_class('Socket', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## socket.h (module 'network'): ns3::Socket::SocketErrno [enumeration]
+    module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
+    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]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
@@ -258,8 +358,18 @@
     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'])
+    ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
+    module.add_class('TriangularRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
+    module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader [class]
     module.add_class('VendorSpecificActionHeader', parent=root_module['ns3::Header'])
+    ## vsa-manager.h (module 'wave'): ns3::VsaManager [class]
+    module.add_class('VsaManager', parent=root_module['ns3::Object'])
+    ## wave-bsm-stats.h (module 'wave'): ns3::WaveBsmStats [class]
+    module.add_class('WaveBsmStats', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
+    module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper [class]
     module.add_class('Wifi80211pHelper', parent=root_module['ns3::WifiHelper'])
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader [class]
@@ -298,54 +408,112 @@
     module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING', 'SLEEP'], outer_class=root_module['ns3::WifiPhy'], import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## wave-helper.h (module 'wave'): ns3::YansWavePhyHelper [class]
+    module.add_class('YansWavePhyHelper', parent=root_module['ns3::YansWifiPhyHelper'])
+    ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable [class]
+    module.add_class('ZetaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable [class]
+    module.add_class('ZipfRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader [class]
+    module.add_class('AmpduSubframeHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
+    ## application.h (module 'network'): ns3::Application [class]
+    module.add_class('Application', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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> >'])
+    ## bsm-application.h (module 'wave'): ns3::BsmApplication [class]
+    module.add_class('BsmApplication', parent=root_module['ns3::Application'])
     ## 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'])
+    ## channel.h (module 'network'): ns3::Channel [class]
+    module.add_class('Channel', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinationListener [class]
+    module.add_class('ChannelCoordinationListener', parent=root_module['ns3::SimpleRefCount< ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >'])
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinator [class]
+    module.add_class('ChannelCoordinator', parent=root_module['ns3::Object'])
+    ## channel-manager.h (module 'wave'): ns3::ChannelManager [class]
+    module.add_class('ChannelManager', parent=root_module['ns3::Object'])
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelScheduler [class]
+    module.add_class('ChannelScheduler', 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'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader [class]
     module.add_class('CtrlBAckRequestHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader [class]
     module.add_class('CtrlBAckResponseHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## dcf.h (module 'wifi'): ns3::Dcf [class]
     module.add_class('Dcf', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## default-channel-scheduler.h (module 'wave'): ns3::DefaultChannelScheduler [class]
+    module.add_class('DefaultChannelScheduler', parent=root_module['ns3::ChannelScheduler'])
+    ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
+    module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN [class]
     module.add_class('EdcaTxopN', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
+    module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## 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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable [class]
+    module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE [class]
     module.add_class('ExtendedSupportedRatesIE', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## 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'])
+    ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
+    module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol [class]
+    module.add_class('Ipv4L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv4'])
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::DropReason [enumeration]
+    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_BAD_CHECKSUM', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv4L3Protocol'], import_from_module='ns.internet')
     ## 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'])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute [class]
+    module.add_class('Ipv4MulticastRoute', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Route [class]
+    module.add_class('Ipv4Route', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
+    ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol [class]
+    module.add_class('Ipv4RoutingProtocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
+    ## ipv6.h (module 'internet'): ns3::Ipv6 [class]
+    module.add_class('Ipv6', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
+    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', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT'], 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]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
+    module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## 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]
@@ -354,6 +522,10 @@
     module.add_class('MacLow', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtBeaconHeader [class]
     module.add_class('MgtBeaconHeader', import_from_module='ns.wifi', parent=root_module['ns3::MgtProbeResponseHeader'])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
+    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator [class]
+    module.add_class('MpduAggregator', import_from_module='ns.wifi', 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]
@@ -362,6 +534,8 @@
     module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
+    module.add_class('NormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper [class]
     module.add_class('NqosWaveMacHelper', parent=root_module['ns3::NqosWifiMacHelper'])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
@@ -376,6 +550,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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
+    module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## pointer.h (module 'core'): ns3::PointerChecker [class]
     module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
@@ -400,12 +576,26 @@
     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'])
+    ## vector.h (module 'core'): ns3::Vector2DChecker [class]
+    module.add_class('Vector2DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector2DValue [class]
+    module.add_class('Vector2DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector3DChecker [class]
+    module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector3DValue [class]
+    module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## wave-mac-low.h (module 'wave'): ns3::WaveMacLow [class]
     module.add_class('WaveMacLow', parent=root_module['ns3::MacLow'])
+    ## wave-net-device.h (module 'wave'): ns3::WaveNetDevice [class]
+    module.add_class('WaveNetDevice', parent=root_module['ns3::NetDevice'])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel [class]
+    module.add_class('WifiChannel', import_from_module='ns.wifi', parent=root_module['ns3::Channel'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
     module.add_class('WifiModeValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## yans-wifi-channel.h (module 'wifi'): ns3::YansWifiChannel [class]
+    module.add_class('YansWifiChannel', import_from_module='ns.wifi', parent=root_module['ns3::WifiChannel'])
     ## 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]
@@ -414,23 +604,49 @@
     module.add_class('DcaTxop', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
     ## ocb-wifi-mac.h (module 'wave'): ns3::OcbWifiMac [class]
     module.add_class('OcbWifiMac', parent=root_module['ns3::RegularWifiMac'])
+    module.add_container('ns3::EdcaParameterSet', ('ns3::AcIndex', 'ns3::EdcaParameter'), container_type=u'map')
+    module.add_container('std::vector< double >', 'double', container_type=u'vector')
+    module.add_container('std::vector< int >', 'int', container_type=u'vector')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
     module.add_container('ns3::WifiMcsList', 'unsigned char', container_type=u'vector')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader >', container_type=u'list')
+    module.add_container('std::map< unsigned int, ns3::Ptr< ns3::OcbWifiMac > >', ('unsigned int', 'ns3::Ptr< ns3::OcbWifiMac >'), container_type=u'map')
+    module.add_container('std::vector< ns3::Ptr< ns3::WifiPhy > >', 'ns3::Ptr< ns3::WifiPhy >', container_type=u'vector')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >', u'ns3::EdcaParameterSet')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >*', u'ns3::EdcaParameterSet*')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >&', u'ns3::EdcaParameterSet&')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::VscCallback')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::VscCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::VscCallback&')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
+    module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >', u'ns3::EdcaParameterSetI')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >*', u'ns3::EdcaParameterSetI*')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >&', u'ns3::EdcaParameterSetI&')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', u'ns3::WifiMcsListIterator')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', u'ns3::WifiMcsListIterator*')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', u'ns3::WifiMcsListIterator&')
@@ -493,8 +709,11 @@
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3ApplicationContainer_methods(root_module, root_module['ns3::ApplicationContainer'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
     register_Ns3AsciiTraceHelperForDevice_methods(root_module, root_module['ns3::AsciiTraceHelperForDevice'])
+    register_Ns3AsciiTraceHelperForIpv4_methods(root_module, root_module['ns3::AsciiTraceHelperForIpv4'])
+    register_Ns3AsciiTraceHelperForIpv6_methods(root_module, root_module['ns3::AsciiTraceHelperForIpv6'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3Bar_methods(root_module, root_module['ns3::Bar'])
@@ -510,11 +729,18 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3CapabilityInformation_methods(root_module, root_module['ns3::CapabilityInformation'])
+    register_Ns3EdcaParameter_methods(root_module, root_module['ns3::EdcaParameter'])
     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_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
+    register_Ns3Ipv4InterfaceContainer_methods(root_module, root_module['ns3::Ipv4InterfaceContainer'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
+    register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
+    register_Ns3Ipv6InterfaceContainer_methods(root_module, root_module['ns3::Ipv6InterfaceContainer'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3MacLowBlockAckEventListener_methods(root_module, root_module['ns3::MacLowBlockAckEventListener'])
@@ -538,16 +764,26 @@
     register_Ns3PcapFile_methods(root_module, root_module['ns3::PcapFile'])
     register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
     register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
+    register_Ns3PcapHelperForIpv4_methods(root_module, root_module['ns3::PcapHelperForIpv4'])
+    register_Ns3PcapHelperForIpv6_methods(root_module, root_module['ns3::PcapHelperForIpv6'])
+    register_Ns3SchInfo_methods(root_module, root_module['ns3::SchInfo'])
     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_Ns3StatusCode_methods(root_module, root_module['ns3::StatusCode'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
+    register_Ns3TxInfo_methods(root_module, root_module['ns3::TxInfo'])
+    register_Ns3TxProfile_methods(root_module, root_module['ns3::TxProfile'])
     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_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
+    register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3VendorSpecificContentManager_methods(root_module, root_module['ns3::VendorSpecificContentManager'])
+    register_Ns3VsaInfo_methods(root_module, root_module['ns3::VsaInfo'])
+    register_Ns3WaveBsmHelper_methods(root_module, root_module['ns3::WaveBsmHelper'])
+    register_Ns3WaveHelper_methods(root_module, root_module['ns3::WaveHelper'])
     register_Ns3WifiHelper_methods(root_module, root_module['ns3::WifiHelper'])
     register_Ns3WifiMacHelper_methods(root_module, root_module['ns3::WifiMacHelper'])
     register_Ns3WifiMode_methods(root_module, root_module['ns3::WifiMode'])
@@ -558,11 +794,16 @@
     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'])
     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_Ns3HigherDataTxVectorTag_methods(root_module, root_module['ns3::HigherDataTxVectorTag'])
+    register_Ns3HigherLayerTxVectorTag_methods(root_module, root_module['ns3::HigherLayerTxVectorTag'])
+    register_Ns3InternetStackHelper_methods(root_module, root_module['ns3::InternetStackHelper'])
+    register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
+    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     register_Ns3MgtAddBaRequestHeader_methods(root_module, root_module['ns3::MgtAddBaRequestHeader'])
     register_Ns3MgtAddBaResponseHeader_methods(root_module, root_module['ns3::MgtAddBaResponseHeader'])
     register_Ns3MgtAssocRequestHeader_methods(root_module, root_module['ns3::MgtAssocRequestHeader'])
@@ -575,21 +816,38 @@
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3QosWifiMacHelper_methods(root_module, root_module['ns3::QosWifiMacHelper'])
+    register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
+    register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     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__Ns3ChannelCoordinationListener_Ns3Empty_Ns3DefaultDeleter__lt__ns3ChannelCoordinationListener__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >'])
     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> >'])
     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> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3SimpleRefCount__Ns3WifiInformationElement_Ns3Empty_Ns3DefaultDeleter__lt__ns3WifiInformationElement__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> >'])
+    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'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
+    register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
+    register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3VendorSpecificActionHeader_methods(root_module, root_module['ns3::VendorSpecificActionHeader'])
+    register_Ns3VsaManager_methods(root_module, root_module['ns3::VsaManager'])
+    register_Ns3WaveBsmStats_methods(root_module, root_module['ns3::WaveBsmStats'])
+    register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
     register_Ns3Wifi80211pHelper_methods(root_module, root_module['ns3::Wifi80211pHelper'])
     register_Ns3WifiActionHeader_methods(root_module, root_module['ns3::WifiActionHeader'])
     register_Ns3WifiActionHeaderActionValue_methods(root_module, root_module['ns3::WifiActionHeader::ActionValue'])
@@ -599,37 +857,67 @@
     register_Ns3WifiMacQueue_methods(root_module, root_module['ns3::WifiMacQueue'])
     register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
     register_Ns3WifiRemoteStationManager_methods(root_module, root_module['ns3::WifiRemoteStationManager'])
+    register_Ns3YansWavePhyHelper_methods(root_module, root_module['ns3::YansWavePhyHelper'])
+    register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
+    register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
+    register_Ns3AmpduSubframeHeader_methods(root_module, root_module['ns3::AmpduSubframeHeader'])
+    register_Ns3Application_methods(root_module, root_module['ns3::Application'])
     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_Ns3BsmApplication_methods(root_module, root_module['ns3::BsmApplication'])
     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_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
+    register_Ns3ChannelCoordinationListener_methods(root_module, root_module['ns3::ChannelCoordinationListener'])
+    register_Ns3ChannelCoordinator_methods(root_module, root_module['ns3::ChannelCoordinator'])
+    register_Ns3ChannelManager_methods(root_module, root_module['ns3::ChannelManager'])
+    register_Ns3ChannelScheduler_methods(root_module, root_module['ns3::ChannelScheduler'])
+    register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3CtrlBAckRequestHeader_methods(root_module, root_module['ns3::CtrlBAckRequestHeader'])
     register_Ns3CtrlBAckResponseHeader_methods(root_module, root_module['ns3::CtrlBAckResponseHeader'])
     register_Ns3Dcf_methods(root_module, root_module['ns3::Dcf'])
+    register_Ns3DefaultChannelScheduler_methods(root_module, root_module['ns3::DefaultChannelScheduler'])
+    register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EdcaTxopN_methods(root_module, root_module['ns3::EdcaTxopN'])
+    register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
+    register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
+    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_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
+    register_Ns3Ipv4L3Protocol_methods(root_module, root_module['ns3::Ipv4L3Protocol'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
     register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
+    register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
+    register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
+    register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
+    register_Ns3Ipv6_methods(root_module, root_module['ns3::Ipv6'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
+    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_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3MacLow_methods(root_module, root_module['ns3::MacLow'])
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
+    register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
+    register_Ns3MpduAggregator_methods(root_module, root_module['ns3::MpduAggregator'])
     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'])
+    register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3NqosWaveMacHelper_methods(root_module, root_module['ns3::NqosWaveMacHelper'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
@@ -637,6 +925,7 @@
     register_Ns3OrganizationIdentifierValue_methods(root_module, root_module['ns3::OrganizationIdentifierValue'])
     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_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
     register_Ns3QosWaveMacHelper_methods(root_module, root_module['ns3::QosWaveMacHelper'])
@@ -649,9 +938,16 @@
     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_Ns3Vector2DChecker_methods(root_module, root_module['ns3::Vector2DChecker'])
+    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_Ns3WaveMacLow_methods(root_module, root_module['ns3::WaveMacLow'])
+    register_Ns3WaveNetDevice_methods(root_module, root_module['ns3::WaveNetDevice'])
+    register_Ns3WifiChannel_methods(root_module, root_module['ns3::WifiChannel'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
+    register_Ns3YansWifiChannel_methods(root_module, root_module['ns3::YansWifiChannel'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3DcaTxop_methods(root_module, root_module['ns3::DcaTxop'])
@@ -733,6 +1029,57 @@
                    is_const=True)
     return
 
+def register_Ns3ApplicationContainer_methods(root_module, cls):
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(ns3::ApplicationContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ApplicationContainer const &', 'arg0')])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer() [constructor]
+    cls.add_constructor([])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(ns3::Ptr<ns3::Application> application) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Application >', 'application')])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(std::string name) [constructor]
+    cls.add_constructor([param('std::string', 'name')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(ns3::ApplicationContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::ApplicationContainer', 'other')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(ns3::Ptr<ns3::Application> application) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Application >', 'application')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name')])
+    ## application-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Application>*,std::vector<ns3::Ptr<ns3::Application>, std::allocator<ns3::Ptr<ns3::Application> > > > ns3::ApplicationContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Application>*,std::vector<ns3::Ptr<ns3::Application>, std::allocator<ns3::Ptr<ns3::Application> > > > ns3::ApplicationContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): ns3::Ptr<ns3::Application> ns3::ApplicationContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::Application >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## application-container.h (module 'network'): uint32_t ns3::ApplicationContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Start(ns3::Time start) [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [param('ns3::Time', 'start')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Stop(ns3::Time stop) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time', 'stop')])
+    return
+
 def register_Ns3AsciiTraceHelper_methods(root_module, cls):
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper(ns3::AsciiTraceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AsciiTraceHelper const &', 'arg0')])
@@ -852,6 +1199,126 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3AsciiTraceHelperForIpv4_methods(root_module, cls):
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv4::AsciiTraceHelperForIpv4(ns3::AsciiTraceHelperForIpv4 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AsciiTraceHelperForIpv4 const &', 'arg0')])
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv4::AsciiTraceHelperForIpv4() [constructor]
+    cls.add_constructor([])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, std::string ipv4Name, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ipv4Name'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string ipv4Name, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'ipv4Name'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, ns3::Ipv4InterfaceContainer c) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ipv4InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ipv4InterfaceContainer c) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ipv4InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, uint32_t nodeid, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4All(std::string prefix) [member function]
+    cls.add_method('EnableAsciiIpv4All', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4All(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('EnableAsciiIpv4All', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4Internal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv4Internal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3AsciiTraceHelperForIpv6_methods(root_module, cls):
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv6::AsciiTraceHelperForIpv6(ns3::AsciiTraceHelperForIpv6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AsciiTraceHelperForIpv6 const &', 'arg0')])
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv6::AsciiTraceHelperForIpv6() [constructor]
+    cls.add_constructor([])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, std::string ipv6Name, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ipv6Name'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string ipv6Name, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'ipv6Name'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, ns3::Ipv6InterfaceContainer c) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ipv6InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ipv6InterfaceContainer c) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ipv6InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, uint32_t nodeid, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6All(std::string prefix) [member function]
+    cls.add_method('EnableAsciiIpv6All', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6All(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('EnableAsciiIpv6All', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6Internal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv6Internal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    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')])
@@ -945,11 +1412,21 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): uint16_t ns3::BlockAckAgreement::GetWinEnd() const [member function]
+    cls.add_method('GetWinEnd', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsAmsduSupported() const [member function]
     cls.add_method('IsAmsduSupported', 
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsHtSupported() const [member function]
+    cls.add_method('IsHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsImmediateBlockAck() const [member function]
     cls.add_method('IsImmediateBlockAck', 
                    'bool', 
@@ -967,6 +1444,10 @@
     cls.add_method('SetDelayedBlockAck', 
                    'void', 
                    [])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetHtSupported(bool htSupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'htSupported')])
     ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetImmediateBlockAck() [member function]
     cls.add_method('SetImmediateBlockAck', 
                    'void', 
@@ -979,6 +1460,10 @@
     cls.add_method('SetTimeout', 
                    'void', 
                    [param('uint16_t', 'timeout')])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetWinEnd(uint16_t seq) [member function]
+    cls.add_method('SetWinEnd', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
     return
 
 def register_Ns3BlockAckCache_methods(root_module, cls):
@@ -990,6 +1475,10 @@
     cls.add_method('FillBlockAckBitmap', 
                    'void', 
                    [param('ns3::CtrlBAckResponseHeader *', 'blockAckHeader')])
+    ## block-ack-cache.h (module 'wifi'): uint16_t ns3::BlockAckCache::GetWinStart() [member function]
+    cls.add_method('GetWinStart', 
+                   'uint16_t', 
+                   [])
     ## block-ack-cache.h (module 'wifi'): void ns3::BlockAckCache::Init(uint16_t winStart, uint16_t winSize) [member function]
     cls.add_method('Init', 
                    'void', 
@@ -1007,6 +1496,14 @@
 def register_Ns3BlockAckManager_methods(root_module, cls):
     ## block-ack-manager.h (module 'wifi'): ns3::BlockAckManager::BlockAckManager() [constructor]
     cls.add_constructor([])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::AlreadyExists(uint16_t currentSeq, ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('AlreadyExists', 
+                   'bool', 
+                   [param('uint16_t', 'currentSeq'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CompleteAmpduExchange(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduExchange', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CreateAgreement(ns3::MgtAddBaRequestHeader const * reqHdr, ns3::Mac48Address recipient) [member function]
     cls.add_method('CreateAgreement', 
                    'void', 
@@ -1063,6 +1560,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::NeedBarRetransmission(uint8_t tid, uint16_t seqNumber, ns3::Mac48Address recipient) [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('uint16_t', 'seqNumber'), param('ns3::Mac48Address', 'recipient')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyAgreementEstablished(ns3::Mac48Address recipient, uint8_t tid, uint16_t startingSeq) [member function]
     cls.add_method('NotifyAgreementEstablished', 
                    'void', 
@@ -1071,14 +1572,22 @@
     cls.add_method('NotifyAgreementUnsuccessful', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('NotifyGotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber) [member function]
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, ns3::WifiMacHeader::QosAckPolicy policy) [member function]
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
-                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber')])
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemovePacket', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetBlockAckInactivityCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetBlockAckInactivityCallback', 
                    'void', 
@@ -1103,14 +1612,26 @@
     cls.add_method('SetQueue', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiMacQueue >', 'queue')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxFailedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
     cls.add_method('SetTxMiddle', 
                    'void', 
                    [param('ns3::MacTxMiddle *', 'txMiddle')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetUnblockDestinationCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetUnblockDestinationCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> manager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'manager')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::StorePacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr, ns3::Time tStamp) [member function]
     cls.add_method('StorePacket', 
                    'void', 
@@ -1545,6 +2066,19 @@
                    [])
     return
 
+def register_Ns3EdcaParameter_methods(root_module, cls):
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::EdcaParameter() [constructor]
+    cls.add_constructor([])
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::EdcaParameter(ns3::EdcaParameter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameter const &', 'arg0')])
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::aifsn [variable]
+    cls.add_instance_attribute('aifsn', 'uint32_t', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::cwmax [variable]
+    cls.add_instance_attribute('cwmax', 'uint32_t', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::cwmin [variable]
+    cls.add_instance_attribute('cwmin', 'uint32_t', is_const=False)
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -1619,6 +2153,92 @@
                    [])
     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_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -1727,6 +2347,119 @@
                    [param('char const *', 'address')])
     return
 
+def register_Ns3Ipv4InterfaceAddress_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress() [constructor]
+    cls.add_constructor([])
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress(ns3::Ipv4Address local, ns3::Ipv4Mask mask) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'local'), param('ns3::Ipv4Mask', 'mask')])
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress(ns3::Ipv4InterfaceAddress const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4InterfaceAddress const &', 'o')])
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceAddress::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceAddress::GetLocal() const [member function]
+    cls.add_method('GetLocal', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Mask ns3::Ipv4InterfaceAddress::GetMask() const [member function]
+    cls.add_method('GetMask', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e ns3::Ipv4InterfaceAddress::GetScope() const [member function]
+    cls.add_method('GetScope', 
+                   'ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): bool ns3::Ipv4InterfaceAddress::IsSecondary() const [member function]
+    cls.add_method('IsSecondary', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetBroadcast(ns3::Ipv4Address broadcast) [member function]
+    cls.add_method('SetBroadcast', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'broadcast')])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetLocal(ns3::Ipv4Address local) [member function]
+    cls.add_method('SetLocal', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'local')])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetMask(ns3::Ipv4Mask mask) [member function]
+    cls.add_method('SetMask', 
+                   'void', 
+                   [param('ns3::Ipv4Mask', 'mask')])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetPrimary() [member function]
+    cls.add_method('SetPrimary', 
+                   'void', 
+                   [])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetScope(ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
+    cls.add_method('SetScope', 
+                   'void', 
+                   [param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetSecondary() [member function]
+    cls.add_method('SetSecondary', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3Ipv4InterfaceContainer_methods(root_module, cls):
+    ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer(ns3::Ipv4InterfaceContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4InterfaceContainer const &', 'arg0')])
+    ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer() [constructor]
+    cls.add_constructor([])
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ipv4InterfaceContainer', 'other')])
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface')])
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(std::pair<ns3::Ptr<ns3::Ipv4>,unsigned int> ipInterfacePair) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int >', 'ipInterfacePair')])
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(std::string ipv4Name, uint32_t interface) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'ipv4Name'), param('uint32_t', 'interface')])
+    ## ipv4-interface-container.h (module 'internet'): __gnu_cxx::__normal_iterator<const std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int>*,std::vector<std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int>, std::allocator<std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int> > > > ns3::Ipv4InterfaceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int > const, std::vector< std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int > > >', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): __gnu_cxx::__normal_iterator<const std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int>*,std::vector<std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int>, std::allocator<std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int> > > > ns3::Ipv4InterfaceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int > const, std::vector< std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int > > >', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): std::pair<ns3::Ptr<ns3::Ipv4>,unsigned int> ns3::Ipv4InterfaceContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceContainer::GetAddress(uint32_t i, uint32_t j=0) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'i'), param('uint32_t', 'j', default_value='0')], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): uint32_t ns3::Ipv4InterfaceContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::SetMetric(uint32_t i, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('uint16_t', 'metric')])
+    return
+
 def register_Ns3Ipv4Mask_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -1989,6 +2722,138 @@
                    [param('uint8_t *', 'address')])
     return
 
+def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
+    cls.add_constructor([])
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
+    cls.add_method('GetNsDadUid', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
+    cls.add_method('GetPrefix', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
+    cls.add_method('GetScope', 
+                   'ns3::Ipv6InterfaceAddress::Scope_e', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
+    cls.add_method('GetState', 
+                   'ns3::Ipv6InterfaceAddress::State_e', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
+    cls.add_method('SetNsDadUid', 
+                   'void', 
+                   [param('uint32_t', 'uid')])
+    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
+    cls.add_method('SetScope', 
+                   'void', 
+                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
+    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
+    cls.add_method('SetState', 
+                   'void', 
+                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
+    return
+
+def register_Ns3Ipv6InterfaceContainer_methods(root_module, cls):
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6InterfaceContainer::Ipv6InterfaceContainer(ns3::Ipv6InterfaceContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6InterfaceContainer const &', 'arg0')])
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6InterfaceContainer::Ipv6InterfaceContainer() [constructor]
+    cls.add_constructor([])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer & c) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ipv6InterfaceContainer &', 'c')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(std::string ipv6Name, uint32_t interface) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'ipv6Name'), param('uint32_t', 'interface')])
+    ## ipv6-interface-container.h (module 'internet'): __gnu_cxx::__normal_iterator<const std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int>*,std::vector<std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int>, std::allocator<std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int> > > > ns3::Ipv6InterfaceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< std::pair< ns3::Ptr< ns3::Ipv6 >, unsigned int > const, std::vector< std::pair< ns3::Ptr< ns3::Ipv6 >, unsigned int > > >', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): __gnu_cxx::__normal_iterator<const std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int>*,std::vector<std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int>, std::allocator<std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int> > > > ns3::Ipv6InterfaceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< std::pair< ns3::Ptr< ns3::Ipv6 >, unsigned int > const, std::vector< std::pair< ns3::Ptr< ns3::Ipv6 >, unsigned int > > >', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetAddress(uint32_t i, uint32_t j) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'i'), param('uint32_t', 'j')], 
+                   is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): uint32_t ns3::Ipv6InterfaceContainer::GetInterfaceIndex(uint32_t i) const [member function]
+    cls.add_method('GetInterfaceIndex', 
+                   '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', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRoute(uint32_t i, uint32_t router) [member function]
+    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')])
+    return
+
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -2129,24 +2994,79 @@
                    'void', 
                    [param('ns3::Mac48Address', 'originator'), param('uint8_t', 'tid')], 
                    is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3MacLowDcfListener_methods(root_module, cls):
-    ## mac-low.h (module 'wifi'): ns3::MacLowDcfListener::MacLowDcfListener(ns3::MacLowDcfListener const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MacLowDcfListener const &', 'arg0')])
-    ## mac-low.h (module 'wifi'): ns3::MacLowDcfListener::MacLowDcfListener() [constructor]
-    cls.add_constructor([])
-    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::AckTimeoutReset() [member function]
-    cls.add_method('AckTimeoutReset', 
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
                    'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::AckTimeoutStart(ns3::Time duration) [member function]
-    cls.add_method('AckTimeoutStart', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::CompleteTransfer(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('CompleteTransfer', 
                    'void', 
-                   [param('ns3::Time', 'duration')], 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLowBlockAckEventListener::GetBlockAckAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBlockAckAgreementExists', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::CtsTimeoutReset() [member function]
+    ## mac-low.h (module 'wifi'): uint32_t ns3::MacLowBlockAckEventListener::GetNOutstandingPackets(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint32_t ns3::MacLowBlockAckEventListener::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint16_t ns3::MacLowBlockAckEventListener::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::MacLowBlockAckEventListener::GetQueue() [member function]
+    cls.add_method('GetQueue', 
+                   'ns3::Ptr< ns3::WifiMacQueue >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::MacLowBlockAckEventListener::PeekNextPacketInBaQueue(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketInBaQueue', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint16_t ns3::MacLowBlockAckEventListener::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::RemoveFromBaQueue(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveFromBaQueue', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::SetAmpdu(bool ampdu) [member function]
+    cls.add_method('SetAmpdu', 
+                   'void', 
+                   [param('bool', 'ampdu')], 
+                   is_virtual=True)
+    return
+
+def register_Ns3MacLowDcfListener_methods(root_module, cls):
+    ## mac-low.h (module 'wifi'): ns3::MacLowDcfListener::MacLowDcfListener(ns3::MacLowDcfListener const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MacLowDcfListener const &', 'arg0')])
+    ## mac-low.h (module 'wifi'): ns3::MacLowDcfListener::MacLowDcfListener() [constructor]
+    cls.add_constructor([])
+    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::AckTimeoutReset() [member function]
+    cls.add_method('AckTimeoutReset', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::AckTimeoutStart(ns3::Time duration) [member function]
+    cls.add_method('AckTimeoutStart', 
+                   'void', 
+                   [param('ns3::Time', 'duration')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::CtsTimeoutReset() [member function]
     cls.add_method('CtsTimeoutReset', 
                    'void', 
                    [], 
@@ -2188,10 +3108,10 @@
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, ns3::WifiMode txMode) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source')], 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('ns3::WifiMode', 'txMode')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
@@ -2459,10 +3379,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2934,10 +3854,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2984,6 +3904,97 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3PcapHelperForIpv4_methods(root_module, cls):
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4::PcapHelperForIpv4(ns3::PcapHelperForIpv4 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PcapHelperForIpv4 const &', 'arg0')])
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4::PcapHelperForIpv4() [constructor]
+    cls.add_constructor([])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, std::string ipv4Name, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ipv4Name'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, ns3::Ipv4InterfaceContainer c) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ipv4InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4All(std::string prefix) [member function]
+    cls.add_method('EnablePcapIpv4All', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4Internal(std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv4Internal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3PcapHelperForIpv6_methods(root_module, cls):
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6::PcapHelperForIpv6(ns3::PcapHelperForIpv6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PcapHelperForIpv6 const &', 'arg0')])
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6::PcapHelperForIpv6() [constructor]
+    cls.add_constructor([])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, std::string ipv6Name, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ipv6Name'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, ns3::Ipv6InterfaceContainer c) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ipv6InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6All(std::string prefix) [member function]
+    cls.add_method('EnablePcapIpv6All', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6Internal(std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv6Internal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SchInfo_methods(root_module, cls):
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(ns3::SchInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SchInfo const &', 'arg0')])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo() [constructor]
+    cls.add_constructor([])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess')])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess, ns3::EdcaParameterSet edca) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess'), param('ns3::EdcaParameterSet', 'edca')])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::channelNumber [variable]
+    cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::edcaParameterSet [variable]
+    cls.add_instance_attribute('edcaParameterSet', 'ns3::EdcaParameterSet', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::extendedAccess [variable]
+    cls.add_instance_attribute('extendedAccess', 'uint8_t', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::immediateAccess [variable]
+    cls.add_instance_attribute('immediateAccess', 'bool', 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([])
@@ -3214,6 +4225,40 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3TxInfo_methods(root_module, cls):
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::TxInfo(ns3::TxInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TxInfo const &', 'arg0')])
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::TxInfo() [constructor]
+    cls.add_constructor([])
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::TxInfo(uint32_t channel, uint32_t prio=7, ns3::WifiMode rate=ns3::WifiMode(), uint32_t powerLevel=8) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('uint32_t', 'prio', default_value='7'), param('ns3::WifiMode', 'rate', default_value='ns3::WifiMode()'), param('uint32_t', 'powerLevel', default_value='8')])
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::channelNumber [variable]
+    cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::dataRate [variable]
+    cls.add_instance_attribute('dataRate', 'ns3::WifiMode', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::priority [variable]
+    cls.add_instance_attribute('priority', 'uint32_t', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::txPowerLevel [variable]
+    cls.add_instance_attribute('txPowerLevel', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3TxProfile_methods(root_module, cls):
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::TxProfile(ns3::TxProfile const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TxProfile const &', 'arg0')])
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::TxProfile() [constructor]
+    cls.add_constructor([])
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::TxProfile(uint32_t channel, bool adapt=true, uint32_t powerLevel=4) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'adapt', default_value='true'), param('uint32_t', 'powerLevel', default_value='4')])
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::adaptable [variable]
+    cls.add_instance_attribute('adaptable', 'bool', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::channelNumber [variable]
+    cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::dataRate [variable]
+    cls.add_instance_attribute('dataRate', 'ns3::WifiMode', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::txPowerLevel [variable]
+    cls.add_instance_attribute('txPowerLevel', 'uint32_t', is_const=False)
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -3236,7 +4281,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3287,6 +4337,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3363,6 +4418,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3397,12 +4456,44 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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_Ns3Vector2D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(double _x, double _y) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector2D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    return
+
+def register_Ns3Vector3D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(ns3::Vector3D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(double _x, double _y, double _z) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y'), param('double', '_z')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::z [variable]
+    cls.add_instance_attribute('z', 'double', is_const=False)
+    return
+
 def register_Ns3VendorSpecificContentManager_methods(root_module, cls):
     ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificContentManager::VendorSpecificContentManager(ns3::VendorSpecificContentManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::VendorSpecificContentManager const &', 'arg0')])
@@ -3416,12 +4507,127 @@
     cls.add_method('FindVscCallback', 
                    'ns3::VscCallback', 
                    [param('ns3::OrganizationIdentifier &', 'oi')])
+    ## vendor-specific-action.h (module 'wave'): bool ns3::VendorSpecificContentManager::IsVscCallbackRegistered(ns3::OrganizationIdentifier & oi) [member function]
+    cls.add_method('IsVscCallbackRegistered', 
+                   'bool', 
+                   [param('ns3::OrganizationIdentifier &', 'oi')])
     ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificContentManager::RegisterVscCallback(ns3::OrganizationIdentifier oi, ns3::VscCallback cb) [member function]
     cls.add_method('RegisterVscCallback', 
                    'void', 
                    [param('ns3::OrganizationIdentifier', 'oi'), param('ns3::VscCallback', 'cb')])
     return
 
+def register_Ns3VsaInfo_methods(root_module, cls):
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::VsaInfo(ns3::VsaInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VsaInfo const &', 'arg0')])
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::VsaInfo(ns3::Mac48Address peer, ns3::OrganizationIdentifier identifier, uint8_t manageId, ns3::Ptr<ns3::Packet> vscPacket, uint32_t channel, uint8_t repeat, ns3::VsaTransmitInterval interval) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address', 'peer'), param('ns3::OrganizationIdentifier', 'identifier'), param('uint8_t', 'manageId'), param('ns3::Ptr< ns3::Packet >', 'vscPacket'), param('uint32_t', 'channel'), param('uint8_t', 'repeat'), param('ns3::VsaTransmitInterval', 'interval')])
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::channelNumber [variable]
+    cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::managementId [variable]
+    cls.add_instance_attribute('managementId', 'uint8_t', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::oi [variable]
+    cls.add_instance_attribute('oi', 'ns3::OrganizationIdentifier', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::peer [variable]
+    cls.add_instance_attribute('peer', 'ns3::Mac48Address', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::repeatRate [variable]
+    cls.add_instance_attribute('repeatRate', 'uint8_t', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::sendInterval [variable]
+    cls.add_instance_attribute('sendInterval', 'ns3::VsaTransmitInterval', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::vsc [variable]
+    cls.add_instance_attribute('vsc', 'ns3::Ptr< ns3::Packet >', is_const=False)
+    return
+
+def register_Ns3WaveBsmHelper_methods(root_module, cls):
+    ## wave-bsm-helper.h (module 'wave'): ns3::WaveBsmHelper::WaveBsmHelper(ns3::WaveBsmHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WaveBsmHelper const &', 'arg0')])
+    ## wave-bsm-helper.h (module 'wave'): ns3::WaveBsmHelper::WaveBsmHelper() [constructor]
+    cls.add_constructor([])
+    ## wave-bsm-helper.h (module 'wave'): int64_t ns3::WaveBsmHelper::AssignStreams(ns3::NodeContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NodeContainer', 'c'), param('int64_t', 'stream')])
+    ## wave-bsm-helper.h (module 'wave'): static std::vector<int, std::allocator<int> > & ns3::WaveBsmHelper::GetNodesMoving() [member function]
+    cls.add_method('GetNodesMoving', 
+                   'std::vector< int > &', 
+                   [], 
+                   is_static=True)
+    ## wave-bsm-helper.h (module 'wave'): ns3::Ptr<ns3::WaveBsmStats> ns3::WaveBsmHelper::GetWaveBsmStats() [member function]
+    cls.add_method('GetWaveBsmStats', 
+                   'ns3::Ptr< ns3::WaveBsmStats >', 
+                   [])
+    ## wave-bsm-helper.h (module 'wave'): ns3::ApplicationContainer ns3::WaveBsmHelper::Install(ns3::Ipv4InterfaceContainer i) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ipv4InterfaceContainer', 'i')], 
+                   is_const=True)
+    ## wave-bsm-helper.h (module 'wave'): ns3::ApplicationContainer ns3::WaveBsmHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True)
+    ## wave-bsm-helper.h (module 'wave'): void ns3::WaveBsmHelper::Install(ns3::Ipv4InterfaceContainer & i, ns3::Time totalTime, uint32_t wavePacketSize, ns3::Time waveInterval, double gpsAccuracyNs, std::vector<double, std::allocator<double> > ranges, int chAccessMode, ns3::Time txMaxDelay) [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::Ipv4InterfaceContainer &', 'i'), param('ns3::Time', 'totalTime'), param('uint32_t', 'wavePacketSize'), param('ns3::Time', 'waveInterval'), param('double', 'gpsAccuracyNs'), param('std::vector< double >', 'ranges'), param('int', 'chAccessMode'), param('ns3::Time', 'txMaxDelay')])
+    ## wave-bsm-helper.h (module 'wave'): void ns3::WaveBsmHelper::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_Ns3WaveHelper_methods(root_module, cls):
+    ## wave-helper.h (module 'wave'): ns3::WaveHelper::WaveHelper(ns3::WaveHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WaveHelper const &', 'arg0')])
+    ## wave-helper.h (module 'wave'): ns3::WaveHelper::WaveHelper() [constructor]
+    cls.add_constructor([])
+    ## wave-helper.h (module 'wave'): int64_t ns3::WaveHelper::AssignStreams(ns3::NetDeviceContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NetDeviceContainer', 'c'), param('int64_t', 'stream')])
+    ## wave-helper.h (module 'wave'): void ns3::WaveHelper::CreateMacForChannel(std::vector<unsigned int, std::allocator<unsigned int> > channelNumbers) [member function]
+    cls.add_method('CreateMacForChannel', 
+                   'void', 
+                   [param('std::vector< unsigned int >', 'channelNumbers')])
+    ## wave-helper.h (module 'wave'): void ns3::WaveHelper::CreatePhys(uint32_t phys) [member function]
+    cls.add_method('CreatePhys', 
+                   'void', 
+                   [param('uint32_t', 'phys')])
+    ## wave-helper.h (module 'wave'): static ns3::WaveHelper ns3::WaveHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::WaveHelper', 
+                   [], 
+                   is_static=True)
+    ## wave-helper.h (module 'wave'): static void ns3::WaveHelper::EnableLogComponents() [member function]
+    cls.add_method('EnableLogComponents', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## wave-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::WaveHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & mac, ns3::NodeContainer c) const [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('ns3::NodeContainer', 'c')], 
+                   is_const=True, is_virtual=True)
+    ## wave-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::WaveHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & mac, ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True, is_virtual=True)
+    ## wave-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::WaveHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & mac, std::string nodeName) const [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('std::string', 'nodeName')], 
+                   is_const=True, is_virtual=True)
+    ## wave-helper.h (module 'wave'): void ns3::WaveHelper::SetChannelScheduler(std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetChannelScheduler', 
+                   'void', 
+                   [param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## wave-helper.h (module 'wave'): void ns3::WaveHelper::SetRemoteStationManager(std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetRemoteStationManager', 
+                   'void', 
+                   [param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    return
+
 def register_Ns3WifiHelper_methods(root_module, cls):
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper::WifiHelper(ns3::WifiHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiHelper const &', 'arg0')])
@@ -3550,10 +4756,10 @@
     cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
-    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::WifiNetDevice> device) const [member function]
+    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::WifiNetDevice >', 'device')], 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
@@ -3650,6 +4856,8 @@
     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_ness [variable]
+    cls.add_instance_attribute('m_ness', 'uint32_t', 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]
@@ -3737,6 +4945,87 @@
                    [param('uint8_t', 'powerlevel')])
     return
 
+def register_Ns3YansWifiChannelHelper_methods(root_module, cls):
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper::YansWifiChannelHelper(ns3::YansWifiChannelHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::YansWifiChannelHelper const &', 'arg0')])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper::YansWifiChannelHelper() [constructor]
+    cls.add_constructor([])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiChannelHelper::AddPropagationLoss(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddPropagationLoss', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## yans-wifi-helper.h (module 'wifi'): int64_t ns3::YansWifiChannelHelper::AssignStreams(ns3::Ptr<ns3::YansWifiChannel> c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::Ptr< ns3::YansWifiChannel >', 'c'), param('int64_t', 'stream')])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::YansWifiChannel> ns3::YansWifiChannelHelper::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::YansWifiChannel >', 
+                   [], 
+                   is_const=True)
+    ## yans-wifi-helper.h (module 'wifi'): static ns3::YansWifiChannelHelper ns3::YansWifiChannelHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::YansWifiChannelHelper', 
+                   [], 
+                   is_static=True)
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiChannelHelper::SetPropagationDelay(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetPropagationDelay', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    return
+
+def register_Ns3YansWifiPhyHelper_methods(root_module, cls):
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::YansWifiPhyHelper(ns3::YansWifiPhyHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::YansWifiPhyHelper const &', 'arg0')])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::YansWifiPhyHelper() [constructor]
+    cls.add_constructor([])
+    ## yans-wifi-helper.h (module 'wifi'): static ns3::YansWifiPhyHelper ns3::YansWifiPhyHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::YansWifiPhyHelper', 
+                   [], 
+                   is_static=True)
+    ## yans-wifi-helper.h (module 'wifi'): uint32_t ns3::YansWifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::YansWifiChannel >', 'channel')])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetChannel(std::string channelName) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('std::string', 'channelName')])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetPcapDataLinkType(ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
+    cls.add_method('SetPcapDataLinkType', 
+                   'void', 
+                   [param('ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -3866,93 +5155,452 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
-def register_Ns3HigherDataTxVectorTag_methods(root_module, cls):
-    ## higher-tx-tag.h (module 'wave'): ns3::HigherDataTxVectorTag::HigherDataTxVectorTag(ns3::HigherDataTxVectorTag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::HigherDataTxVectorTag const &', 'arg0')])
-    ## higher-tx-tag.h (module 'wave'): ns3::HigherDataTxVectorTag::HigherDataTxVectorTag() [constructor]
-    cls.add_constructor([])
-    ## higher-tx-tag.h (module 'wave'): ns3::HigherDataTxVectorTag::HigherDataTxVectorTag(ns3::WifiTxVector dataTxVector, bool adapter) [constructor]
-    cls.add_constructor([param('ns3::WifiTxVector', 'dataTxVector'), param('bool', 'adapter')])
-    ## higher-tx-tag.h (module 'wave'): void ns3::HigherDataTxVectorTag::Deserialize(ns3::TagBuffer i) [member function]
+def register_Ns3HigherLayerTxVectorTag_methods(root_module, cls):
+    ## higher-tx-tag.h (module 'wave'): ns3::HigherLayerTxVectorTag::HigherLayerTxVectorTag(ns3::HigherLayerTxVectorTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HigherLayerTxVectorTag const &', 'arg0')])
+    ## higher-tx-tag.h (module 'wave'): ns3::HigherLayerTxVectorTag::HigherLayerTxVectorTag() [constructor]
+    cls.add_constructor([])
+    ## higher-tx-tag.h (module 'wave'): ns3::HigherLayerTxVectorTag::HigherLayerTxVectorTag(ns3::WifiTxVector txVector, bool adaptable) [constructor]
+    cls.add_constructor([param('ns3::WifiTxVector', 'txVector'), param('bool', 'adaptable')])
+    ## higher-tx-tag.h (module 'wave'): void ns3::HigherLayerTxVectorTag::Deserialize(ns3::TagBuffer i) [member function]
     cls.add_method('Deserialize', 
                    'void', 
                    [param('ns3::TagBuffer', 'i')], 
                    is_virtual=True)
-    ## higher-tx-tag.h (module 'wave'): ns3::WifiTxVector ns3::HigherDataTxVectorTag::GetDataTxVector() const [member function]
-    cls.add_method('GetDataTxVector', 
-                   'ns3::WifiTxVector', 
-                   [], 
-                   is_const=True)
-    ## higher-tx-tag.h (module 'wave'): ns3::TypeId ns3::HigherDataTxVectorTag::GetInstanceTypeId() const [member function]
+    ## higher-tx-tag.h (module 'wave'): ns3::TypeId ns3::HigherLayerTxVectorTag::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## higher-tx-tag.h (module 'wave'): uint32_t ns3::HigherDataTxVectorTag::GetSerializedSize() const [member function]
+    ## higher-tx-tag.h (module 'wave'): uint32_t ns3::HigherLayerTxVectorTag::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## higher-tx-tag.h (module 'wave'): static ns3::TypeId ns3::HigherDataTxVectorTag::GetTypeId() [member function]
+    ## higher-tx-tag.h (module 'wave'): ns3::WifiTxVector ns3::HigherLayerTxVectorTag::GetTxVector() const [member function]
+    cls.add_method('GetTxVector', 
+                   'ns3::WifiTxVector', 
+                   [], 
+                   is_const=True)
+    ## higher-tx-tag.h (module 'wave'): static ns3::TypeId ns3::HigherLayerTxVectorTag::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## higher-tx-tag.h (module 'wave'): bool ns3::HigherDataTxVectorTag::IsAdapter() const [member function]
-    cls.add_method('IsAdapter', 
+    ## higher-tx-tag.h (module 'wave'): bool ns3::HigherLayerTxVectorTag::IsAdaptable() const [member function]
+    cls.add_method('IsAdaptable', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## higher-tx-tag.h (module 'wave'): void ns3::HigherDataTxVectorTag::Print(std::ostream & os) const [member function]
+    ## higher-tx-tag.h (module 'wave'): void ns3::HigherLayerTxVectorTag::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## higher-tx-tag.h (module 'wave'): void ns3::HigherDataTxVectorTag::Serialize(ns3::TagBuffer i) const [member function]
+    ## higher-tx-tag.h (module 'wave'): void ns3::HigherLayerTxVectorTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::TagBuffer', 'i')], 
                    is_const=True, is_virtual=True)
     return
 
-def register_Ns3MgtAddBaRequestHeader_methods(root_module, cls):
-    ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader::MgtAddBaRequestHeader(ns3::MgtAddBaRequestHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MgtAddBaRequestHeader const &', 'arg0')])
-    ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader::MgtAddBaRequestHeader() [constructor]
+def register_Ns3InternetStackHelper_methods(root_module, cls):
+    ## internet-stack-helper.h (module 'internet'): ns3::InternetStackHelper::InternetStackHelper() [constructor]
     cls.add_constructor([])
-    ## mgt-headers.h (module 'wifi'): uint32_t ns3::MgtAddBaRequestHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    ## internet-stack-helper.h (module 'internet'): ns3::InternetStackHelper::InternetStackHelper(ns3::InternetStackHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InternetStackHelper const &', 'arg0')])
+    ## internet-stack-helper.h (module 'internet'): int64_t ns3::InternetStackHelper::AssignStreams(ns3::NodeContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NodeContainer', 'c'), param('int64_t', 'stream')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::Install(std::string nodeName) const [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('std::string', 'nodeName')], 
+                   is_const=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::Install(ns3::NodeContainer c) const [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::NodeContainer', 'c')], 
+                   is_const=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::InstallAll() const [member function]
+    cls.add_method('InstallAll', 
+                   'void', 
+                   [], 
+                   is_const=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::Reset() [member function]
+    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', 
+                   [param('bool', 'enable')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetRoutingHelper(ns3::Ipv4RoutingHelper const & routing) [member function]
+    cls.add_method('SetRoutingHelper', 
+                   'void', 
+                   [param('ns3::Ipv4RoutingHelper const &', 'routing')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetRoutingHelper(ns3::Ipv6RoutingHelper const & routing) [member function]
+    cls.add_method('SetRoutingHelper', 
+                   'void', 
+                   [param('ns3::Ipv6RoutingHelper const &', 'routing')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetTcp(std::string tid) [member function]
+    cls.add_method('SetTcp', 
+                   'void', 
+                   [param('std::string', 'tid')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetTcp(std::string tid, std::string attr, ns3::AttributeValue const & val) [member function]
+    cls.add_method('SetTcp', 
+                   'void', 
+                   [param('std::string', 'tid'), param('std::string', 'attr'), param('ns3::AttributeValue const &', 'val')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::EnableAsciiIpv4Internal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv4Internal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::EnableAsciiIpv6Internal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv6Internal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::EnablePcapIpv4Internal(std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv4Internal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::EnablePcapIpv6Internal(std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv6Internal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Ipv4Header_methods(root_module, cls):
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::Ipv4Header(ns3::Ipv4Header const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4Header const &', 'arg0')])
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::Ipv4Header() [constructor]
+    cls.add_constructor([])
+    ## ipv4-header.h (module 'internet'): uint32_t ns3::Ipv4Header::Deserialize(ns3::Buffer::Iterator start) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetBufferSize() const [member function]
-    cls.add_method('GetBufferSize', 
+    ## ipv4-header.h (module 'internet'): std::string ns3::Ipv4Header::DscpTypeToString(ns3::Ipv4Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv4Header::DscpType', 'dscp')], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): std::string ns3::Ipv4Header::EcnTypeToString(ns3::Ipv4Header::EcnType ecn) const [member function]
+    cls.add_method('EcnTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv4Header::EcnType', 'ecn')], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::EnableChecksum() [member function]
+    cls.add_method('EnableChecksum', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Header::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType ns3::Ipv4Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv4Header::DscpType', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType ns3::Ipv4Header::GetEcn() const [member function]
+    cls.add_method('GetEcn', 
+                   'ns3::Ipv4Header::EcnType', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetFragmentOffset() const [member function]
+    cls.add_method('GetFragmentOffset', 
                    'uint16_t', 
                    [], 
                    is_const=True)
-    ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAddBaRequestHeader::GetInstanceTypeId() const [member function]
+    ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetIdentification() const [member function]
+    cls.add_method('GetIdentification', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): ns3::TypeId ns3::Ipv4Header::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): uint32_t ns3::MgtAddBaRequestHeader::GetSerializedSize() const [member function]
+    ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetPayloadSize() const [member function]
+    cls.add_method('GetPayloadSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): uint32_t ns3::Ipv4Header::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetStartingSequence() const [member function]
-    cls.add_method('GetStartingSequence', 
-                   'uint16_t', 
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Header::GetSource() const [member function]
+    cls.add_method('GetSource', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## mgt-headers.h (module 'wifi'): uint8_t ns3::MgtAddBaRequestHeader::GetTid() const [member function]
-    cls.add_method('GetTid', 
+    ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetTos() const [member function]
+    cls.add_method('GetTos', 
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetTimeout() const [member function]
-    cls.add_method('GetTimeout', 
-                   'uint16_t', 
+    ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetTtl() const [member function]
+    cls.add_method('GetTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): static ns3::TypeId ns3::Ipv4Header::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsChecksumOk() const [member function]
+    cls.add_method('IsChecksumOk', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsDontFragment() const [member function]
+    cls.add_method('IsDontFragment', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsLastFragment() const [member function]
+    cls.add_method('IsLastFragment', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDestination(ns3::Ipv4Address destination) [member function]
+    cls.add_method('SetDestination', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'destination')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDontFragment() [member function]
+    cls.add_method('SetDontFragment', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDscp(ns3::Ipv4Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv4Header::DscpType', 'dscp')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetEcn(ns3::Ipv4Header::EcnType ecn) [member function]
+    cls.add_method('SetEcn', 
+                   'void', 
+                   [param('ns3::Ipv4Header::EcnType', 'ecn')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetFragmentOffset(uint16_t offsetBytes) [member function]
+    cls.add_method('SetFragmentOffset', 
+                   'void', 
+                   [param('uint16_t', 'offsetBytes')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetIdentification(uint16_t identification) [member function]
+    cls.add_method('SetIdentification', 
+                   'void', 
+                   [param('uint16_t', 'identification')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetLastFragment() [member function]
+    cls.add_method('SetLastFragment', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetMayFragment() [member function]
+    cls.add_method('SetMayFragment', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetMoreFragments() [member function]
+    cls.add_method('SetMoreFragments', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetPayloadSize(uint16_t size) [member function]
+    cls.add_method('SetPayloadSize', 
+                   'void', 
+                   [param('uint16_t', 'size')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetProtocol(uint8_t num) [member function]
+    cls.add_method('SetProtocol', 
+                   'void', 
+                   [param('uint8_t', 'num')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetSource(ns3::Ipv4Address source) [member function]
+    cls.add_method('SetSource', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'source')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetTtl(uint8_t ttl) [member function]
+    cls.add_method('SetTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
+    return
+
+def register_Ns3Ipv6Header_methods(root_module, cls):
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
+    cls.add_constructor([])
+    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
+    cls.add_method('GetDestinationAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
+    cls.add_method('GetFlowLabel', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
+    cls.add_method('GetNextHeader', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
+    cls.add_method('GetPayloadLength', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
+    cls.add_method('GetSourceAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
+    cls.add_method('GetTrafficClass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
+    cls.add_method('SetDestinationAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
+    cls.add_method('SetFlowLabel', 
+                   'void', 
+                   [param('uint32_t', 'flow')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'limit')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
+    cls.add_method('SetNextHeader', 
+                   'void', 
+                   [param('uint8_t', 'next')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
+    cls.add_method('SetPayloadLength', 
+                   'void', 
+                   [param('uint16_t', 'len')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
+    cls.add_method('SetSourceAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'src')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
+    cls.add_method('SetTrafficClass', 
+                   'void', 
+                   [param('uint8_t', 'traffic')])
+    return
+
+def register_Ns3MgtAddBaRequestHeader_methods(root_module, cls):
+    ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader::MgtAddBaRequestHeader(ns3::MgtAddBaRequestHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MgtAddBaRequestHeader const &', 'arg0')])
+    ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader::MgtAddBaRequestHeader() [constructor]
+    cls.add_constructor([])
+    ## mgt-headers.h (module 'wifi'): uint32_t ns3::MgtAddBaRequestHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetBufferSize() const [member function]
+    cls.add_method('GetBufferSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAddBaRequestHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): uint32_t ns3::MgtAddBaRequestHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetStartingSequence() const [member function]
+    cls.add_method('GetStartingSequence', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): uint8_t ns3::MgtAddBaRequestHeader::GetTid() const [member function]
+    cls.add_method('GetTid', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetTimeout() const [member function]
+    cls.add_method('GetTimeout', 
+                   'uint16_t', 
                    [], 
                    is_const=True)
     ## mgt-headers.h (module 'wifi'): static ns3::TypeId ns3::MgtAddBaRequestHeader::GetTypeId() [member function]
@@ -4622,6 +6270,10 @@
     cls.add_method('SetBlockAckThresholdForAc', 
                    'void', 
                    [param('ns3::AcIndex', 'ac'), param('uint8_t', 'threshold')])
+    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMpduAggregatorForAc(ns3::AcIndex ac, std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetMpduAggregatorForAc', 
+                   'void', 
+                   [param('ns3::AcIndex', 'ac'), param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()')])
     ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMsduAggregatorForAc(ns3::AcIndex ac, std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
     cls.add_method('SetMsduAggregatorForAc', 
                    'void', 
@@ -4638,6 +6290,89 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3RandomVariableStream_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream::RandomVariableStream() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetStream(int64_t stream) [member function]
+    cls.add_method('SetStream', 
+                   'void', 
+                   [param('int64_t', 'stream')])
+    ## random-variable-stream.h (module 'core'): int64_t ns3::RandomVariableStream::GetStream() const [member function]
+    cls.add_method('GetStream', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetAntithetic(bool isAntithetic) [member function]
+    cls.add_method('SetAntithetic', 
+                   'void', 
+                   [param('bool', 'isAntithetic')])
+    ## random-variable-stream.h (module 'core'): bool ns3::RandomVariableStream::IsAntithetic() const [member function]
+    cls.add_method('IsAntithetic', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::RandomVariableStream::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::RandomVariableStream::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): ns3::RngStream * ns3::RandomVariableStream::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::RngStream *', 
+                   [], 
+                   is_const=True, visibility='protected')
+    return
+
+def register_Ns3SequentialRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::SequentialRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable::SequentialRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): ns3::Ptr<ns3::RandomVariableStream> ns3::SequentialRandomVariable::GetIncrement() const [member function]
+    cls.add_method('GetIncrement', 
+                   'ns3::Ptr< ns3::RandomVariableStream >', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::SequentialRandomVariable::GetConsecutive() const [member function]
+    cls.add_method('GetConsecutive', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::SequentialRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    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([])
@@ -4686,6 +6421,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3ChannelCoordinationListener_Ns3Empty_Ns3DefaultDeleter__lt__ns3ChannelCoordinationListener__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >::SimpleRefCount(ns3::SimpleRefCount<ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter< ns3::ChannelCoordinationListener > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >::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([])
@@ -4710,6 +6457,30 @@
                    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([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4MulticastRoute > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4Route > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::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([])
@@ -4770,3370 +6541,6179 @@
                    is_static=True)
     return
 
-def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
+def register_Ns3Socket_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::Socket::Socket(ns3::Socket const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Socket const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::Socket::Socket() [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(ns3::int64x64_t const & v) [constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', '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::TimeWithUnit ns3::Time::As(ns3::Time::Unit const unit) const [member function]
-    cls.add_method('As', 
-                   'ns3::TimeWithUnit', 
-                   [param('ns3::Time::Unit const', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int ns3::Time::Compare(ns3::Time const & o) const [member function]
-    cls.add_method('Compare', 
+    ## socket.h (module 'network'): int ns3::Socket::Bind(ns3::Address const & address) [member function]
+    cls.add_method('Bind', 
+                   'int', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Bind() [member function]
+    cls.add_method('Bind', 
                    'int', 
-                   [param('ns3::Time const &', 'o')], 
-                   is_const=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::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
-    cls.add_method('FromDouble', 
-                   'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
-    cls.add_method('FromInteger', 
-                   'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
-    cls.add_method('GetDays', 
-                   'double', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Bind6() [member function]
+    cls.add_method('Bind6', 
+                   'int', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
-    cls.add_method('GetFemtoSeconds', 
-                   'int64_t', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
+    cls.add_method('BindToNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Close() [member function]
+    cls.add_method('Close', 
+                   'int', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetHours() const [member function]
-    cls.add_method('GetHours', 
-                   'double', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Connect(ns3::Address const & address) [member function]
+    cls.add_method('Connect', 
+                   'int', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::Ptr<ns3::Socket> ns3::Socket::CreateSocket(ns3::Ptr<ns3::Node> node, ns3::TypeId tid) [member function]
+    cls.add_method('CreateSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::TypeId', 'tid')], 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::Socket::GetAllowBroadcast() const [member function]
+    cls.add_method('GetAllowBroadcast', 
+                   'bool', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
-    cls.add_method('GetInteger', 
-                   'int64_t', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Socket::GetBoundNetDevice() [member function]
+    cls.add_method('GetBoundNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [])
+    ## socket.h (module 'network'): ns3::Socket::SocketErrno ns3::Socket::GetErrno() const [member function]
+    cls.add_method('GetErrno', 
+                   'ns3::Socket::SocketErrno', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
-    cls.add_method('GetMicroSeconds', 
-                   'int64_t', 
+                   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)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
-    cls.add_method('GetMilliSeconds', 
-                   'int64_t', 
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTtl() const [member function]
+    cls.add_method('GetIpTtl', 
+                   'uint8_t', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetMinutes() const [member function]
-    cls.add_method('GetMinutes', 
-                   'double', 
+                   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)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetNanoSeconds() const [member function]
-    cls.add_method('GetNanoSeconds', 
-                   'int64_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)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetPicoSeconds() const [member function]
-    cls.add_method('GetPicoSeconds', 
-                   'int64_t', 
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Socket::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time::Unit ns3::Time::GetResolution() [member function]
-    cls.add_method('GetResolution', 
-                   'ns3::Time::Unit', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
+    cls.add_method('GetRxAvailable', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
-    cls.add_method('GetSeconds', 
-                   'double', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetSockName(ns3::Address & address) const [member function]
+    cls.add_method('GetSockName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Socket::SocketType ns3::Socket::GetSocketType() const [member function]
+    cls.add_method('GetSocketType', 
+                   'ns3::Socket::SocketType', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
-    cls.add_method('GetTimeStep', 
-                   'int64_t', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::Socket::GetTxAvailable() const [member function]
+    cls.add_method('GetTxAvailable', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetYears() const [member function]
-    cls.add_method('GetYears', 
-                   'double', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::Socket::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
-    cls.add_method('IsNegative', 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
+    cls.add_method('IsIpRecvTos', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
-    cls.add_method('IsPositive', 
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTtl() const [member function]
+    cls.add_method('IsIpRecvTtl', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
-    cls.add_method('IsStrictlyNegative', 
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvHopLimit() const [member function]
+    cls.add_method('IsIpv6RecvHopLimit', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
-    cls.add_method('IsStrictlyPositive', 
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvTclass() const [member function]
+    cls.add_method('IsIpv6RecvTclass', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
-    cls.add_method('IsZero', 
+    ## socket.h (module 'network'): bool ns3::Socket::IsRecvPktInfo() const [member function]
+    cls.add_method('IsRecvPktInfo', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
-    cls.add_method('Max', 
-                   'ns3::Time', 
+    ## socket.h (module 'network'): int ns3::Socket::Listen() [member function]
+    cls.add_method('Listen', 
+                   'int', 
                    [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
-    cls.add_method('Min', 
-                   'ns3::Time', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv(uint32_t maxSize, uint32_t flags) [member function]
+    cls.add_method('Recv', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'maxSize'), param('uint32_t', 'flags')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv() [member function]
+    cls.add_method('Recv', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [])
+    ## socket.h (module 'network'): int ns3::Socket::Recv(uint8_t * buf, uint32_t size, uint32_t flags) [member function]
+    cls.add_method('Recv', 
+                   'int', 
+                   [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(uint32_t maxSize, uint32_t flags, ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'maxSize'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Address &', 'fromAddress')])
+    ## socket.h (module 'network'): int ns3::Socket::RecvFrom(uint8_t * buf, uint32_t size, uint32_t flags, ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'int', 
+                   [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')])
+    ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p, uint32_t flags) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## socket.h (module 'network'): int ns3::Socket::Send(uint8_t const * buf, uint32_t size, uint32_t flags) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+    ## socket.h (module 'network'): int ns3::Socket::SendTo(ns3::Ptr<ns3::Packet> p, uint32_t flags, ns3::Address const & toAddress) [member function]
+    cls.add_method('SendTo', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags'), param('ns3::Address const &', 'toAddress')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::SendTo(uint8_t const * buf, uint32_t size, uint32_t flags, ns3::Address const & address) [member function]
+    cls.add_method('SendTo', 
+                   'int', 
+                   [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address const &', 'address')])
+    ## socket.h (module 'network'): void ns3::Socket::SetAcceptCallback(ns3::Callback<bool, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionRequest, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> newConnectionCreated) [member function]
+    cls.add_method('SetAcceptCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionRequest'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'newConnectionCreated')])
+    ## socket.h (module 'network'): bool ns3::Socket::SetAllowBroadcast(bool allowBroadcast) [member function]
+    cls.add_method('SetAllowBroadcast', 
+                   'bool', 
+                   [param('bool', 'allowBroadcast')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetCloseCallbacks(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> normalClose, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> errorClose) [member function]
+    cls.add_method('SetCloseCallbacks', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'normalClose'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'errorClose')])
+    ## socket.h (module 'network'): void ns3::Socket::SetConnectCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionSucceeded, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionFailed) [member function]
+    cls.add_method('SetConnectCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionSucceeded'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionFailed')])
+    ## socket.h (module 'network'): void ns3::Socket::SetDataSentCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> dataSent) [member function]
+    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', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'arg0')])
+    ## socket.h (module 'network'): void ns3::Socket::SetRecvPktInfo(bool flag) [member function]
+    cls.add_method('SetRecvPktInfo', 
+                   'void', 
+                   [param('bool', 'flag')])
+    ## socket.h (module 'network'): void ns3::Socket::SetSendCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> sendCb) [member function]
+    cls.add_method('SetSendCallback', 
+                   '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 >', 'sendCb')])
+    ## socket.h (module 'network'): int ns3::Socket::ShutdownRecv() [member function]
+    cls.add_method('ShutdownRecv', 
+                   'int', 
                    [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
-    cls.add_method('SetResolution', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::ShutdownSend() [member function]
+    cls.add_method('ShutdownSend', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::DoDispose() [member function]
+    cls.add_method('DoDispose', 
                    'void', 
-                   [param('ns3::Time::Unit', 'resolution')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
-    cls.add_method('StaticInit', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTos() const [member function]
+    cls.add_method('IsManualIpTos', 
                    'bool', 
                    [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit unit) const [member function]
-    cls.add_method('To', 
-                   'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
-    cls.add_method('ToDouble', 
-                   'double', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
-    cls.add_method('ToInteger', 
-                   'int64_t', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   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', 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTtl() const [member function]
+    cls.add_method('IsManualIpTtl', 
                    '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', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6HopLimit() const [member function]
+    cls.add_method('IsManualIpv6HopLimit', 
                    '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', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6Tclass() const [member function]
+    cls.add_method('IsManualIpv6Tclass', 
                    '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', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionFailed() [member function]
+    cls.add_method('NotifyConnectionFailed', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::NotifyConnectionRequest(ns3::Address const & from) [member function]
+    cls.add_method('NotifyConnectionRequest', 
                    'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('ns3::Address const &', 'from')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionSucceeded() [member function]
+    cls.add_method('NotifyConnectionSucceeded', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyDataRecv() [member function]
+    cls.add_method('NotifyDataRecv', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyDataSent(uint32_t size) [member function]
+    cls.add_method('NotifyDataSent', 
+                   'void', 
+                   [param('uint32_t', 'size')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyErrorClose() [member function]
+    cls.add_method('NotifyErrorClose', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyNewConnectionCreated(ns3::Ptr<ns3::Socket> socket, ns3::Address const & from) [member function]
+    cls.add_method('NotifyNewConnectionCreated', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket'), param('ns3::Address const &', 'from')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyNormalClose() [member function]
+    cls.add_method('NotifyNormalClose', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifySend(uint32_t spaceAvailable) [member function]
+    cls.add_method('NotifySend', 
+                   'void', 
+                   [param('uint32_t', 'spaceAvailable')], 
+                   visibility='protected')
     return
 
-def register_Ns3Trailer_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
+def register_Ns3SocketAddressTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag(ns3::SocketAddressTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketAddressTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag() [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]
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Deserialize(ns3::TagBuffer i) [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]
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::Address ns3::SocketAddressTag::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketAddressTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketAddressTag::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]
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketAddressTag::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]
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::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]
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::SetAddress(ns3::Address addr) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
     return
 
-def register_Ns3VendorSpecificActionHeader_methods(root_module, cls):
-    ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader::VendorSpecificActionHeader(ns3::VendorSpecificActionHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::VendorSpecificActionHeader const &', 'arg0')])
-    ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader::VendorSpecificActionHeader() [constructor]
+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([])
-    ## vendor-specific-action.h (module 'wave'): uint32_t ns3::VendorSpecificActionHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Deserialize(ns3::TagBuffer i) [member function]
     cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
                    is_virtual=True)
-    ## vendor-specific-action.h (module 'wave'): uint8_t ns3::VendorSpecificActionHeader::GetCategory() const [member function]
-    cls.add_method('GetCategory', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## vendor-specific-action.h (module 'wave'): ns3::TypeId ns3::VendorSpecificActionHeader::GetInstanceTypeId() const [member function]
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTosTag::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## vendor-specific-action.h (module 'wave'): ns3::OrganizationIdentifier ns3::VendorSpecificActionHeader::GetOrganizationIdentifier() const [member function]
-    cls.add_method('GetOrganizationIdentifier', 
-                   'ns3::OrganizationIdentifier', 
-                   [], 
-                   is_const=True)
-    ## vendor-specific-action.h (module 'wave'): uint32_t ns3::VendorSpecificActionHeader::GetSerializedSize() const [member function]
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTosTag::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## vendor-specific-action.h (module 'wave'): static ns3::TypeId ns3::VendorSpecificActionHeader::GetTypeId() [member function]
+    ## 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)
-    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::Print(std::ostream & os) const [member function]
+    ## 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)
-    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+                   [param('ns3::TagBuffer', 'i')], 
                    is_const=True, is_virtual=True)
-    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::SetOrganizationIdentifier(ns3::OrganizationIdentifier oi) [member function]
-    cls.add_method('SetOrganizationIdentifier', 
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
                    'void', 
-                   [param('ns3::OrganizationIdentifier', 'oi')])
+                   [param('uint8_t', 'tos')])
     return
 
-def register_Ns3Wifi80211pHelper_methods(root_module, cls):
-    ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper::Wifi80211pHelper(ns3::Wifi80211pHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Wifi80211pHelper const &', 'arg0')])
-    ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper::Wifi80211pHelper() [constructor]
+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')])
+    ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag() [constructor]
     cls.add_constructor([])
-    ## wifi-80211p-helper.h (module 'wave'): static ns3::Wifi80211pHelper ns3::Wifi80211pHelper::Default() [member function]
-    cls.add_method('Default', 
-                   'ns3::Wifi80211pHelper', 
-                   [], 
-                   is_static=True)
-    ## wifi-80211p-helper.h (module 'wave'): static void ns3::Wifi80211pHelper::EnableLogComponents() [member function]
-    cls.add_method('EnableLogComponents', 
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::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::SocketIpTtlTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTtlTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpTtlTag::GetTtl() const [member function]
+    cls.add_method('GetTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTtlTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-80211p-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::Wifi80211pHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & macHelper, ns3::NodeContainer c) const [member function]
-    cls.add_method('Install', 
-                   'ns3::NetDeviceContainer', 
-                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'macHelper'), param('ns3::NodeContainer', 'c')], 
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## wifi-80211p-helper.h (module 'wave'): void ns3::Wifi80211pHelper::SetStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('SetStandard', 
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_virtual=True)
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::SetTtl(uint8_t ttl) [member function]
+    cls.add_method('SetTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3WifiActionHeader_methods(root_module, cls):
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader(ns3::WifiActionHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiActionHeader const &', 'arg0')])
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader() [constructor]
+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([])
-    ## mgt-headers.h (module 'wifi'): uint32_t ns3::WifiActionHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Deserialize(ns3::TagBuffer i) [member function]
     cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
                    is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue ns3::WifiActionHeader::GetAction() [member function]
-    cls.add_method('GetAction', 
-                   'ns3::WifiActionHeader::ActionValue', 
-                   [])
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::CategoryValue ns3::WifiActionHeader::GetCategory() [member function]
-    cls.add_method('GetCategory', 
-                   'ns3::WifiActionHeader::CategoryValue', 
-                   [])
-    ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::WifiActionHeader::GetInstanceTypeId() const [member function]
+    ## 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)
-    ## mgt-headers.h (module 'wifi'): uint32_t ns3::WifiActionHeader::GetSerializedSize() const [member function]
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6HopLimitTag::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): static ns3::TypeId ns3::WifiActionHeader::GetTypeId() [member function]
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6HopLimitTag::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::Print(std::ostream & os) const [member function]
+    ## 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)
-    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+                   [param('ns3::TagBuffer', 'i')], 
                    is_const=True, is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::SetAction(ns3::WifiActionHeader::CategoryValue type, ns3::WifiActionHeader::ActionValue action) [member function]
-    cls.add_method('SetAction', 
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::SetHopLimit(uint8_t hopLimit) [member function]
+    cls.add_method('SetHopLimit', 
                    'void', 
-                   [param('ns3::WifiActionHeader::CategoryValue', 'type'), param('ns3::WifiActionHeader::ActionValue', 'action')])
-    return
-
-def register_Ns3WifiActionHeaderActionValue_methods(root_module, cls):
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::ActionValue() [constructor]
-    cls.add_constructor([])
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::ActionValue(ns3::WifiActionHeader::ActionValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiActionHeader::ActionValue const &', 'arg0')])
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::blockAck [variable]
-    cls.add_instance_attribute('blockAck', 'ns3::WifiActionHeader::BlockAckActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::interwork [variable]
-    cls.add_instance_attribute('interwork', 'ns3::WifiActionHeader::InterworkActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::linkMetrtic [variable]
-    cls.add_instance_attribute('linkMetrtic', 'ns3::WifiActionHeader::LinkMetricActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::pathSelection [variable]
-    cls.add_instance_attribute('pathSelection', 'ns3::WifiActionHeader::PathSelectionActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::peerLink [variable]
-    cls.add_instance_attribute('peerLink', 'ns3::WifiActionHeader::PeerLinkMgtActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::resourceCoordination [variable]
-    cls.add_instance_attribute('resourceCoordination', 'ns3::WifiActionHeader::ResourceCoordinationActionValue', is_const=False)
+                   [param('uint8_t', 'hopLimit')])
     return
 
-def register_Ns3WifiInformationElement_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('==')
-    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElement::WifiInformationElement() [constructor]
+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([])
-    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElement::WifiInformationElement(ns3::WifiInformationElement const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiInformationElement const &', 'arg0')])
-    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::Deserialize(ns3::Buffer::Iterator i) [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Deserialize(ns3::TagBuffer i) [member function]
     cls.add_method('Deserialize', 
-                   'ns3::Buffer::Iterator', 
-                   [param('ns3::Buffer::Iterator', 'i')])
-    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::DeserializeIfPresent(ns3::Buffer::Iterator i) [member function]
-    cls.add_method('DeserializeIfPresent', 
-                   'ns3::Buffer::Iterator', 
-                   [param('ns3::Buffer::Iterator', 'i')])
-    ## wifi-information-element.h (module 'wifi'): uint8_t ns3::WifiInformationElement::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_pure_virtual=True, is_virtual=True)
-    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElementId ns3::WifiInformationElement::ElementId() const [member function]
-    cls.add_method('ElementId', 
-                   'ns3::WifiInformationElementId', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-information-element.h (module 'wifi'): uint8_t ns3::WifiInformationElement::GetInformationFieldSize() const [member function]
-    cls.add_method('GetInformationFieldSize', 
-                   'uint8_t', 
+                   '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_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-information-element.h (module 'wifi'): uint16_t ns3::WifiInformationElement::GetSerializedSize() const [member function]
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6TclassTag::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
-                   'uint16_t', 
+                   '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)
-    ## wifi-information-element.h (module 'wifi'): void ns3::WifiInformationElement::Print(std::ostream & os) const [member function]
+    ## 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)
-    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::Serialize(ns3::Buffer::Iterator i) const [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
-                   'ns3::Buffer::Iterator', 
-                   [param('ns3::Buffer::Iterator', 'i')], 
-                   is_const=True)
-    ## wifi-information-element.h (module 'wifi'): void ns3::WifiInformationElement::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('SerializeInformationField', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [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_Ns3WifiMac_methods(root_module, cls):
-    ## wifi-mac.h (module 'wifi'): ns3::WifiMac::WifiMac() [constructor]
+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')])
+    ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag() [constructor]
     cls.add_constructor([])
-    ## wifi-mac.h (module 'wifi'): ns3::WifiMac::WifiMac(ns3::WifiMac const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiMac const &', 'arg0')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('ConfigureStandard', 
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
                    'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address to, ns3::Mac48Address from) [member function]
-    cls.add_method('Enqueue', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Disable() [member function]
+    cls.add_method('Disable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address to) [member function]
-    cls.add_method('Enqueue', 
+                   [])
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Enable() [member function]
+    cls.add_method('Enable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'to')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetAckTimeout() const [member function]
-    cls.add_method('GetAckTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::WifiMac::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Mac48Address', 
+                   [])
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketSetDontFragmentTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetBasicBlockAckTimeout() const [member function]
-    cls.add_method('GetBasicBlockAckTimeout', 
-                   'ns3::Time', 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketSetDontFragmentTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::WifiMac::GetBssid() const [member function]
-    cls.add_method('GetBssid', 
-                   'ns3::Mac48Address', 
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketSetDontFragmentTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetCompressedBlockAckTimeout() const [member function]
-    cls.add_method('GetCompressedBlockAckTimeout', 
-                   'ns3::Time', 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::SocketSetDontFragmentTag::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
                    [], 
+                   is_const=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetCtsTimeout() const [member function]
-    cls.add_method('GetCtsTimeout', 
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
+    cls.add_output_stream_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(ns3::int64x64_t const & v) [constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', '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::TimeWithUnit ns3::Time::As(ns3::Time::Unit const unit) const [member function]
+    cls.add_method('As', 
+                   'ns3::TimeWithUnit', 
+                   [param('ns3::Time::Unit const', 'unit')], 
+                   is_const=True)
+    ## 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 & value) [member function]
+    cls.add_method('From', 
                    'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetEifsNoDifs() const [member function]
-    cls.add_method('GetEifsNoDifs', 
+                   [param('ns3::int64x64_t const &', 'value')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
+    cls.add_method('From', 
                    'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetMaxPropagationDelay() const [member function]
-    cls.add_method('GetMaxPropagationDelay', 
+                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
+    cls.add_method('FromDouble', 
+                   'ns3::Time', 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
+    cls.add_method('FromInteger', 
                    'ns3::Time', 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
+    cls.add_method('GetDays', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetMsduLifetime() const [member function]
-    cls.add_method('GetMsduLifetime', 
-                   'ns3::Time', 
+    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetPifs() const [member function]
-    cls.add_method('GetPifs', 
-                   'ns3::Time', 
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
+    cls.add_method('GetFemtoSeconds', 
+                   'int64_t', 
                    [], 
-                   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_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetHours() const [member function]
+    cls.add_method('GetHours', 
+                   'double', 
                    [], 
-                   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', 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
+    cls.add_method('GetInteger', 
+                   'int64_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSlot() const [member function]
-    cls.add_method('GetSlot', 
-                   'ns3::Time', 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
+    cls.add_method('GetMicroSeconds', 
+                   'int64_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Ssid ns3::WifiMac::GetSsid() const [member function]
-    cls.add_method('GetSsid', 
-                   'ns3::Ssid', 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
+    cls.add_method('GetMilliSeconds', 
+                   'int64_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::WifiMac::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetMinutes() const [member function]
+    cls.add_method('GetMinutes', 
+                   'double', 
+                   [], 
+                   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)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyPromiscRx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyRx(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyRx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyRxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyRxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyTx(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyTxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
-    cls.add_method('SetAckTimeout', 
-                   'void', 
-                   [param('ns3::Time', 'ackTimeout')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAddress(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetBasicBlockAckTimeout(ns3::Time blockAckTimeout) [member function]
-    cls.add_method('SetBasicBlockAckTimeout', 
-                   'void', 
-                   [param('ns3::Time', 'blockAckTimeout')], 
-                   is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetCompressedBlockAckTimeout(ns3::Time blockAckTimeout) [member function]
-    cls.add_method('SetCompressedBlockAckTimeout', 
-                   'void', 
-                   [param('ns3::Time', 'blockAckTimeout')], 
-                   is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetCtsTimeout(ns3::Time ctsTimeout) [member function]
-    cls.add_method('SetCtsTimeout', 
-                   'void', 
-                   [param('ns3::Time', 'ctsTimeout')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetEifsNoDifs(ns3::Time eifsNoDifs) [member function]
-    cls.add_method('SetEifsNoDifs', 
-                   'void', 
-                   [param('ns3::Time', 'eifsNoDifs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetForwardUpCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> upCallback) [member function]
-    cls.add_method('SetForwardUpCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'upCallback')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkDownCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkDown) [member function]
-    cls.add_method('SetLinkDownCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkDown')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkUpCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkUp) [member function]
-    cls.add_method('SetLinkUpCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkUp')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetMaxPropagationDelay(ns3::Time delay) [member function]
-    cls.add_method('SetMaxPropagationDelay', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetPifs(ns3::Time pifs) [member function]
-    cls.add_method('SetPifs', 
-                   'void', 
-                   [param('ns3::Time', 'pifs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetPromisc() [member function]
-    cls.add_method('SetPromisc', 
-                   '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', 
-                   [param('ns3::Time', 'sifs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSlot(ns3::Time slotTime) [member function]
-    cls.add_method('SetSlot', 
-                   'void', 
-                   [param('ns3::Time', 'slotTime')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSsid(ns3::Ssid ssid) [member function]
-    cls.add_method('SetSsid', 
-                   'void', 
-                   [param('ns3::Ssid', 'ssid')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetWifiPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
-    cls.add_method('SetWifiPhy', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
-    cls.add_method('SetWifiRemoteStationManager', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'stationManager')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): bool ns3::WifiMac::SupportsSendFrom() const [member function]
-    cls.add_method('SupportsSendFrom', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
-    cls.add_method('ConfigureDcf', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
-                   visibility='protected')
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('FinishConfigureStandard', 
-                   'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    return
-
-def register_Ns3WifiMacHeader_methods(root_module, cls):
-    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::WifiMacHeader(ns3::WifiMacHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiMacHeader const &', 'arg0')])
-    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::WifiMacHeader() [constructor]
-    cls.add_constructor([])
-    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr1() const [member function]
-    cls.add_method('GetAddr1', 
-                   'ns3::Mac48Address', 
+    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
+    cls.add_method('GetSeconds', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr2() const [member function]
-    cls.add_method('GetAddr2', 
-                   'ns3::Mac48Address', 
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
+    cls.add_method('GetTimeStep', 
+                   'int64_t', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr3() const [member function]
-    cls.add_method('GetAddr3', 
-                   'ns3::Mac48Address', 
+    ## nstime.h (module 'core'): double ns3::Time::GetYears() const [member function]
+    cls.add_method('GetYears', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr4() const [member function]
-    cls.add_method('GetAddr4', 
-                   'ns3::Mac48Address', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
+    cls.add_method('IsNegative', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Time ns3::WifiMacHeader::GetDuration() const [member function]
-    cls.add_method('GetDuration', 
-                   'ns3::Time', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
+    cls.add_method('IsPositive', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetFragmentNumber() const [member function]
-    cls.add_method('GetFragmentNumber', 
-                   'uint16_t', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
+    cls.add_method('IsStrictlyNegative', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::TypeId ns3::WifiMacHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::QosAckPolicy ns3::WifiMacHeader::GetQosAckPolicy() const [member function]
-    cls.add_method('GetQosAckPolicy', 
-                   'ns3::WifiMacHeader::QosAckPolicy', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
+    cls.add_method('IsStrictlyPositive', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint8_t ns3::WifiMacHeader::GetQosTid() const [member function]
-    cls.add_method('GetQosTid', 
-                   'uint8_t', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
+    cls.add_method('IsZero', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint8_t ns3::WifiMacHeader::GetQosTxopLimit() const [member function]
-    cls.add_method('GetQosTxopLimit', 
-                   'uint8_t', 
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetRawDuration() const [member function]
-    cls.add_method('GetRawDuration', 
-                   'uint16_t', 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetSequenceControl() const [member function]
-    cls.add_method('GetSequenceControl', 
-                   'uint16_t', 
+                   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 unit) const [member function]
+    cls.add_method('To', 
+                   'ns3::int64x64_t', 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetSequenceNumber() const [member function]
-    cls.add_method('GetSequenceNumber', 
-                   'uint16_t', 
-                   [], 
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
+    cls.add_method('ToDouble', 
+                   'double', 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
+    cls.add_method('ToInteger', 
+                   'int64_t', 
+                   [param('ns3::Time::Unit', 'unit')], 
+                   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', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::GetSize() const [member function]
-    cls.add_method('GetSize', 
+                   [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_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType ns3::WifiMacHeader::GetType() const [member function]
-    cls.add_method('GetType', 
-                   'ns3::WifiMacType', 
+                   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_const=True)
-    ## wifi-mac-header.h (module 'wifi'): static ns3::TypeId ns3::WifiMacHeader::GetTypeId() [member function]
+                   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_Ns3TriangularRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::TriangularRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-mac-header.h (module 'wifi'): char const * ns3::WifiMacHeader::GetTypeString() const [member function]
-    cls.add_method('GetTypeString', 
-                   'char const *', 
+    ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable::TriangularRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAck() const [member function]
-    cls.add_method('IsAck', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAction() const [member function]
-    cls.add_method('IsAction', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAssocReq() const [member function]
-    cls.add_method('IsAssocReq', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetValue(double mean, double min, double max) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'min'), param('double', 'max')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger(uint32_t mean, uint32_t min, uint32_t max) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'min'), param('uint32_t', 'max')])
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAssocResp() const [member function]
-    cls.add_method('IsAssocResp', 
-                   'bool', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAuthentication() const [member function]
-    cls.add_method('IsAuthentication', 
-                   'bool', 
+                   is_virtual=True)
+    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', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBeacon() const [member function]
-    cls.add_method('IsBeacon', 
-                   'bool', 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable::UniformRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBlockAck() const [member function]
-    cls.add_method('IsBlockAck', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBlockAckReq() const [member function]
-    cls.add_method('IsBlockAckReq', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetValue(double min, double max) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'min'), param('double', 'max')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger(uint32_t min, uint32_t max) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'min'), param('uint32_t', 'max')])
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCfpoll() const [member function]
-    cls.add_method('IsCfpoll', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCtl() const [member function]
-    cls.add_method('IsCtl', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCts() const [member function]
-    cls.add_method('IsCts', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsData() const [member function]
-    cls.add_method('IsData', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsDeauthentication() const [member function]
-    cls.add_method('IsDeauthentication', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsDisassociation() const [member function]
-    cls.add_method('IsDisassociation', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsFromDs() const [member function]
-    cls.add_method('IsFromDs', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMgt() const [member function]
-    cls.add_method('IsMgt', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMoreFragments() const [member function]
-    cls.add_method('IsMoreFragments', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMultihopAction() const [member function]
-    cls.add_method('IsMultihopAction', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsProbeReq() const [member function]
-    cls.add_method('IsProbeReq', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsProbeResp() const [member function]
-    cls.add_method('IsProbeResp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosAck() const [member function]
-    cls.add_method('IsQosAck', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosAmsdu() const [member function]
-    cls.add_method('IsQosAmsdu', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosBlockAck() const [member function]
-    cls.add_method('IsQosBlockAck', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosData() const [member function]
-    cls.add_method('IsQosData', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosEosp() const [member function]
-    cls.add_method('IsQosEosp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosNoAck() const [member function]
-    cls.add_method('IsQosNoAck', 
-                   'bool', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsReassocReq() const [member function]
-    cls.add_method('IsReassocReq', 
-                   'bool', 
+                   is_virtual=True)
+    return
+
+def register_Ns3VendorSpecificActionHeader_methods(root_module, cls):
+    ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader::VendorSpecificActionHeader(ns3::VendorSpecificActionHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VendorSpecificActionHeader const &', 'arg0')])
+    ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader::VendorSpecificActionHeader() [constructor]
+    cls.add_constructor([])
+    ## vendor-specific-action.h (module 'wave'): uint32_t ns3::VendorSpecificActionHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## vendor-specific-action.h (module 'wave'): uint8_t ns3::VendorSpecificActionHeader::GetCategory() const [member function]
+    cls.add_method('GetCategory', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsReassocResp() const [member function]
-    cls.add_method('IsReassocResp', 
-                   'bool', 
+    ## vendor-specific-action.h (module 'wave'): ns3::TypeId ns3::VendorSpecificActionHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsRetry() const [member function]
-    cls.add_method('IsRetry', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## vendor-specific-action.h (module 'wave'): ns3::OrganizationIdentifier ns3::VendorSpecificActionHeader::GetOrganizationIdentifier() const [member function]
+    cls.add_method('GetOrganizationIdentifier', 
+                   'ns3::OrganizationIdentifier', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsRts() const [member function]
-    cls.add_method('IsRts', 
-                   'bool', 
+    ## vendor-specific-action.h (module 'wave'): uint32_t ns3::VendorSpecificActionHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsToDs() const [member function]
-    cls.add_method('IsToDs', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## vendor-specific-action.h (module 'wave'): static ns3::TypeId ns3::VendorSpecificActionHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::Print(std::ostream & os) const [member function]
+                   is_static=True)
+    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAction() [member function]
-    cls.add_method('SetAction', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr1(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddr1', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr2(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddr2', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr3(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddr3', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr4(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddr4', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAssocReq() [member function]
-    cls.add_method('SetAssocReq', 
+    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::SetOrganizationIdentifier(ns3::OrganizationIdentifier oi) [member function]
+    cls.add_method('SetOrganizationIdentifier', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAssocResp() [member function]
-    cls.add_method('SetAssocResp', 
+                   [param('ns3::OrganizationIdentifier', 'oi')])
+    return
+
+def register_Ns3VsaManager_methods(root_module, cls):
+    ## vsa-manager.h (module 'wave'): ns3::VsaManager::VsaManager(ns3::VsaManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VsaManager const &', 'arg0')])
+    ## vsa-manager.h (module 'wave'): ns3::VsaManager::VsaManager() [constructor]
+    cls.add_constructor([])
+    ## vsa-manager.h (module 'wave'): static ns3::TypeId ns3::VsaManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::RemoveAll() [member function]
+    cls.add_method('RemoveAll', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBeacon() [member function]
-    cls.add_method('SetBeacon', 
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::RemoveByChannel(uint32_t channelNumber) [member function]
+    cls.add_method('RemoveByChannel', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBlockAck() [member function]
-    cls.add_method('SetBlockAck', 
+                   [param('uint32_t', 'channelNumber')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::RemoveByOrganizationIdentifier(ns3::OrganizationIdentifier const & oi) [member function]
+    cls.add_method('RemoveByOrganizationIdentifier', 
+                   'void', 
+                   [param('ns3::OrganizationIdentifier const &', 'oi')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::SendVsa(ns3::VsaInfo const & vsaInfo) [member function]
+    cls.add_method('SendVsa', 
+                   'void', 
+                   [param('ns3::VsaInfo const &', 'vsaInfo')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::SetWaveNetDevice(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('SetWaveNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::SetWaveVsaCallback(ns3::Callback<bool, ns3::Ptr<ns3::Packet const>, ns3::Address const&, unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> vsaCallback) [member function]
+    cls.add_method('SetWaveVsaCallback', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBlockAckReq() [member function]
-    cls.add_method('SetBlockAckReq', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::Packet const >, ns3::Address const &, unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'vsaCallback')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::DoDispose() [member function]
+    cls.add_method('DoDispose', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsFrom() [member function]
-    cls.add_method('SetDsFrom', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
                    'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3WaveBsmStats_methods(root_module, cls):
+    ## wave-bsm-stats.h (module 'wave'): ns3::WaveBsmStats::WaveBsmStats(ns3::WaveBsmStats const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WaveBsmStats const &', 'arg0')])
+    ## wave-bsm-stats.h (module 'wave'): ns3::WaveBsmStats::WaveBsmStats() [constructor]
+    cls.add_constructor([])
+    ## wave-bsm-stats.h (module 'wave'): double ns3::WaveBsmStats::GetBsmPdr(int index) [member function]
+    cls.add_method('GetBsmPdr', 
+                   'double', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): double ns3::WaveBsmStats::GetCumulativeBsmPdr(int index) [member function]
+    cls.add_method('GetCumulativeBsmPdr', 
+                   'double', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetExpectedRxPktCount(int index) [member function]
+    cls.add_method('GetExpectedRxPktCount', 
+                   'int', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetLogging() [member function]
+    cls.add_method('GetLogging', 
+                   'int', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsNotFrom() [member function]
-    cls.add_method('SetDsNotFrom', 
-                   'void', 
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetRxPktCount() [member function]
+    cls.add_method('GetRxPktCount', 
+                   'int', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsNotTo() [member function]
-    cls.add_method('SetDsNotTo', 
-                   'void', 
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetRxPktInRangeCount(int index) [member function]
+    cls.add_method('GetRxPktInRangeCount', 
+                   'int', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetTxByteCount() [member function]
+    cls.add_method('GetTxByteCount', 
+                   'int', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsTo() [member function]
-    cls.add_method('SetDsTo', 
-                   'void', 
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetTxPktCount() [member function]
+    cls.add_method('GetTxPktCount', 
+                   'int', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDuration(ns3::Time duration) [member function]
-    cls.add_method('SetDuration', 
-                   'void', 
-                   [param('ns3::Time', 'duration')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetFragmentNumber(uint8_t frag) [member function]
-    cls.add_method('SetFragmentNumber', 
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncExpectedRxPktCount(int index) [member function]
+    cls.add_method('IncExpectedRxPktCount', 
                    'void', 
-                   [param('uint8_t', 'frag')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetId(uint16_t id) [member function]
-    cls.add_method('SetId', 
-                   'void', 
-                   [param('uint16_t', 'id')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetMoreFragments() [member function]
-    cls.add_method('SetMoreFragments', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncRxPktCount() [member function]
+    cls.add_method('IncRxPktCount', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetMultihopAction() [member function]
-    cls.add_method('SetMultihopAction', 
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncRxPktInRangeCount(int index) [member function]
+    cls.add_method('IncRxPktInRangeCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoMoreFragments() [member function]
-    cls.add_method('SetNoMoreFragments', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncTxByteCount(int bytes) [member function]
+    cls.add_method('IncTxByteCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
-    cls.add_method('SetNoOrder', 
+                   [param('int', 'bytes')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncTxPktCount() [member function]
+    cls.add_method('IncTxPktCount', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
-    cls.add_method('SetNoRetry', 
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::ResetTotalRxPktCounts(int index) [member function]
+    cls.add_method('ResetTotalRxPktCounts', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
-    cls.add_method('SetOrder', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetExpectedRxPktCount(int index, int count) [member function]
+    cls.add_method('SetExpectedRxPktCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
-    cls.add_method('SetProbeReq', 
+                   [param('int', 'index'), param('int', 'count')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetLogging(int log) [member function]
+    cls.add_method('SetLogging', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeResp() [member function]
-    cls.add_method('SetProbeResp', 
+                   [param('int', 'log')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetRxPktCount(int count) [member function]
+    cls.add_method('SetRxPktCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy policy) [member function]
-    cls.add_method('SetQosAckPolicy', 
+                   [param('int', 'count')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetRxPktInRangeCount(int index, int count) [member function]
+    cls.add_method('SetRxPktInRangeCount', 
                    'void', 
-                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
-    cls.add_method('SetQosAmsdu', 
+                   [param('int', 'index'), param('int', 'count')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetTxPktCount(int count) [member function]
+    cls.add_method('SetTxPktCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosBlockAck() [member function]
-    cls.add_method('SetQosBlockAck', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosEosp() [member function]
-    cls.add_method('SetQosEosp', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
-    cls.add_method('SetQosNoAck', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAmsdu() [member function]
-    cls.add_method('SetQosNoAmsdu', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoEosp() [member function]
-    cls.add_method('SetQosNoEosp', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
-    cls.add_method('SetQosNormalAck', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosTid(uint8_t tid) [member function]
-    cls.add_method('SetQosTid', 
-                   'void', 
-                   [param('uint8_t', 'tid')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosTxopLimit(uint8_t txop) [member function]
-    cls.add_method('SetQosTxopLimit', 
-                   'void', 
-                   [param('uint8_t', 'txop')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetRawDuration(uint16_t duration) [member function]
-    cls.add_method('SetRawDuration', 
-                   'void', 
-                   [param('uint16_t', 'duration')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetRetry() [member function]
-    cls.add_method('SetRetry', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetSequenceNumber(uint16_t seq) [member function]
-    cls.add_method('SetSequenceNumber', 
-                   'void', 
-                   [param('uint16_t', 'seq')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetType(ns3::WifiMacType type) [member function]
-    cls.add_method('SetType', 
-                   'void', 
-                   [param('ns3::WifiMacType', 'type')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetTypeData() [member function]
-    cls.add_method('SetTypeData', 
-                   'void', 
-                   [])
+                   [param('int', 'count')])
     return
 
-def register_Ns3WifiMacQueue_methods(root_module, cls):
-    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::WifiMacQueue(ns3::WifiMacQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiMacQueue const &', 'arg0')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::WifiMacQueue() [constructor]
+def register_Ns3WeibullRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::WeibullRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable::WeibullRandomVariable() [constructor]
     cls.add_constructor([])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::Dequeue(ns3::WifiMacHeader * hdr) [member function]
-    cls.add_method('Dequeue', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::DequeueByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
-    cls.add_method('DequeueByTidAndAddress', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::DequeueFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
-    cls.add_method('DequeueFirstAvailable', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('ns3::Time &', 'tStamp'), param('ns3::QosBlockedDestinations const *', 'blockedPackets')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
-    cls.add_method('Enqueue', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Flush() [member function]
-    cls.add_method('Flush', 
-                   'void', 
-                   [])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Time ns3::WifiMacQueue::GetMaxDelay() const [member function]
-    cls.add_method('GetMaxDelay', 
-                   'ns3::Time', 
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
+    cls.add_method('GetScale', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetMaxSize() const [member function]
-    cls.add_method('GetMaxSize', 
-                   'uint32_t', 
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetNPacketsByTidAndAddress(uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
-    cls.add_method('GetNPacketsByTidAndAddress', 
-                   'uint32_t', 
-                   [param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
-    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetSize() [member function]
-    cls.add_method('GetSize', 
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue(double scale, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'scale'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
                    'uint32_t', 
-                   [])
-    ## wifi-mac-queue.h (module 'wifi'): static ns3::TypeId ns3::WifiMacQueue::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   [param('uint32_t', 'scale'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_static=True)
-    ## wifi-mac-queue.h (module 'wifi'): bool ns3::WifiMacQueue::IsEmpty() [member function]
-    cls.add_method('IsEmpty', 
-                   'bool', 
-                   [])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::Peek(ns3::WifiMacHeader * hdr) [member function]
-    cls.add_method('Peek', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
-    cls.add_method('PeekByTidAndAddress', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
-    cls.add_method('PeekFirstAvailable', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('ns3::Time &', 'tStamp'), param('ns3::QosBlockedDestinations const *', 'blockedPackets')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
-    cls.add_method('PushFront', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): bool ns3::WifiMacQueue::Remove(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('Remove', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::SetMaxDelay(ns3::Time delay) [member function]
-    cls.add_method('SetMaxDelay', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::SetMaxSize(uint32_t maxSize) [member function]
-    cls.add_method('SetMaxSize', 
-                   'void', 
-                   [param('uint32_t', 'maxSize')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   visibility='protected', is_virtual=True)
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacQueue::GetAddressForPacket(ns3::WifiMacHeader::AddressType type, std::_List_iterator<ns3::WifiMacQueue::Item> it) [member function]
-    cls.add_method('GetAddressForPacket', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::WifiMacHeader::AddressType', 'type'), param('std::_List_iterator< ns3::WifiMacQueue::Item >', 'it')], 
-                   visibility='protected')
+                   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')])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
+def register_Ns3Wifi80211pHelper_methods(root_module, cls):
+    ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper::Wifi80211pHelper(ns3::Wifi80211pHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Wifi80211pHelper const &', 'arg0')])
+    ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper::Wifi80211pHelper() [constructor]
     cls.add_constructor([])
-    ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
-    cls.add_method('CalculateSnr', 
-                   '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('CalculateTxDuration', 
-                   'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+    ## wifi-80211p-helper.h (module 'wave'): static ns3::Wifi80211pHelper ns3::Wifi80211pHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::Wifi80211pHelper', 
+                   [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('ConfigureStandard', 
+    ## wifi-80211p-helper.h (module 'wave'): static void ns3::Wifi80211pHelper::EnableLogComponents() [member function]
+    cls.add_method('EnableLogComponents', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## wifi-80211p-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::Wifi80211pHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & macHelper, ns3::NodeContainer c) const [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'macHelper'), param('ns3::NodeContainer', 'c')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-80211p-helper.h (module 'wave'): void ns3::Wifi80211pHelper::SetStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('SetStandard', 
                    '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', 
+                   is_virtual=True)
+    return
+
+def register_Ns3WifiActionHeader_methods(root_module, cls):
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader(ns3::WifiActionHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiActionHeader const &', 'arg0')])
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader() [constructor]
+    cls.add_constructor([])
+    ## mgt-headers.h (module 'wifi'): uint32_t ns3::WifiActionHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
                    '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', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
-    cls.add_method('GetDelayUntilIdle', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
-    cls.add_method('GetDsssRate11Mbps', 
-                   'ns3::WifiMode', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue ns3::WifiActionHeader::GetAction() [member function]
+    cls.add_method('GetAction', 
+                   'ns3::WifiActionHeader::ActionValue', 
+                   [])
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::CategoryValue ns3::WifiActionHeader::GetCategory() [member function]
+    cls.add_method('GetCategory', 
+                   'ns3::WifiActionHeader::CategoryValue', 
+                   [])
+    ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::WifiActionHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate1Mbps() [member function]
-    cls.add_method('GetDsssRate1Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): uint32_t ns3::WifiActionHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate2Mbps() [member function]
-    cls.add_method('GetDsssRate2Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): static ns3::TypeId ns3::WifiActionHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate5_5Mbps() [member function]
-    cls.add_method('GetDsssRate5_5Mbps', 
-                   'ns3::WifiMode', 
+    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::SetAction(ns3::WifiActionHeader::CategoryValue type, ns3::WifiActionHeader::ActionValue action) [member function]
+    cls.add_method('SetAction', 
+                   'void', 
+                   [param('ns3::WifiActionHeader::CategoryValue', 'type'), param('ns3::WifiActionHeader::ActionValue', 'action')])
+    return
+
+def register_Ns3WifiActionHeaderActionValue_methods(root_module, cls):
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::ActionValue() [constructor]
+    cls.add_constructor([])
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::ActionValue(ns3::WifiActionHeader::ActionValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiActionHeader::ActionValue const &', 'arg0')])
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::blockAck [variable]
+    cls.add_instance_attribute('blockAck', 'ns3::WifiActionHeader::BlockAckActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::interwork [variable]
+    cls.add_instance_attribute('interwork', 'ns3::WifiActionHeader::InterworkActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::linkMetrtic [variable]
+    cls.add_instance_attribute('linkMetrtic', 'ns3::WifiActionHeader::LinkMetricActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::pathSelection [variable]
+    cls.add_instance_attribute('pathSelection', 'ns3::WifiActionHeader::PathSelectionActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::peerLink [variable]
+    cls.add_instance_attribute('peerLink', 'ns3::WifiActionHeader::PeerLinkMgtActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::resourceCoordination [variable]
+    cls.add_instance_attribute('resourceCoordination', 'ns3::WifiActionHeader::ResourceCoordinationActionValue', is_const=False)
+    return
+
+def register_Ns3WifiInformationElement_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('==')
+    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElement::WifiInformationElement() [constructor]
+    cls.add_constructor([])
+    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElement::WifiInformationElement(ns3::WifiInformationElement const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiInformationElement const &', 'arg0')])
+    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::Deserialize(ns3::Buffer::Iterator i) [member function]
+    cls.add_method('Deserialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'i')])
+    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::DeserializeIfPresent(ns3::Buffer::Iterator i) [member function]
+    cls.add_method('DeserializeIfPresent', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'i')])
+    ## wifi-information-element.h (module 'wifi'): uint8_t ns3::WifiInformationElement::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_pure_virtual=True, is_virtual=True)
+    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElementId ns3::WifiInformationElement::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
-    cls.add_method('GetErpOfdmRate12Mbps', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-information-element.h (module 'wifi'): uint8_t ns3::WifiInformationElement::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate18Mbps() [member function]
-    cls.add_method('GetErpOfdmRate18Mbps', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-information-element.h (module 'wifi'): uint16_t ns3::WifiInformationElement::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate24Mbps() [member function]
-    cls.add_method('GetErpOfdmRate24Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True)
+    ## wifi-information-element.h (module 'wifi'): void ns3::WifiInformationElement::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::Serialize(ns3::Buffer::Iterator i) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'i')], 
+                   is_const=True)
+    ## wifi-information-element.h (module 'wifi'): void ns3::WifiInformationElement::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3WifiMac_methods(root_module, cls):
+    ## wifi-mac.h (module 'wifi'): ns3::WifiMac::WifiMac() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac.h (module 'wifi'): ns3::WifiMac::WifiMac(ns3::WifiMac const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiMac const &', 'arg0')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address to, ns3::Mac48Address from) [member function]
+    cls.add_method('Enqueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address to) [member function]
+    cls.add_method('Enqueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'to')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetAckTimeout() const [member function]
+    cls.add_method('GetAckTimeout', 
+                   'ns3::Time', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate36Mbps() [member function]
-    cls.add_method('GetErpOfdmRate36Mbps', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::WifiMac::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Mac48Address', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate48Mbps() [member function]
-    cls.add_method('GetErpOfdmRate48Mbps', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetBasicBlockAckTimeout() const [member function]
+    cls.add_method('GetBasicBlockAckTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::WifiMac::GetBssid() const [member function]
+    cls.add_method('GetBssid', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetCompressedBlockAckTimeout() const [member function]
+    cls.add_method('GetCompressedBlockAckTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetCtsTimeout() const [member function]
+    cls.add_method('GetCtsTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetEifsNoDifs() const [member function]
+    cls.add_method('GetEifsNoDifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetMaxPropagationDelay() const [member function]
+    cls.add_method('GetMaxPropagationDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetMsduLifetime() const [member function]
+    cls.add_method('GetMsduLifetime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetPifs() const [member function]
+    cls.add_method('GetPifs', 
+                   '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', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSlot() const [member function]
+    cls.add_method('GetSlot', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ssid ns3::WifiMac::GetSsid() const [member function]
+    cls.add_method('GetSsid', 
+                   'ns3::Ssid', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::WifiMac::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate54Mbps() [member function]
-    cls.add_method('GetErpOfdmRate54Mbps', 
-                   'ns3::WifiMode', 
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiMac::GetWifiPhy() const [member function]
+    cls.add_method('GetWifiPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiRemoteStationManager> ns3::WifiMac::GetWifiRemoteStationManager() const [member function]
+    cls.add_method('GetWifiRemoteStationManager', 
+                   'ns3::Ptr< ns3::WifiRemoteStationManager >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyPromiscRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyRx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyRxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyRxDrop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyTx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyTxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTxDrop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
+    cls.add_method('SetAckTimeout', 
+                   'void', 
+                   [param('ns3::Time', 'ackTimeout')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAddress(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetBasicBlockAckTimeout(ns3::Time blockAckTimeout) [member function]
+    cls.add_method('SetBasicBlockAckTimeout', 
+                   'void', 
+                   [param('ns3::Time', 'blockAckTimeout')], 
+                   is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetCompressedBlockAckTimeout(ns3::Time blockAckTimeout) [member function]
+    cls.add_method('SetCompressedBlockAckTimeout', 
+                   'void', 
+                   [param('ns3::Time', 'blockAckTimeout')], 
+                   is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetCtsTimeout(ns3::Time ctsTimeout) [member function]
+    cls.add_method('SetCtsTimeout', 
+                   'void', 
+                   [param('ns3::Time', 'ctsTimeout')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetEifsNoDifs(ns3::Time eifsNoDifs) [member function]
+    cls.add_method('SetEifsNoDifs', 
+                   'void', 
+                   [param('ns3::Time', 'eifsNoDifs')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetForwardUpCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> upCallback) [member function]
+    cls.add_method('SetForwardUpCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'upCallback')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkDownCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkDown) [member function]
+    cls.add_method('SetLinkDownCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkDown')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkUpCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkUp) [member function]
+    cls.add_method('SetLinkUpCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkUp')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetMaxPropagationDelay(ns3::Time delay) [member function]
+    cls.add_method('SetMaxPropagationDelay', 
+                   'void', 
+                   [param('ns3::Time', 'delay')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetPifs(ns3::Time pifs) [member function]
+    cls.add_method('SetPifs', 
+                   'void', 
+                   [param('ns3::Time', 'pifs')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetPromisc() [member function]
+    cls.add_method('SetPromisc', 
+                   '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', 
+                   [param('ns3::Time', 'sifs')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSlot(ns3::Time slotTime) [member function]
+    cls.add_method('SetSlot', 
+                   'void', 
+                   [param('ns3::Time', 'slotTime')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSsid(ns3::Ssid ssid) [member function]
+    cls.add_method('SetSsid', 
+                   'void', 
+                   [param('ns3::Ssid', 'ssid')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetWifiPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetWifiPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'stationManager')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): bool ns3::WifiMac::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    cls.add_method('ConfigureDcf', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   visibility='protected')
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('FinishConfigureStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3WifiMacHeader_methods(root_module, cls):
+    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::WifiMacHeader(ns3::WifiMacHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiMacHeader const &', 'arg0')])
+    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::WifiMacHeader() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr1() const [member function]
+    cls.add_method('GetAddr1', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr2() const [member function]
+    cls.add_method('GetAddr2', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr3() const [member function]
+    cls.add_method('GetAddr3', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr4() const [member function]
+    cls.add_method('GetAddr4', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Time ns3::WifiMacHeader::GetDuration() const [member function]
+    cls.add_method('GetDuration', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetFragmentNumber() const [member function]
+    cls.add_method('GetFragmentNumber', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::TypeId ns3::WifiMacHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::QosAckPolicy ns3::WifiMacHeader::GetQosAckPolicy() const [member function]
+    cls.add_method('GetQosAckPolicy', 
+                   'ns3::WifiMacHeader::QosAckPolicy', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint8_t ns3::WifiMacHeader::GetQosTid() const [member function]
+    cls.add_method('GetQosTid', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint8_t ns3::WifiMacHeader::GetQosTxopLimit() const [member function]
+    cls.add_method('GetQosTxopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetRawDuration() const [member function]
+    cls.add_method('GetRawDuration', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetSequenceControl() const [member function]
+    cls.add_method('GetSequenceControl', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetSequenceNumber() const [member function]
+    cls.add_method('GetSequenceNumber', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType ns3::WifiMacHeader::GetType() const [member function]
+    cls.add_method('GetType', 
+                   'ns3::WifiMacType', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): static ns3::TypeId ns3::WifiMacHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-mac-header.h (module 'wifi'): char const * ns3::WifiMacHeader::GetTypeString() const [member function]
+    cls.add_method('GetTypeString', 
+                   'char const *', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAck() const [member function]
+    cls.add_method('IsAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAction() const [member function]
+    cls.add_method('IsAction', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAssocReq() const [member function]
+    cls.add_method('IsAssocReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAssocResp() const [member function]
+    cls.add_method('IsAssocResp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAuthentication() const [member function]
+    cls.add_method('IsAuthentication', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBeacon() const [member function]
+    cls.add_method('IsBeacon', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBlockAck() const [member function]
+    cls.add_method('IsBlockAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBlockAckReq() const [member function]
+    cls.add_method('IsBlockAckReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCfpoll() const [member function]
+    cls.add_method('IsCfpoll', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCtl() const [member function]
+    cls.add_method('IsCtl', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCts() const [member function]
+    cls.add_method('IsCts', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsData() const [member function]
+    cls.add_method('IsData', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsDeauthentication() const [member function]
+    cls.add_method('IsDeauthentication', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsDisassociation() const [member function]
+    cls.add_method('IsDisassociation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsFromDs() const [member function]
+    cls.add_method('IsFromDs', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMgt() const [member function]
+    cls.add_method('IsMgt', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMoreFragments() const [member function]
+    cls.add_method('IsMoreFragments', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMultihopAction() const [member function]
+    cls.add_method('IsMultihopAction', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsProbeReq() const [member function]
+    cls.add_method('IsProbeReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsProbeResp() const [member function]
+    cls.add_method('IsProbeResp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosAck() const [member function]
+    cls.add_method('IsQosAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosAmsdu() const [member function]
+    cls.add_method('IsQosAmsdu', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosBlockAck() const [member function]
+    cls.add_method('IsQosBlockAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosData() const [member function]
+    cls.add_method('IsQosData', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosEosp() const [member function]
+    cls.add_method('IsQosEosp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosNoAck() const [member function]
+    cls.add_method('IsQosNoAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsReassocReq() const [member function]
+    cls.add_method('IsReassocReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsReassocResp() const [member function]
+    cls.add_method('IsReassocResp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsRetry() const [member function]
+    cls.add_method('IsRetry', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsRts() const [member function]
+    cls.add_method('IsRts', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsToDs() const [member function]
+    cls.add_method('IsToDs', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAction() [member function]
+    cls.add_method('SetAction', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr1(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddr1', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr2(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddr2', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr3(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddr3', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr4(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddr4', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAssocReq() [member function]
+    cls.add_method('SetAssocReq', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAssocResp() [member function]
+    cls.add_method('SetAssocResp', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBeacon() [member function]
+    cls.add_method('SetBeacon', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBlockAck() [member function]
+    cls.add_method('SetBlockAck', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBlockAckReq() [member function]
+    cls.add_method('SetBlockAckReq', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsFrom() [member function]
+    cls.add_method('SetDsFrom', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsNotFrom() [member function]
+    cls.add_method('SetDsNotFrom', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsNotTo() [member function]
+    cls.add_method('SetDsNotTo', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsTo() [member function]
+    cls.add_method('SetDsTo', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDuration(ns3::Time duration) [member function]
+    cls.add_method('SetDuration', 
+                   'void', 
+                   [param('ns3::Time', 'duration')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetFragmentNumber(uint8_t frag) [member function]
+    cls.add_method('SetFragmentNumber', 
+                   'void', 
+                   [param('uint8_t', 'frag')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetId(uint16_t id) [member function]
+    cls.add_method('SetId', 
+                   'void', 
+                   [param('uint16_t', 'id')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetMoreFragments() [member function]
+    cls.add_method('SetMoreFragments', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetMultihopAction() [member function]
+    cls.add_method('SetMultihopAction', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoMoreFragments() [member function]
+    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', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeResp() [member function]
+    cls.add_method('SetProbeResp', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy policy) [member function]
+    cls.add_method('SetQosAckPolicy', 
+                   'void', 
+                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
+    cls.add_method('SetQosAmsdu', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosBlockAck() [member function]
+    cls.add_method('SetQosBlockAck', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosEosp() [member function]
+    cls.add_method('SetQosEosp', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
+    cls.add_method('SetQosNoAck', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAmsdu() [member function]
+    cls.add_method('SetQosNoAmsdu', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoEosp() [member function]
+    cls.add_method('SetQosNoEosp', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
+    cls.add_method('SetQosNormalAck', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosTid(uint8_t tid) [member function]
+    cls.add_method('SetQosTid', 
+                   'void', 
+                   [param('uint8_t', 'tid')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosTxopLimit(uint8_t txop) [member function]
+    cls.add_method('SetQosTxopLimit', 
+                   'void', 
+                   [param('uint8_t', 'txop')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetRawDuration(uint16_t duration) [member function]
+    cls.add_method('SetRawDuration', 
+                   'void', 
+                   [param('uint16_t', 'duration')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetRetry() [member function]
+    cls.add_method('SetRetry', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetSequenceNumber(uint16_t seq) [member function]
+    cls.add_method('SetSequenceNumber', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetType(ns3::WifiMacType type) [member function]
+    cls.add_method('SetType', 
+                   'void', 
+                   [param('ns3::WifiMacType', 'type')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetTypeData() [member function]
+    cls.add_method('SetTypeData', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3WifiMacQueue_methods(root_module, cls):
+    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::WifiMacQueue(ns3::WifiMacQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiMacQueue const &', 'arg0')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::WifiMacQueue() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::Dequeue(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::DequeueByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
+    cls.add_method('DequeueByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::DequeueFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
+    cls.add_method('DequeueFirstAvailable', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('ns3::Time &', 'tStamp'), param('ns3::QosBlockedDestinations const *', 'blockedPackets')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('Enqueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Flush() [member function]
+    cls.add_method('Flush', 
+                   'void', 
+                   [])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Time ns3::WifiMacQueue::GetMaxDelay() const [member function]
+    cls.add_method('GetMaxDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetMaxSize() const [member function]
+    cls.add_method('GetMaxSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetNPacketsByTidAndAddress(uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
+    cls.add_method('GetNPacketsByTidAndAddress', 
+                   'uint32_t', 
+                   [param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
+    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [])
+    ## wifi-mac-queue.h (module 'wifi'): static ns3::TypeId ns3::WifiMacQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-mac-queue.h (module 'wifi'): bool ns3::WifiMacQueue::IsEmpty() [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::Peek(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr'), param('ns3::Time *', 'timestamp')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
+    cls.add_method('PeekFirstAvailable', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('ns3::Time &', 'tStamp'), param('ns3::QosBlockedDestinations const *', 'blockedPackets')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('PushFront', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## wifi-mac-queue.h (module 'wifi'): bool ns3::WifiMacQueue::Remove(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('Remove', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::SetMaxDelay(ns3::Time delay) [member function]
+    cls.add_method('SetMaxDelay', 
+                   'void', 
+                   [param('ns3::Time', 'delay')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::SetMaxSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacQueue::GetAddressForPacket(ns3::WifiMacHeader::AddressType type, std::_List_iterator<ns3::WifiMacQueue::Item> it) [member function]
+    cls.add_method('GetAddressForPacket', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::WifiMacHeader::AddressType', 'type'), param('std::_List_iterator< ns3::WifiMacQueue::Item >', 'it')], 
+                   visibility='protected')
+    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')])
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    cls.add_method('CalculateSnr', 
+                   'double', 
+                   [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('CalculateTxDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## 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', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
+    cls.add_method('GetDelayUntilIdle', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
+    cls.add_method('GetDsssRate11Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate1Mbps() [member function]
+    cls.add_method('GetDsssRate1Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate2Mbps() [member function]
+    cls.add_method('GetDsssRate2Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate5_5Mbps() [member function]
+    cls.add_method('GetDsssRate5_5Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
+    cls.add_method('GetErpOfdmRate12Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate18Mbps() [member function]
+    cls.add_method('GetErpOfdmRate18Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate24Mbps() [member function]
+    cls.add_method('GetErpOfdmRate24Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate36Mbps() [member function]
+    cls.add_method('GetErpOfdmRate36Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate48Mbps() [member function]
+    cls.add_method('GetErpOfdmRate48Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate54Mbps() [member function]
+    cls.add_method('GetErpOfdmRate54Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate6Mbps() [member function]
+    cls.add_method('GetErpOfdmRate6Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate9Mbps() [member function]
+    cls.add_method('GetErpOfdmRate9Mbps', 
+                   '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', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
+    cls.add_method('GetNTxPower', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
+                   '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', 
+                   [], 
+                   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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
+    cls.add_method('GetStateDuration', 
+                   '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', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
+    cls.add_method('GetTxPowerStart', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsModeSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
+    cls.add_method('IsStateBusy', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
+    cls.add_method('IsStateCcaBusy', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
+    cls.add_method('IsStateIdle', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
+    cls.add_method('IsStateRx', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
+    cls.add_method('IsStateSleep', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
+    cls.add_method('IsStateSwitching', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
+    cls.add_method('IsStateTx', 
+                   '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, 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('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', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyRxDrop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyRxEnd', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTxBegin', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTxDrop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTxEnd', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('RegisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ResumeFromSleep() [member function]
+    cls.add_method('ResumeFromSleep', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
+                   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', 
+                   [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]
+    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::SetSleepMode() [member function]
+    cls.add_method('SetSleepMode', 
+                   'void', 
+                   [], 
+                   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'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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):
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager(ns3::WifiRemoteStationManager const & arg0) [copy constructor]
+    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::AddAllSupportedModes(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedModes', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## 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::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::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::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', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentSize(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
+    cls.add_method('GetFragmentSize', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentationThreshold() const [member function]
+    cls.add_method('GetFragmentationThreshold', 
+                   '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', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetMaxSlrc() const [member function]
+    cls.add_method('GetMaxSlrc', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetMaxSsrc() const [member function]
+    cls.add_method('GetMaxSsrc', 
+                   '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', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonUnicastMode() const [member function]
+    cls.add_method('GetNonUnicastMode', 
+                   '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::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', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsBrandNew(ns3::Mac48Address address) const [member function]
+    cls.add_method('IsBrandNew', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsLastFragment(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
+    cls.add_method('IsLastFragment', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsWaitAssocTxOk(ns3::Mac48Address address) const [member function]
+    cls.add_method('IsWaitAssocTxOk', 
+                   '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', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedFragmentation(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NeedFragmentation', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NeedRts', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRtsRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NeedRtsRetransmission', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    cls.add_method('PrepareForQueue', 
+                   'void', 
+                   [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'): void ns3::WifiRemoteStationManager::RecordDisassociated(ns3::Mac48Address address) [member function]
+    cls.add_method('RecordDisassociated', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordGotAssocTxFailed(ns3::Mac48Address address) [member function]
+    cls.add_method('RecordGotAssocTxFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordGotAssocTxOk(ns3::Mac48Address address) [member function]
+    cls.add_method('RecordGotAssocTxOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordWaitAssocTxOk(ns3::Mac48Address address) [member function]
+    cls.add_method('RecordWaitAssocTxOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
+    cls.add_method('ReportDataFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('ReportDataOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportFinalDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
+    cls.add_method('ReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportFinalRtsFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
+    cls.add_method('ReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRtsFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
+    cls.add_method('ReportRtsFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRtsOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('ReportRtsOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRxOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('ReportRxOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::Reset(ns3::Mac48Address address) [member function]
+    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', 
+                   [param('uint32_t', 'maxSlrc')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSsrc(uint32_t maxSsrc) [member function]
+    cls.add_method('SetMaxSsrc', 
+                   'void', 
+                   [param('uint32_t', 'maxSsrc')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetRtsCtsThreshold(uint32_t threshold) [member function]
+    cls.add_method('SetRtsCtsThreshold', 
+                   'void', 
+                   [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetupPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   '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'): ns3::Ptr<ns3::WifiMac> ns3::WifiRemoteStationManager::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::WifiMac >', 
+                   [], 
+                   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::GetNess(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNess', 
+                   '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'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   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', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::WifiRemoteStationManager::DoCreateStation() const [member function]
+    cls.add_method('DoCreateStation', 
+                   'ns3::WifiRemoteStation *', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## 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::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]
+    cls.add_method('DoNeedDataRetransmission', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedFragmentation(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedFragmentation', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedRts(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedRts', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedRtsRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedRtsRetransmission', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('DoReportDataOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('DoReportRtsOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('DoReportRxOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsLowLatency() const [member function]
+    cls.add_method('IsLowLatency', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3YansWavePhyHelper_methods(root_module, cls):
+    ## wave-helper.h (module 'wave'): ns3::YansWavePhyHelper::YansWavePhyHelper() [constructor]
+    cls.add_constructor([])
+    ## wave-helper.h (module 'wave'): ns3::YansWavePhyHelper::YansWavePhyHelper(ns3::YansWavePhyHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::YansWavePhyHelper const &', 'arg0')])
+    ## wave-helper.h (module 'wave'): static ns3::YansWavePhyHelper ns3::YansWavePhyHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::YansWavePhyHelper', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate6Mbps() [member function]
-    cls.add_method('GetErpOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
+    ## wave-helper.h (module 'wave'): void ns3::YansWavePhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## wave-helper.h (module 'wave'): void ns3::YansWavePhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3ZetaRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ZetaRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate9Mbps() [member function]
-    cls.add_method('GetErpOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
+    ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable::ZetaRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
-    cls.add_method('GetFrequency', 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetValue(double alpha) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'alpha')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger(uint32_t alpha) [member function]
+    cls.add_method('GetInteger', 
                    'uint32_t', 
+                   [param('uint32_t', 'alpha')])
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   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_virtual=True)
+    return
+
+def register_Ns3ZipfRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ZipfRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   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', 
+    ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable::ZipfRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetN() const [member function]
+    cls.add_method('GetN', 
                    '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', 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetValue(uint32_t n, double alpha) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('uint32_t', 'n'), param('double', 'alpha')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger(uint32_t n, uint32_t alpha) [member function]
+    cls.add_method('GetInteger', 
                    'uint32_t', 
+                   [param('uint32_t', 'n'), param('uint32_t', 'alpha')])
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   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', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
                    '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', 
+                   is_virtual=True)
+    return
+
+def register_Ns3AmpduSubframeHeader_methods(root_module, cls):
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader::AmpduSubframeHeader(ns3::AmpduSubframeHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AmpduSubframeHeader const &', 'arg0')])
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader::AmpduSubframeHeader() [constructor]
+    cls.add_constructor([])
+    ## ampdu-subframe-header.h (module 'wifi'): uint32_t ns3::AmpduSubframeHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
                    'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint8_t ns3::AmpduSubframeHeader::GetCrc() const [member function]
+    cls.add_method('GetCrc', 
+                   'uint8_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', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
-                   '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', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
-                   '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', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
-                   '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_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::TypeId ns3::AmpduSubframeHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
-    cls.add_method('GetOfdmRate36Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint16_t ns3::AmpduSubframeHeader::GetLength() const [member function]
+    cls.add_method('GetLength', 
+                   'uint16_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint32_t ns3::AmpduSubframeHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW10MHz', 
-                   'ns3::WifiMode', 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint8_t ns3::AmpduSubframeHeader::GetSig() const [member function]
+    cls.add_method('GetSig', 
+                   'uint8_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
-                   'ns3::WifiMode', 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): static ns3::TypeId ns3::AmpduSubframeHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetCrc(uint8_t crc) [member function]
+    cls.add_method('SetCrc', 
+                   'void', 
+                   [param('uint8_t', 'crc')])
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetLength(uint16_t length) [member function]
+    cls.add_method('SetLength', 
+                   'void', 
+                   [param('uint16_t', 'length')])
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetSig() [member function]
+    cls.add_method('SetSig', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3Application_methods(root_module, cls):
+    ## application.h (module 'network'): ns3::Application::Application(ns3::Application const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Application const &', 'arg0')])
+    ## application.h (module 'network'): ns3::Application::Application() [constructor]
+    cls.add_constructor([])
+    ## application.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Application::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
                    [], 
-                   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_const=True)
+    ## application.h (module 'network'): static ns3::TypeId ns3::Application::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+    ## application.h (module 'network'): void ns3::Application::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## application.h (module 'network'): void ns3::Application::SetStartTime(ns3::Time start) [member function]
+    cls.add_method('SetStartTime', 
+                   'void', 
+                   [param('ns3::Time', 'start')])
+    ## application.h (module 'network'): void ns3::Application::SetStopTime(ns3::Time stop) [member function]
+    cls.add_method('SetStopTime', 
+                   'void', 
+                   [param('ns3::Time', 'stop')])
+    ## application.h (module 'network'): void ns3::Application::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
-    cls.add_method('GetOfdmRate48Mbps', 
-                   'ns3::WifiMode', 
+                   visibility='protected', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
-                   'ns3::WifiMode', 
+                   visibility='protected', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
-                   'ns3::WifiMode', 
+                   visibility='private', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   visibility='private', 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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
-    cls.add_method('GetOfdmRate54Mbps', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
-                   'ns3::WifiMode', 
+                   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_Ns3BsmApplication_methods(root_module, cls):
+    ## bsm-application.h (module 'wave'): ns3::BsmApplication::BsmApplication(ns3::BsmApplication const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BsmApplication const &', 'arg0')])
+    ## bsm-application.h (module 'wave'): ns3::BsmApplication::BsmApplication() [constructor]
+    cls.add_constructor([])
+    ## bsm-application.h (module 'wave'): int64_t ns3::BsmApplication::AssignStreams(int64_t streamIndex) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'streamIndex')])
+    ## bsm-application.h (module 'wave'): static ns3::TypeId ns3::BsmApplication::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
+    ## bsm-application.h (module 'wave'): void ns3::BsmApplication::Setup(ns3::Ipv4InterfaceContainer & i, int nodeId, ns3::Time totalTime, uint32_t wavePacketSize, ns3::Time waveInterval, double gpsAccuracyNs, std::vector<double, std::allocator<double> > rangesSq, ns3::Ptr<ns3::WaveBsmStats> waveBsmStats, std::vector<int, std::allocator<int> > * nodesMoving, int mode, ns3::Time txDelay) [member function]
+    cls.add_method('Setup', 
+                   'void', 
+                   [param('ns3::Ipv4InterfaceContainer &', 'i'), param('int', 'nodeId'), param('ns3::Time', 'totalTime'), param('uint32_t', 'wavePacketSize'), param('ns3::Time', 'waveInterval'), param('double', 'gpsAccuracyNs'), param('std::vector< double >', 'rangesSq'), param('ns3::Ptr< ns3::WaveBsmStats >', 'waveBsmStats'), param('std::vector< int > *', 'nodesMoving'), param('int', 'mode'), param('ns3::Time', 'txDelay')])
+    ## bsm-application.h (module 'wave'): ns3::BsmApplication::wavePort [variable]
+    cls.add_static_attribute('wavePort', 'int', is_const=False)
+    ## bsm-application.h (module 'wave'): void ns3::BsmApplication::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
-                   'ns3::WifiMode', 
+                   visibility='protected', is_virtual=True)
+    ## bsm-application.h (module 'wave'): void ns3::BsmApplication::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
-                   'ns3::WifiMode', 
+                   visibility='private', is_virtual=True)
+    ## bsm-application.h (module 'wave'): void ns3::BsmApplication::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   visibility='private', 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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   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_Ns3Channel_methods(root_module, cls):
+    ## channel.h (module 'network'): ns3::Channel::Channel(ns3::Channel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Channel const &', 'arg0')])
+    ## channel.h (module 'network'): ns3::Channel::Channel() [constructor]
+    cls.add_constructor([])
+    ## channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Channel::GetDevice(uint32_t i) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel.h (module 'network'): uint32_t ns3::Channel::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
                    [], 
-                   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_const=True)
+    ## channel.h (module 'network'): uint32_t ns3::Channel::GetNDevices() const [member function]
+    cls.add_method('GetNDevices', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel.h (module 'network'): static ns3::TypeId ns3::Channel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+    return
+
+def register_Ns3ChannelCoordinationListener_methods(root_module, cls):
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinationListener::ChannelCoordinationListener() [constructor]
+    cls.add_constructor([])
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinationListener::ChannelCoordinationListener(ns3::ChannelCoordinationListener const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ChannelCoordinationListener const &', 'arg0')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinationListener::NotifyCchSlotStart(ns3::Time duration) [member function]
+    cls.add_method('NotifyCchSlotStart', 
+                   'void', 
+                   [param('ns3::Time', 'duration')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinationListener::NotifyGuardSlotStart(ns3::Time duration, bool cchi) [member function]
+    cls.add_method('NotifyGuardSlotStart', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('bool', 'cchi')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinationListener::NotifySchSlotStart(ns3::Time duration) [member function]
+    cls.add_method('NotifySchSlotStart', 
+                   'void', 
+                   [param('ns3::Time', 'duration')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3ChannelCoordinator_methods(root_module, cls):
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinator::ChannelCoordinator(ns3::ChannelCoordinator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ChannelCoordinator const &', 'arg0')])
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinator::ChannelCoordinator() [constructor]
+    cls.add_constructor([])
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetCchInterval() const [member function]
+    cls.add_method('GetCchInterval', 
+                   'ns3::Time', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
-    cls.add_method('GetOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): static ns3::Time ns3::ChannelCoordinator::GetDefaultCchInterval() [member function]
+    cls.add_method('GetDefaultCchInterval', 
+                   'ns3::Time', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
-                   'ns3::WifiMode', 
+    ## channel-coordinator.h (module 'wave'): static ns3::Time ns3::ChannelCoordinator::GetDefaultGuardInterval() [member function]
+    cls.add_method('GetDefaultGuardInterval', 
+                   'ns3::Time', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
-                   'ns3::WifiMode', 
+    ## channel-coordinator.h (module 'wave'): static ns3::Time ns3::ChannelCoordinator::GetDefaultSchInterval() [member function]
+    cls.add_method('GetDefaultSchInterval', 
+                   'ns3::Time', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpHeaderMode', 
-                   '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', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
-    cls.add_method('GetStateDuration', 
+    ## channel-coordinator.h (module 'wave'): static ns3::Time ns3::ChannelCoordinator::GetDefaultSyncInterval() [member function]
+    cls.add_method('GetDefaultSyncInterval', 
                    '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_static=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'ns3::Time', 
                    [], 
-                   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', 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetIntervalTime(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('GetIntervalTime', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetRemainTime(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('GetRemainTime', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetSchInterval() const [member function]
+    cls.add_method('GetSchInterval', 
+                   'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
-    cls.add_method('GetTxPowerStart', 
-                   'double', 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetSyncInterval() const [member function]
+    cls.add_method('GetSyncInterval', 
+                   'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): static ns3::TypeId ns3::ChannelCoordinator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
-    cls.add_method('IsModeSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
-    cls.add_method('IsStateBusy', 
+    ## channel-coordinator.h (module 'wave'): bool ns3::ChannelCoordinator::IsCchInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('IsCchInterval', 
                    'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
-    cls.add_method('IsStateCcaBusy', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
-    cls.add_method('IsStateIdle', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
-    cls.add_method('IsStateRx', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
-    cls.add_method('IsStateSleep', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): bool ns3::ChannelCoordinator::IsGuardInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('IsGuardInterval', 
                    'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
-    cls.add_method('IsStateSwitching', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): bool ns3::ChannelCoordinator::IsSchInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('IsSchInterval', 
                    'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
-    cls.add_method('IsStateTx', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): bool ns3::ChannelCoordinator::IsValidConfig() const [member function]
+    cls.add_method('IsValidConfig', 
                    '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, 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('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', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyRxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyRxEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTxBegin', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTxEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::NeedTimeToCchInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('NeedTimeToCchInterval', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::NeedTimeToGuardInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('NeedTimeToGuardInterval', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::NeedTimeToSchInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('NeedTimeToSchInterval', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::RegisterListener(ns3::Ptr<ns3::ChannelCoordinationListener> listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
-                   [param('ns3::WifiPhyListener *', 'listener')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ResumeFromSleep() [member function]
-    cls.add_method('ResumeFromSleep', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('SendPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   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', 
+                   [param('ns3::Ptr< ns3::ChannelCoordinationListener >', 'listener')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::SetCchInterval(ns3::Time cchi) [member function]
+    cls.add_method('SetCchInterval', 
                    'void', 
-                   [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
+                   [param('ns3::Time', 'cchi')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::SetGuardInterval(ns3::Time guardi) [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', 
+                   [param('ns3::Time', 'guardi')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::SetSchInterval(ns3::Time schi) [member function]
+    cls.add_method('SetSchInterval', 
                    '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', 
+                   [param('ns3::Time', 'schi')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::UnregisterAllListeners() [member function]
+    cls.add_method('UnregisterAllListeners', 
                    '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]
-    cls.add_method('SetReceiveOkCallback', 
+                   [])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::UnregisterListener(ns3::Ptr<ns3::ChannelCoordinationListener> listener) [member function]
+    cls.add_method('UnregisterListener', 
                    '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::SetSleepMode() [member function]
-    cls.add_method('SetSleepMode', 
+                   [param('ns3::Ptr< ns3::ChannelCoordinationListener >', 'listener')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
                    'void', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
+                   visibility='private', is_virtual=True)
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
                    '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', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3ChannelManager_methods(root_module, cls):
+    ## channel-manager.h (module 'wave'): ns3::ChannelManager::ChannelManager(ns3::ChannelManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ChannelManager const &', 'arg0')])
+    ## channel-manager.h (module 'wave'): ns3::ChannelManager::ChannelManager() [constructor]
+    cls.add_constructor([])
+    ## channel-manager.h (module 'wave'): static uint32_t ns3::ChannelManager::GetCch() [member function]
+    cls.add_method('GetCch', 
                    'uint32_t', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): bool ns3::ChannelManager::GetManagementAdaptable(uint32_t channelNumber) [member function]
+    cls.add_method('GetManagementAdaptable', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-manager.h (module 'wave'): ns3::WifiMode ns3::ChannelManager::GetManagementDataRate(uint32_t channelNumber) [member function]
+    cls.add_method('GetManagementDataRate', 
+                   'ns3::WifiMode', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-manager.h (module 'wave'): uint32_t ns3::ChannelManager::GetManagementPowerLevel(uint32_t channelNumber) [member function]
+    cls.add_method('GetManagementPowerLevel', 
+                   'uint32_t', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-manager.h (module 'wave'): static uint32_t ns3::ChannelManager::GetNumberOfWaveChannels() [member function]
+    cls.add_method('GetNumberOfWaveChannels', 
+                   'uint32_t', 
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): uint32_t ns3::ChannelManager::GetOperatingClass(uint32_t channelNumber) [member function]
+    cls.add_method('GetOperatingClass', 
+                   'uint32_t', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-manager.h (module 'wave'): static std::vector<unsigned int, std::allocator<unsigned int> > ns3::ChannelManager::GetSchs() [member function]
+    cls.add_method('GetSchs', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static ns3::TypeId ns3::ChannelManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static std::vector<unsigned int, std::allocator<unsigned int> > ns3::ChannelManager::GetWaveChannels() [member function]
+    cls.add_method('GetWaveChannels', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static bool ns3::ChannelManager::IsCch(uint32_t channelNumber) [member function]
+    cls.add_method('IsCch', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static bool ns3::ChannelManager::IsSch(uint32_t channelNumber) [member function]
+    cls.add_method('IsSch', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static bool ns3::ChannelManager::IsWaveChannel(uint32_t channelNumber) [member function]
+    cls.add_method('IsWaveChannel', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_static=True)
     return
 
-def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager(ns3::WifiRemoteStationManager const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
+def register_Ns3ChannelScheduler_methods(root_module, cls):
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelScheduler::ChannelScheduler(ns3::ChannelScheduler const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ChannelScheduler const &', 'arg0')])
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelScheduler::ChannelScheduler() [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', 
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelAccess ns3::ChannelScheduler::GetAssignedAccessType(uint32_t channelNumber) const [member function]
+    cls.add_method('GetAssignedAccessType', 
+                   'ns3::ChannelAccess', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): static ns3::TypeId ns3::ChannelScheduler::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsAlternatingAccessAssigned(uint32_t channelNumber) const [member function]
+    cls.add_method('IsAlternatingAccessAssigned', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsCchAccessAssigned() const [member function]
+    cls.add_method('IsCchAccessAssigned', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsChannelAccessAssigned(uint32_t channelNumber) const [member function]
+    cls.add_method('IsChannelAccessAssigned', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsContinuousAccessAssigned(uint32_t channelNumber) const [member function]
+    cls.add_method('IsContinuousAccessAssigned', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsDefaultCchAccessAssigned() const [member function]
+    cls.add_method('IsDefaultCchAccessAssigned', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsExtendedAccessAssigned(uint32_t channelNumber) const [member function]
+    cls.add_method('IsExtendedAccessAssigned', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsSchAccessAssigned() const [member function]
+    cls.add_method('IsSchAccessAssigned', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): void ns3::ChannelScheduler::SetWaveNetDevice(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('SetWaveNetDevice', 
                    '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', 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')], 
+                   is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::StartSch(ns3::SchInfo const & schInfo) [member function]
+    cls.add_method('StartSch', 
+                   'bool', 
+                   [param('ns3::SchInfo const &', 'schInfo')])
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::StopSch(uint32_t channelNumber) [member function]
+    cls.add_method('StopSch', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::AssignAlternatingAccess(uint32_t channelNumber, bool immediate) [member function]
+    cls.add_method('AssignAlternatingAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber'), param('bool', 'immediate')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::AssignContinuousAccess(uint32_t channelNumber, bool immediate) [member function]
+    cls.add_method('AssignContinuousAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber'), param('bool', 'immediate')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::AssignDefaultCchAccess() [member function]
+    cls.add_method('AssignDefaultCchAccess', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::AssignExtendedAccess(uint32_t channelNumber, uint32_t extends, bool immediate) [member function]
+    cls.add_method('AssignExtendedAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber'), param('uint32_t', 'extends'), param('bool', 'immediate')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): void ns3::ChannelScheduler::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
-    ## 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')], 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::ReleaseAccess(uint32_t channelNumber) [member function]
+    cls.add_method('ReleaseAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3ConstantRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ConstantRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable::ConstantRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetConstant() const [member function]
+    cls.add_method('GetConstant', 
+                   'double', 
+                   [], 
                    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')], 
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetValue(double constant) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'constant')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ConstantRandomVariable::GetInteger(uint32_t constant) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'constant')])
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ConstantRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3CtrlBAckRequestHeader_methods(root_module, cls):
+    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader(ns3::CtrlBAckRequestHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CtrlBAckRequestHeader const &', 'arg0')])
+    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader() [constructor]
+    cls.add_constructor([])
+    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckRequestHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): ns3::TypeId ns3::CtrlBAckRequestHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckRequestHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckRequestHeader::GetStartingSequence() const [member function]
+    cls.add_method('GetStartingSequence', 
+                   'uint16_t', 
+                   [], 
                    is_const=True)
-    ## 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::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', 
+    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckRequestHeader::GetStartingSequenceControl() const [member function]
+    cls.add_method('GetStartingSequenceControl', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): uint8_t ns3::CtrlBAckRequestHeader::GetTidInfo() const [member function]
+    cls.add_method('GetTidInfo', 
                    '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', 
+    ## ctrl-headers.h (module 'wifi'): static ns3::TypeId ns3::CtrlBAckRequestHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsBasic() const [member function]
+    cls.add_method('IsBasic', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultTxPowerLevel() const [member function]
-    cls.add_method('GetDefaultTxPowerLevel', 
-                   'uint8_t', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsCompressed() const [member function]
+    cls.add_method('IsCompressed', 
+                   'bool', 
                    [], 
                    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', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentSize(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
-    cls.add_method('GetFragmentSize', 
-                   'uint32_t', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentationThreshold() const [member function]
-    cls.add_method('GetFragmentationThreshold', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsMultiTid() const [member function]
+    cls.add_method('IsMultiTid', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::MustSendHtImmediateAck() const [member function]
+    cls.add_method('MustSendHtImmediateAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetHtImmediateAck(bool immediateAck) [member function]
+    cls.add_method('SetHtImmediateAck', 
+                   'void', 
+                   [param('bool', 'immediateAck')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetStartingSequence(uint16_t seq) [member function]
+    cls.add_method('SetStartingSequence', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetTidInfo(uint8_t tid) [member function]
+    cls.add_method('SetTidInfo', 
+                   'void', 
+                   [param('uint8_t', 'tid')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetType(ns3::BlockAckType type) [member function]
+    cls.add_method('SetType', 
+                   'void', 
+                   [param('ns3::BlockAckType', 'type')])
+    return
+
+def register_Ns3CtrlBAckResponseHeader_methods(root_module, cls):
+    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader(ns3::CtrlBAckResponseHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CtrlBAckResponseHeader const &', 'arg0')])
+    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader() [constructor]
+    cls.add_constructor([])
+    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckResponseHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
                    'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint16_t const * ns3::CtrlBAckResponseHeader::GetBitmap() const [member function]
+    cls.add_method('GetBitmap', 
+                   'uint16_t const *', 
                    [], 
                    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', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetMaxSlrc() const [member function]
-    cls.add_method('GetMaxSlrc', 
-                   'uint32_t', 
+    ## ctrl-headers.h (module 'wifi'): uint64_t ns3::CtrlBAckResponseHeader::GetCompressedBitmap() const [member function]
+    cls.add_method('GetCompressedBitmap', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetMaxSsrc() const [member function]
-    cls.add_method('GetMaxSsrc', 
-                   'uint32_t', 
+    ## ctrl-headers.h (module 'wifi'): ns3::TypeId ns3::CtrlBAckResponseHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicMcs() const [member function]
-    cls.add_method('GetNBasicMcs', 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckResponseHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
                    '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', 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequence() const [member function]
+    cls.add_method('GetStartingSequence', 
+                   'uint16_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonUnicastMode() const [member function]
-    cls.add_method('GetNonUnicastMode', 
-                   'ns3::WifiMode', 
+    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequenceControl() const [member function]
+    cls.add_method('GetStartingSequenceControl', 
+                   'uint16_t', 
                    [], 
                    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', 
+    ## ctrl-headers.h (module 'wifi'): uint8_t ns3::CtrlBAckResponseHeader::GetTidInfo() const [member function]
+    cls.add_method('GetTidInfo', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
-    ## 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]
+    ## ctrl-headers.h (module 'wifi'): static ns3::TypeId ns3::CtrlBAckResponseHeader::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', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsBasic() const [member function]
+    cls.add_method('IsBasic', 
                    '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', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsCompressed() const [member function]
+    cls.add_method('IsCompressed', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address')], 
+                   [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsBrandNew(ns3::Mac48Address address) const [member function]
-    cls.add_method('IsBrandNew', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsFragmentReceived(uint16_t seq, uint8_t frag) const [member function]
+    cls.add_method('IsFragmentReceived', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address')], 
+                   [param('uint16_t', 'seq'), param('uint8_t', 'frag')], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsLastFragment(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
-    cls.add_method('IsLastFragment', 
-                   'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsWaitAssocTxOk(ns3::Mac48Address address) const [member function]
-    cls.add_method('IsWaitAssocTxOk', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsMultiTid() const [member function]
+    cls.add_method('IsMultiTid', 
                    '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', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedFragmentation(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NeedFragmentation', 
-                   'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NeedRts', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsPacketReceived(uint16_t seq) const [member function]
+    cls.add_method('IsPacketReceived', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRtsRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NeedRtsRetransmission', 
+                   [param('uint16_t', 'seq')], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::MustSendHtImmediateAck() const [member function]
+    cls.add_method('MustSendHtImmediateAck', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
-    cls.add_method('PrepareForQueue', 
-                   'void', 
-                   [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'): void ns3::WifiRemoteStationManager::RecordDisassociated(ns3::Mac48Address address) [member function]
-    cls.add_method('RecordDisassociated', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordGotAssocTxFailed(ns3::Mac48Address address) [member function]
-    cls.add_method('RecordGotAssocTxFailed', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordGotAssocTxOk(ns3::Mac48Address address) [member function]
-    cls.add_method('RecordGotAssocTxOk', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordWaitAssocTxOk(ns3::Mac48Address address) [member function]
-    cls.add_method('RecordWaitAssocTxOk', 
+                   [], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
-    cls.add_method('ReportDataFailed', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::ResetBitmap() [member function]
+    cls.add_method('ResetBitmap', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
-    cls.add_method('ReportDataOk', 
+                   [])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportFinalDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
-    cls.add_method('ReportFinalDataFailed', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetHtImmediateAck(bool immediateAck) [member function]
+    cls.add_method('SetHtImmediateAck', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportFinalRtsFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
-    cls.add_method('ReportFinalRtsFailed', 
+                   [param('bool', 'immediateAck')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetReceivedFragment(uint16_t seq, uint8_t frag) [member function]
+    cls.add_method('SetReceivedFragment', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRtsFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
-    cls.add_method('ReportRtsFailed', 
+                   [param('uint16_t', 'seq'), param('uint8_t', 'frag')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetReceivedPacket(uint16_t seq) [member function]
+    cls.add_method('SetReceivedPacket', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRtsOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
-    cls.add_method('ReportRtsOk', 
+                   [param('uint16_t', 'seq')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetStartingSequence(uint16_t seq) [member function]
+    cls.add_method('SetStartingSequence', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRxOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double rxSnr, ns3::WifiMode txMode) [member function]
-    cls.add_method('ReportRxOk', 
+                   [param('uint16_t', 'seq')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetStartingSequenceControl(uint16_t seqControl) [member function]
+    cls.add_method('SetStartingSequenceControl', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::Reset() [member function]
-    cls.add_method('Reset', 
+                   [param('uint16_t', 'seqControl')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetTidInfo(uint8_t tid) [member function]
+    cls.add_method('SetTidInfo', 
                    'void', 
-                   [])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::Reset(ns3::Mac48Address address) [member function]
-    cls.add_method('Reset', 
+                   [param('uint8_t', 'tid')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetType(ns3::BlockAckType type) [member function]
+    cls.add_method('SetType', 
                    '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', 
+                   [param('ns3::BlockAckType', 'type')])
+    return
+
+def register_Ns3Dcf_methods(root_module, cls):
+    ## dcf.h (module 'wifi'): ns3::Dcf::Dcf() [constructor]
+    cls.add_constructor([])
+    ## dcf.h (module 'wifi'): ns3::Dcf::Dcf(ns3::Dcf const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Dcf const &', 'arg0')])
+    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetAifsn() const [member function]
+    cls.add_method('GetAifsn', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetMaxCw() const [member function]
+    cls.add_method('GetMaxCw', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetMinCw() const [member function]
+    cls.add_method('GetMinCw', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetAifsn(uint32_t aifsn) [member function]
+    cls.add_method('SetAifsn', 
                    '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', 
+                   [param('uint32_t', 'aifsn')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetMaxCw(uint32_t maxCw) [member function]
+    cls.add_method('SetMaxCw', 
                    'void', 
-                   [param('uint32_t', 'threshold')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
-    cls.add_method('SetHtSupported', 
+                   [param('uint32_t', 'maxCw')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetMinCw(uint32_t minCw) [member function]
+    cls.add_method('SetMinCw', 
                    'void', 
-                   [param('bool', 'enable')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
-    cls.add_method('SetMaxSlrc', 
+                   [param('uint32_t', 'minCw')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3DefaultChannelScheduler_methods(root_module, cls):
+    ## default-channel-scheduler.h (module 'wave'): ns3::DefaultChannelScheduler::DefaultChannelScheduler(ns3::DefaultChannelScheduler const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DefaultChannelScheduler const &', 'arg0')])
+    ## default-channel-scheduler.h (module 'wave'): ns3::DefaultChannelScheduler::DefaultChannelScheduler() [constructor]
+    cls.add_constructor([])
+    ## default-channel-scheduler.h (module 'wave'): ns3::ChannelAccess ns3::DefaultChannelScheduler::GetAssignedAccessType(uint32_t channelNumber) const [member function]
+    cls.add_method('GetAssignedAccessType', 
+                   'ns3::ChannelAccess', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True, is_virtual=True)
+    ## default-channel-scheduler.h (module 'wave'): static ns3::TypeId ns3::DefaultChannelScheduler::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::NotifyCchSlotStart(ns3::Time duration) [member function]
+    cls.add_method('NotifyCchSlotStart', 
                    'void', 
-                   [param('uint32_t', 'maxSlrc')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSsrc(uint32_t maxSsrc) [member function]
-    cls.add_method('SetMaxSsrc', 
+                   [param('ns3::Time', 'duration')])
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::NotifyGuardSlotStart(ns3::Time duration, bool cchi) [member function]
+    cls.add_method('NotifyGuardSlotStart', 
                    'void', 
-                   [param('uint32_t', 'maxSsrc')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetRtsCtsThreshold(uint32_t threshold) [member function]
-    cls.add_method('SetRtsCtsThreshold', 
+                   [param('ns3::Time', 'duration'), param('bool', 'cchi')])
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::NotifySchSlotStart(ns3::Time duration) [member function]
+    cls.add_method('NotifySchSlotStart', 
                    'void', 
-                   [param('uint32_t', 'threshold')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
-    cls.add_method('SetupPhy', 
+                   [param('ns3::Time', 'duration')])
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::SetWaveNetDevice(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('SetWaveNetDevice', 
                    'void', 
-                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')], 
                    is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   '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', 
-                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
-                   is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::WifiRemoteStationManager::DoCreateStation() const [member function]
-    cls.add_method('DoCreateStation', 
-                   'ns3::WifiRemoteStation *', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## 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', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::AssignAlternatingAccess(uint32_t channelNumber, bool immediate) [member function]
+    cls.add_method('AssignAlternatingAccess', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   [param('uint32_t', 'channelNumber'), param('bool', 'immediate')], 
                    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', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::AssignContinuousAccess(uint32_t channelNumber, bool immediate) [member function]
+    cls.add_method('AssignContinuousAccess', 
                    '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')], 
+                   [param('uint32_t', 'channelNumber'), param('bool', 'immediate')], 
                    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', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::AssignDefaultCchAccess() [member function]
+    cls.add_method('AssignDefaultCchAccess', 
                    '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', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::AssignExtendedAccess(uint32_t channelNumber, uint32_t extends, bool immediate) [member function]
+    cls.add_method('AssignExtendedAccess', 
                    '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')], 
+                   [param('uint32_t', 'channelNumber'), param('uint32_t', 'extends'), param('bool', 'immediate')], 
                    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')], 
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
                    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::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]
-    cls.add_method('DoNeedDataRetransmission', 
-                   'bool', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
                    visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedFragmentation(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
-    cls.add_method('DoNeedFragmentation', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::ReleaseAccess(uint32_t channelNumber) [member function]
+    cls.add_method('ReleaseAccess', 
                    'bool', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   [param('uint32_t', 'channelNumber')], 
                    visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedRts(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
-    cls.add_method('DoNeedRts', 
+    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', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable::DeterministicRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::DeterministicRandomVariable::SetValueArray(double * values, uint64_t length) [member function]
+    cls.add_method('SetValueArray', 
+                   'void', 
+                   [param('double *', 'values'), param('uint64_t', 'length')])
+    ## random-variable-stream.h (module 'core'): double ns3::DeterministicRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::DeterministicRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3EdcaTxopN_methods(root_module, cls):
+    ## edca-txop-n.h (module 'wifi'): static ns3::TypeId ns3::EdcaTxopN::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::EdcaTxopN() [constructor]
+    cls.add_constructor([])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetLow(ns3::Ptr<ns3::MacLow> low) [member function]
+    cls.add_method('SetLow', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MacLow >', 'low')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
+    cls.add_method('SetTxMiddle', 
+                   'void', 
+                   [param('ns3::MacTxMiddle *', 'txMiddle')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetManager(ns3::DcfManager * manager) [member function]
+    cls.add_method('SetManager', 
+                   'void', 
+                   [param('ns3::DcfManager *', 'manager')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxFailedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> remoteManager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'remoteManager')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTypeOfStation(ns3::TypeOfStation type) [member function]
+    cls.add_method('SetTypeOfStation', 
+                   'void', 
+                   [param('ns3::TypeOfStation', 'type')])
+    ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation ns3::EdcaTxopN::GetTypeOfStation() const [member function]
+    cls.add_method('GetTypeOfStation', 
+                   'ns3::TypeOfStation', 
+                   [], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetEdcaQueue() const [member function]
+    cls.add_method('GetEdcaQueue', 
+                   'ns3::Ptr< ns3::WifiMacQueue >', 
+                   [], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMinCw(uint32_t minCw) [member function]
+    cls.add_method('SetMinCw', 
+                   'void', 
+                   [param('uint32_t', 'minCw')], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMaxCw(uint32_t maxCw) [member function]
+    cls.add_method('SetMaxCw', 
+                   'void', 
+                   [param('uint32_t', 'maxCw')], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAifsn(uint32_t aifsn) [member function]
+    cls.add_method('SetAifsn', 
+                   'void', 
+                   [param('uint32_t', 'aifsn')], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
+    cls.add_method('GetMinCw', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMaxCw() const [member function]
+    cls.add_method('GetMaxCw', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetAifsn() const [member function]
+    cls.add_method('GetAifsn', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
+    cls.add_method('Low', 
+                   'ns3::Ptr< ns3::MacLow >', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MsduAggregator> ns3::EdcaTxopN::GetMsduAggregator() const [member function]
+    cls.add_method('GetMsduAggregator', 
+                   'ns3::Ptr< ns3::MsduAggregator >', 
+                   [], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBaAgreementExists', 
                    'bool', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
-                   visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedRtsRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
-    cls.add_method('DoNeedRtsRetransmission', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPacketsInBa', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteAmpduTransfer(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduTransfer', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedsAccess() const [member function]
+    cls.add_method('NeedsAccess', 
                    'bool', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
-                   visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoReportDataFailed', 
+                   [], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyAccessGranted() [member function]
+    cls.add_method('NotifyAccessGranted', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
-    cls.add_method('DoReportDataOk', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyInternalCollision() [member function]
+    cls.add_method('NotifyInternalCollision', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoReportFinalDataFailed', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyCollision() [member function]
+    cls.add_method('NotifyCollision', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoReportFinalRtsFailed', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyChannelSwitching() [member function]
+    cls.add_method('NotifyChannelSwitching', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoReportRtsFailed', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifySleep() [member function]
+    cls.add_method('NotifySleep', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
-    cls.add_method('DoReportRtsOk', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyWakeUp() [member function]
+    cls.add_method('NotifyWakeUp', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
-    cls.add_method('DoReportRxOk', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotCts(double snr, ns3::WifiMode txMode) [member function]
+    cls.add_method('GotCts', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsLowLatency() const [member function]
-    cls.add_method('IsLowLatency', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', 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', 
+                   [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedCts() [member function]
+    cls.add_method('MissedCts', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAck(double snr, ns3::WifiMode txMode) [member function]
+    cls.add_method('GotAck', 
+                   'void', 
+                   [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
+    cls.add_method('GotBlockAck', 
+                   'void', 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
+    cls.add_method('MissedBlockAck', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAddBaResponse(ns3::MgtAddBaResponseHeader const * respHdr, ns3::Mac48Address recipient) [member function]
+    cls.add_method('GotAddBaResponse', 
+                   'void', 
+                   [param('ns3::MgtAddBaResponseHeader const *', 'respHdr'), param('ns3::Mac48Address', 'recipient')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotDelBaFrame(ns3::MgtDelBaHeader const * delBaHdr, ns3::Mac48Address recipient) [member function]
+    cls.add_method('GotDelBaFrame', 
+                   'void', 
+                   [param('ns3::MgtDelBaHeader const *', 'delBaHdr'), param('ns3::Mac48Address', 'recipient')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedAck() [member function]
+    cls.add_method('MissedAck', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
+    cls.add_method('StartNext', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::EndTxNoAck() [member function]
+    cls.add_method('EndTxNoAck', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RestartAccessIfNeeded() [member function]
+    cls.add_method('RestartAccessIfNeeded', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartAccessIfNeeded() [member function]
+    cls.add_method('StartAccessIfNeeded', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRts() [member function]
+    cls.add_method('NeedRts', 
                    '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', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
+    cls.add_method('NeedRtsRetransmission', 
                    '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', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
+    cls.add_method('NeedDataRetransmission', 
                    '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', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
+    cls.add_method('NeedBarRetransmission', 
                    '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', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedFragmentation() const [member function]
+    cls.add_method('NeedFragmentation', 
                    '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', 
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNextFragmentSize() [member function]
+    cls.add_method('GetNextFragmentSize', 
+                   'uint32_t', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetFragmentSize() [member function]
+    cls.add_method('GetFragmentSize', 
+                   'uint32_t', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetFragmentOffset() [member function]
+    cls.add_method('GetFragmentOffset', 
+                   'uint32_t', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::IsLastFragment() const [member function]
+    cls.add_method('IsLastFragment', 
+                   'bool', 
                    [], 
-                   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_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NextFragment() [member function]
+    cls.add_method('NextFragment', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet> ns3::EdcaTxopN::GetFragmentPacket(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetFragmentPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAccessCategory(ns3::AcIndex ac) [member function]
+    cls.add_method('SetAccessCategory', 
+                   'void', 
+                   [param('ns3::AcIndex', 'ac')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('Queue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMsduAggregator(ns3::Ptr<ns3::MsduAggregator> aggr) [member function]
+    cls.add_method('SetMsduAggregator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MsduAggregator >', 'aggr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('PushFront', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteConfig() [member function]
+    cls.add_method('CompleteConfig', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetBlockAckThreshold(uint8_t threshold) [member function]
+    cls.add_method('SetBlockAckThreshold', 
+                   'void', 
+                   [param('uint8_t', 'threshold')])
+    ## edca-txop-n.h (module 'wifi'): uint8_t ns3::EdcaTxopN::GetBlockAckThreshold() const [member function]
+    cls.add_method('GetBlockAckThreshold', 
+                   'uint8_t', 
                    [], 
-                   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', 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetBlockAckInactivityTimeout(uint16_t timeout) [member function]
+    cls.add_method('SetBlockAckInactivityTimeout', 
+                   'void', 
+                   [param('uint16_t', 'timeout')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SendDelbaFrame(ns3::Mac48Address addr, uint8_t tid, bool byOriginator) [member function]
+    cls.add_method('SendDelbaFrame', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'addr'), param('uint8_t', 'tid'), param('bool', 'byOriginator')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist() [member function]
+    cls.add_method('GetAmpduExist', 
                    'bool', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(bool ampdu) [member function]
+    cls.add_method('SetAmpduExist', 
+                   'void', 
+                   [param('bool', 'ampdu')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RemoveRetransmitPacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveRetransmitPacket', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::EdcaTxopN::PeekNextRetransmitPacket(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextRetransmitPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxOk(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxOk', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxFailed(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxFailed', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): int64_t ns3::EdcaTxopN::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   visibility='private', 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]
+def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [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 >', 
+    ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::CDF(double v, double c) [member function]
+    cls.add_method('CDF', 
+                   'void', 
+                   [param('double', 'v'), param('double', 'c')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::EmpiricalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   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)
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::EmpiricalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    cls.add_method('Interpolate', 
+                   'double', 
+                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   visibility='private', is_virtual=True)
+    ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
+    cls.add_method('Validate', 
+                   'void', 
+                   [], 
+                   visibility='private', 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]
+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([])
-    ## 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]
+    ## 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, is_virtual=True)
-    ## callback.h (module 'core'): bool ns3::CallbackValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+                   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')], 
-                   is_virtual=True)
-    ## callback.h (module 'core'): std::string ns3::CallbackValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+                   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, 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')])
+                   is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3CtrlBAckRequestHeader_methods(root_module, cls):
-    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader(ns3::CtrlBAckRequestHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CtrlBAckRequestHeader const &', 'arg0')])
-    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader() [constructor]
-    cls.add_constructor([])
-    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckRequestHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): ns3::TypeId ns3::CtrlBAckRequestHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
+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', 
                    'ns3::TypeId', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckRequestHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable::ErlangRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetK() const [member function]
+    cls.add_method('GetK', 
                    'uint32_t', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckRequestHeader::GetStartingSequence() const [member function]
-    cls.add_method('GetStartingSequence', 
-                   'uint16_t', 
-                   [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckRequestHeader::GetStartingSequenceControl() const [member function]
-    cls.add_method('GetStartingSequenceControl', 
-                   'uint16_t', 
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetLambda() const [member function]
+    cls.add_method('GetLambda', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): uint8_t ns3::CtrlBAckRequestHeader::GetTidInfo() const [member function]
-    cls.add_method('GetTidInfo', 
-                   'uint8_t', 
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetValue(uint32_t k, double lambda) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('uint32_t', 'k'), param('double', 'lambda')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetInteger(uint32_t k, uint32_t lambda) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'k'), param('uint32_t', 'lambda')])
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True)
-    ## ctrl-headers.h (module 'wifi'): static ns3::TypeId ns3::CtrlBAckRequestHeader::GetTypeId() [member function]
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_Ns3ExponentialRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ExponentialRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsBasic() const [member function]
-    cls.add_method('IsBasic', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable::ExponentialRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsCompressed() const [member function]
-    cls.add_method('IsCompressed', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsMultiTid() const [member function]
-    cls.add_method('IsMultiTid', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetValue(double mean, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ExponentialRandomVariable::GetInteger(uint32_t mean, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::MustSendHtImmediateAck() const [member function]
-    cls.add_method('MustSendHtImmediateAck', 
-                   'bool', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ExponentialRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3ExtendedSupportedRatesIE_methods(root_module, cls):
+    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::ExtendedSupportedRatesIE const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ExtendedSupportedRatesIE const &', 'arg0')])
+    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE() [constructor]
+    cls.add_constructor([])
+    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::SupportedRates * rates) [constructor]
+    cls.add_constructor([param('ns3::SupportedRates *', 'rates')])
+    ## supported-rates.h (module 'wifi'): uint8_t ns3::ExtendedSupportedRatesIE::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)
+    ## supported-rates.h (module 'wifi'): ns3::WifiInformationElementId ns3::ExtendedSupportedRatesIE::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
                    [], 
-                   is_const=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## supported-rates.h (module 'wifi'): uint8_t ns3::ExtendedSupportedRatesIE::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## supported-rates.h (module 'wifi'): uint16_t ns3::ExtendedSupportedRatesIE::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## supported-rates.h (module 'wifi'): ns3::Buffer::Iterator ns3::ExtendedSupportedRatesIE::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetHtImmediateAck(bool immediateAck) [member function]
-    cls.add_method('SetHtImmediateAck', 
-                   'void', 
-                   [param('bool', 'immediateAck')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetStartingSequence(uint16_t seq) [member function]
-    cls.add_method('SetStartingSequence', 
-                   'void', 
-                   [param('uint16_t', 'seq')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetTidInfo(uint8_t tid) [member function]
-    cls.add_method('SetTidInfo', 
-                   'void', 
-                   [param('uint8_t', 'tid')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetType(ns3::BlockAckType type) [member function]
-    cls.add_method('SetType', 
+    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SetSupportedRates(ns3::SupportedRates * rates) [member function]
+    cls.add_method('SetSupportedRates', 
                    'void', 
-                   [param('ns3::BlockAckType', 'type')])
+                   [param('ns3::SupportedRates *', 'rates')])
     return
 
-def register_Ns3CtrlBAckResponseHeader_methods(root_module, cls):
-    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader(ns3::CtrlBAckResponseHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CtrlBAckResponseHeader const &', 'arg0')])
-    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader() [constructor]
+def register_Ns3GammaRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::GammaRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable::GammaRandomVariable() [constructor]
     cls.add_constructor([])
-    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckResponseHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): uint16_t const * ns3::CtrlBAckResponseHeader::GetBitmap() const [member function]
-    cls.add_method('GetBitmap', 
-                   'uint16_t const *', 
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): uint64_t ns3::CtrlBAckResponseHeader::GetCompressedBitmap() const [member function]
-    cls.add_method('GetCompressedBitmap', 
-                   'uint64_t', 
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetBeta() const [member function]
+    cls.add_method('GetBeta', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): ns3::TypeId ns3::CtrlBAckResponseHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetValue(double alpha, double beta) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'alpha'), param('double', 'beta')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::GammaRandomVariable::GetInteger(uint32_t alpha, uint32_t beta) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'alpha'), param('uint32_t', 'beta')])
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckResponseHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::GammaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
                    'uint32_t', 
                    [], 
+                   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)
-    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequence() const [member function]
-    cls.add_method('GetStartingSequence', 
-                   'uint16_t', 
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAmpduParameters() const [member function]
+    cls.add_method('GetAmpduParameters', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequenceControl() const [member function]
-    cls.add_method('GetStartingSequenceControl', 
+    ## 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)
-    ## ctrl-headers.h (module 'wifi'): uint8_t ns3::CtrlBAckResponseHeader::GetTidInfo() const [member function]
-    cls.add_method('GetTidInfo', 
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
                    'uint8_t', 
                    [], 
-                   is_const=True)
-    ## ctrl-headers.h (module 'wifi'): static ns3::TypeId ns3::CtrlBAckResponseHeader::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   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_static=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsBasic() const [member function]
-    cls.add_method('IsBasic', 
-                   'bool', 
+                   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)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsCompressed() const [member function]
-    cls.add_method('IsCompressed', 
-                   'bool', 
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval20() const [member function]
+    cls.add_method('GetShortGuardInterval20', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsFragmentReceived(uint16_t seq, uint8_t frag) const [member function]
-    cls.add_method('IsFragmentReceived', 
-                   'bool', 
-                   [param('uint16_t', 'seq'), param('uint8_t', 'frag')], 
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
+    cls.add_method('GetSupportedChannelWidth', 
+                   'uint8_t', 
+                   [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsMultiTid() const [member function]
-    cls.add_method('IsMultiTid', 
-                   'bool', 
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
+    cls.add_method('GetSupportedMcsSet1', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsPacketReceived(uint16_t seq) const [member function]
-    cls.add_method('IsPacketReceived', 
-                   'bool', 
-                   [param('uint16_t', 'seq')], 
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
+    cls.add_method('GetSupportedMcsSet2', 
+                   'uint64_t', 
+                   [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::MustSendHtImmediateAck() const [member function]
-    cls.add_method('MustSendHtImmediateAck', 
+    ## 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)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
+                   [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::ResetBitmap() [member function]
-    cls.add_method('ResetBitmap', 
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAmpduParameters(uint8_t ctrl) [member function]
+    cls.add_method('SetAmpduParameters', 
                    'void', 
-                   [])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
+    cls.add_method('SetGreenfield', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetHtImmediateAck(bool immediateAck) [member function]
-    cls.add_method('SetHtImmediateAck', 
+                   [param('uint8_t', 'greenfield')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
+    cls.add_method('SetHtCapabilitiesInfo', 
                    'void', 
-                   [param('bool', 'immediateAck')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetReceivedFragment(uint16_t seq, uint8_t frag) [member function]
-    cls.add_method('SetReceivedFragment', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('uint16_t', 'seq'), param('uint8_t', 'frag')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetReceivedPacket(uint16_t seq) [member function]
-    cls.add_method('SetReceivedPacket', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
+    cls.add_method('SetLdpc', 
                    'void', 
-                   [param('uint16_t', 'seq')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetStartingSequence(uint16_t seq) [member function]
-    cls.add_method('SetStartingSequence', 
+                   [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
                    'void', 
-                   [param('uint16_t', 'seq')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetStartingSequenceControl(uint16_t seqControl) [member function]
-    cls.add_method('SetStartingSequenceControl', 
+                   [param('uint8_t', 'index')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval20', 
                    'void', 
-                   [param('uint16_t', 'seqControl')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetTidInfo(uint8_t tid) [member function]
-    cls.add_method('SetTidInfo', 
+                   [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', 'tid')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetType(ns3::BlockAckType type) [member function]
-    cls.add_method('SetType', 
+                   [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('ns3::BlockAckType', 'type')])
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
     return
 
-def register_Ns3Dcf_methods(root_module, cls):
-    ## dcf.h (module 'wifi'): ns3::Dcf::Dcf() [constructor]
+def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
     cls.add_constructor([])
-    ## dcf.h (module 'wifi'): ns3::Dcf::Dcf(ns3::Dcf const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Dcf const &', 'arg0')])
-    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetAifsn() const [member function]
-    cls.add_method('GetAifsn', 
+    ## 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_Ns3Ipv4_methods(root_module, cls):
+    ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
+    ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4() [constructor]
+    cls.add_constructor([])
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::AddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
                    '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', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetMaxCw() const [member function]
-    cls.add_method('GetMaxCw', 
+    ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForAddress(ns3::Ipv4Address address) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForPrefix(ns3::Ipv4Address address, ns3::Ipv4Mask mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv4Address', 'address'), param('ns3::Ipv4Mask', 'mask')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint16_t ns3::Ipv4::GetMetric(uint32_t interface) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint16_t ns3::Ipv4::GetMtu(uint32_t interface) const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
+                   'uint32_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetMinCw() const [member function]
-    cls.add_method('GetMinCw', 
-                   'uint32_t', 
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4::GetNetDevice(uint32_t interface) [member function]
+    cls.add_method('GetNetDevice', 
+                   '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 >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
+    ## ipv4.h (module 'internet'): static ns3::TypeId ns3::Ipv4::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dcf.h (module 'wifi'): void ns3::Dcf::SetAifsn(uint32_t aifsn) [member function]
-    cls.add_method('SetAifsn', 
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
                    'void', 
-                   [param('uint32_t', 'aifsn')], 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): void ns3::Dcf::SetMaxCw(uint32_t maxCw) [member function]
-    cls.add_method('SetMaxCw', 
-                   'void', 
-                   [param('uint32_t', 'maxCw')], 
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+    cls.add_method('IsDestinationAddress', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsForwarding(uint32_t interface) const [member function]
+    cls.add_method('IsForwarding', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsUp(uint32_t interface) const [member function]
+    cls.add_method('IsUp', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): void ns3::Dcf::SetMinCw(uint32_t minCw) [member function]
-    cls.add_method('SetMinCw', 
+    ## 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', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device'), param('ns3::Ipv4Address', 'dst'), param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('Send', 
                    'void', 
-                   [param('uint32_t', 'minCw')], 
+                   [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)
-    return
-
-def register_Ns3EdcaTxopN_methods(root_module, cls):
-    ## edca-txop-n.h (module 'wifi'): static ns3::TypeId ns3::EdcaTxopN::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::EdcaTxopN() [constructor]
-    cls.add_constructor([])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoDispose() [member function]
-    cls.add_method('DoDispose', 
+    ## 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', 
-                   [], 
-                   is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetLow(ns3::Ptr<ns3::MacLow> low) [member function]
-    cls.add_method('SetLow', 
+                   [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', 
-                   [param('ns3::Ptr< ns3::MacLow >', 'low')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
-    cls.add_method('SetTxMiddle', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetForwarding(uint32_t interface, bool val) [member function]
+    cls.add_method('SetForwarding', 
                    'void', 
-                   [param('ns3::MacTxMiddle *', 'txMiddle')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetManager(ns3::DcfManager * manager) [member function]
-    cls.add_method('SetManager', 
+                   [param('uint32_t', 'interface'), param('bool', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetMetric(uint32_t interface, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
                    'void', 
-                   [param('ns3::DcfManager *', 'manager')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetTxOkCallback', 
+                   [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetTxFailedCallback', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetUp(uint32_t interface) [member function]
+    cls.add_method('SetUp', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> remoteManager) [member function]
-    cls.add_method('SetWifiRemoteStationManager', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
+    cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetWeakEsModel() const [member function]
+    cls.add_method('GetWeakEsModel', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
                    'void', 
-                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'remoteManager')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTypeOfStation(ns3::TypeOfStation type) [member function]
-    cls.add_method('SetTypeOfStation', 
+                   [param('bool', 'forward')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetWeakEsModel(bool model) [member function]
+    cls.add_method('SetWeakEsModel', 
                    'void', 
-                   [param('ns3::TypeOfStation', 'type')])
-    ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation ns3::EdcaTxopN::GetTypeOfStation() const [member function]
-    cls.add_method('GetTypeOfStation', 
-                   'ns3::TypeOfStation', 
+                   [param('bool', 'model')], 
+                   is_pure_virtual=True, visibility='private', 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]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetQueue() const [member function]
-    cls.add_method('GetQueue', 
-                   'ns3::Ptr< ns3::WifiMacQueue >', 
+                   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)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMinCw(uint32_t minCw) [member function]
-    cls.add_method('SetMinCw', 
+    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4AddressValue::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::Ipv4AddressValue::Set(ns3::Ipv4Address const & value) [member function]
+    cls.add_method('Set', 
                    'void', 
-                   [param('uint32_t', 'minCw')], 
+                   [param('ns3::Ipv4Address const &', 'value')])
+    return
+
+def register_Ns3Ipv4L3Protocol_methods(root_module, cls):
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::Ipv4L3Protocol() [constructor]
+    cls.add_constructor([])
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::AddAddress(uint32_t i, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv4InterfaceAddress', 'address')], 
                    is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMaxCw(uint32_t maxCw) [member function]
-    cls.add_method('SetMaxCw', 
-                   'void', 
-                   [param('uint32_t', 'maxCw')], 
+    ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAifsn(uint32_t aifsn) [member function]
-    cls.add_method('SetAifsn', 
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv4L3Protocol::CreateRawSocket() [member function]
+    cls.add_method('CreateRawSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+    cls.add_method('DeleteRawSocket', 
                    'void', 
-                   [param('uint32_t', 'aifsn')], 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket')], 
                    is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
-    cls.add_method('GetMinCw', 
-                   'uint32_t', 
-                   [], 
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4L3Protocol::GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_const=True, is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMaxCw() const [member function]
-    cls.add_method('GetMaxCw', 
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4Interface> ns3::Ipv4L3Protocol::GetInterface(uint32_t i) const [member function]
+    cls.add_method('GetInterface', 
+                   'ns3::Ptr< ns3::Ipv4Interface >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForAddress(ns3::Ipv4Address addr) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv4Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForPrefix(ns3::Ipv4Address addr, ns3::Ipv4Mask mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv4Address', 'addr'), param('ns3::Ipv4Mask', 'mask')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv4L3Protocol::GetMetric(uint32_t i) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv4L3Protocol::GetMtu(uint32_t i) const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
                    'uint32_t', 
-                   [], 
+                   [param('uint32_t', 'interface')], 
                    is_const=True, is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetAifsn() const [member function]
-    cls.add_method('GetAifsn', 
+    ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
-    cls.add_method('Low', 
-                   'ns3::Ptr< ns3::MacLow >', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MsduAggregator> ns3::EdcaTxopN::GetMsduAggregator() const [member function]
-    cls.add_method('GetMsduAggregator', 
-                   'ns3::Ptr< ns3::MsduAggregator >', 
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4L3Protocol::GetNetDevice(uint32_t i) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedsAccess() const [member function]
-    cls.add_method('NeedsAccess', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4L3Protocol::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyAccessGranted() [member function]
-    cls.add_method('NotifyAccessGranted', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyInternalCollision() [member function]
-    cls.add_method('NotifyInternalCollision', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyCollision() [member function]
-    cls.add_method('NotifyCollision', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyChannelSwitching() [member function]
-    cls.add_method('NotifyChannelSwitching', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotCts(double snr, ns3::WifiMode txMode) [member function]
-    cls.add_method('GotCts', 
-                   'void', 
-                   [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedCts() [member function]
-    cls.add_method('MissedCts', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAck(double snr, ns3::WifiMode txMode) [member function]
-    cls.add_method('GotAck', 
-                   'void', 
-                   [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
-    cls.add_method('GotBlockAck', 
-                   'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
-    cls.add_method('MissedBlockAck', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAddBaResponse(ns3::MgtAddBaResponseHeader const * respHdr, ns3::Mac48Address recipient) [member function]
-    cls.add_method('GotAddBaResponse', 
-                   'void', 
-                   [param('ns3::MgtAddBaResponseHeader const *', 'respHdr'), param('ns3::Mac48Address', 'recipient')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotDelBaFrame(ns3::MgtDelBaHeader const * delBaHdr, ns3::Mac48Address recipient) [member function]
-    cls.add_method('GotDelBaFrame', 
-                   'void', 
-                   [param('ns3::MgtDelBaHeader const *', 'delBaHdr'), param('ns3::Mac48Address', 'recipient')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedAck() [member function]
-    cls.add_method('MissedAck', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
-    cls.add_method('StartNext', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::EndTxNoAck() [member function]
-    cls.add_method('EndTxNoAck', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RestartAccessIfNeeded() [member function]
-    cls.add_method('RestartAccessIfNeeded', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartAccessIfNeeded() [member function]
-    cls.add_method('StartAccessIfNeeded', 
+                   is_static=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
                    'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRts() [member function]
-    cls.add_method('NeedRts', 
-                   'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
-    cls.add_method('NeedRtsRetransmission', 
-                   'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
-    cls.add_method('NeedDataRetransmission', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+    cls.add_method('IsDestinationAddress', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedFragmentation() const [member function]
-    cls.add_method('NeedFragmentation', 
+                   [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsForwarding(uint32_t i) const [member function]
+    cls.add_method('IsForwarding', 
                    'bool', 
-                   [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNextFragmentSize() [member function]
-    cls.add_method('GetNextFragmentSize', 
-                   'uint32_t', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetFragmentSize() [member function]
-    cls.add_method('GetFragmentSize', 
-                   'uint32_t', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetFragmentOffset() [member function]
-    cls.add_method('GetFragmentOffset', 
-                   'uint32_t', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::IsLastFragment() const [member function]
-    cls.add_method('IsLastFragment', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUnicast(ns3::Ipv4Address ad) const [member function]
+    cls.add_method('IsUnicast', 
                    'bool', 
-                   [], 
+                   [param('ns3::Ipv4Address', 'ad')], 
                    is_const=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NextFragment() [member function]
-    cls.add_method('NextFragment', 
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUp(uint32_t i) const [member function]
+    cls.add_method('IsUp', 
+                   '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<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', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet> ns3::EdcaTxopN::GetFragmentPacket(ns3::WifiMacHeader * hdr) [member function]
-    cls.add_method('GetFragmentPacket', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [param('ns3::WifiMacHeader *', 'hdr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAccessCategory(ns3::AcIndex ac) [member function]
-    cls.add_method('SetAccessCategory', 
+                   [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')])
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::AcIndex', 'ac')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
-    cls.add_method('Queue', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   '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', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device'), param('ns3::Ipv4Address', 'dst'), param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMsduAggregator(ns3::Ptr<ns3::MsduAggregator> aggr) [member function]
-    cls.add_method('SetMsduAggregator', 
+                   [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_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::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::MsduAggregator >', 'aggr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
-    cls.add_method('PushFront', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'ipHeader'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetDefaultTtl(uint8_t ttl) [member function]
+    cls.add_method('SetDefaultTtl', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteConfig() [member function]
-    cls.add_method('CompleteConfig', 
+                   [param('uint8_t', 'ttl')])
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetDown(uint32_t i) [member function]
+    cls.add_method('SetDown', 
                    'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetBlockAckThreshold(uint8_t threshold) [member function]
-    cls.add_method('SetBlockAckThreshold', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetForwarding(uint32_t i, bool val) [member function]
+    cls.add_method('SetForwarding', 
                    'void', 
-                   [param('uint8_t', 'threshold')])
-    ## edca-txop-n.h (module 'wifi'): uint8_t ns3::EdcaTxopN::GetBlockAckThreshold() const [member function]
-    cls.add_method('GetBlockAckThreshold', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetBlockAckInactivityTimeout(uint16_t timeout) [member function]
-    cls.add_method('SetBlockAckInactivityTimeout', 
+                   [param('uint32_t', 'i'), param('bool', 'val')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
                    'void', 
-                   [param('uint16_t', 'timeout')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SendDelbaFrame(ns3::Mac48Address addr, uint8_t tid, bool byOriginator) [member function]
-    cls.add_method('SendDelbaFrame', 
+                   [param('uint32_t', 'i'), param('uint16_t', 'metric')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
                    'void', 
-                   [param('ns3::Mac48Address', 'addr'), param('uint8_t', 'tid'), param('bool', 'byOriginator')])
-    ## edca-txop-n.h (module 'wifi'): int64_t ns3::EdcaTxopN::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetUp(uint32_t i) [member function]
+    cls.add_method('SetUp', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
+    cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
                    'void', 
                    [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::GetWeakEsModel() const [member function]
+    cls.add_method('GetWeakEsModel', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
+                   'void', 
+                   [param('bool', 'forward')], 
+                   visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetWeakEsModel(bool model) [member function]
+    cls.add_method('SetWeakEsModel', 
+                   'void', 
+                   [param('bool', 'model')], 
                    visibility='private', 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]
+def register_Ns3Ipv4MaskChecker_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker() [constructor]
     cls.add_constructor([])
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeValue::Copy() const [member function]
+    ## 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 >', 
                    [], 
-                   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]
+                   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', 
                    '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]
+                   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, 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', 
+                   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', 
-                   [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   [param('ns3::Ipv4Mask const &', 'value')])
     return
 
-def register_Ns3ExtendedSupportedRatesIE_methods(root_module, cls):
-    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::ExtendedSupportedRatesIE const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ExtendedSupportedRatesIE const &', 'arg0')])
-    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE() [constructor]
+def register_Ns3Ipv4MulticastRoute_methods(root_module, cls):
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::Ipv4MulticastRoute(ns3::Ipv4MulticastRoute const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4MulticastRoute const &', 'arg0')])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::Ipv4MulticastRoute() [constructor]
     cls.add_constructor([])
-    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::SupportedRates * rates) [constructor]
-    cls.add_constructor([param('ns3::SupportedRates *', 'rates')])
-    ## supported-rates.h (module 'wifi'): uint8_t ns3::ExtendedSupportedRatesIE::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)
-    ## supported-rates.h (module 'wifi'): ns3::WifiInformationElementId ns3::ExtendedSupportedRatesIE::ElementId() const [member function]
-    cls.add_method('ElementId', 
-                   'ns3::WifiInformationElementId', 
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetGroup() const [member function]
+    cls.add_method('GetGroup', 
+                   'ns3::Ipv4Address', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## supported-rates.h (module 'wifi'): uint8_t ns3::ExtendedSupportedRatesIE::GetInformationFieldSize() const [member function]
-    cls.add_method('GetInformationFieldSize', 
-                   'uint8_t', 
+                   is_const=True)
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetOrigin() const [member function]
+    cls.add_method('GetOrigin', 
+                   'ns3::Ipv4Address', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## supported-rates.h (module 'wifi'): uint16_t ns3::ExtendedSupportedRatesIE::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint16_t', 
+                   is_const=True)
+    ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
+    cls.add_method('GetOutputTtlMap', 
+                   'std::map< unsigned int, unsigned int >', 
                    [], 
                    is_const=True)
-    ## supported-rates.h (module 'wifi'): ns3::Buffer::Iterator ns3::ExtendedSupportedRatesIE::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'ns3::Buffer::Iterator', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetParent() const [member function]
+    cls.add_method('GetParent', 
+                   'uint32_t', 
+                   [], 
                    is_const=True)
-    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('SerializeInformationField', 
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetGroup(ns3::Ipv4Address const group) [member function]
+    cls.add_method('SetGroup', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
+                   [param('ns3::Ipv4Address const', 'group')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetOrigin(ns3::Ipv4Address const origin) [member function]
+    cls.add_method('SetOrigin', 
+                   'void', 
+                   [param('ns3::Ipv4Address const', 'origin')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetOutputTtl(uint32_t oif, uint32_t ttl) [member function]
+    cls.add_method('SetOutputTtl', 
+                   'void', 
+                   [param('uint32_t', 'oif'), param('uint32_t', 'ttl')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetParent(uint32_t iif) [member function]
+    cls.add_method('SetParent', 
+                   'void', 
+                   [param('uint32_t', 'iif')])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::MAX_INTERFACES [variable]
+    cls.add_static_attribute('MAX_INTERFACES', 'uint32_t const', is_const=True)
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::MAX_TTL [variable]
+    cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
     return
 
-def register_Ns3HtCapabilities_methods(root_module, cls):
+def register_Ns3Ipv4Route_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]
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Route::Ipv4Route(ns3::Ipv4Route const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4Route const &', 'arg0')])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Route::Ipv4Route() [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', 
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
-    cls.add_method('GetSupportedChannelWidth', 
-                   'uint8_t', 
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetGateway() const [member function]
+    cls.add_method('GetGateway', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
-    cls.add_method('GetSupportedMcsSet1', 
-                   'uint64_t', 
+    ## ipv4-route.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4Route::GetOutputDevice() const [member function]
+    cls.add_method('GetOutputDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
-    cls.add_method('GetSupportedMcsSet2', 
-                   'uint64_t', 
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetSource() const [member function]
+    cls.add_method('GetSource', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
-    cls.add_method('IsSupportedMcs', 
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetDestination(ns3::Ipv4Address dest) [member function]
+    cls.add_method('SetDestination', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'dest')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetGateway(ns3::Ipv4Address gw) [member function]
+    cls.add_method('SetGateway', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'gw')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetOutputDevice(ns3::Ptr<ns3::NetDevice> outputDevice) [member function]
+    cls.add_method('SetOutputDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'outputDevice')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetSource(ns3::Ipv4Address src) [member function]
+    cls.add_method('SetSource', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'src')])
+    return
+
+def register_Ns3Ipv4RoutingProtocol_methods(root_module, cls):
+    ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol() [constructor]
+    cls.add_constructor([])
+    ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol(ns3::Ipv4RoutingProtocol const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4RoutingProtocol const &', 'arg0')])
+    ## ipv4-routing-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4RoutingProtocol::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   '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<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('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', 
+                   [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_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4RoutingProtocol::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_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
                    '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', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3Ipv6_methods(root_module, cls):
+    ## ipv6.h (module 'internet'): ns3::Ipv6::Ipv6(ns3::Ipv6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6 const &', 'arg0')])
+    ## ipv6.h (module 'internet'): ns3::Ipv6::Ipv6() [constructor]
+    cls.add_constructor([])
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::AddAddress(uint32_t interface, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6::GetAddress(uint32_t interface, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForPrefix(ns3::Ipv6Address address, ns3::Ipv6Prefix mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'mask')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint16_t ns3::Ipv6::GetMetric(uint32_t interface) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint16_t ns3::Ipv6::GetMtu(uint32_t interface) const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
+                   'uint32_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6::GetNetDevice(uint32_t interface) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::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)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): static ns3::TypeId ns3::Ipv6::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
+    cls.add_method('IsForwarding', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsUp(uint32_t interface) const [member function]
+    cls.add_method('IsUp', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::RegisterExtensions() [member function]
+    cls.add_method('RegisterExtensions', 
                    'void', 
-                   [param('uint8_t', 'ctrl')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
-    cls.add_method('SetGreenfield', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::RegisterOptions() [member function]
+    cls.add_method('RegisterOptions', 
                    'void', 
-                   [param('uint8_t', 'greenfield')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
-    cls.add_method('SetHtCapabilitiesInfo', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   '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', 
-                   [param('uint16_t', 'ctrl')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
-    cls.add_method('SetHtSupported', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetForwarding(uint32_t interface, bool val) [member function]
+    cls.add_method('SetForwarding', 
                    'void', 
-                   [param('uint8_t', 'htsupported')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
-    cls.add_method('SetLdpc', 
+                   [param('uint32_t', 'interface'), param('bool', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMetric(uint32_t interface, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
                    'void', 
-                   [param('uint8_t', 'ldpc')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
-    cls.add_method('SetRxMcsBitmask', 
+                   [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('uint8_t', 'index')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
-    cls.add_method('SetShortGuardInterval20', 
+                   [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', 
-                   [param('uint8_t', 'shortguardinterval')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
-    cls.add_method('SetSupportedChannelWidth', 
+                   [param('ns3::Ptr< ns3::Ipv6RoutingProtocol >', 'routingProtocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetUp(uint32_t interface) [member function]
+    cls.add_method('SetUp', 
                    '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', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6::IF_ANY [variable]
+    cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   '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('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+                   [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_Ns3HtCapabilitiesChecker_methods(root_module, cls):
-    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
+def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [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')])
+    ## 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_Ns3HtCapabilitiesValue_methods(root_module, cls):
-    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue() [constructor]
+def register_Ns3Ipv6AddressValue_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue() [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]
+    ## 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]
     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]
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6AddressValue::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]
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6AddressValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::HtCapabilities', 
+                   'ns3::Ipv6Address', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): std::string ns3::HtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6AddressValue::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]
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6AddressValue::Set(ns3::Ipv6Address const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::HtCapabilities const &', 'value')])
-    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')])
+                   [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv4AddressValue_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue() [constructor]
+def register_Ns3Ipv6L3Protocol_methods(root_module, cls):
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::PROT_NUMBER [variable]
+    cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv6L3Protocol::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::Ipv6L3Protocol() [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]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv6L3Protocol::CreateRawSocket() [member function]
+    cls.add_method('CreateRawSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+    cls.add_method('DeleteRawSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDefaultTtl(uint8_t ttl) [member function]
+    cls.add_method('SetDefaultTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDefaultTclass(uint8_t tclass) [member function]
+    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<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')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address source, ns3::Ipv6Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv6Route> route) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6RoutingProtocol >', 'routingProtocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6L3Protocol::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
                    [], 
                    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', 
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6Interface> ns3::Ipv6L3Protocol::GetInterface(uint32_t i) const [member function]
+    cls.add_method('GetInterface', 
+                   'ns3::Ptr< ns3::Ipv6Interface >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForAddress(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForPrefix(ns3::Ipv6Address addr, ns3::Ipv6Prefix mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'addr'), param('ns3::Ipv6Prefix', 'mask')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::AddAddress(uint32_t i, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
                    'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6L3Protocol::GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
+                   'uint32_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interfaceIndex, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interfaceIndex'), 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', 
+                   [param('uint32_t', 'i'), param('uint16_t', 'metric')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv6L3Protocol::GetMetric(uint32_t i) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv6L3Protocol::GetMtu(uint32_t i) const [member function]
+    cls.add_method('GetMtu', 
+                   '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', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetUp(uint32_t i) [member function]
+    cls.add_method('SetUp', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDown(uint32_t i) [member function]
+    cls.add_method('SetDown', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsForwarding(uint32_t i) const [member function]
+    cls.add_method('IsForwarding', 
+                   'bool', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetForwarding(uint32_t i, bool val) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'val')], 
                    is_virtual=True)
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4AddressValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ipv4Address', 
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6L3Protocol::GetNetDevice(uint32_t i) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Icmpv6L4Protocol> ns3::Ipv6L3Protocol::GetIcmpv6() const [member function]
+    cls.add_method('GetIcmpv6', 
+                   'ns3::Ptr< ns3::Icmpv6L4Protocol >', 
                    [], 
                    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', 
-                   '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', 
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddAutoconfiguredAddress(uint32_t interface, ns3::Ipv6Address network, ns3::Ipv6Prefix mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime, ns3::Ipv6Address defaultRouter=ns3::Ipv6Address::GetZero( )) [member function]
+    cls.add_method('AddAutoconfiguredAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'mask'), param('uint8_t', 'flags'), param('uint32_t', 'validTime'), param('uint32_t', 'preferredTime'), param('ns3::Ipv6Address', 'defaultRouter', default_value='ns3::Ipv6Address::GetZero( )')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveAutoconfiguredAddress(uint32_t interface, ns3::Ipv6Address network, ns3::Ipv6Prefix mask, ns3::Ipv6Address defaultRouter) [member function]
+    cls.add_method('RemoveAutoconfiguredAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'mask'), param('ns3::Ipv6Address', 'defaultRouter')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RegisterExtensions() [member function]
+    cls.add_method('RegisterExtensions', 
                    '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 >', 
                    [], 
-                   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', 
-                   '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', 
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RegisterOptions() [member function]
+    cls.add_method('RegisterOptions', 
+                   'void', 
                    [], 
-                   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', 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::ReportDrop(ns3::Ipv6Header ipHeader, ns3::Ptr<ns3::Packet> p, ns3::Ipv6L3Protocol::DropReason dropReason) [member function]
+    cls.add_method('ReportDrop', 
                    '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')])
+                   [param('ns3::Ipv6Header', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6L3Protocol::DropReason', 'dropReason')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
+                   'void', 
+                   [param('bool', 'forward')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   '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', 
+                   [param('bool', 'sendIcmpv6Redirect')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetSendIcmpv6Redirect() const [member function]
+    cls.add_method('GetSendIcmpv6Redirect', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3Ipv6AddressValue_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue() [constructor]
+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-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]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   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]
-    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]
-    cls.add_method('Get', 
-                   'ns3::Ipv6Address', 
+    ## 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-address.h (module 'network'): std::string ns3::Ipv6AddressValue::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]
-    cls.add_method('Set', 
+    ## 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 const &', 'value')])
+                   [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):
@@ -8176,6 +12756,44 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3LogNormalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::LogNormalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable::LogNormalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetMu() const [member function]
+    cls.add_method('GetMu', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetSigma() const [member function]
+    cls.add_method('GetSigma', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetValue(double mu, double sigma) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mu'), param('double', 'sigma')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::LogNormalRandomVariable::GetInteger(uint32_t mu, uint32_t sigma) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mu'), param('uint32_t', 'sigma')])
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::LogNormalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3Mac48AddressChecker_methods(root_module, cls):
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
     cls.add_constructor([])
@@ -8221,6 +12839,10 @@
     cls.add_constructor([param('ns3::MacLow const &', 'arg0')])
     ## mac-low.h (module 'wifi'): ns3::MacLow::MacLow() [constructor]
     cls.add_constructor([])
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::Packet> ns3::MacLow::AggregateToAmpdu(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const hdr) [member function]
+    cls.add_method('AggregateToAmpdu', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const', 'hdr')])
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateTransmissionTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & parameters) const [member function]
     cls.add_method('CalculateTransmissionTime', 
                    'ns3::Time', 
@@ -8230,10 +12852,18 @@
     cls.add_method('CreateBlockAckAgreement', 
                    'void', 
                    [param('ns3::MgtAddBaResponseHeader const *', 'respHdr'), param('ns3::Mac48Address', 'originator'), param('uint16_t', 'startingSeq')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::DeaggregateAmpduAndReceive(ns3::Ptr<ns3::Packet> aggregatedPacket, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('DeaggregateAmpduAndReceive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::DestroyBlockAckAgreement(ns3::Mac48Address originator, uint8_t tid) [member function]
     cls.add_method('DestroyBlockAckAgreement', 
                    'void', 
                    [param('ns3::Mac48Address', 'originator'), param('uint8_t', 'tid')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::FlushAggregateQueue() [member function]
+    cls.add_method('FlushAggregateQueue', 
+                   'void', 
+                   [])
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetAckTimeout() const [member function]
     cls.add_method('GetAckTimeout', 
                    'ns3::Time', 
@@ -8269,6 +12899,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
@@ -8306,10 +12941,10 @@
     cls.add_method('ReceiveError', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'rxSnr')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble, bool ampduSubframe) [member function]
     cls.add_method('ReceiveOk', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble'), param('bool', 'ampduSubframe')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::RegisterBlockAckListenerForAc(ns3::AcIndex ac, ns3::MacLowBlockAckEventListener * listener) [member function]
     cls.add_method('RegisterBlockAckListenerForAc', 
                    'void', 
@@ -8318,6 +12953,10 @@
     cls.add_method('RegisterDcfListener', 
                    'void', 
                    [param('ns3::MacLowDcfListener *', 'listener')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ResetPhy() [member function]
+    cls.add_method('ResetPhy', 
+                   'void', 
+                   [])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -8346,6 +12985,10 @@
     cls.add_method('SetCtsToSelfSupported', 
                    'void', 
                    [param('bool', 'enable')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggregator) [member function]
+    cls.add_method('SetMpduAggregator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggregator')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -8381,7 +13024,13 @@
     ## mac-low.h (module 'wifi'): void ns3::MacLow::StartTransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters parameters, ns3::MacLowTransmissionListener * listener) [member function]
     cls.add_method('StartTransmission', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLow::StopAggregation(ns3::Ptr<ns3::Packet const> peekedPacket, ns3::WifiMacHeader peekedHdr, ns3::Ptr<ns3::Packet> aggregatedPacket, uint16_t size) const [member function]
+    cls.add_method('StopAggregation', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'peekedPacket'), param('ns3::WifiMacHeader', 'peekedHdr'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint16_t', 'size')], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
@@ -8401,6 +13050,108 @@
     cls.add_constructor([param('ns3::MgtBeaconHeader const &', 'arg0')])
     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]
+    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]
+    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', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')])
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
+    cls.add_method('NotifyCourseChange', 
+                   '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', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3MpduAggregator_methods(root_module, cls):
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator::MpduAggregator() [constructor]
+    cls.add_constructor([])
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator::MpduAggregator(ns3::MpduAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MpduAggregator const &', 'arg0')])
+    ## mpdu-aggregator.h (module 'wifi'): void ns3::MpduAggregator::AddHeaderAndPad(ns3::Ptr<ns3::Packet> packet, bool last) [member function]
+    cls.add_method('AddHeaderAndPad', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('bool', 'last')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): bool ns3::MpduAggregator::Aggregate(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Aggregate', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): uint32_t ns3::MpduAggregator::CalculatePadding(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('CalculatePadding', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): bool ns3::MpduAggregator::CanBeAggregated(uint32_t packetSize, ns3::Ptr<ns3::Packet> aggregatedPacket, uint8_t blockAckSize) [member function]
+    cls.add_method('CanBeAggregated', 
+                   'bool', 
+                   [param('uint32_t', 'packetSize'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint8_t', 'blockAckSize')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): static std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::AmpduSubframeHeader>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::AmpduSubframeHeader> > > ns3::MpduAggregator::Deaggregate(ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Deaggregate', 
+                   'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -8516,15 +13267,15 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,const ns3::Address&,ns3::NetDevice::PacketType,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<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> cb) [member function]
     cls.add_method('SetPromiscReceiveCallback', 
                    'void', 
-                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   [param('ns3::Callback< 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 >', 'cb')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<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> cb) [member function]
     cls.add_method('SetReceiveCallback', 
                    'void', 
-                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   [param('ns3::Callback< 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 >', 'cb')], 
                    is_pure_virtual=True, is_virtual=True)
     ## net-device.h (module 'network'): bool ns3::NetDevice::SupportsSendFrom() const [member function]
     cls.add_method('SupportsSendFrom', 
@@ -8660,6 +13411,51 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3NormalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable::INFINITE_VALUE [variable]
+    cls.add_static_attribute('INFINITE_VALUE', 'double const', is_const=True)
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::NormalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable::NormalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetVariance() const [member function]
+    cls.add_method('GetVariance', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetValue(double mean, double variance, double bound=ns3::NormalRandomVariable::INFINITE_VALUE) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'variance'), param('double', 'bound', default_value='ns3::NormalRandomVariable::INFINITE_VALUE')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::NormalRandomVariable::GetInteger(uint32_t mean, uint32_t variance, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'variance'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::NormalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3NqosWaveMacHelper_methods(root_module, cls):
     ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper(ns3::NqosWaveMacHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NqosWaveMacHelper const &', 'arg0')])
@@ -8878,11 +13674,6 @@
                    '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', 
@@ -8949,10 +13740,58 @@
                    '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> nixVector) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
+    cls.add_method('SetNixVector', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ParetoRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ParetoRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable::ParetoRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetValue(double mean, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ParetoRandomVariable::GetInteger(uint32_t mean, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ParetoRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_Ns3PointerChecker_methods(root_module, cls):
@@ -9164,6 +14003,11 @@
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
     cls.add_method('SetWifiRemoteStationManager', 
                    'void', 
@@ -9395,10 +14239,10 @@
 
 def register_Ns3SupportedRates_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates() [constructor]
     cls.add_constructor([])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -9447,6 +14291,8 @@
     cls.add_method('SetBasicRate', 
                    'void', 
                    [param('uint32_t', 'bs')])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::MAX_SUPPORTED_RATES [variable]
+    cls.add_static_attribute('MAX_SUPPORTED_RATES', 'uint8_t const', is_const=True)
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::extended [variable]
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
@@ -9557,6 +14403,86 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3Vector2DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker(ns3::Vector2DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector2DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector2DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector2DValue::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)
+    ## vector.h (module 'core'): ns3::Vector2D ns3::Vector2DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector2D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector2DValue::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)
+    ## vector.h (module 'core'): void ns3::Vector2DValue::Set(ns3::Vector2D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector2D const &', 'value')])
+    return
+
+def register_Ns3Vector3DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker(ns3::Vector3DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector3DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector3DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector3DValue::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)
+    ## vector.h (module 'core'): ns3::Vector3D ns3::Vector3DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector3D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector3DValue::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)
+    ## vector.h (module 'core'): void ns3::Vector3DValue::Set(ns3::Vector3D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector3D const &', 'value')])
+    return
+
 def register_Ns3WaveMacLow_methods(root_module, cls):
     ## wave-mac-low.h (module 'wave'): ns3::WaveMacLow::WaveMacLow(ns3::WaveMacLow const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WaveMacLow const &', 'arg0')])
@@ -9567,6 +14493,15 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wave-mac-low.h (module 'wave'): void ns3::WaveMacLow::SetWaveNetDevice(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('SetWaveNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')])
+    ## wave-mac-low.h (module 'wave'): void ns3::WaveMacLow::StartTransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters parameters, ns3::MacLowTransmissionListener * listener) [member function]
+    cls.add_method('StartTransmission', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')], 
+                   is_virtual=True)
     ## wave-mac-low.h (module 'wave'): ns3::WifiTxVector ns3::WaveMacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
@@ -9574,6 +14509,264 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3WaveNetDevice_methods(root_module, cls):
+    ## wave-net-device.h (module 'wave'): ns3::WaveNetDevice::WaveNetDevice(ns3::WaveNetDevice const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WaveNetDevice const &', 'arg0')])
+    ## wave-net-device.h (module 'wave'): ns3::WaveNetDevice::WaveNetDevice() [constructor]
+    cls.add_constructor([])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('AddLinkChangeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::AddMac(uint32_t channelNumber, ns3::Ptr<ns3::OcbWifiMac> mac) [member function]
+    cls.add_method('AddMac', 
+                   'void', 
+                   [param('uint32_t', 'channelNumber'), param('ns3::Ptr< ns3::OcbWifiMac >', 'mac')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::AddPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('AddPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::CancelTx(uint32_t channelNumber, ns3::AcIndex ac) [member function]
+    cls.add_method('CancelTx', 
+                   'void', 
+                   [param('uint32_t', 'channelNumber'), param('ns3::AcIndex', 'ac')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::ChangeAddress(ns3::Address newAddress) [member function]
+    cls.add_method('ChangeAddress', 
+                   'void', 
+                   [param('ns3::Address', 'newAddress')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::DeleteTxProfile(uint32_t channelNumber) [member function]
+    cls.add_method('DeleteTxProfile', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## wave-net-device.h (module 'wave'): ns3::Address ns3::WaveNetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Address ns3::WaveNetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::Channel> ns3::WaveNetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::ChannelCoordinator> ns3::WaveNetDevice::GetChannelCoordinator() const [member function]
+    cls.add_method('GetChannelCoordinator', 
+                   'ns3::Ptr< ns3::ChannelCoordinator >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::ChannelManager> ns3::WaveNetDevice::GetChannelManager() const [member function]
+    cls.add_method('GetChannelManager', 
+                   'ns3::Ptr< ns3::ChannelManager >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::ChannelScheduler> ns3::WaveNetDevice::GetChannelScheduler() const [member function]
+    cls.add_method('GetChannelScheduler', 
+                   'ns3::Ptr< ns3::ChannelScheduler >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): uint32_t ns3::WaveNetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::OcbWifiMac> ns3::WaveNetDevice::GetMac(uint32_t channelNumber) const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::OcbWifiMac >', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): std::map<unsigned int, ns3::Ptr<ns3::OcbWifiMac>, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, ns3::Ptr<ns3::OcbWifiMac> > > > ns3::WaveNetDevice::GetMacs() const [member function]
+    cls.add_method('GetMacs', 
+                   'std::map< unsigned int, ns3::Ptr< ns3::OcbWifiMac > >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): uint16_t ns3::WaveNetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Address ns3::WaveNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Address ns3::WaveNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::Node> ns3::WaveNetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::WifiPhy> ns3::WaveNetDevice::GetPhy(uint32_t index) const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): std::vector<ns3::Ptr<ns3::WifiPhy>, std::allocator<ns3::Ptr<ns3::WifiPhy> > > ns3::WaveNetDevice::GetPhys() const [member function]
+    cls.add_method('GetPhys', 
+                   'std::vector< ns3::Ptr< ns3::WifiPhy > >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): static ns3::TypeId ns3::WaveNetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::VsaManager> ns3::WaveNetDevice::GetVsaManager() const [member function]
+    cls.add_method('GetVsaManager', 
+                   'ns3::Ptr< ns3::VsaManager >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::RegisterTxProfile(ns3::TxProfile const & txprofile) [member function]
+    cls.add_method('RegisterTxProfile', 
+                   'bool', 
+                   [param('ns3::TxProfile const &', 'txprofile')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('Send', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('SendFrom', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::SendX(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint32_t protocol, ns3::TxInfo const & txInfo) [member function]
+    cls.add_method('SendX', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint32_t', 'protocol'), param('ns3::TxInfo const &', 'txInfo')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetChannelCoordinator(ns3::Ptr<ns3::ChannelCoordinator> channelCoordinator) [member function]
+    cls.add_method('SetChannelCoordinator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ChannelCoordinator >', 'channelCoordinator')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetChannelManager(ns3::Ptr<ns3::ChannelManager> channelManager) [member function]
+    cls.add_method('SetChannelManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ChannelManager >', 'channelManager')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetChannelScheduler(ns3::Ptr<ns3::ChannelScheduler> channelScheduler) [member function]
+    cls.add_method('SetChannelScheduler', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ChannelScheduler >', 'channelScheduler')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetPromiscReceiveCallback(ns3::Callback<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> cb) [member function]
+    cls.add_method('SetPromiscReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< 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 >', 'cb')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetReceiveCallback(ns3::Callback<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> cb) [member function]
+    cls.add_method('SetReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< 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 >', 'cb')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetVsaManager(ns3::Ptr<ns3::VsaManager> vsaManager) [member function]
+    cls.add_method('SetVsaManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::VsaManager >', 'vsaManager')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetWaveVsaCallback(ns3::Callback<bool, ns3::Ptr<ns3::Packet const>, ns3::Address const&, unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> vsaCallback) [member function]
+    cls.add_method('SetWaveVsaCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::Packet const >, ns3::Address const &, unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'vsaCallback')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::StartSch(ns3::SchInfo const & schInfo) [member function]
+    cls.add_method('StartSch', 
+                   'bool', 
+                   [param('ns3::SchInfo const &', 'schInfo')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::StartVsa(ns3::VsaInfo const & vsaInfo) [member function]
+    cls.add_method('StartVsa', 
+                   'bool', 
+                   [param('ns3::VsaInfo const &', 'vsaInfo')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::StopSch(uint32_t channelNumber) [member function]
+    cls.add_method('StopSch', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::StopVsa(uint32_t channelNumber) [member function]
+    cls.add_method('StopVsa', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3WifiChannel_methods(root_module, cls):
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel() [constructor]
+    cls.add_constructor([])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel(ns3::WifiChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiChannel const &', 'arg0')])
+    ## wifi-channel.h (module 'wifi'): static ns3::TypeId ns3::WifiChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -9614,6 +14807,49 @@
                    [param('ns3::WifiMode const &', 'value')])
     return
 
+def register_Ns3YansWifiChannel_methods(root_module, cls):
+    ## yans-wifi-channel.h (module 'wifi'): ns3::YansWifiChannel::YansWifiChannel(ns3::YansWifiChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::YansWifiChannel const &', 'arg0')])
+    ## yans-wifi-channel.h (module 'wifi'): ns3::YansWifiChannel::YansWifiChannel() [constructor]
+    cls.add_constructor([])
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Add(ns3::Ptr<ns3::YansWifiPhy> phy) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'phy')])
+    ## yans-wifi-channel.h (module 'wifi'): int64_t ns3::YansWifiChannel::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## yans-wifi-channel.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::YansWifiChannel::GetDevice(uint32_t i) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-channel.h (module 'wifi'): uint32_t ns3::YansWifiChannel::GetNDevices() const [member function]
+    cls.add_method('GetNDevices', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-channel.h (module 'wifi'): static ns3::TypeId ns3::YansWifiChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## 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, uint8_t packetType, ns3::Time duration) 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::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('ns3::Time', 'duration')], 
+                   is_const=True)
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
+    cls.add_method('SetPropagationDelayModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PropagationDelayModel >', 'delay')])
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationLossModel(ns3::Ptr<ns3::PropagationLossModel> loss) [member function]
+    cls.add_method('SetPropagationLossModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PropagationLossModel >', 'loss')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -9800,6 +15036,30 @@
     cls.add_method('ConfigureEdca', 
                    'void', 
                    [param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('uint32_t', 'aifsn'), param('ns3::AcIndex', 'ac')])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::EnableForWave(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('EnableForWave', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::Suspend() [member function]
+    cls.add_method('Suspend', 
+                   'void', 
+                   [])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::Resume() [member function]
+    cls.add_method('Resume', 
+                   'void', 
+                   [])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::MakeVirtualBusy(ns3::Time duration) [member function]
+    cls.add_method('MakeVirtualBusy', 
+                   'void', 
+                   [param('ns3::Time', 'duration')])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::CancleTx(ns3::AcIndex ac) [member function]
+    cls.add_method('CancleTx', 
+                   'void', 
+                   [param('ns3::AcIndex', 'ac')])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
     ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
                    'void', 
diff -Naur ns-3.21/src/wave/bindings/modulegen__gcc_LP64.py ns-3.22/src/wave/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/wave/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -23,27 +23,37 @@
     ## 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_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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], 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_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', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelAccess [enumeration]
+    module.add_enum('ChannelAccess', ['ContinuousAccess', 'AlternatingAccess', 'ExtendedAccess', 'DefaultCchAccess', 'NoAccess'])
     ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation [enumeration]
     module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA', 'OCB'], 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')
+    ## vsa-manager.h (module 'wave'): ns3::VsaTransmitInterval [enumeration]
+    module.add_enum('VsaTransmitInterval', ['VSA_TRANSMIT_IN_CCHI', 'VSA_TRANSMIT_IN_SCHI', 'VSA_TRANSMIT_IN_BOTHI'])
+    ## 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', '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]
     module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
+    ## application-container.h (module 'network'): ns3::ApplicationContainer [class]
+    module.add_class('ApplicationContainer', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper [class]
     module.add_class('AsciiTraceHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelperForDevice [class]
     module.add_class('AsciiTraceHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv4 [class]
+    module.add_class('AsciiTraceHelperForIpv4', allow_subclassing=True, import_from_module='ns.internet')
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv6 [class]
+    module.add_class('AsciiTraceHelperForIpv6', allow_subclassing=True, import_from_module='ns.internet')
     ## 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]
@@ -74,20 +84,44 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## capability-information.h (module 'wifi'): ns3::CapabilityInformation [class]
     module.add_class('CapabilityInformation', import_from_module='ns.wifi')
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter [struct]
+    module.add_class('EdcaParameter')
     ## 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'])
     ## 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-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress [class]
+    module.add_class('Ipv4InterfaceAddress', import_from_module='ns.internet')
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e [enumeration]
+    module.add_enum('InterfaceAddressScope_e', ['HOST', 'LINK', 'GLOBAL'], outer_class=root_module['ns3::Ipv4InterfaceAddress'], import_from_module='ns.internet')
+    ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer [class]
+    module.add_class('Ipv4InterfaceContainer', import_from_module='ns.internet')
     ## 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-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress [class]
+    module.add_class('Ipv6InterfaceAddress', import_from_module='ns.internet')
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e [enumeration]
+    module.add_enum('State_e', ['TENTATIVE', 'DEPRECATED', 'PREFERRED', 'PERMANENT', 'HOMEADDRESS', 'TENTATIVE_OPTIMISTIC', 'INVALID'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e [enumeration]
+    module.add_enum('Scope_e', ['HOST', 'LINKLOCAL', 'GLOBAL'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6InterfaceContainer [class]
+    module.add_class('Ipv6InterfaceContainer', import_from_module='ns.internet')
     ## 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]
@@ -146,6 +180,12 @@
     module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
+    module.add_class('PcapHelperForIpv4', allow_subclassing=True, import_from_module='ns.internet')
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6 [class]
+    module.add_class('PcapHelperForIpv6', allow_subclassing=True, import_from_module='ns.internet')
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo [struct]
+    module.add_class('SchInfo')
     ## 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]
@@ -158,6 +198,10 @@
     module.add_class('TagBuffer', import_from_module='ns.network')
     ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
     module.add_class('TimeWithUnit', import_from_module='ns.core')
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo [struct]
+    module.add_class('TxInfo')
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile [struct]
+    module.add_class('TxProfile')
     ## 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]
@@ -166,8 +210,18 @@
     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'])
+    ## vector.h (module 'core'): ns3::Vector2D [class]
+    module.add_class('Vector2D', import_from_module='ns.core')
+    ## vector.h (module 'core'): ns3::Vector3D [class]
+    module.add_class('Vector3D', import_from_module='ns.core')
     ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificContentManager [class]
     module.add_class('VendorSpecificContentManager')
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo [struct]
+    module.add_class('VsaInfo')
+    ## wave-bsm-helper.h (module 'wave'): ns3::WaveBsmHelper [class]
+    module.add_class('WaveBsmHelper')
+    ## wave-helper.h (module 'wave'): ns3::WaveHelper [class]
+    module.add_class('WaveHelper', allow_subclassing=True)
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
     module.add_class('WifiHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
@@ -190,6 +244,12 @@
     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')
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper [class]
+    module.add_class('YansWifiChannelHelper', import_from_module='ns.wifi')
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper [class]
+    module.add_class('YansWifiPhyHelper', import_from_module='ns.wifi', parent=[root_module['ns3::WifiPhyHelper'], root_module['ns3::PcapHelperForDevice'], root_module['ns3::AsciiTraceHelperForDevice']])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes [enumeration]
+    module.add_enum('SupportedPcapDataLinkTypes', ['DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO'], outer_class=root_module['ns3::YansWifiPhyHelper'], 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]
@@ -200,8 +260,20 @@
     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'])
-    ## higher-tx-tag.h (module 'wave'): ns3::HigherDataTxVectorTag [class]
-    module.add_class('HigherDataTxVectorTag', parent=root_module['ns3::Tag'])
+    ## higher-tx-tag.h (module 'wave'): ns3::HigherLayerTxVectorTag [class]
+    module.add_class('HigherLayerTxVectorTag', parent=root_module['ns3::Tag'])
+    ## internet-stack-helper.h (module 'internet'): ns3::InternetStackHelper [class]
+    module.add_class('InternetStackHelper', import_from_module='ns.internet', parent=[root_module['ns3::PcapHelperForIpv4'], root_module['ns3::PcapHelperForIpv6'], root_module['ns3::AsciiTraceHelperForIpv4'], root_module['ns3::AsciiTraceHelperForIpv6']])
+    ## 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', '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', ['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]
+    module.add_enum('NextHeader_e', ['IPV6_EXT_HOP_BY_HOP', 'IPV6_IPV4', 'IPV6_TCP', 'IPV6_UDP', 'IPV6_IPV6', 'IPV6_EXT_ROUTING', 'IPV6_EXT_FRAGMENTATION', 'IPV6_EXT_CONFIDENTIALITY', 'IPV6_EXT_AUTHENTIFICATION', 'IPV6_ICMPV6', 'IPV6_EXT_END', 'IPV6_EXT_DESTINATION', 'IPV6_SCTP', 'IPV6_EXT_MOBILITY', 'IPV6_UDP_LITE'], outer_class=root_module['ns3::Ipv6Header'], import_from_module='ns.internet')
     ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader [class]
     module.add_class('MgtAddBaRequestHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaResponseHeader [class]
@@ -226,6 +298,10 @@
     module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper [class]
     module.add_class('QosWifiMacHelper', import_from_module='ns.wifi', parent=root_module['ns3::WifiMacHelper'])
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
+    module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
+    module.add_class('SequentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## 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]
@@ -234,10 +310,16 @@
     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::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::ChannelCoordinationListener', 'ns3::empty', 'ns3::DefaultDeleter<ns3::ChannelCoordinationListener>'], parent=root_module['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]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], parent=root_module['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]
@@ -248,6 +330,24 @@
     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'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::WifiInformationElement', 'ns3::empty', 'ns3::DefaultDeleter<ns3::WifiInformationElement>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## socket.h (module 'network'): ns3::Socket [class]
+    module.add_class('Socket', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## socket.h (module 'network'): ns3::Socket::SocketErrno [enumeration]
+    module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
+    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]
     module.add_class('Time', import_from_module='ns.core')
     ## nstime.h (module 'core'): ns3::Time::Unit [enumeration]
@@ -258,8 +358,18 @@
     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'])
+    ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
+    module.add_class('TriangularRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
+    module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader [class]
     module.add_class('VendorSpecificActionHeader', parent=root_module['ns3::Header'])
+    ## vsa-manager.h (module 'wave'): ns3::VsaManager [class]
+    module.add_class('VsaManager', parent=root_module['ns3::Object'])
+    ## wave-bsm-stats.h (module 'wave'): ns3::WaveBsmStats [class]
+    module.add_class('WaveBsmStats', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
+    module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper [class]
     module.add_class('Wifi80211pHelper', parent=root_module['ns3::WifiHelper'])
     ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader [class]
@@ -298,54 +408,112 @@
     module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING', 'SLEEP'], outer_class=root_module['ns3::WifiPhy'], import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## wave-helper.h (module 'wave'): ns3::YansWavePhyHelper [class]
+    module.add_class('YansWavePhyHelper', parent=root_module['ns3::YansWifiPhyHelper'])
+    ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable [class]
+    module.add_class('ZetaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable [class]
+    module.add_class('ZipfRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader [class]
+    module.add_class('AmpduSubframeHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
+    ## application.h (module 'network'): ns3::Application [class]
+    module.add_class('Application', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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> >'])
+    ## bsm-application.h (module 'wave'): ns3::BsmApplication [class]
+    module.add_class('BsmApplication', parent=root_module['ns3::Application'])
     ## 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'])
+    ## channel.h (module 'network'): ns3::Channel [class]
+    module.add_class('Channel', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinationListener [class]
+    module.add_class('ChannelCoordinationListener', parent=root_module['ns3::SimpleRefCount< ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >'])
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinator [class]
+    module.add_class('ChannelCoordinator', parent=root_module['ns3::Object'])
+    ## channel-manager.h (module 'wave'): ns3::ChannelManager [class]
+    module.add_class('ChannelManager', parent=root_module['ns3::Object'])
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelScheduler [class]
+    module.add_class('ChannelScheduler', 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'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader [class]
     module.add_class('CtrlBAckRequestHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader [class]
     module.add_class('CtrlBAckResponseHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## dcf.h (module 'wifi'): ns3::Dcf [class]
     module.add_class('Dcf', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## default-channel-scheduler.h (module 'wave'): ns3::DefaultChannelScheduler [class]
+    module.add_class('DefaultChannelScheduler', parent=root_module['ns3::ChannelScheduler'])
+    ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
+    module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN [class]
     module.add_class('EdcaTxopN', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
+    module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## 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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable [class]
+    module.add_class('ExponentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE [class]
     module.add_class('ExtendedSupportedRatesIE', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## 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'])
+    ## ipv4.h (module 'internet'): ns3::Ipv4 [class]
+    module.add_class('Ipv4', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol [class]
+    module.add_class('Ipv4L3Protocol', import_from_module='ns.internet', parent=root_module['ns3::Ipv4'])
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::DropReason [enumeration]
+    module.add_enum('DropReason', ['DROP_TTL_EXPIRED', 'DROP_NO_ROUTE', 'DROP_BAD_CHECKSUM', 'DROP_INTERFACE_DOWN', 'DROP_ROUTE_ERROR', 'DROP_FRAGMENT_TIMEOUT'], outer_class=root_module['ns3::Ipv4L3Protocol'], import_from_module='ns.internet')
     ## 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'])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute [class]
+    module.add_class('Ipv4MulticastRoute', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Route [class]
+    module.add_class('Ipv4Route', import_from_module='ns.internet', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
+    ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol [class]
+    module.add_class('Ipv4RoutingProtocol', import_from_module='ns.internet', parent=root_module['ns3::Object'])
+    ## ipv6.h (module 'internet'): ns3::Ipv6 [class]
+    module.add_class('Ipv6', import_from_module='ns.internet', parent=root_module['ns3::Object'])
     ## 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-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol [class]
+    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', 'DROP_UNKNOWN_OPTION', 'DROP_MALFORMED_HEADER', 'DROP_FRAGMENT_TIMEOUT'], 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]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
+    module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## 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]
@@ -354,6 +522,10 @@
     module.add_class('MacLow', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtBeaconHeader [class]
     module.add_class('MgtBeaconHeader', import_from_module='ns.wifi', parent=root_module['ns3::MgtProbeResponseHeader'])
+    ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
+    module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator [class]
+    module.add_class('MpduAggregator', import_from_module='ns.wifi', 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]
@@ -362,6 +534,8 @@
     module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
+    module.add_class('NormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper [class]
     module.add_class('NqosWaveMacHelper', parent=root_module['ns3::NqosWifiMacHelper'])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker [class]
@@ -376,6 +550,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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
+    module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## pointer.h (module 'core'): ns3::PointerChecker [class]
     module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
@@ -400,12 +576,26 @@
     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'])
+    ## vector.h (module 'core'): ns3::Vector2DChecker [class]
+    module.add_class('Vector2DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector2DValue [class]
+    module.add_class('Vector2DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vector.h (module 'core'): ns3::Vector3DChecker [class]
+    module.add_class('Vector3DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## vector.h (module 'core'): ns3::Vector3DValue [class]
+    module.add_class('Vector3DValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## wave-mac-low.h (module 'wave'): ns3::WaveMacLow [class]
     module.add_class('WaveMacLow', parent=root_module['ns3::MacLow'])
+    ## wave-net-device.h (module 'wave'): ns3::WaveNetDevice [class]
+    module.add_class('WaveNetDevice', parent=root_module['ns3::NetDevice'])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel [class]
+    module.add_class('WifiChannel', import_from_module='ns.wifi', parent=root_module['ns3::Channel'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
     module.add_class('WifiModeValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## yans-wifi-channel.h (module 'wifi'): ns3::YansWifiChannel [class]
+    module.add_class('YansWifiChannel', import_from_module='ns.wifi', parent=root_module['ns3::WifiChannel'])
     ## 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]
@@ -414,23 +604,49 @@
     module.add_class('DcaTxop', import_from_module='ns.wifi', parent=root_module['ns3::Dcf'])
     ## ocb-wifi-mac.h (module 'wave'): ns3::OcbWifiMac [class]
     module.add_class('OcbWifiMac', parent=root_module['ns3::RegularWifiMac'])
+    module.add_container('ns3::EdcaParameterSet', ('ns3::AcIndex', 'ns3::EdcaParameter'), container_type=u'map')
+    module.add_container('std::vector< double >', 'double', container_type=u'vector')
+    module.add_container('std::vector< int >', 'int', container_type=u'vector')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
     module.add_container('ns3::WifiMcsList', 'unsigned char', container_type=u'vector')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader >', container_type=u'list')
+    module.add_container('std::map< unsigned int, ns3::Ptr< ns3::OcbWifiMac > >', ('unsigned int', 'ns3::Ptr< ns3::OcbWifiMac >'), container_type=u'map')
+    module.add_container('std::vector< ns3::Ptr< ns3::WifiPhy > >', 'ns3::Ptr< ns3::WifiPhy >', container_type=u'vector')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >', u'ns3::EdcaParameterSet')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >*', u'ns3::EdcaParameterSet*')
+    typehandlers.add_type_alias(u'std::map< ns3::AcIndex, ns3::EdcaParameter, std::less< ns3::AcIndex >, std::allocator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > > >&', u'ns3::EdcaParameterSet&')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::VscCallback')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::VscCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< bool, ns3::Ptr< ns3::WifiMac >, ns3::OrganizationIdentifier const &, ns3::Ptr< ns3::Packet const >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::VscCallback&')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
+    typehandlers.add_type_alias(u'ns3::Vector3D', u'ns3::Vector')
+    typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
+    typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
+    module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue', u'ns3::VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
+    typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
+    module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
+    typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
+    module.add_typedef(root_module['ns3::Vector3DChecker'], 'VectorChecker')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >', u'ns3::EdcaParameterSetI')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >*', u'ns3::EdcaParameterSetI*')
+    typehandlers.add_type_alias(u'std::_Rb_tree_const_iterator< std::pair< ns3::AcIndex const, ns3::EdcaParameter > >&', u'ns3::EdcaParameterSetI&')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', u'ns3::WifiMcsListIterator')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', u'ns3::WifiMcsListIterator*')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', u'ns3::WifiMcsListIterator&')
@@ -493,8 +709,11 @@
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3ApplicationContainer_methods(root_module, root_module['ns3::ApplicationContainer'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
     register_Ns3AsciiTraceHelperForDevice_methods(root_module, root_module['ns3::AsciiTraceHelperForDevice'])
+    register_Ns3AsciiTraceHelperForIpv4_methods(root_module, root_module['ns3::AsciiTraceHelperForIpv4'])
+    register_Ns3AsciiTraceHelperForIpv6_methods(root_module, root_module['ns3::AsciiTraceHelperForIpv6'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3Bar_methods(root_module, root_module['ns3::Bar'])
@@ -510,11 +729,18 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3CapabilityInformation_methods(root_module, root_module['ns3::CapabilityInformation'])
+    register_Ns3EdcaParameter_methods(root_module, root_module['ns3::EdcaParameter'])
     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_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
+    register_Ns3Ipv4InterfaceContainer_methods(root_module, root_module['ns3::Ipv4InterfaceContainer'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
+    register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
+    register_Ns3Ipv6InterfaceContainer_methods(root_module, root_module['ns3::Ipv6InterfaceContainer'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3MacLowBlockAckEventListener_methods(root_module, root_module['ns3::MacLowBlockAckEventListener'])
@@ -538,16 +764,26 @@
     register_Ns3PcapFile_methods(root_module, root_module['ns3::PcapFile'])
     register_Ns3PcapHelper_methods(root_module, root_module['ns3::PcapHelper'])
     register_Ns3PcapHelperForDevice_methods(root_module, root_module['ns3::PcapHelperForDevice'])
+    register_Ns3PcapHelperForIpv4_methods(root_module, root_module['ns3::PcapHelperForIpv4'])
+    register_Ns3PcapHelperForIpv6_methods(root_module, root_module['ns3::PcapHelperForIpv6'])
+    register_Ns3SchInfo_methods(root_module, root_module['ns3::SchInfo'])
     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_Ns3StatusCode_methods(root_module, root_module['ns3::StatusCode'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
+    register_Ns3TxInfo_methods(root_module, root_module['ns3::TxInfo'])
+    register_Ns3TxProfile_methods(root_module, root_module['ns3::TxProfile'])
     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_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
+    register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3VendorSpecificContentManager_methods(root_module, root_module['ns3::VendorSpecificContentManager'])
+    register_Ns3VsaInfo_methods(root_module, root_module['ns3::VsaInfo'])
+    register_Ns3WaveBsmHelper_methods(root_module, root_module['ns3::WaveBsmHelper'])
+    register_Ns3WaveHelper_methods(root_module, root_module['ns3::WaveHelper'])
     register_Ns3WifiHelper_methods(root_module, root_module['ns3::WifiHelper'])
     register_Ns3WifiMacHelper_methods(root_module, root_module['ns3::WifiMacHelper'])
     register_Ns3WifiMode_methods(root_module, root_module['ns3::WifiMode'])
@@ -558,11 +794,16 @@
     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'])
     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_Ns3HigherDataTxVectorTag_methods(root_module, root_module['ns3::HigherDataTxVectorTag'])
+    register_Ns3HigherLayerTxVectorTag_methods(root_module, root_module['ns3::HigherLayerTxVectorTag'])
+    register_Ns3InternetStackHelper_methods(root_module, root_module['ns3::InternetStackHelper'])
+    register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
+    register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
     register_Ns3MgtAddBaRequestHeader_methods(root_module, root_module['ns3::MgtAddBaRequestHeader'])
     register_Ns3MgtAddBaResponseHeader_methods(root_module, root_module['ns3::MgtAddBaResponseHeader'])
     register_Ns3MgtAssocRequestHeader_methods(root_module, root_module['ns3::MgtAssocRequestHeader'])
@@ -575,21 +816,38 @@
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3QosWifiMacHelper_methods(root_module, root_module['ns3::QosWifiMacHelper'])
+    register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
+    register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     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__Ns3ChannelCoordinationListener_Ns3Empty_Ns3DefaultDeleter__lt__ns3ChannelCoordinationListener__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >'])
     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> >'])
     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> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3SimpleRefCount__Ns3WifiInformationElement_Ns3Empty_Ns3DefaultDeleter__lt__ns3WifiInformationElement__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> >'])
+    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'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
+    register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
+    register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3VendorSpecificActionHeader_methods(root_module, root_module['ns3::VendorSpecificActionHeader'])
+    register_Ns3VsaManager_methods(root_module, root_module['ns3::VsaManager'])
+    register_Ns3WaveBsmStats_methods(root_module, root_module['ns3::WaveBsmStats'])
+    register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
     register_Ns3Wifi80211pHelper_methods(root_module, root_module['ns3::Wifi80211pHelper'])
     register_Ns3WifiActionHeader_methods(root_module, root_module['ns3::WifiActionHeader'])
     register_Ns3WifiActionHeaderActionValue_methods(root_module, root_module['ns3::WifiActionHeader::ActionValue'])
@@ -599,37 +857,67 @@
     register_Ns3WifiMacQueue_methods(root_module, root_module['ns3::WifiMacQueue'])
     register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
     register_Ns3WifiRemoteStationManager_methods(root_module, root_module['ns3::WifiRemoteStationManager'])
+    register_Ns3YansWavePhyHelper_methods(root_module, root_module['ns3::YansWavePhyHelper'])
+    register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
+    register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
+    register_Ns3AmpduSubframeHeader_methods(root_module, root_module['ns3::AmpduSubframeHeader'])
+    register_Ns3Application_methods(root_module, root_module['ns3::Application'])
     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_Ns3BsmApplication_methods(root_module, root_module['ns3::BsmApplication'])
     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_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
+    register_Ns3ChannelCoordinationListener_methods(root_module, root_module['ns3::ChannelCoordinationListener'])
+    register_Ns3ChannelCoordinator_methods(root_module, root_module['ns3::ChannelCoordinator'])
+    register_Ns3ChannelManager_methods(root_module, root_module['ns3::ChannelManager'])
+    register_Ns3ChannelScheduler_methods(root_module, root_module['ns3::ChannelScheduler'])
+    register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3CtrlBAckRequestHeader_methods(root_module, root_module['ns3::CtrlBAckRequestHeader'])
     register_Ns3CtrlBAckResponseHeader_methods(root_module, root_module['ns3::CtrlBAckResponseHeader'])
     register_Ns3Dcf_methods(root_module, root_module['ns3::Dcf'])
+    register_Ns3DefaultChannelScheduler_methods(root_module, root_module['ns3::DefaultChannelScheduler'])
+    register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
     register_Ns3EdcaTxopN_methods(root_module, root_module['ns3::EdcaTxopN'])
+    register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
+    register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
+    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_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
+    register_Ns3Ipv4L3Protocol_methods(root_module, root_module['ns3::Ipv4L3Protocol'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
     register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
+    register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
+    register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
+    register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
+    register_Ns3Ipv6_methods(root_module, root_module['ns3::Ipv6'])
     register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
+    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_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3MacLow_methods(root_module, root_module['ns3::MacLow'])
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
+    register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
+    register_Ns3MpduAggregator_methods(root_module, root_module['ns3::MpduAggregator'])
     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'])
+    register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3NqosWaveMacHelper_methods(root_module, root_module['ns3::NqosWaveMacHelper'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
@@ -637,6 +925,7 @@
     register_Ns3OrganizationIdentifierValue_methods(root_module, root_module['ns3::OrganizationIdentifierValue'])
     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_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
     register_Ns3QosWaveMacHelper_methods(root_module, root_module['ns3::QosWaveMacHelper'])
@@ -649,9 +938,16 @@
     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_Ns3Vector2DChecker_methods(root_module, root_module['ns3::Vector2DChecker'])
+    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_Ns3WaveMacLow_methods(root_module, root_module['ns3::WaveMacLow'])
+    register_Ns3WaveNetDevice_methods(root_module, root_module['ns3::WaveNetDevice'])
+    register_Ns3WifiChannel_methods(root_module, root_module['ns3::WifiChannel'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
+    register_Ns3YansWifiChannel_methods(root_module, root_module['ns3::YansWifiChannel'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3DcaTxop_methods(root_module, root_module['ns3::DcaTxop'])
@@ -733,6 +1029,57 @@
                    is_const=True)
     return
 
+def register_Ns3ApplicationContainer_methods(root_module, cls):
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(ns3::ApplicationContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ApplicationContainer const &', 'arg0')])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer() [constructor]
+    cls.add_constructor([])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(ns3::Ptr<ns3::Application> application) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Application >', 'application')])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(std::string name) [constructor]
+    cls.add_constructor([param('std::string', 'name')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(ns3::ApplicationContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::ApplicationContainer', 'other')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(ns3::Ptr<ns3::Application> application) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Application >', 'application')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name')])
+    ## application-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Application>*,std::vector<ns3::Ptr<ns3::Application>, std::allocator<ns3::Ptr<ns3::Application> > > > ns3::ApplicationContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Application>*,std::vector<ns3::Ptr<ns3::Application>, std::allocator<ns3::Ptr<ns3::Application> > > > ns3::ApplicationContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): ns3::Ptr<ns3::Application> ns3::ApplicationContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::Application >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## application-container.h (module 'network'): uint32_t ns3::ApplicationContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Start(ns3::Time start) [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [param('ns3::Time', 'start')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Stop(ns3::Time stop) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time', 'stop')])
+    return
+
 def register_Ns3AsciiTraceHelper_methods(root_module, cls):
     ## trace-helper.h (module 'network'): ns3::AsciiTraceHelper::AsciiTraceHelper(ns3::AsciiTraceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AsciiTraceHelper const &', 'arg0')])
@@ -852,6 +1199,126 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3AsciiTraceHelperForIpv4_methods(root_module, cls):
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv4::AsciiTraceHelperForIpv4(ns3::AsciiTraceHelperForIpv4 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AsciiTraceHelperForIpv4 const &', 'arg0')])
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv4::AsciiTraceHelperForIpv4() [constructor]
+    cls.add_constructor([])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, std::string ipv4Name, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ipv4Name'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string ipv4Name, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'ipv4Name'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, ns3::Ipv4InterfaceContainer c) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ipv4InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ipv4InterfaceContainer c) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ipv4InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(std::string prefix, uint32_t nodeid, uint32_t deviceid, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'deviceid'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4(ns3::Ptr<ns3::OutputStreamWrapper> stream, uint32_t nodeid, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4All(std::string prefix) [member function]
+    cls.add_method('EnableAsciiIpv4All', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4All(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('EnableAsciiIpv4All', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv4::EnableAsciiIpv4Internal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv4Internal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3AsciiTraceHelperForIpv6_methods(root_module, cls):
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv6::AsciiTraceHelperForIpv6(ns3::AsciiTraceHelperForIpv6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AsciiTraceHelperForIpv6 const &', 'arg0')])
+    ## internet-trace-helper.h (module 'internet'): ns3::AsciiTraceHelperForIpv6::AsciiTraceHelperForIpv6() [constructor]
+    cls.add_constructor([])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, std::string ipv6Name, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ipv6Name'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string ipv6Name, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'ipv6Name'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, ns3::Ipv6InterfaceContainer c) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ipv6InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::Ipv6InterfaceContainer c) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::Ipv6InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, ns3::NodeContainer n) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6(ns3::Ptr<ns3::OutputStreamWrapper> stream, uint32_t nodeid, uint32_t interface) [member function]
+    cls.add_method('EnableAsciiIpv6', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6All(std::string prefix) [member function]
+    cls.add_method('EnableAsciiIpv6All', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6All(ns3::Ptr<ns3::OutputStreamWrapper> stream) [member function]
+    cls.add_method('EnableAsciiIpv6All', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::AsciiTraceHelperForIpv6::EnableAsciiIpv6Internal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv6Internal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    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')])
@@ -945,11 +1412,21 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): uint16_t ns3::BlockAckAgreement::GetWinEnd() const [member function]
+    cls.add_method('GetWinEnd', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsAmsduSupported() const [member function]
     cls.add_method('IsAmsduSupported', 
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsHtSupported() const [member function]
+    cls.add_method('IsHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsImmediateBlockAck() const [member function]
     cls.add_method('IsImmediateBlockAck', 
                    'bool', 
@@ -967,6 +1444,10 @@
     cls.add_method('SetDelayedBlockAck', 
                    'void', 
                    [])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetHtSupported(bool htSupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'htSupported')])
     ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetImmediateBlockAck() [member function]
     cls.add_method('SetImmediateBlockAck', 
                    'void', 
@@ -979,6 +1460,10 @@
     cls.add_method('SetTimeout', 
                    'void', 
                    [param('uint16_t', 'timeout')])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetWinEnd(uint16_t seq) [member function]
+    cls.add_method('SetWinEnd', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
     return
 
 def register_Ns3BlockAckCache_methods(root_module, cls):
@@ -990,6 +1475,10 @@
     cls.add_method('FillBlockAckBitmap', 
                    'void', 
                    [param('ns3::CtrlBAckResponseHeader *', 'blockAckHeader')])
+    ## block-ack-cache.h (module 'wifi'): uint16_t ns3::BlockAckCache::GetWinStart() [member function]
+    cls.add_method('GetWinStart', 
+                   'uint16_t', 
+                   [])
     ## block-ack-cache.h (module 'wifi'): void ns3::BlockAckCache::Init(uint16_t winStart, uint16_t winSize) [member function]
     cls.add_method('Init', 
                    'void', 
@@ -1007,6 +1496,14 @@
 def register_Ns3BlockAckManager_methods(root_module, cls):
     ## block-ack-manager.h (module 'wifi'): ns3::BlockAckManager::BlockAckManager() [constructor]
     cls.add_constructor([])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::AlreadyExists(uint16_t currentSeq, ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('AlreadyExists', 
+                   'bool', 
+                   [param('uint16_t', 'currentSeq'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CompleteAmpduExchange(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduExchange', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CreateAgreement(ns3::MgtAddBaRequestHeader const * reqHdr, ns3::Mac48Address recipient) [member function]
     cls.add_method('CreateAgreement', 
                    'void', 
@@ -1063,6 +1560,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::NeedBarRetransmission(uint8_t tid, uint16_t seqNumber, ns3::Mac48Address recipient) [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('uint16_t', 'seqNumber'), param('ns3::Mac48Address', 'recipient')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyAgreementEstablished(ns3::Mac48Address recipient, uint8_t tid, uint16_t startingSeq) [member function]
     cls.add_method('NotifyAgreementEstablished', 
                    'void', 
@@ -1071,14 +1572,22 @@
     cls.add_method('NotifyAgreementUnsuccessful', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('NotifyGotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber) [member function]
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, ns3::WifiMacHeader::QosAckPolicy policy) [member function]
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
-                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber')])
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemovePacket', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetBlockAckInactivityCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetBlockAckInactivityCallback', 
                    'void', 
@@ -1103,14 +1612,26 @@
     cls.add_method('SetQueue', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiMacQueue >', 'queue')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxFailedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
     cls.add_method('SetTxMiddle', 
                    'void', 
                    [param('ns3::MacTxMiddle *', 'txMiddle')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetUnblockDestinationCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetUnblockDestinationCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> manager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'manager')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::StorePacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr, ns3::Time tStamp) [member function]
     cls.add_method('StorePacket', 
                    'void', 
@@ -1545,6 +2066,19 @@
                    [])
     return
 
+def register_Ns3EdcaParameter_methods(root_module, cls):
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::EdcaParameter() [constructor]
+    cls.add_constructor([])
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::EdcaParameter(ns3::EdcaParameter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EdcaParameter const &', 'arg0')])
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::aifsn [variable]
+    cls.add_instance_attribute('aifsn', 'uint32_t', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::cwmax [variable]
+    cls.add_instance_attribute('cwmax', 'uint32_t', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::EdcaParameter::cwmin [variable]
+    cls.add_instance_attribute('cwmin', 'uint32_t', is_const=False)
+    return
+
 def register_Ns3EventId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('==')
@@ -1619,6 +2153,92 @@
                    [])
     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_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -1727,6 +2347,119 @@
                    [param('char const *', 'address')])
     return
 
+def register_Ns3Ipv4InterfaceAddress_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress() [constructor]
+    cls.add_constructor([])
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress(ns3::Ipv4Address local, ns3::Ipv4Mask mask) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'local'), param('ns3::Ipv4Mask', 'mask')])
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::Ipv4InterfaceAddress(ns3::Ipv4InterfaceAddress const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4InterfaceAddress const &', 'o')])
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceAddress::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceAddress::GetLocal() const [member function]
+    cls.add_method('GetLocal', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4Mask ns3::Ipv4InterfaceAddress::GetMask() const [member function]
+    cls.add_method('GetMask', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e ns3::Ipv4InterfaceAddress::GetScope() const [member function]
+    cls.add_method('GetScope', 
+                   'ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): bool ns3::Ipv4InterfaceAddress::IsSecondary() const [member function]
+    cls.add_method('IsSecondary', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetBroadcast(ns3::Ipv4Address broadcast) [member function]
+    cls.add_method('SetBroadcast', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'broadcast')])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetLocal(ns3::Ipv4Address local) [member function]
+    cls.add_method('SetLocal', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'local')])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetMask(ns3::Ipv4Mask mask) [member function]
+    cls.add_method('SetMask', 
+                   'void', 
+                   [param('ns3::Ipv4Mask', 'mask')])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetPrimary() [member function]
+    cls.add_method('SetPrimary', 
+                   'void', 
+                   [])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetScope(ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e scope) [member function]
+    cls.add_method('SetScope', 
+                   'void', 
+                   [param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')])
+    ## ipv4-interface-address.h (module 'internet'): void ns3::Ipv4InterfaceAddress::SetSecondary() [member function]
+    cls.add_method('SetSecondary', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3Ipv4InterfaceContainer_methods(root_module, cls):
+    ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer(ns3::Ipv4InterfaceContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4InterfaceContainer const &', 'arg0')])
+    ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer() [constructor]
+    cls.add_constructor([])
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ipv4InterfaceContainer', 'other')])
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface')])
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(std::pair<ns3::Ptr<ns3::Ipv4>,unsigned int> ipInterfacePair) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int >', 'ipInterfacePair')])
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(std::string ipv4Name, uint32_t interface) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'ipv4Name'), param('uint32_t', 'interface')])
+    ## ipv4-interface-container.h (module 'internet'): __gnu_cxx::__normal_iterator<const std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int>*,std::vector<std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int>, std::allocator<std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int> > > > ns3::Ipv4InterfaceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int > const, std::vector< std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int > > >', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): __gnu_cxx::__normal_iterator<const std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int>*,std::vector<std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int>, std::allocator<std::pair<ns3::Ptr<ns3::Ipv4>, unsigned int> > > > ns3::Ipv4InterfaceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int > const, std::vector< std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int > > >', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): std::pair<ns3::Ptr<ns3::Ipv4>,unsigned int> ns3::Ipv4InterfaceContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'std::pair< ns3::Ptr< ns3::Ipv4 >, unsigned int >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4InterfaceContainer::GetAddress(uint32_t i, uint32_t j=0) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'i'), param('uint32_t', 'j', default_value='0')], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): uint32_t ns3::Ipv4InterfaceContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::SetMetric(uint32_t i, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('uint16_t', 'metric')])
+    return
+
 def register_Ns3Ipv4Mask_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -1989,6 +2722,138 @@
                    [param('uint8_t *', 'address')])
     return
 
+def register_Ns3Ipv6InterfaceAddress_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress() [constructor]
+    cls.add_constructor([])
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'address')])
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6Address address, ns3::Ipv6Prefix prefix) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'prefix')])
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Ipv6InterfaceAddress(ns3::Ipv6InterfaceAddress const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6InterfaceAddress const &', 'o')])
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceAddress::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): uint32_t ns3::Ipv6InterfaceAddress::GetNsDadUid() const [member function]
+    cls.add_method('GetNsDadUid', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6Prefix ns3::Ipv6InterfaceAddress::GetPrefix() const [member function]
+    cls.add_method('GetPrefix', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::Scope_e ns3::Ipv6InterfaceAddress::GetScope() const [member function]
+    cls.add_method('GetScope', 
+                   'ns3::Ipv6InterfaceAddress::Scope_e', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): ns3::Ipv6InterfaceAddress::State_e ns3::Ipv6InterfaceAddress::GetState() const [member function]
+    cls.add_method('GetState', 
+                   'ns3::Ipv6InterfaceAddress::State_e', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): bool ns3::Ipv6InterfaceAddress::IsInSameSubnet(ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsInSameSubnet', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
+    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetNsDadUid(uint32_t uid) [member function]
+    cls.add_method('SetNsDadUid', 
+                   'void', 
+                   [param('uint32_t', 'uid')])
+    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetScope(ns3::Ipv6InterfaceAddress::Scope_e scope) [member function]
+    cls.add_method('SetScope', 
+                   'void', 
+                   [param('ns3::Ipv6InterfaceAddress::Scope_e', 'scope')])
+    ## ipv6-interface-address.h (module 'internet'): void ns3::Ipv6InterfaceAddress::SetState(ns3::Ipv6InterfaceAddress::State_e state) [member function]
+    cls.add_method('SetState', 
+                   'void', 
+                   [param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
+    return
+
+def register_Ns3Ipv6InterfaceContainer_methods(root_module, cls):
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6InterfaceContainer::Ipv6InterfaceContainer(ns3::Ipv6InterfaceContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6InterfaceContainer const &', 'arg0')])
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6InterfaceContainer::Ipv6InterfaceContainer() [constructor]
+    cls.add_constructor([])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer & c) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ipv6InterfaceContainer &', 'c')])
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(std::string ipv6Name, uint32_t interface) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'ipv6Name'), param('uint32_t', 'interface')])
+    ## ipv6-interface-container.h (module 'internet'): __gnu_cxx::__normal_iterator<const std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int>*,std::vector<std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int>, std::allocator<std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int> > > > ns3::Ipv6InterfaceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< std::pair< ns3::Ptr< ns3::Ipv6 >, unsigned int > const, std::vector< std::pair< ns3::Ptr< ns3::Ipv6 >, unsigned int > > >', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): __gnu_cxx::__normal_iterator<const std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int>*,std::vector<std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int>, std::allocator<std::pair<ns3::Ptr<ns3::Ipv6>, unsigned int> > > > ns3::Ipv6InterfaceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< std::pair< ns3::Ptr< ns3::Ipv6 >, unsigned int > const, std::vector< std::pair< ns3::Ptr< ns3::Ipv6 >, unsigned int > > >', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6InterfaceContainer::GetAddress(uint32_t i, uint32_t j) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'i'), param('uint32_t', 'j')], 
+                   is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): uint32_t ns3::Ipv6InterfaceContainer::GetInterfaceIndex(uint32_t i) const [member function]
+    cls.add_method('GetInterfaceIndex', 
+                   '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', 
+                   [], 
+                   is_const=True)
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::SetDefaultRoute(uint32_t i, uint32_t router) [member function]
+    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')])
+    return
+
 def register_Ns3Ipv6Prefix_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -2129,24 +2994,79 @@
                    'void', 
                    [param('ns3::Mac48Address', 'originator'), param('uint8_t', 'tid')], 
                    is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3MacLowDcfListener_methods(root_module, cls):
-    ## mac-low.h (module 'wifi'): ns3::MacLowDcfListener::MacLowDcfListener(ns3::MacLowDcfListener const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MacLowDcfListener const &', 'arg0')])
-    ## mac-low.h (module 'wifi'): ns3::MacLowDcfListener::MacLowDcfListener() [constructor]
-    cls.add_constructor([])
-    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::AckTimeoutReset() [member function]
-    cls.add_method('AckTimeoutReset', 
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
                    'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::AckTimeoutStart(ns3::Time duration) [member function]
-    cls.add_method('AckTimeoutStart', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::CompleteTransfer(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('CompleteTransfer', 
                    'void', 
-                   [param('ns3::Time', 'duration')], 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLowBlockAckEventListener::GetBlockAckAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBlockAckAgreementExists', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::CtsTimeoutReset() [member function]
+    ## mac-low.h (module 'wifi'): uint32_t ns3::MacLowBlockAckEventListener::GetNOutstandingPackets(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint32_t ns3::MacLowBlockAckEventListener::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint16_t ns3::MacLowBlockAckEventListener::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::MacLowBlockAckEventListener::GetQueue() [member function]
+    cls.add_method('GetQueue', 
+                   'ns3::Ptr< ns3::WifiMacQueue >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::MacLowBlockAckEventListener::PeekNextPacketInBaQueue(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketInBaQueue', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint16_t ns3::MacLowBlockAckEventListener::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::RemoveFromBaQueue(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveFromBaQueue', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::SetAmpdu(bool ampdu) [member function]
+    cls.add_method('SetAmpdu', 
+                   'void', 
+                   [param('bool', 'ampdu')], 
+                   is_virtual=True)
+    return
+
+def register_Ns3MacLowDcfListener_methods(root_module, cls):
+    ## mac-low.h (module 'wifi'): ns3::MacLowDcfListener::MacLowDcfListener(ns3::MacLowDcfListener const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MacLowDcfListener const &', 'arg0')])
+    ## mac-low.h (module 'wifi'): ns3::MacLowDcfListener::MacLowDcfListener() [constructor]
+    cls.add_constructor([])
+    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::AckTimeoutReset() [member function]
+    cls.add_method('AckTimeoutReset', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::AckTimeoutStart(ns3::Time duration) [member function]
+    cls.add_method('AckTimeoutStart', 
+                   'void', 
+                   [param('ns3::Time', 'duration')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowDcfListener::CtsTimeoutReset() [member function]
     cls.add_method('CtsTimeoutReset', 
                    'void', 
                    [], 
@@ -2188,10 +3108,10 @@
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, ns3::WifiMode txMode) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source')], 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('ns3::WifiMode', 'txMode')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
@@ -2459,10 +3379,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -2934,10 +3854,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -2984,6 +3904,97 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3PcapHelperForIpv4_methods(root_module, cls):
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4::PcapHelperForIpv4(ns3::PcapHelperForIpv4 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PcapHelperForIpv4 const &', 'arg0')])
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4::PcapHelperForIpv4() [constructor]
+    cls.add_constructor([])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, std::string ipv4Name, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ipv4Name'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, ns3::Ipv4InterfaceContainer c) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ipv4InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4(std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv4', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4All(std::string prefix) [member function]
+    cls.add_method('EnablePcapIpv4All', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv4::EnablePcapIpv4Internal(std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv4Internal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3PcapHelperForIpv6_methods(root_module, cls):
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6::PcapHelperForIpv6(ns3::PcapHelperForIpv6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PcapHelperForIpv6 const &', 'arg0')])
+    ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6::PcapHelperForIpv6() [constructor]
+    cls.add_constructor([])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, std::string ipv6Name, uint32_t interface, bool explicitFilename=false) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('std::string', 'ipv6Name'), param('uint32_t', 'interface'), param('bool', 'explicitFilename', default_value='false')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, ns3::Ipv6InterfaceContainer c) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ipv6InterfaceContainer', 'c')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, ns3::NodeContainer n) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::NodeContainer', 'n')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6(std::string prefix, uint32_t nodeid, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv6', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('uint32_t', 'nodeid'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6All(std::string prefix) [member function]
+    cls.add_method('EnablePcapIpv6All', 
+                   'void', 
+                   [param('std::string', 'prefix')])
+    ## internet-trace-helper.h (module 'internet'): void ns3::PcapHelperForIpv6::EnablePcapIpv6Internal(std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv6Internal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3SchInfo_methods(root_module, cls):
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(ns3::SchInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SchInfo const &', 'arg0')])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo() [constructor]
+    cls.add_constructor([])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess')])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::SchInfo(uint32_t channel, bool immediate, uint32_t channelAccess, ns3::EdcaParameterSet edca) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'immediate'), param('uint32_t', 'channelAccess'), param('ns3::EdcaParameterSet', 'edca')])
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::channelNumber [variable]
+    cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::edcaParameterSet [variable]
+    cls.add_instance_attribute('edcaParameterSet', 'ns3::EdcaParameterSet', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::extendedAccess [variable]
+    cls.add_instance_attribute('extendedAccess', 'uint8_t', is_const=False)
+    ## channel-scheduler.h (module 'wave'): ns3::SchInfo::immediateAccess [variable]
+    cls.add_instance_attribute('immediateAccess', 'bool', 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([])
@@ -3214,6 +4225,40 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3TxInfo_methods(root_module, cls):
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::TxInfo(ns3::TxInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TxInfo const &', 'arg0')])
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::TxInfo() [constructor]
+    cls.add_constructor([])
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::TxInfo(uint32_t channel, uint32_t prio=7, ns3::WifiMode rate=ns3::WifiMode(), uint32_t powerLevel=8) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('uint32_t', 'prio', default_value='7'), param('ns3::WifiMode', 'rate', default_value='ns3::WifiMode()'), param('uint32_t', 'powerLevel', default_value='8')])
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::channelNumber [variable]
+    cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::dataRate [variable]
+    cls.add_instance_attribute('dataRate', 'ns3::WifiMode', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::priority [variable]
+    cls.add_instance_attribute('priority', 'uint32_t', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxInfo::txPowerLevel [variable]
+    cls.add_instance_attribute('txPowerLevel', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3TxProfile_methods(root_module, cls):
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::TxProfile(ns3::TxProfile const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TxProfile const &', 'arg0')])
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::TxProfile() [constructor]
+    cls.add_constructor([])
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::TxProfile(uint32_t channel, bool adapt=true, uint32_t powerLevel=4) [constructor]
+    cls.add_constructor([param('uint32_t', 'channel'), param('bool', 'adapt', default_value='true'), param('uint32_t', 'powerLevel', default_value='4')])
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::adaptable [variable]
+    cls.add_instance_attribute('adaptable', 'bool', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::channelNumber [variable]
+    cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::dataRate [variable]
+    cls.add_instance_attribute('dataRate', 'ns3::WifiMode', is_const=False)
+    ## wave-net-device.h (module 'wave'): ns3::TxProfile::txPowerLevel [variable]
+    cls.add_instance_attribute('txPowerLevel', 'uint32_t', is_const=False)
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -3236,7 +4281,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3287,6 +4337,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3363,6 +4418,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3397,12 +4456,44 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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_Ns3Vector2D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(ns3::Vector2D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D(double _x, double _y) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y')])
+    ## vector.h (module 'core'): ns3::Vector2D::Vector2D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector2D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    return
+
+def register_Ns3Vector3D_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(ns3::Vector3D const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D(double _x, double _y, double _z) [constructor]
+    cls.add_constructor([param('double', '_x'), param('double', '_y'), param('double', '_z')])
+    ## vector.h (module 'core'): ns3::Vector3D::Vector3D() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3D::x [variable]
+    cls.add_instance_attribute('x', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::y [variable]
+    cls.add_instance_attribute('y', 'double', is_const=False)
+    ## vector.h (module 'core'): ns3::Vector3D::z [variable]
+    cls.add_instance_attribute('z', 'double', is_const=False)
+    return
+
 def register_Ns3VendorSpecificContentManager_methods(root_module, cls):
     ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificContentManager::VendorSpecificContentManager(ns3::VendorSpecificContentManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::VendorSpecificContentManager const &', 'arg0')])
@@ -3416,12 +4507,127 @@
     cls.add_method('FindVscCallback', 
                    'ns3::VscCallback', 
                    [param('ns3::OrganizationIdentifier &', 'oi')])
+    ## vendor-specific-action.h (module 'wave'): bool ns3::VendorSpecificContentManager::IsVscCallbackRegistered(ns3::OrganizationIdentifier & oi) [member function]
+    cls.add_method('IsVscCallbackRegistered', 
+                   'bool', 
+                   [param('ns3::OrganizationIdentifier &', 'oi')])
     ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificContentManager::RegisterVscCallback(ns3::OrganizationIdentifier oi, ns3::VscCallback cb) [member function]
     cls.add_method('RegisterVscCallback', 
                    'void', 
                    [param('ns3::OrganizationIdentifier', 'oi'), param('ns3::VscCallback', 'cb')])
     return
 
+def register_Ns3VsaInfo_methods(root_module, cls):
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::VsaInfo(ns3::VsaInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VsaInfo const &', 'arg0')])
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::VsaInfo(ns3::Mac48Address peer, ns3::OrganizationIdentifier identifier, uint8_t manageId, ns3::Ptr<ns3::Packet> vscPacket, uint32_t channel, uint8_t repeat, ns3::VsaTransmitInterval interval) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address', 'peer'), param('ns3::OrganizationIdentifier', 'identifier'), param('uint8_t', 'manageId'), param('ns3::Ptr< ns3::Packet >', 'vscPacket'), param('uint32_t', 'channel'), param('uint8_t', 'repeat'), param('ns3::VsaTransmitInterval', 'interval')])
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::channelNumber [variable]
+    cls.add_instance_attribute('channelNumber', 'uint32_t', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::managementId [variable]
+    cls.add_instance_attribute('managementId', 'uint8_t', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::oi [variable]
+    cls.add_instance_attribute('oi', 'ns3::OrganizationIdentifier', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::peer [variable]
+    cls.add_instance_attribute('peer', 'ns3::Mac48Address', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::repeatRate [variable]
+    cls.add_instance_attribute('repeatRate', 'uint8_t', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::sendInterval [variable]
+    cls.add_instance_attribute('sendInterval', 'ns3::VsaTransmitInterval', is_const=False)
+    ## vsa-manager.h (module 'wave'): ns3::VsaInfo::vsc [variable]
+    cls.add_instance_attribute('vsc', 'ns3::Ptr< ns3::Packet >', is_const=False)
+    return
+
+def register_Ns3WaveBsmHelper_methods(root_module, cls):
+    ## wave-bsm-helper.h (module 'wave'): ns3::WaveBsmHelper::WaveBsmHelper(ns3::WaveBsmHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WaveBsmHelper const &', 'arg0')])
+    ## wave-bsm-helper.h (module 'wave'): ns3::WaveBsmHelper::WaveBsmHelper() [constructor]
+    cls.add_constructor([])
+    ## wave-bsm-helper.h (module 'wave'): int64_t ns3::WaveBsmHelper::AssignStreams(ns3::NodeContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NodeContainer', 'c'), param('int64_t', 'stream')])
+    ## wave-bsm-helper.h (module 'wave'): static std::vector<int, std::allocator<int> > & ns3::WaveBsmHelper::GetNodesMoving() [member function]
+    cls.add_method('GetNodesMoving', 
+                   'std::vector< int > &', 
+                   [], 
+                   is_static=True)
+    ## wave-bsm-helper.h (module 'wave'): ns3::Ptr<ns3::WaveBsmStats> ns3::WaveBsmHelper::GetWaveBsmStats() [member function]
+    cls.add_method('GetWaveBsmStats', 
+                   'ns3::Ptr< ns3::WaveBsmStats >', 
+                   [])
+    ## wave-bsm-helper.h (module 'wave'): ns3::ApplicationContainer ns3::WaveBsmHelper::Install(ns3::Ipv4InterfaceContainer i) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ipv4InterfaceContainer', 'i')], 
+                   is_const=True)
+    ## wave-bsm-helper.h (module 'wave'): ns3::ApplicationContainer ns3::WaveBsmHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True)
+    ## wave-bsm-helper.h (module 'wave'): void ns3::WaveBsmHelper::Install(ns3::Ipv4InterfaceContainer & i, ns3::Time totalTime, uint32_t wavePacketSize, ns3::Time waveInterval, double gpsAccuracyNs, std::vector<double, std::allocator<double> > ranges, int chAccessMode, ns3::Time txMaxDelay) [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::Ipv4InterfaceContainer &', 'i'), param('ns3::Time', 'totalTime'), param('uint32_t', 'wavePacketSize'), param('ns3::Time', 'waveInterval'), param('double', 'gpsAccuracyNs'), param('std::vector< double >', 'ranges'), param('int', 'chAccessMode'), param('ns3::Time', 'txMaxDelay')])
+    ## wave-bsm-helper.h (module 'wave'): void ns3::WaveBsmHelper::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_Ns3WaveHelper_methods(root_module, cls):
+    ## wave-helper.h (module 'wave'): ns3::WaveHelper::WaveHelper(ns3::WaveHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WaveHelper const &', 'arg0')])
+    ## wave-helper.h (module 'wave'): ns3::WaveHelper::WaveHelper() [constructor]
+    cls.add_constructor([])
+    ## wave-helper.h (module 'wave'): int64_t ns3::WaveHelper::AssignStreams(ns3::NetDeviceContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NetDeviceContainer', 'c'), param('int64_t', 'stream')])
+    ## wave-helper.h (module 'wave'): void ns3::WaveHelper::CreateMacForChannel(std::vector<unsigned int, std::allocator<unsigned int> > channelNumbers) [member function]
+    cls.add_method('CreateMacForChannel', 
+                   'void', 
+                   [param('std::vector< unsigned int >', 'channelNumbers')])
+    ## wave-helper.h (module 'wave'): void ns3::WaveHelper::CreatePhys(uint32_t phys) [member function]
+    cls.add_method('CreatePhys', 
+                   'void', 
+                   [param('uint32_t', 'phys')])
+    ## wave-helper.h (module 'wave'): static ns3::WaveHelper ns3::WaveHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::WaveHelper', 
+                   [], 
+                   is_static=True)
+    ## wave-helper.h (module 'wave'): static void ns3::WaveHelper::EnableLogComponents() [member function]
+    cls.add_method('EnableLogComponents', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## wave-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::WaveHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & mac, ns3::NodeContainer c) const [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('ns3::NodeContainer', 'c')], 
+                   is_const=True, is_virtual=True)
+    ## wave-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::WaveHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & mac, ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True, is_virtual=True)
+    ## wave-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::WaveHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & mac, std::string nodeName) const [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'mac'), param('std::string', 'nodeName')], 
+                   is_const=True, is_virtual=True)
+    ## wave-helper.h (module 'wave'): void ns3::WaveHelper::SetChannelScheduler(std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetChannelScheduler', 
+                   'void', 
+                   [param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## wave-helper.h (module 'wave'): void ns3::WaveHelper::SetRemoteStationManager(std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetRemoteStationManager', 
+                   'void', 
+                   [param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    return
+
 def register_Ns3WifiHelper_methods(root_module, cls):
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper::WifiHelper(ns3::WifiHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiHelper const &', 'arg0')])
@@ -3550,10 +4756,10 @@
     cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
-    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::WifiNetDevice> device) const [member function]
+    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::WifiNetDevice >', 'device')], 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
@@ -3650,6 +4856,8 @@
     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_ness [variable]
+    cls.add_instance_attribute('m_ness', 'uint32_t', 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]
@@ -3737,6 +4945,87 @@
                    [param('uint8_t', 'powerlevel')])
     return
 
+def register_Ns3YansWifiChannelHelper_methods(root_module, cls):
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper::YansWifiChannelHelper(ns3::YansWifiChannelHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::YansWifiChannelHelper const &', 'arg0')])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiChannelHelper::YansWifiChannelHelper() [constructor]
+    cls.add_constructor([])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiChannelHelper::AddPropagationLoss(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddPropagationLoss', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## yans-wifi-helper.h (module 'wifi'): int64_t ns3::YansWifiChannelHelper::AssignStreams(ns3::Ptr<ns3::YansWifiChannel> c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::Ptr< ns3::YansWifiChannel >', 'c'), param('int64_t', 'stream')])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::YansWifiChannel> ns3::YansWifiChannelHelper::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::YansWifiChannel >', 
+                   [], 
+                   is_const=True)
+    ## yans-wifi-helper.h (module 'wifi'): static ns3::YansWifiChannelHelper ns3::YansWifiChannelHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::YansWifiChannelHelper', 
+                   [], 
+                   is_static=True)
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiChannelHelper::SetPropagationDelay(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetPropagationDelay', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    return
+
+def register_Ns3YansWifiPhyHelper_methods(root_module, cls):
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::YansWifiPhyHelper(ns3::YansWifiPhyHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::YansWifiPhyHelper const &', 'arg0')])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::YansWifiPhyHelper::YansWifiPhyHelper() [constructor]
+    cls.add_constructor([])
+    ## yans-wifi-helper.h (module 'wifi'): static ns3::YansWifiPhyHelper ns3::YansWifiPhyHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::YansWifiPhyHelper', 
+                   [], 
+                   is_static=True)
+    ## yans-wifi-helper.h (module 'wifi'): uint32_t ns3::YansWifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetChannel(ns3::Ptr<ns3::YansWifiChannel> channel) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::YansWifiChannel >', 'channel')])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetChannel(std::string channelName) [member function]
+    cls.add_method('SetChannel', 
+                   'void', 
+                   [param('std::string', 'channelName')])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetErrorRateModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetErrorRateModel', 
+                   'void', 
+                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::SetPcapDataLinkType(ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes dlt) [member function]
+    cls.add_method('SetPcapDataLinkType', 
+                   'void', 
+                   [param('ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
+    ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -3745,9 +5034,9 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
@@ -3866,92 +5155,451 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
-def register_Ns3HigherDataTxVectorTag_methods(root_module, cls):
-    ## higher-tx-tag.h (module 'wave'): ns3::HigherDataTxVectorTag::HigherDataTxVectorTag(ns3::HigherDataTxVectorTag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::HigherDataTxVectorTag const &', 'arg0')])
-    ## higher-tx-tag.h (module 'wave'): ns3::HigherDataTxVectorTag::HigherDataTxVectorTag() [constructor]
-    cls.add_constructor([])
-    ## higher-tx-tag.h (module 'wave'): ns3::HigherDataTxVectorTag::HigherDataTxVectorTag(ns3::WifiTxVector dataTxVector, bool adapter) [constructor]
-    cls.add_constructor([param('ns3::WifiTxVector', 'dataTxVector'), param('bool', 'adapter')])
-    ## higher-tx-tag.h (module 'wave'): void ns3::HigherDataTxVectorTag::Deserialize(ns3::TagBuffer i) [member function]
+def register_Ns3HigherLayerTxVectorTag_methods(root_module, cls):
+    ## higher-tx-tag.h (module 'wave'): ns3::HigherLayerTxVectorTag::HigherLayerTxVectorTag(ns3::HigherLayerTxVectorTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HigherLayerTxVectorTag const &', 'arg0')])
+    ## higher-tx-tag.h (module 'wave'): ns3::HigherLayerTxVectorTag::HigherLayerTxVectorTag() [constructor]
+    cls.add_constructor([])
+    ## higher-tx-tag.h (module 'wave'): ns3::HigherLayerTxVectorTag::HigherLayerTxVectorTag(ns3::WifiTxVector txVector, bool adaptable) [constructor]
+    cls.add_constructor([param('ns3::WifiTxVector', 'txVector'), param('bool', 'adaptable')])
+    ## higher-tx-tag.h (module 'wave'): void ns3::HigherLayerTxVectorTag::Deserialize(ns3::TagBuffer i) [member function]
     cls.add_method('Deserialize', 
                    'void', 
                    [param('ns3::TagBuffer', 'i')], 
                    is_virtual=True)
-    ## higher-tx-tag.h (module 'wave'): ns3::WifiTxVector ns3::HigherDataTxVectorTag::GetDataTxVector() const [member function]
-    cls.add_method('GetDataTxVector', 
-                   'ns3::WifiTxVector', 
-                   [], 
-                   is_const=True)
-    ## higher-tx-tag.h (module 'wave'): ns3::TypeId ns3::HigherDataTxVectorTag::GetInstanceTypeId() const [member function]
+    ## higher-tx-tag.h (module 'wave'): ns3::TypeId ns3::HigherLayerTxVectorTag::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## higher-tx-tag.h (module 'wave'): uint32_t ns3::HigherDataTxVectorTag::GetSerializedSize() const [member function]
+    ## higher-tx-tag.h (module 'wave'): uint32_t ns3::HigherLayerTxVectorTag::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## higher-tx-tag.h (module 'wave'): static ns3::TypeId ns3::HigherDataTxVectorTag::GetTypeId() [member function]
+    ## higher-tx-tag.h (module 'wave'): ns3::WifiTxVector ns3::HigherLayerTxVectorTag::GetTxVector() const [member function]
+    cls.add_method('GetTxVector', 
+                   'ns3::WifiTxVector', 
+                   [], 
+                   is_const=True)
+    ## higher-tx-tag.h (module 'wave'): static ns3::TypeId ns3::HigherLayerTxVectorTag::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## higher-tx-tag.h (module 'wave'): bool ns3::HigherDataTxVectorTag::IsAdapter() const [member function]
-    cls.add_method('IsAdapter', 
+    ## higher-tx-tag.h (module 'wave'): bool ns3::HigherLayerTxVectorTag::IsAdaptable() const [member function]
+    cls.add_method('IsAdaptable', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## higher-tx-tag.h (module 'wave'): void ns3::HigherDataTxVectorTag::Print(std::ostream & os) const [member function]
+    ## higher-tx-tag.h (module 'wave'): void ns3::HigherLayerTxVectorTag::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## higher-tx-tag.h (module 'wave'): void ns3::HigherDataTxVectorTag::Serialize(ns3::TagBuffer i) const [member function]
+    ## higher-tx-tag.h (module 'wave'): void ns3::HigherLayerTxVectorTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::TagBuffer', 'i')], 
                    is_const=True, is_virtual=True)
     return
 
-def register_Ns3MgtAddBaRequestHeader_methods(root_module, cls):
-    ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader::MgtAddBaRequestHeader(ns3::MgtAddBaRequestHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MgtAddBaRequestHeader const &', 'arg0')])
-    ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader::MgtAddBaRequestHeader() [constructor]
+def register_Ns3InternetStackHelper_methods(root_module, cls):
+    ## internet-stack-helper.h (module 'internet'): ns3::InternetStackHelper::InternetStackHelper() [constructor]
     cls.add_constructor([])
-    ## mgt-headers.h (module 'wifi'): uint32_t ns3::MgtAddBaRequestHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    ## internet-stack-helper.h (module 'internet'): ns3::InternetStackHelper::InternetStackHelper(ns3::InternetStackHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InternetStackHelper const &', 'arg0')])
+    ## internet-stack-helper.h (module 'internet'): int64_t ns3::InternetStackHelper::AssignStreams(ns3::NodeContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NodeContainer', 'c'), param('int64_t', 'stream')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::Install(std::string nodeName) const [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('std::string', 'nodeName')], 
+                   is_const=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::Install(ns3::NodeContainer c) const [member function]
+    cls.add_method('Install', 
+                   'void', 
+                   [param('ns3::NodeContainer', 'c')], 
+                   is_const=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::InstallAll() const [member function]
+    cls.add_method('InstallAll', 
+                   'void', 
+                   [], 
+                   is_const=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::Reset() [member function]
+    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', 
+                   [param('bool', 'enable')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetRoutingHelper(ns3::Ipv4RoutingHelper const & routing) [member function]
+    cls.add_method('SetRoutingHelper', 
+                   'void', 
+                   [param('ns3::Ipv4RoutingHelper const &', 'routing')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetRoutingHelper(ns3::Ipv6RoutingHelper const & routing) [member function]
+    cls.add_method('SetRoutingHelper', 
+                   'void', 
+                   [param('ns3::Ipv6RoutingHelper const &', 'routing')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetTcp(std::string tid) [member function]
+    cls.add_method('SetTcp', 
+                   'void', 
+                   [param('std::string', 'tid')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::SetTcp(std::string tid, std::string attr, ns3::AttributeValue const & val) [member function]
+    cls.add_method('SetTcp', 
+                   'void', 
+                   [param('std::string', 'tid'), param('std::string', 'attr'), param('ns3::AttributeValue const &', 'val')])
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::EnableAsciiIpv4Internal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv4Internal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::EnableAsciiIpv6Internal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiIpv6Internal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::EnablePcapIpv4Internal(std::string prefix, ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv4Internal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv4 >', 'ipv4'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## internet-stack-helper.h (module 'internet'): void ns3::InternetStackHelper::EnablePcapIpv6Internal(std::string prefix, ns3::Ptr<ns3::Ipv6> ipv6, uint32_t interface, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapIpv6Internal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Ipv4Header_methods(root_module, cls):
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::Ipv4Header(ns3::Ipv4Header const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4Header const &', 'arg0')])
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::Ipv4Header() [constructor]
+    cls.add_constructor([])
+    ## ipv4-header.h (module 'internet'): uint32_t ns3::Ipv4Header::Deserialize(ns3::Buffer::Iterator start) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetBufferSize() const [member function]
-    cls.add_method('GetBufferSize', 
+    ## ipv4-header.h (module 'internet'): std::string ns3::Ipv4Header::DscpTypeToString(ns3::Ipv4Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv4Header::DscpType', 'dscp')], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): std::string ns3::Ipv4Header::EcnTypeToString(ns3::Ipv4Header::EcnType ecn) const [member function]
+    cls.add_method('EcnTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv4Header::EcnType', 'ecn')], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::EnableChecksum() [member function]
+    cls.add_method('EnableChecksum', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Header::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::DscpType ns3::Ipv4Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv4Header::DscpType', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Header::EcnType ns3::Ipv4Header::GetEcn() const [member function]
+    cls.add_method('GetEcn', 
+                   'ns3::Ipv4Header::EcnType', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetFragmentOffset() const [member function]
+    cls.add_method('GetFragmentOffset', 
                    'uint16_t', 
                    [], 
                    is_const=True)
-    ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAddBaRequestHeader::GetInstanceTypeId() const [member function]
+    ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetIdentification() const [member function]
+    cls.add_method('GetIdentification', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): ns3::TypeId ns3::Ipv4Header::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): uint32_t ns3::MgtAddBaRequestHeader::GetSerializedSize() const [member function]
+    ## ipv4-header.h (module 'internet'): uint16_t ns3::Ipv4Header::GetPayloadSize() const [member function]
+    cls.add_method('GetPayloadSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): uint32_t ns3::Ipv4Header::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetStartingSequence() const [member function]
-    cls.add_method('GetStartingSequence', 
-                   'uint16_t', 
+    ## ipv4-header.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Header::GetSource() const [member function]
+    cls.add_method('GetSource', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## mgt-headers.h (module 'wifi'): uint8_t ns3::MgtAddBaRequestHeader::GetTid() const [member function]
-    cls.add_method('GetTid', 
+    ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetTos() const [member function]
+    cls.add_method('GetTos', 
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetTimeout() const [member function]
-    cls.add_method('GetTimeout', 
+    ## ipv4-header.h (module 'internet'): uint8_t ns3::Ipv4Header::GetTtl() const [member function]
+    cls.add_method('GetTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): static ns3::TypeId ns3::Ipv4Header::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsChecksumOk() const [member function]
+    cls.add_method('IsChecksumOk', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsDontFragment() const [member function]
+    cls.add_method('IsDontFragment', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): bool ns3::Ipv4Header::IsLastFragment() const [member function]
+    cls.add_method('IsLastFragment', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDestination(ns3::Ipv4Address destination) [member function]
+    cls.add_method('SetDestination', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'destination')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDontFragment() [member function]
+    cls.add_method('SetDontFragment', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetDscp(ns3::Ipv4Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv4Header::DscpType', 'dscp')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetEcn(ns3::Ipv4Header::EcnType ecn) [member function]
+    cls.add_method('SetEcn', 
+                   'void', 
+                   [param('ns3::Ipv4Header::EcnType', 'ecn')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetFragmentOffset(uint16_t offsetBytes) [member function]
+    cls.add_method('SetFragmentOffset', 
+                   'void', 
+                   [param('uint16_t', 'offsetBytes')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetIdentification(uint16_t identification) [member function]
+    cls.add_method('SetIdentification', 
+                   'void', 
+                   [param('uint16_t', 'identification')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetLastFragment() [member function]
+    cls.add_method('SetLastFragment', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetMayFragment() [member function]
+    cls.add_method('SetMayFragment', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetMoreFragments() [member function]
+    cls.add_method('SetMoreFragments', 
+                   'void', 
+                   [])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetPayloadSize(uint16_t size) [member function]
+    cls.add_method('SetPayloadSize', 
+                   'void', 
+                   [param('uint16_t', 'size')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetProtocol(uint8_t num) [member function]
+    cls.add_method('SetProtocol', 
+                   'void', 
+                   [param('uint8_t', 'num')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetSource(ns3::Ipv4Address source) [member function]
+    cls.add_method('SetSource', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'source')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
+    ## ipv4-header.h (module 'internet'): void ns3::Ipv4Header::SetTtl(uint8_t ttl) [member function]
+    cls.add_method('SetTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
+    return
+
+def register_Ns3Ipv6Header_methods(root_module, cls):
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header(ns3::Ipv6Header const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6Header const &', 'arg0')])
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::Ipv6Header() [constructor]
+    cls.add_constructor([])
+    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetDestinationAddress() const [member function]
+    cls.add_method('GetDestinationAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
+    cls.add_method('GetFlowLabel', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): ns3::TypeId ns3::Ipv6Header::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetNextHeader() const [member function]
+    cls.add_method('GetNextHeader', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint16_t ns3::Ipv6Header::GetPayloadLength() const [member function]
+    cls.add_method('GetPayloadLength', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6Header::GetSourceAddress() const [member function]
+    cls.add_method('GetSourceAddress', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): uint8_t ns3::Ipv6Header::GetTrafficClass() const [member function]
+    cls.add_method('GetTrafficClass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-header.h (module 'internet'): static ns3::TypeId ns3::Ipv6Header::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDestinationAddress(ns3::Ipv6Address dst) [member function]
+    cls.add_method('SetDestinationAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
+    cls.add_method('SetFlowLabel', 
+                   'void', 
+                   [param('uint32_t', 'flow')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetHopLimit(uint8_t limit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'limit')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetNextHeader(uint8_t next) [member function]
+    cls.add_method('SetNextHeader', 
+                   'void', 
+                   [param('uint8_t', 'next')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetPayloadLength(uint16_t len) [member function]
+    cls.add_method('SetPayloadLength', 
+                   'void', 
+                   [param('uint16_t', 'len')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetSourceAddress(ns3::Ipv6Address src) [member function]
+    cls.add_method('SetSourceAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'src')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetTrafficClass(uint8_t traffic) [member function]
+    cls.add_method('SetTrafficClass', 
+                   'void', 
+                   [param('uint8_t', 'traffic')])
+    return
+
+def register_Ns3MgtAddBaRequestHeader_methods(root_module, cls):
+    ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader::MgtAddBaRequestHeader(ns3::MgtAddBaRequestHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MgtAddBaRequestHeader const &', 'arg0')])
+    ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader::MgtAddBaRequestHeader() [constructor]
+    cls.add_constructor([])
+    ## mgt-headers.h (module 'wifi'): uint32_t ns3::MgtAddBaRequestHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetBufferSize() const [member function]
+    cls.add_method('GetBufferSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAddBaRequestHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): uint32_t ns3::MgtAddBaRequestHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetStartingSequence() const [member function]
+    cls.add_method('GetStartingSequence', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): uint8_t ns3::MgtAddBaRequestHeader::GetTid() const [member function]
+    cls.add_method('GetTid', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): uint16_t ns3::MgtAddBaRequestHeader::GetTimeout() const [member function]
+    cls.add_method('GetTimeout', 
                    'uint16_t', 
                    [], 
                    is_const=True)
@@ -4622,6 +6270,10 @@
     cls.add_method('SetBlockAckThresholdForAc', 
                    'void', 
                    [param('ns3::AcIndex', 'ac'), param('uint8_t', 'threshold')])
+    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMpduAggregatorForAc(ns3::AcIndex ac, std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetMpduAggregatorForAc', 
+                   'void', 
+                   [param('ns3::AcIndex', 'ac'), param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()')])
     ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMsduAggregatorForAc(ns3::AcIndex ac, std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
     cls.add_method('SetMsduAggregatorForAc', 
                    'void', 
@@ -4638,6 +6290,89 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3RandomVariableStream_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream::RandomVariableStream() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetStream(int64_t stream) [member function]
+    cls.add_method('SetStream', 
+                   'void', 
+                   [param('int64_t', 'stream')])
+    ## random-variable-stream.h (module 'core'): int64_t ns3::RandomVariableStream::GetStream() const [member function]
+    cls.add_method('GetStream', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetAntithetic(bool isAntithetic) [member function]
+    cls.add_method('SetAntithetic', 
+                   'void', 
+                   [param('bool', 'isAntithetic')])
+    ## random-variable-stream.h (module 'core'): bool ns3::RandomVariableStream::IsAntithetic() const [member function]
+    cls.add_method('IsAntithetic', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::RandomVariableStream::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::RandomVariableStream::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): ns3::RngStream * ns3::RandomVariableStream::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::RngStream *', 
+                   [], 
+                   is_const=True, visibility='protected')
+    return
+
+def register_Ns3SequentialRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::SequentialRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable::SequentialRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): ns3::Ptr<ns3::RandomVariableStream> ns3::SequentialRandomVariable::GetIncrement() const [member function]
+    cls.add_method('GetIncrement', 
+                   'ns3::Ptr< ns3::RandomVariableStream >', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::SequentialRandomVariable::GetConsecutive() const [member function]
+    cls.add_method('GetConsecutive', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::SequentialRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    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([])
@@ -4686,6 +6421,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3ChannelCoordinationListener_Ns3Empty_Ns3DefaultDeleter__lt__ns3ChannelCoordinationListener__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >::SimpleRefCount(ns3::SimpleRefCount<ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter< ns3::ChannelCoordinationListener > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::ChannelCoordinationListener, ns3::empty, ns3::DefaultDeleter<ns3::ChannelCoordinationListener> >::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([])
@@ -4710,6 +6457,30 @@
                    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([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4MulticastRoute > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter< ns3::Ipv4Route > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >::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([])
@@ -4770,3370 +6541,6179 @@
                    is_static=True)
     return
 
-def register_Ns3Time_methods(root_module, cls):
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
-    cls.add_binary_comparison_operator('<=')
-    cls.add_binary_comparison_operator('!=')
-    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('>')
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    cls.add_binary_comparison_operator('>=')
-    ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
+def register_Ns3Socket_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::Socket::Socket(ns3::Socket const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Socket const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::Socket::Socket() [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(ns3::int64x64_t const & v) [constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', '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::TimeWithUnit ns3::Time::As(ns3::Time::Unit const unit) const [member function]
-    cls.add_method('As', 
-                   'ns3::TimeWithUnit', 
-                   [param('ns3::Time::Unit const', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int ns3::Time::Compare(ns3::Time const & o) const [member function]
-    cls.add_method('Compare', 
+    ## socket.h (module 'network'): int ns3::Socket::Bind(ns3::Address const & address) [member function]
+    cls.add_method('Bind', 
+                   'int', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Bind() [member function]
+    cls.add_method('Bind', 
                    'int', 
-                   [param('ns3::Time const &', 'o')], 
-                   is_const=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::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
-    cls.add_method('From', 
-                   'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
-    cls.add_method('FromDouble', 
-                   'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
-    cls.add_method('FromInteger', 
-                   'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
-    cls.add_method('GetDays', 
-                   'double', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
-    cls.add_method('GetDouble', 
-                   'double', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Bind6() [member function]
+    cls.add_method('Bind6', 
+                   'int', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
-    cls.add_method('GetFemtoSeconds', 
-                   'int64_t', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
+    cls.add_method('BindToNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Close() [member function]
+    cls.add_method('Close', 
+                   'int', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetHours() const [member function]
-    cls.add_method('GetHours', 
-                   'double', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Connect(ns3::Address const & address) [member function]
+    cls.add_method('Connect', 
+                   'int', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::Ptr<ns3::Socket> ns3::Socket::CreateSocket(ns3::Ptr<ns3::Node> node, ns3::TypeId tid) [member function]
+    cls.add_method('CreateSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::TypeId', 'tid')], 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::Socket::GetAllowBroadcast() const [member function]
+    cls.add_method('GetAllowBroadcast', 
+                   'bool', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
-    cls.add_method('GetInteger', 
-                   'int64_t', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Socket::GetBoundNetDevice() [member function]
+    cls.add_method('GetBoundNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [])
+    ## socket.h (module 'network'): ns3::Socket::SocketErrno ns3::Socket::GetErrno() const [member function]
+    cls.add_method('GetErrno', 
+                   'ns3::Socket::SocketErrno', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
-    cls.add_method('GetMicroSeconds', 
-                   'int64_t', 
+                   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)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
-    cls.add_method('GetMilliSeconds', 
-                   'int64_t', 
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTtl() const [member function]
+    cls.add_method('GetIpTtl', 
+                   'uint8_t', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetMinutes() const [member function]
-    cls.add_method('GetMinutes', 
-                   'double', 
+                   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)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetNanoSeconds() const [member function]
-    cls.add_method('GetNanoSeconds', 
-                   'int64_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)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetPicoSeconds() const [member function]
-    cls.add_method('GetPicoSeconds', 
-                   'int64_t', 
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Socket::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time::Unit ns3::Time::GetResolution() [member function]
-    cls.add_method('GetResolution', 
-                   'ns3::Time::Unit', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
+    cls.add_method('GetRxAvailable', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
-    cls.add_method('GetSeconds', 
-                   'double', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetSockName(ns3::Address & address) const [member function]
+    cls.add_method('GetSockName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Socket::SocketType ns3::Socket::GetSocketType() const [member function]
+    cls.add_method('GetSocketType', 
+                   'ns3::Socket::SocketType', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
-    cls.add_method('GetTimeStep', 
-                   'int64_t', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::Socket::GetTxAvailable() const [member function]
+    cls.add_method('GetTxAvailable', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::GetYears() const [member function]
-    cls.add_method('GetYears', 
-                   'double', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::Socket::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
-    cls.add_method('IsNegative', 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
+    cls.add_method('IsIpRecvTos', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
-    cls.add_method('IsPositive', 
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTtl() const [member function]
+    cls.add_method('IsIpRecvTtl', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
-    cls.add_method('IsStrictlyNegative', 
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvHopLimit() const [member function]
+    cls.add_method('IsIpv6RecvHopLimit', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
-    cls.add_method('IsStrictlyPositive', 
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvTclass() const [member function]
+    cls.add_method('IsIpv6RecvTclass', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
-    cls.add_method('IsZero', 
+    ## socket.h (module 'network'): bool ns3::Socket::IsRecvPktInfo() const [member function]
+    cls.add_method('IsRecvPktInfo', 
                    'bool', 
                    [], 
                    is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
-    cls.add_method('Max', 
-                   'ns3::Time', 
+    ## socket.h (module 'network'): int ns3::Socket::Listen() [member function]
+    cls.add_method('Listen', 
+                   'int', 
                    [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
-    cls.add_method('Min', 
-                   'ns3::Time', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv(uint32_t maxSize, uint32_t flags) [member function]
+    cls.add_method('Recv', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'maxSize'), param('uint32_t', 'flags')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv() [member function]
+    cls.add_method('Recv', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [])
+    ## socket.h (module 'network'): int ns3::Socket::Recv(uint8_t * buf, uint32_t size, uint32_t flags) [member function]
+    cls.add_method('Recv', 
+                   'int', 
+                   [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(uint32_t maxSize, uint32_t flags, ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'maxSize'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Address &', 'fromAddress')])
+    ## socket.h (module 'network'): int ns3::Socket::RecvFrom(uint8_t * buf, uint32_t size, uint32_t flags, ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'int', 
+                   [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')])
+    ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p, uint32_t flags) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## socket.h (module 'network'): int ns3::Socket::Send(uint8_t const * buf, uint32_t size, uint32_t flags) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+    ## socket.h (module 'network'): int ns3::Socket::SendTo(ns3::Ptr<ns3::Packet> p, uint32_t flags, ns3::Address const & toAddress) [member function]
+    cls.add_method('SendTo', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags'), param('ns3::Address const &', 'toAddress')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::SendTo(uint8_t const * buf, uint32_t size, uint32_t flags, ns3::Address const & address) [member function]
+    cls.add_method('SendTo', 
+                   'int', 
+                   [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address const &', 'address')])
+    ## socket.h (module 'network'): void ns3::Socket::SetAcceptCallback(ns3::Callback<bool, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionRequest, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> newConnectionCreated) [member function]
+    cls.add_method('SetAcceptCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionRequest'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'newConnectionCreated')])
+    ## socket.h (module 'network'): bool ns3::Socket::SetAllowBroadcast(bool allowBroadcast) [member function]
+    cls.add_method('SetAllowBroadcast', 
+                   'bool', 
+                   [param('bool', 'allowBroadcast')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetCloseCallbacks(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> normalClose, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> errorClose) [member function]
+    cls.add_method('SetCloseCallbacks', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'normalClose'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'errorClose')])
+    ## socket.h (module 'network'): void ns3::Socket::SetConnectCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionSucceeded, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionFailed) [member function]
+    cls.add_method('SetConnectCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionSucceeded'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionFailed')])
+    ## socket.h (module 'network'): void ns3::Socket::SetDataSentCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> dataSent) [member function]
+    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', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'arg0')])
+    ## socket.h (module 'network'): void ns3::Socket::SetRecvPktInfo(bool flag) [member function]
+    cls.add_method('SetRecvPktInfo', 
+                   'void', 
+                   [param('bool', 'flag')])
+    ## socket.h (module 'network'): void ns3::Socket::SetSendCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> sendCb) [member function]
+    cls.add_method('SetSendCallback', 
+                   '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 >', 'sendCb')])
+    ## socket.h (module 'network'): int ns3::Socket::ShutdownRecv() [member function]
+    cls.add_method('ShutdownRecv', 
+                   'int', 
                    [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static void ns3::Time::SetResolution(ns3::Time::Unit resolution) [member function]
-    cls.add_method('SetResolution', 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::ShutdownSend() [member function]
+    cls.add_method('ShutdownSend', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::DoDispose() [member function]
+    cls.add_method('DoDispose', 
                    'void', 
-                   [param('ns3::Time::Unit', 'resolution')], 
-                   is_static=True)
-    ## nstime.h (module 'core'): static bool ns3::Time::StaticInit() [member function]
-    cls.add_method('StaticInit', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTos() const [member function]
+    cls.add_method('IsManualIpTos', 
                    'bool', 
                    [], 
-                   is_static=True)
-    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit unit) const [member function]
-    cls.add_method('To', 
-                   'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
-    cls.add_method('ToDouble', 
-                   'double', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
-    cls.add_method('ToInteger', 
-                   'int64_t', 
-                   [param('ns3::Time::Unit', 'unit')], 
-                   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', 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTtl() const [member function]
+    cls.add_method('IsManualIpTtl', 
                    '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', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6HopLimit() const [member function]
+    cls.add_method('IsManualIpv6HopLimit', 
                    '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', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6Tclass() const [member function]
+    cls.add_method('IsManualIpv6Tclass', 
                    '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', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionFailed() [member function]
+    cls.add_method('NotifyConnectionFailed', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::NotifyConnectionRequest(ns3::Address const & from) [member function]
+    cls.add_method('NotifyConnectionRequest', 
                    'bool', 
-                   [param('ns3::ObjectBase *', 'obj', transfer_ownership=False), param('ns3::CallbackBase const &', 'cb')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('ns3::Address const &', 'from')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionSucceeded() [member function]
+    cls.add_method('NotifyConnectionSucceeded', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyDataRecv() [member function]
+    cls.add_method('NotifyDataRecv', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyDataSent(uint32_t size) [member function]
+    cls.add_method('NotifyDataSent', 
+                   'void', 
+                   [param('uint32_t', 'size')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyErrorClose() [member function]
+    cls.add_method('NotifyErrorClose', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyNewConnectionCreated(ns3::Ptr<ns3::Socket> socket, ns3::Address const & from) [member function]
+    cls.add_method('NotifyNewConnectionCreated', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket'), param('ns3::Address const &', 'from')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyNormalClose() [member function]
+    cls.add_method('NotifyNormalClose', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifySend(uint32_t spaceAvailable) [member function]
+    cls.add_method('NotifySend', 
+                   'void', 
+                   [param('uint32_t', 'spaceAvailable')], 
+                   visibility='protected')
     return
 
-def register_Ns3Trailer_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
+def register_Ns3SocketAddressTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag(ns3::SocketAddressTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketAddressTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag() [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]
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Deserialize(ns3::TagBuffer i) [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]
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::Address ns3::SocketAddressTag::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketAddressTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketAddressTag::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]
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketAddressTag::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]
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::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]
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::SetAddress(ns3::Address addr) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
     return
 
-def register_Ns3VendorSpecificActionHeader_methods(root_module, cls):
-    ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader::VendorSpecificActionHeader(ns3::VendorSpecificActionHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::VendorSpecificActionHeader const &', 'arg0')])
-    ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader::VendorSpecificActionHeader() [constructor]
+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([])
-    ## vendor-specific-action.h (module 'wave'): uint32_t ns3::VendorSpecificActionHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Deserialize(ns3::TagBuffer i) [member function]
     cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
                    is_virtual=True)
-    ## vendor-specific-action.h (module 'wave'): uint8_t ns3::VendorSpecificActionHeader::GetCategory() const [member function]
-    cls.add_method('GetCategory', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## vendor-specific-action.h (module 'wave'): ns3::TypeId ns3::VendorSpecificActionHeader::GetInstanceTypeId() const [member function]
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTosTag::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## vendor-specific-action.h (module 'wave'): ns3::OrganizationIdentifier ns3::VendorSpecificActionHeader::GetOrganizationIdentifier() const [member function]
-    cls.add_method('GetOrganizationIdentifier', 
-                   'ns3::OrganizationIdentifier', 
-                   [], 
-                   is_const=True)
-    ## vendor-specific-action.h (module 'wave'): uint32_t ns3::VendorSpecificActionHeader::GetSerializedSize() const [member function]
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTosTag::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## vendor-specific-action.h (module 'wave'): static ns3::TypeId ns3::VendorSpecificActionHeader::GetTypeId() [member function]
+    ## 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)
-    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::Print(std::ostream & os) const [member function]
+    ## 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)
-    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+                   [param('ns3::TagBuffer', 'i')], 
                    is_const=True, is_virtual=True)
-    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::SetOrganizationIdentifier(ns3::OrganizationIdentifier oi) [member function]
-    cls.add_method('SetOrganizationIdentifier', 
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
                    'void', 
-                   [param('ns3::OrganizationIdentifier', 'oi')])
+                   [param('uint8_t', 'tos')])
     return
 
-def register_Ns3Wifi80211pHelper_methods(root_module, cls):
-    ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper::Wifi80211pHelper(ns3::Wifi80211pHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Wifi80211pHelper const &', 'arg0')])
-    ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper::Wifi80211pHelper() [constructor]
+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')])
+    ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag() [constructor]
     cls.add_constructor([])
-    ## wifi-80211p-helper.h (module 'wave'): static ns3::Wifi80211pHelper ns3::Wifi80211pHelper::Default() [member function]
-    cls.add_method('Default', 
-                   'ns3::Wifi80211pHelper', 
-                   [], 
-                   is_static=True)
-    ## wifi-80211p-helper.h (module 'wave'): static void ns3::Wifi80211pHelper::EnableLogComponents() [member function]
-    cls.add_method('EnableLogComponents', 
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::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::SocketIpTtlTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTtlTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpTtlTag::GetTtl() const [member function]
+    cls.add_method('GetTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTtlTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-80211p-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::Wifi80211pHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & macHelper, ns3::NodeContainer c) const [member function]
-    cls.add_method('Install', 
-                   'ns3::NetDeviceContainer', 
-                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'macHelper'), param('ns3::NodeContainer', 'c')], 
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## wifi-80211p-helper.h (module 'wave'): void ns3::Wifi80211pHelper::SetStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('SetStandard', 
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_virtual=True)
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::SetTtl(uint8_t ttl) [member function]
+    cls.add_method('SetTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
     return
 
-def register_Ns3WifiActionHeader_methods(root_module, cls):
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader(ns3::WifiActionHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiActionHeader const &', 'arg0')])
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader() [constructor]
+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([])
-    ## mgt-headers.h (module 'wifi'): uint32_t ns3::WifiActionHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Deserialize(ns3::TagBuffer i) [member function]
     cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
                    is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue ns3::WifiActionHeader::GetAction() [member function]
-    cls.add_method('GetAction', 
-                   'ns3::WifiActionHeader::ActionValue', 
-                   [])
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::CategoryValue ns3::WifiActionHeader::GetCategory() [member function]
-    cls.add_method('GetCategory', 
-                   'ns3::WifiActionHeader::CategoryValue', 
-                   [])
-    ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::WifiActionHeader::GetInstanceTypeId() const [member function]
+    ## 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)
-    ## mgt-headers.h (module 'wifi'): uint32_t ns3::WifiActionHeader::GetSerializedSize() const [member function]
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6HopLimitTag::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): static ns3::TypeId ns3::WifiActionHeader::GetTypeId() [member function]
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6HopLimitTag::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::Print(std::ostream & os) const [member function]
+    ## 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)
-    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+                   [param('ns3::TagBuffer', 'i')], 
                    is_const=True, is_virtual=True)
-    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::SetAction(ns3::WifiActionHeader::CategoryValue type, ns3::WifiActionHeader::ActionValue action) [member function]
-    cls.add_method('SetAction', 
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::SetHopLimit(uint8_t hopLimit) [member function]
+    cls.add_method('SetHopLimit', 
                    'void', 
-                   [param('ns3::WifiActionHeader::CategoryValue', 'type'), param('ns3::WifiActionHeader::ActionValue', 'action')])
-    return
-
-def register_Ns3WifiActionHeaderActionValue_methods(root_module, cls):
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::ActionValue() [constructor]
-    cls.add_constructor([])
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::ActionValue(ns3::WifiActionHeader::ActionValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiActionHeader::ActionValue const &', 'arg0')])
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::blockAck [variable]
-    cls.add_instance_attribute('blockAck', 'ns3::WifiActionHeader::BlockAckActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::interwork [variable]
-    cls.add_instance_attribute('interwork', 'ns3::WifiActionHeader::InterworkActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::linkMetrtic [variable]
-    cls.add_instance_attribute('linkMetrtic', 'ns3::WifiActionHeader::LinkMetricActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::pathSelection [variable]
-    cls.add_instance_attribute('pathSelection', 'ns3::WifiActionHeader::PathSelectionActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::peerLink [variable]
-    cls.add_instance_attribute('peerLink', 'ns3::WifiActionHeader::PeerLinkMgtActionValue', is_const=False)
-    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::resourceCoordination [variable]
-    cls.add_instance_attribute('resourceCoordination', 'ns3::WifiActionHeader::ResourceCoordinationActionValue', is_const=False)
+                   [param('uint8_t', 'hopLimit')])
     return
 
-def register_Ns3WifiInformationElement_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    cls.add_binary_comparison_operator('==')
-    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElement::WifiInformationElement() [constructor]
+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([])
-    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElement::WifiInformationElement(ns3::WifiInformationElement const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiInformationElement const &', 'arg0')])
-    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::Deserialize(ns3::Buffer::Iterator i) [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Deserialize(ns3::TagBuffer i) [member function]
     cls.add_method('Deserialize', 
-                   'ns3::Buffer::Iterator', 
-                   [param('ns3::Buffer::Iterator', 'i')])
-    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::DeserializeIfPresent(ns3::Buffer::Iterator i) [member function]
-    cls.add_method('DeserializeIfPresent', 
-                   'ns3::Buffer::Iterator', 
-                   [param('ns3::Buffer::Iterator', 'i')])
-    ## wifi-information-element.h (module 'wifi'): uint8_t ns3::WifiInformationElement::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_pure_virtual=True, is_virtual=True)
-    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElementId ns3::WifiInformationElement::ElementId() const [member function]
-    cls.add_method('ElementId', 
-                   'ns3::WifiInformationElementId', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-information-element.h (module 'wifi'): uint8_t ns3::WifiInformationElement::GetInformationFieldSize() const [member function]
-    cls.add_method('GetInformationFieldSize', 
-                   'uint8_t', 
+                   '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_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-information-element.h (module 'wifi'): uint16_t ns3::WifiInformationElement::GetSerializedSize() const [member function]
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6TclassTag::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
-                   'uint16_t', 
+                   '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)
-    ## wifi-information-element.h (module 'wifi'): void ns3::WifiInformationElement::Print(std::ostream & os) const [member function]
+    ## 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)
-    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::Serialize(ns3::Buffer::Iterator i) const [member function]
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Serialize(ns3::TagBuffer i) const [member function]
     cls.add_method('Serialize', 
-                   'ns3::Buffer::Iterator', 
-                   [param('ns3::Buffer::Iterator', 'i')], 
-                   is_const=True)
-    ## wifi-information-element.h (module 'wifi'): void ns3::WifiInformationElement::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('SerializeInformationField', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   [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_Ns3WifiMac_methods(root_module, cls):
-    ## wifi-mac.h (module 'wifi'): ns3::WifiMac::WifiMac() [constructor]
+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')])
+    ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag() [constructor]
     cls.add_constructor([])
-    ## wifi-mac.h (module 'wifi'): ns3::WifiMac::WifiMac(ns3::WifiMac const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiMac const &', 'arg0')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('ConfigureStandard', 
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
                    'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address to, ns3::Mac48Address from) [member function]
-    cls.add_method('Enqueue', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Disable() [member function]
+    cls.add_method('Disable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address to) [member function]
-    cls.add_method('Enqueue', 
+                   [])
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Enable() [member function]
+    cls.add_method('Enable', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'to')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetAckTimeout() const [member function]
-    cls.add_method('GetAckTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::WifiMac::GetAddress() const [member function]
-    cls.add_method('GetAddress', 
-                   'ns3::Mac48Address', 
+                   [])
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketSetDontFragmentTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetBasicBlockAckTimeout() const [member function]
-    cls.add_method('GetBasicBlockAckTimeout', 
-                   'ns3::Time', 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketSetDontFragmentTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::WifiMac::GetBssid() const [member function]
-    cls.add_method('GetBssid', 
-                   'ns3::Mac48Address', 
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketSetDontFragmentTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetCompressedBlockAckTimeout() const [member function]
-    cls.add_method('GetCompressedBlockAckTimeout', 
-                   'ns3::Time', 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::SocketSetDontFragmentTag::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
                    [], 
+                   is_const=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetCtsTimeout() const [member function]
-    cls.add_method('GetCtsTimeout', 
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Time_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
+    cls.add_output_stream_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(ns3::int64x64_t const & v) [constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', '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::TimeWithUnit ns3::Time::As(ns3::Time::Unit const unit) const [member function]
+    cls.add_method('As', 
+                   'ns3::TimeWithUnit', 
+                   [param('ns3::Time::Unit const', 'unit')], 
+                   is_const=True)
+    ## 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 & value) [member function]
+    cls.add_method('From', 
                    'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetEifsNoDifs() const [member function]
-    cls.add_method('GetEifsNoDifs', 
+                   [param('ns3::int64x64_t const &', 'value')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
+    cls.add_method('From', 
                    'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetMaxPropagationDelay() const [member function]
-    cls.add_method('GetMaxPropagationDelay', 
+                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
+    cls.add_method('FromDouble', 
+                   'ns3::Time', 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
+    cls.add_method('FromInteger', 
                    'ns3::Time', 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
+    cls.add_method('GetDays', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetMsduLifetime() const [member function]
-    cls.add_method('GetMsduLifetime', 
-                   'ns3::Time', 
+    ## nstime.h (module 'core'): double ns3::Time::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetPifs() const [member function]
-    cls.add_method('GetPifs', 
-                   'ns3::Time', 
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetFemtoSeconds() const [member function]
+    cls.add_method('GetFemtoSeconds', 
+                   'int64_t', 
                    [], 
-                   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_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetHours() const [member function]
+    cls.add_method('GetHours', 
+                   'double', 
                    [], 
-                   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', 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetInteger() const [member function]
+    cls.add_method('GetInteger', 
+                   'int64_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSlot() const [member function]
-    cls.add_method('GetSlot', 
-                   'ns3::Time', 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetMicroSeconds() const [member function]
+    cls.add_method('GetMicroSeconds', 
+                   'int64_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): ns3::Ssid ns3::WifiMac::GetSsid() const [member function]
-    cls.add_method('GetSsid', 
-                   'ns3::Ssid', 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetMilliSeconds() const [member function]
+    cls.add_method('GetMilliSeconds', 
+                   'int64_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::WifiMac::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::GetMinutes() const [member function]
+    cls.add_method('GetMinutes', 
+                   'double', 
+                   [], 
+                   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)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyPromiscRx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyRx(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyRx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyRxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyRxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyTx(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyTxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
-    cls.add_method('SetAckTimeout', 
-                   'void', 
-                   [param('ns3::Time', 'ackTimeout')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAddress(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddress', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetBasicBlockAckTimeout(ns3::Time blockAckTimeout) [member function]
-    cls.add_method('SetBasicBlockAckTimeout', 
-                   'void', 
-                   [param('ns3::Time', 'blockAckTimeout')], 
-                   is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetCompressedBlockAckTimeout(ns3::Time blockAckTimeout) [member function]
-    cls.add_method('SetCompressedBlockAckTimeout', 
-                   'void', 
-                   [param('ns3::Time', 'blockAckTimeout')], 
-                   is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetCtsTimeout(ns3::Time ctsTimeout) [member function]
-    cls.add_method('SetCtsTimeout', 
-                   'void', 
-                   [param('ns3::Time', 'ctsTimeout')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetEifsNoDifs(ns3::Time eifsNoDifs) [member function]
-    cls.add_method('SetEifsNoDifs', 
-                   'void', 
-                   [param('ns3::Time', 'eifsNoDifs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetForwardUpCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> upCallback) [member function]
-    cls.add_method('SetForwardUpCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'upCallback')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkDownCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkDown) [member function]
-    cls.add_method('SetLinkDownCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkDown')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkUpCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkUp) [member function]
-    cls.add_method('SetLinkUpCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkUp')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetMaxPropagationDelay(ns3::Time delay) [member function]
-    cls.add_method('SetMaxPropagationDelay', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetPifs(ns3::Time pifs) [member function]
-    cls.add_method('SetPifs', 
-                   'void', 
-                   [param('ns3::Time', 'pifs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetPromisc() [member function]
-    cls.add_method('SetPromisc', 
-                   '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', 
-                   [param('ns3::Time', 'sifs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSlot(ns3::Time slotTime) [member function]
-    cls.add_method('SetSlot', 
-                   'void', 
-                   [param('ns3::Time', 'slotTime')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSsid(ns3::Ssid ssid) [member function]
-    cls.add_method('SetSsid', 
-                   'void', 
-                   [param('ns3::Ssid', 'ssid')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetWifiPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
-    cls.add_method('SetWifiPhy', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
-    cls.add_method('SetWifiRemoteStationManager', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'stationManager')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): bool ns3::WifiMac::SupportsSendFrom() const [member function]
-    cls.add_method('SupportsSendFrom', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
-    cls.add_method('ConfigureDcf', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
-                   visibility='protected')
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('FinishConfigureStandard', 
-                   'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    return
-
-def register_Ns3WifiMacHeader_methods(root_module, cls):
-    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::WifiMacHeader(ns3::WifiMacHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiMacHeader const &', 'arg0')])
-    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::WifiMacHeader() [constructor]
-    cls.add_constructor([])
-    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr1() const [member function]
-    cls.add_method('GetAddr1', 
-                   'ns3::Mac48Address', 
+    ## nstime.h (module 'core'): double ns3::Time::GetSeconds() const [member function]
+    cls.add_method('GetSeconds', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr2() const [member function]
-    cls.add_method('GetAddr2', 
-                   'ns3::Mac48Address', 
+    ## nstime.h (module 'core'): int64_t ns3::Time::GetTimeStep() const [member function]
+    cls.add_method('GetTimeStep', 
+                   'int64_t', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr3() const [member function]
-    cls.add_method('GetAddr3', 
-                   'ns3::Mac48Address', 
+    ## nstime.h (module 'core'): double ns3::Time::GetYears() const [member function]
+    cls.add_method('GetYears', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr4() const [member function]
-    cls.add_method('GetAddr4', 
-                   'ns3::Mac48Address', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsNegative() const [member function]
+    cls.add_method('IsNegative', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::Time ns3::WifiMacHeader::GetDuration() const [member function]
-    cls.add_method('GetDuration', 
-                   'ns3::Time', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsPositive() const [member function]
+    cls.add_method('IsPositive', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetFragmentNumber() const [member function]
-    cls.add_method('GetFragmentNumber', 
-                   'uint16_t', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyNegative() const [member function]
+    cls.add_method('IsStrictlyNegative', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::TypeId ns3::WifiMacHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::QosAckPolicy ns3::WifiMacHeader::GetQosAckPolicy() const [member function]
-    cls.add_method('GetQosAckPolicy', 
-                   'ns3::WifiMacHeader::QosAckPolicy', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsStrictlyPositive() const [member function]
+    cls.add_method('IsStrictlyPositive', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint8_t ns3::WifiMacHeader::GetQosTid() const [member function]
-    cls.add_method('GetQosTid', 
-                   'uint8_t', 
+    ## nstime.h (module 'core'): bool ns3::Time::IsZero() const [member function]
+    cls.add_method('IsZero', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint8_t ns3::WifiMacHeader::GetQosTxopLimit() const [member function]
-    cls.add_method('GetQosTxopLimit', 
-                   'uint8_t', 
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Max() [member function]
+    cls.add_method('Max', 
+                   'ns3::Time', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetRawDuration() const [member function]
-    cls.add_method('GetRawDuration', 
-                   'uint16_t', 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::Min() [member function]
+    cls.add_method('Min', 
+                   'ns3::Time', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetSequenceControl() const [member function]
-    cls.add_method('GetSequenceControl', 
-                   'uint16_t', 
+                   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 unit) const [member function]
+    cls.add_method('To', 
+                   'ns3::int64x64_t', 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetSequenceNumber() const [member function]
-    cls.add_method('GetSequenceNumber', 
-                   'uint16_t', 
-                   [], 
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
+    cls.add_method('ToDouble', 
+                   'double', 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
+    cls.add_method('ToInteger', 
+                   'int64_t', 
+                   [param('ns3::Time::Unit', 'unit')], 
+                   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', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::GetSize() const [member function]
-    cls.add_method('GetSize', 
+                   [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_const=True)
-    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType ns3::WifiMacHeader::GetType() const [member function]
-    cls.add_method('GetType', 
-                   'ns3::WifiMacType', 
+                   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_const=True)
-    ## wifi-mac-header.h (module 'wifi'): static ns3::TypeId ns3::WifiMacHeader::GetTypeId() [member function]
+                   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_Ns3TriangularRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::TriangularRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-mac-header.h (module 'wifi'): char const * ns3::WifiMacHeader::GetTypeString() const [member function]
-    cls.add_method('GetTypeString', 
-                   'char const *', 
+    ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable::TriangularRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAck() const [member function]
-    cls.add_method('IsAck', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAction() const [member function]
-    cls.add_method('IsAction', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAssocReq() const [member function]
-    cls.add_method('IsAssocReq', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetValue(double mean, double min, double max) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'min'), param('double', 'max')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger(uint32_t mean, uint32_t min, uint32_t max) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'min'), param('uint32_t', 'max')])
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAssocResp() const [member function]
-    cls.add_method('IsAssocResp', 
-                   'bool', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAuthentication() const [member function]
-    cls.add_method('IsAuthentication', 
-                   'bool', 
+                   is_virtual=True)
+    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', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBeacon() const [member function]
-    cls.add_method('IsBeacon', 
-                   'bool', 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable::UniformRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBlockAck() const [member function]
-    cls.add_method('IsBlockAck', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBlockAckReq() const [member function]
-    cls.add_method('IsBlockAckReq', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetValue(double min, double max) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'min'), param('double', 'max')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger(uint32_t min, uint32_t max) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'min'), param('uint32_t', 'max')])
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCfpoll() const [member function]
-    cls.add_method('IsCfpoll', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCtl() const [member function]
-    cls.add_method('IsCtl', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCts() const [member function]
-    cls.add_method('IsCts', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsData() const [member function]
-    cls.add_method('IsData', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsDeauthentication() const [member function]
-    cls.add_method('IsDeauthentication', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsDisassociation() const [member function]
-    cls.add_method('IsDisassociation', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsFromDs() const [member function]
-    cls.add_method('IsFromDs', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMgt() const [member function]
-    cls.add_method('IsMgt', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMoreFragments() const [member function]
-    cls.add_method('IsMoreFragments', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMultihopAction() const [member function]
-    cls.add_method('IsMultihopAction', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsProbeReq() const [member function]
-    cls.add_method('IsProbeReq', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsProbeResp() const [member function]
-    cls.add_method('IsProbeResp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosAck() const [member function]
-    cls.add_method('IsQosAck', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosAmsdu() const [member function]
-    cls.add_method('IsQosAmsdu', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosBlockAck() const [member function]
-    cls.add_method('IsQosBlockAck', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosData() const [member function]
-    cls.add_method('IsQosData', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosEosp() const [member function]
-    cls.add_method('IsQosEosp', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosNoAck() const [member function]
-    cls.add_method('IsQosNoAck', 
-                   'bool', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsReassocReq() const [member function]
-    cls.add_method('IsReassocReq', 
-                   'bool', 
+                   is_virtual=True)
+    return
+
+def register_Ns3VendorSpecificActionHeader_methods(root_module, cls):
+    ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader::VendorSpecificActionHeader(ns3::VendorSpecificActionHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VendorSpecificActionHeader const &', 'arg0')])
+    ## vendor-specific-action.h (module 'wave'): ns3::VendorSpecificActionHeader::VendorSpecificActionHeader() [constructor]
+    cls.add_constructor([])
+    ## vendor-specific-action.h (module 'wave'): uint32_t ns3::VendorSpecificActionHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## vendor-specific-action.h (module 'wave'): uint8_t ns3::VendorSpecificActionHeader::GetCategory() const [member function]
+    cls.add_method('GetCategory', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsReassocResp() const [member function]
-    cls.add_method('IsReassocResp', 
-                   'bool', 
+    ## vendor-specific-action.h (module 'wave'): ns3::TypeId ns3::VendorSpecificActionHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsRetry() const [member function]
-    cls.add_method('IsRetry', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## vendor-specific-action.h (module 'wave'): ns3::OrganizationIdentifier ns3::VendorSpecificActionHeader::GetOrganizationIdentifier() const [member function]
+    cls.add_method('GetOrganizationIdentifier', 
+                   'ns3::OrganizationIdentifier', 
                    [], 
                    is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsRts() const [member function]
-    cls.add_method('IsRts', 
-                   'bool', 
+    ## vendor-specific-action.h (module 'wave'): uint32_t ns3::VendorSpecificActionHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsToDs() const [member function]
-    cls.add_method('IsToDs', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## vendor-specific-action.h (module 'wave'): static ns3::TypeId ns3::VendorSpecificActionHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::Print(std::ostream & os) const [member function]
+                   is_static=True)
+    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAction() [member function]
-    cls.add_method('SetAction', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr1(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddr1', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr2(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddr2', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr3(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddr3', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr4(ns3::Mac48Address address) [member function]
-    cls.add_method('SetAddr4', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAssocReq() [member function]
-    cls.add_method('SetAssocReq', 
+    ## vendor-specific-action.h (module 'wave'): void ns3::VendorSpecificActionHeader::SetOrganizationIdentifier(ns3::OrganizationIdentifier oi) [member function]
+    cls.add_method('SetOrganizationIdentifier', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAssocResp() [member function]
-    cls.add_method('SetAssocResp', 
+                   [param('ns3::OrganizationIdentifier', 'oi')])
+    return
+
+def register_Ns3VsaManager_methods(root_module, cls):
+    ## vsa-manager.h (module 'wave'): ns3::VsaManager::VsaManager(ns3::VsaManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VsaManager const &', 'arg0')])
+    ## vsa-manager.h (module 'wave'): ns3::VsaManager::VsaManager() [constructor]
+    cls.add_constructor([])
+    ## vsa-manager.h (module 'wave'): static ns3::TypeId ns3::VsaManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::RemoveAll() [member function]
+    cls.add_method('RemoveAll', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBeacon() [member function]
-    cls.add_method('SetBeacon', 
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::RemoveByChannel(uint32_t channelNumber) [member function]
+    cls.add_method('RemoveByChannel', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBlockAck() [member function]
-    cls.add_method('SetBlockAck', 
+                   [param('uint32_t', 'channelNumber')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::RemoveByOrganizationIdentifier(ns3::OrganizationIdentifier const & oi) [member function]
+    cls.add_method('RemoveByOrganizationIdentifier', 
+                   'void', 
+                   [param('ns3::OrganizationIdentifier const &', 'oi')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::SendVsa(ns3::VsaInfo const & vsaInfo) [member function]
+    cls.add_method('SendVsa', 
+                   'void', 
+                   [param('ns3::VsaInfo const &', 'vsaInfo')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::SetWaveNetDevice(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('SetWaveNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::SetWaveVsaCallback(ns3::Callback<bool, ns3::Ptr<ns3::Packet const>, ns3::Address const&, unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> vsaCallback) [member function]
+    cls.add_method('SetWaveVsaCallback', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBlockAckReq() [member function]
-    cls.add_method('SetBlockAckReq', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::Packet const >, ns3::Address const &, unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'vsaCallback')])
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::DoDispose() [member function]
+    cls.add_method('DoDispose', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsFrom() [member function]
-    cls.add_method('SetDsFrom', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## vsa-manager.h (module 'wave'): void ns3::VsaManager::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
                    'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3WaveBsmStats_methods(root_module, cls):
+    ## wave-bsm-stats.h (module 'wave'): ns3::WaveBsmStats::WaveBsmStats(ns3::WaveBsmStats const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WaveBsmStats const &', 'arg0')])
+    ## wave-bsm-stats.h (module 'wave'): ns3::WaveBsmStats::WaveBsmStats() [constructor]
+    cls.add_constructor([])
+    ## wave-bsm-stats.h (module 'wave'): double ns3::WaveBsmStats::GetBsmPdr(int index) [member function]
+    cls.add_method('GetBsmPdr', 
+                   'double', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): double ns3::WaveBsmStats::GetCumulativeBsmPdr(int index) [member function]
+    cls.add_method('GetCumulativeBsmPdr', 
+                   'double', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetExpectedRxPktCount(int index) [member function]
+    cls.add_method('GetExpectedRxPktCount', 
+                   'int', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetLogging() [member function]
+    cls.add_method('GetLogging', 
+                   'int', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsNotFrom() [member function]
-    cls.add_method('SetDsNotFrom', 
-                   'void', 
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetRxPktCount() [member function]
+    cls.add_method('GetRxPktCount', 
+                   'int', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsNotTo() [member function]
-    cls.add_method('SetDsNotTo', 
-                   'void', 
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetRxPktInRangeCount(int index) [member function]
+    cls.add_method('GetRxPktInRangeCount', 
+                   'int', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetTxByteCount() [member function]
+    cls.add_method('GetTxByteCount', 
+                   'int', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsTo() [member function]
-    cls.add_method('SetDsTo', 
-                   'void', 
+    ## wave-bsm-stats.h (module 'wave'): int ns3::WaveBsmStats::GetTxPktCount() [member function]
+    cls.add_method('GetTxPktCount', 
+                   'int', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDuration(ns3::Time duration) [member function]
-    cls.add_method('SetDuration', 
-                   'void', 
-                   [param('ns3::Time', 'duration')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetFragmentNumber(uint8_t frag) [member function]
-    cls.add_method('SetFragmentNumber', 
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncExpectedRxPktCount(int index) [member function]
+    cls.add_method('IncExpectedRxPktCount', 
                    'void', 
-                   [param('uint8_t', 'frag')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetId(uint16_t id) [member function]
-    cls.add_method('SetId', 
-                   'void', 
-                   [param('uint16_t', 'id')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetMoreFragments() [member function]
-    cls.add_method('SetMoreFragments', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncRxPktCount() [member function]
+    cls.add_method('IncRxPktCount', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetMultihopAction() [member function]
-    cls.add_method('SetMultihopAction', 
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncRxPktInRangeCount(int index) [member function]
+    cls.add_method('IncRxPktInRangeCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoMoreFragments() [member function]
-    cls.add_method('SetNoMoreFragments', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncTxByteCount(int bytes) [member function]
+    cls.add_method('IncTxByteCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoOrder() [member function]
-    cls.add_method('SetNoOrder', 
+                   [param('int', 'bytes')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::IncTxPktCount() [member function]
+    cls.add_method('IncTxPktCount', 
                    'void', 
                    [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoRetry() [member function]
-    cls.add_method('SetNoRetry', 
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::ResetTotalRxPktCounts(int index) [member function]
+    cls.add_method('ResetTotalRxPktCounts', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetOrder() [member function]
-    cls.add_method('SetOrder', 
+                   [param('int', 'index')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetExpectedRxPktCount(int index, int count) [member function]
+    cls.add_method('SetExpectedRxPktCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeReq() [member function]
-    cls.add_method('SetProbeReq', 
+                   [param('int', 'index'), param('int', 'count')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetLogging(int log) [member function]
+    cls.add_method('SetLogging', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeResp() [member function]
-    cls.add_method('SetProbeResp', 
+                   [param('int', 'log')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetRxPktCount(int count) [member function]
+    cls.add_method('SetRxPktCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy policy) [member function]
-    cls.add_method('SetQosAckPolicy', 
+                   [param('int', 'count')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetRxPktInRangeCount(int index, int count) [member function]
+    cls.add_method('SetRxPktInRangeCount', 
                    'void', 
-                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
-    cls.add_method('SetQosAmsdu', 
+                   [param('int', 'index'), param('int', 'count')])
+    ## wave-bsm-stats.h (module 'wave'): void ns3::WaveBsmStats::SetTxPktCount(int count) [member function]
+    cls.add_method('SetTxPktCount', 
                    'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosBlockAck() [member function]
-    cls.add_method('SetQosBlockAck', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosEosp() [member function]
-    cls.add_method('SetQosEosp', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
-    cls.add_method('SetQosNoAck', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAmsdu() [member function]
-    cls.add_method('SetQosNoAmsdu', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoEosp() [member function]
-    cls.add_method('SetQosNoEosp', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
-    cls.add_method('SetQosNormalAck', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosTid(uint8_t tid) [member function]
-    cls.add_method('SetQosTid', 
-                   'void', 
-                   [param('uint8_t', 'tid')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosTxopLimit(uint8_t txop) [member function]
-    cls.add_method('SetQosTxopLimit', 
-                   'void', 
-                   [param('uint8_t', 'txop')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetRawDuration(uint16_t duration) [member function]
-    cls.add_method('SetRawDuration', 
-                   'void', 
-                   [param('uint16_t', 'duration')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetRetry() [member function]
-    cls.add_method('SetRetry', 
-                   'void', 
-                   [])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetSequenceNumber(uint16_t seq) [member function]
-    cls.add_method('SetSequenceNumber', 
-                   'void', 
-                   [param('uint16_t', 'seq')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetType(ns3::WifiMacType type) [member function]
-    cls.add_method('SetType', 
-                   'void', 
-                   [param('ns3::WifiMacType', 'type')])
-    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetTypeData() [member function]
-    cls.add_method('SetTypeData', 
-                   'void', 
-                   [])
+                   [param('int', 'count')])
     return
 
-def register_Ns3WifiMacQueue_methods(root_module, cls):
-    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::WifiMacQueue(ns3::WifiMacQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiMacQueue const &', 'arg0')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::WifiMacQueue() [constructor]
+def register_Ns3WeibullRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::WeibullRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable::WeibullRandomVariable() [constructor]
     cls.add_constructor([])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::Dequeue(ns3::WifiMacHeader * hdr) [member function]
-    cls.add_method('Dequeue', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::DequeueByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
-    cls.add_method('DequeueByTidAndAddress', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::DequeueFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
-    cls.add_method('DequeueFirstAvailable', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('ns3::Time &', 'tStamp'), param('ns3::QosBlockedDestinations const *', 'blockedPackets')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
-    cls.add_method('Enqueue', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Flush() [member function]
-    cls.add_method('Flush', 
-                   'void', 
-                   [])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Time ns3::WifiMacQueue::GetMaxDelay() const [member function]
-    cls.add_method('GetMaxDelay', 
-                   'ns3::Time', 
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
+    cls.add_method('GetScale', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetMaxSize() const [member function]
-    cls.add_method('GetMaxSize', 
-                   'uint32_t', 
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetNPacketsByTidAndAddress(uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
-    cls.add_method('GetNPacketsByTidAndAddress', 
-                   'uint32_t', 
-                   [param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
-    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetSize() [member function]
-    cls.add_method('GetSize', 
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue(double scale, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'scale'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
                    'uint32_t', 
-                   [])
-    ## wifi-mac-queue.h (module 'wifi'): static ns3::TypeId ns3::WifiMacQueue::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   [param('uint32_t', 'scale'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_static=True)
-    ## wifi-mac-queue.h (module 'wifi'): bool ns3::WifiMacQueue::IsEmpty() [member function]
-    cls.add_method('IsEmpty', 
-                   'bool', 
-                   [])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::Peek(ns3::WifiMacHeader * hdr) [member function]
-    cls.add_method('Peek', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
-    cls.add_method('PeekByTidAndAddress', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
-    cls.add_method('PeekFirstAvailable', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('ns3::Time &', 'tStamp'), param('ns3::QosBlockedDestinations const *', 'blockedPackets')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
-    cls.add_method('PushFront', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): bool ns3::WifiMacQueue::Remove(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('Remove', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::SetMaxDelay(ns3::Time delay) [member function]
-    cls.add_method('SetMaxDelay', 
-                   'void', 
-                   [param('ns3::Time', 'delay')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::SetMaxSize(uint32_t maxSize) [member function]
-    cls.add_method('SetMaxSize', 
-                   'void', 
-                   [param('uint32_t', 'maxSize')])
-    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   visibility='protected', is_virtual=True)
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacQueue::GetAddressForPacket(ns3::WifiMacHeader::AddressType type, std::_List_iterator<ns3::WifiMacQueue::Item> it) [member function]
-    cls.add_method('GetAddressForPacket', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::WifiMacHeader::AddressType', 'type'), param('std::_List_iterator< ns3::WifiMacQueue::Item >', 'it')], 
-                   visibility='protected')
+                   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')])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
+def register_Ns3Wifi80211pHelper_methods(root_module, cls):
+    ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper::Wifi80211pHelper(ns3::Wifi80211pHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Wifi80211pHelper const &', 'arg0')])
+    ## wifi-80211p-helper.h (module 'wave'): ns3::Wifi80211pHelper::Wifi80211pHelper() [constructor]
     cls.add_constructor([])
-    ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
-    cls.add_method('CalculateSnr', 
-                   '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('CalculateTxDuration', 
-                   'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+    ## wifi-80211p-helper.h (module 'wave'): static ns3::Wifi80211pHelper ns3::Wifi80211pHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::Wifi80211pHelper', 
+                   [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('ConfigureStandard', 
+    ## wifi-80211p-helper.h (module 'wave'): static void ns3::Wifi80211pHelper::EnableLogComponents() [member function]
+    cls.add_method('EnableLogComponents', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## wifi-80211p-helper.h (module 'wave'): ns3::NetDeviceContainer ns3::Wifi80211pHelper::Install(ns3::WifiPhyHelper const & phy, ns3::WifiMacHelper const & macHelper, ns3::NodeContainer c) const [member function]
+    cls.add_method('Install', 
+                   'ns3::NetDeviceContainer', 
+                   [param('ns3::WifiPhyHelper const &', 'phy'), param('ns3::WifiMacHelper const &', 'macHelper'), param('ns3::NodeContainer', 'c')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-80211p-helper.h (module 'wave'): void ns3::Wifi80211pHelper::SetStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('SetStandard', 
                    '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', 
+                   is_virtual=True)
+    return
+
+def register_Ns3WifiActionHeader_methods(root_module, cls):
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader(ns3::WifiActionHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiActionHeader const &', 'arg0')])
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::WifiActionHeader() [constructor]
+    cls.add_constructor([])
+    ## mgt-headers.h (module 'wifi'): uint32_t ns3::WifiActionHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
                    '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', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
-    cls.add_method('GetDelayUntilIdle', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
-    cls.add_method('GetDsssRate11Mbps', 
-                   'ns3::WifiMode', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue ns3::WifiActionHeader::GetAction() [member function]
+    cls.add_method('GetAction', 
+                   'ns3::WifiActionHeader::ActionValue', 
+                   [])
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::CategoryValue ns3::WifiActionHeader::GetCategory() [member function]
+    cls.add_method('GetCategory', 
+                   'ns3::WifiActionHeader::CategoryValue', 
+                   [])
+    ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::WifiActionHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate1Mbps() [member function]
-    cls.add_method('GetDsssRate1Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): uint32_t ns3::WifiActionHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate2Mbps() [member function]
-    cls.add_method('GetDsssRate2Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): static ns3::TypeId ns3::WifiActionHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate5_5Mbps() [member function]
-    cls.add_method('GetDsssRate5_5Mbps', 
-                   'ns3::WifiMode', 
+    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::WifiActionHeader::SetAction(ns3::WifiActionHeader::CategoryValue type, ns3::WifiActionHeader::ActionValue action) [member function]
+    cls.add_method('SetAction', 
+                   'void', 
+                   [param('ns3::WifiActionHeader::CategoryValue', 'type'), param('ns3::WifiActionHeader::ActionValue', 'action')])
+    return
+
+def register_Ns3WifiActionHeaderActionValue_methods(root_module, cls):
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::ActionValue() [constructor]
+    cls.add_constructor([])
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::ActionValue(ns3::WifiActionHeader::ActionValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiActionHeader::ActionValue const &', 'arg0')])
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::blockAck [variable]
+    cls.add_instance_attribute('blockAck', 'ns3::WifiActionHeader::BlockAckActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::interwork [variable]
+    cls.add_instance_attribute('interwork', 'ns3::WifiActionHeader::InterworkActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::linkMetrtic [variable]
+    cls.add_instance_attribute('linkMetrtic', 'ns3::WifiActionHeader::LinkMetricActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::pathSelection [variable]
+    cls.add_instance_attribute('pathSelection', 'ns3::WifiActionHeader::PathSelectionActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::peerLink [variable]
+    cls.add_instance_attribute('peerLink', 'ns3::WifiActionHeader::PeerLinkMgtActionValue', is_const=False)
+    ## mgt-headers.h (module 'wifi'): ns3::WifiActionHeader::ActionValue::resourceCoordination [variable]
+    cls.add_instance_attribute('resourceCoordination', 'ns3::WifiActionHeader::ResourceCoordinationActionValue', is_const=False)
+    return
+
+def register_Ns3WifiInformationElement_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('==')
+    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElement::WifiInformationElement() [constructor]
+    cls.add_constructor([])
+    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElement::WifiInformationElement(ns3::WifiInformationElement const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiInformationElement const &', 'arg0')])
+    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::Deserialize(ns3::Buffer::Iterator i) [member function]
+    cls.add_method('Deserialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'i')])
+    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::DeserializeIfPresent(ns3::Buffer::Iterator i) [member function]
+    cls.add_method('DeserializeIfPresent', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'i')])
+    ## wifi-information-element.h (module 'wifi'): uint8_t ns3::WifiInformationElement::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_pure_virtual=True, is_virtual=True)
+    ## wifi-information-element.h (module 'wifi'): ns3::WifiInformationElementId ns3::WifiInformationElement::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
-    cls.add_method('GetErpOfdmRate12Mbps', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-information-element.h (module 'wifi'): uint8_t ns3::WifiInformationElement::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate18Mbps() [member function]
-    cls.add_method('GetErpOfdmRate18Mbps', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-information-element.h (module 'wifi'): uint16_t ns3::WifiInformationElement::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate24Mbps() [member function]
-    cls.add_method('GetErpOfdmRate24Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True)
+    ## wifi-information-element.h (module 'wifi'): void ns3::WifiInformationElement::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-information-element.h (module 'wifi'): ns3::Buffer::Iterator ns3::WifiInformationElement::Serialize(ns3::Buffer::Iterator i) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'i')], 
+                   is_const=True)
+    ## wifi-information-element.h (module 'wifi'): void ns3::WifiInformationElement::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3WifiMac_methods(root_module, cls):
+    ## wifi-mac.h (module 'wifi'): ns3::WifiMac::WifiMac() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac.h (module 'wifi'): ns3::WifiMac::WifiMac(ns3::WifiMac const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiMac const &', 'arg0')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('ConfigureStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address to, ns3::Mac48Address from) [member function]
+    cls.add_method('Enqueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::Mac48Address to) [member function]
+    cls.add_method('Enqueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'to')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetAckTimeout() const [member function]
+    cls.add_method('GetAckTimeout', 
+                   'ns3::Time', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate36Mbps() [member function]
-    cls.add_method('GetErpOfdmRate36Mbps', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::WifiMac::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Mac48Address', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate48Mbps() [member function]
-    cls.add_method('GetErpOfdmRate48Mbps', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetBasicBlockAckTimeout() const [member function]
+    cls.add_method('GetBasicBlockAckTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::WifiMac::GetBssid() const [member function]
+    cls.add_method('GetBssid', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetCompressedBlockAckTimeout() const [member function]
+    cls.add_method('GetCompressedBlockAckTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetCtsTimeout() const [member function]
+    cls.add_method('GetCtsTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetEifsNoDifs() const [member function]
+    cls.add_method('GetEifsNoDifs', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetMaxPropagationDelay() const [member function]
+    cls.add_method('GetMaxPropagationDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetMsduLifetime() const [member function]
+    cls.add_method('GetMsduLifetime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetPifs() const [member function]
+    cls.add_method('GetPifs', 
+                   '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', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSlot() const [member function]
+    cls.add_method('GetSlot', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ssid ns3::WifiMac::GetSsid() const [member function]
+    cls.add_method('GetSsid', 
+                   'ns3::Ssid', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::WifiMac::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate54Mbps() [member function]
-    cls.add_method('GetErpOfdmRate54Mbps', 
-                   'ns3::WifiMode', 
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiMac::GetWifiPhy() const [member function]
+    cls.add_method('GetWifiPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiRemoteStationManager> ns3::WifiMac::GetWifiRemoteStationManager() const [member function]
+    cls.add_method('GetWifiRemoteStationManager', 
+                   'ns3::Ptr< ns3::WifiRemoteStationManager >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyPromiscRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyRx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyRx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyRxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyRxDrop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyTx(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyTxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTxDrop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
+    cls.add_method('SetAckTimeout', 
+                   'void', 
+                   [param('ns3::Time', 'ackTimeout')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAddress(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetBasicBlockAckTimeout(ns3::Time blockAckTimeout) [member function]
+    cls.add_method('SetBasicBlockAckTimeout', 
+                   'void', 
+                   [param('ns3::Time', 'blockAckTimeout')], 
+                   is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetCompressedBlockAckTimeout(ns3::Time blockAckTimeout) [member function]
+    cls.add_method('SetCompressedBlockAckTimeout', 
+                   'void', 
+                   [param('ns3::Time', 'blockAckTimeout')], 
+                   is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetCtsTimeout(ns3::Time ctsTimeout) [member function]
+    cls.add_method('SetCtsTimeout', 
+                   'void', 
+                   [param('ns3::Time', 'ctsTimeout')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetEifsNoDifs(ns3::Time eifsNoDifs) [member function]
+    cls.add_method('SetEifsNoDifs', 
+                   'void', 
+                   [param('ns3::Time', 'eifsNoDifs')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetForwardUpCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> upCallback) [member function]
+    cls.add_method('SetForwardUpCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'upCallback')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkDownCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkDown) [member function]
+    cls.add_method('SetLinkDownCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkDown')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkUpCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkUp) [member function]
+    cls.add_method('SetLinkUpCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkUp')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetMaxPropagationDelay(ns3::Time delay) [member function]
+    cls.add_method('SetMaxPropagationDelay', 
+                   'void', 
+                   [param('ns3::Time', 'delay')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetPifs(ns3::Time pifs) [member function]
+    cls.add_method('SetPifs', 
+                   'void', 
+                   [param('ns3::Time', 'pifs')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetPromisc() [member function]
+    cls.add_method('SetPromisc', 
+                   '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', 
+                   [param('ns3::Time', 'sifs')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSlot(ns3::Time slotTime) [member function]
+    cls.add_method('SetSlot', 
+                   'void', 
+                   [param('ns3::Time', 'slotTime')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSsid(ns3::Ssid ssid) [member function]
+    cls.add_method('SetSsid', 
+                   'void', 
+                   [param('ns3::Ssid', 'ssid')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetWifiPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetWifiPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'stationManager')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): bool ns3::WifiMac::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ConfigureDcf(ns3::Ptr<ns3::Dcf> dcf, uint32_t cwmin, uint32_t cwmax, ns3::AcIndex ac) [member function]
+    cls.add_method('ConfigureDcf', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Dcf >', 'dcf'), param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('ns3::AcIndex', 'ac')], 
+                   visibility='protected')
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
+    cls.add_method('FinishConfigureStandard', 
+                   'void', 
+                   [param('ns3::WifiPhyStandard', 'standard')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3WifiMacHeader_methods(root_module, cls):
+    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::WifiMacHeader(ns3::WifiMacHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiMacHeader const &', 'arg0')])
+    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::WifiMacHeader() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr1() const [member function]
+    cls.add_method('GetAddr1', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr2() const [member function]
+    cls.add_method('GetAddr2', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr3() const [member function]
+    cls.add_method('GetAddr3', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacHeader::GetAddr4() const [member function]
+    cls.add_method('GetAddr4', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::Time ns3::WifiMacHeader::GetDuration() const [member function]
+    cls.add_method('GetDuration', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetFragmentNumber() const [member function]
+    cls.add_method('GetFragmentNumber', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::TypeId ns3::WifiMacHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacHeader::QosAckPolicy ns3::WifiMacHeader::GetQosAckPolicy() const [member function]
+    cls.add_method('GetQosAckPolicy', 
+                   'ns3::WifiMacHeader::QosAckPolicy', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint8_t ns3::WifiMacHeader::GetQosTid() const [member function]
+    cls.add_method('GetQosTid', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint8_t ns3::WifiMacHeader::GetQosTxopLimit() const [member function]
+    cls.add_method('GetQosTxopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetRawDuration() const [member function]
+    cls.add_method('GetRawDuration', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetSequenceControl() const [member function]
+    cls.add_method('GetSequenceControl', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint16_t ns3::WifiMacHeader::GetSequenceNumber() const [member function]
+    cls.add_method('GetSequenceNumber', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): uint32_t ns3::WifiMacHeader::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType ns3::WifiMacHeader::GetType() const [member function]
+    cls.add_method('GetType', 
+                   'ns3::WifiMacType', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): static ns3::TypeId ns3::WifiMacHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-mac-header.h (module 'wifi'): char const * ns3::WifiMacHeader::GetTypeString() const [member function]
+    cls.add_method('GetTypeString', 
+                   'char const *', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAck() const [member function]
+    cls.add_method('IsAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAction() const [member function]
+    cls.add_method('IsAction', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAssocReq() const [member function]
+    cls.add_method('IsAssocReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAssocResp() const [member function]
+    cls.add_method('IsAssocResp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsAuthentication() const [member function]
+    cls.add_method('IsAuthentication', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBeacon() const [member function]
+    cls.add_method('IsBeacon', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBlockAck() const [member function]
+    cls.add_method('IsBlockAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsBlockAckReq() const [member function]
+    cls.add_method('IsBlockAckReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCfpoll() const [member function]
+    cls.add_method('IsCfpoll', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCtl() const [member function]
+    cls.add_method('IsCtl', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsCts() const [member function]
+    cls.add_method('IsCts', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsData() const [member function]
+    cls.add_method('IsData', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsDeauthentication() const [member function]
+    cls.add_method('IsDeauthentication', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsDisassociation() const [member function]
+    cls.add_method('IsDisassociation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsFromDs() const [member function]
+    cls.add_method('IsFromDs', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMgt() const [member function]
+    cls.add_method('IsMgt', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMoreFragments() const [member function]
+    cls.add_method('IsMoreFragments', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsMultihopAction() const [member function]
+    cls.add_method('IsMultihopAction', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsProbeReq() const [member function]
+    cls.add_method('IsProbeReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsProbeResp() const [member function]
+    cls.add_method('IsProbeResp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosAck() const [member function]
+    cls.add_method('IsQosAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosAmsdu() const [member function]
+    cls.add_method('IsQosAmsdu', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosBlockAck() const [member function]
+    cls.add_method('IsQosBlockAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosData() const [member function]
+    cls.add_method('IsQosData', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosEosp() const [member function]
+    cls.add_method('IsQosEosp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsQosNoAck() const [member function]
+    cls.add_method('IsQosNoAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsReassocReq() const [member function]
+    cls.add_method('IsReassocReq', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsReassocResp() const [member function]
+    cls.add_method('IsReassocResp', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsRetry() const [member function]
+    cls.add_method('IsRetry', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsRts() const [member function]
+    cls.add_method('IsRts', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): bool ns3::WifiMacHeader::IsToDs() const [member function]
+    cls.add_method('IsToDs', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAction() [member function]
+    cls.add_method('SetAction', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr1(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddr1', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr2(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddr2', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr3(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddr3', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAddr4(ns3::Mac48Address address) [member function]
+    cls.add_method('SetAddr4', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAssocReq() [member function]
+    cls.add_method('SetAssocReq', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetAssocResp() [member function]
+    cls.add_method('SetAssocResp', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBeacon() [member function]
+    cls.add_method('SetBeacon', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBlockAck() [member function]
+    cls.add_method('SetBlockAck', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetBlockAckReq() [member function]
+    cls.add_method('SetBlockAckReq', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsFrom() [member function]
+    cls.add_method('SetDsFrom', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsNotFrom() [member function]
+    cls.add_method('SetDsNotFrom', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsNotTo() [member function]
+    cls.add_method('SetDsNotTo', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDsTo() [member function]
+    cls.add_method('SetDsTo', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetDuration(ns3::Time duration) [member function]
+    cls.add_method('SetDuration', 
+                   'void', 
+                   [param('ns3::Time', 'duration')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetFragmentNumber(uint8_t frag) [member function]
+    cls.add_method('SetFragmentNumber', 
+                   'void', 
+                   [param('uint8_t', 'frag')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetId(uint16_t id) [member function]
+    cls.add_method('SetId', 
+                   'void', 
+                   [param('uint16_t', 'id')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetMoreFragments() [member function]
+    cls.add_method('SetMoreFragments', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetMultihopAction() [member function]
+    cls.add_method('SetMultihopAction', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetNoMoreFragments() [member function]
+    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', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetProbeResp() [member function]
+    cls.add_method('SetProbeResp', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAckPolicy(ns3::WifiMacHeader::QosAckPolicy policy) [member function]
+    cls.add_method('SetQosAckPolicy', 
+                   'void', 
+                   [param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosAmsdu() [member function]
+    cls.add_method('SetQosAmsdu', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosBlockAck() [member function]
+    cls.add_method('SetQosBlockAck', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosEosp() [member function]
+    cls.add_method('SetQosEosp', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
+    cls.add_method('SetQosNoAck', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAmsdu() [member function]
+    cls.add_method('SetQosNoAmsdu', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoEosp() [member function]
+    cls.add_method('SetQosNoEosp', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
+    cls.add_method('SetQosNormalAck', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosTid(uint8_t tid) [member function]
+    cls.add_method('SetQosTid', 
+                   'void', 
+                   [param('uint8_t', 'tid')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosTxopLimit(uint8_t txop) [member function]
+    cls.add_method('SetQosTxopLimit', 
+                   'void', 
+                   [param('uint8_t', 'txop')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetRawDuration(uint16_t duration) [member function]
+    cls.add_method('SetRawDuration', 
+                   'void', 
+                   [param('uint16_t', 'duration')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetRetry() [member function]
+    cls.add_method('SetRetry', 
+                   'void', 
+                   [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetSequenceNumber(uint16_t seq) [member function]
+    cls.add_method('SetSequenceNumber', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetType(ns3::WifiMacType type) [member function]
+    cls.add_method('SetType', 
+                   'void', 
+                   [param('ns3::WifiMacType', 'type')])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetTypeData() [member function]
+    cls.add_method('SetTypeData', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3WifiMacQueue_methods(root_module, cls):
+    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::WifiMacQueue(ns3::WifiMacQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiMacQueue const &', 'arg0')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::WifiMacQueue::WifiMacQueue() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::Dequeue(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::DequeueByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
+    cls.add_method('DequeueByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::DequeueFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
+    cls.add_method('DequeueFirstAvailable', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('ns3::Time &', 'tStamp'), param('ns3::QosBlockedDestinations const *', 'blockedPackets')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Enqueue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('Enqueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Flush() [member function]
+    cls.add_method('Flush', 
+                   'void', 
+                   [])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Time ns3::WifiMacQueue::GetMaxDelay() const [member function]
+    cls.add_method('GetMaxDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetMaxSize() const [member function]
+    cls.add_method('GetMaxSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetNPacketsByTidAndAddress(uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
+    cls.add_method('GetNPacketsByTidAndAddress', 
+                   'uint32_t', 
+                   [param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
+    ## wifi-mac-queue.h (module 'wifi'): uint32_t ns3::WifiMacQueue::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [])
+    ## wifi-mac-queue.h (module 'wifi'): static ns3::TypeId ns3::WifiMacQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-mac-queue.h (module 'wifi'): bool ns3::WifiMacQueue::IsEmpty() [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::Peek(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekByTidAndAddress', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr'), param('ns3::Time *', 'timestamp')])
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
+    cls.add_method('PeekFirstAvailable', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('ns3::Time &', 'tStamp'), param('ns3::QosBlockedDestinations const *', 'blockedPackets')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('PushFront', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## wifi-mac-queue.h (module 'wifi'): bool ns3::WifiMacQueue::Remove(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('Remove', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::SetMaxDelay(ns3::Time delay) [member function]
+    cls.add_method('SetMaxDelay', 
+                   'void', 
+                   [param('ns3::Time', 'delay')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::SetMaxSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')])
+    ## wifi-mac-queue.h (module 'wifi'): void ns3::WifiMacQueue::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Mac48Address ns3::WifiMacQueue::GetAddressForPacket(ns3::WifiMacHeader::AddressType type, std::_List_iterator<ns3::WifiMacQueue::Item> it) [member function]
+    cls.add_method('GetAddressForPacket', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::WifiMacHeader::AddressType', 'type'), param('std::_List_iterator< ns3::WifiMacQueue::Item >', 'it')], 
+                   visibility='protected')
+    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')])
+    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    cls.add_method('CalculateSnr', 
+                   'double', 
+                   [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('CalculateTxDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## 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', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
+    cls.add_method('GetDelayUntilIdle', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
+    cls.add_method('GetDsssRate11Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate1Mbps() [member function]
+    cls.add_method('GetDsssRate1Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate2Mbps() [member function]
+    cls.add_method('GetDsssRate2Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate5_5Mbps() [member function]
+    cls.add_method('GetDsssRate5_5Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
+    cls.add_method('GetErpOfdmRate12Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate18Mbps() [member function]
+    cls.add_method('GetErpOfdmRate18Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate24Mbps() [member function]
+    cls.add_method('GetErpOfdmRate24Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate36Mbps() [member function]
+    cls.add_method('GetErpOfdmRate36Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate48Mbps() [member function]
+    cls.add_method('GetErpOfdmRate48Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate54Mbps() [member function]
+    cls.add_method('GetErpOfdmRate54Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate6Mbps() [member function]
+    cls.add_method('GetErpOfdmRate6Mbps', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate9Mbps() [member function]
+    cls.add_method('GetErpOfdmRate9Mbps', 
+                   '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', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
+    cls.add_method('GetNTxPower', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
+                   '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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
+                   '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', 
+                   [], 
+                   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', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
+    cls.add_method('GetStateDuration', 
+                   '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', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
+    cls.add_method('GetTxPowerStart', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsModeSupported', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
+    cls.add_method('IsStateBusy', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
+    cls.add_method('IsStateCcaBusy', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
+    cls.add_method('IsStateIdle', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
+    cls.add_method('IsStateRx', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
+    cls.add_method('IsStateSleep', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
+    cls.add_method('IsStateSwitching', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
+    cls.add_method('IsStateTx', 
+                   '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, 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('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', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyRxDrop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyRxEnd', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTxBegin', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTxDrop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NotifyTxEnd', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('RegisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ResumeFromSleep() [member function]
+    cls.add_method('ResumeFromSleep', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
+                   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', 
+                   [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]
+    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::SetSleepMode() [member function]
+    cls.add_method('SetSleepMode', 
+                   'void', 
+                   [], 
+                   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'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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):
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager(ns3::WifiRemoteStationManager const & arg0) [copy constructor]
+    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::AddAllSupportedModes(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedModes', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## 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::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::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::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', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentSize(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
+    cls.add_method('GetFragmentSize', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentationThreshold() const [member function]
+    cls.add_method('GetFragmentationThreshold', 
+                   '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', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetMaxSlrc() const [member function]
+    cls.add_method('GetMaxSlrc', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetMaxSsrc() const [member function]
+    cls.add_method('GetMaxSsrc', 
+                   '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', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonUnicastMode() const [member function]
+    cls.add_method('GetNonUnicastMode', 
+                   '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::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', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsBrandNew(ns3::Mac48Address address) const [member function]
+    cls.add_method('IsBrandNew', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsLastFragment(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
+    cls.add_method('IsLastFragment', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsWaitAssocTxOk(ns3::Mac48Address address) const [member function]
+    cls.add_method('IsWaitAssocTxOk', 
+                   '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', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedFragmentation(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NeedFragmentation', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NeedRts', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRtsRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('NeedRtsRetransmission', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    cls.add_method('PrepareForQueue', 
+                   'void', 
+                   [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'): void ns3::WifiRemoteStationManager::RecordDisassociated(ns3::Mac48Address address) [member function]
+    cls.add_method('RecordDisassociated', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordGotAssocTxFailed(ns3::Mac48Address address) [member function]
+    cls.add_method('RecordGotAssocTxFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordGotAssocTxOk(ns3::Mac48Address address) [member function]
+    cls.add_method('RecordGotAssocTxOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordWaitAssocTxOk(ns3::Mac48Address address) [member function]
+    cls.add_method('RecordWaitAssocTxOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
+    cls.add_method('ReportDataFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('ReportDataOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportFinalDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
+    cls.add_method('ReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportFinalRtsFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
+    cls.add_method('ReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRtsFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
+    cls.add_method('ReportRtsFailed', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRtsOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('ReportRtsOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRxOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('ReportRxOk', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::Reset(ns3::Mac48Address address) [member function]
+    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', 
+                   [param('uint32_t', 'maxSlrc')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSsrc(uint32_t maxSsrc) [member function]
+    cls.add_method('SetMaxSsrc', 
+                   'void', 
+                   [param('uint32_t', 'maxSsrc')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetRtsCtsThreshold(uint32_t threshold) [member function]
+    cls.add_method('SetRtsCtsThreshold', 
+                   'void', 
+                   [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetupPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   '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'): ns3::Ptr<ns3::WifiMac> ns3::WifiRemoteStationManager::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::WifiMac >', 
+                   [], 
+                   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::GetNess(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNess', 
+                   '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'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   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', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::WifiRemoteStationManager::DoCreateStation() const [member function]
+    cls.add_method('DoCreateStation', 
+                   'ns3::WifiRemoteStation *', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## 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::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]
+    cls.add_method('DoNeedDataRetransmission', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedFragmentation(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedFragmentation', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedRts(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedRts', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedRtsRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedRtsRetransmission', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('DoReportDataOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('DoReportRtsOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('DoReportRxOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsLowLatency() const [member function]
+    cls.add_method('IsLowLatency', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3YansWavePhyHelper_methods(root_module, cls):
+    ## wave-helper.h (module 'wave'): ns3::YansWavePhyHelper::YansWavePhyHelper() [constructor]
+    cls.add_constructor([])
+    ## wave-helper.h (module 'wave'): ns3::YansWavePhyHelper::YansWavePhyHelper(ns3::YansWavePhyHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::YansWavePhyHelper const &', 'arg0')])
+    ## wave-helper.h (module 'wave'): static ns3::YansWavePhyHelper ns3::YansWavePhyHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::YansWavePhyHelper', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate6Mbps() [member function]
-    cls.add_method('GetErpOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
+    ## wave-helper.h (module 'wave'): void ns3::YansWavePhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
+    cls.add_method('EnableAsciiInternal', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream'), param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    ## wave-helper.h (module 'wave'): void ns3::YansWavePhyHelper::EnablePcapInternal(std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool promiscuous, bool explicitFilename) [member function]
+    cls.add_method('EnablePcapInternal', 
+                   'void', 
+                   [param('std::string', 'prefix'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('bool', 'promiscuous'), param('bool', 'explicitFilename')], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3ZetaRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ZetaRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate9Mbps() [member function]
-    cls.add_method('GetErpOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
+    ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable::ZetaRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
-    cls.add_method('GetFrequency', 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetValue(double alpha) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'alpha')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger(uint32_t alpha) [member function]
+    cls.add_method('GetInteger', 
                    'uint32_t', 
+                   [param('uint32_t', 'alpha')])
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   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_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   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_virtual=True)
+    return
+
+def register_Ns3ZipfRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ZipfRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   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', 
+    ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable::ZipfRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetN() const [member function]
+    cls.add_method('GetN', 
                    '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', 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetValue(uint32_t n, double alpha) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('uint32_t', 'n'), param('double', 'alpha')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger(uint32_t n, uint32_t alpha) [member function]
+    cls.add_method('GetInteger', 
                    'uint32_t', 
+                   [param('uint32_t', 'n'), param('uint32_t', 'alpha')])
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   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', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
                    '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', 
+                   is_virtual=True)
+    return
+
+def register_Ns3AmpduSubframeHeader_methods(root_module, cls):
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader::AmpduSubframeHeader(ns3::AmpduSubframeHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AmpduSubframeHeader const &', 'arg0')])
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader::AmpduSubframeHeader() [constructor]
+    cls.add_constructor([])
+    ## ampdu-subframe-header.h (module 'wifi'): uint32_t ns3::AmpduSubframeHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
                    'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint8_t ns3::AmpduSubframeHeader::GetCrc() const [member function]
+    cls.add_method('GetCrc', 
+                   'uint8_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', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
-                   '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', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
-                   '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', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
-                   '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_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::TypeId ns3::AmpduSubframeHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
-    cls.add_method('GetOfdmRate36Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint16_t ns3::AmpduSubframeHeader::GetLength() const [member function]
+    cls.add_method('GetLength', 
+                   'uint16_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint32_t ns3::AmpduSubframeHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW10MHz', 
-                   'ns3::WifiMode', 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint8_t ns3::AmpduSubframeHeader::GetSig() const [member function]
+    cls.add_method('GetSig', 
+                   'uint8_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
-                   'ns3::WifiMode', 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): static ns3::TypeId ns3::AmpduSubframeHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetCrc(uint8_t crc) [member function]
+    cls.add_method('SetCrc', 
+                   'void', 
+                   [param('uint8_t', 'crc')])
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetLength(uint16_t length) [member function]
+    cls.add_method('SetLength', 
+                   'void', 
+                   [param('uint16_t', 'length')])
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetSig() [member function]
+    cls.add_method('SetSig', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3Application_methods(root_module, cls):
+    ## application.h (module 'network'): ns3::Application::Application(ns3::Application const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Application const &', 'arg0')])
+    ## application.h (module 'network'): ns3::Application::Application() [constructor]
+    cls.add_constructor([])
+    ## application.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Application::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
                    [], 
-                   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_const=True)
+    ## application.h (module 'network'): static ns3::TypeId ns3::Application::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+    ## application.h (module 'network'): void ns3::Application::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## application.h (module 'network'): void ns3::Application::SetStartTime(ns3::Time start) [member function]
+    cls.add_method('SetStartTime', 
+                   'void', 
+                   [param('ns3::Time', 'start')])
+    ## application.h (module 'network'): void ns3::Application::SetStopTime(ns3::Time stop) [member function]
+    cls.add_method('SetStopTime', 
+                   'void', 
+                   [param('ns3::Time', 'stop')])
+    ## application.h (module 'network'): void ns3::Application::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
-    cls.add_method('GetOfdmRate48Mbps', 
-                   'ns3::WifiMode', 
+                   visibility='protected', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
-                   'ns3::WifiMode', 
+                   visibility='protected', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
-                   'ns3::WifiMode', 
+                   visibility='private', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   visibility='private', 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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
-    cls.add_method('GetOfdmRate54Mbps', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
-                   'ns3::WifiMode', 
+                   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_Ns3BsmApplication_methods(root_module, cls):
+    ## bsm-application.h (module 'wave'): ns3::BsmApplication::BsmApplication(ns3::BsmApplication const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BsmApplication const &', 'arg0')])
+    ## bsm-application.h (module 'wave'): ns3::BsmApplication::BsmApplication() [constructor]
+    cls.add_constructor([])
+    ## bsm-application.h (module 'wave'): int64_t ns3::BsmApplication::AssignStreams(int64_t streamIndex) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'streamIndex')])
+    ## bsm-application.h (module 'wave'): static ns3::TypeId ns3::BsmApplication::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
+    ## bsm-application.h (module 'wave'): void ns3::BsmApplication::Setup(ns3::Ipv4InterfaceContainer & i, int nodeId, ns3::Time totalTime, uint32_t wavePacketSize, ns3::Time waveInterval, double gpsAccuracyNs, std::vector<double, std::allocator<double> > rangesSq, ns3::Ptr<ns3::WaveBsmStats> waveBsmStats, std::vector<int, std::allocator<int> > * nodesMoving, int mode, ns3::Time txDelay) [member function]
+    cls.add_method('Setup', 
+                   'void', 
+                   [param('ns3::Ipv4InterfaceContainer &', 'i'), param('int', 'nodeId'), param('ns3::Time', 'totalTime'), param('uint32_t', 'wavePacketSize'), param('ns3::Time', 'waveInterval'), param('double', 'gpsAccuracyNs'), param('std::vector< double >', 'rangesSq'), param('ns3::Ptr< ns3::WaveBsmStats >', 'waveBsmStats'), param('std::vector< int > *', 'nodesMoving'), param('int', 'mode'), param('ns3::Time', 'txDelay')])
+    ## bsm-application.h (module 'wave'): ns3::BsmApplication::wavePort [variable]
+    cls.add_static_attribute('wavePort', 'int', is_const=False)
+    ## bsm-application.h (module 'wave'): void ns3::BsmApplication::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
-                   'ns3::WifiMode', 
+                   visibility='protected', is_virtual=True)
+    ## bsm-application.h (module 'wave'): void ns3::BsmApplication::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
-                   'ns3::WifiMode', 
+                   visibility='private', is_virtual=True)
+    ## bsm-application.h (module 'wave'): void ns3::BsmApplication::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   visibility='private', 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_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
+                   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_Ns3Channel_methods(root_module, cls):
+    ## channel.h (module 'network'): ns3::Channel::Channel(ns3::Channel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Channel const &', 'arg0')])
+    ## channel.h (module 'network'): ns3::Channel::Channel() [constructor]
+    cls.add_constructor([])
+    ## channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Channel::GetDevice(uint32_t i) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel.h (module 'network'): uint32_t ns3::Channel::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
                    [], 
-                   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_const=True)
+    ## channel.h (module 'network'): uint32_t ns3::Channel::GetNDevices() const [member function]
+    cls.add_method('GetNDevices', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel.h (module 'network'): static ns3::TypeId ns3::Channel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
-                   'ns3::WifiMode', 
+    return
+
+def register_Ns3ChannelCoordinationListener_methods(root_module, cls):
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinationListener::ChannelCoordinationListener() [constructor]
+    cls.add_constructor([])
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinationListener::ChannelCoordinationListener(ns3::ChannelCoordinationListener const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ChannelCoordinationListener const &', 'arg0')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinationListener::NotifyCchSlotStart(ns3::Time duration) [member function]
+    cls.add_method('NotifyCchSlotStart', 
+                   'void', 
+                   [param('ns3::Time', 'duration')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinationListener::NotifyGuardSlotStart(ns3::Time duration, bool cchi) [member function]
+    cls.add_method('NotifyGuardSlotStart', 
+                   'void', 
+                   [param('ns3::Time', 'duration'), param('bool', 'cchi')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinationListener::NotifySchSlotStart(ns3::Time duration) [member function]
+    cls.add_method('NotifySchSlotStart', 
+                   'void', 
+                   [param('ns3::Time', 'duration')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3ChannelCoordinator_methods(root_module, cls):
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinator::ChannelCoordinator(ns3::ChannelCoordinator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ChannelCoordinator const &', 'arg0')])
+    ## channel-coordinator.h (module 'wave'): ns3::ChannelCoordinator::ChannelCoordinator() [constructor]
+    cls.add_constructor([])
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetCchInterval() const [member function]
+    cls.add_method('GetCchInterval', 
+                   'ns3::Time', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
-    cls.add_method('GetOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): static ns3::Time ns3::ChannelCoordinator::GetDefaultCchInterval() [member function]
+    cls.add_method('GetDefaultCchInterval', 
+                   'ns3::Time', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
-                   'ns3::WifiMode', 
+    ## channel-coordinator.h (module 'wave'): static ns3::Time ns3::ChannelCoordinator::GetDefaultGuardInterval() [member function]
+    cls.add_method('GetDefaultGuardInterval', 
+                   'ns3::Time', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
-                   'ns3::WifiMode', 
+    ## channel-coordinator.h (module 'wave'): static ns3::Time ns3::ChannelCoordinator::GetDefaultSchInterval() [member function]
+    cls.add_method('GetDefaultSchInterval', 
+                   'ns3::Time', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpHeaderMode', 
-                   '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', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
-    cls.add_method('GetStateDuration', 
+    ## channel-coordinator.h (module 'wave'): static ns3::Time ns3::ChannelCoordinator::GetDefaultSyncInterval() [member function]
+    cls.add_method('GetDefaultSyncInterval', 
                    '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_static=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetGuardInterval() const [member function]
+    cls.add_method('GetGuardInterval', 
+                   'ns3::Time', 
                    [], 
-                   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', 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetIntervalTime(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('GetIntervalTime', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetRemainTime(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('GetRemainTime', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetSchInterval() const [member function]
+    cls.add_method('GetSchInterval', 
+                   'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
-    cls.add_method('GetTxPowerStart', 
-                   'double', 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::GetSyncInterval() const [member function]
+    cls.add_method('GetSyncInterval', 
+                   'ns3::Time', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): static ns3::TypeId ns3::ChannelCoordinator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
-    cls.add_method('IsModeSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
-    cls.add_method('IsStateBusy', 
+    ## channel-coordinator.h (module 'wave'): bool ns3::ChannelCoordinator::IsCchInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('IsCchInterval', 
                    'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
-    cls.add_method('IsStateCcaBusy', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
-    cls.add_method('IsStateIdle', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
-    cls.add_method('IsStateRx', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
-    cls.add_method('IsStateSleep', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): bool ns3::ChannelCoordinator::IsGuardInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('IsGuardInterval', 
                    'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
-    cls.add_method('IsStateSwitching', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): bool ns3::ChannelCoordinator::IsSchInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('IsSchInterval', 
                    'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
-    cls.add_method('IsStateTx', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): bool ns3::ChannelCoordinator::IsValidConfig() const [member function]
+    cls.add_method('IsValidConfig', 
                    '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, 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('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', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyRxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyRxEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTxBegin', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxDrop(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxEnd(ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NotifyTxEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::NeedTimeToCchInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('NeedTimeToCchInterval', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::NeedTimeToGuardInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('NeedTimeToGuardInterval', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): ns3::Time ns3::ChannelCoordinator::NeedTimeToSchInterval(ns3::Time duration=ns3::Seconds( )) const [member function]
+    cls.add_method('NeedTimeToSchInterval', 
+                   'ns3::Time', 
+                   [param('ns3::Time', 'duration', default_value='ns3::Seconds(0)')], 
+                   is_const=True)
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::RegisterListener(ns3::Ptr<ns3::ChannelCoordinationListener> listener) [member function]
     cls.add_method('RegisterListener', 
                    'void', 
-                   [param('ns3::WifiPhyListener *', 'listener')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ResumeFromSleep() [member function]
-    cls.add_method('ResumeFromSleep', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('SendPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   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', 
+                   [param('ns3::Ptr< ns3::ChannelCoordinationListener >', 'listener')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::SetCchInterval(ns3::Time cchi) [member function]
+    cls.add_method('SetCchInterval', 
                    'void', 
-                   [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
+                   [param('ns3::Time', 'cchi')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::SetGuardInterval(ns3::Time guardi) [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', 
+                   [param('ns3::Time', 'guardi')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::SetSchInterval(ns3::Time schi) [member function]
+    cls.add_method('SetSchInterval', 
                    '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', 
+                   [param('ns3::Time', 'schi')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::UnregisterAllListeners() [member function]
+    cls.add_method('UnregisterAllListeners', 
                    '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]
-    cls.add_method('SetReceiveOkCallback', 
+                   [])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::UnregisterListener(ns3::Ptr<ns3::ChannelCoordinationListener> listener) [member function]
+    cls.add_method('UnregisterListener', 
                    '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::SetSleepMode() [member function]
-    cls.add_method('SetSleepMode', 
+                   [param('ns3::Ptr< ns3::ChannelCoordinationListener >', 'listener')])
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
                    'void', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
+                   visibility='private', is_virtual=True)
+    ## channel-coordinator.h (module 'wave'): void ns3::ChannelCoordinator::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
                    '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', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3ChannelManager_methods(root_module, cls):
+    ## channel-manager.h (module 'wave'): ns3::ChannelManager::ChannelManager(ns3::ChannelManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ChannelManager const &', 'arg0')])
+    ## channel-manager.h (module 'wave'): ns3::ChannelManager::ChannelManager() [constructor]
+    cls.add_constructor([])
+    ## channel-manager.h (module 'wave'): static uint32_t ns3::ChannelManager::GetCch() [member function]
+    cls.add_method('GetCch', 
                    'uint32_t', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): bool ns3::ChannelManager::GetManagementAdaptable(uint32_t channelNumber) [member function]
+    cls.add_method('GetManagementAdaptable', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-manager.h (module 'wave'): ns3::WifiMode ns3::ChannelManager::GetManagementDataRate(uint32_t channelNumber) [member function]
+    cls.add_method('GetManagementDataRate', 
+                   'ns3::WifiMode', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-manager.h (module 'wave'): uint32_t ns3::ChannelManager::GetManagementPowerLevel(uint32_t channelNumber) [member function]
+    cls.add_method('GetManagementPowerLevel', 
+                   'uint32_t', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-manager.h (module 'wave'): static uint32_t ns3::ChannelManager::GetNumberOfWaveChannels() [member function]
+    cls.add_method('GetNumberOfWaveChannels', 
+                   'uint32_t', 
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): uint32_t ns3::ChannelManager::GetOperatingClass(uint32_t channelNumber) [member function]
+    cls.add_method('GetOperatingClass', 
+                   'uint32_t', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-manager.h (module 'wave'): static std::vector<unsigned int, std::allocator<unsigned int> > ns3::ChannelManager::GetSchs() [member function]
+    cls.add_method('GetSchs', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static ns3::TypeId ns3::ChannelManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static std::vector<unsigned int, std::allocator<unsigned int> > ns3::ChannelManager::GetWaveChannels() [member function]
+    cls.add_method('GetWaveChannels', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static bool ns3::ChannelManager::IsCch(uint32_t channelNumber) [member function]
+    cls.add_method('IsCch', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static bool ns3::ChannelManager::IsSch(uint32_t channelNumber) [member function]
+    cls.add_method('IsSch', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_static=True)
+    ## channel-manager.h (module 'wave'): static bool ns3::ChannelManager::IsWaveChannel(uint32_t channelNumber) [member function]
+    cls.add_method('IsWaveChannel', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_static=True)
     return
 
-def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager(ns3::WifiRemoteStationManager const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
+def register_Ns3ChannelScheduler_methods(root_module, cls):
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelScheduler::ChannelScheduler(ns3::ChannelScheduler const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ChannelScheduler const &', 'arg0')])
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelScheduler::ChannelScheduler() [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', 
+    ## channel-scheduler.h (module 'wave'): ns3::ChannelAccess ns3::ChannelScheduler::GetAssignedAccessType(uint32_t channelNumber) const [member function]
+    cls.add_method('GetAssignedAccessType', 
+                   'ns3::ChannelAccess', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): static ns3::TypeId ns3::ChannelScheduler::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsAlternatingAccessAssigned(uint32_t channelNumber) const [member function]
+    cls.add_method('IsAlternatingAccessAssigned', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsCchAccessAssigned() const [member function]
+    cls.add_method('IsCchAccessAssigned', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsChannelAccessAssigned(uint32_t channelNumber) const [member function]
+    cls.add_method('IsChannelAccessAssigned', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsContinuousAccessAssigned(uint32_t channelNumber) const [member function]
+    cls.add_method('IsContinuousAccessAssigned', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsDefaultCchAccessAssigned() const [member function]
+    cls.add_method('IsDefaultCchAccessAssigned', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsExtendedAccessAssigned(uint32_t channelNumber) const [member function]
+    cls.add_method('IsExtendedAccessAssigned', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::IsSchAccessAssigned() const [member function]
+    cls.add_method('IsSchAccessAssigned', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## channel-scheduler.h (module 'wave'): void ns3::ChannelScheduler::SetWaveNetDevice(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('SetWaveNetDevice', 
                    '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', 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')], 
+                   is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::StartSch(ns3::SchInfo const & schInfo) [member function]
+    cls.add_method('StartSch', 
+                   'bool', 
+                   [param('ns3::SchInfo const &', 'schInfo')])
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::StopSch(uint32_t channelNumber) [member function]
+    cls.add_method('StopSch', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::AssignAlternatingAccess(uint32_t channelNumber, bool immediate) [member function]
+    cls.add_method('AssignAlternatingAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber'), param('bool', 'immediate')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::AssignContinuousAccess(uint32_t channelNumber, bool immediate) [member function]
+    cls.add_method('AssignContinuousAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber'), param('bool', 'immediate')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::AssignDefaultCchAccess() [member function]
+    cls.add_method('AssignDefaultCchAccess', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::AssignExtendedAccess(uint32_t channelNumber, uint32_t extends, bool immediate) [member function]
+    cls.add_method('AssignExtendedAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber'), param('uint32_t', 'extends'), param('bool', 'immediate')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): void ns3::ChannelScheduler::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
-    ## 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')], 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## channel-scheduler.h (module 'wave'): bool ns3::ChannelScheduler::ReleaseAccess(uint32_t channelNumber) [member function]
+    cls.add_method('ReleaseAccess', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3ConstantRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ConstantRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable::ConstantRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetConstant() const [member function]
+    cls.add_method('GetConstant', 
+                   'double', 
+                   [], 
                    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')], 
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetValue(double constant) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'constant')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ConstantRandomVariable::GetInteger(uint32_t constant) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'constant')])
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ConstantRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3CtrlBAckRequestHeader_methods(root_module, cls):
+    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader(ns3::CtrlBAckRequestHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CtrlBAckRequestHeader const &', 'arg0')])
+    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader() [constructor]
+    cls.add_constructor([])
+    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckRequestHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): ns3::TypeId ns3::CtrlBAckRequestHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckRequestHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckRequestHeader::GetStartingSequence() const [member function]
+    cls.add_method('GetStartingSequence', 
+                   'uint16_t', 
+                   [], 
                    is_const=True)
-    ## 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::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', 
+    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckRequestHeader::GetStartingSequenceControl() const [member function]
+    cls.add_method('GetStartingSequenceControl', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): uint8_t ns3::CtrlBAckRequestHeader::GetTidInfo() const [member function]
+    cls.add_method('GetTidInfo', 
                    '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', 
+    ## ctrl-headers.h (module 'wifi'): static ns3::TypeId ns3::CtrlBAckRequestHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsBasic() const [member function]
+    cls.add_method('IsBasic', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultTxPowerLevel() const [member function]
-    cls.add_method('GetDefaultTxPowerLevel', 
-                   'uint8_t', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsCompressed() const [member function]
+    cls.add_method('IsCompressed', 
+                   'bool', 
                    [], 
                    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', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentSize(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
-    cls.add_method('GetFragmentSize', 
-                   'uint32_t', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetFragmentationThreshold() const [member function]
-    cls.add_method('GetFragmentationThreshold', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsMultiTid() const [member function]
+    cls.add_method('IsMultiTid', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::MustSendHtImmediateAck() const [member function]
+    cls.add_method('MustSendHtImmediateAck', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetHtImmediateAck(bool immediateAck) [member function]
+    cls.add_method('SetHtImmediateAck', 
+                   'void', 
+                   [param('bool', 'immediateAck')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetStartingSequence(uint16_t seq) [member function]
+    cls.add_method('SetStartingSequence', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetTidInfo(uint8_t tid) [member function]
+    cls.add_method('SetTidInfo', 
+                   'void', 
+                   [param('uint8_t', 'tid')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetType(ns3::BlockAckType type) [member function]
+    cls.add_method('SetType', 
+                   'void', 
+                   [param('ns3::BlockAckType', 'type')])
+    return
+
+def register_Ns3CtrlBAckResponseHeader_methods(root_module, cls):
+    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader(ns3::CtrlBAckResponseHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CtrlBAckResponseHeader const &', 'arg0')])
+    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader() [constructor]
+    cls.add_constructor([])
+    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckResponseHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
                    'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint16_t const * ns3::CtrlBAckResponseHeader::GetBitmap() const [member function]
+    cls.add_method('GetBitmap', 
+                   'uint16_t const *', 
                    [], 
                    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', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetMaxSlrc() const [member function]
-    cls.add_method('GetMaxSlrc', 
-                   'uint32_t', 
+    ## ctrl-headers.h (module 'wifi'): uint64_t ns3::CtrlBAckResponseHeader::GetCompressedBitmap() const [member function]
+    cls.add_method('GetCompressedBitmap', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetMaxSsrc() const [member function]
-    cls.add_method('GetMaxSsrc', 
-                   'uint32_t', 
+    ## ctrl-headers.h (module 'wifi'): ns3::TypeId ns3::CtrlBAckResponseHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNBasicMcs() const [member function]
-    cls.add_method('GetNBasicMcs', 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckResponseHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
                    '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', 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequence() const [member function]
+    cls.add_method('GetStartingSequence', 
+                   'uint16_t', 
                    [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonUnicastMode() const [member function]
-    cls.add_method('GetNonUnicastMode', 
-                   'ns3::WifiMode', 
+    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequenceControl() const [member function]
+    cls.add_method('GetStartingSequenceControl', 
+                   'uint16_t', 
                    [], 
                    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', 
+    ## ctrl-headers.h (module 'wifi'): uint8_t ns3::CtrlBAckResponseHeader::GetTidInfo() const [member function]
+    cls.add_method('GetTidInfo', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
-    ## 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]
+    ## ctrl-headers.h (module 'wifi'): static ns3::TypeId ns3::CtrlBAckResponseHeader::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', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsBasic() const [member function]
+    cls.add_method('IsBasic', 
                    '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', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsCompressed() const [member function]
+    cls.add_method('IsCompressed', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address')], 
+                   [], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsBrandNew(ns3::Mac48Address address) const [member function]
-    cls.add_method('IsBrandNew', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsFragmentReceived(uint16_t seq, uint8_t frag) const [member function]
+    cls.add_method('IsFragmentReceived', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address')], 
+                   [param('uint16_t', 'seq'), param('uint8_t', 'frag')], 
                    is_const=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsLastFragment(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fragmentNumber) [member function]
-    cls.add_method('IsLastFragment', 
-                   'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fragmentNumber')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsWaitAssocTxOk(ns3::Mac48Address address) const [member function]
-    cls.add_method('IsWaitAssocTxOk', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsMultiTid() const [member function]
+    cls.add_method('IsMultiTid', 
                    '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', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedFragmentation(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NeedFragmentation', 
-                   'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NeedRts', 
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsPacketReceived(uint16_t seq) const [member function]
+    cls.add_method('IsPacketReceived', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRtsRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
-    cls.add_method('NeedRtsRetransmission', 
+                   [param('uint16_t', 'seq')], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::MustSendHtImmediateAck() const [member function]
+    cls.add_method('MustSendHtImmediateAck', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
-    cls.add_method('PrepareForQueue', 
-                   'void', 
-                   [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'): void ns3::WifiRemoteStationManager::RecordDisassociated(ns3::Mac48Address address) [member function]
-    cls.add_method('RecordDisassociated', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordGotAssocTxFailed(ns3::Mac48Address address) [member function]
-    cls.add_method('RecordGotAssocTxFailed', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordGotAssocTxOk(ns3::Mac48Address address) [member function]
-    cls.add_method('RecordGotAssocTxOk', 
-                   'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordWaitAssocTxOk(ns3::Mac48Address address) [member function]
-    cls.add_method('RecordWaitAssocTxOk', 
+                   [], 
+                   is_const=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
-    cls.add_method('ReportDataFailed', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::ResetBitmap() [member function]
+    cls.add_method('ResetBitmap', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
-    cls.add_method('ReportDataOk', 
+                   [])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportFinalDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
-    cls.add_method('ReportFinalDataFailed', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetHtImmediateAck(bool immediateAck) [member function]
+    cls.add_method('SetHtImmediateAck', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportFinalRtsFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
-    cls.add_method('ReportFinalRtsFailed', 
+                   [param('bool', 'immediateAck')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetReceivedFragment(uint16_t seq, uint8_t frag) [member function]
+    cls.add_method('SetReceivedFragment', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRtsFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
-    cls.add_method('ReportRtsFailed', 
+                   [param('uint16_t', 'seq'), param('uint8_t', 'frag')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetReceivedPacket(uint16_t seq) [member function]
+    cls.add_method('SetReceivedPacket', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRtsOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
-    cls.add_method('ReportRtsOk', 
+                   [param('uint16_t', 'seq')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetStartingSequence(uint16_t seq) [member function]
+    cls.add_method('SetStartingSequence', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportRxOk(ns3::Mac48Address address, ns3::WifiMacHeader const * header, double rxSnr, ns3::WifiMode txMode) [member function]
-    cls.add_method('ReportRxOk', 
+                   [param('uint16_t', 'seq')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetStartingSequenceControl(uint16_t seqControl) [member function]
+    cls.add_method('SetStartingSequenceControl', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::Reset() [member function]
-    cls.add_method('Reset', 
+                   [param('uint16_t', 'seqControl')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetTidInfo(uint8_t tid) [member function]
+    cls.add_method('SetTidInfo', 
                    'void', 
-                   [])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::Reset(ns3::Mac48Address address) [member function]
-    cls.add_method('Reset', 
+                   [param('uint8_t', 'tid')])
+    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetType(ns3::BlockAckType type) [member function]
+    cls.add_method('SetType', 
                    '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', 
+                   [param('ns3::BlockAckType', 'type')])
+    return
+
+def register_Ns3Dcf_methods(root_module, cls):
+    ## dcf.h (module 'wifi'): ns3::Dcf::Dcf() [constructor]
+    cls.add_constructor([])
+    ## dcf.h (module 'wifi'): ns3::Dcf::Dcf(ns3::Dcf const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Dcf const &', 'arg0')])
+    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetAifsn() const [member function]
+    cls.add_method('GetAifsn', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetMaxCw() const [member function]
+    cls.add_method('GetMaxCw', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetMinCw() const [member function]
+    cls.add_method('GetMinCw', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetAifsn(uint32_t aifsn) [member function]
+    cls.add_method('SetAifsn', 
                    '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', 
+                   [param('uint32_t', 'aifsn')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetMaxCw(uint32_t maxCw) [member function]
+    cls.add_method('SetMaxCw', 
                    'void', 
-                   [param('uint32_t', 'threshold')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetHtSupported(bool enable) [member function]
-    cls.add_method('SetHtSupported', 
+                   [param('uint32_t', 'maxCw')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## dcf.h (module 'wifi'): void ns3::Dcf::SetMinCw(uint32_t minCw) [member function]
+    cls.add_method('SetMinCw', 
                    'void', 
-                   [param('bool', 'enable')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSlrc(uint32_t maxSlrc) [member function]
-    cls.add_method('SetMaxSlrc', 
+                   [param('uint32_t', 'minCw')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3DefaultChannelScheduler_methods(root_module, cls):
+    ## default-channel-scheduler.h (module 'wave'): ns3::DefaultChannelScheduler::DefaultChannelScheduler(ns3::DefaultChannelScheduler const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DefaultChannelScheduler const &', 'arg0')])
+    ## default-channel-scheduler.h (module 'wave'): ns3::DefaultChannelScheduler::DefaultChannelScheduler() [constructor]
+    cls.add_constructor([])
+    ## default-channel-scheduler.h (module 'wave'): ns3::ChannelAccess ns3::DefaultChannelScheduler::GetAssignedAccessType(uint32_t channelNumber) const [member function]
+    cls.add_method('GetAssignedAccessType', 
+                   'ns3::ChannelAccess', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True, is_virtual=True)
+    ## default-channel-scheduler.h (module 'wave'): static ns3::TypeId ns3::DefaultChannelScheduler::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::NotifyCchSlotStart(ns3::Time duration) [member function]
+    cls.add_method('NotifyCchSlotStart', 
                    'void', 
-                   [param('uint32_t', 'maxSlrc')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetMaxSsrc(uint32_t maxSsrc) [member function]
-    cls.add_method('SetMaxSsrc', 
+                   [param('ns3::Time', 'duration')])
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::NotifyGuardSlotStart(ns3::Time duration, bool cchi) [member function]
+    cls.add_method('NotifyGuardSlotStart', 
                    'void', 
-                   [param('uint32_t', 'maxSsrc')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetRtsCtsThreshold(uint32_t threshold) [member function]
-    cls.add_method('SetRtsCtsThreshold', 
+                   [param('ns3::Time', 'duration'), param('bool', 'cchi')])
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::NotifySchSlotStart(ns3::Time duration) [member function]
+    cls.add_method('NotifySchSlotStart', 
                    'void', 
-                   [param('uint32_t', 'threshold')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
-    cls.add_method('SetupPhy', 
+                   [param('ns3::Time', 'duration')])
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::SetWaveNetDevice(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('SetWaveNetDevice', 
                    'void', 
-                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')], 
                    is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   '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', 
-                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
-                   is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::WifiRemoteStationManager::DoCreateStation() const [member function]
-    cls.add_method('DoCreateStation', 
-                   'ns3::WifiRemoteStation *', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## 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', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::AssignAlternatingAccess(uint32_t channelNumber, bool immediate) [member function]
+    cls.add_method('AssignAlternatingAccess', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
+                   [param('uint32_t', 'channelNumber'), param('bool', 'immediate')], 
                    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', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::AssignContinuousAccess(uint32_t channelNumber, bool immediate) [member function]
+    cls.add_method('AssignContinuousAccess', 
                    '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')], 
+                   [param('uint32_t', 'channelNumber'), param('bool', 'immediate')], 
                    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', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::AssignDefaultCchAccess() [member function]
+    cls.add_method('AssignDefaultCchAccess', 
                    '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', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::AssignExtendedAccess(uint32_t channelNumber, uint32_t extends, bool immediate) [member function]
+    cls.add_method('AssignExtendedAccess', 
                    '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')], 
+                   [param('uint32_t', 'channelNumber'), param('uint32_t', 'extends'), param('bool', 'immediate')], 
                    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')], 
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
                    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::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]
-    cls.add_method('DoNeedDataRetransmission', 
-                   'bool', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+    ## default-channel-scheduler.h (module 'wave'): void ns3::DefaultChannelScheduler::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
                    visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedFragmentation(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
-    cls.add_method('DoNeedFragmentation', 
+    ## default-channel-scheduler.h (module 'wave'): bool ns3::DefaultChannelScheduler::ReleaseAccess(uint32_t channelNumber) [member function]
+    cls.add_method('ReleaseAccess', 
                    'bool', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   [param('uint32_t', 'channelNumber')], 
                    visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedRts(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
-    cls.add_method('DoNeedRts', 
+    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', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable::DeterministicRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::DeterministicRandomVariable::SetValueArray(double * values, uint64_t length) [member function]
+    cls.add_method('SetValueArray', 
+                   'void', 
+                   [param('double *', 'values'), param('uint64_t', 'length')])
+    ## random-variable-stream.h (module 'core'): double ns3::DeterministicRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::DeterministicRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3EdcaTxopN_methods(root_module, cls):
+    ## edca-txop-n.h (module 'wifi'): static ns3::TypeId ns3::EdcaTxopN::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::EdcaTxopN() [constructor]
+    cls.add_constructor([])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetLow(ns3::Ptr<ns3::MacLow> low) [member function]
+    cls.add_method('SetLow', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MacLow >', 'low')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
+    cls.add_method('SetTxMiddle', 
+                   'void', 
+                   [param('ns3::MacTxMiddle *', 'txMiddle')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetManager(ns3::DcfManager * manager) [member function]
+    cls.add_method('SetManager', 
+                   'void', 
+                   [param('ns3::DcfManager *', 'manager')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxFailedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> remoteManager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'remoteManager')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTypeOfStation(ns3::TypeOfStation type) [member function]
+    cls.add_method('SetTypeOfStation', 
+                   'void', 
+                   [param('ns3::TypeOfStation', 'type')])
+    ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation ns3::EdcaTxopN::GetTypeOfStation() const [member function]
+    cls.add_method('GetTypeOfStation', 
+                   'ns3::TypeOfStation', 
+                   [], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetEdcaQueue() const [member function]
+    cls.add_method('GetEdcaQueue', 
+                   'ns3::Ptr< ns3::WifiMacQueue >', 
+                   [], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMinCw(uint32_t minCw) [member function]
+    cls.add_method('SetMinCw', 
+                   'void', 
+                   [param('uint32_t', 'minCw')], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMaxCw(uint32_t maxCw) [member function]
+    cls.add_method('SetMaxCw', 
+                   'void', 
+                   [param('uint32_t', 'maxCw')], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAifsn(uint32_t aifsn) [member function]
+    cls.add_method('SetAifsn', 
+                   'void', 
+                   [param('uint32_t', 'aifsn')], 
+                   is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
+    cls.add_method('GetMinCw', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMaxCw() const [member function]
+    cls.add_method('GetMaxCw', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetAifsn() const [member function]
+    cls.add_method('GetAifsn', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
+    cls.add_method('Low', 
+                   'ns3::Ptr< ns3::MacLow >', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MsduAggregator> ns3::EdcaTxopN::GetMsduAggregator() const [member function]
+    cls.add_method('GetMsduAggregator', 
+                   'ns3::Ptr< ns3::MsduAggregator >', 
+                   [], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBaAgreementExists', 
                    'bool', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
-                   visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoNeedRtsRetransmission(ns3::WifiRemoteStation * station, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
-    cls.add_method('DoNeedRtsRetransmission', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPacketsInBa', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteAmpduTransfer(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduTransfer', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedsAccess() const [member function]
+    cls.add_method('NeedsAccess', 
                    'bool', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
-                   visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoReportDataFailed', 
+                   [], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyAccessGranted() [member function]
+    cls.add_method('NotifyAccessGranted', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
-    cls.add_method('DoReportDataOk', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyInternalCollision() [member function]
+    cls.add_method('NotifyInternalCollision', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoReportFinalDataFailed', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyCollision() [member function]
+    cls.add_method('NotifyCollision', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoReportFinalRtsFailed', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyChannelSwitching() [member function]
+    cls.add_method('NotifyChannelSwitching', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
-    cls.add_method('DoReportRtsFailed', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifySleep() [member function]
+    cls.add_method('NotifySleep', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
-    cls.add_method('DoReportRtsOk', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyWakeUp() [member function]
+    cls.add_method('NotifyWakeUp', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
-    cls.add_method('DoReportRxOk', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotCts(double snr, ns3::WifiMode txMode) [member function]
+    cls.add_method('GotCts', 
                    'void', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsLowLatency() const [member function]
-    cls.add_method('IsLowLatency', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', 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', 
+                   [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedCts() [member function]
+    cls.add_method('MissedCts', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAck(double snr, ns3::WifiMode txMode) [member function]
+    cls.add_method('GotAck', 
+                   'void', 
+                   [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
+    cls.add_method('GotBlockAck', 
+                   'void', 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
+    cls.add_method('MissedBlockAck', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAddBaResponse(ns3::MgtAddBaResponseHeader const * respHdr, ns3::Mac48Address recipient) [member function]
+    cls.add_method('GotAddBaResponse', 
+                   'void', 
+                   [param('ns3::MgtAddBaResponseHeader const *', 'respHdr'), param('ns3::Mac48Address', 'recipient')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotDelBaFrame(ns3::MgtDelBaHeader const * delBaHdr, ns3::Mac48Address recipient) [member function]
+    cls.add_method('GotDelBaFrame', 
+                   'void', 
+                   [param('ns3::MgtDelBaHeader const *', 'delBaHdr'), param('ns3::Mac48Address', 'recipient')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedAck() [member function]
+    cls.add_method('MissedAck', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
+    cls.add_method('StartNext', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::Cancel() [member function]
+    cls.add_method('Cancel', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::EndTxNoAck() [member function]
+    cls.add_method('EndTxNoAck', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RestartAccessIfNeeded() [member function]
+    cls.add_method('RestartAccessIfNeeded', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartAccessIfNeeded() [member function]
+    cls.add_method('StartAccessIfNeeded', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRts() [member function]
+    cls.add_method('NeedRts', 
                    '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', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
+    cls.add_method('NeedRtsRetransmission', 
                    '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', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
+    cls.add_method('NeedDataRetransmission', 
                    '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', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
+    cls.add_method('NeedBarRetransmission', 
                    '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', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedFragmentation() const [member function]
+    cls.add_method('NeedFragmentation', 
                    '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', 
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNextFragmentSize() [member function]
+    cls.add_method('GetNextFragmentSize', 
+                   'uint32_t', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetFragmentSize() [member function]
+    cls.add_method('GetFragmentSize', 
+                   'uint32_t', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetFragmentOffset() [member function]
+    cls.add_method('GetFragmentOffset', 
+                   'uint32_t', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::IsLastFragment() const [member function]
+    cls.add_method('IsLastFragment', 
+                   'bool', 
                    [], 
-                   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_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NextFragment() [member function]
+    cls.add_method('NextFragment', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet> ns3::EdcaTxopN::GetFragmentPacket(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetFragmentPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAccessCategory(ns3::AcIndex ac) [member function]
+    cls.add_method('SetAccessCategory', 
+                   'void', 
+                   [param('ns3::AcIndex', 'ac')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('Queue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMsduAggregator(ns3::Ptr<ns3::MsduAggregator> aggr) [member function]
+    cls.add_method('SetMsduAggregator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MsduAggregator >', 'aggr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('PushFront', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteConfig() [member function]
+    cls.add_method('CompleteConfig', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetBlockAckThreshold(uint8_t threshold) [member function]
+    cls.add_method('SetBlockAckThreshold', 
+                   'void', 
+                   [param('uint8_t', 'threshold')])
+    ## edca-txop-n.h (module 'wifi'): uint8_t ns3::EdcaTxopN::GetBlockAckThreshold() const [member function]
+    cls.add_method('GetBlockAckThreshold', 
+                   'uint8_t', 
                    [], 
-                   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', 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetBlockAckInactivityTimeout(uint16_t timeout) [member function]
+    cls.add_method('SetBlockAckInactivityTimeout', 
+                   'void', 
+                   [param('uint16_t', 'timeout')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SendDelbaFrame(ns3::Mac48Address addr, uint8_t tid, bool byOriginator) [member function]
+    cls.add_method('SendDelbaFrame', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'addr'), param('uint8_t', 'tid'), param('bool', 'byOriginator')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist() [member function]
+    cls.add_method('GetAmpduExist', 
                    'bool', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(bool ampdu) [member function]
+    cls.add_method('SetAmpduExist', 
+                   'void', 
+                   [param('bool', 'ampdu')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RemoveRetransmitPacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveRetransmitPacket', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::EdcaTxopN::PeekNextRetransmitPacket(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextRetransmitPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxOk(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxOk', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxFailed(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxFailed', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): int64_t ns3::EdcaTxopN::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   visibility='private', 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]
+def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [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 >', 
+    ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::CDF(double v, double c) [member function]
+    cls.add_method('CDF', 
+                   'void', 
+                   [param('double', 'v'), param('double', 'c')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::EmpiricalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
                    [], 
-                   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)
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::EmpiricalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    cls.add_method('Interpolate', 
+                   'double', 
+                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   visibility='private', is_virtual=True)
+    ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
+    cls.add_method('Validate', 
+                   'void', 
+                   [], 
+                   visibility='private', 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]
+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([])
-    ## 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]
+    ## 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, is_virtual=True)
-    ## callback.h (module 'core'): bool ns3::CallbackValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+                   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')], 
-                   is_virtual=True)
-    ## callback.h (module 'core'): std::string ns3::CallbackValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+                   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, 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')])
+                   is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3CtrlBAckRequestHeader_methods(root_module, cls):
-    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader(ns3::CtrlBAckRequestHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CtrlBAckRequestHeader const &', 'arg0')])
-    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader::CtrlBAckRequestHeader() [constructor]
-    cls.add_constructor([])
-    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckRequestHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): ns3::TypeId ns3::CtrlBAckRequestHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
+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', 
                    'ns3::TypeId', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckRequestHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable::ErlangRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetK() const [member function]
+    cls.add_method('GetK', 
                    'uint32_t', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckRequestHeader::GetStartingSequence() const [member function]
-    cls.add_method('GetStartingSequence', 
-                   'uint16_t', 
-                   [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckRequestHeader::GetStartingSequenceControl() const [member function]
-    cls.add_method('GetStartingSequenceControl', 
-                   'uint16_t', 
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetLambda() const [member function]
+    cls.add_method('GetLambda', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): uint8_t ns3::CtrlBAckRequestHeader::GetTidInfo() const [member function]
-    cls.add_method('GetTidInfo', 
-                   'uint8_t', 
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetValue(uint32_t k, double lambda) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('uint32_t', 'k'), param('double', 'lambda')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetInteger(uint32_t k, uint32_t lambda) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'k'), param('uint32_t', 'lambda')])
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True)
-    ## ctrl-headers.h (module 'wifi'): static ns3::TypeId ns3::CtrlBAckRequestHeader::GetTypeId() [member function]
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_Ns3ExponentialRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ExponentialRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsBasic() const [member function]
-    cls.add_method('IsBasic', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable::ExponentialRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsCompressed() const [member function]
-    cls.add_method('IsCompressed', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::IsMultiTid() const [member function]
-    cls.add_method('IsMultiTid', 
-                   'bool', 
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetValue(double mean, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ExponentialRandomVariable::GetInteger(uint32_t mean, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckRequestHeader::MustSendHtImmediateAck() const [member function]
-    cls.add_method('MustSendHtImmediateAck', 
-                   'bool', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ExponentialRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3ExtendedSupportedRatesIE_methods(root_module, cls):
+    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::ExtendedSupportedRatesIE const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ExtendedSupportedRatesIE const &', 'arg0')])
+    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE() [constructor]
+    cls.add_constructor([])
+    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::SupportedRates * rates) [constructor]
+    cls.add_constructor([param('ns3::SupportedRates *', 'rates')])
+    ## supported-rates.h (module 'wifi'): uint8_t ns3::ExtendedSupportedRatesIE::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)
+    ## supported-rates.h (module 'wifi'): ns3::WifiInformationElementId ns3::ExtendedSupportedRatesIE::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
                    [], 
-                   is_const=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## supported-rates.h (module 'wifi'): uint8_t ns3::ExtendedSupportedRatesIE::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## supported-rates.h (module 'wifi'): uint16_t ns3::ExtendedSupportedRatesIE::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## supported-rates.h (module 'wifi'): ns3::Buffer::Iterator ns3::ExtendedSupportedRatesIE::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetHtImmediateAck(bool immediateAck) [member function]
-    cls.add_method('SetHtImmediateAck', 
-                   'void', 
-                   [param('bool', 'immediateAck')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetStartingSequence(uint16_t seq) [member function]
-    cls.add_method('SetStartingSequence', 
-                   'void', 
-                   [param('uint16_t', 'seq')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetTidInfo(uint8_t tid) [member function]
-    cls.add_method('SetTidInfo', 
-                   'void', 
-                   [param('uint8_t', 'tid')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckRequestHeader::SetType(ns3::BlockAckType type) [member function]
-    cls.add_method('SetType', 
+    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SetSupportedRates(ns3::SupportedRates * rates) [member function]
+    cls.add_method('SetSupportedRates', 
                    'void', 
-                   [param('ns3::BlockAckType', 'type')])
+                   [param('ns3::SupportedRates *', 'rates')])
     return
 
-def register_Ns3CtrlBAckResponseHeader_methods(root_module, cls):
-    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader(ns3::CtrlBAckResponseHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CtrlBAckResponseHeader const &', 'arg0')])
-    ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader() [constructor]
+def register_Ns3GammaRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::GammaRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable::GammaRandomVariable() [constructor]
     cls.add_constructor([])
-    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckResponseHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): uint16_t const * ns3::CtrlBAckResponseHeader::GetBitmap() const [member function]
-    cls.add_method('GetBitmap', 
-                   'uint16_t const *', 
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): uint64_t ns3::CtrlBAckResponseHeader::GetCompressedBitmap() const [member function]
-    cls.add_method('GetCompressedBitmap', 
-                   'uint64_t', 
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetBeta() const [member function]
+    cls.add_method('GetBeta', 
+                   'double', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): ns3::TypeId ns3::CtrlBAckResponseHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetValue(double alpha, double beta) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'alpha'), param('double', 'beta')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::GammaRandomVariable::GetInteger(uint32_t alpha, uint32_t beta) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'alpha'), param('uint32_t', 'beta')])
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): uint32_t ns3::CtrlBAckResponseHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::GammaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
                    'uint32_t', 
                    [], 
+                   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)
-    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequence() const [member function]
-    cls.add_method('GetStartingSequence', 
-                   'uint16_t', 
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAmpduParameters() const [member function]
+    cls.add_method('GetAmpduParameters', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequenceControl() const [member function]
-    cls.add_method('GetStartingSequenceControl', 
+    ## 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)
-    ## ctrl-headers.h (module 'wifi'): uint8_t ns3::CtrlBAckResponseHeader::GetTidInfo() const [member function]
-    cls.add_method('GetTidInfo', 
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
                    'uint8_t', 
                    [], 
-                   is_const=True)
-    ## ctrl-headers.h (module 'wifi'): static ns3::TypeId ns3::CtrlBAckResponseHeader::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   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_static=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsBasic() const [member function]
-    cls.add_method('IsBasic', 
-                   'bool', 
+                   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)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsCompressed() const [member function]
-    cls.add_method('IsCompressed', 
-                   'bool', 
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval20() const [member function]
+    cls.add_method('GetShortGuardInterval20', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsFragmentReceived(uint16_t seq, uint8_t frag) const [member function]
-    cls.add_method('IsFragmentReceived', 
-                   'bool', 
-                   [param('uint16_t', 'seq'), param('uint8_t', 'frag')], 
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
+    cls.add_method('GetSupportedChannelWidth', 
+                   'uint8_t', 
+                   [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsMultiTid() const [member function]
-    cls.add_method('IsMultiTid', 
-                   'bool', 
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
+    cls.add_method('GetSupportedMcsSet1', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::IsPacketReceived(uint16_t seq) const [member function]
-    cls.add_method('IsPacketReceived', 
-                   'bool', 
-                   [param('uint16_t', 'seq')], 
+    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
+    cls.add_method('GetSupportedMcsSet2', 
+                   'uint64_t', 
+                   [], 
                    is_const=True)
-    ## ctrl-headers.h (module 'wifi'): bool ns3::CtrlBAckResponseHeader::MustSendHtImmediateAck() const [member function]
-    cls.add_method('MustSendHtImmediateAck', 
+    ## 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)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
                    'void', 
-                   [param('std::ostream &', 'os')], 
+                   [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::ResetBitmap() [member function]
-    cls.add_method('ResetBitmap', 
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAmpduParameters(uint8_t ctrl) [member function]
+    cls.add_method('SetAmpduParameters', 
                    'void', 
-                   [])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
+    cls.add_method('SetGreenfield', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetHtImmediateAck(bool immediateAck) [member function]
-    cls.add_method('SetHtImmediateAck', 
+                   [param('uint8_t', 'greenfield')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
+    cls.add_method('SetHtCapabilitiesInfo', 
                    'void', 
-                   [param('bool', 'immediateAck')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetReceivedFragment(uint16_t seq, uint8_t frag) [member function]
-    cls.add_method('SetReceivedFragment', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
                    'void', 
-                   [param('uint16_t', 'seq'), param('uint8_t', 'frag')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetReceivedPacket(uint16_t seq) [member function]
-    cls.add_method('SetReceivedPacket', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
+    cls.add_method('SetLdpc', 
                    'void', 
-                   [param('uint16_t', 'seq')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetStartingSequence(uint16_t seq) [member function]
-    cls.add_method('SetStartingSequence', 
+                   [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
                    'void', 
-                   [param('uint16_t', 'seq')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetStartingSequenceControl(uint16_t seqControl) [member function]
-    cls.add_method('SetStartingSequenceControl', 
+                   [param('uint8_t', 'index')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval20', 
                    'void', 
-                   [param('uint16_t', 'seqControl')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetTidInfo(uint8_t tid) [member function]
-    cls.add_method('SetTidInfo', 
+                   [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', 'tid')])
-    ## ctrl-headers.h (module 'wifi'): void ns3::CtrlBAckResponseHeader::SetType(ns3::BlockAckType type) [member function]
-    cls.add_method('SetType', 
+                   [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('ns3::BlockAckType', 'type')])
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
     return
 
-def register_Ns3Dcf_methods(root_module, cls):
-    ## dcf.h (module 'wifi'): ns3::Dcf::Dcf() [constructor]
+def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
+    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
     cls.add_constructor([])
-    ## dcf.h (module 'wifi'): ns3::Dcf::Dcf(ns3::Dcf const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Dcf const &', 'arg0')])
-    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetAifsn() const [member function]
-    cls.add_method('GetAifsn', 
+    ## 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_Ns3Ipv4_methods(root_module, cls):
+    ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
+    ## ipv4.h (module 'internet'): ns3::Ipv4::Ipv4() [constructor]
+    cls.add_constructor([])
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::AddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
                    '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', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetMaxCw() const [member function]
-    cls.add_method('GetMaxCw', 
+    ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForAddress(ns3::Ipv4Address address) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): int32_t ns3::Ipv4::GetInterfaceForPrefix(ns3::Ipv4Address address, ns3::Ipv4Mask mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv4Address', 'address'), param('ns3::Ipv4Mask', 'mask')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint16_t ns3::Ipv4::GetMetric(uint32_t interface) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint16_t ns3::Ipv4::GetMtu(uint32_t interface) const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
+                   'uint32_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): uint32_t ns3::Ipv4::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): uint32_t ns3::Dcf::GetMinCw() const [member function]
-    cls.add_method('GetMinCw', 
-                   'uint32_t', 
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4::GetNetDevice(uint32_t interface) [member function]
+    cls.add_method('GetNetDevice', 
+                   '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 >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): static ns3::TypeId ns3::Dcf::GetTypeId() [member function]
+    ## ipv4.h (module 'internet'): static ns3::TypeId ns3::Ipv4::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dcf.h (module 'wifi'): void ns3::Dcf::SetAifsn(uint32_t aifsn) [member function]
-    cls.add_method('SetAifsn', 
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
                    'void', 
-                   [param('uint32_t', 'aifsn')], 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): void ns3::Dcf::SetMaxCw(uint32_t maxCw) [member function]
-    cls.add_method('SetMaxCw', 
-                   'void', 
-                   [param('uint32_t', 'maxCw')], 
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+    cls.add_method('IsDestinationAddress', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsForwarding(uint32_t interface) const [member function]
+    cls.add_method('IsForwarding', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsUp(uint32_t interface) const [member function]
+    cls.add_method('IsUp', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## dcf.h (module 'wifi'): void ns3::Dcf::SetMinCw(uint32_t minCw) [member function]
-    cls.add_method('SetMinCw', 
+    ## 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', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device'), param('ns3::Ipv4Address', 'dst'), param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('Send', 
                    'void', 
-                   [param('uint32_t', 'minCw')], 
+                   [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)
-    return
-
-def register_Ns3EdcaTxopN_methods(root_module, cls):
-    ## edca-txop-n.h (module 'wifi'): static ns3::TypeId ns3::EdcaTxopN::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::EdcaTxopN() [constructor]
-    cls.add_constructor([])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoDispose() [member function]
-    cls.add_method('DoDispose', 
+    ## 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', 
-                   [], 
-                   is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetLow(ns3::Ptr<ns3::MacLow> low) [member function]
-    cls.add_method('SetLow', 
+                   [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', 
-                   [param('ns3::Ptr< ns3::MacLow >', 'low')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
-    cls.add_method('SetTxMiddle', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetForwarding(uint32_t interface, bool val) [member function]
+    cls.add_method('SetForwarding', 
                    'void', 
-                   [param('ns3::MacTxMiddle *', 'txMiddle')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetManager(ns3::DcfManager * manager) [member function]
-    cls.add_method('SetManager', 
+                   [param('uint32_t', 'interface'), param('bool', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetMetric(uint32_t interface, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
                    'void', 
-                   [param('ns3::DcfManager *', 'manager')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetTxOkCallback', 
+                   [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetTxFailedCallback', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetUp(uint32_t interface) [member function]
+    cls.add_method('SetUp', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> remoteManager) [member function]
-    cls.add_method('SetWifiRemoteStationManager', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
+    cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetWeakEsModel() const [member function]
+    cls.add_method('GetWeakEsModel', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
                    'void', 
-                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'remoteManager')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetTypeOfStation(ns3::TypeOfStation type) [member function]
-    cls.add_method('SetTypeOfStation', 
+                   [param('bool', 'forward')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::SetWeakEsModel(bool model) [member function]
+    cls.add_method('SetWeakEsModel', 
                    'void', 
-                   [param('ns3::TypeOfStation', 'type')])
-    ## edca-txop-n.h (module 'wifi'): ns3::TypeOfStation ns3::EdcaTxopN::GetTypeOfStation() const [member function]
-    cls.add_method('GetTypeOfStation', 
-                   'ns3::TypeOfStation', 
+                   [param('bool', 'model')], 
+                   is_pure_virtual=True, visibility='private', 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]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
                    [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetQueue() const [member function]
-    cls.add_method('GetQueue', 
-                   'ns3::Ptr< ns3::WifiMacQueue >', 
+                   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)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMinCw(uint32_t minCw) [member function]
-    cls.add_method('SetMinCw', 
+    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4AddressValue::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::Ipv4AddressValue::Set(ns3::Ipv4Address const & value) [member function]
+    cls.add_method('Set', 
                    'void', 
-                   [param('uint32_t', 'minCw')], 
+                   [param('ns3::Ipv4Address const &', 'value')])
+    return
+
+def register_Ns3Ipv4L3Protocol_methods(root_module, cls):
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::Ipv4L3Protocol() [constructor]
+    cls.add_constructor([])
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::AddAddress(uint32_t i, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'i'), param('ns3::Ipv4InterfaceAddress', 'address')], 
                    is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMaxCw(uint32_t maxCw) [member function]
-    cls.add_method('SetMaxCw', 
-                   'void', 
-                   [param('uint32_t', 'maxCw')], 
+    ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAifsn(uint32_t aifsn) [member function]
-    cls.add_method('SetAifsn', 
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv4L3Protocol::CreateRawSocket() [member function]
+    cls.add_method('CreateRawSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+    cls.add_method('DeleteRawSocket', 
                    'void', 
-                   [param('uint32_t', 'aifsn')], 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket')], 
                    is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMinCw() const [member function]
-    cls.add_method('GetMinCw', 
-                   'uint32_t', 
-                   [], 
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4InterfaceAddress ns3::Ipv4L3Protocol::GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv4InterfaceAddress', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
                    is_const=True, is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetMaxCw() const [member function]
-    cls.add_method('GetMaxCw', 
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4Interface> ns3::Ipv4L3Protocol::GetInterface(uint32_t i) const [member function]
+    cls.add_method('GetInterface', 
+                   'ns3::Ptr< ns3::Ipv4Interface >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForAddress(ns3::Ipv4Address addr) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv4Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): int32_t ns3::Ipv4L3Protocol::GetInterfaceForPrefix(ns3::Ipv4Address addr, ns3::Ipv4Mask mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv4Address', 'addr'), param('ns3::Ipv4Mask', 'mask')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv4L3Protocol::GetMetric(uint32_t i) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv4L3Protocol::GetMtu(uint32_t i) const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
                    'uint32_t', 
-                   [], 
+                   [param('uint32_t', 'interface')], 
                    is_const=True, is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetAifsn() const [member function]
-    cls.add_method('GetAifsn', 
+    ## ipv4-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv4L3Protocol::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MacLow> ns3::EdcaTxopN::Low() [member function]
-    cls.add_method('Low', 
-                   'ns3::Ptr< ns3::MacLow >', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MsduAggregator> ns3::EdcaTxopN::GetMsduAggregator() const [member function]
-    cls.add_method('GetMsduAggregator', 
-                   'ns3::Ptr< ns3::MsduAggregator >', 
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4L3Protocol::GetNetDevice(uint32_t i) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
                    [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedsAccess() const [member function]
-    cls.add_method('NeedsAccess', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4L3Protocol::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyAccessGranted() [member function]
-    cls.add_method('NotifyAccessGranted', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyInternalCollision() [member function]
-    cls.add_method('NotifyInternalCollision', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyCollision() [member function]
-    cls.add_method('NotifyCollision', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyChannelSwitching() [member function]
-    cls.add_method('NotifyChannelSwitching', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotCts(double snr, ns3::WifiMode txMode) [member function]
-    cls.add_method('GotCts', 
-                   'void', 
-                   [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedCts() [member function]
-    cls.add_method('MissedCts', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAck(double snr, ns3::WifiMode txMode) [member function]
-    cls.add_method('GotAck', 
-                   'void', 
-                   [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
-    cls.add_method('GotBlockAck', 
-                   'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
-    cls.add_method('MissedBlockAck', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAddBaResponse(ns3::MgtAddBaResponseHeader const * respHdr, ns3::Mac48Address recipient) [member function]
-    cls.add_method('GotAddBaResponse', 
-                   'void', 
-                   [param('ns3::MgtAddBaResponseHeader const *', 'respHdr'), param('ns3::Mac48Address', 'recipient')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotDelBaFrame(ns3::MgtDelBaHeader const * delBaHdr, ns3::Mac48Address recipient) [member function]
-    cls.add_method('GotDelBaFrame', 
-                   'void', 
-                   [param('ns3::MgtDelBaHeader const *', 'delBaHdr'), param('ns3::Mac48Address', 'recipient')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedAck() [member function]
-    cls.add_method('MissedAck', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartNext() [member function]
-    cls.add_method('StartNext', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::Cancel() [member function]
-    cls.add_method('Cancel', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::EndTxNoAck() [member function]
-    cls.add_method('EndTxNoAck', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RestartAccessIfNeeded() [member function]
-    cls.add_method('RestartAccessIfNeeded', 
-                   'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::StartAccessIfNeeded() [member function]
-    cls.add_method('StartAccessIfNeeded', 
+                   is_static=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
                    'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRts() [member function]
-    cls.add_method('NeedRts', 
-                   'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
-    cls.add_method('NeedRtsRetransmission', 
-                   'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedDataRetransmission() [member function]
-    cls.add_method('NeedDataRetransmission', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+    cls.add_method('IsDestinationAddress', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedFragmentation() const [member function]
-    cls.add_method('NeedFragmentation', 
+                   [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsForwarding(uint32_t i) const [member function]
+    cls.add_method('IsForwarding', 
                    'bool', 
-                   [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNextFragmentSize() [member function]
-    cls.add_method('GetNextFragmentSize', 
-                   'uint32_t', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetFragmentSize() [member function]
-    cls.add_method('GetFragmentSize', 
-                   'uint32_t', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetFragmentOffset() [member function]
-    cls.add_method('GetFragmentOffset', 
-                   'uint32_t', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::IsLastFragment() const [member function]
-    cls.add_method('IsLastFragment', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUnicast(ns3::Ipv4Address ad) const [member function]
+    cls.add_method('IsUnicast', 
                    'bool', 
-                   [], 
+                   [param('ns3::Ipv4Address', 'ad')], 
                    is_const=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NextFragment() [member function]
-    cls.add_method('NextFragment', 
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUp(uint32_t i) const [member function]
+    cls.add_method('IsUp', 
+                   '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<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', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet> ns3::EdcaTxopN::GetFragmentPacket(ns3::WifiMacHeader * hdr) [member function]
-    cls.add_method('GetFragmentPacket', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [param('ns3::WifiMacHeader *', 'hdr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAccessCategory(ns3::AcIndex ac) [member function]
-    cls.add_method('SetAccessCategory', 
+                   [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')])
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::AcIndex', 'ac')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::Queue(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
-    cls.add_method('Queue', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   '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', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device'), param('ns3::Ipv4Address', 'dst'), param('ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e', 'scope')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMsduAggregator(ns3::Ptr<ns3::MsduAggregator> aggr) [member function]
-    cls.add_method('SetMsduAggregator', 
+                   [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_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::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::MsduAggregator >', 'aggr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
-    cls.add_method('PushFront', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'ipHeader'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetDefaultTtl(uint8_t ttl) [member function]
+    cls.add_method('SetDefaultTtl', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteConfig() [member function]
-    cls.add_method('CompleteConfig', 
+                   [param('uint8_t', 'ttl')])
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetDown(uint32_t i) [member function]
+    cls.add_method('SetDown', 
                    'void', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetBlockAckThreshold(uint8_t threshold) [member function]
-    cls.add_method('SetBlockAckThreshold', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetForwarding(uint32_t i, bool val) [member function]
+    cls.add_method('SetForwarding', 
                    'void', 
-                   [param('uint8_t', 'threshold')])
-    ## edca-txop-n.h (module 'wifi'): uint8_t ns3::EdcaTxopN::GetBlockAckThreshold() const [member function]
-    cls.add_method('GetBlockAckThreshold', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetBlockAckInactivityTimeout(uint16_t timeout) [member function]
-    cls.add_method('SetBlockAckInactivityTimeout', 
+                   [param('uint32_t', 'i'), param('bool', 'val')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetMetric(uint32_t i, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
                    'void', 
-                   [param('uint16_t', 'timeout')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SendDelbaFrame(ns3::Mac48Address addr, uint8_t tid, bool byOriginator) [member function]
-    cls.add_method('SendDelbaFrame', 
+                   [param('uint32_t', 'i'), param('uint16_t', 'metric')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
                    'void', 
-                   [param('ns3::Mac48Address', 'addr'), param('uint8_t', 'tid'), param('bool', 'byOriginator')])
-    ## edca-txop-n.h (module 'wifi'): int64_t ns3::EdcaTxopN::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::DoInitialize() [member function]
-    cls.add_method('DoInitialize', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetUp(uint32_t i) [member function]
+    cls.add_method('SetUp', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
+    cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
                    'void', 
                    [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::GetWeakEsModel() const [member function]
+    cls.add_method('GetWeakEsModel', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
+                   'void', 
+                   [param('bool', 'forward')], 
+                   visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::SetWeakEsModel(bool model) [member function]
+    cls.add_method('SetWeakEsModel', 
+                   'void', 
+                   [param('bool', 'model')], 
                    visibility='private', 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]
+def register_Ns3Ipv4MaskChecker_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker() [constructor]
     cls.add_constructor([])
-    ## attribute.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EmptyAttributeValue::Copy() const [member function]
+    ## 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 >', 
                    [], 
-                   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]
+                   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', 
                    '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]
+                   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, 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', 
+                   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', 
-                   [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   [param('ns3::Ipv4Mask const &', 'value')])
     return
 
-def register_Ns3ExtendedSupportedRatesIE_methods(root_module, cls):
-    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::ExtendedSupportedRatesIE const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ExtendedSupportedRatesIE const &', 'arg0')])
-    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE() [constructor]
+def register_Ns3Ipv4MulticastRoute_methods(root_module, cls):
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::Ipv4MulticastRoute(ns3::Ipv4MulticastRoute const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4MulticastRoute const &', 'arg0')])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::Ipv4MulticastRoute() [constructor]
     cls.add_constructor([])
-    ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE::ExtendedSupportedRatesIE(ns3::SupportedRates * rates) [constructor]
-    cls.add_constructor([param('ns3::SupportedRates *', 'rates')])
-    ## supported-rates.h (module 'wifi'): uint8_t ns3::ExtendedSupportedRatesIE::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)
-    ## supported-rates.h (module 'wifi'): ns3::WifiInformationElementId ns3::ExtendedSupportedRatesIE::ElementId() const [member function]
-    cls.add_method('ElementId', 
-                   'ns3::WifiInformationElementId', 
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetGroup() const [member function]
+    cls.add_method('GetGroup', 
+                   'ns3::Ipv4Address', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## supported-rates.h (module 'wifi'): uint8_t ns3::ExtendedSupportedRatesIE::GetInformationFieldSize() const [member function]
-    cls.add_method('GetInformationFieldSize', 
-                   'uint8_t', 
+                   is_const=True)
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetOrigin() const [member function]
+    cls.add_method('GetOrigin', 
+                   'ns3::Ipv4Address', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## supported-rates.h (module 'wifi'): uint16_t ns3::ExtendedSupportedRatesIE::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint16_t', 
+                   is_const=True)
+    ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
+    cls.add_method('GetOutputTtlMap', 
+                   'std::map< unsigned int, unsigned int >', 
                    [], 
                    is_const=True)
-    ## supported-rates.h (module 'wifi'): ns3::Buffer::Iterator ns3::ExtendedSupportedRatesIE::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'ns3::Buffer::Iterator', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
+    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetParent() const [member function]
+    cls.add_method('GetParent', 
+                   'uint32_t', 
+                   [], 
                    is_const=True)
-    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('SerializeInformationField', 
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetGroup(ns3::Ipv4Address const group) [member function]
+    cls.add_method('SetGroup', 
                    'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
+                   [param('ns3::Ipv4Address const', 'group')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetOrigin(ns3::Ipv4Address const origin) [member function]
+    cls.add_method('SetOrigin', 
+                   'void', 
+                   [param('ns3::Ipv4Address const', 'origin')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetOutputTtl(uint32_t oif, uint32_t ttl) [member function]
+    cls.add_method('SetOutputTtl', 
+                   'void', 
+                   [param('uint32_t', 'oif'), param('uint32_t', 'ttl')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4MulticastRoute::SetParent(uint32_t iif) [member function]
+    cls.add_method('SetParent', 
+                   'void', 
+                   [param('uint32_t', 'iif')])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::MAX_INTERFACES [variable]
+    cls.add_static_attribute('MAX_INTERFACES', 'uint32_t const', is_const=True)
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute::MAX_TTL [variable]
+    cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
     return
 
-def register_Ns3HtCapabilities_methods(root_module, cls):
+def register_Ns3Ipv4Route_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]
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Route::Ipv4Route(ns3::Ipv4Route const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4Route const &', 'arg0')])
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Route::Ipv4Route() [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', 
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
-    cls.add_method('GetSupportedChannelWidth', 
-                   'uint8_t', 
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetGateway() const [member function]
+    cls.add_method('GetGateway', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet1() const [member function]
-    cls.add_method('GetSupportedMcsSet1', 
-                   'uint64_t', 
+    ## ipv4-route.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4Route::GetOutputDevice() const [member function]
+    cls.add_method('GetOutputDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): uint64_t ns3::HtCapabilities::GetSupportedMcsSet2() const [member function]
-    cls.add_method('GetSupportedMcsSet2', 
-                   'uint64_t', 
+    ## ipv4-route.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4Route::GetSource() const [member function]
+    cls.add_method('GetSource', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
-    cls.add_method('IsSupportedMcs', 
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetDestination(ns3::Ipv4Address dest) [member function]
+    cls.add_method('SetDestination', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'dest')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetGateway(ns3::Ipv4Address gw) [member function]
+    cls.add_method('SetGateway', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'gw')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetOutputDevice(ns3::Ptr<ns3::NetDevice> outputDevice) [member function]
+    cls.add_method('SetOutputDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'outputDevice')])
+    ## ipv4-route.h (module 'internet'): void ns3::Ipv4Route::SetSource(ns3::Ipv4Address src) [member function]
+    cls.add_method('SetSource', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'src')])
+    return
+
+def register_Ns3Ipv4RoutingProtocol_methods(root_module, cls):
+    ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol() [constructor]
+    cls.add_constructor([])
+    ## ipv4-routing-protocol.h (module 'internet'): ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol(ns3::Ipv4RoutingProtocol const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4RoutingProtocol const &', 'arg0')])
+    ## ipv4-routing-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv4RoutingProtocol::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::PrintRoutingTable(ns3::Ptr<ns3::OutputStreamWrapper> stream) const [member function]
+    cls.add_method('PrintRoutingTable', 
+                   '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<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('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', 
+                   [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_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4RoutingProtocol::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_pure_virtual=True, is_virtual=True)
+    ## ipv4-routing-protocol.h (module 'internet'): void ns3::Ipv4RoutingProtocol::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
                    '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', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3Ipv6_methods(root_module, cls):
+    ## ipv6.h (module 'internet'): ns3::Ipv6::Ipv6(ns3::Ipv6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6 const &', 'arg0')])
+    ## ipv6.h (module 'internet'): ns3::Ipv6::Ipv6() [constructor]
+    cls.add_constructor([])
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::AddAddress(uint32_t interface, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6::GetAddress(uint32_t interface, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): int32_t ns3::Ipv6::GetInterfaceForPrefix(ns3::Ipv6Address address, ns3::Ipv6Prefix mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6Prefix', 'mask')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint16_t ns3::Ipv6::GetMetric(uint32_t interface) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint16_t ns3::Ipv6::GetMtu(uint32_t interface) const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
+                   'uint32_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): uint32_t ns3::Ipv6::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6::GetNetDevice(uint32_t interface) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::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)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): static ns3::TypeId ns3::Ipv6::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
+    cls.add_method('IsForwarding', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsUp(uint32_t interface) const [member function]
+    cls.add_method('IsUp', 
+                   'bool', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::RegisterExtensions() [member function]
+    cls.add_method('RegisterExtensions', 
                    'void', 
-                   [param('uint8_t', 'ctrl')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
-    cls.add_method('SetGreenfield', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::RegisterOptions() [member function]
+    cls.add_method('RegisterOptions', 
                    'void', 
-                   [param('uint8_t', 'greenfield')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtCapabilitiesInfo(uint16_t ctrl) [member function]
-    cls.add_method('SetHtCapabilitiesInfo', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   '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', 
-                   [param('uint16_t', 'ctrl')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetHtSupported(uint8_t htsupported) [member function]
-    cls.add_method('SetHtSupported', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetForwarding(uint32_t interface, bool val) [member function]
+    cls.add_method('SetForwarding', 
                    'void', 
-                   [param('uint8_t', 'htsupported')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
-    cls.add_method('SetLdpc', 
+                   [param('uint32_t', 'interface'), param('bool', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetMetric(uint32_t interface, uint16_t metric) [member function]
+    cls.add_method('SetMetric', 
                    'void', 
-                   [param('uint8_t', 'ldpc')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
-    cls.add_method('SetRxMcsBitmask', 
+                   [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('uint8_t', 'index')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval20(uint8_t shortguardinterval) [member function]
-    cls.add_method('SetShortGuardInterval20', 
+                   [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', 
-                   [param('uint8_t', 'shortguardinterval')])
-    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
-    cls.add_method('SetSupportedChannelWidth', 
+                   [param('ns3::Ptr< ns3::Ipv6RoutingProtocol >', 'routingProtocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::SetUp(uint32_t interface) [member function]
+    cls.add_method('SetUp', 
                    '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', 
+                   [param('uint32_t', 'interface')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ipv6::IF_ANY [variable]
+    cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
+    ## ipv6.h (module 'internet'): bool ns3::Ipv6::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   '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('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+                   [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_Ns3HtCapabilitiesChecker_methods(root_module, cls):
-    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesChecker::HtCapabilitiesChecker() [constructor]
+def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [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')])
+    ## 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_Ns3HtCapabilitiesValue_methods(root_module, cls):
-    ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue::HtCapabilitiesValue() [constructor]
+def register_Ns3Ipv6AddressValue_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue() [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]
+    ## 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]
     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]
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6AddressValue::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]
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6AddressValue::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::HtCapabilities', 
+                   'ns3::Ipv6Address', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): std::string ns3::HtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6AddressValue::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]
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6AddressValue::Set(ns3::Ipv6Address const & value) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::HtCapabilities const &', 'value')])
-    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')])
+                   [param('ns3::Ipv6Address const &', 'value')])
     return
 
-def register_Ns3Ipv4AddressValue_methods(root_module, cls):
-    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue() [constructor]
+def register_Ns3Ipv6L3Protocol_methods(root_module, cls):
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::PROT_NUMBER [variable]
+    cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): static ns3::TypeId ns3::Ipv6L3Protocol::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6L3Protocol::Ipv6L3Protocol() [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]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::Ipv6L3Protocol::CreateRawSocket() [member function]
+    cls.add_method('CreateRawSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DeleteRawSocket(ns3::Ptr<ns3::Socket> socket) [member function]
+    cls.add_method('DeleteRawSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDefaultTtl(uint8_t ttl) [member function]
+    cls.add_method('SetDefaultTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDefaultTclass(uint8_t tclass) [member function]
+    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<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')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address source, ns3::Ipv6Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv6Route> route) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
+    cls.add_method('SetRoutingProtocol', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv6RoutingProtocol >', 'routingProtocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6RoutingProtocol> ns3::Ipv6L3Protocol::GetRoutingProtocol() const [member function]
+    cls.add_method('GetRoutingProtocol', 
+                   'ns3::Ptr< ns3::Ipv6RoutingProtocol >', 
                    [], 
                    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', 
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddInterface', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv6Interface> ns3::Ipv6L3Protocol::GetInterface(uint32_t i) const [member function]
+    cls.add_method('GetInterface', 
+                   'ns3::Ptr< ns3::Ipv6Interface >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::GetNInterfaces() const [member function]
+    cls.add_method('GetNInterfaces', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForAddress(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetInterfaceForAddress', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForPrefix(ns3::Ipv6Address addr, ns3::Ipv6Prefix mask) const [member function]
+    cls.add_method('GetInterfaceForPrefix', 
+                   'int32_t', 
+                   [param('ns3::Ipv6Address', 'addr'), param('ns3::Ipv6Prefix', 'mask')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): int32_t ns3::Ipv6L3Protocol::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
+    cls.add_method('GetInterfaceForDevice', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::AddAddress(uint32_t i, ns3::Ipv6InterfaceAddress address) [member function]
+    cls.add_method('AddAddress', 
                    'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   [param('uint32_t', 'i'), param('ns3::Ipv6InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6InterfaceAddress ns3::Ipv6L3Protocol::GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Ipv6InterfaceAddress', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint32_t ns3::Ipv6L3Protocol::GetNAddresses(uint32_t interface) const [member function]
+    cls.add_method('GetNAddresses', 
+                   'uint32_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interfaceIndex'), param('uint32_t', 'addressIndex')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::RemoveAddress(uint32_t interfaceIndex, ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveAddress', 
+                   'bool', 
+                   [param('uint32_t', 'interfaceIndex'), 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', 
+                   [param('uint32_t', 'i'), param('uint16_t', 'metric')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv6L3Protocol::GetMetric(uint32_t i) const [member function]
+    cls.add_method('GetMetric', 
+                   'uint16_t', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): uint16_t ns3::Ipv6L3Protocol::GetMtu(uint32_t i) const [member function]
+    cls.add_method('GetMtu', 
+                   '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', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetUp(uint32_t i) [member function]
+    cls.add_method('SetUp', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetDown(uint32_t i) [member function]
+    cls.add_method('SetDown', 
+                   'void', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsForwarding(uint32_t i) const [member function]
+    cls.add_method('IsForwarding', 
+                   'bool', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetForwarding(uint32_t i, bool val) [member function]
+    cls.add_method('SetForwarding', 
+                   'void', 
+                   [param('uint32_t', 'i'), param('bool', 'val')], 
                    is_virtual=True)
-    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4AddressValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::Ipv4Address', 
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ipv6Address ns3::Ipv6L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv6Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv6Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'dest')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv6L3Protocol::GetNetDevice(uint32_t i) [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Icmpv6L4Protocol> ns3::Ipv6L3Protocol::GetIcmpv6() const [member function]
+    cls.add_method('GetIcmpv6', 
+                   'ns3::Ptr< ns3::Icmpv6L4Protocol >', 
                    [], 
                    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', 
-                   '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', 
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddAutoconfiguredAddress(uint32_t interface, ns3::Ipv6Address network, ns3::Ipv6Prefix mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime, ns3::Ipv6Address defaultRouter=ns3::Ipv6Address::GetZero( )) [member function]
+    cls.add_method('AddAutoconfiguredAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'mask'), param('uint8_t', 'flags'), param('uint32_t', 'validTime'), param('uint32_t', 'preferredTime'), param('ns3::Ipv6Address', 'defaultRouter', default_value='ns3::Ipv6Address::GetZero( )')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveAutoconfiguredAddress(uint32_t interface, ns3::Ipv6Address network, ns3::Ipv6Prefix mask, ns3::Ipv6Address defaultRouter) [member function]
+    cls.add_method('RemoveAutoconfiguredAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'network'), param('ns3::Ipv6Prefix', 'mask'), param('ns3::Ipv6Address', 'defaultRouter')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RegisterExtensions() [member function]
+    cls.add_method('RegisterExtensions', 
                    '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 >', 
                    [], 
-                   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', 
-                   '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', 
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RegisterOptions() [member function]
+    cls.add_method('RegisterOptions', 
+                   'void', 
                    [], 
-                   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', 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::ReportDrop(ns3::Ipv6Header ipHeader, ns3::Ptr<ns3::Packet> p, ns3::Ipv6L3Protocol::DropReason dropReason) [member function]
+    cls.add_method('ReportDrop', 
                    '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')])
+                   [param('ns3::Ipv6Header', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6L3Protocol::DropReason', 'dropReason')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetIpForward(bool forward) [member function]
+    cls.add_method('SetIpForward', 
+                   'void', 
+                   [param('bool', 'forward')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetIpForward() const [member function]
+    cls.add_method('GetIpForward', 
+                   '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', 
+                   [param('bool', 'sendIcmpv6Redirect')], 
+                   visibility='private', is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::GetSendIcmpv6Redirect() const [member function]
+    cls.add_method('GetSendIcmpv6Redirect', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3Ipv6AddressValue_methods(root_module, cls):
-    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue() [constructor]
+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-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]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+    ## ipv6-pmtu-cache.h (module 'internet'): void ns3::Ipv6PmtuCache::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   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]
-    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]
-    cls.add_method('Get', 
-                   'ns3::Ipv6Address', 
+    ## 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-address.h (module 'network'): std::string ns3::Ipv6AddressValue::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]
-    cls.add_method('Set', 
+    ## 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 const &', 'value')])
+                   [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):
@@ -8176,6 +12756,44 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3LogNormalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::LogNormalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable::LogNormalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetMu() const [member function]
+    cls.add_method('GetMu', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetSigma() const [member function]
+    cls.add_method('GetSigma', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetValue(double mu, double sigma) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mu'), param('double', 'sigma')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::LogNormalRandomVariable::GetInteger(uint32_t mu, uint32_t sigma) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mu'), param('uint32_t', 'sigma')])
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::LogNormalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3Mac48AddressChecker_methods(root_module, cls):
     ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
     cls.add_constructor([])
@@ -8221,6 +12839,10 @@
     cls.add_constructor([param('ns3::MacLow const &', 'arg0')])
     ## mac-low.h (module 'wifi'): ns3::MacLow::MacLow() [constructor]
     cls.add_constructor([])
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::Packet> ns3::MacLow::AggregateToAmpdu(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const hdr) [member function]
+    cls.add_method('AggregateToAmpdu', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const', 'hdr')])
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateTransmissionTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & parameters) const [member function]
     cls.add_method('CalculateTransmissionTime', 
                    'ns3::Time', 
@@ -8230,10 +12852,18 @@
     cls.add_method('CreateBlockAckAgreement', 
                    'void', 
                    [param('ns3::MgtAddBaResponseHeader const *', 'respHdr'), param('ns3::Mac48Address', 'originator'), param('uint16_t', 'startingSeq')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::DeaggregateAmpduAndReceive(ns3::Ptr<ns3::Packet> aggregatedPacket, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('DeaggregateAmpduAndReceive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::DestroyBlockAckAgreement(ns3::Mac48Address originator, uint8_t tid) [member function]
     cls.add_method('DestroyBlockAckAgreement', 
                    'void', 
                    [param('ns3::Mac48Address', 'originator'), param('uint8_t', 'tid')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::FlushAggregateQueue() [member function]
+    cls.add_method('FlushAggregateQueue', 
+                   'void', 
+                   [])
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetAckTimeout() const [member function]
     cls.add_method('GetAckTimeout', 
                    'ns3::Time', 
@@ -8269,6 +12899,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
@@ -8306,10 +12941,10 @@
     cls.add_method('ReceiveError', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'rxSnr')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble, bool ampduSubframe) [member function]
     cls.add_method('ReceiveOk', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble'), param('bool', 'ampduSubframe')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::RegisterBlockAckListenerForAc(ns3::AcIndex ac, ns3::MacLowBlockAckEventListener * listener) [member function]
     cls.add_method('RegisterBlockAckListenerForAc', 
                    'void', 
@@ -8318,6 +12953,10 @@
     cls.add_method('RegisterDcfListener', 
                    'void', 
                    [param('ns3::MacLowDcfListener *', 'listener')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ResetPhy() [member function]
+    cls.add_method('ResetPhy', 
+                   'void', 
+                   [])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -8346,6 +12985,10 @@
     cls.add_method('SetCtsToSelfSupported', 
                    'void', 
                    [param('bool', 'enable')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggregator) [member function]
+    cls.add_method('SetMpduAggregator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggregator')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -8381,7 +13024,13 @@
     ## mac-low.h (module 'wifi'): void ns3::MacLow::StartTransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters parameters, ns3::MacLowTransmissionListener * listener) [member function]
     cls.add_method('StartTransmission', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLow::StopAggregation(ns3::Ptr<ns3::Packet const> peekedPacket, ns3::WifiMacHeader peekedHdr, ns3::Ptr<ns3::Packet> aggregatedPacket, uint16_t size) const [member function]
+    cls.add_method('StopAggregation', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'peekedPacket'), param('ns3::WifiMacHeader', 'peekedHdr'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint16_t', 'size')], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
@@ -8401,6 +13050,108 @@
     cls.add_constructor([param('ns3::MgtBeaconHeader const &', 'arg0')])
     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]
+    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]
+    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', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')])
+    ## mobility-model.h (module 'mobility'): void ns3::MobilityModel::NotifyCourseChange() const [member function]
+    cls.add_method('NotifyCourseChange', 
+                   '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', 
+                   'void', 
+                   [param('ns3::Vector const &', 'position')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3MpduAggregator_methods(root_module, cls):
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator::MpduAggregator() [constructor]
+    cls.add_constructor([])
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator::MpduAggregator(ns3::MpduAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MpduAggregator const &', 'arg0')])
+    ## mpdu-aggregator.h (module 'wifi'): void ns3::MpduAggregator::AddHeaderAndPad(ns3::Ptr<ns3::Packet> packet, bool last) [member function]
+    cls.add_method('AddHeaderAndPad', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('bool', 'last')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): bool ns3::MpduAggregator::Aggregate(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Aggregate', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): uint32_t ns3::MpduAggregator::CalculatePadding(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('CalculatePadding', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): bool ns3::MpduAggregator::CanBeAggregated(uint32_t packetSize, ns3::Ptr<ns3::Packet> aggregatedPacket, uint8_t blockAckSize) [member function]
+    cls.add_method('CanBeAggregated', 
+                   'bool', 
+                   [param('uint32_t', 'packetSize'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint8_t', 'blockAckSize')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): static std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::AmpduSubframeHeader>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::AmpduSubframeHeader> > > ns3::MpduAggregator::Deaggregate(ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Deaggregate', 
+                   'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -8516,15 +13267,15 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,const ns3::Address&,ns3::NetDevice::PacketType,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetPromiscReceiveCallback(ns3::Callback<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> cb) [member function]
     cls.add_method('SetPromiscReceiveCallback', 
                    'void', 
-                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   [param('ns3::Callback< 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 >', 'cb')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<bool,ns3::Ptr<ns3::NetDevice>,ns3::Ptr<const ns3::Packet>,short unsigned int,const ns3::Address&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> cb) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::SetReceiveCallback(ns3::Callback<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> cb) [member function]
     cls.add_method('SetReceiveCallback', 
                    'void', 
-                   [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, short unsigned int, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   [param('ns3::Callback< 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 >', 'cb')], 
                    is_pure_virtual=True, is_virtual=True)
     ## net-device.h (module 'network'): bool ns3::NetDevice::SupportsSendFrom() const [member function]
     cls.add_method('SupportsSendFrom', 
@@ -8660,6 +13411,51 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3NormalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable::INFINITE_VALUE [variable]
+    cls.add_static_attribute('INFINITE_VALUE', 'double const', is_const=True)
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::NormalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable::NormalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetVariance() const [member function]
+    cls.add_method('GetVariance', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetValue(double mean, double variance, double bound=ns3::NormalRandomVariable::INFINITE_VALUE) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'variance'), param('double', 'bound', default_value='ns3::NormalRandomVariable::INFINITE_VALUE')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::NormalRandomVariable::GetInteger(uint32_t mean, uint32_t variance, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'variance'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::NormalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
 def register_Ns3NqosWaveMacHelper_methods(root_module, cls):
     ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper(ns3::NqosWaveMacHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NqosWaveMacHelper const &', 'arg0')])
@@ -8878,11 +13674,6 @@
                    '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', 
@@ -8949,10 +13740,58 @@
                    '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> nixVector) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
+    cls.add_method('SetNixVector', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ParetoRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ParetoRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable::ParetoRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetValue(double mean, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ParetoRandomVariable::GetInteger(uint32_t mean, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ParetoRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_Ns3PointerChecker_methods(root_module, cls):
@@ -9164,6 +14003,11 @@
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
     cls.add_method('SetWifiRemoteStationManager', 
                    'void', 
@@ -9395,10 +14239,10 @@
 
 def register_Ns3SupportedRates_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates() [constructor]
     cls.add_constructor([])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -9447,6 +14291,8 @@
     cls.add_method('SetBasicRate', 
                    'void', 
                    [param('uint32_t', 'bs')])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::MAX_SUPPORTED_RATES [variable]
+    cls.add_static_attribute('MAX_SUPPORTED_RATES', 'uint8_t const', is_const=True)
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::extended [variable]
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
@@ -9557,6 +14403,86 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3Vector2DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker(ns3::Vector2DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector2DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector2DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector2DValue::Vector2DValue(ns3::Vector2D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector2D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector2DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector2DValue::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)
+    ## vector.h (module 'core'): ns3::Vector2D ns3::Vector2DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector2D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector2DValue::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)
+    ## vector.h (module 'core'): void ns3::Vector2DValue::Set(ns3::Vector2D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector2D const &', 'value')])
+    return
+
+def register_Ns3Vector3DChecker_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DChecker::Vector3DChecker(ns3::Vector3DChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DChecker const &', 'arg0')])
+    return
+
+def register_Ns3Vector3DValue_methods(root_module, cls):
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue() [constructor]
+    cls.add_constructor([])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3DValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Vector3DValue const &', 'arg0')])
+    ## vector.h (module 'core'): ns3::Vector3DValue::Vector3DValue(ns3::Vector3D const & value) [constructor]
+    cls.add_constructor([param('ns3::Vector3D const &', 'value')])
+    ## vector.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::Vector3DValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vector.h (module 'core'): bool ns3::Vector3DValue::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)
+    ## vector.h (module 'core'): ns3::Vector3D ns3::Vector3DValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Vector3D', 
+                   [], 
+                   is_const=True)
+    ## vector.h (module 'core'): std::string ns3::Vector3DValue::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)
+    ## vector.h (module 'core'): void ns3::Vector3DValue::Set(ns3::Vector3D const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Vector3D const &', 'value')])
+    return
+
 def register_Ns3WaveMacLow_methods(root_module, cls):
     ## wave-mac-low.h (module 'wave'): ns3::WaveMacLow::WaveMacLow(ns3::WaveMacLow const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WaveMacLow const &', 'arg0')])
@@ -9567,6 +14493,15 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wave-mac-low.h (module 'wave'): void ns3::WaveMacLow::SetWaveNetDevice(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('SetWaveNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')])
+    ## wave-mac-low.h (module 'wave'): void ns3::WaveMacLow::StartTransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters parameters, ns3::MacLowTransmissionListener * listener) [member function]
+    cls.add_method('StartTransmission', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')], 
+                   is_virtual=True)
     ## wave-mac-low.h (module 'wave'): ns3::WifiTxVector ns3::WaveMacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
@@ -9574,6 +14509,264 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3WaveNetDevice_methods(root_module, cls):
+    ## wave-net-device.h (module 'wave'): ns3::WaveNetDevice::WaveNetDevice(ns3::WaveNetDevice const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WaveNetDevice const &', 'arg0')])
+    ## wave-net-device.h (module 'wave'): ns3::WaveNetDevice::WaveNetDevice() [constructor]
+    cls.add_constructor([])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('AddLinkChangeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::AddMac(uint32_t channelNumber, ns3::Ptr<ns3::OcbWifiMac> mac) [member function]
+    cls.add_method('AddMac', 
+                   'void', 
+                   [param('uint32_t', 'channelNumber'), param('ns3::Ptr< ns3::OcbWifiMac >', 'mac')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::AddPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('AddPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::CancelTx(uint32_t channelNumber, ns3::AcIndex ac) [member function]
+    cls.add_method('CancelTx', 
+                   'void', 
+                   [param('uint32_t', 'channelNumber'), param('ns3::AcIndex', 'ac')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::ChangeAddress(ns3::Address newAddress) [member function]
+    cls.add_method('ChangeAddress', 
+                   'void', 
+                   [param('ns3::Address', 'newAddress')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::DeleteTxProfile(uint32_t channelNumber) [member function]
+    cls.add_method('DeleteTxProfile', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## wave-net-device.h (module 'wave'): ns3::Address ns3::WaveNetDevice::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Address ns3::WaveNetDevice::GetBroadcast() const [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::Channel> ns3::WaveNetDevice::GetChannel() const [member function]
+    cls.add_method('GetChannel', 
+                   'ns3::Ptr< ns3::Channel >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::ChannelCoordinator> ns3::WaveNetDevice::GetChannelCoordinator() const [member function]
+    cls.add_method('GetChannelCoordinator', 
+                   'ns3::Ptr< ns3::ChannelCoordinator >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::ChannelManager> ns3::WaveNetDevice::GetChannelManager() const [member function]
+    cls.add_method('GetChannelManager', 
+                   'ns3::Ptr< ns3::ChannelManager >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::ChannelScheduler> ns3::WaveNetDevice::GetChannelScheduler() const [member function]
+    cls.add_method('GetChannelScheduler', 
+                   'ns3::Ptr< ns3::ChannelScheduler >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): uint32_t ns3::WaveNetDevice::GetIfIndex() const [member function]
+    cls.add_method('GetIfIndex', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::OcbWifiMac> ns3::WaveNetDevice::GetMac(uint32_t channelNumber) const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::OcbWifiMac >', 
+                   [param('uint32_t', 'channelNumber')], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): std::map<unsigned int, ns3::Ptr<ns3::OcbWifiMac>, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, ns3::Ptr<ns3::OcbWifiMac> > > > ns3::WaveNetDevice::GetMacs() const [member function]
+    cls.add_method('GetMacs', 
+                   'std::map< unsigned int, ns3::Ptr< ns3::OcbWifiMac > >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): uint16_t ns3::WaveNetDevice::GetMtu() const [member function]
+    cls.add_method('GetMtu', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Address ns3::WaveNetDevice::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv4Address', 'multicastGroup')], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Address ns3::WaveNetDevice::GetMulticast(ns3::Ipv6Address addr) const [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::Node> ns3::WaveNetDevice::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::WifiPhy> ns3::WaveNetDevice::GetPhy(uint32_t index) const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): std::vector<ns3::Ptr<ns3::WifiPhy>, std::allocator<ns3::Ptr<ns3::WifiPhy> > > ns3::WaveNetDevice::GetPhys() const [member function]
+    cls.add_method('GetPhys', 
+                   'std::vector< ns3::Ptr< ns3::WifiPhy > >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): static ns3::TypeId ns3::WaveNetDevice::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wave-net-device.h (module 'wave'): ns3::Ptr<ns3::VsaManager> ns3::WaveNetDevice::GetVsaManager() const [member function]
+    cls.add_method('GetVsaManager', 
+                   'ns3::Ptr< ns3::VsaManager >', 
+                   [], 
+                   is_const=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsBridge() const [member function]
+    cls.add_method('IsBridge', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsLinkUp() const [member function]
+    cls.add_method('IsLinkUp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::IsPointToPoint() const [member function]
+    cls.add_method('IsPointToPoint', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::NeedsArp() const [member function]
+    cls.add_method('NeedsArp', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::RegisterTxProfile(ns3::TxProfile const & txprofile) [member function]
+    cls.add_method('RegisterTxProfile', 
+                   'bool', 
+                   [param('ns3::TxProfile const &', 'txprofile')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::Send(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('Send', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::SendFrom(ns3::Ptr<ns3::Packet> packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function]
+    cls.add_method('SendFrom', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::SendX(ns3::Ptr<ns3::Packet> packet, ns3::Address const & dest, uint32_t protocol, ns3::TxInfo const & txInfo) [member function]
+    cls.add_method('SendX', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint32_t', 'protocol'), param('ns3::TxInfo const &', 'txInfo')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetAddress(ns3::Address address) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'address')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetChannelCoordinator(ns3::Ptr<ns3::ChannelCoordinator> channelCoordinator) [member function]
+    cls.add_method('SetChannelCoordinator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ChannelCoordinator >', 'channelCoordinator')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetChannelManager(ns3::Ptr<ns3::ChannelManager> channelManager) [member function]
+    cls.add_method('SetChannelManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ChannelManager >', 'channelManager')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetChannelScheduler(ns3::Ptr<ns3::ChannelScheduler> channelScheduler) [member function]
+    cls.add_method('SetChannelScheduler', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::ChannelScheduler >', 'channelScheduler')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetIfIndex(uint32_t const index) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t const', 'index')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::SetMtu(uint16_t const mtu) [member function]
+    cls.add_method('SetMtu', 
+                   'bool', 
+                   [param('uint16_t const', 'mtu')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetPromiscReceiveCallback(ns3::Callback<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> cb) [member function]
+    cls.add_method('SetPromiscReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< 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 >', 'cb')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetReceiveCallback(ns3::Callback<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> cb) [member function]
+    cls.add_method('SetReceiveCallback', 
+                   'void', 
+                   [param('ns3::Callback< 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 >', 'cb')], 
+                   is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetVsaManager(ns3::Ptr<ns3::VsaManager> vsaManager) [member function]
+    cls.add_method('SetVsaManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::VsaManager >', 'vsaManager')])
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::SetWaveVsaCallback(ns3::Callback<bool, ns3::Ptr<ns3::Packet const>, ns3::Address const&, unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> vsaCallback) [member function]
+    cls.add_method('SetWaveVsaCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::Packet const >, ns3::Address const &, unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'vsaCallback')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::StartSch(ns3::SchInfo const & schInfo) [member function]
+    cls.add_method('StartSch', 
+                   'bool', 
+                   [param('ns3::SchInfo const &', 'schInfo')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::StartVsa(ns3::VsaInfo const & vsaInfo) [member function]
+    cls.add_method('StartVsa', 
+                   'bool', 
+                   [param('ns3::VsaInfo const &', 'vsaInfo')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::StopSch(uint32_t channelNumber) [member function]
+    cls.add_method('StopSch', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::StopVsa(uint32_t channelNumber) [member function]
+    cls.add_method('StopVsa', 
+                   'bool', 
+                   [param('uint32_t', 'channelNumber')])
+    ## wave-net-device.h (module 'wave'): bool ns3::WaveNetDevice::SupportsSendFrom() const [member function]
+    cls.add_method('SupportsSendFrom', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## wave-net-device.h (module 'wave'): void ns3::WaveNetDevice::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3WifiChannel_methods(root_module, cls):
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel() [constructor]
+    cls.add_constructor([])
+    ## wifi-channel.h (module 'wifi'): ns3::WifiChannel::WifiChannel(ns3::WifiChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiChannel const &', 'arg0')])
+    ## wifi-channel.h (module 'wifi'): static ns3::TypeId ns3::WifiChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -9614,6 +14807,49 @@
                    [param('ns3::WifiMode const &', 'value')])
     return
 
+def register_Ns3YansWifiChannel_methods(root_module, cls):
+    ## yans-wifi-channel.h (module 'wifi'): ns3::YansWifiChannel::YansWifiChannel(ns3::YansWifiChannel const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::YansWifiChannel const &', 'arg0')])
+    ## yans-wifi-channel.h (module 'wifi'): ns3::YansWifiChannel::YansWifiChannel() [constructor]
+    cls.add_constructor([])
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Add(ns3::Ptr<ns3::YansWifiPhy> phy) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'phy')])
+    ## yans-wifi-channel.h (module 'wifi'): int64_t ns3::YansWifiChannel::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## yans-wifi-channel.h (module 'wifi'): ns3::Ptr<ns3::NetDevice> ns3::YansWifiChannel::GetDevice(uint32_t i) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-channel.h (module 'wifi'): uint32_t ns3::YansWifiChannel::GetNDevices() const [member function]
+    cls.add_method('GetNDevices', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-channel.h (module 'wifi'): static ns3::TypeId ns3::YansWifiChannel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## 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, uint8_t packetType, ns3::Time duration) 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::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('ns3::Time', 'duration')], 
+                   is_const=True)
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
+    cls.add_method('SetPropagationDelayModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PropagationDelayModel >', 'delay')])
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationLossModel(ns3::Ptr<ns3::PropagationLossModel> loss) [member function]
+    cls.add_method('SetPropagationLossModel', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PropagationLossModel >', 'loss')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -9800,6 +15036,30 @@
     cls.add_method('ConfigureEdca', 
                    'void', 
                    [param('uint32_t', 'cwmin'), param('uint32_t', 'cwmax'), param('uint32_t', 'aifsn'), param('ns3::AcIndex', 'ac')])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::EnableForWave(ns3::Ptr<ns3::WaveNetDevice> device) [member function]
+    cls.add_method('EnableForWave', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WaveNetDevice >', 'device')])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::Suspend() [member function]
+    cls.add_method('Suspend', 
+                   'void', 
+                   [])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::Resume() [member function]
+    cls.add_method('Resume', 
+                   'void', 
+                   [])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::MakeVirtualBusy(ns3::Time duration) [member function]
+    cls.add_method('MakeVirtualBusy', 
+                   'void', 
+                   [param('ns3::Time', 'duration')])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::CancleTx(ns3::AcIndex ac) [member function]
+    cls.add_method('CancleTx', 
+                   'void', 
+                   [param('ns3::AcIndex', 'ac')])
+    ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
     ## ocb-wifi-mac.h (module 'wave'): void ns3::OcbWifiMac::FinishConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('FinishConfigureStandard', 
                    'void', 
diff -Naur ns-3.21/src/wave/doc/wave.rst ns-3.22/src/wave/doc/wave.rst
--- ns-3.21/src/wave/doc/wave.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/doc/wave.rst	2015-02-05 15:46:22.000000000 -0800
@@ -3,7 +3,7 @@
 WAVE is a system architecture for wireless-based vehicular communications, 
 specified by the IEEE.  This chapter documents available models for WAVE
 within |ns3|.  The focus is on the MAC layer and MAC extension layer
-defined by [ieee80211p]_.
+defined by [ieee80211p]_ and [ieee1609dot4]_.
 
 .. include:: replace.txt
 
@@ -24,37 +24,42 @@
 security services:  IEEE 1609.2 [ieee1609dot2]_,
 network and transport layer services:  IEEE 1609.3 [ieee1609dot3]_,
 and multi-channel coordination:  IEEE 1609.4 [ieee1609dot4]_.
-
-In |ns3|, the focus of the ``wave`` module is on the MAC layer.
-The key design aspect of WAVE-compilant MACs is that they allow
+Additionally, SAE standard J2735 [saej2735]_ describes a Dedicated
+Short Range Communications (DSRC) application message set that allows
+applications to transmit information using WAVE. 
+
+In |ns3|, the focus of the ``wave`` module is on both the MAC layer and the 
+multi-channel coordination layer.
+The key design aspect of 802.11p-compilant MAC layer is that they allow
 communications outside the context of a basic service set (BSS).
 The literature uses the acronym OCB to denote "outside the context
-of a BSS", and the class ``ns3::OcbWifiMac`` models this in |ns3|. 
-Many management frames will not be used, but when used, the BSSID field 
-needs to be set to a wildcard BSSID value. 
-Management information is transmitted by what is called a vendor specific 
-action frame. 
-
-With these changes, the packet transmissions (for a moving vehicle) can
-be fast with small delay.  At the physical layer, the biggest difference is 
-to use the 5.9 GHz band with a channel bandwidth of 10 MHz.  These physical
+of a BSS", and the class ``ns3::OcbWifiMac`` models this in |ns3|.
+This MAC does not require any association between devices (similar to an 
+adhoc WiFi MAC). Many management frames will not be used, but when used, the BSSID field 
+needs to be set to a wildcard BSSID value. Management information is 
+transmitted by what is called a vendor specific action (VSA) frame. With these 
+changes, the packet transmissions (for a moving vehicle) can be fast with 
+small delay in the MAC layer. Users can create IEEE802.11p-compliant device 
+(the object of the class ``ns3::WifiNetDevice`` associating with 
+``ns3::OcbWifiMac``) .
+
+The key design aspect of the WAVE-compilant MAC layer (including 802.11p MAC 
+layer and 1609.4 MAC extension layer) is that, based on OCB features, they 
+provide devices with the capability of switching between control and service channels, using a single radio or using multiple radios. 
+Therefore devices can communicate with others in single or multiple 
+channels, which can 
+support both safety related and non-safety related service for vehicular environments. 
+
+At the physical layer, the biggest difference is the use of the 5.9 GHz band 
+with a channel bandwidth of 10 MHz.  These physical
 layer changes can make the wireless signal relatively more stable,
-without degrading throughput too much (ranging from 3 Mbps to 27 Mbps), 
-although 20 MHz channel bandwidth is still supported.
+without degrading throughput too much (ranging from 3 Mbps to 27 Mbps).
 
 The source code for the WAVE MAC models lives in the directory
 ``src/wave``.
 
-The current code represents an interim capability to realize an
-802.11p-compliant device, but without the WAVE extensions (which
-are planned for a later patch).  In vehicular communications using
-WAVE, radios have the capability of switching between control and
-service channels, or using multiple radios.  These aspects are not
-yet modelled.  The WaveNetDevice modelled herein enforces that
-a WAVE-compliant physical layer (at 5.9 GHz) is selected, and 
-does not require any association between devices (similar to an 
-adhoc WiFi MAC), but is otherwise similar (at this time) to a
-WifiNetDevice.
+For better modeling WAVE and VANET, the WAVE models for high layers 
+(mainly [ieee1609dot3]_ ) are planned for a later patch.
 
 Design
 ======
@@ -62,104 +67,332 @@
 In |ns3|, support for 802.11p involves the MAC and PHY layers.
 To use an 802.11p NetDevice, ``ns3::Wifi80211pHelper`` is suggested.
 
+In |ns3|, support for WAVE involves the MAC, its MAC extension and PHY layers.
+To use a WAVE NetDevice, ``ns3::WaveHelper`` is suggested.
+
 MAC layer
 #########
 
 The classes used to model the MAC layer are ``ns3::OrganizationIdentifier``,
-``ns3::VendorSpecificActionHeader``, ``ns3::HigherDataTxVectorTag``,
-``ns3::WaveMacLow``, and ``ns3::OcbWifiMac``.
+``ns3::VendorSpecificActionHeader`` and ``ns3::OcbWifiMac``.
 
 The OrganizationIdentifier and VendorSpecificActionHeader are used to support 
-the sending of a Vendor Specific Action frame. The HigherDataTxVectorTag 
-and WaveMacLow are used to support higher control transmission parameters. 
-These classes are all used in OcbWifiMac.
+the sending of a Vendor Specific Action frame.
 
 OcbWifiMac is very similar to AdhocWifiMac, with some modifications. 
-(|ns3| AdhocWifiMac class is implemented very close to the 802.11p OCB 
+The |ns3| AdhocWifiMac class is implemented very close to the 802.11p OCB 
 mode rather than a real 802.11 ad-hoc mode. The AdhocWifiMac has no BSS 
 context that is defined in 802.11 standard, so it will not take time to 
-send beacon and authenticate.)
+send beacons and to authenticate, making its behavior similar to that
+of an OcbWifiMac.
 
 1. SetBssid, GetBssid, SetSsid, GetSsid
-   these methods are related to 802.11 BSS context which is unused in OCB context.
+
+  These methods are related to 802.11 BSS context, and are unused in the OCB context.
+
 2. SetLinkUpCallback, SetLinkDownCallback
+ 
    WAVE device can send packets directly, so the WiFi link is never down.
+
 3. SendVsc, AddReceiveVscCallback
-   WAVE management information shall be sent by vendor specific action frame, 
-   and it will be called by upper layer 1609.4 standard to send WSA
+
+   WAVE management information shall be sent by vendor specific action frames, 
+   sent by the upper layer 1609.4 standard as WSA
    (WAVE Service Advertisement) packets or other vendor specific information.
+
 4. SendTimingAdvertisement (not implemented)
+
    Although Timing Advertisement is very important and specifically defined in 
    802.11p standard, it is not useful in a simulation environment. 
    Every node in |ns3| vehicular simulation is assumed to be already time 
    synchronized (perhaps by GPS).
+
 5. ConfigureEdca
-   This method will allow the user to set EDCA parameters of WAVE channeles 
+
+   This method will allow the user to set EDCA parameters of WAVE channels 
    including CCH ans SCHs. And the OcbWifiMac itself also uses this method 
    to configure default 802.11p EDCA parameters.
-6. WILDCARD BSSID
-   The WILDCARD BSSID is set to "ff:ff:ff:ff:ff:ff".
-   As defined in 802.11-2007, a wildcard BSSID shall not be used in the
+
+6. Wildcard BSSID
+
+   The Wildcard BSSID is set to "ff:ff:ff:ff:ff:ff".
+   As defined in IEEE 802.11-2007, a wildcard BSSID shall not be used in the
    BSSID field except for management frames of subtype probe request. But Adhoc 
    mode of |ns3| simplifies this mechanism:  when stations receive packets, 
-   packets regardless of BSSID will be forwarded up to the higher layer. 
+   they will be forwarded up to the higher layer, regardless of BSSID. 
    This process is very close 
    to OCB mode as defined in 802.11p-2010, in which stations use the wildcard 
    BSSID to allow the higher layer of other stations to hear directly.
+
 7. Enqueue, Receive
+
    The most important methods are send and receive methods. According to the 
-   standard, we should filter the frames that are not permitted. However here we 
+   standard, we should filter the frames that are not permitted. Thus here we 
    just identify the frames we care about; the other frames will be discarded.
 
+MAC extension layer
+###################
+
+Although 1609.4 is still in the MAC layer, the implemention 
+approach for |ns3| does not do much modification in the
+source code of the wifi module. Instead, if some feature is related 
+to wifi MAC classes, then a relevant subclass is defined; if some 
+feature has no relation to wifi MAC classes, then a new class 
+will be defined. This approach was selected to be non-intrusive to the 
+|ns3| wifi module. All of these classes will be hosted in a 'container'
+class called ``ns3:: WaveNetDevice``. This class is a subclass inherting 
+from ``ns3::NetDeivce``, composed of the objects of 
+``ns3::ChannelScheduler``, ``ns3::ChannelManager``, 
+``ns3::ChannelCoordinator`` and ``ns3::VsaManager`` 
+classes to provide the features described in 1609.4 while still 
+containing the objects of ``ns3::OcbWifiMac`` and ``ns3::WifiPhy`` 
+classes.  Morever, ``ns3::OcbWifiMac`` class is further extended with 
+support for IEEE 1609.4 associating with ``ns3::HigherLayerTxVectorTag`` 
+and ``ns3::WaveMacLow``. The main work of the WaveNetDevice is to create 
+objects, configure, check arguments and provide new APIs for multiple 
+channel operation as follows:
+
+1. AddMac, GetMac and GetMacs
+
+  Different from ``ns3::WifiNetDevice``, the WAVE device will have 
+  multiple internal MAC entities rather than a single one. Each MAC 
+  entity is used to support each WAVE channel. Thus, when 
+  devices switch from the current channel to the next channel in different 
+  channel intervals, the packets in the internal queue will not be
+  flushed and the current MAC entity will perform a suspend operation 
+  until woken up in next appropriate channel interval.
+
+2. AddPhy, GetPhy and GetPhys
+
+  Also in contrast to ``ns3::WifiNetDevice``,  the WAVE device here 
+  can allow more than one PHY entity, which permits the use cases of
+  of single-PHY devices or multiple-PHY devices.
+
+3. SetChannelScheduler and GetChannelScheduler
+
+  How to deal with multiple MAC entities and PHY entities to assign 
+  channel access for different requests from higher layer? IEEE 
+  1609.4 [ieee1609dot4]_ does not seem to give a very clear and detailed 
+  mechanism, deferring to the implementor. In this model, the class 
+  ``ns3::ChannelScheduler`` provides the API and delegates to the subclasses
+  to implement the virtual methods. In the current implementation, the default 
+  assignment mechanism for channel access, 
+  called ``ns3::DefaultChannelScheduler``, gives a simple answer that only
+  deals with multiple channel operation in the context of a single-PHY device. 
+  If users define their own different assignment mechanisms such as in the 
+  context of two PHY entities, they can easily reuse models using AddPhy and 
+  SetChannelScheduler methods to import a new assignment mechanism.
+
+4. SetChannelManager and GetChannelManager
+
+  class ``ns3::ChannelManager`` is a WAVE channel set which contains 
+  valid WAVE channel numbers. Morever, the tx information in this channel 
+  set such as data rate and tx power level is used for transmitting management frames.
+
+5. SetVsaManager and GetVsaManager
+
+  class ``ns3::VsaManager`` is used to deal with sending and receiving 
+  VSA frames. According to different request parameters from the higher layer, 
+  this class may transmit VSA frames repeatedly in the appropriate channel 
+  number and channel interval.
+
+6. SetChannelCoordinator and GetChannelCoordinator
+
+  class ``ns3::ChannelCoordinator`` is used to deal with channel coordination. 
+  The WAVE device can be aware of the channel interval at the current time or 
+  in the future.  It can also notify listeners about incoming channel coordination 
+  events. Generally this class is used in the case of assigning alternating CCH and SCH access.
+
+7. StartSch and StopSch
+
+  In contrast to the basic 802.11p device that allow transmission packets 
+  immediately after 
+  the device is created, the WAVE device should assign channel access 
+  for sending packets.  This method will call class ``ns3::ChannelScheduler`` 
+  to assign radio resources for the relevant channel.
+
+8. ChangeAddress
+
+  The WAVE device can support a change of address after devices are already 
+  initialized, which will cause all of MAC entities reset their status.
+
+9. CancelTx
+
+  The WAVE device can support a request to cancel all transmissions associated 
+  with the particular category and channel number, which will reset the 
+  particular interval queue and drop all of the queued packets in this queue.
+
+10. RegisterTxProfile and DeleteTxProfile
+
+  After channel access is assigned, we still cannot send IP-based 
+  (or other protocol) packets by the Send () method. A tx profile should 
+  be registered to specify tx parameters before transmission. 
+
+11. StartVsa, StopVsa and SetWaveVsaCallback
+
+  These methods will call an object from class ``ns3::VsaManager`` to send 
+  and receive VSA frames.  Generally these methods are used by IEEE 1609.3 
+  for WSA management information.
+
+12. SendX
+
+  After channel access is assigned, we can send WSMP (or other protocol) 
+  packets via the SendX () method. We should specify the tx parameters for 
+  each packet, e.g. the channel number for transmit.
+
+13. Send and SetReceiveCallback
+
+  This method is the abstract method defined in the parent class 
+  ``ns3::NetDevice``, defined to allow the sending of IP-based packets. 
+  The channel access should be already assigned and tx profile should 
+  be registered, otherwise incoming packets from the higher layer will be 
+  discarded. No matter whether packets are sent by Send method or SendX 
+  method, the received packets will be only be delivered to the higher layer 
+  by the registered ReceiveCallback.
+
+14. other methods from its parent class ``ns3::NetDevice``
+
+  These methods are implemented very similar to the code in ``ns3::WifiNetDevice``.
+
+In the above numbered list, we can categorize the methods into three types:
+the first type, from 1 to 6 and also 14, is the configuration for modeling and 
+creating a WAVE device; the second type, from 7 to 11, is 
+the management plane of the standard; and the third type, 12 and 13, 
+is the data plane of the standard.
+
+Channel coordination
+
+The class ``ns3::ChannelCoordinator`` defines the CCH Interval, SCH Interval and GuardInteval. Users can be aware of which interval the current time or 
+future time will be in. If channel access mode is assigned to 
+alternating CCH and SCH access, 
+channel interval events will be notified repeatedly for class 
+``ns3::ChannelCoordinator`` to switch channels.  Current default values are 
+for CCHI with 50ms interval, SCHI with 50ms interval, and GuardI with 4ms interval. Users can change these values by configuring the class attributes. 
+
+Channel routing
+
+Channel routing service means different transmission approaches for WSMP data, 
+IP datagram and management information.
+For WSMP data, the SendX () method implements the service primitive 
+MA-UNITDATAX, and users can 
+set transmission parameters for each individual packet. The parameters include 
+channel number, priority,
+data rate and tx power level (expiration time is not supported now). 
+For IP datagrams, the Send () method is a virtual method from ``ns3::NetDevice`` that implements the service primitive MA-UNITDATA.
+Users should insert QoS tags into packets themselves if they want to use QoS. 
+Morever, a tx profile should be registered
+before the Send method is called for transmit; the profile contains SCH number, data rate, power level and adaptable mode. 
+For management information, StartVsa method implements the service primitive 
+MLMEX-VSA. The tx information is already configured 
+in ``ns3::ChannelManager``, including data rate, power level and adaptable mode.
+
+Channel access assignment
+
+The channel access assignment is done by class ``ns3::ChannelScheduler`` to assign ContinuousAccess, ExtendedAccess 
+and AlternatingAccess. Besides that, immediate access is achieved by enabling 
+the "immediate" parameter, in which case
+the request channel will be switched to immediately.  However this class is a 
+virtual parent class.  The current module provides a
+subclass ``ns3::DefaultChannelScheduler`` to assign channel access in the context of a single-PHY device. In this subclass, if the channel 
+access is already assigned for another request, the next coming request will 
+fail until the previous channel access is released.
+Users can implement different assignment mechanisms to deal with multiple MAC entities and multiple PHY entities by 
+inheriting from parent class ``ns3::ChannelScheduler``.
+An important point is that channel access should be assigned before sending
+routing packets, otherwise the packets will be discard.
+
+Vendor Specific Action frames
+
+When users want to send VSA repeatedly by calling WaveNetDevice::StartVsa, VSA will be sent repeatedly by 
+``ns3::VsaManager``. It is worth noting that if the peer MAC address is a unicast address, the VSA can only 
+be transmitted once even there is a repeat request. The tx parameters for VSA management frames can be obtained from the ``ns3::ChannelManager``.
+
+User priority and Multi-channel synchronization
+
+Since wifi module has already implemented a QoS mechanism, the wave module 
+reuses the mechanism; VSA frames will be assigned the default value with the 
+highest AC according to the standard.
+Multiple-channel synchronization is very important in practice for devices 
+without a local timing source. 
+However, in simulation, every node is supposed to have the same system clock, which could be provided by GPS devices in a real environment, so this feature is not modelled in |ns3|.
+During the guard interval, the device can only be in receive state, except 
+for the switch state when the device does channel switching operation.
+
 PHY layer
 #########
-Actually, no modification or extension happens in the |ns3| PHY layer
+
+No modification or extension is made to the |ns3| PHY layer
 corresponding to this model.
-In the 802.11p standard, the PHY layer wireless technology is still 80211a OFDM with 10MHz channel width,
+In the 802.11p standard, the PHY layer wireless technology is still 80211a OFDM with a 10MHz channel width,
 so Wifi80211pHelper will only allow the user to set the standard 
-to WIFI_PHY_STANDARD_80211_10MHZ or WIFI_PHY_STANDARD_80211_20MHZ
-(WIFI_PHY_STANDARD_80211a with 20MHz is supported, but not recommended.)
+to WIFI_PHY_STANDARD_80211_10MHZ or WIFI_PHY_STANDARD_80211_20MHZ, 
+while WaveHelper will only support WIFI_PHY_STANDARD_80211_10MHZ.
 The maximum station transmit power and maximum permitted EIRP defined in 
 802.11p is larger 
-than that of WiFi, so transmit range can normally become longer than 
+than that of WiFi, so transmit range can normally become longer than the
 usual WiFi.  However, this feature will 
 not be implemented. Users who want to obtain longer range should configure 
 attributes "TxPowerStart", 
-"TxPowerEnd" and "TxPowerLevels" of the YansWifiPhy class.
+"TxPowerEnd" and "TxPowerLevels" of the YansWifiPhy class by themselves.
 
 Scope and Limitations
 =====================
 
 1. Does the model involve vehicular mobility of some sort?
 
-Vehicular networks involve not only communication protocols, but also 
-a communication environment 
-including vehicular mobility and propagation models. Because of specific 
-features of the latter, the protocols need to change. The MAC layer model 
-in this 
-project just adapts MAC changes to vehicular environment. However this model 
-does not involve any
-vehicular mobility with time limit. Users can use any mobility model in |ns3|, 
-but should understand that vehicular mobility is out of scope for the
-current WAVE module.
-
-2. Is this model going to use different propagation models?
-
-Referring to the first issue, some more realistic propagation models 
-for vehicualr environment
-are suggested and welcome. And some existing propagation models in |ns3| are 
-also suitable. 
-Normally, users can use Friis, Two-Ray Ground, and Nakagami models. 
+Vehicular networks involve not only communication protocols, but 
+also a communication environment including vehicular mobility and 
+propagation loss models. Because of specific features of the latter, 
+the protocols need to change. The MAC layer model in this project just 
+adapts MAC changes to vehicular environment. However this model 
+does not involve any vehicular mobility with time limit. While users 
+should understand that vehicular mobility is out of scope for the 
+current WAVE module, they can use any mobility model in |ns3|.  For
+example, users may use a ``ns3::RandomWaypointMobilityModel`` (RWP)
+for node mobilty or may generate ns-2-style playback files using 
+other third-party tools and then playback those mobility traces 
+using ``ns3::Ns2MobilityHelper``.
+
+2. Does this model use different propagation models?
+
+Referring to the first issue, some more realistic propagation loss
+models for vehicualr environment are suggested and welcome.  Some 
+existing propagation los models in |ns3| are also suitable.  
+Normally, users can use Friis, Two-Ray Ground, and Nakagami models.
+The ``ns3::VanetRoutingExample`` example defaults to Two-Ray 
+Ground propagation loss with no additional fading, although adding 
+stochastic Nakagami-m fading is parametrically supported.
 
 3. Are there any vehicular application models to drive the code?
 
-About vehicular application models, SAE J2375 depends on WAVE architecture and
-is an application message set in US; CAM and DENM in Europe between network 
-and application layer, but is very close to application model. The BSM in 
-J2375 and CAM send alert messages that every 
-vehicle node will sent periodicity about its status information to 
-cooperate with others. 
-Fow now, a vehicular application model is not within scope.
+About vehicular application models, SAE J2375 depends on WAVE 
+architecture and is an application message set in US.  Cooperative Awareness
+Messages (CAM) and Decentralized Environment Notification Messages (DENM) can
+be sent Europe between network and application layer, and is 
+very close to being an application model. The BSM in J2375 [saej2735] and CAM
+send alert messages that every vehicle node will sent periodically about 
+its status information to cooperate with others. The 
+``ns3::VanetRoutingExample`` example sets up a network of (vehicular)
+nodes that each broadcast BSMs at regular intervals and may additionally
+attempt to route non-BSM data through the network using select IP-based
+routing protocols.
+
+5. Why are there two kinds of NetDevice helpers?
+
+The current module provides two helpers to create two kinds of NetDevice. 
+The first is an object of WifiNetDevice (802.11p device) which mainly 
+contains class ``ns3::OcbWifiMac`` to enable OCB mode. The second 
+is an object of WaveNetDevice (WAVE device) which contains addtional 
+classes ``ns3::ChannelScheduler``, ``ns3::ChannelManager``, 
+``ns3::ChannelCoordinator`` and ``ns3::VsaManager`` to support 
+multi-channel operation mode.  The reason to provide a special 802.11p 
+device helper is that, considering the fact that many researchers are 
+interested in routing protocols or other aspects of vehicular environment in
+a single channel context, they need neither multi-channel operation nor 
+WAVE architectures. 
+Besides that, the European standard may also reuse an 802.11p device in an 
+modified ITS-G5 implementation (maybe called ItsG5NetDevice).  Hence,
+the model supports configuration of both types of devices.
 
 References
 ==========
@@ -174,38 +407,47 @@
 
 .. [ieee1609dot4] IEEE Std 1609.4-2010 "IEEE Standard for Wireless Access in Vehicular Environments (WAVE) - Multi-Channel Operation, 2010"
 
+.. [saej2735] SAE Std J2735 "J2735 dedicated short range communications (DSRC) message set dictionary. 2009"
+
 Usage
 *****
 
 Helpers
 =======
-The helpers include ``ns3::NqosWaveMacHelper``, ``ns3::QosWaveMacHelper``, 
-``ns3::Wifi80211pHelper`` and ``ns3::WaveHelper``. Wifi80211pHelper is used 
-to create 
+
+The helpers include a) lower-level MAC and PHY channel helpers and 
+b) higher-level application helpers that handle the sending and receiving
+of the Basic Safety Message (BSM).
+
+The lower-level helpers include ``ns3::YansWavePhyHelper``, ``ns3::NqosWaveMacHelper``, ``ns3::QosWaveMacHelper``, 
+``ns3::Wifi80211pHelper`` and ``ns3::WaveHelper``. 
+
+Wifi80211pHelper is used to create 
 802.11p devices that follow the 802.11p-2010 standard. WaveHelper is 
-used to create WAVE devices that follow the 802.11p-2010 and 1609.4-2010 
+used to create WAVE devices that follow both 802.11p-2010 and 1609.4-2010 
 standards which are the MAC and PHY layers of the WAVE architecture. 
-The relation of them is described as below:
 
-::
+The relation of ``ns3::NqosWaveMacHelper``, ``ns3::QosWaveMacHelper`` and 
+``ns3::Wifi80211pHelper`` is described as below:
 
-    WifiHelper ----------use---------->  WifiMacHelper
-        ^                             ^       ^
-        |                             |       |
-        |                          inherit  inherit
-        |                             |       |
-        |                 QosWifiMacHelper  NqosWifiMacHelper
-        |                             ^       ^
-        |                             |       |
-      inherit                     inherit  inherit
-        |                             |       |
-      Wifi80211pHelper     QosWaveMacHelper  NqosWaveHelper
-
-Although Wifi80211Helper can use any subclasses inheriting from 
-WifiMacHelper, we force users to use subclasses inheriting from 
-QosWaveMacHelper or NqosWaveHelper.
+::
 
-Although the functions of WiFi 802.11p device can be achieved by 
+    WifiHelper -------------------use------------------->   WifiMacHelper
+        ^                                                                              ^                     ^
+        |                                                                              |                     |
+        |                                                                             inherit          inherit
+        |                                                                               |                     |
+        |                                                          QosWifiMacHelper      NqosWifiMacHelper
+        |                                                                               ^                     ^
+        |                                                                               |                     |
+      inherit                                                                     inherit          inherit
+        |                                                                               |                     |
+    Wifi80211pHelper ------use----->  QosWaveMacHelper or NqosWaveHelper
+ 
+From the above diagram, Wifi80211Helper appears to be able to use any 
+subclasses inheriting from WifiMacHelper; however, we force users to use 
+subclasses only inheriting from QosWaveMacHelper or NqosWaveHelper.
+While the functions of WiFi 802.11p device can be achieved by 
 WaveNetDevice's ContinuousAccess assignment, Wifi80211pHelper is recommeneded
 if there is no need for multiple channel operation.
 Usage is as follows:
@@ -221,68 +463,410 @@
     NqosWave80211pMacHelper wifi80211pMac = NqosWaveMacHelper::Default();
     Wifi80211pHelper 80211pHelper = Wifi80211pHelper::Default ();
     devices = 80211pHelper.Install (wifiPhy, wifi80211pMac, nodes);
+    
+The relation of  ``ns3::YansWavePhyHelper``, ``ns3::QosWaveMacHelper`` and ``ns3::WaveHelper`` 
+is described as below:
+ 
+::
+  
+                                                                               WifiMacHelper
+                                                                                      ^
+                                                                                      |
+                                                                                     inherit
+                                                                                      |
+                                                                         QosWifiMacHelper 
+                                                                                      ^ 
+                                                                                      | 
+                                                                                     inherit
+                                                                                      | 
+    WaveHelper -------- only use --------> QosWaveMacHelper
+      
+From the above diagram, WaveHelper is not the subclass of WifiHelper and should only 
+use QosWaveMacHelper because WAVE MAC layer is based on QoS mechanism. But 
+the WaveHelper is recommened if there is a need for multiple channel operation.
+Usage is as follows:
+
+::
+
+    NodeContainer nodes;
+    NetDeviceContainer devices;
+    nodes.Create (2);
+    YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
+    YansWavePhyHelper wavePhy =  YansWavePhyHelper::Default ();
+    wavePhy.SetChannel (wifiChannel.Create ());
+    QosWaveMacHelper waveMac = QosWaveMacHelper::Default ();
+    WaveHelper waveHelper = WaveHelper::Default ();
+    devices = waveHelper.Install (wavePhy, waveMac, nodes);
+
+The higher-level helpers include ``ns3::WaveBsmStats`` and ``ns3::WaveBsmHelper``.
+
+WaveBsmStats is used to collect and manage statistics, such as packet and byte
+counts and Packet Delivery Ratio (PDR), regarding the sending 
+and receiving of WAVE BSM packets.  WaveBsmHelper is used by applications that
+wish to send and receive BSMs.
+
+The relation of ``ns3::WaveBsmHelper`` and ``WaveBsmStats`` is described
+below:
+
+::
+
+    <Your Vanet Routing Application> ----use----> WaveBsmHelper ----use----> WaveBsmStats
+
+From <Your Vanet Routing Application>, usage is as follows:
+
+    // declare WAVE BSM helper instance
+    WaveBsmHelper m_waveBsmHelper;
+
+    // the following are passed to the WaveBsmHelpe::Install()
+    // method, and they are thus assumed to be created and 
+    // initialized themselves, based on the user's
+    // simulation setup criteria.
+    // container of network node
+    NodeContainer m_adhocTxNodes;
+    // (transmitting) devices (1 per node)
+    NetDeviceContainer m_adhocTxDevices;
+    // IPv4 interfaces (1 per device)
+    Ipv4InterfaceContainer m_adhocTxInterfaces;
+    // total simulation time (in seconds)
+    double m_TotalSimTime;
+    // WAVE BSM broadcast interval.  E.g., 100ms = 0.1 seconds
+    double m_waveInterval; // seconds
+    // time-synchronization accuracy of GPS devices.  E.g., +/- 40ns
+    double m_gpsAccuracyNs;
+    // array of distances (m) at which safety PDR shall be determined, 
+    // e.g. 50m, 100m, 200m, 300m, 400m, 500m, 600m, 800m, 1000m, and 1500m
+    std::vector <double> m_txSafetyRanges;
+    // used to get consistent random numbers across scenarios
+    int64_t m_streamIndex;
+
+    m_waveBsmHelper.Install (m_adhocTxNodes,
+                           m_adhocTxDevices,
+                           m_adhocTxInterfaces,
+                           Seconds(m_TotalSimTime),
+                           m_wavePacketSize,
+                           Seconds(m_waveInterval),
+                           // convert GPS accuracy, in ns, to Time
+                           Seconds(m_gpsAccuracyNs / 1000000.0),
+                           m_txSafetyRanges);
+
+    // fix random number streams
+    m_streamIndex += m_waveBsmHelper.AssignStreams (m_streamIndex); 
+
+Example usages of BSM statistics are as follows:
+
+    // Get the cumulative PDR of the first safety Tx range (i.e, 50m in the 
+    // m_txSafetyRanges example above).
+    double bsm_pdr1 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (1);
+
+    // total WAVE BSM bytes sent
+    uint32_t cumulativeWaveBsmBytes = m_waveBsmHelper.GetWaveBsmStats ()->GetTxByteCount ();
+
+    // get number of WAVE BSM packets sent
+    int wavePktsSent = m_waveBsmHelper.GetWaveBsmStats ()->GetTxPktCount ();
+
+    // get number of WAVE BSM packets received
+    int wavePktsReceived = m_waveBsmHelper.GetWaveBsmStats ()->GetRxPktCount ();
+
+    // reset count of WAVE BSM packets received
+    m_waveBsmHelper.GetWaveBsmStats ()->SetRxPktCount (0);
+
+    // reset count of WAVE BSM packets sent
+    m_waveBsmHelper.GetWaveBsmStats ()->SetTxPktCount (0);
+
+    // indicate that a node (nodeId) is moving.  (set to 0 to "stop" node)
+    WaveBsmHelper::GetNodesMoving()[nodeId] = 1;
 
 APIs
 ====
 
+MAC layer
+#########
 The 802.11p device can allow the upper layer to send different information
 over Vendor Specific Action management frames by using different
 OrganizationIdentifier fields to identify differences.
 
-1. already create a Node object and WifiNetDevice object
-2. define an OrganizationIdentifier
+1. create some Node objects and WifiNetDevice objects, e.g. one sender and one receiver.
 
-::
+2. receiver defines an OrganizationIdentifier
+
+  ::
 
    uint8_t oi_bytes[5] = {0x00, 0x50, 0xC2, 0x4A, 0x40};
    OrganizationIdentifier oi(oi_bytes,5);
 
-3. define a Callback for the defined OrganizationIdentifier
+3. receiver defines a Callback for the defined OrganizationIdentifier
 
-::
+  ::
 
-   VscCallback vsccall = MakeCallback (&VsaExample::GetWsaAndOi, this);
+    VscCallback vsccall = MakeCallback (&VsaExample::GetWsaAndOi, this);
 
-4. OcbWifiMac of 802.11p device registers this identifier and function
+4. receiver registers this identifier and function
 
-::
+  ::
 
       Ptr<WifiNetDevice> device1 = DynamicCast<WifiNetDevice>(nodes.Get (i)->GetDevice (0));
       Ptr<OcbWifiMac> ocb1 = DynamicCast<OcbWifiMac>(device->GetMac ());
       ocb1->AddReceiveVscCallback (oi, vsccall);
 
-5. now one can send management packets over VSA frames
+5. sender transmits management information over VSA frames
 
-::
+  ::
 
       Ptr<Packet> vsc = Create<Packet> ();
       ocb2->SendVsc (vsc, Mac48Address::GetBroadcast (), m_16093oi);
 
-6. then registered callbacks in other devices will be called.
+6. then registered callbacks in the receiver will be called.
+
+MAC extension layer
+###################
+
+The WAVE devices allow the upper layer to route packets in different control 
+approaches.  However dedicated APIs and invocation sequences should be 
+followed; otherwise, the packets may be discarded by devices.
+
+1. create some Node objects and WaveNetDevice objects by helpers, e.g. one sender and one receiver.
+
+2. receiver registers the receive callback if WSMP and IP-based packets are supposed to be received.
+
+  ::
+
+    // the class ``ns3::WaveNetDeviceExample``here will has a receive method "Receive" to be registered.
+    receiver->SetReceiveCallback (MakeCallback (&WaveNetDeviceExample::Receive, this));
+    
+3. receiver registers the receive callback if WSA frames are supposed to be received.
+
+  ::
+
+    // the class ``ns3::WaveNetDeviceExample``here will has a receive method "ReceiveVsa" to be registered.
+    receiver->SetWaveVsaCallback (MakeCallback  (&WaveNetDeviceExample::ReceiveVsa, this));
+      
+4. sender and receiver assign channel access by StartSch method.
+
+  ::
+
+    // in this case that alternating access with non-immediate mode is assigned for sender and receiver devices.
+    const SchInfo schInfo = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, sender, schInfo);
+    Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, receiver, schInfo);
+ 
+  or
+
+  ::
+
+    // in this case that continuous access with immediate mode is assigned for sender and receiver devices.
+    const SchInfo schInfo = SchInfo (SCH1, true, EXTENDED_CONTINUOUS);
+    Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, sender, schInfo);
+    Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, receiver, schInfo)
+    
+  or
+
+  ::
+
+    // in this case that extended access with non-immediate mode is assigned for sender and receiver devices.
+    const SchInfo schInfo = SchInfo (SCH1, false, 100);
+    Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, sender, schInfo);
+    Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, receiver, schInfo)
+
+5. sender registers a tx profile if IP-based packets are planned to be transmitted
+
+  ::
+
+    // the IP-based packets will be transmitted in SCH1 with 6Mbps and 4 txPowerLevel with adaptable mode.
+    const TxProfile txProfile = TxProfile (SCH1, true, 4, WifiMode("OfdmRate6MbpsBW10MHz"));
+    Simulator::Schedule (Seconds (2.0), &WaveNetDevice::RegisterTxProfile, sender, txProfile);
+    
+6. sender transmits  WSMP packets by SendX method.
+
+  ::
+
+    // the data rate and txPowerLevel is controlled by the high layer which are 6Mbps and 0 level here.
+    const TxInfo txInfo = TxInfo (CCH, 7, WifiMode("OfdmRate6MbpsBW10MHz"),  0);
+    // this packet will contain WSMP header when IEEE 1609.3 model is implemented
+    const static uint16_t WSMP_PROT_NUMBER = 0x88DC;
+    Ptr<Packet> wsaPacket  = Create<Packet> (100);
+    const Address dest = receiver->GetAddress ();  
+    Simulator::Schedule (Seconds (2.0),  &WaveNetDevice::SendX, sender, wsaPacket, dest, WSMP_PROT_NUMBER, txInfo);
+ 
+  or
+
+  ::
+
+    // the data rate and txPowerLevel is controlled by the MAC layer which are decided by WifiRemoteStationManager
+    const TxInfo txInfo = TxInfo (CCH, 7, WifiMode(),  8);
+    // this packet will contain WSMP header when IEEE 1609.3 model is implemented
+    const static uint16_t WSMP_PROT_NUMBER = 0x88DC;
+    Ptr<Packet> wsaPacket  = Create<Packet> (100);
+    const Address dest = receiver->GetAddress ();  
+    Simulator::Schedule (Seconds (2.0),  &WaveNetDevice::SendX, sender, wsaPacket, dest, WSMP_PROT_NUMBER, txInfo);
+
+7. sender transmits IP-based packets by Send method.
+  
+  ::
+  
+    const static uint16_t IPv6_PROT_NUMBER = 0x86DD;
+    Ptr<Packet> packet  = Create<Packet> (100);
+    const Address dest = receiver->GetAddress ();
+    Simulator::Schedule (Seconds (2.0),  &WaveNetDevice::Send, sender, packet, dest, IPv6_PROT_NUMBER);
+ 
+8. send transmits WSA frames repeatedly by StartVsa method.
+ 
+  ::
+   
+     // this packet will contain WSA management information when IEEE 1609.3 model is implemented
+    Ptr<Packet> wsaPacket = Create<Packet> (100);
+    Mac48Address dest = Mac48Address::GetBroadcast ();
+    const VsaInfo vsaInfo = VsaInfo (dest, OrganizationIdentifier (), 0, wsaPacket, SCH1, 100, VSA_TRANSMIT_IN_BOTHI);
+    Simulator::Schedule (Seconds (2.0), &WaveNetDevice::StartVsa, sender, vsaInfo);
+    
+9. sender stops WSA frames repeatedly transmit by StopVsa method.
+
+  ::
+  
+    Simulator::Schedule (Seconds (3.0), &WaveNetDevice::StopVsa, sender, SCH1);
+
+10. sender and receiver release assigned channel access by StopSch method.
+
+  ::
+
+    Simulator::Schedule (Seconds (4.0), &WaveNetDevice::StopSch, sender, SCH1);
+    Simulator::Schedule (Seconds (4.0), &WaveNetDevice::StopSch, receiver, SCH1);
+    
+11. sender or receiver changes current MAC address by ChangeAddress method.
+
+  ::
+
+    Address newAddress = Mac48Address::Allocate ();
+    Simulator::Schedule (Seconds (4.0), &WaveNetDevice::ChangeAddress, sender, newAddress);
+
+12. sender cancels all transmissions with the particular category and channel number by CancelTx method.
+ 
+  ::
+  
+    Simulator::Schedule (Seconds (4.0), &WaveNetDevice::CancelTx, sender, CCH,  AC_BE);
+
+For transmitting and receiving these packets successfully, 
+the normal and appropriate invocation procedures should be performed.
+
+(a) For WSMP, channel access should be assigned for transmit and receive. 
+The channel access release operation may be optional if there is no need for 
+transmission in another channel.
+
+::
+
+    StartSch -------------> SendX / ReceiveCallback -------------->  StopSch
+
+(b) For IP, a tx profile should be registered before transmit and receive
+operations. The delete operation of tx profile may be 
+optional if there is no need for transmission with other tx parameters. 
+The channel access assignment and release optional usage is the same with 
+WSMP here.
+
+::
+
+    StartSch -------------> RegisterTxProfile ----------> Send / ReceiveCallback -------------->  DeleteTxProfile -------------> StopSch
+
+(c) For WSA, StartVsa is called to transmit while StopVsa is an optional 
+operation for canceling repeat transmit. The channel 
+access assignment and release optional usage is also the same with WSMP here. 
+To receive VSA, WaveVsaCallback should 
+be registered; otherwise, the received VSA frames will be discard by 
+the MAC extension layer and not delivered to the higher layer.
+
+::
+
+    StartSch -------------> StartVsa / WaveVsaCallback -------------->  StopVsa ---------------> StopSch
+
+(d) Here an important point is that if the higher layer wants to transmit 
+these packets in a control channel (the channel 178), 
+there will be no need to request for CCH by the StartSch method, which means 
+that StartSch can be optional or should be avoided 
+here. The reason is that the default continuous CCH access has been assigned automatically after WAVE devices are created and initialized. 
+Therefore, if calling StartSch and StopSch method with CCH as a parameter, 
+the request will be discarded by devices and the method will return false to
+indicate failure.
 
 Attributes
 ==========
 
-The current classes do not provide any additional attributes beyond those
-in the WiFi module.
+The channel interval duration's default value is defined in the standard. 
+However, the current implementation allows users to configure these 
+attributes with other values. These attributes are included in the class
+``ns3::ChannelCoodinator`` with config paths shown in the below. The method 
+IsValidConfig is suggested to test whether new configuration follows the 
+standard.
+
+::
+
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/ChannelCoordinator/$ns3::ChannelCoordinator/CchInterval
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/ChannelCoordinator/$ns3::ChannelCoordinator/SchInterval
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/ChannelCoordinator/$ns3::ChannelCoordinator/GuardInterval
+
+The ``ns3::WaveNetDevice`` is a wrapper class that contains those classes to support for multiple channel 
+operation. To set or get the pointers of those objects, users can also 
+use them by config paths shown in the below.
+
+::
 
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/Mtu
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/Channel
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/PhyEntities
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/MacEntities
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/ChannelScheduler
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/ChannelManager
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/ChannelCoordinator
+/NodeList/[i]/DeviceList/[i]/$ns3::WaveNetDevice/VsaManager
+ 
 Output
 ======
 
-The current classes provide output of the same type as WiFi devices;
-namely, ASCII and pcap traces, and logging output.  The WAVE logging
+For the 802.11p device, current classes provide output of the same type as WiFi devices;
+namely, ASCII and pcap traces, and logging output.  The 802.11p logging
 components can be enabled globally via the call to
 
 ::
   
   Wifi80211pHelper::EnableLogComponents ();
+  
+For the WAVE device, current classes provide output of the same type as WiFi 
+devices; namely, ASCII and pcap traces, and logging output. The WAVE logging
+components can be enabled globally via the call to
+
+::
+  
+  WaveHelper::EnableLogComponents ();
 
 
 Advanced Usage
 ==============
 
-To be defined.
+Advanced WaveHelper configuration
+#################################
+
+If users can make sure in which channel this WAVE device will work, 
+they can set specific channel numbers to save resources of unused channels .
+Usage is as follows:
+
+::
+
+    // in this case, the MAC entities for SCH2 to SCH6 will not be created
+    WaveHelper helper = WaveHelper::Default ();
+    uint32_t channels[] = {CCH, SCH1};
+    std::vector<uint32_t> channelsVector (channels, channels + 2);
+    helper.CreateMacForChannel (channelsVector);
+
+If users can create other channel access assignment mechanism, e.g. 
+in the context of more PHY entities, which may be called 
+"ns3::AnotherScheduler", they can use this helper to create WAVE devices 
+with new assignment mechanisms.  Usage is as follows:
 
+::
+
+    WaveHelper helper = WaveHelper::Default ();
+    helper.helper.CreateMacForChannel (ChannelManager::GetWaveChannels ());    // create all 7 MAC entites for WAVE
+    helper.CreatePhys (2);        // or other number which should be less than 7
+    helper.SetChannelScheduler ("ns3::AnotherScheduler");    // The AnotherScheduler should be implemented by users.
+    helper.SetRemoteStationManager ("ns3::ConstantRateWifiManager");    // or other  rate control algorithms
+    
 Examples
 ========
 
@@ -293,6 +877,20 @@
 them can be configured by command-line arguments).  The example shows
 typical usage of the helper classes for this mode of WiFi.
 
+Another example exists called ``wave-simple-device.cc``. This 
+example shows how to create WAVE devices by helpers and the routing service 
+for different packets.
+After WAVE devices are configured and created by helpers, these packets are 
+transmitted in different approaches.
+
+Another example exists called ``vanet-routing-compare.cc``. This
+example shows how to create mobility nodes in a VANET scenario and
+send Basic Safety Message (BSM) packets are regular intervals and/or 
+additional data traffic to be routed between nodes.  BSMs are transmitted
+assuming the WAVE Short Message Protocol (WSMP), whereas non-BSM data 
+packets are relayed by using one of several different IP-based routing
+protocols (e.g., AODV, OLSR, DSDV, or DSR).
+
 Troubleshooting
 ===============
 
@@ -301,7 +899,7 @@
 Validation
 **********
 
-A single test suite named ``wifi-80211p-ocb`` is defined.  This test
+A test suite named ``wifi-80211p-ocb`` is defined.  This test
 case consists of a stationary node and a mobile node.  The mobile
 node moves towards the stationary mode, and time points are checked
 at which time the physical layer starts to receive packets (and
@@ -309,3 +907,37 @@
 experiment is repeated for normal WiFi NetDevices in AP/STA mode, in
 Adhoc mode, and the new OCB mode.
 
+Another test suite named ``wave-mac-extension`` is defined. This test suite 
+has four test cases, including ``channel-coordination``, ``channel-routing``, 
+``channel-access`` and ``annex-c``. The first case is to test channel 
+coordination 
+feature. The second case is to test channel routing for three types of packets.
+The third case is to test four channel access assignments. And the fourth case 
+is to test the implemented feature described in the Annex C of the standard.
+It is worth noting that the  ``channel-routing`` and ``channel-access`` test 
+cases are both in the context of single-PHY device, which depends on the 
+default channel 
+access assignment mechanism ``ns3:DefaultChannelScheduler``, thus they may not
+be suitable for testing when other channel access assignment mechanisms are 
+used.  Although they are test cases, they are also good examples to show 
+usage.
+
+The ``ns3::VanetRoutingExample`` example was studied using mobility trace
+files in the Raleigh, NC USA area generated using Simulation for Urban 
+Mobility (SUMO).  Three environments were studied:  a) an open highway
+scenario, b) a residential neighborhood scenario, and c) and urban downtown
+scenario.  For each environment, a contant number of 50-750 vehicles was
+maintained for 2000 simulation seconds (> 30 minutes).  The mobility trace
+file were played back using ``ns3::Ns2MobilityHelper``.  All vehicular nodes
+transmitted a 200-byte BSM at 10 Hz and the PDR was determined for 
+transmission ranges of 50-1500m.  No additional non-BSM data was injected /
+routed through the network.  The default propagation loss model used
+was Two-Ray Ground.  Different fading / shadowing models were evaluated,
+including a) no fading, b) stochastic Nakagami-m fading, and c) an 
+obstacle shadowing model (to be contributed to |ns3|).  30 trials of each
+scenario were run in the North Carolina State University (NCSU) High 
+Performance Computing (HPC) center, with each trial requiring from 
+8 hours to 6 days of CPU time to complete.  Preliminary results were
+presented at the PhD Forum, 22nd IEEE International Conference on 
+Network Protocols (ICNP), October 24, 2014, Research Triangle Park, NC.
+See:  http://www4.ncsu.edu/~scarpen/Research_files/Final-PHD_Forum_SE_Carpenter_2014.pdf
diff -Naur ns-3.21/src/wave/examples/low99-ct-unterstrass-1day.filt.7.adj.mob ns-3.22/src/wave/examples/low99-ct-unterstrass-1day.filt.7.adj.mob
--- ns-3.21/src/wave/examples/low99-ct-unterstrass-1day.filt.7.adj.mob	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/examples/low99-ct-unterstrass-1day.filt.7.adj.mob	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,1515 @@
+# Statistics:
+# T_min:	0.000000	T_max:	300.010000
+# X_min:	10	X_max:	4660
+# Y_min:	10	Y_max:	3010
+# V_min:	9.937942	V_max:	32.054187	V_avg:	15.446680
+# nn:	99	area:	13950000.000000 
+# events:	792	hosts/area:	0.070968
+# Last mov would end time at (time): 351.020
+#
+# Processed from file: ct-unterstrass-1day.filt.7.mov
+# ADJUSTMENT: X_min=679990.0 Y_min=247490.0 T_min=36610.980000 T_max= T_scalar=1
+#
+# Statistics:
+# T_min:	36610.980000	T_max:	36910.990000
+# X_min:	680000	X_max:	684650
+# Y_min:	247500	Y_max:	250500
+# V_min:	9.937942	V_max:	32.054187	V_avg:	15.446680
+# nn:	99	area:	13950000.000000 
+# events:	792	hosts/area:	0.070968
+# Last mov would end time at (time): 36962.000
+#
+# Processed from file: ct-unterstrass-1day.filt.mov
+# FILTERING: X_min=0 X_max=999999999 Y_min=0 Y_max=999999999 T_min=36610.990000 T_max=36910.990000 V_min=0
+#
+# Statistics:
+# T_min:	35560.990000	T_max:	37461.000000
+# X_min:	680000	X_max:	684650
+# Y_min:	247500	Y_max:	250500
+# V_min:	7.806775	V_max:	32.386778	V_avg:	15.496693
+# nn:	505	area:	13950000.000000 
+# events:	5174	hosts/area:	0.362007
+# Last mov would end time at (time): 37484.000
+#
+# Processed from file: ct-unterstrass-1day.mov
+# FILTERING: X_min=0 X_max=999999999 Y_min=0 Y_max=999999999 T_min=35561 T_max=37461 V_min=0
+#
+#
+# VANET traces; ns-2 movement file
+# Parser: car-xml2ns
+#
+# City region: Unterstrass
+# Statistics:
+# T_min:	16392.990000	T_max:	88387.766811
+# X_min:	680000	X_max:	685000
+# Y_min:	247500	Y_max:	250500
+# V_min:	1.279985	V_max:	32.641710	V_avg:	14.853009
+# nn:	96934	area:	15000000.000000 
+# events:	1973502	hosts/area:	64.622667
+# Last mov would end time at (time): 88387.767
+#
+# Processed from file: VANET-traces-ns2.mov
+# X_min=680000 X_max=685000 Y_min=247500 Y_max=250500 T_min=0 T_max=999999999 V_min=0
+#
+#
+# VANET traces; ns-2 movement file
+# Parser: car-xml2ns
+#
+# Statistic for VANET-traces-ns2.mov
+# T_min: 14208.990000    T_max:  90811.692948
+# X_min: 486740  X_max:  840500
+# Y_min: 46000   Y_max:  309000
+# V_min: 0.787110        V_max:  32.679368       V_avg:  20.536439
+# nn:    259978  
+# events:        27609858
+#
+# More information on VANET traces can be found in the MobiHoc 2006 paper:
+# Val Naumov, Rainer Baumann, Thomas Gross "An Evaluation of Inter-Vehicle Ad Hoc Networks Based on Realistic Vehicular Traces"
+# (http://www.lst.inf.ethz.ch/research)
+#
+# The speed of 10^9 m/s is used to initially place nodes
+# from (0,0) to their trip starting points, e.g.:
+# $node_(12345) set X_ 0.0
+# $node_(12345) set Y_ 0.0
+# $node_(12345) set Z_ 0.0
+# $ns_ at 10000.990000 "$node_(12345) setdest 710130.000000 91630.000000 1000000000.0"
+#
+
+$ns_ at 0.0 "$node_(0) switch OFF" ;# set_X,Y,Z  
+$node_(0) set X_ 0.000000
+$node_(0) set Y_ 0.000000
+$node_(0) set Z_ 0.0
+$ns_ at 0.000000 "$node_(0) setdest 1335.996339 1004.578227 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(0) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(0) setdest 1290.000000 1090.000000 16.142807" ;# 
+$ns_ at 0.0 "$node_(1) switch OFF" ;# set_X,Y,Z  
+$node_(1) set X_ 0.000000
+$node_(1) set Y_ 0.000000
+$node_(1) set Z_ 0.0
+$ns_ at 0.000000 "$node_(1) setdest 3386.590740 102.881482 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(1) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(1) setdest 3310.000000 160.000000 13.629680" ;# 
+$ns_ at 0.0 "$node_(2) switch OFF" ;# set_X,Y,Z  
+$node_(2) set X_ 0.000000
+$node_(2) set Y_ 0.000000
+$node_(2) set Z_ 0.0
+$ns_ at 0.000000 "$node_(2) setdest 1151.671243 2088.378976 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(2) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(2) setdest 1071.000000 2103.000000 16.364369" ;# 
+$ns_ at 0.0 "$node_(3) switch OFF" ;# set_X,Y,Z  
+$node_(3) set X_ 0.000000
+$node_(3) set Y_ 0.000000
+$node_(3) set Z_ 0.0
+$ns_ at 0.000000 "$node_(3) setdest 2145.733295 1665.474912 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(3) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(3) setdest 2145.139452 1666.087027 12.762536" ;# 
+$ns_ at 0.0 "$node_(4) switch OFF" ;# set_X,Y,Z  
+$node_(4) set X_ 0.000000
+$node_(4) set Y_ 0.000000
+$node_(4) set Z_ 0.0
+$ns_ at 0.000000 "$node_(4) setdest 1344.895727 2053.358569 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(4) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(4) setdest 1071.000000 2103.000000 16.364369" ;# 
+$ns_ at 0.0 "$node_(5) switch OFF" ;# set_X,Y,Z  
+$node_(5) set X_ 0.000000
+$node_(5) set Y_ 0.000000
+$node_(5) set Z_ 0.0
+$ns_ at 0.000000 "$node_(5) setdest 1302.721238 2548.142173 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(5) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(5) setdest 1265.525646 2567.811046 15.943000" ;# 
+$ns_ at 0.0 "$node_(6) switch OFF" ;# set_X,Y,Z  
+$node_(6) set X_ 0.000000
+$node_(6) set Y_ 0.000000
+$node_(6) set Z_ 0.0
+$ns_ at 0.000000 "$node_(6) setdest 3014.330992 373.464793 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(6) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(6) setdest 2560.000000 10.000000 13.527727" ;# 
+$ns_ at 0.0 "$node_(7) switch OFF" ;# set_X,Y,Z  
+$node_(7) set X_ 0.000000
+$node_(7) set Y_ 0.000000
+$node_(7) set Z_ 0.0
+$ns_ at 0.000000 "$node_(7) setdest 3827.411664 1295.726554 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(7) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(7) setdest 3810.000000 1480.000000 13.211580" ;# 
+$ns_ at 0.0 "$node_(8) switch OFF" ;# set_X,Y,Z  
+$node_(8) set X_ 0.000000
+$node_(8) set Y_ 0.000000
+$node_(8) set Z_ 0.0
+$ns_ at 0.000000 "$node_(8) setdest 3902.621739 499.753269 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(8) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(8) setdest 3878.703961 752.883083 13.865834" ;# 
+$ns_ at 0.0 "$node_(9) switch OFF" ;# set_X,Y,Z  
+$node_(9) set X_ 0.000000
+$node_(9) set Y_ 0.000000
+$node_(9) set Z_ 0.0
+$ns_ at 0.000000 "$node_(9) setdest 2967.771730 91.554346 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(9) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(9) setdest 2560.000000 10.000000 16.627238" ;# 
+$ns_ at 0.0 "$node_(10) switch OFF" ;# set_X,Y,Z  
+$node_(10) set X_ 0.000000
+$node_(10) set Y_ 0.000000
+$node_(10) set Z_ 0.0
+$ns_ at 0.000000 "$node_(10) setdest 2318.919116 1486.960295 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(10) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(10) setdest 2291.086492 1515.649308 13.727766" ;# 
+$ns_ at 0.0 "$node_(11) switch OFF" ;# set_X,Y,Z  
+$node_(11) set X_ 0.000000
+$node_(11) set Y_ 0.000000
+$node_(11) set Z_ 0.0
+$ns_ at 0.000000 "$node_(11) setdest 1419.066610 2039.915684 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(11) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(11) setdest 1384.989853 2046.091826 15.647451" ;# 
+$ns_ at 0.0 "$node_(12) switch OFF" ;# set_X,Y,Z  
+$node_(12) set X_ 0.000000
+$node_(12) set Y_ 0.000000
+$node_(12) set Z_ 0.0
+$ns_ at 0.000000 "$node_(12) setdest 3124.161401 1857.484928 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(12) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(12) setdest 3111.196216 1922.959110 13.728154" ;# 
+$ns_ at 0.0 "$node_(13) switch OFF" ;# set_X,Y,Z  
+$node_(13) set X_ 0.000000
+$node_(13) set Y_ 0.000000
+$node_(13) set Z_ 0.0
+$ns_ at 0.000000 "$node_(13) setdest 1765.904200 206.177913 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(13) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(13) setdest 1575.313011 560.132979 16.252872" ;# 
+$ns_ at 0.0 "$node_(14) switch OFF" ;# set_X,Y,Z  
+$node_(14) set X_ 0.000000
+$node_(14) set Y_ 0.000000
+$node_(14) set Z_ 0.0
+$ns_ at 0.000000 "$node_(14) setdest 2644.602103 77.681682 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(14) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(14) setdest 2560.000000 10.000000 13.526031" ;# 
+$ns_ at 0.0 "$node_(15) switch OFF" ;# set_X,Y,Z  
+$node_(15) set X_ 0.000000
+$node_(15) set Y_ 0.000000
+$node_(15) set Z_ 0.0
+$ns_ at 0.000000 "$node_(15) setdest 1412.404730 1269.781947 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(15) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(15) setdest 1450.191974 1325.281961 13.601995" ;# 
+$ns_ at 0.0 "$node_(16) switch OFF" ;# set_X,Y,Z  
+$node_(16) set X_ 0.000000
+$node_(16) set Y_ 0.000000
+$node_(16) set Z_ 0.0
+$ns_ at 0.000000 "$node_(16) setdest 3808.631535 1683.901279 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(16) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(16) setdest 3802.025034 2668.269892 12.752087" ;# 
+$ns_ at 0.0 "$node_(17) switch OFF" ;# set_X,Y,Z  
+$node_(17) set X_ 0.000000
+$node_(17) set Y_ 0.000000
+$node_(17) set Z_ 0.0
+$ns_ at 0.000000 "$node_(17) setdest 2168.625696 1641.878129 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(17) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(17) setdest 2077.481811 1735.826441 12.043499" ;# 
+$ns_ at 0.0 "$node_(18) switch OFF" ;# set_X,Y,Z  
+$node_(18) set X_ 0.000000
+$node_(18) set Y_ 0.000000
+$node_(18) set Z_ 0.0
+$ns_ at 0.000000 "$node_(18) setdest 1487.721647 2027.472503 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(18) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(18) setdest 1444.642737 2035.280214 15.606334" ;# 
+$ns_ at 0.0 "$node_(19) switch OFF" ;# set_X,Y,Z  
+$node_(19) set X_ 0.000000
+$node_(19) set Y_ 0.000000
+$node_(19) set Z_ 0.0
+$ns_ at 0.000000 "$node_(19) setdest 2522.490892 1279.382742 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(19) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(19) setdest 2510.000000 1290.000000 16.231244" ;# 
+$ns_ at 0.0 "$node_(20) switch OFF" ;# set_X,Y,Z  
+$node_(20) set X_ 0.000000
+$node_(20) set Y_ 0.000000
+$node_(20) set Z_ 0.0
+$ns_ at 0.000000 "$node_(20) setdest 3808.901377 1643.694814 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(20) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(20) setdest 3805.915125 2088.646417 11.701108" ;# 
+$ns_ at 0.0 "$node_(21) switch OFF" ;# set_X,Y,Z  
+$node_(21) set X_ 0.000000
+$node_(21) set Y_ 0.000000
+$node_(21) set Z_ 0.0
+$ns_ at 0.000000 "$node_(21) setdest 3310.000000 343.829579 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(21) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(21) setdest 3310.000000 417.405846 13.140070" ;# 
+$ns_ at 0.0 "$node_(22) switch OFF" ;# set_X,Y,Z  
+$node_(22) set X_ 0.000000
+$node_(22) set Y_ 0.000000
+$node_(22) set Z_ 0.0
+$ns_ at 0.000000 "$node_(22) setdest 2855.036555 1507.937286 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(22) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(22) setdest 2651.364951 1666.692719 16.038021" ;# 
+$ns_ at 0.0 "$node_(23) switch OFF" ;# set_X,Y,Z  
+$node_(23) set X_ 0.000000
+$node_(23) set Y_ 0.000000
+$node_(23) set Z_ 0.0
+$ns_ at 0.000000 "$node_(23) setdest 1592.382893 1534.124874 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(23) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(23) setdest 1610.000000 1560.000000 15.573683" ;# 
+$ns_ at 0.0 "$node_(24) switch OFF" ;# set_X,Y,Z  
+$node_(24) set X_ 0.000000
+$node_(24) set Y_ 0.000000
+$node_(24) set Z_ 0.0
+$ns_ at 8.316123 "$node_(24) setdest 3917.755102 10.000000 1000000000.000000" ;# init_node
+$ns_ at 8.326123 "$node_(24) switch ON" ;# inside  
+$ns_ at 8.326123 "$node_(24) setdest 3930.000000 210.000000 13.636597" ;# 
+$ns_ at 0.0 "$node_(25) switch OFF" ;# set_X,Y,Z  
+$node_(25) set X_ 0.000000
+$node_(25) set Y_ 0.000000
+$node_(25) set Z_ 0.0
+$ns_ at 0.000000 "$node_(25) setdest 2260.037210 1971.720046 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(25) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(25) setdest 1980.000000 2190.000000 16.131718" ;# 
+$ns_ at 0.0 "$node_(26) switch OFF" ;# set_X,Y,Z  
+$node_(26) set X_ 0.000000
+$node_(26) set Y_ 0.000000
+$node_(26) set Z_ 0.0
+$ns_ at 0.000000 "$node_(26) setdest 3296.991650 876.671168 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(26) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(26) setdest 3290.000000 1020.000000 13.033539" ;# 
+$ns_ at 0.0 "$node_(27) switch OFF" ;# set_X,Y,Z  
+$node_(27) set X_ 0.000000
+$node_(27) set Y_ 0.000000
+$node_(27) set Z_ 0.0
+$ns_ at 0.000000 "$node_(27) setdest 3175.428887 1175.425929 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(27) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(27) setdest 3032.000000 1370.000000 16.104256" ;# 
+$ns_ at 0.0 "$node_(28) switch OFF" ;# set_X,Y,Z  
+$node_(28) set X_ 0.000000
+$node_(28) set Y_ 0.000000
+$node_(28) set Z_ 0.0
+$ns_ at 0.000000 "$node_(28) setdest 2409.695914 1393.390366 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(28) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(28) setdest 2179.032149 1631.151477 13.107394" ;# 
+$ns_ at 0.0 "$node_(29) switch OFF" ;# set_X,Y,Z  
+$node_(29) set X_ 0.000000
+$node_(29) set Y_ 0.000000
+$node_(29) set Z_ 0.0
+$ns_ at 0.000000 "$node_(29) setdest 3452.084028 54.039030 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(29) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(29) setdest 3431.218482 69.599776 13.629680" ;# 
+$ns_ at 0.0 "$node_(30) switch OFF" ;# set_X,Y,Z  
+$node_(30) set X_ 0.000000
+$node_(30) set Y_ 0.000000
+$node_(30) set Z_ 0.0
+$ns_ at 0.000000 "$node_(30) setdest 1115.272435 1128.723407 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(30) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(30) setdest 1049.135457 1143.380791 17.914625" ;# 
+$ns_ at 0.0 "$node_(31) switch OFF" ;# set_X,Y,Z  
+$node_(31) set X_ 0.000000
+$node_(31) set Y_ 0.000000
+$node_(31) set Z_ 0.0
+$ns_ at 0.000000 "$node_(31) setdest 3917.389929 343.456587 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(31) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(31) setdest 3854.700880 1006.915687 13.418520" ;# 
+$ns_ at 0.0 "$node_(32) switch OFF" ;# set_X,Y,Z  
+$node_(32) set X_ 0.000000
+$node_(32) set Y_ 0.000000
+$node_(32) set Z_ 0.0
+$ns_ at 0.000000 "$node_(32) setdest 1916.905265 2069.068425 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(32) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(32) setdest 1860.000000 1960.000000 13.653812" ;# 
+$ns_ at 0.0 "$node_(33) switch OFF" ;# set_X,Y,Z  
+$node_(33) set X_ 0.000000
+$node_(33) set Y_ 0.000000
+$node_(33) set Z_ 0.0
+$ns_ at 25.600909 "$node_(33) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 25.610909 "$node_(33) switch ON" ;# inside  
+$ns_ at 25.610909 "$node_(33) setdest 3310.000000 160.000000 13.629680" ;# 
+$ns_ at 0.0 "$node_(34) switch OFF" ;# set_X,Y,Z  
+$node_(34) set X_ 0.000000
+$node_(34) set Y_ 0.000000
+$node_(34) set Z_ 0.0
+$ns_ at 0.000000 "$node_(34) setdest 3322.430436 150.729845 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(34) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(34) setdest 3310.000000 160.000000 15.352977" ;# 
+$ns_ at 0.0 "$node_(35) switch OFF" ;# set_X,Y,Z  
+$node_(35) set X_ 0.000000
+$node_(35) set Y_ 0.000000
+$node_(35) set Z_ 0.0
+$ns_ at 0.000000 "$node_(35) setdest 1489.808529 718.927017 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(35) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(35) setdest 1290.000000 1090.000000 16.203316" ;# 
+$ns_ at 0.0 "$node_(36) switch OFF" ;# set_X,Y,Z  
+$node_(36) set X_ 0.000000
+$node_(36) set Y_ 0.000000
+$node_(36) set Z_ 0.0
+$ns_ at 0.000000 "$node_(36) setdest 3217.224801 688.858919 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(36) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(36) setdest 2696.443341 1131.523160 13.544152" ;# 
+$ns_ at 0.0 "$node_(37) switch OFF" ;# set_X,Y,Z  
+$node_(37) set X_ 0.000000
+$node_(37) set Y_ 0.000000
+$node_(37) set Z_ 0.0
+$ns_ at 0.000000 "$node_(37) setdest 3310.000000 367.414167 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(37) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(37) setdest 3310.000000 610.000000 13.469508" ;# 
+$ns_ at 0.0 "$node_(38) switch OFF" ;# set_X,Y,Z  
+$node_(38) set X_ 0.000000
+$node_(38) set Y_ 0.000000
+$node_(38) set Z_ 0.0
+$ns_ at 0.000000 "$node_(38) setdest 3304.673333 719.196665 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(38) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(38) setdest 3290.000000 1020.000000 13.682917" ;# 
+$ns_ at 0.0 "$node_(39) switch OFF" ;# set_X,Y,Z  
+$node_(39) set X_ 0.000000
+$node_(39) set Y_ 0.000000
+$node_(39) set Z_ 0.0
+$ns_ at 26.010001 "$node_(39) setdest 2560.000000 10.000000 1000000000.000000" ;# init_node
+$ns_ at 26.020001 "$node_(39) switch ON" ;# inside  
+$ns_ at 26.020001 "$node_(39) setdest 2560.000000 10.000000 16.187162" ;# 
+$ns_ at 0.0 "$node_(40) switch OFF" ;# set_X,Y,Z  
+$node_(40) set X_ 0.000000
+$node_(40) set Y_ 0.000000
+$node_(40) set Z_ 0.0
+$ns_ at 0.000000 "$node_(40) setdest 3447.779989 57.248822 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(40) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(40) setdest 3310.000000 160.000000 13.211017" ;# 
+$ns_ at 0.0 "$node_(41) switch OFF" ;# set_X,Y,Z  
+$node_(41) set X_ 0.000000
+$node_(41) set Y_ 0.000000
+$node_(41) set Z_ 0.0
+$ns_ at 13.039465 "$node_(41) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 13.049465 "$node_(41) switch ON" ;# inside  
+$ns_ at 13.049465 "$node_(41) setdest 3310.000000 160.000000 13.226301" ;# 
+$ns_ at 0.0 "$node_(42) switch OFF" ;# set_X,Y,Z  
+$node_(42) set X_ 0.000000
+$node_(42) set Y_ 0.000000
+$node_(42) set Z_ 0.0
+$ns_ at 4.811641 "$node_(42) setdest 3917.755102 10.000000 1000000000.000000" ;# init_node
+$ns_ at 4.821641 "$node_(42) switch ON" ;# inside  
+$ns_ at 4.821641 "$node_(42) setdest 3930.000000 210.000000 12.370050" ;# 
+$ns_ at 0.0 "$node_(43) switch OFF" ;# set_X,Y,Z  
+$node_(43) set X_ 0.000000
+$node_(43) set Y_ 0.000000
+$node_(43) set Z_ 0.0
+$ns_ at 0.000000 "$node_(43) setdest 3926.546213 153.588154 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(43) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(43) setdest 3930.000000 210.000000 11.280936" ;# 
+$ns_ at 0.0 "$node_(44) switch OFF" ;# set_X,Y,Z  
+$node_(44) set X_ 0.000000
+$node_(44) set Y_ 0.000000
+$node_(44) set Z_ 0.0
+$ns_ at 0.000000 "$node_(44) setdest 3237.376624 671.729869 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(44) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(44) setdest 2887.075383 969.485924 13.635745" ;# 
+$ns_ at 0.0 "$node_(45) switch OFF" ;# set_X,Y,Z  
+$node_(45) set X_ 0.000000
+$node_(45) set Y_ 0.000000
+$node_(45) set Z_ 0.0
+$ns_ at 0.000000 "$node_(45) setdest 2447.488785 1354.434637 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(45) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(45) setdest 2140.491793 1670.877690 12.843287" ;# 
+$ns_ at 0.0 "$node_(46) switch OFF" ;# set_X,Y,Z  
+$node_(46) set X_ 0.000000
+$node_(46) set Y_ 0.000000
+$node_(46) set Z_ 0.0
+$ns_ at 0.000000 "$node_(46) setdest 607.861722 2915.580975 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(46) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(46) setdest 429.306931 3010.000000 16.007155" ;# 
+$ns_ at 12.628238 "$node_(46) switch OFF" ;# leaving_area  
+$ns_ at 0.0 "$node_(47) switch OFF" ;# set_X,Y,Z  
+$node_(47) set X_ 0.000000
+$node_(47) set Y_ 0.000000
+$node_(47) set Z_ 0.0
+$ns_ at 0.000000 "$node_(47) setdest 3247.678772 560.143018 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(47) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(47) setdest 2934.323476 309.458781 13.323892" ;# 
+$ns_ at 0.0 "$node_(48) switch OFF" ;# set_X,Y,Z  
+$node_(48) set X_ 0.000000
+$node_(48) set Y_ 0.000000
+$node_(48) set Z_ 0.0
+$ns_ at 0.000000 "$node_(48) setdest 3230.522293 1783.588111 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(48) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(48) setdest 3432.713282 2204.819337 15.937765" ;# 
+$ns_ at 0.0 "$node_(49) switch OFF" ;# set_X,Y,Z  
+$node_(49) set X_ 0.000000
+$node_(49) set Y_ 0.000000
+$node_(49) set Z_ 0.0
+$ns_ at 0.000000 "$node_(49) setdest 2880.947177 974.694900 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(49) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(49) setdest 2510.000000 1290.000000 12.480033" ;# 
+$ns_ at 0.0 "$node_(50) switch OFF" ;# set_X,Y,Z  
+$node_(50) set X_ 0.000000
+$node_(50) set Y_ 0.000000
+$node_(50) set Z_ 0.0
+$ns_ at 0.000000 "$node_(50) setdest 3263.335772 649.664594 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(50) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(50) setdest 2799.701274 1043.753917 12.273351" ;# 
+$ns_ at 0.0 "$node_(51) switch OFF" ;# set_X,Y,Z  
+$node_(51) set X_ 0.000000
+$node_(51) set Y_ 0.000000
+$node_(51) set Z_ 0.0
+$ns_ at 0.000000 "$node_(51) setdest 474.355810 2204.848463 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(51) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(51) setdest 682.726230 2169.279179 15.059437" ;# 
+$ns_ at 0.0 "$node_(52) switch OFF" ;# set_X,Y,Z  
+$node_(52) set X_ 0.000000
+$node_(52) set Y_ 0.000000
+$node_(52) set Z_ 0.0
+$ns_ at 0.000000 "$node_(52) setdest 2947.761957 2261.550302 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(52) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(52) setdest 2789.626910 2518.979448 9.937942" ;# 
+$ns_ at 0.0 "$node_(53) switch OFF" ;# set_X,Y,Z  
+$node_(53) set X_ 0.000000
+$node_(53) set Y_ 0.000000
+$node_(53) set Z_ 0.0
+$ns_ at 0.000000 "$node_(53) setdest 2192.087846 1617.694066 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(53) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(53) setdest 2038.935574 1775.558716 13.528813" ;# 
+$ns_ at 0.0 "$node_(54) switch OFF" ;# set_X,Y,Z  
+$node_(54) set X_ 0.000000
+$node_(54) set Y_ 0.000000
+$node_(54) set Z_ 0.0
+$ns_ at 0.000000 "$node_(54) setdest 3199.841733 2703.083238 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(54) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(54) setdest 3161.675427 2757.606532 17.588560" ;# 
+$ns_ at 0.0 "$node_(55) switch OFF" ;# set_X,Y,Z  
+$node_(55) set X_ 0.000000
+$node_(55) set Y_ 0.000000
+$node_(55) set Z_ 0.0
+$ns_ at 0.000000 "$node_(55) setdest 3295.830375 900.477312 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(55) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(55) setdest 3290.000000 1020.000000 14.939426" ;# 
+$ns_ at 0.0 "$node_(56) switch OFF" ;# set_X,Y,Z  
+$node_(56) set X_ 0.000000
+$node_(56) set Y_ 0.000000
+$node_(56) set Z_ 0.0
+$ns_ at 27.328226 "$node_(56) setdest 3511.136363 10.000000 1000000000.000000" ;# init_node
+$ns_ at 27.338226 "$node_(56) switch ON" ;# inside  
+$ns_ at 27.338226 "$node_(56) setdest 3310.000000 160.000000 13.430737" ;# 
+$ns_ at 0.0 "$node_(57) switch OFF" ;# set_X,Y,Z  
+$node_(57) set X_ 0.000000
+$node_(57) set Y_ 0.000000
+$node_(57) set Z_ 0.0
+$ns_ at 34.730846 "$node_(57) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 34.740846 "$node_(57) switch ON" ;# inside  
+$ns_ at 34.740846 "$node_(57) setdest 3479.270091 33.764678 13.210281" ;# 
+$ns_ at 0.0 "$node_(58) switch OFF" ;# set_X,Y,Z  
+$node_(58) set X_ 0.000000
+$node_(58) set Y_ 0.000000
+$node_(58) set Z_ 0.0
+$ns_ at 0.000000 "$node_(58) setdest 2502.168218 1298.072760 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(58) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(58) setdest 2113.048299 1699.165600 11.361111" ;# 
+$ns_ at 0.0 "$node_(59) switch OFF" ;# set_X,Y,Z  
+$node_(59) set X_ 0.000000
+$node_(59) set Y_ 0.000000
+$node_(59) set Z_ 0.0
+$ns_ at 0.000000 "$node_(59) setdest 3180.760450 2438.422024 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(59) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(59) setdest 3230.000000 2660.000000 12.603172" ;# 
+$ns_ at 0.0 "$node_(60) switch OFF" ;# set_X,Y,Z  
+$node_(60) set X_ 0.000000
+$node_(60) set Y_ 0.000000
+$node_(60) set Z_ 0.0
+$ns_ at 0.000000 "$node_(60) setdest 3298.426977 847.246971 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(60) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(60) setdest 3290.000000 1020.000000 13.294269" ;# 
+$ns_ at 0.0 "$node_(61) switch OFF" ;# set_X,Y,Z  
+$node_(61) set X_ 0.000000
+$node_(61) set Y_ 0.000000
+$node_(61) set Z_ 0.0
+$ns_ at 0.000000 "$node_(61) setdest 1517.875494 666.802655 1000000000.000000" ;# init_node
+$ns_ at 0.010000 "$node_(61) switch ON" ;# inside  
+$ns_ at 0.010000 "$node_(61) setdest 1417.806992 852.644157 17.696076" ;# 
+$ns_ at 0.076824 "$node_(3) setdest 1860.000000 1960.000000 15.198613" ;# 
+$ns_ at 1.919728 "$node_(29) setdest 3310.000000 160.000000 14.971426" ;# 
+$ns_ at 2.020000 "$node_(34) setdest 3060.137172 110.027434 18.021479" ;# 
+$ns_ at 2.020000 "$node_(19) setdest 2050.787795 1763.341811 11.429272" ;# 
+$ns_ at 2.223263 "$node_(11) setdest 1178.615011 2083.495632 17.638126" ;# 
+$ns_ at 2.649143 "$node_(5) setdest 655.054915 2890.625411 16.620014" ;# 
+$ns_ at 2.815319 "$node_(18) setdest 1272.682302 2066.446680 18.024390" ;# 
+$ns_ at 2.921721 "$node_(10) setdest 2125.369766 1686.465011 15.334893" ;# 
+$ns_ at 3.020000 "$node_(23) setdest 1727.986402 1748.778243 13.637945" ;# 
+$ns_ at 3.791364 "$node_(30) setdest 400.780217 1287.070330 16.187840" ;# 
+$ns_ at 3.793946 "$node_(54) setdest 3090.000000 2860.000000 15.194059" ;# 
+$ns_ at 4.871944 "$node_(12) setdest 3090.000000 2030.000000 15.265594" ;# 
+$ns_ at 4.946232 "$node_(15) setdest 1565.819542 1495.109953 13.868165" ;# 
+$ns_ at 5.609381 "$node_(21) setdest 3310.000000 520.726879 13.636364" ;# 
+$ns_ at 6.020000 "$node_(2) setdest 986.595609 2117.408013 17.746939" ;# 
+$ns_ at 6.020000 "$node_(43) setdest 4184.308366 276.189849 10.624238" ;# 
+$ns_ at 0.0 "$node_(62) switch OFF" ;# set_X,Y,Z  
+$node_(62) set X_ 0.000000
+$node_(62) set Y_ 0.000000
+$node_(62) set Z_ 0.0
+$ns_ at 21.663345 "$node_(62) setdest 1871.538462 10.000000 1000000000.000000" ;# init_node
+$ns_ at 21.673345 "$node_(62) switch ON" ;# inside  
+$ns_ at 21.673345 "$node_(62) setdest 1624.591870 468.615099 15.962482" ;# 
+$ns_ at 7.020000 "$node_(0) setdest 1144.244259 860.324287 13.686075" ;# 
+$ns_ at 8.020000 "$node_(1) setdest 3310.000000 406.390980 13.636364" ;# 
+$ns_ at 9.020000 "$node_(14) setdest 2560.000000 10.000000 12.232374" ;# 
+$ns_ at 9.020000 "$node_(14) switch OFF" ;# leaving_area  
+$ns_ at 9.020000 "$node_(55) setdest 3267.610092 1133.069036 15.548435" ;# 
+#$ns_ at 10.020000 $node_(32) arrived_to 1860.000000 1960.000000  
+$ns_ at 10.020000 "$node_(32) switch OFF" ;# arrived_to  
+$ns_ at 11.020000 "$node_(32) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 11.030000 "$node_(32) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 10.844793 "$node_(2) setdest 245.000000 2244.000000 16.292787" ;# 
+$ns_ at 10.878517 "$node_(17) setdest 1944.619748 1872.776568 14.878609" ;# 
+$ns_ at 11.937533 "$node_(61) setdest 1290.000000 1090.000000 15.780990" ;# 
+$ns_ at 12.020000 "$node_(26) setdest 3184.747598 1551.524630 13.728154" ;# 
+$ns_ at 12.511178 "$node_(18) setdest 1071.000000 2103.000000 15.172901" ;# 
+$ns_ at 13.020000 "$node_(54) setdest 2856.135371 2789.296740 15.963316" ;# 
+$ns_ at 13.020000 "$node_(12) setdest 2660.000000 2730.000000 10.953640" ;# 
+$ns_ at 13.020000 "$node_(29) setdest 3310.000000 610.000000 13.636364" ;# 
+$ns_ at 13.186257 "$node_(21) setdest 3310.000000 610.000000 15.302890" ;# 
+$ns_ at 0.0 "$node_(63) switch OFF" ;# set_X,Y,Z  
+$node_(63) set X_ 0.000000
+$node_(63) set Y_ 0.000000
+$node_(63) set Z_ 0.0
+$ns_ at 40.472571 "$node_(63) setdest 3511.136363 10.000000 1000000000.000000" ;# init_node
+$ns_ at 40.482571 "$node_(63) switch ON" ;# inside  
+$ns_ at 40.482571 "$node_(63) setdest 3506.004290 13.827309 13.160959" ;# 
+$ns_ at 14.020000 "$node_(60) setdest 3095.122467 1284.368746 15.380819" ;# 
+$ns_ at 14.020000 "$node_(40) setdest 3310.000000 610.000000 13.636364" ;# 
+$ns_ at 14.046680 "$node_(51) setdest 809.510897 2147.636760 17.612676" ;# 
+$ns_ at 14.114380 "$node_(11) setdest 1071.000000 2103.000000 18.519346" ;# 
+$ns_ at 15.020000 "$node_(7) setdest 3806.412901 2014.477749 13.272601" ;# 
+$ns_ at 0.0 "$node_(64) switch OFF" ;# set_X,Y,Z  
+$node_(64) set X_ 0.000000
+$node_(64) set Y_ 0.000000
+$node_(64) set Z_ 0.0
+$ns_ at 19.911426 "$node_(64) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 19.921426 "$node_(64) switch ON" ;# inside  
+$ns_ at 19.921426 "$node_(64) setdest 3362.802632 120.621766 13.629680" ;# 
+$ns_ at 16.020000 "$node_(27) setdest 2490.547415 1792.044791 15.855134" ;# 
+$ns_ at 0.0 "$node_(65) switch OFF" ;# set_X,Y,Z  
+$node_(65) set X_ 0.000000
+$node_(65) set Y_ 0.000000
+$node_(65) set Z_ 0.0
+$ns_ at 51.600909 "$node_(65) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 51.610909 "$node_(65) switch ON" ;# inside  
+$ns_ at 51.610909 "$node_(65) setdest 3310.000000 160.000000 13.629680" ;# 
+$ns_ at 16.111438 "$node_(22) setdest 2371.972360 1884.470213 14.981457" ;# 
+$ns_ at 16.159300 "$node_(34) setdest 2560.000000 10.000000 16.008495" ;# 
+$ns_ at 16.267702 "$node_(53) setdest 1860.000000 1960.000000 15.339731" ;# 
+$ns_ at 16.433257 "$node_(55) setdest 3195.265097 1498.411260 13.248144" ;# 
+$ns_ at 18.020000 "$node_(4) setdest 675.293496 2170.547962 18.050376" ;# 
+$ns_ at 18.346962 "$node_(8) setdest 3850.356305 1052.895768 15.199614" ;# 
+$ns_ at 18.441338 "$node_(10) setdest 1860.000000 1960.000000 12.884523" ;# 
+$ns_ at 19.020000 "$node_(37) setdest 3019.273244 857.117743 12.352381" ;# 
+$ns_ at 19.020000 "$node_(59) setdest 3090.000000 2860.000000 16.275407" ;# 
+$ns_ at 19.343302 "$node_(23) setdest 1822.317642 1899.708228 13.873502" ;# 
+$ns_ at 19.761014 "$node_(15) setdest 1610.000000 1560.000000 14.927294" ;# 
+$ns_ at 20.020000 "$node_(21) setdest 3044.211745 835.920017 10.938056" ;# 
+$ns_ at 0.0 "$node_(66) switch OFF" ;# set_X,Y,Z  
+$node_(66) set X_ 0.000000
+$node_(66) set Y_ 0.000000
+$node_(66) set Z_ 0.0
+$ns_ at 35.071538 "$node_(66) setdest 1871.538462 10.000000 1000000000.000000" ;# init_node
+$ns_ at 35.081538 "$node_(66) switch ON" ;# inside  
+$ns_ at 35.081538 "$node_(66) setdest 1740.185930 253.940416 16.589689" ;# 
+$ns_ at 0.0 "$node_(67) switch OFF" ;# set_X,Y,Z  
+$node_(67) set X_ 0.000000
+$node_(67) set Y_ 0.000000
+$node_(67) set Z_ 0.0
+$ns_ at 55.600909 "$node_(67) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 55.610909 "$node_(67) switch ON" ;# inside  
+$ns_ at 55.610909 "$node_(67) setdest 3310.000000 160.000000 13.629680" ;# 
+$ns_ at 21.020000 "$node_(11) setdest 622.932312 2179.486131 16.430355" ;# 
+$ns_ at 21.349295 "$node_(51) setdest 1071.000000 2103.000000 15.912438" ;# 
+#$ns_ at 22.020000 $node_(42) arrived_to 3930.000000 210.000000  
+$ns_ at 22.020000 "$node_(42) switch OFF" ;# arrived_to  
+$ns_ at 23.020000 "$node_(42) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 23.030000 "$node_(42) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+#$ns_ at 23.020000 $node_(25) arrived_to 1980.000000 2190.000000  
+$ns_ at 23.020000 "$node_(25) switch OFF" ;# arrived_to  
+$ns_ at 24.020000 "$node_(25) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 24.030000 "$node_(25) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 23.020000 "$node_(38) setdest 3213.718018 1405.224010 13.728154" ;# 
+$ns_ at 23.702829 "$node_(17) setdest 1860.000000 1960.000000 14.611387" ;# 
+$ns_ at 24.020000 "$node_(24) setdest 3886.630839 668.990288 13.427965" ;# 
+$ns_ at 24.744488 "$node_(13) setdest 1485.096514 727.677903 19.049920" ;# 
+$ns_ at 25.283097 "$node_(28) setdest 1999.747898 1815.952167 13.727766" ;# 
+$ns_ at 26.020000 "$node_(15) setdest 1319.230885 1852.926956 15.221304" ;# 
+#$ns_ at 26.020000 $node_(9) arrived_to 2560.000000 10.000000  
+$ns_ at 26.020000 "$node_(9) switch OFF" ;# arrived_to  
+$ns_ at 27.020000 "$node_(9) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 27.030000 "$node_(9) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 26.088671 "$node_(1) setdest 3310.000000 501.409247 15.578368" ;# 
+$ns_ at 26.895783 "$node_(0) setdest 1111.751489 809.123558 14.424040" ;# 
+$ns_ at 27.020000 "$node_(18) setdest 793.293376 2150.405126 16.430355" ;# 
+$ns_ at 27.020000 "$node_(35) setdest 1218.992860 978.109962 14.247854" ;# 
+$ns_ at 27.020000 "$node_(39) setdest 2945.432575 318.346060 13.527727" ;# 
+$ns_ at 0.0 "$node_(68) switch OFF" ;# set_X,Y,Z  
+$node_(68) set X_ 0.000000
+$node_(68) set Y_ 0.000000
+$node_(68) set Z_ 0.0
+$ns_ at 43.372761 "$node_(68) setdest 1871.538462 10.000000 1000000000.000000" ;# init_node
+$ns_ at 43.382761 "$node_(68) switch ON" ;# inside  
+$ns_ at 43.382761 "$node_(68) setdest 1626.443588 465.176194 16.264410" ;# 
+#$ns_ at 28.020000 $node_(3) arrived_to 1860.000000 1960.000000  
+$ns_ at 28.020000 "$node_(3) switch OFF" ;# arrived_to  
+$ns_ at 29.020000 "$node_(3) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 29.030000 "$node_(3) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 28.325008 "$node_(54) setdest 2728.508244 2750.711795 16.637835" ;# 
+$ns_ at 0.0 "$node_(69) switch OFF" ;# set_X,Y,Z  
+$node_(69) set X_ 0.000000
+$node_(69) set Y_ 0.000000
+$node_(69) set Z_ 0.0
+$ns_ at 29.354827 "$node_(69) setdest 3511.136363 10.000000 1000000000.000000" ;# init_node
+$ns_ at 29.364827 "$node_(69) switch ON" ;# inside  
+$ns_ at 29.364827 "$node_(69) setdest 3310.000000 160.000000 12.765598" ;# 
+$ns_ at 29.326782 "$node_(48) setdest 3579.061480 2509.711417 18.214880" ;# 
+$ns_ at 30.020000 "$node_(61) setdest 1344.994298 1170.772875 16.003152" ;# 
+$ns_ at 30.128119 "$node_(47) setdest 2671.108075 98.886460 13.527727" ;# 
+$ns_ at 30.410654 "$node_(52) setdest 2760.657979 2566.138174 11.977805" ;# 
+$ns_ at 30.754101 "$node_(43) setdest 4346.804596 318.483388 11.379102" ;# 
+$ns_ at 31.099924 "$node_(0) setdest 960.000000 570.000000 13.537772" ;# 
+$ns_ at 32.172350 "$node_(23) setdest 1860.000000 1960.000000 14.666683" ;# 
+$ns_ at 32.188044 "$node_(1) setdest 3310.000000 610.000000 12.295211" ;# 
+$ns_ at 33.020000 "$node_(41) setdest 3310.000000 368.122809 14.621366" ;# 
+#$ns_ at 33.020000 $node_(17) arrived_to 1860.000000 1960.000000  
+$ns_ at 33.020000 "$node_(17) switch OFF" ;# arrived_to  
+$ns_ at 34.020000 "$node_(17) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 34.030000 "$node_(17) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 33.497734 "$node_(64) setdest 3310.000000 160.000000 14.565550" ;# 
+$ns_ at 33.726495 "$node_(44) setdest 2825.150685 1022.121917 15.219462" ;# 
+$ns_ at 34.020000 "$node_(53) setdest 1444.491111 2035.307695 15.517953" ;# 
+$ns_ at 34.338383 "$node_(45) setdest 1983.675546 1832.519053 13.147719" ;# 
+$ns_ at 34.733511 "$node_(13) setdest 1290.000000 1090.000000 15.654787" ;# 
+#$ns_ at 35.020000 $node_(59) arrived_to 3090.000000 2860.000000  
+$ns_ at 35.020000 "$node_(59) switch OFF" ;# arrived_to  
+$ns_ at 36.020000 "$node_(59) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 36.030000 "$node_(59) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 35.031340 "$node_(52) setdest 2660.000000 2730.000000 10.690566" ;# 
+$ns_ at 35.373400 "$node_(60) setdest 3032.000000 1370.000000 18.840035" ;# 
+$ns_ at 36.126115 "$node_(61) setdest 1610.000000 1560.000000 13.494562" ;# 
+$ns_ at 36.321008 "$node_(35) setdest 960.000000 570.000000 13.170769" ;# 
+$ns_ at 36.338804 "$node_(54) setdest 2660.000000 2730.000000 19.442226" ;# 
+$ns_ at 37.750015 "$node_(57) setdest 3310.000000 160.000000 14.797356" ;# 
+$ns_ at 38.020000 "$node_(23) setdest 1980.000000 2190.000000 13.653812" ;# 
+$ns_ at 38.037306 "$node_(20) setdest 3802.957225 2529.373416 12.845117" ;# 
+$ns_ at 38.173057 "$node_(8) setdest 3810.000000 1480.000000 13.060778" ;# 
+$ns_ at 39.020000 "$node_(51) setdest 1437.648683 2036.547831 15.741164" ;# 
+$ns_ at 39.020000 "$node_(64) setdest 3310.000000 610.000000 13.636364" ;# 
+$ns_ at 39.066531 "$node_(44) setdest 2510.000000 1290.000000 13.362525" ;# 
+$ns_ at 0.0 "$node_(70) switch OFF" ;# set_X,Y,Z  
+$node_(70) set X_ 0.000000
+$node_(70) set Y_ 0.000000
+$node_(70) set Z_ 0.0
+$ns_ at 40.803139 "$node_(70) setdest 3917.755102 10.000000 1000000000.000000" ;# init_node
+$ns_ at 40.813139 "$node_(70) switch ON" ;# inside  
+$ns_ at 40.813139 "$node_(70) setdest 3921.897255 77.655162 14.231013" ;# 
+$ns_ at 39.756789 "$node_(22) setdest 2132.313140 2071.276830 18.619493" ;# 
+$ns_ at 40.020000 "$node_(49) setdest 2411.643775 1391.382570 14.280623" ;# 
+$ns_ at 40.259448 "$node_(4) setdest 245.000000 2244.000000 15.177654" ;# 
+$ns_ at 40.969015 "$node_(63) setdest 3379.387957 108.253049 14.844106" ;# 
+#$ns_ at 41.020000 $node_(54) arrived_to 2660.000000 2730.000000  
+$ns_ at 41.020000 "$node_(54) switch OFF" ;# arrived_to  
+$ns_ at 42.020000 "$node_(54) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 42.030000 "$node_(54) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 42.020000 "$node_(60) setdest 2648.452720 1668.962709 15.306413" ;# 
+$ns_ at 42.020000 "$node_(1) setdest 2860.842523 991.783855 12.842619" ;# 
+$ns_ at 44.020000 "$node_(6) setdest 2560.000000 10.000000 15.881382" ;# 
+$ns_ at 44.020000 "$node_(6) switch OFF" ;# leaving_area  
+$ns_ at 44.038988 "$node_(28) setdest 1860.000000 1960.000000 15.460807" ;# 
+$ns_ at 44.166535 "$node_(18) setdest 705.713161 2165.355259 18.400794" ;# 
+$ns_ at 44.199506 "$node_(5) setdest 443.743582 3002.365959 18.819432" ;# 
+$ns_ at 44.545590 "$node_(55) setdest 3177.366049 1588.801450 14.749930" ;# 
+$ns_ at 0.0 "$node_(71) switch OFF" ;# set_X,Y,Z  
+$node_(71) set X_ 0.000000
+$node_(71) set Y_ 0.000000
+$node_(71) set Z_ 0.0
+$ns_ at 48.463739 "$node_(71) setdest 1871.538462 10.000000 1000000000.000000" ;# init_node
+$ns_ at 48.473739 "$node_(71) switch ON" ;# inside  
+$ns_ at 48.473739 "$node_(71) setdest 1290.000000 1090.000000 16.454428" ;# 
+$ns_ at 44.815166 "$node_(30) setdest 10.000000 1373.675675 19.086673" ;# 
+$ns_ at 65.785924 "$node_(30) switch OFF" ;# leaving_area  
+$ns_ at 45.020000 "$node_(33) setdest 3310.000000 435.072554 13.066308" ;# 
+$ns_ at 45.510099 "$node_(43) setdest 4660.000000 400.000000 10.270737" ;# 
+$ns_ at 45.576106 "$node_(70) setdest 3930.000000 210.000000 12.695710" ;# 
+$ns_ at 0.0 "$node_(72) switch OFF" ;# set_X,Y,Z  
+$node_(72) set X_ 0.000000
+$node_(72) set Y_ 0.000000
+$node_(72) set Z_ 0.0
+$ns_ at 67.289997 "$node_(72) setdest 10.000000 518.541114 1000000000.000000" ;# init_node
+$ns_ at 67.299997 "$node_(72) switch ON" ;# inside  
+$ns_ at 67.299997 "$node_(72) setdest 100.000000 470.000000 13.245560" ;# 
+$ns_ at 47.020000 "$node_(56) setdest 3100.811579 118.162316 14.610681" ;# 
+$ns_ at 47.020000 "$node_(29) setdest 2871.215338 982.966963 12.885176" ;# 
+$ns_ at 47.254156 "$node_(41) setdest 3310.000000 610.000000 12.889226" ;# 
+$ns_ at 0.0 "$node_(73) switch OFF" ;# set_X,Y,Z  
+$node_(73) set X_ 0.000000
+$node_(73) set Y_ 0.000000
+$node_(73) set Z_ 0.0
+$ns_ at 50.986223 "$node_(73) setdest 3511.136363 10.000000 1000000000.000000" ;# init_node
+$ns_ at 50.996223 "$node_(73) switch ON" ;# inside  
+$ns_ at 50.996223 "$node_(73) setdest 3310.000000 160.000000 14.738798" ;# 
+$ns_ at 47.893835 "$node_(48) setdest 3800.000000 2970.000000 15.892582" ;# 
+#$ns_ at 48.020000 $node_(40) arrived_to 3310.000000 610.000000  
+$ns_ at 48.020000 "$node_(40) switch OFF" ;# arrived_to  
+$ns_ at 49.020000 "$node_(40) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 49.030000 "$node_(40) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 48.685196 "$node_(11) setdest 494.489546 2201.411591 17.638474" ;# 
+$ns_ at 48.994971 "$node_(18) setdest 245.000000 2244.000000 16.102564" ;# 
+$ns_ at 49.020000 "$node_(34) setdest 2560.000000 10.000000 14.572952" ;# 
+$ns_ at 49.020000 "$node_(34) switch OFF" ;# leaving_area  
+$ns_ at 49.020000 "$node_(10) setdest 1071.000000 2103.000000 16.364369" ;# 
+$ns_ at 49.197879 "$node_(58) setdest 1860.000000 1960.000000 14.073656" ;# 
+$ns_ at 49.588366 "$node_(50) setdest 2510.000000 1290.000000 13.372981" ;# 
+$ns_ at 49.673763 "$node_(31) setdest 3810.000000 1480.000000 14.690782" ;# 
+$ns_ at 49.909718 "$node_(37) setdest 2895.038572 962.717214 13.832905" ;# 
+$ns_ at 49.911226 "$node_(49) setdest 2167.765222 1642.765079 12.740107" ;# 
+$ns_ at 50.020000 "$node_(69) setdest 3310.000000 394.728837 13.636364" ;# 
+$ns_ at 50.474190 "$node_(36) setdest 2510.000000 1290.000000 14.788989" ;# 
+$ns_ at 50.792760 "$node_(55) setdest 3090.000000 2030.000000 13.536046" ;# 
+$ns_ at 0.0 "$node_(74) switch OFF" ;# set_X,Y,Z  
+$node_(74) set X_ 0.000000
+$node_(74) set Y_ 0.000000
+$node_(74) set Z_ 0.0
+$ns_ at 66.494791 "$node_(74) setdest 1871.538462 10.000000 1000000000.000000" ;# init_node
+$ns_ at 66.504791 "$node_(74) switch ON" ;# inside  
+$ns_ at 66.504791 "$node_(74) setdest 1473.664290 748.909176 16.136236" ;# 
+$ns_ at 51.467543 "$node_(45) setdest 1860.000000 1960.000000 14.149804" ;# 
+$ns_ at 51.489652 "$node_(26) setdest 3150.170530 1726.138824 15.687276" ;# 
+$ns_ at 51.609540 "$node_(63) setdest 3310.000000 160.000000 15.998430" ;# 
+$ns_ at 51.625744 "$node_(38) setdest 3166.147644 1645.454398 15.199707" ;# 
+$ns_ at 51.782074 "$node_(66) setdest 1604.241888 506.407922 17.882141" ;# 
+$ns_ at 51.911523 "$node_(21) setdest 2745.055228 1090.203056 11.797218" ;# 
+#$ns_ at 53.020000 $node_(0) arrived_to 960.000000 570.000000  
+$ns_ at 53.020000 "$node_(0) switch OFF" ;# arrived_to  
+$ns_ at 54.020000 "$node_(0) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 54.030000 "$node_(0) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 53.020000 "$node_(57) setdest 3310.000000 610.000000 13.636364" ;# 
+$ns_ at 53.135829 "$node_(15) setdest 1071.000000 2103.000000 18.658828" ;# 
+$ns_ at 54.020000 "$node_(52) setdest 2682.314562 2813.307698 18.212495" ;# 
+$ns_ at 54.304528 "$node_(62) setdest 1421.963170 844.925541 16.589689" ;# 
+$ns_ at 0.0 "$node_(75) switch OFF" ;# set_X,Y,Z  
+$node_(75) set X_ 0.000000
+$node_(75) set Y_ 0.000000
+$node_(75) set Z_ 0.0
+$ns_ at 89.010001 "$node_(75) setdest 2560.000000 10.000000 1000000000.000000" ;# init_node
+$ns_ at 89.020001 "$node_(75) switch ON" ;# inside  
+$ns_ at 89.020001 "$node_(75) setdest 2560.000000 10.000000 16.187162" ;# 
+$ns_ at 55.045844 "$node_(47) setdest 2560.000000 10.000000 14.265643" ;# 
+$ns_ at 55.290162 "$node_(7) setdest 3803.495480 2449.173521 12.392857" ;# 
+$ns_ at 56.072495 "$node_(11) setdest 245.000000 2244.000000 15.870723" ;# 
+$ns_ at 56.076454 "$node_(22) setdest 1980.000000 2190.000000 17.646729" ;# 
+$ns_ at 56.901083 "$node_(5) setdest 429.306930 3010.000000 15.589882" ;# 
+$ns_ at 57.948609 "$node_(5) switch OFF" ;# leaving_area  
+#$ns_ at 57.020000 $node_(70) arrived_to 3930.000000 210.000000  
+$ns_ at 57.020000 "$node_(70) switch OFF" ;# arrived_to  
+$ns_ at 58.020000 "$node_(70) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 58.030000 "$node_(70) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 0.0 "$node_(76) switch OFF" ;# set_X,Y,Z  
+$node_(76) set X_ 0.000000
+$node_(76) set Y_ 0.000000
+$node_(76) set Z_ 0.0
+$ns_ at 68.010000 "$node_(76) setdest 3838.461538 3010.000000 1000000000.000000" ;# init_node
+$ns_ at 68.020000 "$node_(76) switch ON" ;# inside  
+$ns_ at 68.020000 "$node_(76) setdest 3800.000000 2970.000000 27.745675" ;# 
+$ns_ at 58.020000 "$node_(2) setdest 10.000000 2297.153203 27.467800" ;# 
+$ns_ at 66.791588 "$node_(2) switch OFF" ;# leaving_area  
+$ns_ at 58.020000 "$node_(28) setdest 1749.929190 1783.886705 13.873502" ;# 
+$ns_ at 58.020000 "$node_(63) setdest 3310.000000 327.330076 13.636364" ;# 
+$ns_ at 58.020000 "$node_(23) setdest 2196.975090 2362.303748 14.877269" ;# 
+$ns_ at 58.353920 "$node_(24) setdest 3860.098415 949.791769 15.165341" ;# 
+$ns_ at 58.755457 "$node_(52) setdest 2735.000000 3010.000000 16.082464" ;# 
+$ns_ at 71.416836 "$node_(52) switch OFF" ;# leaving_area  
+$ns_ at 0.0 "$node_(77) switch OFF" ;# set_X,Y,Z  
+$node_(77) set X_ 0.000000
+$node_(77) set Y_ 0.000000
+$node_(77) set Z_ 0.0
+$ns_ at 86.590419 "$node_(77) setdest 3511.136363 10.000000 1000000000.000000" ;# init_node
+$ns_ at 86.600419 "$node_(77) switch ON" ;# inside  
+$ns_ at 86.600419 "$node_(77) setdest 3507.896464 12.416196 13.163994" ;# 
+$ns_ at 59.318759 "$node_(27) setdest 2209.659280 2010.988013 16.467044" ;# 
+$ns_ at 59.721921 "$node_(19) setdest 1860.000000 1960.000000 13.498673" ;# 
+$ns_ at 0.0 "$node_(78) switch OFF" ;# set_X,Y,Z  
+$node_(78) set X_ 0.000000
+$node_(78) set Y_ 0.000000
+$node_(78) set Z_ 0.0
+$ns_ at 76.468432 "$node_(78) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 76.478432 "$node_(78) switch ON" ;# inside  
+$ns_ at 76.478432 "$node_(78) setdest 3310.000000 160.000000 12.839810" ;# 
+$ns_ at 61.232236 "$node_(53) setdest 1071.000000 2103.000000 17.421516" ;# 
+$ns_ at 61.621042 "$node_(56) setdest 2898.815759 77.763152 19.400182" ;# 
+$ns_ at 61.696874 "$node_(37) setdest 2510.000000 1290.000000 11.940049" ;# 
+$ns_ at 62.020000 "$node_(13) setdest 1100.568594 791.502028 13.103689" ;# 
+$ns_ at 62.691820 "$node_(51) setdest 1742.898093 1981.223793 16.364369" ;# 
+$ns_ at 62.836730 "$node_(26) setdest 3090.000000 2030.000000 12.808911" ;# 
+$ns_ at 63.507618 "$node_(39) setdest 3058.719372 408.975498 14.499594" ;# 
+$ns_ at 0.0 "$node_(79) switch OFF" ;# set_X,Y,Z  
+$node_(79) set X_ 0.000000
+$node_(79) set Y_ 0.000000
+$node_(79) set Z_ 0.0
+$ns_ at 73.701755 "$node_(79) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 73.711755 "$node_(79) switch ON" ;# inside  
+$ns_ at 73.711755 "$node_(79) setdest 3310.000000 160.000000 12.355081" ;# 
+$ns_ at 65.020000 "$node_(45) setdest 1433.581205 2037.285029 16.364369" ;# 
+#$ns_ at 66.020000 $node_(47) arrived_to 2560.000000 10.000000  
+$ns_ at 66.020000 "$node_(47) switch OFF" ;# arrived_to  
+$ns_ at 67.020000 "$node_(47) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 67.030000 "$node_(47) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 66.072048 "$node_(33) setdest 3310.000000 610.000000 14.640790" ;# 
+$ns_ at 67.020000 "$node_(41) setdest 3303.787354 737.359240 13.682917" ;# 
+$ns_ at 67.233448 "$node_(69) setdest 3310.000000 480.277751 15.860949" ;# 
+$ns_ at 67.737571 "$node_(38) setdest 3090.000000 2030.000000 12.945212" ;# 
+$ns_ at 67.817144 "$node_(66) setdest 1290.000000 1090.000000 16.086701" ;# 
+#$ns_ at 68.020000 $node_(22) arrived_to 1980.000000 2190.000000  
+$ns_ at 68.020000 "$node_(22) switch OFF" ;# arrived_to  
+$ns_ at 69.020000 "$node_(22) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 69.030000 "$node_(22) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 68.020000 "$node_(36) setdest 2035.070740 1779.542468 13.169265" ;# 
+$ns_ at 69.020000 "$node_(73) setdest 3310.000000 610.000000 13.636364" ;# 
+$ns_ at 70.020000 "$node_(4) setdest 10.000000 2297.153203 26.882564" ;# 
+$ns_ at 78.982546 "$node_(4) switch OFF" ;# leaving_area  
+$ns_ at 70.290872 "$node_(63) setdest 3310.000000 393.291200 15.612614" ;# 
+$ns_ at 71.020000 "$node_(76) setdest 3682.872943 2725.985298 18.171700" ;# 
+$ns_ at 71.020000 "$node_(65) setdest 3310.000000 249.628909 15.700741" ;# 
+$ns_ at 71.020000 "$node_(44) setdest 1860.000000 1960.000000 13.727766" ;# 
+$ns_ at 0.0 "$node_(80) switch OFF" ;# set_X,Y,Z  
+$node_(80) set X_ 0.000000
+$node_(80) set Y_ 0.000000
+$node_(80) set Z_ 0.0
+$ns_ at 77.881324 "$node_(80) setdest 3511.136363 10.000000 1000000000.000000" ;# init_node
+$ns_ at 77.891324 "$node_(80) switch ON" ;# inside  
+$ns_ at 77.891324 "$node_(80) setdest 3310.000000 160.000000 14.648535" ;# 
+$ns_ at 72.020000 "$node_(8) setdest 3803.933314 2383.936182 12.715764" ;# 
+$ns_ at 72.020000 "$node_(61) setdest 1071.000000 2103.000000 16.632495" ;# 
+$ns_ at 72.239299 "$node_(56) setdest 2849.588535 67.917707 19.419495" ;# 
+$ns_ at 72.348937 "$node_(20) setdest 3800.000000 2970.000000 14.850716" ;# 
+$ns_ at 72.627130 "$node_(69) setdest 3310.000000 610.000000 12.481851" ;# 
+$ns_ at 72.989630 "$node_(28) setdest 1710.732502 1721.172003 15.240545" ;# 
+#$ns_ at 73.020000 $node_(15) arrived_to 1071.000000 2103.000000  
+$ns_ at 73.020000 "$node_(15) switch OFF" ;# arrived_to  
+$ns_ at 74.020000 "$node_(15) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 74.030000 "$node_(15) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 73.020000 "$node_(11) setdest 10.000000 2297.153203 32.054187" ;# 
+$ns_ at 80.536529 "$node_(11) switch OFF" ;# leaving_area  
+#$ns_ at 73.020000 $node_(64) arrived_to 3310.000000 610.000000  
+$ns_ at 73.020000 "$node_(64) switch OFF" ;# arrived_to  
+$ns_ at 74.020000 "$node_(64) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 74.030000 "$node_(64) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 73.513269 "$node_(39) setdest 3310.000000 610.000000 13.130931" ;# 
+$ns_ at 73.790965 "$node_(60) setdest 2288.942757 1949.189106 16.467044" ;# 
+#$ns_ at 74.020000 $node_(35) arrived_to 960.000000 570.000000  
+$ns_ at 74.020000 "$node_(35) switch OFF" ;# arrived_to  
+$ns_ at 75.020000 "$node_(35) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 75.030000 "$node_(35) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 74.515733 "$node_(63) setdest 3310.000000 610.000000 13.130472" ;# 
+$ns_ at 74.824440 "$node_(56) setdest 2560.000000 10.000000 16.230527" ;# 
+$ns_ at 75.020000 "$node_(67) setdest 3310.000000 377.483559 13.636364" ;# 
+$ns_ at 75.168046 "$node_(68) setdest 1429.744513 830.474476 16.589689" ;# 
+#$ns_ at 76.020000 $node_(72) arrived_to 100.000000 470.000000  
+$ns_ at 76.020000 "$node_(72) switch OFF" ;# arrived_to  
+$ns_ at 77.020000 "$node_(72) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 77.030000 "$node_(72) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 76.020000 "$node_(58) setdest 1071.000000 2103.000000 16.364369" ;# 
+$ns_ at 76.338969 "$node_(41) setdest 3298.983616 835.835864 15.904662" ;# 
+$ns_ at 76.643591 "$node_(23) setdest 2382.278109 2509.456145 18.587284" ;# 
+$ns_ at 76.728578 "$node_(65) setdest 3310.000000 610.000000 13.204556" ;# 
+$ns_ at 76.952393 "$node_(24) setdest 3810.000000 1480.000000 12.659855" ;# 
+$ns_ at 77.204488 "$node_(16) setdest 3800.000000 2970.000000 13.831303" ;# 
+$ns_ at 77.402569 "$node_(49) setdest 2082.185204 1730.978328 15.039381" ;# 
+$ns_ at 77.842223 "$node_(28) setdest 1610.000000 1560.000000 13.405608" ;# 
+#$ns_ at 78.020000 $node_(43) arrived_to 4660.000000 400.000000  
+$ns_ at 78.020000 "$node_(43) switch OFF" ;# arrived_to  
+$ns_ at 79.020000 "$node_(43) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 79.030000 "$node_(43) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+#$ns_ at 79.020000 $node_(18) arrived_to 245.000000 2244.000000  
+$ns_ at 79.020000 "$node_(18) switch OFF" ;# arrived_to  
+$ns_ at 80.020000 "$node_(18) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 80.030000 "$node_(18) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 79.020000 "$node_(50) setdest 2232.243741 1576.302606 12.801209" ;# 
+$ns_ at 79.020000 "$node_(33) setdest 3068.928899 814.910436 12.447342" ;# 
+$ns_ at 80.067320 "$node_(62) setdest 1290.000000 1090.000000 18.615038" ;# 
+$ns_ at 0.0 "$node_(81) switch OFF" ;# set_X,Y,Z  
+$node_(81) set X_ 0.000000
+$node_(81) set Y_ 0.000000
+$node_(81) set Z_ 0.0
+$ns_ at 81.503502 "$node_(81) setdest 3917.755102 10.000000 1000000000.000000" ;# init_node
+$ns_ at 81.513502 "$node_(81) switch ON" ;# inside  
+$ns_ at 81.513502 "$node_(81) setdest 3930.000000 210.000000 12.921969" ;# 
+$ns_ at 80.946077 "$node_(27) setdest 1980.000000 2190.000000 18.115363" ;# 
+$ns_ at 81.020000 "$node_(48) setdest 3838.461538 3010.000000 29.888688" ;# 
+$ns_ at 82.876600 "$node_(48) switch OFF" ;# leaving_area  
+$ns_ at 81.020000 "$node_(19) setdest 1071.000000 2103.000000 16.364369" ;# 
+$ns_ at 81.649008 "$node_(51) setdest 1860.000000 1960.000000 18.679926" ;# 
+$ns_ at 82.538014 "$node_(41) setdest 3290.000000 1020.000000 12.731894" ;# 
+#$ns_ at 83.020000 $node_(31) arrived_to 3810.000000 1480.000000  
+$ns_ at 83.020000 "$node_(31) switch OFF" ;# arrived_to  
+$ns_ at 84.020000 "$node_(31) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 84.030000 "$node_(31) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 0.0 "$node_(82) switch OFF" ;# set_X,Y,Z  
+$node_(82) set X_ 0.000000
+$node_(82) set Y_ 0.000000
+$node_(82) set Z_ 0.0
+$ns_ at 89.213655 "$node_(82) setdest 3511.136363 10.000000 1000000000.000000" ;# init_node
+$ns_ at 89.223655 "$node_(82) switch ON" ;# inside  
+$ns_ at 89.223655 "$node_(82) setdest 3310.000000 160.000000 13.348873" ;# 
+$ns_ at 0.0 "$node_(83) switch OFF" ;# set_X,Y,Z  
+$node_(83) set X_ 0.000000
+$node_(83) set Y_ 0.000000
+$node_(83) set Z_ 0.0
+$ns_ at 111.088639 "$node_(83) setdest 565.476191 10.000000 1000000000.000000" ;# init_node
+$ns_ at 111.098639 "$node_(83) switch ON" ;# inside  
+$ns_ at 111.098639 "$node_(83) setdest 100.000000 470.000000 12.851619" ;# 
+$ns_ at 84.020000 "$node_(69) setdest 2946.763505 918.751021 13.460928" ;# 
+$ns_ at 84.020000 "$node_(53) setdest 759.665364 2156.145501 18.893733" ;# 
+$ns_ at 85.020000 "$node_(55) setdest 2660.000000 2730.000000 11.101662" ;# 
+$ns_ at 85.192685 "$node_(21) setdest 2510.000000 1290.000000 12.947158" ;# 
+$ns_ at 85.574748 "$node_(49) setdest 1860.000000 1960.000000 12.540179" ;# 
+$ns_ at 85.915106 "$node_(76) setdest 3471.121930 2284.837355 16.045433" ;# 
+$ns_ at 86.907442 "$node_(77) setdest 3429.356254 70.988556 15.578326" ;# 
+$ns_ at 87.020000 "$node_(57) setdest 2948.388016 917.370186 13.815163" ;# 
+$ns_ at 87.921266 "$node_(1) setdest 2510.000000 1290.000000 14.806388" ;# 
+#$ns_ at 88.020000 $node_(26) arrived_to 3090.000000 2030.000000  
+$ns_ at 88.020000 "$node_(26) switch OFF" ;# arrived_to  
+$ns_ at 89.020000 "$node_(26) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 89.030000 "$node_(26) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 88.999624 "$node_(13) setdest 1031.332476 682.402690 14.209679" ;# 
+#$ns_ at 89.020000 $node_(12) arrived_to 2660.000000 2730.000000  
+$ns_ at 89.020000 "$node_(12) switch OFF" ;# arrived_to  
+$ns_ at 90.020000 "$node_(12) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 90.030000 "$node_(12) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 89.020000 "$node_(51) setdest 1980.000000 2190.000000 13.653812" ;# 
+$ns_ at 89.374028 "$node_(23) setdest 2507.500076 2608.897119 18.743439" ;# 
+$ns_ at 90.020000 "$node_(75) setdest 3064.341849 413.473479 13.129175" ;# 
+$ns_ at 90.367268 "$node_(7) setdest 3801.239648 2785.292469 16.164570" ;# 
+$ns_ at 90.968794 "$node_(67) setdest 3310.000000 427.728101 15.991769" ;# 
+$ns_ at 91.502283 "$node_(45) setdest 1369.887024 2048.829094 18.088682" ;# 
+$ns_ at 91.713123 "$node_(29) setdest 2510.000000 1290.000000 14.674077" ;# 
+$ns_ at 92.020000 "$node_(63) setdest 3044.881012 835.351140 13.124405" ;# 
+$ns_ at 0.0 "$node_(84) switch OFF" ;# set_X,Y,Z  
+$node_(84) set X_ 0.000000
+$node_(84) set Y_ 0.000000
+$node_(84) set Z_ 0.0
+$ns_ at 98.711006 "$node_(84) setdest 3511.136364 10.000000 1000000000.000000" ;# init_node
+$ns_ at 98.721006 "$node_(84) switch ON" ;# inside  
+$ns_ at 98.721006 "$node_(84) setdest 3466.202399 43.510075 15.509769" ;# 
+#$ns_ at 93.020000 $node_(28) arrived_to 1610.000000 1560.000000  
+$ns_ at 93.020000 "$node_(28) switch OFF" ;# arrived_to  
+$ns_ at 94.020000 "$node_(28) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 94.030000 "$node_(28) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 93.196690 "$node_(77) setdest 3310.000000 160.000000 12.593125" ;# 
+#$ns_ at 94.020000 $node_(56) arrived_to 2560.000000 10.000000  
+$ns_ at 94.020000 "$node_(56) switch OFF" ;# arrived_to  
+$ns_ at 95.020000 "$node_(56) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 95.030000 "$node_(56) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 94.110694 "$node_(67) setdest 3310.000000 610.000000 13.104314" ;# 
+$ns_ at 95.020000 "$node_(79) setdest 3310.000000 326.832286 12.456113" ;# 
+$ns_ at 95.080867 "$node_(45) setdest 1071.000000 2103.000000 16.038557" ;# 
+$ns_ at 0.0 "$node_(85) switch OFF" ;# set_X,Y,Z  
+$node_(85) set X_ 0.000000
+$node_(85) set Y_ 0.000000
+$node_(85) set Z_ 0.0
+$ns_ at 107.010001 "$node_(85) setdest 2560.000000 10.000000 1000000000.000000" ;# init_node
+$ns_ at 107.020001 "$node_(85) switch ON" ;# inside  
+$ns_ at 107.020001 "$node_(85) setdest 2560.000000 10.000000 15.432186" ;# 
+$ns_ at 96.020000 "$node_(80) setdest 3310.000000 264.084004 14.479894" ;# 
+#$ns_ at 96.020000 $node_(62) arrived_to 1290.000000 1090.000000  
+$ns_ at 96.020000 "$node_(62) switch OFF" ;# arrived_to  
+$ns_ at 97.020000 "$node_(62) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 97.030000 "$node_(62) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 97.020000 "$node_(78) setdest 2873.391011 72.678202 15.284245" ;# 
+$ns_ at 97.905187 "$node_(23) setdest 2660.000000 2730.000000 14.848559" ;# 
+$ns_ at 98.020000 "$node_(41) setdest 3207.358318 1437.340495 15.535574" ;# 
+$ns_ at 98.020000 "$node_(27) setdest 851.301630 2786.850971 16.620014" ;# 
+$ns_ at 98.020000 "$node_(81) setdest 4246.010292 292.249254 10.932187" ;# 
+$ns_ at 98.093016 "$node_(13) setdest 960.000000 570.000000 12.183288" ;# 
+$ns_ at 99.020000 "$node_(10) setdest 825.195870 2144.959301 18.438249" ;# 
+$ns_ at 99.020000 "$node_(38) setdest 2867.393542 2392.382607 10.669130" ;# 
+$ns_ at 99.020000 "$node_(39) setdest 3290.000000 1020.000000 13.682917" ;# 
+$ns_ at 100.020000 "$node_(16) setdest 3802.644628 3010.000000 14.410845" ;# 
+$ns_ at 102.801747 "$node_(16) switch OFF" ;# leaving_area  
+$ns_ at 100.176928 "$node_(68) setdest 1290.000000 1090.000000 17.500228" ;# 
+$ns_ at 100.736553 "$node_(53) setdest 245.000000 2244.000000 15.229216" ;# 
+$ns_ at 101.471866 "$node_(60) setdest 1980.000000 2190.000000 18.178300" ;# 
+$ns_ at 102.335078 "$node_(84) setdest 3310.000000 160.000000 12.423179" ;# 
+$ns_ at 103.020000 "$node_(20) setdest 3838.461538 3010.000000 31.691224" ;# 
+$ns_ at 104.771001 "$node_(20) switch OFF" ;# leaving_area  
+$ns_ at 103.020000 "$node_(73) setdest 3301.533898 783.555084 13.682917" ;# 
+$ns_ at 103.208174 "$node_(80) setdest 3310.000000 610.000000 13.401455" ;# 
+$ns_ at 104.438397 "$node_(33) setdest 2879.338395 976.062364 14.543216" ;# 
+$ns_ at 105.020000 "$node_(37) setdest 2261.715038 1545.924499 12.202857" ;# 
+$ns_ at 105.020000 "$node_(65) setdest 3301.141878 791.591494 13.682917" ;# 
+$ns_ at 106.020000 "$node_(77) setdest 3310.000000 406.827472 12.451045" ;# 
+$ns_ at 108.020000 "$node_(85) setdest 3055.111374 406.089099 12.993422" ;# 
+$ns_ at 108.413608 "$node_(79) setdest 3310.000000 478.314095 13.636364" ;# 
+$ns_ at 109.020000 "$node_(51) setdest 2123.704561 2304.118328 17.343151" ;# 
+$ns_ at 109.020000 "$node_(67) setdest 3300.899735 796.555442 13.682917" ;# 
+$ns_ at 109.020000 "$node_(82) setdest 3310.000000 510.344385 13.220467" ;# 
+$ns_ at 110.020000 "$node_(21) setdest 2052.051993 1762.038715 13.218839" ;# 
+#$ns_ at 110.020000 $node_(13) arrived_to 960.000000 570.000000  
+$ns_ at 110.020000 "$node_(13) switch OFF" ;# arrived_to  
+$ns_ at 111.020000 "$node_(13) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 111.030000 "$node_(13) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 110.020000 "$node_(66) setdest 1390.631497 1237.802511 13.489251" ;# 
+$ns_ at 110.180777 "$node_(50) setdest 2018.905962 1796.204624 13.528813" ;# 
+$ns_ at 0.0 "$node_(86) switch OFF" ;# set_X,Y,Z  
+$node_(86) set X_ 0.000000
+$node_(86) set Y_ 0.000000
+$node_(86) set Z_ 0.0
+$ns_ at 116.580034 "$node_(86) setdest 1871.538461 10.000000 1000000000.000000" ;# init_node
+$ns_ at 116.590034 "$node_(86) switch ON" ;# inside  
+$ns_ at 116.590034 "$node_(86) setdest 1595.895451 521.908448 16.360244" ;# 
+$ns_ at 111.161296 "$node_(7) setdest 3800.000000 2970.000000 15.576043" ;# 
+$ns_ at 112.020000 "$node_(49) setdest 1447.048442 2034.844199 16.364369" ;# 
+$ns_ at 112.020000 "$node_(23) setdest 2735.000000 3010.000000 16.564038" ;# 
+$ns_ at 129.520000 "$node_(23) switch OFF" ;# leaving_area  
+$ns_ at 112.544044 "$node_(10) setdest 245.000000 2244.000000 15.705761" ;# 
+$ns_ at 115.020000 "$node_(45) setdest 800.877206 2149.110550 15.532960" ;# 
+$ns_ at 115.719153 "$node_(73) setdest 3298.548961 844.746298 14.406345" ;# 
+$ns_ at 116.412026 "$node_(76) setdest 3315.478202 1960.579587 18.536554" ;# 
+$ns_ at 118.020000 "$node_(68) setdest 398.108304 1287.662484 16.621823" ;# 
+$ns_ at 118.307183 "$node_(65) setdest 3299.114853 833.145514 14.465543" ;# 
+$ns_ at 118.513219 "$node_(74) setdest 1290.000000 1090.000000 18.012730" ;# 
+$ns_ at 118.531898 "$node_(63) setdest 2958.817947 908.504745 14.362559" ;# 
+$ns_ at 119.020000 "$node_(61) setdest 747.339233 2158.249598 16.430355" ;# 
+#$ns_ at 119.020000 $node_(84) arrived_to 3310.000000 160.000000  
+$ns_ at 119.020000 "$node_(84) switch OFF" ;# arrived_to  
+$ns_ at 120.020000 "$node_(84) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 120.030000 "$node_(84) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 119.435558 "$node_(69) setdest 2773.538937 1065.991904 14.458335" ;# 
+$ns_ at 119.522273 "$node_(79) setdest 3310.000000 610.000000 15.496606" ;# 
+$ns_ at 119.600819 "$node_(51) setdest 2660.000000 2730.000000 16.144277" ;# 
+$ns_ at 119.812016 "$node_(36) setdest 1860.000000 1960.000000 15.512436" ;# 
+$ns_ at 119.971721 "$node_(73) setdest 3290.000000 1020.000000 13.447144" ;# 
+$ns_ at 120.020000 "$node_(24) setdest 3808.480944 1706.339332 14.637236" ;# 
+$ns_ at 120.020000 "$node_(1) setdest 2405.157699 1398.068218 14.457381" ;# 
+$ns_ at 121.183219 "$node_(65) setdest 3290.000000 1020.000000 13.520245" ;# 
+$ns_ at 121.373138 "$node_(57) setdest 2805.464211 1038.855421 15.476236" ;# 
+$ns_ at 121.547835 "$node_(33) setdest 2831.663988 1016.585611 14.964355" ;# 
+$ns_ at 122.670398 "$node_(67) setdest 3297.875780 858.546515 15.283891" ;# 
+$ns_ at 123.275587 "$node_(66) setdest 1517.151500 1423.628766 12.841373" ;# 
+$ns_ at 124.020000 "$node_(60) setdest 1269.458678 2565.731275 14.975446" ;# 
+#$ns_ at 124.020000 $node_(71) arrived_to 1290.000000 1090.000000  
+$ns_ at 124.020000 "$node_(71) switch OFF" ;# arrived_to  
+$ns_ at 125.020000 "$node_(71) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 125.030000 "$node_(71) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 124.020000 "$node_(7) setdest 3838.461538 3010.000000 27.745675" ;# 
+$ns_ at 126.020000 "$node_(7) switch OFF" ;# leaving_area  
+$ns_ at 125.020000 "$node_(29) setdest 2314.893745 1491.109525 12.787508" ;# 
+$ns_ at 125.405158 "$node_(41) setdest 3090.000000 2030.000000 12.688636" ;# 
+$ns_ at 125.729092 "$node_(33) setdest 2510.000000 1290.000000 13.073798" ;# 
+$ns_ at 125.843836 "$node_(77) setdest 3310.000000 610.000000 15.419704" ;# 
+$ns_ at 126.020000 "$node_(58) setdest 764.196652 2155.372000 16.430355" ;# 
+$ns_ at 126.151669 "$node_(78) setdest 2560.000000 10.000000 18.946593" ;# 
+$ns_ at 126.396280 "$node_(63) setdest 2510.000000 1290.000000 12.910978" ;# 
+$ns_ at 126.731196 "$node_(67) setdest 3290.000000 1020.000000 13.153880" ;# 
+$ns_ at 0.0 "$node_(87) switch OFF" ;# set_X,Y,Z  
+$node_(87) set X_ 0.000000
+$node_(87) set Y_ 0.000000
+$node_(87) set Z_ 0.0
+$ns_ at 140.829201 "$node_(87) setdest 1871.538461 10.000000 1000000000.000000" ;# init_node
+$ns_ at 140.839201 "$node_(87) switch ON" ;# inside  
+$ns_ at 140.839201 "$node_(87) setdest 1864.515162 23.043270 18.081091" ;# 
+$ns_ at 127.889465 "$node_(81) setdest 4348.345188 318.884364 12.272889" ;# 
+$ns_ at 129.020000 "$node_(79) setdest 3296.280996 891.239581 13.369011" ;# 
+$ns_ at 130.020000 "$node_(80) setdest 2871.249270 982.938121 13.608044" ;# 
+$ns_ at 130.020000 "$node_(39) setdest 3195.904728 1495.181122 15.338174" ;# 
+$ns_ at 130.434594 "$node_(1) setdest 1860.000000 1960.000000 13.363744" ;# 
+$ns_ at 131.020000 "$node_(19) setdest 245.000000 2244.000000 16.430355" ;# 
+$ns_ at 132.661848 "$node_(45) setdest 576.051317 2187.488819 17.655915" ;# 
+$ns_ at 132.827402 "$node_(50) setdest 1860.000000 1960.000000 15.021165" ;# 
+$ns_ at 0.0 "$node_(88) switch OFF" ;# set_X,Y,Z  
+$node_(88) set X_ 0.000000
+$node_(88) set Y_ 0.000000
+$node_(88) set Z_ 0.0
+$ns_ at 157.137696 "$node_(88) setdest 565.476191 10.000000 1000000000.000000" ;# init_node
+$ns_ at 157.147696 "$node_(88) switch ON" ;# inside  
+$ns_ at 157.147696 "$node_(88) setdest 447.380636 126.706195 12.862592" ;# 
+$ns_ at 133.493591 "$node_(57) setdest 2510.000000 1290.000000 13.133300" ;# 
+$ns_ at 134.020000 "$node_(73) setdest 3245.511748 1080.352279 17.620032" ;# 
+$ns_ at 134.240277 "$node_(37) setdest 2044.074180 1770.261999 16.010145" ;# 
+$ns_ at 135.159840 "$node_(69) setdest 2510.000000 1290.000000 12.877033" ;# 
+$ns_ at 135.483604 "$node_(24) setdest 3805.479210 2153.597670 12.883208" ;# 
+$ns_ at 135.520151 "$node_(82) setdest 3310.000000 610.000000 15.331992" ;# 
+$ns_ at 135.815726 "$node_(76) setdest 3032.000000 1370.000000 15.898616" ;# 
+$ns_ at 136.020000 "$node_(53) setdest 10.000000 2297.153203 27.467800" ;# 
+$ns_ at 144.791588 "$node_(53) switch OFF" ;# leaving_area  
+$ns_ at 136.020000 "$node_(65) setdest 3201.793172 1465.444479 13.547521" ;# 
+$ns_ at 136.505555 "$node_(81) setdest 4660.000000 400.000000 10.553625" ;# 
+$ns_ at 137.020000 "$node_(36) setdest 1533.412123 2019.191466 16.364369" ;# 
+$ns_ at 137.665915 "$node_(49) setdest 1399.568575 2043.449549 17.235207" ;# 
+$ns_ at 138.275233 "$node_(73) setdest 3032.000000 1370.000000 15.820675" ;# 
+$ns_ at 138.882085 "$node_(38) setdest 2791.267225 2516.309168 11.748791" ;# 
+$ns_ at 139.003897 "$node_(61) setdest 532.623433 2194.902053 18.223602" ;# 
+$ns_ at 139.213699 "$node_(75) setdest 3310.000000 610.000000 15.120226" ;# 
+$ns_ at 140.020000 "$node_(44) setdest 1271.772161 2066.611636 15.916303" ;# 
+$ns_ at 140.020000 "$node_(77) setdest 2885.061120 971.198048 13.815163" ;# 
+$ns_ at 140.020000 "$node_(67) setdest 3207.216219 1438.058096 13.371579" ;# 
+$ns_ at 140.465614 "$node_(49) setdest 1071.000000 2103.000000 16.245753" ;# 
+$ns_ at 140.782139 "$node_(66) setdest 1586.789557 1525.909662 16.225247" ;# 
+#$ns_ at 141.020000 $node_(74) arrived_to 1290.000000 1090.000000  
+$ns_ at 141.020000 "$node_(74) switch OFF" ;# arrived_to  
+$ns_ at 142.020000 "$node_(74) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 142.030000 "$node_(74) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 141.658508 "$node_(87) setdest 1290.000000 1090.000000 16.296098" ;# 
+$ns_ at 143.020000 "$node_(82) setdest 3032.404943 845.955798 13.815163" ;# 
+$ns_ at 143.109439 "$node_(8) setdest 3800.000000 2970.000000 15.062159" ;# 
+#$ns_ at 144.020000 $node_(78) arrived_to 2560.000000 10.000000  
+$ns_ at 144.020000 "$node_(78) switch OFF" ;# arrived_to  
+$ns_ at 145.020000 "$node_(78) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 145.030000 "$node_(78) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 0.0 "$node_(89) switch OFF" ;# set_X,Y,Z  
+$node_(89) set X_ 0.000000
+$node_(89) set Y_ 0.000000
+$node_(89) set Z_ 0.0
+$ns_ at 153.222693 "$node_(89) setdest 565.476191 10.000000 1000000000.000000" ;# init_node
+$ns_ at 153.232693 "$node_(89) switch ON" ;# inside  
+$ns_ at 153.232693 "$node_(89) setdest 344.127931 228.744163 13.735993" ;# 
+$ns_ at 144.963064 "$node_(58) setdest 611.323732 2181.467741 17.409286" ;# 
+$ns_ at 145.579785 "$node_(45) setdest 496.265112 2201.108498 18.301437" ;# 
+$ns_ at 146.931933 "$node_(29) setdest 2187.073134 1622.863078 14.945523" ;# 
+$ns_ at 148.408339 "$node_(66) setdest 1610.000000 1560.000000 15.791359" ;# 
+$ns_ at 149.020000 "$node_(50) setdest 1566.539209 2013.187444 15.277260" ;# 
+$ns_ at 150.002406 "$node_(45) setdest 245.000000 2244.000000 15.913730" ;# 
+$ns_ at 150.081692 "$node_(79) setdest 3290.000000 1020.000000 14.422586" ;# 
+$ns_ at 150.956620 "$node_(61) setdest 245.000000 2244.000000 15.305991" ;# 
+$ns_ at 151.020000 "$node_(10) setdest 10.000000 2297.153203 27.031537" ;# 
+$ns_ at 159.933153 "$node_(10) switch OFF" ;# leaving_area  
+$ns_ at 151.261294 "$node_(38) setdest 2660.000000 2730.000000 10.129306" ;# 
+$ns_ at 152.020000 "$node_(66) setdest 1686.208867 1681.934187 14.721891" ;# 
+$ns_ at 152.127578 "$node_(86) setdest 1424.637256 839.959382 15.416120" ;# 
+$ns_ at 0.0 "$node_(90) switch OFF" ;# set_X,Y,Z  
+$node_(90) set X_ 0.000000
+$node_(90) set Y_ 0.000000
+$node_(90) set Z_ 0.0
+$ns_ at 169.168944 "$node_(90) setdest 1871.538462 10.000000 1000000000.000000" ;# init_node
+$ns_ at 169.178944 "$node_(90) switch ON" ;# inside  
+$ns_ at 169.178944 "$node_(90) setdest 1629.907162 458.743842 15.463030" ;# 
+$ns_ at 153.763009 "$node_(37) setdest 1981.588388 1834.670431 14.570408" ;# 
+$ns_ at 153.871196 "$node_(58) setdest 245.000000 2244.000000 16.053642" ;# 
+$ns_ at 0.0 "$node_(91) switch OFF" ;# set_X,Y,Z  
+$node_(91) set X_ 0.000000
+$node_(91) set Y_ 0.000000
+$node_(91) set Z_ 0.0
+$ns_ at 170.418030 "$node_(91) setdest 1871.538462 10.000000 1000000000.000000" ;# init_node
+$ns_ at 170.428030 "$node_(91) switch ON" ;# inside  
+$ns_ at 170.428030 "$node_(91) setdest 1630.537227 457.573722 16.216624" ;# 
+$ns_ at 156.817916 "$node_(85) setdest 3310.000000 610.000000 14.702074" ;# 
+$ns_ at 157.302391 "$node_(36) setdest 1393.080306 2044.625496 17.971882" ;# 
+$ns_ at 159.020000 "$node_(33) setdest 1860.000000 1960.000000 13.528813" ;# 
+$ns_ at 159.214389 "$node_(29) setdest 1860.000000 1960.000000 12.104470" ;# 
+$ns_ at 159.772887 "$node_(21) setdest 1860.000000 1960.000000 15.115415" ;# 
+$ns_ at 159.921934 "$node_(37) setdest 1860.000000 1960.000000 13.331542" ;# 
+#$ns_ at 160.020000 $node_(55) arrived_to 2660.000000 2730.000000  
+$ns_ at 160.020000 "$node_(55) switch OFF" ;# arrived_to  
+$ns_ at 161.020000 "$node_(55) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 161.030000 "$node_(55) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 160.020000 "$node_(79) setdest 3244.927850 1081.144389 17.520934" ;# 
+$ns_ at 161.020000 "$node_(75) setdest 3298.796385 839.674115 13.400949" ;# 
+$ns_ at 161.601850 "$node_(39) setdest 3090.000000 2030.000000 12.557045" ;# 
+$ns_ at 161.787129 "$node_(66) setdest 1860.000000 1960.000000 13.531556" ;# 
+$ns_ at 162.020000 "$node_(73) setdest 2448.642014 1824.708696 16.241331" ;# 
+$ns_ at 162.020000 "$node_(49) setdest 245.000000 2244.000000 16.430355" ;# 
+$ns_ at 163.020000 "$node_(51) setdest 2841.276329 2784.804471 15.762089" ;# 
+$ns_ at 163.020000 "$node_(69) setdest 2192.066548 1617.716019 12.965112" ;# 
+#$ns_ at 163.020000 $node_(83) arrived_to 100.000000 470.000000  
+$ns_ at 163.020000 "$node_(83) switch OFF" ;# arrived_to  
+$ns_ at 164.020000 "$node_(83) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 164.030000 "$node_(83) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 164.020000 "$node_(57) setdest 2196.107831 1613.550389 14.321469" ;# 
+$ns_ at 164.355465 "$node_(79) setdest 3032.000000 1370.000000 15.833262" ;# 
+$ns_ at 165.238012 "$node_(36) setdest 1071.000000 2103.000000 15.750539" ;# 
+#$ns_ at 167.020000 $node_(45) arrived_to 245.000000 2244.000000  
+$ns_ at 167.020000 "$node_(45) switch OFF" ;# arrived_to  
+$ns_ at 168.020000 "$node_(45) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 168.030000 "$node_(45) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+#$ns_ at 168.020000 $node_(81) arrived_to 4660.000000 400.000000  
+$ns_ at 168.020000 "$node_(81) switch OFF" ;# arrived_to  
+$ns_ at 169.020000 "$node_(81) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 169.030000 "$node_(81) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 168.541939 "$node_(50) setdest 1303.139455 2060.926563 17.773443" ;# 
+$ns_ at 169.391530 "$node_(82) setdest 2894.107066 963.508994 14.864930" ;# 
+$ns_ at 169.538594 "$node_(65) setdest 3168.634794 1632.894289 14.854433" ;# 
+$ns_ at 170.055887 "$node_(88) setdest 359.817155 213.239517 15.485932" ;# 
+$ns_ at 170.200765 "$node_(24) setdest 3803.601631 2433.357008 15.356627" ;# 
+#$ns_ at 171.020000 $node_(61) arrived_to 245.000000 2244.000000  
+$ns_ at 171.020000 "$node_(61) switch OFF" ;# arrived_to  
+$ns_ at 172.020000 "$node_(61) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 172.030000 "$node_(61) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 0.0 "$node_(92) switch OFF" ;# set_X,Y,Z  
+$node_(92) set X_ 0.000000
+$node_(92) set Y_ 0.000000
+$node_(92) set Z_ 0.0
+$ns_ at 186.522795 "$node_(92) setdest 1871.538461 10.000000 1000000000.000000" ;# init_node
+$ns_ at 186.532795 "$node_(92) switch ON" ;# inside  
+$ns_ at 186.532795 "$node_(92) setdest 1757.062373 222.598450 16.107106" ;# 
+$ns_ at 171.891756 "$node_(67) setdest 3158.620839 1683.464762 14.102316" ;# 
+$ns_ at 172.335722 "$node_(80) setdest 2604.125521 1209.993307 13.815163" ;# 
+$ns_ at 172.979814 "$node_(68) setdest 40.534746 1366.908516 18.195136" ;# 
+$ns_ at 173.020000 "$node_(63) setdest 2347.931038 1457.055700 14.766618" ;# 
+$ns_ at 0.0 "$node_(93) switch OFF" ;# set_X,Y,Z  
+$node_(93) set X_ 0.000000
+$node_(93) set Y_ 0.000000
+$node_(93) set Z_ 0.0
+$ns_ at 207.010001 "$node_(93) setdest 2560.000000 10.000000 1000000000.000000" ;# init_node
+$ns_ at 207.020001 "$node_(93) switch ON" ;# inside  
+$ns_ at 207.020001 "$node_(93) setdest 2560.000000 10.000000 16.187162" ;# 
+#$ns_ at 174.020000 $node_(41) arrived_to 3090.000000 2030.000000  
+$ns_ at 174.020000 "$node_(41) switch OFF" ;# arrived_to  
+$ns_ at 175.020000 "$node_(41) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 175.030000 "$node_(41) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+#$ns_ at 174.020000 $node_(37) arrived_to 1860.000000 1960.000000  
+$ns_ at 174.020000 "$node_(37) switch OFF" ;# arrived_to  
+$ns_ at 175.020000 "$node_(37) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 175.030000 "$node_(37) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 174.842400 "$node_(27) setdest 625.319656 2906.349292 19.152866" ;# 
+$ns_ at 175.034880 "$node_(51) setdest 3007.934440 2835.189482 16.637835" ;# 
+$ns_ at 175.559423 "$node_(86) setdest 1290.000000 1090.000000 18.368335" ;# 
+$ns_ at 175.888338 "$node_(89) setdest 100.000000 470.000000 15.508288" ;# 
+#$ns_ at 177.020000 $node_(38) arrived_to 2660.000000 2730.000000  
+$ns_ at 177.020000 "$node_(38) switch OFF" ;# arrived_to  
+$ns_ at 178.020000 "$node_(38) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 178.030000 "$node_(38) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 177.579667 "$node_(44) setdest 1071.000000 2103.000000 17.835412" ;# 
+$ns_ at 177.692389 "$node_(60) setdest 651.781274 2892.356499 16.620014" ;# 
+$ns_ at 178.005501 "$node_(88) setdest 100.000000 470.000000 13.039032" ;# 
+$ns_ at 178.020000 "$node_(76) setdest 3152.346236 1206.739603 16.104256" ;# 
+$ns_ at 178.020000 "$node_(58) setdest 46.380318 2288.924563 31.751156" ;# 
+$ns_ at 178.179025 "$node_(75) setdest 3293.177795 954.855207 13.682917" ;# 
+$ns_ at 179.020000 "$node_(21) setdest 1734.363809 1982.770564 17.710129" ;# 
+$ns_ at 180.020000 "$node_(85) setdest 2946.994541 918.554640 13.815163" ;# 
+$ns_ at 180.389193 "$node_(77) setdest 2733.002404 1100.447957 15.201584" ;# 
+$ns_ at 181.030197 "$node_(65) setdest 3090.000000 2030.000000 13.062893" ;# 
+$ns_ at 181.601997 "$node_(82) setdest 2510.000000 1290.000000 13.472597" ;# 
+$ns_ at 183.020000 "$node_(8) setdest 3802.644628 3010.000000 14.845359" ;# 
+$ns_ at 185.720327 "$node_(8) switch OFF" ;# leaving_area  
+$ns_ at 183.020000 "$node_(19) setdest 10.000000 2297.153203 32.044586" ;# 
+$ns_ at 190.538781 "$node_(19) switch OFF" ;# leaving_area  
+$ns_ at 183.603229 "$node_(50) setdest 1235.530927 2073.180073 17.527362" ;# 
+$ns_ at 184.433528 "$node_(58) setdest 10.000000 2297.153203 24.610297" ;# 
+$ns_ at 185.949125 "$node_(58) switch OFF" ;# leaving_area  
+$ns_ at 185.499459 "$node_(51) setdest 3090.000000 2860.000000 18.965428" ;# 
+$ns_ at 0.0 "$node_(94) switch OFF" ;# set_X,Y,Z  
+$node_(94) set X_ 0.000000
+$node_(94) set Y_ 0.000000
+$node_(94) set Z_ 0.0
+$ns_ at 200.082699 "$node_(94) setdest 1871.538462 10.000000 1000000000.000000" ;# init_node
+$ns_ at 200.092699 "$node_(94) switch ON" ;# inside  
+$ns_ at 200.092699 "$node_(94) setdest 1847.554641 54.541381 17.755388" ;# 
+$ns_ at 186.229604 "$node_(21) setdest 1071.000000 2103.000000 16.132201" ;# 
+$ns_ at 186.606909 "$node_(75) setdest 3290.000000 1020.000000 14.779268" ;# 
+$ns_ at 187.020000 "$node_(66) setdest 1900.692120 2037.993230 15.154980" ;# 
+$ns_ at 187.020000 "$node_(36) setdest 719.708692 2162.966192 17.382919" ;# 
+$ns_ at 187.523384 "$node_(50) setdest 1071.000000 2103.000000 15.930028" ;# 
+$ns_ at 188.020000 "$node_(79) setdest 2665.592034 1655.603167 16.467044" ;# 
+$ns_ at 188.189331 "$node_(27) setdest 429.306931 3010.000000 15.771276" ;# 
+$ns_ at 202.248472 "$node_(27) switch OFF" ;# leaving_area  
+$ns_ at 188.418674 "$node_(24) setdest 3800.000000 2970.000000 12.597146" ;# 
+$ns_ at 188.782106 "$node_(63) setdest 2146.724027 1664.453696 12.991574" ;# 
+$ns_ at 189.631525 "$node_(67) setdest 3090.000000 2030.000000 12.898274" ;# 
+$ns_ at 190.020000 "$node_(44) setdest 776.761613 2153.227134 16.430355" ;# 
+$ns_ at 190.020000 "$node_(1) setdest 1071.000000 2103.000000 16.364369" ;# 
+$ns_ at 190.614373 "$node_(76) setdest 3199.271293 1143.081579 18.258249" ;# 
+#$ns_ at 191.020000 $node_(51) arrived_to 3090.000000 2860.000000  
+$ns_ at 191.020000 "$node_(51) switch OFF" ;# arrived_to  
+$ns_ at 192.020000 "$node_(51) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 192.030000 "$node_(51) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 192.020000 "$node_(75) setdest 3216.505296 1119.702118 17.758994" ;# 
+$ns_ at 192.020000 "$node_(86) setdest 1610.000000 1560.000000 13.868165" ;# 
+$ns_ at 192.824720 "$node_(66) setdest 1980.000000 2190.000000 12.993435" ;# 
+$ns_ at 193.108798 "$node_(68) setdest 10.000000 1373.675676 15.807939" ;# 
+$ns_ at 195.087274 "$node_(68) switch OFF" ;# leaving_area  
+$ns_ at 193.517299 "$node_(77) setdest 2510.000000 1290.000000 13.006323" ;# 
+$ns_ at 194.945794 "$node_(76) setdest 3290.000000 1020.000000 15.178143" ;# 
+$ns_ at 195.496637 "$node_(57) setdest 1860.000000 1960.000000 11.624694" ;# 
+$ns_ at 0.0 "$node_(95) switch OFF" ;# set_X,Y,Z  
+$node_(95) set X_ 0.000000
+$node_(95) set Y_ 0.000000
+$node_(95) set Z_ 0.0
+$ns_ at 200.540141 "$node_(95) setdest 3917.755102 10.000000 1000000000.000000" ;# init_node
+$ns_ at 200.550141 "$node_(95) switch ON" ;# inside  
+$ns_ at 200.550141 "$node_(95) setdest 3930.000000 210.000000 11.469727" ;# 
+$ns_ at 197.712478 "$node_(80) setdest 2510.000000 1290.000000 14.870156" ;# 
+$ns_ at 198.237245 "$node_(69) setdest 2043.885022 1770.456977 15.035831" ;# 
+$ns_ at 198.994650 "$node_(75) setdest 3032.000000 1370.000000 15.527926" ;# 
+$ns_ at 199.020000 "$node_(50) setdest 851.594504 2140.452996 18.543827" ;# 
+#$ns_ at 199.020000 $node_(89) arrived_to 100.000000 470.000000  
+$ns_ at 199.020000 "$node_(89) switch OFF" ;# arrived_to  
+$ns_ at 200.020000 "$node_(89) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 200.030000 "$node_(89) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 199.020000 "$node_(29) setdest 1776.442635 1975.144111 19.043520" ;# 
+$ns_ at 201.523686 "$node_(92) setdest 1522.902019 657.467680 15.764942" ;# 
+$ns_ at 201.774529 "$node_(91) setdest 1388.150347 907.720784 16.589689" ;# 
+$ns_ at 202.139067 "$node_(90) setdest 1290.000000 1090.000000 17.977331" ;# 
+$ns_ at 202.941870 "$node_(94) setdest 1290.000000 1090.000000 16.316016" ;# 
+$ns_ at 203.479189 "$node_(29) setdest 1506.457950 2024.076696 15.681582" ;# 
+#$ns_ at 206.020000 $node_(76) arrived_to 3290.000000 1020.000000  
+$ns_ at 206.020000 "$node_(76) switch OFF" ;# arrived_to  
+$ns_ at 207.020000 "$node_(76) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 207.030000 "$node_(76) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+#$ns_ at 206.020000 $node_(39) arrived_to 3090.000000 2030.000000  
+$ns_ at 206.020000 "$node_(39) switch OFF" ;# arrived_to  
+$ns_ at 207.020000 "$node_(39) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 207.030000 "$node_(39) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+#$ns_ at 207.020000 $node_(66) arrived_to 1980.000000 2190.000000  
+$ns_ at 207.020000 "$node_(66) switch OFF" ;# arrived_to  
+$ns_ at 208.020000 "$node_(66) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 208.030000 "$node_(66) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 207.020000 "$node_(80) setdest 2324.258074 1481.457062 11.783104" ;# 
+#$ns_ at 207.020000 $node_(88) arrived_to 100.000000 470.000000  
+$ns_ at 207.020000 "$node_(88) switch OFF" ;# arrived_to  
+$ns_ at 208.020000 "$node_(88) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 208.030000 "$node_(88) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 207.521317 "$node_(36) setdest 245.000000 2244.000000 15.790038" ;# 
+$ns_ at 207.560570 "$node_(73) setdest 2119.973365 2080.895286 16.467044" ;# 
+$ns_ at 208.020000 "$node_(93) setdest 2989.140807 353.312646 13.088646" ;# 
+$ns_ at 208.187261 "$node_(44) setdest 623.790512 2179.339634 18.470348" ;# 
+$ns_ at 211.022873 "$node_(50) setdest 245.000000 2244.000000 15.779852" ;# 
+$ns_ at 211.024255 "$node_(63) setdest 2056.747297 1757.198940 14.688254" ;# 
+$ns_ at 212.390686 "$node_(69) setdest 1860.000000 1960.000000 11.669987" ;# 
+#$ns_ at 213.020000 $node_(65) arrived_to 3090.000000 2030.000000  
+$ns_ at 213.020000 "$node_(65) switch OFF" ;# arrived_to  
+$ns_ at 214.020000 "$node_(65) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 214.030000 "$node_(65) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 214.020000 "$node_(49) setdest 10.000000 2297.153203 25.061238" ;# 
+$ns_ at 223.633899 "$node_(49) switch OFF" ;# leaving_area  
+$ns_ at 214.505518 "$node_(85) setdest 2880.706633 974.899362 15.931866" ;# 
+$ns_ at 216.232020 "$node_(79) setdest 2341.346270 1908.342261 17.761994" ;# 
+$ns_ at 216.589042 "$node_(44) setdest 245.000000 2244.000000 15.728803" ;# 
+$ns_ at 217.020000 "$node_(87) setdest 1440.191417 1310.593644 15.030777" ;# 
+$ns_ at 217.020000 "$node_(77) setdest 1860.000000 1960.000000 13.528813" ;# 
+$ns_ at 218.020000 "$node_(67) setdest 2974.599224 2217.861728 11.270777" ;# 
+$ns_ at 219.020000 "$node_(95) setdest 4660.000000 400.000000 10.932187" ;# 
+$ns_ at 219.733258 "$node_(60) setdest 429.306931 3010.000000 19.194417" ;# 
+$ns_ at 232.844577 "$node_(60) switch OFF" ;# leaving_area  
+$ns_ at 219.821678 "$node_(63) setdest 1860.000000 1960.000000 13.329158" ;# 
+$ns_ at 219.966205 "$node_(85) setdest 2510.000000 1290.000000 13.494568" ;# 
+$ns_ at 220.020000 "$node_(75) setdest 3335.449131 2002.185689 16.743154" ;# 
+$ns_ at 220.020000 "$node_(82) setdest 2225.249532 1583.512021 13.528813" ;# 
+$ns_ at 220.976351 "$node_(29) setdest 1447.052342 2034.843492 19.129141" ;# 
+$ns_ at 224.132448 "$node_(29) setdest 1071.000000 2103.000000 15.999079" ;# 
+$ns_ at 229.020000 "$node_(21) setdest 892.985050 2133.387540 18.885850" ;# 
+$ns_ at 229.020000 "$node_(33) setdest 1598.308715 2007.429472 15.682055" ;# 
+$ns_ at 229.658395 "$node_(80) setdest 2153.802027 1657.157910 13.260012" ;# 
+$ns_ at 232.020000 "$node_(24) setdest 3838.461538 3010.000000 30.389856" ;# 
+$ns_ at 233.845983 "$node_(24) switch OFF" ;# leaving_area  
+$ns_ at 232.592289 "$node_(91) setdest 1290.000000 1090.000000 18.116021" ;# 
+$ns_ at 232.853023 "$node_(92) setdest 1356.793484 965.954958 17.910555" ;# 
+$ns_ at 232.866807 "$node_(73) setdest 1980.000000 2190.000000 17.479445" ;# 
+$ns_ at 234.020000 "$node_(86) setdest 1786.643491 1842.629586 13.424032" ;# 
+$ns_ at 234.774832 "$node_(87) setdest 1610.000000 1560.000000 12.980153" ;# 
+$ns_ at 236.020000 "$node_(69) setdest 1071.000000 2103.000000 16.364369" ;# 
+$ns_ at 237.581680 "$node_(67) setdest 2818.392033 2472.152504 10.264343" ;# 
+$ns_ at 238.020000 "$node_(57) setdest 1707.400414 1987.657466 19.200321" ;# 
+$ns_ at 238.582182 "$node_(21) setdest 685.403262 2168.822203 14.782163" ;# 
+$ns_ at 239.020000 "$node_(36) setdest 10.000000 2297.153204 29.240031" ;# 
+$ns_ at 247.259944 "$node_(36) switch OFF" ;# leaving_area  
+$ns_ at 239.377571 "$node_(79) setdest 1980.000000 2190.000000 15.455914" ;# 
+$ns_ at 240.020000 "$node_(1) setdest 602.456318 2182.981427 16.430355" ;# 
+$ns_ at 242.020000 "$node_(44) setdest 10.000000 2297.153203 26.264286" ;# 
+$ns_ at 251.193530 "$node_(44) switch OFF" ;# leaving_area  
+#$ns_ at 242.020000 $node_(63) arrived_to 1860.000000 1960.000000  
+$ns_ at 242.020000 "$node_(63) switch OFF" ;# arrived_to  
+$ns_ at 243.020000 "$node_(63) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 243.030000 "$node_(63) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+#$ns_ at 243.020000 $node_(90) arrived_to 1290.000000 1090.000000  
+$ns_ at 243.020000 "$node_(90) switch OFF" ;# arrived_to  
+$ns_ at 244.020000 "$node_(90) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 244.030000 "$node_(90) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+#$ns_ at 244.020000 $node_(73) arrived_to 1980.000000 2190.000000  
+$ns_ at 244.020000 "$node_(73) switch OFF" ;# arrived_to  
+$ns_ at 245.020000 "$node_(73) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 245.030000 "$node_(73) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 245.020000 "$node_(91) setdest 652.346233 1231.317862 16.621823" ;# 
+$ns_ at 245.979172 "$node_(33) setdest 1347.377906 2052.908694 15.278138" ;# 
+$ns_ at 246.097244 "$node_(57) setdest 1477.003253 2029.415127 14.906121" ;# 
+$ns_ at 248.119765 "$node_(80) setdest 2022.303833 1792.702203 13.262811" ;# 
+$ns_ at 249.020000 "$node_(29) setdest 788.024513 2151.304532 17.646027" ;# 
+$ns_ at 250.008177 "$node_(93) setdest 3310.000000 610.000000 14.668817" ;# 
+$ns_ at 250.247357 "$node_(82) setdest 2091.946353 1720.916836 15.145760" ;# 
+$ns_ at 251.020000 "$node_(50) setdest 10.000000 2297.153203 31.914843" ;# 
+$ns_ at 258.569347 "$node_(50) switch OFF" ;# leaving_area  
+$ns_ at 252.415016 "$node_(92) setdest 1290.000000 1090.000000 18.525334" ;# 
+$ns_ at 252.828031 "$node_(21) setdest 444.675750 2209.914914 15.036167" ;# 
+#$ns_ at 257.020000 $node_(85) arrived_to 2510.000000 1290.000000  
+$ns_ at 257.020000 "$node_(85) switch OFF" ;# arrived_to  
+$ns_ at 258.020000 "$node_(85) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 258.030000 "$node_(85) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 258.847881 "$node_(86) setdest 1860.000000 1960.000000 15.090166" ;# 
+$ns_ at 259.020000 "$node_(87) setdest 1294.979871 1877.357940 16.121572" ;# 
+#$ns_ at 261.020000 $node_(92) arrived_to 1290.000000 1090.000000  
+$ns_ at 261.020000 "$node_(92) switch OFF" ;# arrived_to  
+$ns_ at 262.020000 "$node_(92) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 262.030000 "$node_(92) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 261.805603 "$node_(57) setdest 1282.120421 2064.736096 17.465197" ;# 
+$ns_ at 261.902303 "$node_(75) setdest 3558.437585 2466.744969 17.642329" ;# 
+$ns_ at 262.358770 "$node_(80) setdest 1860.000000 1960.000000 11.855327" ;# 
+$ns_ at 262.670923 "$node_(33) setdest 1148.444158 2088.963860 17.976508" ;# 
+$ns_ at 262.887292 "$node_(82) setdest 1860.000000 1960.000000 12.746724" ;# 
+$ns_ at 265.288179 "$node_(29) setdest 245.000000 2244.000000 15.860941" ;# 
+$ns_ at 300.010000 "$node_(29) switch OFF" ;# T_max_OFF  
+$ns_ at 266.656773 "$node_(67) setdest 2784.048966 2528.059823 11.611108" ;# 
+$ns_ at 0.0 "$node_(96) switch OFF" ;# set_X,Y,Z  
+$node_(96) set X_ 0.000000
+$node_(96) set Y_ 0.000000
+$node_(96) set Z_ 0.0
+$ns_ at 272.965033 "$node_(96) setdest 3838.461539 3010.000000 1000000000.000000" ;# init_node
+$ns_ at 272.975033 "$node_(96) switch ON" ;# inside  
+$ns_ at 272.975033 "$node_(96) setdest 3800.000000 2970.000000 27.135580" ;# 
+$ns_ at 268.949452 "$node_(1) setdest 557.162097 2190.713250 17.426686" ;# 
+$ns_ at 269.020000 "$node_(86) setdest 1949.861359 2132.234271 13.400689" ;# 
+$ns_ at 269.069512 "$node_(21) setdest 245.000000 2244.000000 18.498178" ;# 
+$ns_ at 270.020000 "$node_(79) setdest 1527.825258 2429.108110 15.340410" ;# 
+$ns_ at 300.010000 "$node_(79) switch OFF" ;# T_max_OFF  
+$ns_ at 271.586178 "$node_(1) setdest 245.000000 2244.000000 16.295176" ;# 
+$ns_ at 272.307661 "$node_(67) setdest 2660.000000 2730.000000 10.434763" ;# 
+$ns_ at 273.145744 "$node_(57) setdest 1071.000000 2103.000000 15.464606" ;# 
+$ns_ at 0.0 "$node_(97) switch OFF" ;# set_X,Y,Z  
+$node_(97) set X_ 0.000000
+$node_(97) set Y_ 0.000000
+$node_(97) set Z_ 0.0
+$ns_ at 279.010000 "$node_(97) setdest 2560.000000 10.000000 1000000000.000000" ;# init_node
+$ns_ at 279.020000 "$node_(97) switch ON" ;# inside  
+$ns_ at 279.020000 "$node_(97) setdest 2560.000000 10.000000 14.938944" ;# 
+$ns_ at 273.917529 "$node_(33) setdest 1071.000000 2103.000000 19.184982" ;# 
+$ns_ at 0.0 "$node_(98) switch OFF" ;# set_X,Y,Z  
+$node_(98) set X_ 0.000000
+$node_(98) set Y_ 0.000000
+$node_(98) set Z_ 0.0
+$ns_ at 282.925931 "$node_(98) setdest 3838.461539 3010.000000 1000000000.000000" ;# init_node
+$ns_ at 282.935931 "$node_(98) switch ON" ;# inside  
+$ns_ at 282.935931 "$node_(98) setdest 3800.000000 2970.000000 26.626446" ;# 
+$ns_ at 276.020000 "$node_(96) setdest 3474.475390 2291.823728 16.199655" ;# 
+$ns_ at 300.010000 "$node_(96) switch OFF" ;# T_max_OFF  
+$ns_ at 276.020000 "$node_(94) setdest 1339.605990 1162.858798 15.675509" ;# 
+$ns_ at 279.020000 "$node_(93) setdest 3298.774462 840.123521 13.682917" ;# 
+$ns_ at 279.020000 "$node_(33) setdest 758.868100 2156.281595 15.403528" ;# 
+$ns_ at 280.020000 "$node_(97) setdest 3310.000000 610.000000 13.527727" ;# 
+$ns_ at 300.010000 "$node_(97) switch OFF" ;# T_max_OFF  
+$ns_ at 281.020000 "$node_(21) setdest 10.000000 2297.153203 30.398557" ;# 
+$ns_ at 288.945910 "$node_(21) switch OFF" ;# leaving_area  
+$ns_ at 281.642965 "$node_(94) setdest 1484.258241 1375.316791 13.340685" ;# 
+$ns_ at 300.010000 "$node_(94) switch OFF" ;# T_max_OFF  
+$ns_ at 283.020000 "$node_(80) setdest 1502.174391 2024.853057 16.364369" ;# 
+$ns_ at 300.010000 "$node_(80) switch OFF" ;# T_max_OFF  
+$ns_ at 283.516799 "$node_(86) setdest 1980.000000 2190.000000 14.468669" ;# 
+$ns_ at 284.313260 "$node_(91) setdest 431.300048 1280.306476 17.867474" ;# 
+$ns_ at 286.020000 "$node_(98) setdest 3801.473672 2750.422828 15.669625" ;# 
+$ns_ at 300.010000 "$node_(98) switch OFF" ;# T_max_OFF  
+$ns_ at 286.020000 "$node_(69) setdest 918.365533 2129.055036 18.384042" ;# 
+$ns_ at 286.756865 "$node_(87) setdest 1142.462024 2031.007645 16.632495" ;# 
+$ns_ at 287.020000 "$node_(77) setdest 1551.772884 2015.863723 14.961985" ;# 
+$ns_ at 300.010000 "$node_(77) switch OFF" ;# T_max_OFF  
+$ns_ at 288.020000 "$node_(57) setdest 803.748295 2148.620448 15.729994" ;# 
+$ns_ at 300.010000 "$node_(57) switch OFF" ;# T_max_OFF  
+$ns_ at 289.020000 "$node_(86) setdest 2353.960580 2486.968696 16.383618" ;# 
+$ns_ at 300.010000 "$node_(86) switch OFF" ;# T_max_OFF  
+#$ns_ at 289.020000 $node_(95) arrived_to 4660.000000 400.000000  
+$ns_ at 289.020000 "$node_(95) switch OFF" ;# arrived_to  
+$ns_ at 290.020000 "$node_(95) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 290.030000 "$node_(95) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 290.020000 "$node_(82) setdest 1540.540627 2017.899481 16.364369" ;# 
+$ns_ at 300.010000 "$node_(82) switch OFF" ;# T_max_OFF  
+$ns_ at 291.110744 "$node_(75) setdest 3800.000000 2970.000000 15.990818" ;# 
+$ns_ at 300.010000 "$node_(75) switch OFF" ;# T_max_OFF  
+$ns_ at 292.020000 "$node_(1) setdest 10.000000 2297.153204 31.068618" ;# 
+$ns_ at 299.774971 "$node_(1) switch OFF" ;# leaving_area  
+$ns_ at 294.442649 "$node_(69) setdest 667.501399 2171.878090 15.432507" ;# 
+$ns_ at 300.010000 "$node_(69) switch OFF" ;# T_max_OFF  
+$ns_ at 295.858307 "$node_(93) setdest 3296.273248 891.398413 15.927207" ;# 
+#$ns_ at 296.020000 $node_(67) arrived_to 2660.000000 2730.000000  
+$ns_ at 296.020000 "$node_(67) switch OFF" ;# arrived_to  
+$ns_ at 297.020000 "$node_(67) setdest 0.010000 0.010000 1000000001.000000" ;# remove_from_area_upon__arrived_to
+$ns_ at 297.030000 "$node_(67) setdest 0.020000 0.020000 1000000001.000000" ;# nam_hack__force_remove
+$ns_ at 296.984866 "$node_(91) setdest 10.000000 1373.675676 16.367380" ;# 
+$ns_ at 300.010000 "$node_(91) switch OFF" ;# T_max_OFF  
+$ns_ at 299.081462 "$node_(93) setdest 3290.000000 1020.000000 12.955074" ;# 
+$ns_ at 300.010000 "$node_(93) switch OFF" ;# T_max_OFF  
+$ns_ at 299.576777 "$node_(33) setdest 597.299018 2183.861790 18.859074" ;# 
+$ns_ at 300.010000 "$node_(33) switch OFF" ;# T_max_OFF  
+$ns_ at 299.773230 "$node_(87) setdest 1071.000000 2103.000000 19.333470" ;# 
+$ns_ at 300.010000 "$node_(87) switch OFF" ;# T_max_OFF  
diff -Naur ns-3.21/src/wave/examples/vanet-routing-compare.cc ns-3.22/src/wave/examples/vanet-routing-compare.cc
--- ns-3.21/src/wave/examples/vanet-routing-compare.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/examples/vanet-routing-compare.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,2450 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 North Carolina State 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: Scott E. Carpenter <scarpen@ncsu.edu>
+ *
+ */
+
+/*
+ * This example program allows one to run vehicular ad hoc
+ * network (VANET) simulation scenarios in ns-3 to assess
+ * performance by evaluating different 802.11p MAC/PHY
+ * characteristics, propagation loss models (e.g. Friss,
+ * Two-Ray Ground, or ITU R-P.1411), and application traffic
+ * (e.g. Basic Safety Message) and/or routing traffic (e.g.
+ * DSDV, AODV, OLSR, or DSR) under either a synthetic highway
+ * scenario (i.e. a random waypoint mobility model) or by
+ * playing back mobility trace files (i.e. ns-2 movement files).
+ *
+ * The script draws from several ns-3 examples, including:
+ * /examples/routing/manet-routing-compare.cc
+ * /src/propagation/model/itu-r-1411-los-propagation-loss-model.cc
+ * /src/mobility/examples/ns2-mobility-trace.cc
+ * /src/wave/examples/wave-simple-80211p.cc
+ *
+ * The script allows many parameters to be modified and
+ * includes two predefined scenarios.  By default
+ * scenario=1 runs for 10 simulated seconds with 40 nodes
+ * (i.e. vehicles) moving according to RandomWaypointMobilityModel
+ * with a speed of 20 m/s and no pause time within a 300x1500 m
+ * region.  The WiFi is 802.11p with continuous access to a 10 MHz
+ * Control Channel (CH) for all traffic.  All nodes transmit a
+ * 200-byte safety message 10 times per second at 6 Mbps.
+ * Additionally, all nodes (optionally) attempt to
+ * continuously route 64-byte packets at an application
+ * rate of 2.048 Kbps to one of 10 other nodes,
+ * selected as sink nodes. The default routing protocol is AODV
+ * and the Two-Ray Ground loss model is used.
+ * The transmit power is set to 20 dBm and the transmission range
+ * for safety message packet delivery is 145 m.
+ *
+ * Scenario 2 plays back vehicular trace files in
+ * ns-2 movement format, and are taken from:
+ * http://www.lst.inf.ethz.ch/research/ad-hoc/car-traces/
+ * This scenario is 300 simulation seconds of 99
+ * vehicles respectively within the Unterstrass
+ * section of Zurich Switzerland that travel based on
+ * models derived from real traffic data.  Note that these
+ * scenarios can require a lot of clock time to complete.
+ *
+ * All parameters can be changed from their defaults (see
+ * --help) and changing simulation parameters can have dramatic
+ * impact on network performance.
+ *
+ * Several items can be output:
+ * - a CSV file of data reception statistics, output once per
+ *   second
+ * - final statistics, in a CSV file
+ * - dump of routing tables at 5 seconds into the simulation
+ * - ASCII trace file
+ * - PCAP trace files for each node
+ *
+ * Simulation scenarios can be defined and configuration
+ * settings can be saved using config-store (raw text)
+ * which can they be replayed again.  This is an easy way
+ * to define and save the settings for a scenario, and then
+ * re-execute the same scenario exactly, or to set up
+ * several different simulation scenarios.
+ * For example, to set up a scenario and save the configuration
+ * as "scenario1.txt":
+ *   ./waf --run "vanet-routing-compare --scenario=1 --saveconfig=scenario1.txt"
+ * Then, to re-play the scenario using the save configuration
+ * settings:
+ *   ./waf --run "vanet-routing-compare --loadconfig=scenario1.txt"
+ *
+ * Class Diagram:
+ *   main()
+ *     +--uses-- VanetRoutingExperiment
+ *                 +--is_a--- WifiApp
+ *                 +--uses--- ConfigStoreHelper
+ *                 +--has_a-- WaveBsmHelper
+ *                 |            +--has_a-- WaveBsmStats
+ *                 +--has_a-- RoutingHelper
+ *                 |            +--has_a--RoutingStats
+ *                 +--has_a-- WifiPhyStats
+ *
+ */
+
+#include <fstream>
+#include <iostream>
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/aodv-module.h"
+#include "ns3/olsr-module.h"
+#include "ns3/dsdv-module.h"
+#include "ns3/dsr-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/itu-r-1411-los-propagation-loss-model.h"
+#include "ns3/ocb-wifi-mac.h"
+#include "ns3/wifi-80211p-helper.h"
+#include "ns3/wave-mac-helper.h"
+#include "ns3/flow-monitor-module.h"
+#include "ns3/config-store-module.h"
+#include "ns3/integer.h"
+#include "ns3/wave-bsm-helper.h"
+#include "ns3/wave-helper.h"
+// future #include "ns3/topology.h"
+
+using namespace ns3;
+using namespace dsr;
+
+NS_LOG_COMPONENT_DEFINE ("vanet-routing-compare");
+
+/**
+ * \ingroup wave
+ * \brief The RoutingStats class manages collects statistics
+ * on routing data (application-data packet and byte counts)
+ * for the vehicular network
+ */
+class RoutingStats
+{
+public:
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  RoutingStats ();
+
+  /**
+   * \brief Returns the number of bytes received
+   * \return the number of bytes received
+   */
+  uint32_t GetRxBytes ();
+
+  /**
+   * \brief Returns the cumulative number of bytes received
+   * \return the cumulative number of bytes received
+   */
+  uint32_t GetCumulativeRxBytes ();
+
+  /**
+   * \brief Returns the count of packets received
+   * \return the count of packets received
+   */
+  uint32_t GetRxPkts ();
+
+  /**
+   * \brief Returns the cumulative count of packets received
+   * \return the cumulative count of packets received
+   */
+  uint32_t GetCumulativeRxPkts ();
+
+  /**
+   * \brief Increments the number of (application-data)
+   * bytes received, not including MAC/PHY overhead
+   * \param rxBytes the number of bytes received
+   * \return none
+   */
+  void IncRxBytes (uint32_t rxBytes);
+
+  /**
+   * \brief Increments the count of packets received
+   * \return none
+   */
+  void IncRxPkts ();
+
+  /**
+   * \brief Sets the number of bytes received.
+   * \param rxBytes the number of bytes received
+   * \return none
+   */
+  void SetRxBytes (uint32_t rxBytes);
+
+  /**
+   * \brief Sets the number of packets received
+   * \param rxPkts the number of packets received
+   * \return none
+   */
+  void SetRxPkts (uint32_t rxPkts);
+
+  /**
+   * \brief Returns the number of bytes transmitted
+   * \return the number of bytes transmitted
+   */
+  uint32_t GetTxBytes ();
+
+  /**
+   * \brief Returns the cumulative number of bytes transmitted
+   * \param socket the receiving socket
+   * \return none
+   */
+  uint32_t GetCumulativeTxBytes ();
+
+  /**
+   * \brief Returns the number of packets transmitted
+   * \return the number of packets transmitted
+   */
+  uint32_t GetTxPkts ();
+
+  /**
+   * \brief Returns the cumulative number of packets transmitted
+   * \return the cumulative number of packets transmitted
+   */
+  uint32_t GetCumulativeTxPkts ();
+
+  /**
+   * \brief Increment the number of bytes transmitted
+   * \param txBytes the number of addtional bytes transmitted
+   * \return none
+   */
+  void IncTxBytes (uint32_t txBytes);
+
+  /**
+   * \brief Increment the count of packets transmitted
+   * \return none
+   */
+  void IncTxPkts ();
+
+  /**
+   * \brief Sets the number of bytes transmitted
+   * \param txBytes the number of bytes transmitted
+   * \return none
+   */
+  void SetTxBytes (uint32_t txBytes);
+
+  /**
+   * \brief Sets the number of packets transmitted
+   * \param txPkts the number of packets transmitted
+   * \return none
+   */
+  void SetTxPkts (uint32_t txPkts);
+
+private:
+  uint32_t m_RxBytes;
+  uint32_t m_cumulativeRxBytes;
+  uint32_t m_RxPkts;
+  uint32_t m_cumulativeRxPkts;
+  uint32_t m_TxBytes;
+  uint32_t m_cumulativeTxBytes;
+  uint32_t m_TxPkts;
+  uint32_t m_cumulativeTxPkts;
+};
+
+RoutingStats::RoutingStats ()
+  : m_RxBytes (0),
+    m_cumulativeRxBytes (0),
+    m_RxPkts (0),
+    m_cumulativeRxPkts (0)
+{
+}
+
+uint32_t
+RoutingStats::GetRxBytes ()
+{
+  return m_RxBytes;
+}
+
+uint32_t
+RoutingStats::GetCumulativeRxBytes ()
+{
+  return m_cumulativeRxBytes;
+}
+
+uint32_t
+RoutingStats::GetRxPkts ()
+{
+  return m_RxPkts;
+}
+
+uint32_t
+RoutingStats::GetCumulativeRxPkts ()
+{
+  return m_cumulativeRxPkts;
+}
+
+void
+RoutingStats::IncRxBytes (uint32_t rxBytes)
+{
+  m_RxBytes += rxBytes;
+  m_cumulativeRxBytes += rxBytes;
+}
+
+void
+RoutingStats::IncRxPkts ()
+{
+  m_RxPkts++;
+  m_cumulativeRxPkts++;
+}
+
+void
+RoutingStats::SetRxBytes (uint32_t rxBytes)
+{
+  m_RxBytes = rxBytes;
+}
+
+void
+RoutingStats::SetRxPkts (uint32_t rxPkts)
+{
+  m_RxPkts = rxPkts;
+}
+
+uint32_t
+RoutingStats::GetTxBytes ()
+{
+  return m_TxBytes;
+}
+
+uint32_t
+RoutingStats::GetCumulativeTxBytes ()
+{
+  return m_cumulativeTxBytes;
+}
+
+uint32_t
+RoutingStats::GetTxPkts ()
+{
+  return m_TxPkts;
+}
+
+uint32_t
+RoutingStats::GetCumulativeTxPkts ()
+{
+  return m_cumulativeTxPkts;
+}
+
+void
+RoutingStats::IncTxBytes (uint32_t txBytes)
+{
+  m_TxBytes += txBytes;
+  m_cumulativeTxBytes += txBytes;
+}
+
+void
+RoutingStats::IncTxPkts ()
+{
+  m_TxPkts++;
+  m_cumulativeTxPkts++;
+}
+
+void
+RoutingStats::SetTxBytes (uint32_t txBytes)
+{
+  m_TxBytes = txBytes;
+}
+
+void
+RoutingStats::SetTxPkts (uint32_t txPkts)
+{
+  m_TxPkts = txPkts;
+}
+
+/**
+ * \ingroup wave
+ * \brief The RoutingHelper class generates routing data between
+ * nodes (vehicles) and uses the RoutingStats class to collect statistics
+ * on routing data (application-data packet and byte counts).
+ * A routing protocol is configured, and all nodes attempt to send
+ * (i.e. route) small packets to another node, which acts as
+ * data sinks.  Not all nodes act as data sinks.
+ * for the vehicular network
+ */
+class RoutingHelper : public Object
+{
+public:
+  /**
+   * \brief Get class TypeId
+   * \return the TypeId for the class
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  RoutingHelper ();
+
+  /**
+   * \brief Destructor
+   * \return none
+   */
+  virtual ~RoutingHelper ();
+
+  /**
+   * \brief Installs routing funcationality on nodes and their
+   * devices and interfaces.
+   * \param c node container
+   * \param d net device container
+   * \param i IPv4 interface container
+   * \param totalTime the total time that nodes should attempt to
+   * route data
+   * \param protocol the routing protocol (1=OLSR;2=AODV;3=DSDV;4=DSR)
+   * \param nSinks the number of nodes which will act as data sinks
+   * \param routingTables dump routing tables at t=5 seconds (0=no;1=yes)
+   * \return none
+   */
+  void Install (NodeContainer & c,
+                NetDeviceContainer & d,
+                Ipv4InterfaceContainer & i,
+                double totalTime,
+                int protocol,
+                uint32_t nSinks,
+                int routingTables);
+
+  /**
+   * \brief Trace the receipt of an on-off-application generated packet
+   * \param context this object
+   * \param packet a received packet
+   * \return none
+   */
+  void OnOffTrace (std::string context, Ptr<const Packet> packet);
+
+  /**
+   * \brief Returns the RoutingStats instance
+   * \return the RoutingStats instance
+   */
+  RoutingStats & GetRoutingStats ();
+
+  /**
+   * \brief Enable/disable logging
+   * \param log non-zero to enable logging
+   * \return none
+   */
+  void SetLogging (int log);
+
+private:
+  /**
+   * \brief Sets up the protocol protocol on the nodes
+   * \param c node container
+   * \return none
+   */
+  void SetupRoutingProtocol (NodeContainer & c);
+
+  /**
+   * \brief Assigns IPv4 addresses to net devices and their interfaces
+   * \param d net device container
+   * \param adhocTxInterfaces IPv4 interface container
+   * \return none
+   */
+  void AssignIpAddresses (NetDeviceContainer & d,
+                          Ipv4InterfaceContainer & adhocTxInterfaces);
+
+  /**
+   * \brief Sets up routing messages on the nodes and their interfaces
+   * \param c node container
+   * \param adhocTxInterfaces IPv4 interface container
+   * \return none
+   */
+  void SetupRoutingMessages (NodeContainer & c,
+                             Ipv4InterfaceContainer & adhocTxInterfaces);
+
+  /**
+   * \brief Sets up a routing packet for tranmission
+   * \param addr destination address
+   * \parm node source node
+   * \return Socket to be used for sending/receiving a routed data packet
+   */
+  Ptr<Socket> SetupRoutingPacketReceive (Ipv4Address addr, Ptr<Node> node);
+
+  /**
+   * \brief Process a received routing packet
+   * \param socket the receiving socket
+   * \return none
+   */
+  void ReceiveRoutingPacket (Ptr<Socket> socket);
+
+  double m_TotalSimTime;        // seconds
+  uint32_t m_protocol;       // routing protocol; 0=NONE, 1=OLSR, 2=AODV, 3=DSDV, 4=DSR
+  uint32_t m_port;
+  uint32_t m_nSinks;              // number of sink nodes (< all nodes)
+  int m_routingTables;      // dump routing table (at t=5 sec).  0=No, 1=Yes
+  RoutingStats routingStats;
+  std::string m_protocolName;
+  int m_log;
+};
+
+NS_OBJECT_ENSURE_REGISTERED (RoutingHelper);
+
+TypeId
+RoutingHelper::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::RoutingHelper")
+    .SetParent<Object> ()
+    .AddConstructor<RoutingHelper> ();
+  return tid;
+}
+
+RoutingHelper::RoutingHelper ()
+  : m_TotalSimTime (300.01),
+    m_protocol (0),
+    m_port (9),
+    m_nSinks (0),
+    m_routingTables (0),
+    m_log (0)
+{
+}
+
+RoutingHelper::~RoutingHelper ()
+{
+}
+
+void
+RoutingHelper::Install (NodeContainer & c,
+                        NetDeviceContainer & d,
+                        Ipv4InterfaceContainer & i,
+                        double totalTime,
+                        int protocol,
+                        uint32_t nSinks,
+                        int routingTables)
+{
+  m_TotalSimTime = totalTime;
+  m_protocol = protocol;
+  m_nSinks = nSinks;
+  m_routingTables = routingTables;
+
+  SetupRoutingProtocol (c);
+  AssignIpAddresses (d, i);
+  SetupRoutingMessages (c, i);
+}
+
+Ptr<Socket>
+RoutingHelper::SetupRoutingPacketReceive (Ipv4Address addr, Ptr<Node> node)
+{
+  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+  Ptr<Socket> sink = Socket::CreateSocket (node, tid);
+  InetSocketAddress local = InetSocketAddress (addr, m_port);
+  sink->Bind (local);
+  sink->SetRecvCallback (MakeCallback (&RoutingHelper::ReceiveRoutingPacket, this));
+
+  return sink;
+}
+
+void
+RoutingHelper::SetupRoutingProtocol (NodeContainer & c)
+{
+  AodvHelper aodv;
+  OlsrHelper olsr;
+  DsdvHelper dsdv;
+  DsrHelper dsr;
+  DsrMainHelper dsrMain;
+  Ipv4ListRoutingHelper list;
+  InternetStackHelper internet;
+
+  Time rtt = Time (5.0);
+  AsciiTraceHelper ascii;
+  Ptr<OutputStreamWrapper> rtw = ascii.CreateFileStream ("routing_table");
+
+  switch (m_protocol)
+    {
+    case 1:
+      if (m_routingTables != 0)
+        {
+          olsr.PrintRoutingTableAllAt (rtt, rtw);
+        }
+      list.Add (olsr, 100);
+      m_protocolName = "OLSR";
+      break;
+    case 0:
+    case 2:
+      if (m_routingTables != 0)
+        {
+          aodv.PrintRoutingTableAllAt (rtt, rtw);
+        }
+      list.Add (aodv, 100);
+      if (m_protocol == 0)
+        {
+          m_protocolName = "NONE";
+        }
+      else
+        {
+          m_protocolName = "AODV";
+        }
+      break;
+    case 3:
+      if (m_routingTables != 0)
+        {
+          dsdv.PrintRoutingTableAllAt (rtt, rtw);
+        }
+      list.Add (dsdv, 100);
+      m_protocolName = "DSDV";
+      break;
+    case 4:
+      m_protocolName = "DSR";
+      break;
+    default:
+      NS_FATAL_ERROR ("No such protocol:" << m_protocol);
+    }
+
+  if (m_protocol < 4)
+    {
+      internet.SetRoutingHelper (list);
+      internet.Install (c);
+    }
+  else if (m_protocol == 4)
+    {
+      internet.Install (c);
+      dsrMain.Install (dsr, c);
+    }
+
+  if (m_log != 0)
+    {
+      NS_LOG_UNCOND ("Routing Setup for " << m_protocolName);
+    }
+}
+
+void
+RoutingHelper::AssignIpAddresses (NetDeviceContainer & d,
+                                  Ipv4InterfaceContainer & adhocTxInterfaces)
+{
+  NS_LOG_INFO ("Assigning IP addresses");
+  Ipv4AddressHelper addressAdhoc;
+  // we may have a lot of nodes, and want them all
+  // in same subnet, to support broadcast
+  addressAdhoc.SetBase ("10.1.0.0", "255.255.0.0");
+  adhocTxInterfaces = addressAdhoc.Assign (d);
+}
+
+void
+RoutingHelper::SetupRoutingMessages (NodeContainer & c,
+                                     Ipv4InterfaceContainer & adhocTxInterfaces)
+{
+  // Setup routing transmissions
+  OnOffHelper onoff1 ("ns3::UdpSocketFactory",Address ());
+  onoff1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"));
+  onoff1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0.0]"));
+
+  Ptr<UniformRandomVariable> var = CreateObject<UniformRandomVariable> ();
+  int64_t stream = 2;
+  var->SetStream (stream);
+  for (uint32_t i = 0; i < m_nSinks; i++)
+    {
+      // protocol == 0 means no routing data, WAVE BSM only
+      // so do not set up sink
+      if (m_protocol != 0)
+        {
+          Ptr<Socket> sink = SetupRoutingPacketReceive (adhocTxInterfaces.GetAddress (i), c.Get (i));
+        }
+
+      AddressValue remoteAddress (InetSocketAddress (adhocTxInterfaces.GetAddress (i), m_port));
+      onoff1.SetAttribute ("Remote", remoteAddress);
+
+      ApplicationContainer temp = onoff1.Install (c.Get (i + m_nSinks));
+      temp.Start (Seconds (var->GetValue (1.0,2.0)));
+      temp.Stop (Seconds (m_TotalSimTime));
+    }
+}
+
+static inline std::string
+PrintReceivedRoutingPacket (Ptr<Socket> socket, Ptr<Packet> packet)
+{
+  SocketAddressTag tag;
+  bool found;
+  found = packet->PeekPacketTag (tag);
+  std::ostringstream oss;
+
+  oss << Simulator::Now ().GetSeconds () << " " << socket->GetNode ()->GetId ();
+
+  if (found)
+    {
+      InetSocketAddress addr = InetSocketAddress::ConvertFrom (tag.GetAddress ());
+      oss << " received one packet from " << addr.GetIpv4 ();
+    }
+  else
+    {
+      oss << " received one packet!";
+    }
+  return oss.str ();
+}
+
+void
+RoutingHelper::ReceiveRoutingPacket (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  while ((packet = socket->Recv ()))
+    {
+      // application data, for goodput
+      uint32_t RxRoutingBytes = packet->GetSize ();
+      GetRoutingStats ().IncRxBytes (RxRoutingBytes);
+      GetRoutingStats ().IncRxPkts ();
+      if (m_log != 0)
+        {
+          NS_LOG_UNCOND (m_protocolName + " " + PrintReceivedRoutingPacket (socket, packet));
+        }
+    }
+}
+
+void
+RoutingHelper::OnOffTrace (std::string context, Ptr<const Packet> packet)
+{
+  uint32_t pktBytes = packet->GetSize ();
+  routingStats.IncTxBytes (pktBytes);
+}
+
+RoutingStats &
+RoutingHelper::GetRoutingStats ()
+{
+  return routingStats;
+}
+
+void
+RoutingHelper::SetLogging (int log)
+{
+  m_log = log;
+}
+
+/**
+ * \ingroup wave
+ * \brief The WifiPhyStats class collects Wifi MAC/PHY statistics
+ */
+class WifiPhyStats : public Object
+{
+public:
+  /**
+   * \brief Gets the class TypeId
+   * \return the class TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  WifiPhyStats ();
+
+  /**
+   * \brief Destructor
+   * \return none
+   */
+  virtual ~WifiPhyStats ();
+
+  /**
+   * \brief Returns the number of bytes that have been transmitted
+   * (this includes MAC/PHY overhead)
+   * \return the number of bytes transmitted
+   */
+  uint32_t GetTxBytes ();
+
+  /**
+   * \brief Callback signiture for Phy/Tx trace
+   * \param context this object
+   * \param packet packet transmitted
+   * \param mode wifi mode
+   * \param preamble wifi preamble
+   * \param txPower transmission power
+   * \return none
+   */
+  void PhyTxTrace (std::string context, Ptr<const Packet> packet, WifiMode mode, WifiPreamble preamble, uint8_t txPower);
+
+  /**
+   * \brief Callback signiture for Phy/TxDrop
+   * \param context this object
+   * \param packet the tx packet being dropped
+   * \return none
+   */
+  void PhyTxDrop (std::string context, Ptr<const Packet> packet);
+
+  /**
+   * \brief Callback signiture for Phy/RxDrop
+   * \param context this object
+   * \param packet the rx packet being dropped
+   * \return none
+   */
+  void PhyRxDrop (std::string context, Ptr<const Packet> packet);
+
+private:
+  uint32_t m_phyTxPkts;
+  uint32_t m_phyTxBytes;
+};
+
+NS_OBJECT_ENSURE_REGISTERED (WifiPhyStats);
+
+TypeId
+WifiPhyStats::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::WifiPhyStats")
+    .SetParent<Object> ()
+    .AddConstructor<WifiPhyStats> ();
+  return tid;
+}
+
+WifiPhyStats::WifiPhyStats ()
+  : m_phyTxPkts (0),
+    m_phyTxBytes (0)
+{
+}
+
+WifiPhyStats::~WifiPhyStats ()
+{
+}
+
+void
+WifiPhyStats::PhyTxTrace (std::string context, Ptr<const Packet> packet, WifiMode mode, WifiPreamble preamble, uint8_t txPower)
+{
+  NS_LOG_FUNCTION (this << context << packet << "PHYTX mode=" << mode );
+  ++m_phyTxPkts;
+  uint32_t pktSize = packet->GetSize ();
+  m_phyTxBytes += pktSize;
+
+  //NS_LOG_UNCOND ("Received PHY size=" << pktSize);
+}
+
+void
+WifiPhyStats::PhyTxDrop (std::string context, Ptr<const Packet> packet)
+{
+  NS_LOG_UNCOND ("PHY Tx Drop");
+}
+
+void
+WifiPhyStats::PhyRxDrop (std::string context, Ptr<const Packet> packet)
+{
+  NS_LOG_UNCOND ("PHY Rx Drop");
+}
+
+uint32_t
+WifiPhyStats::GetTxBytes ()
+{
+  return m_phyTxBytes;
+}
+
+/**
+ * \ingroup wave
+ * \brief The WifiApp class enforces program flow for ns-3 wifi applications
+ */
+class WifiApp
+{
+public:
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  WifiApp ();
+
+  /**
+   * \brief Destructor
+   * \return none
+   */
+  virtual ~WifiApp ();
+
+  /**
+   * \brief Enacts simulation of an ns-3 wifi application
+   * \param argc program arguments count
+   * \param argv program arguments
+   * \return none
+   */
+  void Simulate (int argc, char **argv);
+
+protected:
+  /**
+   * \brief Sets default attribute values
+   * \return none
+   */
+  virtual void SetDefaultAttributeValues ();
+
+  /**
+   * \brief Process command line arguments
+   * \param argc program arguments count
+   * \param argv program arguments
+   * \return none
+   */
+  virtual void ParseCommandLineArguments (int argc, char **argv);
+
+  /**
+   * \brief Configure nodes
+   * \return none
+   */
+  virtual void ConfigureNodes ();
+
+  /**
+   * \brief Configure channels
+   * \return none
+   */
+  virtual void ConfigureChannels ();
+
+  /**
+   * \brief Configure devices
+   * \return none
+   */
+  virtual void ConfigureDevices ();
+
+  /**
+   * \brief Configure mobility
+   * \return none
+   */
+  virtual void ConfigureMobility ();
+
+  /**
+   * \brief Configure applications
+   * \return none
+   */
+  virtual void ConfigureApplications ();
+
+  /**
+   * \brief Configure tracing
+   * \return none
+   */
+  virtual void ConfigureTracing ();
+
+  /**
+   * \brief Run the simulation
+   * \return none
+   */
+  virtual void RunSimulation ();
+
+  /**
+   * \brief Process outputs
+   * \return none
+   */
+  virtual void ProcessOutputs ();
+};
+
+WifiApp::WifiApp ()
+{
+}
+
+WifiApp::~WifiApp ()
+{
+}
+
+void
+WifiApp::Simulate (int argc, char **argv)
+{
+  // Simulator Program Flow:
+  // (source:  NS-3 Annual Meeting, May, 2014, session 2 slides 6, 28)
+  //   (HandleProgramInputs:)
+  //   SetDefaultAttributeValues
+  //   ParseCommandLineArguments
+  //   (ConfigureTopology:)
+  //   ConfigureNodes
+  //   ConfigureChannels
+  //   ConfigureDevices
+  //   ConfigureMobility
+  //   ConfigureApplications
+  //     e.g AddInternetStackToNodes
+  //         ConfigureIpAddressingAndRouting
+  //         configureSendMessages
+  //   ConfigureTracing
+  //   RunSimulation
+  //   ProcessOutputs
+
+  SetDefaultAttributeValues ();
+  ParseCommandLineArguments (argc, argv);
+  ConfigureNodes ();
+  ConfigureChannels ();
+  ConfigureDevices ();
+  ConfigureMobility ();
+  ConfigureApplications ();
+  ConfigureTracing ();
+  RunSimulation ();
+  ProcessOutputs ();
+}
+
+void
+WifiApp::SetDefaultAttributeValues ()
+{
+}
+
+void
+WifiApp::ParseCommandLineArguments (int argc, char **argv)
+{
+}
+
+void
+WifiApp::ConfigureNodes ()
+{
+}
+
+void
+WifiApp::ConfigureChannels ()
+{
+}
+
+void
+WifiApp::ConfigureDevices ()
+{
+}
+
+void
+WifiApp::ConfigureMobility ()
+{
+}
+
+void
+WifiApp::ConfigureApplications ()
+{
+}
+
+void
+WifiApp::ConfigureTracing ()
+{
+}
+
+void
+WifiApp::RunSimulation ()
+{
+}
+
+void
+WifiApp::ProcessOutputs ()
+{
+}
+
+/**
+ * \ingroup wave
+ * \brief The ConfigStoreHelper class simplifies config-store raw text load and save
+ */
+class ConfigStoreHelper
+{
+public:
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  ConfigStoreHelper ();
+
+  /**
+   * \brief Loads a saved config-store raw text configuration from a given named file
+   * \param configFilename the name of the config-store raw text file
+   * \return none
+   */
+  void LoadConfig (std::string configFilename);
+
+  /**
+   * \brief Saves a configuration to a given named config-store raw text configuration file
+   * \param configFilename the name of the config-store raw text file
+   * \return none
+   */
+  void SaveConfig (std::string configFilename);
+};
+
+ConfigStoreHelper::ConfigStoreHelper ()
+{
+}
+
+void
+ConfigStoreHelper::LoadConfig (std::string configFilename)
+{
+  // Input config store from txt format
+  Config::SetDefault ("ns3::ConfigStore::Filename", StringValue (configFilename));
+  Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("RawText"));
+  Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Load"));
+  ConfigStore inputConfig;
+  inputConfig.ConfigureDefaults ();
+  //inputConfig.ConfigureAttributes ();
+}
+
+void
+ConfigStoreHelper::SaveConfig (std::string configFilename)
+{
+  // only save if a non-empty filename has been specified
+  if (configFilename.compare ("") != 0)
+    {
+      // Output config store to txt format
+      Config::SetDefault ("ns3::ConfigStore::Filename", StringValue (configFilename));
+      Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("RawText"));
+      Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
+      ConfigStore outputConfig;
+      outputConfig.ConfigureDefaults ();
+      //outputConfig.ConfigureAttributes ();
+    }
+}
+
+/**
+ * \ingroup wave
+ * \brief The VanetRoutingExperiment class implements a wifi app that
+ * allows VANET routing experiments to be simulated
+ */
+class VanetRoutingExperiment : public WifiApp
+{
+public:
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  VanetRoutingExperiment ();
+
+protected:
+  /**
+   * \brief Sets default attribute values
+   * \return none
+   */
+  virtual void SetDefaultAttributeValues ();
+
+  /**
+   * \brief Process command line arguments
+   * \param argc program arguments count
+   * \param argv program arguments
+   * \return none
+   */
+  virtual void ParseCommandLineArguments (int argc, char **argv);
+
+  /**
+   * \brief Configure nodes
+   * \return none
+   */
+  virtual void ConfigureNodes ();
+
+  /**
+   * \brief Configure channels
+   * \return none
+   */
+  virtual void ConfigureChannels ();
+
+  /**
+   * \brief Configure devices
+   * \return none
+   */
+  virtual void ConfigureDevices ();
+
+  /**
+   * \brief Configure mobility
+   * \return none
+   */
+  virtual void ConfigureMobility ();
+
+  /**
+   * \brief Configure applications
+   * \return none
+   */
+  virtual void ConfigureApplications ();
+
+  /**
+   * \brief Configure tracing
+   * \return none
+   */
+  virtual void ConfigureTracing ();
+
+  /**
+   * \brief Run the simulation
+   * \return none
+   */
+  virtual void RunSimulation ();
+
+  /**
+   * \brief Process outputs
+   * \return none
+   */
+  virtual void ProcessOutputs ();
+
+private:
+  /**
+   * \brief Run the simulation
+   * \return none
+   */
+  void Run ();
+
+  /**
+   * \brief Run the simulation
+   * \return none
+   */
+  void CommandSetup (int argc, char **argv);
+
+  /**
+   * \brief Checks the throughput and outputs summary to CSV file1.
+   * This is scheduled and called once per second
+   * \return none
+   */
+  void CheckThroughput ();
+
+  /**
+   * \brief Set up log file
+   * \return none
+   */
+  void SetupLogFile ();
+
+  /**
+   * \brief Set up logging
+   * \return none
+   */
+  void SetupLogging ();
+
+  /**
+   * \brief Configure default attributes
+   * \return none
+   */
+  void ConfigureDefaults ();
+
+  /**
+   * \brief Set up the adhoc mobility nodes
+   * \return none
+   */
+  void SetupAdhocMobilityNodes ();
+
+  /**
+   * \brief Set up the adhoc devices
+   * \return none
+   */
+  void SetupAdhocDevices ();
+
+  /**
+   * \brief Set up generation of IEEE 1609 WAVE messages,
+   * as a Basic Safety Message (BSM).  The BSM is typically
+   * a ~200-byte packets broadcast by all vehicles at a nominal
+   * rate of 10 Hz
+   * \return none
+   */
+  void SetupWaveMessages ();
+
+  /**
+   * \brief Set up generation of packets to be routed
+   * through the vehicular network
+   * \return none
+   */
+  void SetupRoutingMessages ();
+
+  /**
+   * \brief Set up a prescribed scenario
+   * \return none
+   */
+  void SetupScenario ();
+
+  /**
+   * \brief Write the header line to the CSV file1
+   * \return none
+   */
+  void WriteCsvHeader ();
+
+  /**
+   * \brief Set up configuration parameter from the global variables
+   * \return none
+   */
+  void SetConfigFromGlobals ();
+
+  /**
+   * \brief Set up the global variables from the configuration parameters
+   * \return none
+   */
+  void SetGlobalsFromConfig ();
+
+  static void
+  CourseChange (std::ostream *os, std::string foo, Ptr<const MobilityModel> mobility);
+
+  uint32_t m_port;
+  std::string m_CSVfileName;
+  std::string m_CSVfileName2;
+  uint32_t m_nSinks;
+  std::string m_protocolName;
+  double m_txp;
+  bool m_traceMobility;
+  uint32_t m_protocol;
+
+  uint32_t m_lossModel;
+  uint32_t m_fading;
+  std::string m_lossModelName;
+
+  std::string m_phyMode;
+  uint32_t m_80211mode;
+
+  std::string m_traceFile;
+  std::string m_logFile;
+  uint32_t m_mobility;
+  uint32_t m_nNodes;
+  double m_TotalSimTime;
+  std::string m_rate;
+  std::string m_phyModeB;
+  std::string m_trName;
+  int m_nodeSpeed; //in m/s
+  int m_nodePause; //in s
+  uint32_t m_wavePacketSize; // bytes
+  double m_waveInterval; // seconds
+  int m_verbose;
+  std::ofstream m_os;
+  NetDeviceContainer m_adhocTxDevices;
+  Ipv4InterfaceContainer m_adhocTxInterfaces;
+  uint32_t m_scenario;
+  double m_gpsAccuracyNs;
+  double m_txMaxDelayMs;
+  int m_routingTables;
+  int m_asciiTrace;
+  int m_pcap;
+  std::string m_loadConfigFilename;
+  std::string m_saveConfigFilename;
+
+  WaveBsmHelper m_waveBsmHelper;
+  Ptr<RoutingHelper> m_routingHelper;
+  Ptr<WifiPhyStats> m_wifiPhyStats;
+  int m_log;
+  // used to get consistent random numbers across scenarios
+  int64_t m_streamIndex;
+  NodeContainer m_adhocTxNodes;
+  double m_txSafetyRange1;
+  double m_txSafetyRange2;
+  double m_txSafetyRange3;
+  double m_txSafetyRange4;
+  double m_txSafetyRange5;
+  double m_txSafetyRange6;
+  double m_txSafetyRange7;
+  double m_txSafetyRange8;
+  double m_txSafetyRange9;
+  double m_txSafetyRange10;
+  std::vector <double> m_txSafetyRanges;
+  std::string m_exp;
+  int m_cumulativeBsmCaptureStart;
+};
+
+VanetRoutingExperiment::VanetRoutingExperiment ()
+  : m_port (9),
+    m_CSVfileName ("vanet-routing.output.csv"),
+    m_CSVfileName2 ("vanet-routing.output2.csv"),
+    m_nSinks (10),
+    m_protocolName ("protocol"),
+    m_txp (20),
+    m_traceMobility (false),
+    // AODV
+    m_protocol (2),
+    // Two-Ray ground
+    m_lossModel (3),
+    m_fading (0),
+    m_lossModelName (""),
+    m_phyMode ("OfdmRate6MbpsBW10MHz"),
+    // 1=802.11p
+    m_80211mode (1),
+    m_traceFile (""),
+    m_logFile ("low_ct-unterstrass-1day.filt.5.adj.log"),
+    m_mobility (1),
+    m_nNodes (156),
+    m_TotalSimTime (300.01),
+    m_rate ("2048bps"),
+    m_phyModeB ("DsssRate11Mbps"),
+    m_trName ("vanet-routing-compare"),
+    m_nodeSpeed (20),
+    m_nodePause (0),
+    m_wavePacketSize (200),
+    m_waveInterval (0.1),
+    m_verbose (0),
+    m_scenario (1),
+    m_gpsAccuracyNs (40),
+    m_txMaxDelayMs (10),
+    m_routingTables (0),
+    m_asciiTrace (0),
+    m_pcap (0),
+    m_loadConfigFilename ("load-config.txt"),
+    m_saveConfigFilename (""),
+    m_log (0),
+    m_streamIndex (0),
+    m_adhocTxNodes (),
+    m_txSafetyRange1 (50.0),
+    m_txSafetyRange2 (100.0),
+    m_txSafetyRange3 (150.0),
+    m_txSafetyRange4 (200.0),
+    m_txSafetyRange5 (250.0),
+    m_txSafetyRange6 (300.0),
+    m_txSafetyRange7 (350.0),
+    m_txSafetyRange8 (400.0),
+    m_txSafetyRange9 (450.0),
+    m_txSafetyRange10 (500.0),
+    m_txSafetyRanges (),
+    m_exp (""),
+    m_cumulativeBsmCaptureStart (0)
+{
+  m_wifiPhyStats = CreateObject<WifiPhyStats> ();
+  m_routingHelper = CreateObject<RoutingHelper> ();
+
+  // set to non-zero value to enable
+  // simply uncond logging during simulation run
+  m_log = 1;
+}
+
+void
+VanetRoutingExperiment::SetDefaultAttributeValues ()
+{
+  // handled in constructor
+}
+
+// important configuration items stored in global values
+static ns3::GlobalValue g_port ("VRCport",
+                                "Port",
+                                ns3::UintegerValue (9),
+                                ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_nSinks ("VRCnSinks",
+                                  "Number of sink nodes for routing non-BSM traffic",
+                                  ns3::UintegerValue (10),
+                                  ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_traceMobility ("VRCtraceMobility",
+                                         "Trace mobility 1=yes;0=no",
+                                         ns3::UintegerValue (0),
+                                         ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_protocol ("VRCprotocol",
+                                    "Routing protocol",
+                                    ns3::UintegerValue (2),
+                                    ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_lossModel ("VRClossModel",
+                                     "Propagation Loss Model",
+                                     ns3::UintegerValue (3),
+                                     ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_fading ("VRCfading",
+                                  "Fast Fading Model",
+                                  ns3::UintegerValue (0),
+                                  ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_80211mode ("VRC80211mode",
+                                     "802.11 mode (0=802.11a;1=802.11p)",
+                                     ns3::UintegerValue (1),
+                                     ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_mobility ("VRCmobility",
+                                    "Mobility mode 0=random waypoint;1=mobility trace file",
+                                    ns3::UintegerValue (1),
+                                    ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_nNodes ("VRCnNodes",
+                                  "Number of nodes (vehicles)",
+                                  ns3::UintegerValue (156),
+                                  ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_nodeSpeed ("VRCnodeSpeed",
+                                     "Node speed (m/s) for RWP model",
+                                     ns3::UintegerValue (20),
+                                     ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_nodePause ("VRCnodePause",
+                                     "Node pause time (s) for RWP model",
+                                     ns3::UintegerValue (0),
+                                     ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_wavePacketSize ("VRCwavePacketSize",
+                                          "Size in bytes of WAVE BSM",
+                                          ns3::UintegerValue (200),
+                                          ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_verbose ("VRCverbose",
+                                   "Verbose 0=no;1=yes",
+                                   ns3::UintegerValue (0),
+                                   ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_scenario ("VRCscenario",
+                                    "Scenario",
+                                    ns3::UintegerValue (1),
+                                    ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_routingTables ("VRCroutingTables",
+                                         "Dump routing tables at t=5 seconds 0=no;1=yes",
+                                         ns3::UintegerValue (0),
+                                         ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_asciiTrace ("VRCasciiTrace",
+                                      "Dump ASCII trace 0=no;1=yes",
+                                      ns3::UintegerValue (0),
+                                      ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_pcap ("VRCpcap",
+                                "Generate PCAP files 0=no;1=yes",
+                                ns3::UintegerValue (0),
+                                ns3::MakeUintegerChecker<uint32_t> ());
+static ns3::GlobalValue g_cumulativeBsmCaptureStart ("VRCcumulativeBsmCaptureStart",
+                                                     "Simulation starte time for capturing cumulative BSM",
+                                                     ns3::UintegerValue (0),
+                                                     ns3::MakeUintegerChecker<uint32_t> ());
+
+static ns3::GlobalValue g_txSafetyRange1 ("VRCtxSafetyRange1",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (50.0),
+                                          ns3::MakeDoubleChecker<double> ());
+
+static ns3::GlobalValue g_txSafetyRange2 ("VRCtxSafetyRange2",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (100.0),
+                                          ns3::MakeDoubleChecker<double> ());
+
+static ns3::GlobalValue g_txSafetyRange3 ("VRCtxSafetyRange3",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (150.0),
+                                          ns3::MakeDoubleChecker<double> ());
+
+static ns3::GlobalValue g_txSafetyRange4 ("VRCtxSafetyRange4",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (200.0),
+                                          ns3::MakeDoubleChecker<double> ());
+
+static ns3::GlobalValue g_txSafetyRange5 ("VRCtxSafetyRange5",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (250.0),
+                                          ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_txSafetyRange6 ("VRCtxSafetyRange6",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (300.0),
+                                          ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_txSafetyRange7 ("VRCtxSafetyRange7",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (350.0),
+                                          ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_txSafetyRange8 ("VRCtxSafetyRange8",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (400.0),
+                                          ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_txSafetyRange9 ("VRCtxSafetyRange9",
+                                          "BSM range for PDR inclusion",
+                                          ns3::DoubleValue (450.0),
+                                          ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_txSafetyRange10 ("VRCtxSafetyRange10",
+                                           "BSM range for PDR inclusion",
+                                           ns3::DoubleValue (500.0),
+                                           ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_txp ("VRCtxp",
+                               "Transmission power dBm",
+                               ns3::DoubleValue (7.5),
+                               ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_totalTime ("VRCtotalTime",
+                                     "Total simulation time (s)",
+                                     ns3::DoubleValue (300.01),
+                                     ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_waveInterval ("VRCwaveInterval",
+                                        "Interval (s) between WAVE BSMs",
+                                        ns3::DoubleValue (0.1),
+                                        ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_gpsAccuracyNs ("VRCgpsAccuracyNs",
+                                         "GPS sync accuracy (ns)",
+                                         ns3::DoubleValue (40),
+                                         ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_txMaxDelayMs ("VRCtxMaxDelayMs",
+                                        "Tx May Delay (ms)",
+                                        ns3::DoubleValue (10),
+                                        ns3::MakeDoubleChecker<double> ());
+static ns3::GlobalValue g_CSVfileName ("VRCCSVfileName",
+                                       "CSV filename (for time series data)",
+                                       ns3::StringValue ("vanet-routing.output.csv"),
+                                       ns3::MakeStringChecker ());
+static ns3::GlobalValue g_CSVfileName2 ("VRCCSVfileName2",
+                                        "CSV filename 2 (for overall simulation scenario results)",
+                                        ns3::StringValue ("vanet-routing.output2.csv"),
+                                        ns3::MakeStringChecker ());
+static ns3::GlobalValue g_phyMode ("VRCphyMode",
+                                   "PHY mode (802.11p)",
+                                   ns3::StringValue ("OfdmRate6MbpsBW10MHz"),
+                                   ns3::MakeStringChecker ());
+static ns3::GlobalValue g_traceFile ("VRCtraceFile",
+                                     "Mobility trace filename",
+                                     ns3::StringValue ("./src/wave/examples/low_ct-unterstrass-1day.filt.5.adj.mob"),
+                                     ns3::MakeStringChecker ());
+static ns3::GlobalValue g_logFile ("VRClogFile",
+                                   "Log filename",
+                                   ns3::StringValue ("low_ct-unterstrass-1day.filt.5.adj.log"),
+                                   ns3::MakeStringChecker ());
+static ns3::GlobalValue g_rate ("VRCrate",
+                                "Data rate",
+                                ns3::StringValue ("2048bps"),
+                                ns3::MakeStringChecker ());
+static ns3::GlobalValue g_phyModeB ("VRCphyModeB",
+                                    "PHY mode (802.11a)",
+                                    ns3::StringValue ("DsssRate11Mbps"),
+                                    ns3::MakeStringChecker ());
+static ns3::GlobalValue g_trName ("VRCtrName",
+                                  "Trace name",
+                                  ns3::StringValue ("vanet-routing-compare"),
+                                  ns3::MakeStringChecker ());
+
+void
+VanetRoutingExperiment::ParseCommandLineArguments (int argc, char **argv)
+{
+  CommandSetup (argc, argv);
+  SetupScenario ();
+
+  // user may specify up to 10 different tx distances
+  // to be used for calculating different values of Packet
+  // Delivery Ratio (PDR). Used to see the effects of
+  // fading over distance
+  m_txSafetyRanges.resize (10, 0);
+  m_txSafetyRanges[0] = m_txSafetyRange1;
+  m_txSafetyRanges[1] = m_txSafetyRange2;
+  m_txSafetyRanges[2] = m_txSafetyRange3;
+  m_txSafetyRanges[3] = m_txSafetyRange4;
+  m_txSafetyRanges[4] = m_txSafetyRange5;
+  m_txSafetyRanges[5] = m_txSafetyRange6;
+  m_txSafetyRanges[6] = m_txSafetyRange7;
+  m_txSafetyRanges[7] = m_txSafetyRange8;
+  m_txSafetyRanges[8] = m_txSafetyRange9;
+  m_txSafetyRanges[9] = m_txSafetyRange10;
+
+  ConfigureDefaults ();
+
+  // we are done with all configuration
+  // save config-store, if requested
+  SetGlobalsFromConfig ();
+  ConfigStoreHelper configStoreHelper;
+  configStoreHelper.SaveConfig (m_saveConfigFilename);
+
+  m_waveBsmHelper.GetWaveBsmStats ()->SetLogging (m_log);
+  m_routingHelper->SetLogging (m_log);
+}
+
+void
+VanetRoutingExperiment::ConfigureNodes ()
+{
+  m_adhocTxNodes.Create (m_nNodes);
+}
+
+void
+VanetRoutingExperiment::ConfigureChannels ()
+{
+  // set up channel and devices
+  SetupAdhocDevices ();
+}
+
+void
+VanetRoutingExperiment::ConfigureDevices ()
+{
+  // devices are set up in SetupAdhocDevices(),
+  // called by ConfigureChannels()
+
+  // every device will have PHY callback for tracing
+  // which is used to determine the total amount of
+  // data transmitted, and then used to calculate
+  // the MAC/PHY overhead beyond the app-data
+  Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/Tx", MakeCallback (&WifiPhyStats::PhyTxTrace, m_wifiPhyStats));
+  // TxDrop, RxDrop not working yet.  Not sure what I'm doing wrong.
+  Config::Connect ("/NodeList/*/DeviceList/*/ns3::WifiNetDevice/Phy/PhyTxDrop", MakeCallback (&WifiPhyStats::PhyTxDrop, m_wifiPhyStats));
+  Config::Connect ("/NodeList/*/DeviceList/*/ns3::WifiNetDevice/Phy/PhyRxDrop", MakeCallback (&WifiPhyStats::PhyRxDrop, m_wifiPhyStats));
+}
+
+void
+VanetRoutingExperiment::ConfigureMobility ()
+{
+  SetupAdhocMobilityNodes ();
+}
+
+void
+VanetRoutingExperiment::ConfigureApplications ()
+{
+  // Traffic mix consists of:
+  // 1. routing data
+  // 2. Broadcasting of Basic Safety Message (BSM)
+  SetupRoutingMessages ();
+  SetupWaveMessages ();
+
+  // config trace to capture app-data (bytes) for
+  // routing data, subtracted and used for
+  // routing overhead
+  std::ostringstream oss;
+  oss.str ("");
+  oss << "/NodeList/*/ApplicationList/*/$ns3::OnOffApplication/Tx";
+  Config::Connect (oss.str (), MakeCallback (&RoutingHelper::OnOffTrace, m_routingHelper));
+}
+
+void
+VanetRoutingExperiment::ConfigureTracing ()
+{
+  WriteCsvHeader ();
+  SetupLogFile ();
+  SetupLogging ();
+
+  AsciiTraceHelper ascii;
+  MobilityHelper::EnableAsciiAll (ascii.CreateFileStream (m_trName + ".mob"));
+}
+
+void
+VanetRoutingExperiment::RunSimulation ()
+{
+  Run ();
+}
+
+void
+VanetRoutingExperiment::ProcessOutputs ()
+{
+  // calculate and output final results
+  double bsm_pdr1 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (1);
+  double bsm_pdr2 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (2);
+  double bsm_pdr3 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (3);
+  double bsm_pdr4 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (4);
+  double bsm_pdr5 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (5);
+  double bsm_pdr6 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (6);
+  double bsm_pdr7 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (7);
+  double bsm_pdr8 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (8);
+  double bsm_pdr9 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (9);
+  double bsm_pdr10 = m_waveBsmHelper.GetWaveBsmStats ()->GetCumulativeBsmPdr (10);
+
+  double averageRoutingGoodputKbps = 0.0;
+  uint32_t totalBytesTotal = m_routingHelper->GetRoutingStats ().GetCumulativeRxBytes ();
+  averageRoutingGoodputKbps = (((double) totalBytesTotal * 8.0) / m_TotalSimTime) / 1000.0;
+
+  // calculate MAC/PHY overhead (mac-phy-oh)
+  // total WAVE BSM bytes sent
+  uint32_t cumulativeWaveBsmBytes = m_waveBsmHelper.GetWaveBsmStats ()->GetTxByteCount ();
+  uint32_t cumulativeRoutingBytes = m_routingHelper->GetRoutingStats ().GetCumulativeTxBytes ();
+  uint32_t totalAppBytes = cumulativeWaveBsmBytes + cumulativeRoutingBytes;
+  uint32_t totalPhyBytes = m_wifiPhyStats->GetTxBytes ();
+  // mac-phy-oh = (total-phy-bytes - total-app-bytes) / total-phy-bytes
+  double mac_phy_oh = 0.0;
+  if (totalPhyBytes > 0)
+    {
+      mac_phy_oh = (double) (totalPhyBytes - totalAppBytes) / (double) totalPhyBytes;
+    }
+
+  if (m_log != 0)
+    {
+      NS_LOG_UNCOND ("BSM_PDR1=" << bsm_pdr1 << " BSM_PDR2=" << bsm_pdr2 << " BSM_PDR3=" << bsm_pdr3 << " BSM_PDR4=" << bsm_pdr4 << " BSM_PDR5=" << bsm_pdr5 << " BSM_PDR6=" << bsm_pdr6 << " BSM_PDR7=" << bsm_pdr7 << " BSM_PDR8=" << bsm_pdr8 << " BSM_PDR9=" << bsm_pdr9 << " BSM_PDR10=" << bsm_pdr10 << " Goodput=" << averageRoutingGoodputKbps << "Kbps MAC/PHY-oh=" << mac_phy_oh);
+
+    }
+
+  std::ofstream out (m_CSVfileName2.c_str (), std::ios::app);
+
+  out << bsm_pdr1 << ","
+      << bsm_pdr2 << ","
+      << bsm_pdr3 << ","
+      << bsm_pdr4 << ","
+      << bsm_pdr5 << ","
+      << bsm_pdr6 << ","
+      << bsm_pdr7 << ","
+      << bsm_pdr8 << ","
+      << bsm_pdr9 << ","
+      << bsm_pdr10 << ","
+      << averageRoutingGoodputKbps << ","
+      << mac_phy_oh << ""
+      << std::endl;
+
+  out.close ();
+
+  m_os.close (); // close log file
+}
+
+void
+VanetRoutingExperiment::Run ()
+{
+  NS_LOG_INFO ("Run Simulation.");
+
+  CheckThroughput ();
+
+  Simulator::Stop (Seconds (m_TotalSimTime));
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+// Prints actual position and velocity when a course change event occurs
+void
+VanetRoutingExperiment::
+CourseChange (std::ostream *os, std::string foo, Ptr<const MobilityModel> mobility)
+{
+  Vector pos = mobility->GetPosition (); // Get position
+  Vector vel = mobility->GetVelocity (); // Get velocity
+
+  pos.z = 1.5;
+
+  int nodeId = mobility->GetObject<Node> ()->GetId ();
+  double t = (Simulator::Now ()).GetSeconds ();
+  if (t >= 1.0)
+    {
+      WaveBsmHelper::GetNodesMoving ()[nodeId] = 1;
+    }
+
+  //NS_LOG_UNCOND ("Changing pos for node=" << nodeId << " at " << Simulator::Now () );
+
+  // Prints position and velocities
+  *os << Simulator::Now () << " POS: x=" << pos.x << ", y=" << pos.y
+      << ", z=" << pos.z << "; VEL:" << vel.x << ", y=" << vel.y
+      << ", z=" << vel.z << std::endl;
+}
+
+void
+VanetRoutingExperiment::CheckThroughput ()
+{
+  uint32_t bytesTotal = m_routingHelper->GetRoutingStats ().GetRxBytes ();
+  uint32_t packetsReceived = m_routingHelper->GetRoutingStats ().GetRxPkts ();
+  double kbps = (bytesTotal * 8.0) / 1000;
+  double wavePDR = 0.0;
+  int wavePktsSent = m_waveBsmHelper.GetWaveBsmStats ()->GetTxPktCount ();
+  int wavePktsReceived = m_waveBsmHelper.GetWaveBsmStats ()->GetRxPktCount ();
+  if (wavePktsSent > 0)
+    {
+      int wavePktsReceived = m_waveBsmHelper.GetWaveBsmStats ()->GetRxPktCount ();
+      wavePDR = (double) wavePktsReceived / (double) wavePktsSent;
+    }
+
+  int waveExpectedRxPktCount = m_waveBsmHelper.GetWaveBsmStats ()->GetExpectedRxPktCount (1);
+  int waveRxPktInRangeCount = m_waveBsmHelper.GetWaveBsmStats ()->GetRxPktInRangeCount (1);
+  double wavePDR1_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (1);
+  double wavePDR2_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (2);
+  double wavePDR3_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (3);
+  double wavePDR4_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (4);
+  double wavePDR5_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (5);
+  double wavePDR6_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (6);
+  double wavePDR7_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (7);
+  double wavePDR8_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (8);
+  double wavePDR9_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (9);
+  double wavePDR10_2 = m_waveBsmHelper.GetWaveBsmStats ()->GetBsmPdr (10);
+
+  // calculate MAC/PHY overhead (mac-phy-oh)
+  // total WAVE BSM bytes sent
+  uint32_t cumulativeWaveBsmBytes = m_waveBsmHelper.GetWaveBsmStats ()->GetTxByteCount ();
+  uint32_t cumulativeRoutingBytes = m_routingHelper->GetRoutingStats ().GetCumulativeTxBytes ();
+  uint32_t totalAppBytes = cumulativeWaveBsmBytes + cumulativeRoutingBytes;
+  uint32_t totalPhyBytes = m_wifiPhyStats->GetTxBytes ();
+  // mac-phy-oh = (total-phy-bytes - total-app-bytes) / total-phy-bytes
+  double mac_phy_oh = 0.0;
+  if (totalPhyBytes > 0)
+    {
+      mac_phy_oh = (double) (totalPhyBytes - totalAppBytes) / (double) totalPhyBytes;
+    }
+
+  std::ofstream out (m_CSVfileName.c_str (), std::ios::app);
+
+  if (m_log != 0 )
+    {
+      NS_LOG_UNCOND ("At t=" << (Simulator::Now ()).GetSeconds () << "s BSM_PDR1=" << wavePDR1_2 << " BSM_PDR1=" << wavePDR2_2 << " BSM_PDR3=" << wavePDR3_2 << " BSM_PDR4=" << wavePDR4_2 << " BSM_PDR5=" << wavePDR5_2 << " BSM_PDR6=" << wavePDR6_2 << " BSM_PDR7=" << wavePDR7_2 << " BSM_PDR8=" << wavePDR8_2 << " BSM_PDR9=" << wavePDR9_2 << " BSM_PDR10=" << wavePDR10_2 << " Goodput=" << kbps << "Kbps" /*<< " MAC/PHY-OH=" << mac_phy_oh*/);
+    }
+
+  out << (Simulator::Now ()).GetSeconds () << ","
+      << kbps << ","
+      << packetsReceived << ","
+      << m_nSinks << ","
+      << m_protocolName << ","
+      << m_txp << ","
+      << wavePktsSent << ","
+      << wavePktsReceived << ","
+      << wavePDR << ","
+      << waveExpectedRxPktCount << ","
+      << waveRxPktInRangeCount << ","
+      << wavePDR1_2 << ","
+      << wavePDR2_2 << ","
+      << wavePDR3_2 << ","
+      << wavePDR4_2 << ","
+      << wavePDR5_2 << ","
+      << wavePDR6_2 << ","
+      << wavePDR7_2 << ","
+      << wavePDR8_2 << ","
+      << wavePDR9_2 << ","
+      << wavePDR10_2 << ","
+      << mac_phy_oh << ""
+      << std::endl;
+
+  out.close ();
+
+  m_routingHelper->GetRoutingStats ().SetRxBytes (0);
+  m_routingHelper->GetRoutingStats ().SetRxPkts (0);
+  m_waveBsmHelper.GetWaveBsmStats ()->SetRxPktCount (0);
+  m_waveBsmHelper.GetWaveBsmStats ()->SetTxPktCount (0);
+  for (int index = 1; index <= 10; index++)
+    {
+      m_waveBsmHelper.GetWaveBsmStats ()->SetExpectedRxPktCount (index, 0);
+      m_waveBsmHelper.GetWaveBsmStats ()->SetRxPktInRangeCount (index, 0);
+    }
+
+  double currentTime = (Simulator::Now ()).GetSeconds ();
+  if (currentTime <= (double) m_cumulativeBsmCaptureStart)
+    {
+      for (int index = 1; index <= 10; index++)
+        {
+          m_waveBsmHelper.GetWaveBsmStats ()->ResetTotalRxPktCounts (index);
+        }
+    }
+
+  Simulator::Schedule (Seconds (1.0), &VanetRoutingExperiment::CheckThroughput, this);
+}
+
+void
+VanetRoutingExperiment::SetConfigFromGlobals ()
+{
+  // get settings saved from config-store
+  UintegerValue uintegerValue;
+  DoubleValue doubleValue;
+  StringValue stringValue;
+
+  // This may not be the best way to manage program configuration
+  // (directing them through global values), but management
+  // through the config-store here is copied from
+  // src/lte/examples/lena-dual-stripe.cc
+
+  GlobalValue::GetValueByName ("VRCport", uintegerValue);
+  m_port = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCnSinks", uintegerValue);
+  m_nSinks = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCtraceMobility", uintegerValue);
+  m_traceMobility = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCprotocol", uintegerValue);
+  m_protocol = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRClossModel", uintegerValue);
+  m_lossModel = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCfading", uintegerValue);
+  m_fading = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRC80211mode", uintegerValue);
+  m_80211mode = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCmobility", uintegerValue);
+  m_mobility = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCnNodes", uintegerValue);
+  m_nNodes = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCnodeSpeed", uintegerValue);
+  m_nodeSpeed = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCnodePause", uintegerValue);
+  m_nodePause = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCwavePacketSize", uintegerValue);
+  m_wavePacketSize = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCverbose", uintegerValue);
+  m_verbose = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCscenario", uintegerValue);
+  m_scenario = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCroutingTables", uintegerValue);
+  m_routingTables = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCasciiTrace", uintegerValue);
+  m_asciiTrace = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCpcap", uintegerValue);
+  m_pcap = uintegerValue.Get ();
+  GlobalValue::GetValueByName ("VRCcumulativeBsmCaptureStart", uintegerValue);
+  m_cumulativeBsmCaptureStart = uintegerValue.Get ();
+
+  GlobalValue::GetValueByName ("VRCtxSafetyRange1", doubleValue);
+  m_txSafetyRange1 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange2", doubleValue);
+  m_txSafetyRange2 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange3", doubleValue);
+  m_txSafetyRange3 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange4", doubleValue);
+  m_txSafetyRange4 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange5", doubleValue);
+  m_txSafetyRange5 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange6", doubleValue);
+  m_txSafetyRange6 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange7", doubleValue);
+  m_txSafetyRange7 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange8", doubleValue);
+  m_txSafetyRange8 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange9", doubleValue);
+  m_txSafetyRange9 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxSafetyRange10", doubleValue);
+  m_txSafetyRange10 = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxp", doubleValue);
+  m_txp = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtotalTime", doubleValue);
+  m_TotalSimTime = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCwaveInterval", doubleValue);
+  m_waveInterval = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCgpsAccuracyNs", doubleValue);
+  m_gpsAccuracyNs = doubleValue.Get ();
+  GlobalValue::GetValueByName ("VRCtxMaxDelayMs", doubleValue);
+  m_txMaxDelayMs = doubleValue.Get ();
+
+  GlobalValue::GetValueByName ("VRCCSVfileName", stringValue);
+  m_CSVfileName = stringValue.Get ();
+  GlobalValue::GetValueByName ("VRCCSVfileName2", stringValue);
+  m_CSVfileName2 = stringValue.Get ();
+  GlobalValue::GetValueByName ("VRCphyMode", stringValue);
+  m_phyMode = stringValue.Get ();
+  GlobalValue::GetValueByName ("VRCtraceFile", stringValue);
+  m_traceFile = stringValue.Get ();
+  GlobalValue::GetValueByName ("VRClogFile", stringValue);
+  m_logFile = stringValue.Get ();
+  GlobalValue::GetValueByName ("VRCrate", stringValue);
+  m_rate = stringValue.Get ();
+  GlobalValue::GetValueByName ("VRCphyModeB", stringValue);
+  m_phyModeB = stringValue.Get ();
+  GlobalValue::GetValueByName ("VRCtrName", stringValue);
+  m_trName = stringValue.Get ();
+}
+
+void
+VanetRoutingExperiment::SetGlobalsFromConfig ()
+{
+  // get settings saved from config-store
+  UintegerValue uintegerValue;
+  DoubleValue doubleValue;
+  StringValue stringValue;
+
+  g_port.SetValue (UintegerValue (m_port));
+  g_nSinks.SetValue (UintegerValue (m_nSinks));
+  g_traceMobility.SetValue (UintegerValue (m_traceMobility));
+  g_protocol.SetValue (UintegerValue (m_protocol));
+  g_lossModel.SetValue (UintegerValue (m_lossModel));
+  g_fading.SetValue (UintegerValue (m_fading));
+  g_80211mode.SetValue (UintegerValue (m_80211mode));
+  g_mobility.SetValue (UintegerValue (m_mobility));
+  g_nNodes.SetValue (UintegerValue (m_nNodes));
+  g_nodeSpeed.SetValue (UintegerValue (m_nodeSpeed));
+  g_nodePause.SetValue (UintegerValue (m_nodePause));
+  g_wavePacketSize.SetValue (UintegerValue (m_wavePacketSize));
+  g_verbose.SetValue (UintegerValue (m_verbose));
+  g_scenario.SetValue (UintegerValue (m_scenario));
+  g_routingTables.SetValue (UintegerValue (m_routingTables));
+  g_asciiTrace.SetValue (UintegerValue (m_asciiTrace));
+  g_pcap.SetValue (UintegerValue (m_pcap));
+  g_cumulativeBsmCaptureStart.SetValue (UintegerValue (m_cumulativeBsmCaptureStart));
+
+  g_txSafetyRange1.SetValue (DoubleValue (m_txSafetyRange1));
+  g_txSafetyRange2.SetValue (DoubleValue (m_txSafetyRange2));
+  g_txSafetyRange3.SetValue (DoubleValue (m_txSafetyRange3));
+  g_txSafetyRange4.SetValue (DoubleValue (m_txSafetyRange4));
+  g_txSafetyRange5.SetValue (DoubleValue (m_txSafetyRange5));
+  g_txSafetyRange6.SetValue (DoubleValue (m_txSafetyRange6));
+  g_txSafetyRange7.SetValue (DoubleValue (m_txSafetyRange7));
+  g_txSafetyRange8.SetValue (DoubleValue (m_txSafetyRange8));
+  g_txSafetyRange9.SetValue (DoubleValue (m_txSafetyRange9));
+  g_txSafetyRange10.SetValue (DoubleValue (m_txSafetyRange10));
+  g_txp.SetValue (DoubleValue (m_txp));
+  g_totalTime.SetValue (DoubleValue (m_TotalSimTime));
+  g_waveInterval.SetValue (DoubleValue (m_waveInterval));
+  g_gpsAccuracyNs.SetValue (DoubleValue (m_gpsAccuracyNs));
+  g_txMaxDelayMs.SetValue (DoubleValue (m_txMaxDelayMs));
+
+  g_CSVfileName.SetValue (StringValue (m_CSVfileName));
+  g_CSVfileName2.SetValue (StringValue (m_CSVfileName2));
+  g_phyMode.SetValue (StringValue (m_phyMode));
+  g_traceFile.SetValue (StringValue (m_traceFile));
+  g_logFile.SetValue (StringValue (m_logFile));
+  g_rate.SetValue (StringValue (m_rate));
+  g_phyModeB.SetValue (StringValue (m_phyModeB));
+  g_trName.SetValue (StringValue (m_trName));
+  GlobalValue::GetValueByName ("VRCtrName", stringValue);
+  m_trName = stringValue.Get ();
+}
+
+void
+VanetRoutingExperiment::CommandSetup (int argc, char **argv)
+{
+  CommandLine cmd;
+  double txDist1 = 50.0;
+  double txDist2 = 100.0;
+  double txDist3 = 150.0;
+  double txDist4 = 200.0;
+  double txDist5 = 250.0;
+  double txDist6 = 300.0;
+  double txDist7 = 350.0;
+  double txDist8 = 350.0;
+  double txDist9 = 350.0;
+  double txDist10 = 350.0;
+
+  // allow command line overrides
+  cmd.AddValue ("CSVfileName", "The name of the CSV output file name", m_CSVfileName);
+  cmd.AddValue ("CSVfileName2", "The name of the CSV output file name2", m_CSVfileName2);
+  cmd.AddValue ("totaltime", "Simulation end time", m_TotalSimTime);
+  cmd.AddValue ("nodes", "Number of nodes (i.e. vehicles)", m_nNodes);
+  cmd.AddValue ("sinks", "Number of routing sinks", m_nSinks);
+  cmd.AddValue ("txp", "Transmit power (dB), e.g. txp=7.5", m_txp);
+  cmd.AddValue ("traceMobility", "Enable mobility tracing", m_traceMobility);
+  cmd.AddValue ("protocol", "1=OLSR;2=AODV;3=DSDV;4=DSR", m_protocol);
+  cmd.AddValue ("lossModel", "1=Friis;2=ItuR1411Los;3=TwoRayGround;4=LogDistance", m_lossModel);
+  cmd.AddValue ("fading", "0=None;1=Nakagami;(buildings=1 overrides)", m_fading);
+  cmd.AddValue ("phyMode", "Wifi Phy mode", m_phyMode);
+  cmd.AddValue ("80211Mode", "1=802.11p; 2=802.11b; 3=WAVE-PHY", m_80211mode);
+  cmd.AddValue ("traceFile", "Ns2 movement trace file", m_traceFile);
+  cmd.AddValue ("logFile", "Log file", m_logFile);
+  cmd.AddValue ("mobility", "1=trace;2=RWP", m_mobility);
+  cmd.AddValue ("rate", "Rate", m_rate);
+  cmd.AddValue ("phyModeB", "Phy mode 802.11b", m_phyModeB);
+  cmd.AddValue ("speed", "Node speed (m/s)", m_nodeSpeed);
+  cmd.AddValue ("pause", "Node pause (s)", m_nodePause);
+  cmd.AddValue ("verbose", "0=quiet;1=verbose", m_verbose);
+  cmd.AddValue ("bsm", "(WAVE) BSM size (bytes)", m_wavePacketSize);
+  cmd.AddValue ("interval", "(WAVE) BSM interval (s)", m_waveInterval);
+  cmd.AddValue ("scenario", "1=synthetic, 2=playback-trace", m_scenario);
+  // User is allowed to have up to 10 different PDRs (Packet
+  // Delivery Ratios) calculate, and so can specify up to
+  // 10 different tx distances.
+  cmd.AddValue ("txdist1", "Expected BSM tx range, m", txDist1);
+  cmd.AddValue ("txdist2", "Expected BSM tx range, m", txDist2);
+  cmd.AddValue ("txdist3", "Expected BSM tx range, m", txDist3);
+  cmd.AddValue ("txdist4", "Expected BSM tx range, m", txDist4);
+  cmd.AddValue ("txdist5", "Expected BSM tx range, m", txDist5);
+  cmd.AddValue ("txdist6", "Expected BSM tx range, m", txDist6);
+  cmd.AddValue ("txdist7", "Expected BSM tx range, m", txDist7);
+  cmd.AddValue ("txdist8", "Expected BSM tx range, m", txDist8);
+  cmd.AddValue ("txdist9", "Expected BSM tx range, m", txDist9);
+  cmd.AddValue ("txdist10", "Expected BSM tx range, m", txDist10);
+  cmd.AddValue ("gpsaccuracy", "GPS time accuracy, in ns", m_gpsAccuracyNs);
+  cmd.AddValue ("txmaxdelay", "Tx max delay, in ms", m_txMaxDelayMs);
+  cmd.AddValue ("routingTables", "Dump routing tables at t=5 seconds", m_routingTables);
+  cmd.AddValue ("asciiTrace", "Dump ASCII Trace data", m_asciiTrace);
+  cmd.AddValue ("pcap", "Create PCAP files for all nodes", m_pcap);
+  cmd.AddValue ("loadconfig", "Config-store filename to load", m_loadConfigFilename);
+  cmd.AddValue ("saveconfig", "Config-store filename to save", m_saveConfigFilename);
+  cmd.AddValue ("exp", "Experiment", m_exp);
+  cmd.AddValue ("BsmCaptureStart", "Start time to begin capturing pkts for cumulative Bsm", m_cumulativeBsmCaptureStart);
+  cmd.Parse (argc, argv);
+
+  m_txSafetyRange1 = txDist1;
+  m_txSafetyRange2 = txDist2;
+  m_txSafetyRange3 = txDist3;
+  m_txSafetyRange4 = txDist4;
+  m_txSafetyRange5 = txDist5;
+  m_txSafetyRange6 = txDist6;
+  m_txSafetyRange7 = txDist7;
+  m_txSafetyRange8 = txDist8;
+  m_txSafetyRange9 = txDist9;
+  m_txSafetyRange10 = txDist10;
+  // load configuration info from config-store
+  ConfigStoreHelper configStoreHelper;
+  configStoreHelper.LoadConfig (m_loadConfigFilename);
+  // transfer config-store values to config parameters
+  SetConfigFromGlobals ();
+
+  // parse again so you can override input file default values via command line
+  cmd.Parse (argc, argv);
+
+  m_txSafetyRange1 = txDist1;
+  m_txSafetyRange2 = txDist2;
+  m_txSafetyRange3 = txDist3;
+  m_txSafetyRange4 = txDist4;
+  m_txSafetyRange5 = txDist5;
+  m_txSafetyRange6 = txDist6;
+  m_txSafetyRange7 = txDist7;
+  m_txSafetyRange8 = txDist8;
+  m_txSafetyRange9 = txDist9;
+  m_txSafetyRange10 = txDist10;
+}
+
+void
+VanetRoutingExperiment::SetupLogFile ()
+{
+  // open log file for output
+  m_os.open (m_logFile.c_str ());
+}
+
+void VanetRoutingExperiment::SetupLogging ()
+{
+
+  // Enable logging from the ns2 helper
+  LogComponentEnable ("Ns2MobilityHelper",LOG_LEVEL_DEBUG);
+
+  Packet::EnablePrinting ();
+}
+
+void
+VanetRoutingExperiment::ConfigureDefaults ()
+{
+  Config::SetDefault ("ns3::OnOffApplication::PacketSize",StringValue ("64"));
+  Config::SetDefault ("ns3::OnOffApplication::DataRate",  StringValue (m_rate));
+
+  //Set Non-unicastMode rate to unicast mode
+  if (m_80211mode == 2)
+    {
+      Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",StringValue (m_phyModeB));
+    }
+  else
+    {
+      Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",StringValue (m_phyMode));
+    }
+}
+
+void
+VanetRoutingExperiment::SetupAdhocMobilityNodes ()
+{
+  if (m_mobility == 1)
+    {
+      // Create Ns2MobilityHelper with the specified trace log file as parameter
+      Ns2MobilityHelper ns2 = Ns2MobilityHelper (m_traceFile);
+      ns2.Install (); // configure movements for each node, while reading trace file
+      // initially assume all nodes are not moving
+      WaveBsmHelper::GetNodesMoving ().resize (m_nNodes, 0);
+    }
+  else if (m_mobility == 2)
+    {
+      MobilityHelper mobilityAdhoc;
+
+      ObjectFactory pos;
+      pos.SetTypeId ("ns3::RandomBoxPositionAllocator");
+      pos.Set ("X", StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=1500.0]"));
+      pos.Set ("Y", StringValue ("ns3::UniformRandomVariable[Min=0.0|Max=300.0]"));
+      // we need antenna height uniform [1.0 .. 2.0] for loss model
+      pos.Set ("Z", StringValue ("ns3::UniformRandomVariable[Min=1.0|Max=2.0]"));
+
+      Ptr<PositionAllocator> taPositionAlloc = pos.Create ()->GetObject<PositionAllocator> ();
+      m_streamIndex += taPositionAlloc->AssignStreams (m_streamIndex);
+
+      std::stringstream ssSpeed;
+      ssSpeed << "ns3::UniformRandomVariable[Min=0.0|Max=" << m_nodeSpeed << "]";
+      std::stringstream ssPause;
+      ssPause << "ns3::ConstantRandomVariable[Constant=" << m_nodePause << "]";
+      mobilityAdhoc.SetMobilityModel ("ns3::RandomWaypointMobilityModel",
+                                      "Speed", StringValue (ssSpeed.str ()),
+                                      "Pause", StringValue (ssPause.str ()),
+                                      "PositionAllocator", PointerValue (taPositionAlloc));
+      mobilityAdhoc.SetPositionAllocator (taPositionAlloc);
+      mobilityAdhoc.Install (m_adhocTxNodes);
+      m_streamIndex += mobilityAdhoc.AssignStreams (m_adhocTxNodes, m_streamIndex);
+
+      // initially assume all nodes are moving
+      WaveBsmHelper::GetNodesMoving ().resize (m_nNodes, 1);
+    }
+
+  // Configure callback for logging
+  Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange",
+                   MakeBoundCallback (&VanetRoutingExperiment::CourseChange, &m_os));
+}
+
+void
+VanetRoutingExperiment::SetupAdhocDevices ()
+{
+  if (m_lossModel == 1)
+    {
+      m_lossModelName = "ns3::FriisPropagationLossModel";
+    }
+  else if (m_lossModel == 2)
+    {
+      m_lossModelName = "ns3::ItuR1411LosPropagationLossModel";
+    }
+  else if (m_lossModel == 3)
+    {
+      m_lossModelName = "ns3::TwoRayGroundPropagationLossModel";
+    }
+  else if (m_lossModel == 4)
+    {
+      m_lossModelName = "ns3::LogDistancePropagationLossModel";
+    }
+  else
+    {
+      // Unsupported propagation loss model.
+      // Treating as ERROR
+      NS_LOG_ERROR ("Invalid propagation loss model specified.  Values must be [1-4], where 1=Friis;2=ItuR1411Los;3=TwoRayGround;4=LogDistance");
+    }
+
+  // frequency
+  double freq = 0.0;
+  if ((m_80211mode == 1)
+      || (m_80211mode == 3))
+    {
+      // 802.11p 5.9 GHz
+      freq = 5.9e9;
+    }
+  else
+    {
+      // 802.11b 2.4 GHz
+      freq = 2.4e9;
+    }
+
+  // Setup propagation models
+  YansWifiChannelHelper wifiChannel;
+  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
+  if (m_lossModel == 3)
+    {
+      // two-ray requires antenna height (else defaults to Friss)
+      wifiChannel.AddPropagationLoss (m_lossModelName, "Frequency", DoubleValue (freq), "HeightAboveZ", DoubleValue (1.5));
+    }
+  else
+    {
+      wifiChannel.AddPropagationLoss (m_lossModelName, "Frequency", DoubleValue (freq));
+    }
+
+  // Propagation loss models are additive.
+  if (m_fading != 0)
+    {
+      // if no obstacle model, then use Nakagami fading if requested
+      wifiChannel.AddPropagationLoss ("ns3::NakagamiPropagationLossModel");
+    }
+
+  // the channel
+  Ptr<YansWifiChannel> channel = wifiChannel.Create ();
+
+  // The below set of helpers will help us to put together the wifi NICs we want
+  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
+  wifiPhy.SetChannel (channel);
+  // ns-3 supports generate a pcap trace
+  wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11);
+
+  YansWavePhyHelper wavePhy =  YansWavePhyHelper::Default ();
+  wavePhy.SetChannel (channel);
+  wavePhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11);
+
+  // Setup WAVE PHY and MAC
+  NqosWaveMacHelper wifi80211pMac = NqosWaveMacHelper::Default ();
+  WaveHelper waveHelper = WaveHelper::Default ();
+  Wifi80211pHelper wifi80211p = Wifi80211pHelper::Default ();
+  if (m_verbose)
+    {
+      wifi80211p.EnableLogComponents ();      // Turn on all Wifi 802.11p logging
+      // likewise, turn on WAVE PHY logging
+      waveHelper.EnableLogComponents ();
+    }
+
+  WifiHelper wifi;
+
+  // Setup 802.11b stuff
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                "DataMode",StringValue (m_phyModeB),
+                                "ControlMode",StringValue (m_phyModeB));
+
+  // Setup 802.11p stuff
+  wifi80211p.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                      "DataMode",StringValue (m_phyMode),
+                                      "ControlMode",StringValue (m_phyMode));
+
+  // Setup WAVE-PHY stuff
+  waveHelper.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                      "DataMode",StringValue (m_phyMode),
+                                      "ControlMode",StringValue (m_phyMode));
+
+  // Set Tx Power
+  wifiPhy.Set ("TxPowerStart",DoubleValue (m_txp));
+  wifiPhy.Set ("TxPowerEnd", DoubleValue (m_txp));
+  wavePhy.Set ("TxPowerStart",DoubleValue (m_txp));
+  wavePhy.Set ("TxPowerEnd", DoubleValue (m_txp));
+
+  // Add a non-QoS upper mac, and disable rate control
+  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  wifiMac.SetType ("ns3::AdhocWifiMac");
+  QosWaveMacHelper waveMac = QosWaveMacHelper::Default ();
+
+  // Setup net devices
+
+  if (m_80211mode == 3)
+    {
+      m_adhocTxDevices = waveHelper.Install (wavePhy, waveMac, m_adhocTxNodes);
+    }
+  else if (m_80211mode == 1)
+    {
+      m_adhocTxDevices = wifi80211p.Install (wifiPhy, wifi80211pMac, m_adhocTxNodes);
+    }
+  else
+    {
+      m_adhocTxDevices = wifi.Install (wifiPhy, wifiMac, m_adhocTxNodes);
+    }
+
+  if (m_asciiTrace != 0)
+    {
+      AsciiTraceHelper ascii;
+      Ptr<OutputStreamWrapper> osw = ascii.CreateFileStream ( (m_trName + ".tr").c_str ());
+      wifiPhy.EnableAsciiAll (osw);
+      wavePhy.EnableAsciiAll (osw);
+    }
+  if (m_pcap != 0)
+    {
+      wifiPhy.EnablePcapAll ("vanet-routing-compare-pcap");
+      wavePhy.EnablePcapAll ("vanet-routing-compare-pcap");
+    }
+}
+
+void
+VanetRoutingExperiment::SetupWaveMessages ()
+{
+  // WAVE PHY mode
+  // 0=continuous channel; 1=channel-switching
+  int chAccessMode = 0;
+  if (m_80211mode == 3)
+    {
+      chAccessMode = 1;
+    }
+
+  m_waveBsmHelper.Install (m_adhocTxInterfaces,
+                           Seconds (m_TotalSimTime),
+                           m_wavePacketSize,
+                           Seconds (m_waveInterval),
+                           // GPS accuracy (i.e, clock drift), in number of ns
+                           m_gpsAccuracyNs,
+                           m_txSafetyRanges,
+                           chAccessMode,
+                           // tx max delay before transmit, in ms
+                           MilliSeconds (m_txMaxDelayMs));
+
+  // fix random number streams
+  m_streamIndex += m_waveBsmHelper.AssignStreams (m_adhocTxNodes, m_streamIndex);
+}
+
+void
+VanetRoutingExperiment::SetupRoutingMessages ()
+{
+  m_routingHelper->Install (m_adhocTxNodes,
+                            m_adhocTxDevices,
+                            m_adhocTxInterfaces,
+                            m_TotalSimTime,
+                            m_protocol,
+                            m_nSinks,
+                            m_routingTables);
+}
+
+void
+VanetRoutingExperiment::SetupScenario ()
+{
+  // member variable parameter use
+  // defaults or command line overrides,
+  // except where scenario={1,2,3,...}
+  // have been specified, in which case
+  // specify parameters are overwritten
+  // here to setup for specific scenarios
+
+  // certain parameters may be further overridden
+  // i.e. specify a scenario, override tx power.
+
+  if (m_scenario == 1)
+    {
+      // 40 nodes in RWP 300 m x 1500 m synthetic highway, 10s
+      m_traceFile = "";
+      m_logFile = "";
+      m_mobility = 2;
+      if (m_nNodes == 156)
+        {
+          m_nNodes = 40;
+        }
+      if (m_TotalSimTime == 300.01)
+        {
+          m_TotalSimTime = 10.0;
+        }
+    }
+  else if (m_scenario == 2)
+    {
+      // Realistic vehicular trace in 4.6 km x 3.0 km suburban Zurich
+      // "low density, 99 total vehicles"
+      m_traceFile = "src/wave/examples/low99-ct-unterstrass-1day.filt.7.adj.mob";
+      m_logFile = "low99-ct-unterstrass-1day.filt.7.adj.log";
+      m_mobility = 1;
+      m_nNodes = 99;
+      m_TotalSimTime = 300.01;
+      m_nodeSpeed = 0;
+      m_nodePause = 0;
+      m_CSVfileName = "low_vanet-routing-compare.csv";
+      m_CSVfileName = "low_vanet-routing-compare2.csv";
+    }
+}
+
+void
+VanetRoutingExperiment::WriteCsvHeader ()
+{
+  //blank out the last output file and write the column headers
+  std::ofstream out (m_CSVfileName.c_str ());
+  out << "SimulationSecond," <<
+    "ReceiveRate," <<
+    "PacketsReceived," <<
+    "NumberOfSinks," <<
+    "RoutingProtocol," <<
+    "TransmissionPower," <<
+    "WavePktsSent," <<
+    "WavePtksReceived," <<
+    "WavePktsPpr," <<
+    "ExpectedWavePktsReceived," <<
+    "ExpectedWavePktsInCoverageReceived," <<
+    "BSM_PDR1," <<
+    "BSM_PDR2," <<
+    "BSM_PDR3," <<
+    "BSM_PDR4," <<
+    "BSM_PDR5," <<
+    "BSM_PDR6," <<
+    "BSM_PDR7," <<
+    "BSM_PDR8," <<
+    "BSM_PDR9," <<
+    "BSM_PDR10," <<
+    "MacPhyOverhead" <<
+    std::endl;
+  out.close ();
+
+  std::ofstream out2 (m_CSVfileName2.c_str ());
+  out2 << "BSM_PDR1,"
+       << "BSM_PDR2,"
+       << "BSM_PDR3,"
+       << "BSM_PDR4,"
+       << "BSM_PDR5,"
+       << "BSM_PDR6,"
+       << "BSM_PDR7,"
+       << "BSM_PDR8,"
+       << "BSM_PDR9,"
+       << "BSM_PDR10,"
+       << "AverageRoutingGoodputKbps,"
+       << "MacPhyOverhead"
+       << std::endl;
+  out2.close ();
+}
+
+int
+main (int argc, char *argv[])
+{
+  VanetRoutingExperiment experiment;
+  experiment.Simulate (argc, argv);
+}
diff -Naur ns-3.21/src/wave/examples/wave-simple-80211p.cc ns-3.22/src/wave/examples/wave-simple-80211p.cc
--- ns-3.21/src/wave/examples/wave-simple-80211p.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/examples/wave-simple-80211p.cc	2015-02-05 15:46:22.000000000 -0800
@@ -49,9 +49,10 @@
 #include "ns3/wifi-80211p-helper.h"
 #include "ns3/wave-mac-helper.h"
 
-NS_LOG_COMPONENT_DEFINE ("WifiSimpleOcb");
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WifiSimpleOcb");
+
 /*
  * In WAVE module, there is no net device class named like "Wifi80211pNetDevice",
  * instead, we need to use Wifi80211pHelper to create an object of
@@ -126,7 +127,6 @@
   wifiPhy.SetChannel (channel);
   // ns-3 supports generate a pcap trace
   wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11);
-
   NqosWaveMacHelper wifi80211pMac = NqosWaveMacHelper::Default ();
   Wifi80211pHelper wifi80211p = Wifi80211pHelper::Default ();
   if (verbose)
@@ -139,6 +139,9 @@
                                       "ControlMode",StringValue (phyMode));
   NetDeviceContainer devices = wifi80211p.Install (wifiPhy, wifi80211pMac, c);
 
+  // Tracing
+  wifiPhy.EnablePcap ("wave-simple-80211p", devices);
+
   MobilityHelper mobility;
   Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
   positionAlloc->Add (Vector (0.0, 0.0, 0.0));
diff -Naur ns-3.21/src/wave/examples/wave-simple-device.cc ns-3.22/src/wave/examples/wave-simple-device.cc
--- ns-3.21/src/wave/examples/wave-simple-device.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/examples/wave-simple-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,267 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#include "ns3/node.h"
+#include "ns3/packet.h"
+#include "ns3/simulator.h"
+#include "ns3/node-container.h"
+#include "ns3/net-device-container.h"
+#include "ns3/yans-wifi-helper.h"
+#include "ns3/mobility-helper.h"
+#include "ns3/seq-ts-header.h"
+#include "ns3/wave-net-device.h"
+#include "ns3/wave-mac-helper.h"
+#include "ns3/wave-helper.h"
+
+using namespace ns3;
+/**
+ * This simulation is to show the routing service of WaveNetDevice described in IEEE 09.4.
+ *
+ * note: although txPowerLevel is supported now, the "TxPowerLevels"
+ * attribute of YansWifiPhy is 1 which means phy devices only support 1
+ * levels. Thus, if users want to control txPowerLevel, they should set
+ * these attributes of YansWifiPhy by themselves..
+ */
+class WaveNetDeviceExample
+{
+public:
+  void SendWsmpExample (void);
+
+  void SendIpExample (void);
+
+  void SendWsaExample (void);
+
+private:
+  void SendOneWsmpPacket (uint32_t channel, uint32_t seq);
+  void SendIpPacket (uint32_t seq, bool ipv6);
+  bool Receive (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender);
+  bool ReceiveVsa (Ptr<const Packet>,const Address &, uint32_t, uint32_t);
+  void CreateWaveNodes (void);
+
+  NodeContainer nodes;
+  NetDeviceContainer devices;
+};
+void
+WaveNetDeviceExample::CreateWaveNodes (void)
+{
+  nodes = NodeContainer ();
+  nodes.Create (2);
+
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (5.0, 0.0, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (nodes);
+
+  YansWifiChannelHelper waveChannel = YansWifiChannelHelper::Default ();
+  YansWavePhyHelper wavePhy =  YansWavePhyHelper::Default ();
+  wavePhy.SetChannel (waveChannel.Create ());
+  wavePhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11);
+  QosWaveMacHelper waveMac = QosWaveMacHelper::Default ();
+  WaveHelper waveHelper = WaveHelper::Default ();
+  devices = waveHelper.Install (wavePhy, waveMac, nodes);
+
+  for (uint32_t i = 0; i != devices.GetN (); ++i)
+    {
+      Ptr<WaveNetDevice> device = DynamicCast<WaveNetDevice> (devices.Get (i));
+      device->SetReceiveCallback (MakeCallback (&WaveNetDeviceExample::Receive, this));
+      device->SetWaveVsaCallback (MakeCallback  (&WaveNetDeviceExample::ReceiveVsa, this));
+    }
+
+  // Tracing
+  wavePhy.EnablePcap ("wave-simple-device", devices);
+}
+
+bool
+WaveNetDeviceExample::Receive (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender)
+{
+  SeqTsHeader seqTs;
+  pkt->PeekHeader (seqTs);
+  std::cout << "receive a packet: " << std::endl
+            << "  sequence = " << seqTs.GetSeq () << "," << std::endl
+            << "  sendTime = " << seqTs.GetTs ().GetSeconds () << "s," << std::endl
+            << "  recvTime = " << Now ().GetSeconds () << "s," << std::endl
+            << "  protocol = 0x" << std::hex << mode << std::dec  << std::endl;
+  return true;
+}
+
+void
+WaveNetDeviceExample::SendOneWsmpPacket  (uint32_t channel, uint32_t seq)
+{
+  Ptr<WaveNetDevice>  sender = DynamicCast<WaveNetDevice> (devices.Get (0));
+  Ptr<WaveNetDevice>  receiver = DynamicCast<WaveNetDevice> (devices.Get (1));
+  const static uint16_t WSMP_PROT_NUMBER = 0x88DC;
+  Mac48Address bssWildcard = Mac48Address::GetBroadcast ();
+
+  const TxInfo txInfo = TxInfo (channel);
+  Ptr<Packet> p  = Create<Packet> (100);
+  SeqTsHeader seqTs;
+  seqTs.SetSeq (seq);
+  p->AddHeader (seqTs);
+  sender->SendX  (p, bssWildcard, WSMP_PROT_NUMBER, txInfo);
+
+  Ptr<Packet> p2  = Create<Packet> (100);
+  SeqTsHeader seqTs2;
+  seqTs2.SetSeq (seq + 1);
+  p2->AddHeader (seqTs2);
+  receiver->SendX  (p2, bssWildcard, WSMP_PROT_NUMBER, txInfo);
+
+}
+
+void
+WaveNetDeviceExample::SendWsmpExample ()
+{
+  CreateWaveNodes ();
+  Ptr<WaveNetDevice>  sender = DynamicCast<WaveNetDevice> (devices.Get (0));
+  Ptr<WaveNetDevice>  receiver = DynamicCast<WaveNetDevice> (devices.Get (1));
+
+  // Alternating access without immediate channel switch
+  const SchInfo schInfo = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+  Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch,sender,schInfo);
+  // An important point is that the receiver should also be assigned channel
+  // access for the same channel to receive packets.
+  Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, receiver, schInfo);
+
+  // send WSMP packets
+  // the first packet will be queued currently and be transmitted in next SCH interval
+  //Simulator::Schedule (Seconds (1.0), &WaveNetDeviceExample::SendOneWsmpPacket,  this, SCH1, 1);
+  // the second packet will be queued currently and then be transmitted , because of in the CCH interval.
+  Simulator::Schedule (Seconds (1.0), &WaveNetDeviceExample::SendOneWsmpPacket,  this, CCH, 2);
+  // the third packet will be dropped because of no channel access for SCH2.
+  //Simulator::Schedule (Seconds (1.0), &WaveNetDeviceExample::SendOneWsmpPacket,  this, SCH2, 3);
+
+  // release SCH access
+  //Simulator::Schedule (Seconds (2.0), &WaveNetDevice::StopSch, sender, SCH1);
+  //Simulator::Schedule (Seconds (2.0), &WaveNetDevice::StopSch, receiver, SCH1);
+  // the fourth packet will be queued and be transmitted because of default CCH access assigned automatically.
+  //Simulator::Schedule (Seconds (3.0), &WaveNetDeviceExample::SendOneWsmpPacket,  this, CCH, 4);
+  // the fifth packet will be dropped because of no SCH1 access assigned
+  //Simulator::Schedule (Seconds (3.0), &WaveNetDeviceExample::SendOneWsmpPacket,  this, SCH1, 5);
+
+  Simulator::Stop (Seconds (5.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+void
+WaveNetDeviceExample::SendIpPacket (uint32_t seq, bool ipv6)
+{
+  Ptr<WaveNetDevice>  sender = DynamicCast<WaveNetDevice> (devices.Get (0));
+  Ptr<WaveNetDevice>  receiver = DynamicCast<WaveNetDevice> (devices.Get (1));
+  const Address dest = receiver->GetAddress ();
+  // send IPv4 packet or IPv6 packet
+  const static uint16_t IPv4_PROT_NUMBER = 0x0800;
+  const static uint16_t IPv6_PROT_NUMBER = 0x86DD;
+  uint16_t protocol = ipv6 ? IPv6_PROT_NUMBER : IPv4_PROT_NUMBER;
+  Ptr<Packet> p  = Create<Packet> (100);
+  SeqTsHeader seqTs;
+  seqTs.SetSeq (seq);
+  p->AddHeader (seqTs);
+  sender->Send (p, dest, protocol);
+}
+
+void
+WaveNetDeviceExample::SendIpExample ()
+{
+  CreateWaveNodes ();
+  Ptr<WaveNetDevice>  sender = DynamicCast<WaveNetDevice> (devices.Get (0));
+  Ptr<WaveNetDevice>  receiver = DynamicCast<WaveNetDevice> (devices.Get (1));
+
+  // Alternating access without immediate channel switch
+  const SchInfo schInfo = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+  Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, sender, schInfo);
+  // An important point is that the receiver should also be assigned channel
+  // access for the same channel to receive packets.
+  Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, receiver, schInfo);
+
+  // both IPv4 and IPv6 packets below will not be inserted to internal queue because of no tx profile registered
+  Simulator::Schedule (Seconds (1.0), &WaveNetDeviceExample::SendIpPacket, this, 1, true);
+  Simulator::Schedule (Seconds (1.050), &WaveNetDeviceExample::SendIpPacket, this, 2, false);
+  //register txprofile
+  // IP packets will automatically be sent with txprofile parameter
+  const TxProfile txProfile = TxProfile (SCH1);
+  Simulator::Schedule (Seconds (2.0), &WaveNetDevice::RegisterTxProfile, sender, txProfile);
+  // both IPv4 and IPv6 packet are transmitted successfully
+  Simulator::Schedule (Seconds (3.0), &WaveNetDeviceExample::SendIpPacket, this, 3, true);
+  Simulator::Schedule (Seconds (3.050), &WaveNetDeviceExample::SendIpPacket, this, 4, false);
+  // unregister TxProfile or release channel access
+  Simulator::Schedule (Seconds (4.0),&WaveNetDevice::DeleteTxProfile, sender,SCH1);
+  Simulator::Schedule (Seconds (4.0),&WaveNetDevice::StopSch, sender,SCH1);
+  Simulator::Schedule (Seconds (4.0),&WaveNetDevice::StopSch, receiver, SCH1);
+  // these packets will be dropped again because of no channel access assigned and no tx profile registered
+  Simulator::Schedule (Seconds (5.0), &WaveNetDeviceExample::SendIpPacket, this, 5, true);
+  Simulator::Schedule (Seconds (5.050), &WaveNetDeviceExample::SendIpPacket, this, 6, false);
+
+  Simulator::Stop (Seconds (6.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+bool
+WaveNetDeviceExample::ReceiveVsa (Ptr<const Packet> pkt,const Address & address, uint32_t, uint32_t)
+{
+  std::cout << "receive a VSA management frame: recvTime = " << Now ().GetSeconds () << "s." << std::endl;
+  return true;
+}
+
+void
+WaveNetDeviceExample::SendWsaExample ()
+{
+  CreateWaveNodes ();
+  Ptr<WaveNetDevice>  sender = DynamicCast<WaveNetDevice> (devices.Get (0));
+  Ptr<WaveNetDevice>  receiver = DynamicCast<WaveNetDevice> (devices.Get (1));
+
+// Alternating access without immediate channel switch for sender and receiver
+  const SchInfo schInfo = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+  Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, sender, schInfo);
+  Simulator::Schedule (Seconds (0.0), &WaveNetDevice::StartSch, receiver, schInfo);
+
+// the peer address of VSA is broadcast address, and the repeat rate
+// of VsaInfo is 100 per 5s, the VSA frame will be sent repeatedly.
+  Ptr<Packet> wsaPacket = Create<Packet> (100);
+  Mac48Address dest = Mac48Address::GetBroadcast ();
+  const VsaInfo vsaInfo = VsaInfo (dest, OrganizationIdentifier (), 0, wsaPacket, SCH1, 100, VSA_TRANSMIT_IN_BOTHI);
+  Simulator::Schedule (Seconds (1.0), &WaveNetDevice::StartVsa, sender, vsaInfo);
+  Simulator::Schedule (Seconds (3.0), &WaveNetDevice::StopVsa, sender, SCH1);
+
+// release alternating access
+  Simulator::Schedule (Seconds (4.0), &WaveNetDevice::StopSch, sender, SCH1);
+  Simulator::Schedule (Seconds (4.0), &WaveNetDevice::StopSch, receiver, SCH1);
+
+// these WSA packets cannot be transmitted because of no channel access assigned
+  Simulator::Schedule (Seconds (5.0), &WaveNetDevice::StartVsa, sender, vsaInfo);
+  Simulator::Schedule (Seconds (6.0), &WaveNetDevice::StopVsa, sender, SCH1);
+
+  Simulator::Stop (Seconds (6.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+int
+main (int argc, char *argv[])
+{
+  WaveNetDeviceExample example;
+  std::cout << "run WAVE WSMP routing service case:" << std::endl;
+  example.SendWsmpExample ();
+  std::cout << "run WAVE IP routing service case:" << std::endl;
+  //example.SendIpExample ();
+  std::cout << "run WAVE WSA routing service case:" << std::endl;
+  //example.SendWsaExample ();
+  return 0;
+}
diff -Naur ns-3.21/src/wave/examples/wscript ns-3.22/src/wave/examples/wscript
--- ns-3.21/src/wave/examples/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/examples/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -4,3 +4,11 @@
     obj = bld.create_ns3_program('wave-simple-80211p',
         ['core', 'applications', 'mobility', 'network', 'wifi','wave'])
     obj.source = 'wave-simple-80211p.cc'
+    
+    obj = bld.create_ns3_program('wave-simple-device',
+        ['core', 'applications', 'mobility', 'network', 'wifi','wave'])
+    obj.source = 'wave-simple-device.cc'
+
+    obj = bld.create_ns3_program('vanet-routing-compare',
+        ['core', 'aodv', 'applications', 'dsr', 'dsdv', 'flow-monitor', 'mobility', 'network', 'olsr', 'propagation', 'wifi', 'wave'])
+    obj.source = 'vanet-routing-compare.cc'
diff -Naur ns-3.21/src/wave/helper/wave-bsm-helper.cc ns-3.22/src/wave/helper/wave-bsm-helper.cc
--- ns-3.21/src/wave/helper/wave-bsm-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/helper/wave-bsm-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,164 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 North Carolina State 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: Scott E. Carpenter <scarpen@ncsu.edu>
+ *
+ */
+
+#include "ns3/wave-bsm-helper.h"
+#include "ns3/log.h"
+
+NS_LOG_COMPONENT_DEFINE ("WaveBsmHelper");
+
+namespace ns3 {
+
+std::vector<int> WaveBsmHelper::nodesMoving;
+
+WaveBsmHelper::WaveBsmHelper ()
+  : m_waveBsmStats ()
+{
+  m_txSafetyRangesSq.resize (10, 0);
+  m_txSafetyRangesSq[0] = 50.0 * 50.0;
+  m_txSafetyRangesSq[1] = 100.0 * 100.0;
+  m_txSafetyRangesSq[2] = 200.0 * 200.0;
+  m_txSafetyRangesSq[3] = 300.0 * 300.0;
+  m_txSafetyRangesSq[4] = 400.0 * 400.0;
+  m_txSafetyRangesSq[5] = 500.0 * 500.0;
+  m_txSafetyRangesSq[6] = 600.0 * 600.0;
+  m_txSafetyRangesSq[7] = 800.0 * 800.0;
+  m_txSafetyRangesSq[8] = 1000.0 * 1000.0;
+  m_txSafetyRangesSq[9] = 1500.0 * 1500.0;
+
+  m_factory.SetTypeId ("ns3::BsmApplication");
+}
+
+void
+WaveBsmHelper::SetAttribute (std::string name, const AttributeValue &value)
+{
+  m_factory.Set (name, value);
+}
+
+ApplicationContainer
+WaveBsmHelper::Install (Ptr<Node> node) const
+{
+  return ApplicationContainer (InstallPriv (node));
+}
+
+ApplicationContainer
+WaveBsmHelper::Install (Ipv4InterfaceContainer i) const
+{
+  ApplicationContainer apps;
+  for (Ipv4InterfaceContainer::Iterator itr = i.Begin (); itr != i.End (); ++itr)
+    {
+      std::pair<Ptr<Ipv4>, uint32_t> interface = (*itr);
+      Ptr<Ipv4> pp = interface.first;
+      Ptr<Node> node = pp->GetObject<Node> ();
+      apps.Add (InstallPriv (node));
+    }
+
+  return apps;
+}
+
+Ptr<Application>
+WaveBsmHelper::InstallPriv (Ptr<Node> node) const
+{
+  Ptr<Application> app = m_factory.Create<Application> ();
+  node->AddApplication (app);
+
+  return app;
+}
+
+void
+WaveBsmHelper::Install (Ipv4InterfaceContainer & i,
+                        Time totalTime,          // seconds
+                        uint32_t wavePacketSize, // bytes
+                        Time waveInterval,       // seconds
+                        double gpsAccuracyNs,    // clock drift range in number of ns
+                        std::vector <double> ranges,           // m
+                        int chAccessMode,        // channel access mode
+                        Time txMaxDelay)         // max delay prior to transmit
+{
+  int size = ranges.size ();
+  m_txSafetyRangesSq.clear ();
+  m_txSafetyRangesSq.resize (size, 0);
+  for (int index = 0; index < size; index++)
+    {
+      // stored as square of value, for optimization
+      m_txSafetyRangesSq[index] = ranges[index] * ranges[index];
+    }
+
+  // install a BsmApplication on each node
+  ApplicationContainer bsmApps = Install (i);
+  // start BSM app immediately (BsmApplication will
+  // delay transmission of first BSM by 1.0 seconds)
+  bsmApps.Start (Seconds (0));
+  bsmApps.Stop (totalTime);
+
+  // for each app, setup the app parameters
+  ApplicationContainer::Iterator aci;
+  int nodeId = 0;
+  for (aci = bsmApps.Begin (); aci != bsmApps.End (); ++aci)
+    {
+      Ptr<BsmApplication> bsmApp = DynamicCast<BsmApplication> (*aci);
+      bsmApp->Setup (i,
+                     nodeId,
+                     totalTime,
+                     wavePacketSize,
+                     waveInterval,
+                     gpsAccuracyNs,
+                     m_txSafetyRangesSq,
+                     GetWaveBsmStats (),
+                     &nodesMoving,
+                     chAccessMode,
+                     txMaxDelay);
+      nodeId++;
+    }
+}
+
+Ptr<WaveBsmStats>
+WaveBsmHelper::GetWaveBsmStats ()
+{
+  return &m_waveBsmStats;
+}
+
+int64_t
+WaveBsmHelper::AssignStreams (NodeContainer c, int64_t stream)
+{
+  int64_t currentStream = stream;
+  Ptr<Node> node;
+  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      node = (*i);
+      for (uint32_t j = 0; j < node->GetNApplications (); j++)
+        {
+          Ptr<BsmApplication> bsmApp = DynamicCast<BsmApplication> (node->GetApplication (j));
+          if (bsmApp)
+            {
+              currentStream += bsmApp->AssignStreams (currentStream);
+            }
+        }
+    }
+  return (currentStream - stream);
+}
+
+std::vector<int>&
+WaveBsmHelper::GetNodesMoving ()
+{
+  return nodesMoving;
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wave/helper/wave-bsm-helper.h ns-3.22/src/wave/helper/wave-bsm-helper.h
--- ns-3.21/src/wave/helper/wave-bsm-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/helper/wave-bsm-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,147 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 North Carolina State 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: Scott E. Carpenter <scarpen@ncsu.edu>
+ *
+ */
+
+#ifndef WAVE_BSM_HELPER_H
+#define WAVE_BSM_HELPER_H
+
+#include <vector>
+#include "ns3/wave-bsm-stats.h"
+#include "ns3/bsm-application.h"
+#include "ns3/object-factory.h"
+#include "ns3/application-container.h"
+#include "ns3/nstime.h"
+#include "ns3/internet-stack-helper.h"
+#include "ns3/mobility-model.h"
+
+namespace ns3 {
+/**
+ * \ingroup wave
+ * \brief The WaveBsmHelper class manages
+ * IEEE 1609 WAVE (Wireless Access in Vehicular Environments)
+ * Basic Safety Messages (BSMs) and uses the WaveBsmStats class
+ * to manage statistics about BSMs transmitted and received
+ * The BSM is a ~200-byte packet that is
+ * generally broadcast from every vehicle at a nominal rate of 10 Hz.
+ */
+class WaveBsmHelper
+{
+public:
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  WaveBsmHelper ();
+
+  /**
+   * Helper function used to set the underlying application attributes.
+   *
+   * \param name the name of the application attribute to set
+   * \param value the value of the application attribute to set
+   */
+  void SetAttribute (std::string name, const AttributeValue &value);
+
+  /**
+   * Install an ns3::BsmApplication on each node of the input container
+   * configured with all the attributes set with SetAttribute.
+   *
+   * \param i Ipv4InterfaceContainer of the set of interfaces on which an BsmApplication
+   * will be installed on the nodes.
+   * \returns Container of Ptr to the applications installed.
+   */
+  ApplicationContainer Install (Ipv4InterfaceContainer i) const;
+
+  /**
+   * Install an ns3::BsmApplication on the node configured with all the
+   * attributes set with SetAttribute.
+   *
+   * \param node The node on which an BsmApplication will be installed.
+   * \returns Container of Ptr to the applications installed.
+   */
+  ApplicationContainer Install (Ptr<Node> node) const;
+
+  /**
+   * \brief Installs BSM generation on devices for nodes
+   * and their interfaces
+   * \param i IPv4 interface container
+   * \param totalTime total amount of time that BSM packets should be transmitted
+   * \param wavePacketSize the size, in bytes, of a WAVE BSM
+   * \param waveInterval the time, in seconds, between each WAVE BSM transmission,
+   * typically 10 Hz (0.1 second)
+   * \param gpsAccuracy the timing synchronization accuracy of GPS time, in seconds.
+   * GPS time-sync is ~40-100 ns.  Universally synchronized time among all vehicles
+   * will result in all vehicles transmitting safety messages simultaneously, leading
+   * to excessive wireless collisions.
+   * \param range the expected transmission range, in m.
+   * \return none
+   */
+  void Install (Ipv4InterfaceContainer & i,
+                Time totalTime,          // seconds
+                uint32_t wavePacketSize, // bytes
+                Time waveInterval,       // seconds
+                double gpsAccuracyNs,    // clock drift range in number of ns
+                std::vector <double> ranges,          // m
+                int chAccessMode,        // channel access mode (0=continuous; 1=switching)
+                Time txMaxDelay);        // max delay prior to transmit
+
+  /**
+   * \brief Returns the WaveBsmStats instance
+   * \return the WaveBsmStats instance
+   */
+  Ptr<WaveBsmStats> GetWaveBsmStats ();
+
+  /**
+   * 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
+   * called by the user.
+   *
+   * \param stream first stream index to use
+   * \param c NodeContainer of the set of nodes for which the BsmApplication
+   *          should be modified to use a fixed stream
+   * \return the number of stream indices assigned by this helper
+   */
+  int64_t AssignStreams (NodeContainer c, int64_t stream);
+
+  /**
+   * \brief Returns the list of moving nove indicators
+   * \return the list of moving node indicators
+   */
+  static std::vector<int>& GetNodesMoving ();
+
+private:
+  /**
+   * Install an ns3::BsmApplication on the node
+   *
+   * \param node The node on which an BsmApplication will be installed.
+   * \returns Ptr to the application installed.
+   */
+  Ptr<Application> InstallPriv (Ptr<Node> node) const;
+
+  ObjectFactory m_factory; //!< Object factory.
+  WaveBsmStats m_waveBsmStats;
+  // tx safety range squared, for optimization
+  std::vector <double> m_txSafetyRangesSq;
+  static std::vector<int> nodesMoving;
+};
+
+} // namespace ns3
+
+#endif /* WAVE_BSM_HELPER_H*/
diff -Naur ns-3.21/src/wave/helper/wave-bsm-stats.cc ns-3.22/src/wave/helper/wave-bsm-stats.cc
--- ns-3.21/src/wave/helper/wave-bsm-stats.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/helper/wave-bsm-stats.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,190 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 North Carolina State 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: Scott E. Carpenter <scarpen@ncsu.edu>
+ *
+ */
+
+
+#include "ns3/wave-bsm-stats.h"
+#include "ns3/integer.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("WaveBsmStats");
+
+WaveBsmStats::WaveBsmStats ()
+  : m_wavePktSendCount (0),
+    m_waveByteSendCount (0),
+    m_wavePktReceiveCount (0),
+    m_log (0)
+{
+  m_wavePktExpectedReceiveCounts.resize (10, 0);
+  m_wavePktInCoverageReceiveCounts.resize (10, 0);
+  m_waveTotalPktExpectedReceiveCounts.resize (10, 0);
+  m_waveTotalPktInCoverageReceiveCounts.resize (10, 0);
+}
+
+void
+WaveBsmStats::IncTxPktCount ()
+{
+  m_wavePktSendCount++;
+}
+
+int
+WaveBsmStats::GetTxPktCount ()
+{
+  return m_wavePktSendCount;
+}
+
+void
+WaveBsmStats::IncExpectedRxPktCount (int index)
+{
+  m_wavePktExpectedReceiveCounts[index - 1]++;
+  m_waveTotalPktExpectedReceiveCounts[index - 1]++;
+}
+
+void
+WaveBsmStats::IncRxPktCount ()
+{
+  m_wavePktReceiveCount++;
+}
+
+void
+WaveBsmStats::IncRxPktInRangeCount (int index)
+{
+  m_wavePktInCoverageReceiveCounts[index - 1]++;
+  m_waveTotalPktInCoverageReceiveCounts[index - 1]++;
+}
+
+int
+WaveBsmStats::GetRxPktCount ()
+{
+  return m_wavePktReceiveCount;
+}
+
+int
+WaveBsmStats::GetExpectedRxPktCount (int index)
+{
+  return m_wavePktExpectedReceiveCounts[index - 1];
+}
+
+int
+WaveBsmStats::GetRxPktInRangeCount (int index)
+{
+  return m_wavePktInCoverageReceiveCounts[index - 1];
+}
+
+void
+WaveBsmStats::SetTxPktCount (int count)
+{
+  m_wavePktSendCount = count;
+}
+
+void
+WaveBsmStats::SetRxPktCount (int count)
+{
+  m_wavePktReceiveCount = count;
+}
+
+void
+WaveBsmStats::IncTxByteCount (int bytes)
+{
+  m_waveByteSendCount += bytes;
+}
+
+int
+WaveBsmStats::GetTxByteCount ()
+{
+  return m_waveByteSendCount;
+}
+
+double
+WaveBsmStats::GetBsmPdr (int index)
+{
+  double pdr = 0.0;
+
+  if (m_wavePktExpectedReceiveCounts[index - 1] > 0)
+    {
+      pdr = (double) m_wavePktInCoverageReceiveCounts[index - 1] / (double) m_wavePktExpectedReceiveCounts[index - 1];
+      // due to node movement, it is
+      // possible to receive a packet that is not slightly "within range" that was
+      // transmitted at the time when the nodes were slightly "out of range"
+      // thus, prevent overflow of PDR > 100%
+      if (pdr > 1.0)
+        {
+          pdr = 1.0;
+        }
+    }
+
+  return pdr;
+}
+
+double
+WaveBsmStats::GetCumulativeBsmPdr (int index)
+{
+  double pdr = 0.0;
+
+  if (m_waveTotalPktExpectedReceiveCounts[index - 1] > 0)
+    {
+      pdr = (double) m_waveTotalPktInCoverageReceiveCounts[index - 1] / (double) m_waveTotalPktExpectedReceiveCounts[index - 1];
+      // due to node movement, it is
+      // possible to receive a packet that is not slightly "within range" that was
+      // transmitted at the time when the nodes were slightly "out of range"
+      // thus, prevent overflow of PDR > 100%
+      if (pdr > 1.0)
+        {
+          pdr = 1.0;
+        }
+    }
+
+  return pdr;
+}
+
+void
+WaveBsmStats::SetLogging (int log)
+{
+  m_log = log;
+}
+
+int
+WaveBsmStats::GetLogging ()
+{
+  return m_log;
+}
+
+void
+WaveBsmStats::SetExpectedRxPktCount (int index, int count)
+{
+  m_wavePktExpectedReceiveCounts[index - 1] = count;
+}
+
+void
+WaveBsmStats::SetRxPktInRangeCount (int index, int count)
+{
+  m_wavePktInCoverageReceiveCounts[index - 1] = count;
+}
+
+void
+WaveBsmStats::ResetTotalRxPktCounts (int index)
+{
+  m_waveTotalPktInCoverageReceiveCounts[index - 1] = 0;
+  m_waveTotalPktExpectedReceiveCounts[index - 1] = 0;
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wave/helper/wave-bsm-stats.h ns-3.22/src/wave/helper/wave-bsm-stats.h
--- ns-3.21/src/wave/helper/wave-bsm-stats.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/helper/wave-bsm-stats.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,235 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 North Carolina State 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: Scott E. Carpenter <scarpen@ncsu.edu>
+ *
+ */
+
+#ifndef WAVE_BSM_STATS_H
+#define WAVE_BSM_STATS_H
+
+#include "ns3/object.h"
+#include <vector>
+
+namespace ns3 {
+class WaveBsmStats : public Object
+/**
+ * \ingroup wave
+ * \brief The WaveBsmStats class implements a stats collector for
+ * IEEE 1609 WAVE (Wireless Access in Vehicular Environments)
+ * Basic Safety Messages (BSMs).  The BSM is a ~200-byte packet that is
+ * generally broadcast from every vehicle at a nominal rate of 10 Hz.
+ */
+/*
+ * Note:  This class collects data elements and accessors
+ * along with methods that calculate metrics from the data
+ * elements.  The data and metrics calculation algorithms
+ * are collected together here purely to keep them together.
+ * Future work may need to add additional metric calculations,
+ * and for now, we are trying to keep all related data and
+ * algorithms together, although these could easily be
+ * refactored in the future and moved to separate classes.
+ * However, it seems that for now, moving the data elements
+ * or the algorithms separately into different classes could
+ * lead to confusion over usage.
+ */
+{
+public:
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  WaveBsmStats ();
+
+  /**
+   * \brief Increments the count of transmitted packets
+   * \return none
+   */
+  void IncTxPktCount ();
+
+  /**
+   * \brief Returns the count of transmitted packets
+   * \return count of packets transmitted
+   */
+  int GetTxPktCount ();
+
+  /*
+   * Note:
+   * The WAVE Basic Safety Message (BSM) is broadcast and
+   * unacknowledged. In order to calculate packet delivery
+   * ratio (PDR), we must count i) the packets that are
+   * actually received and ii) the transmitted packets that
+   * are expected to be received.  Both are relative to a
+   * specified (circular) coverage area.
+   *
+   * For example:  Say we have three nodes, A, B, and C, each
+   * separated by 40m, as follows:
+   *
+   *    A --<40m>-- B --<40m>-- C
+   *
+   * Let's assume that the transmission range is 50m, and only
+   * A is transmitting (i.e. broadcasting).  B can receive A's
+   * broadcasts, while C cannot.  Let's assume no dropped packets.
+   * If we set the coverage area to  100m, then the PDR is 50%,
+   * because B receives every transmission from A, while C receives
+   * none of them.  However, if we change the effective
+   * coverage area to 75m then the PDR improves to 100%, because
+   * B receives 100% of A's transmissions, and C is outside of the
+   * coverage area, and so does not factor in to the PDR.
+   */
+
+  /**
+   * \brief Increments the count of (broadcast) packets expected
+   * to be received within the coverage area1.  Broadcast packets
+   * (i.e. WAVE Basic Safety Messages) are not ACK'd.  For packet
+   * delivery ratio (PDR), we need to count transmitted packets that
+   * are expected to be received within the coverage area, even
+   * though they may not be physically received (due to collisions
+   * or receiver power thresholds).
+  * \return none
+   */
+  void IncExpectedRxPktCount (int index);
+
+  /**
+   * \brief Increments the count of actual packets received
+   * (regardless of coverage area).
+   * \return none
+   */
+  void IncRxPktCount ();
+
+  /**
+   * \brief Increments the count of actual packets received within
+   * the coverage area(index).  Broadcast packets
+   * (i.e. WAVE Basic Safety Messages) are not ACK'd.  For packet
+   * delivery ratio (PDR), we need to count only those received packets
+   * that are actually received within the (circular) coverage area.
+   * \return none
+   */
+  void IncRxPktInRangeCount (int index);
+
+  /**
+   * \brief Returns the count of packets received
+   * \return the count of packets received
+   */
+  int GetRxPktCount ();
+
+  /**
+   * \brief Returns the count of expected packets received within range(index)
+   * \return the count of expected packets received within range(index)
+   */
+  int GetExpectedRxPktCount (int index);
+
+  /**
+   * \brief Increments the count of actual packets recevied within range(index)
+   * \return the count of actual packets received within range(index)
+   */
+  int GetRxPktInRangeCount (int index);
+
+  /**
+   * \brief Sets the count of packets expected to received
+   * \param range index
+   * \param count the count of packets
+   * \return none
+   */
+  void SetExpectedRxPktCount (int index, int count);
+
+  /**
+   * \brief Sets the count of packets within range that are received
+   * \param range index
+   * \param count the count of packets
+   * \return none
+   */
+  void SetRxPktInRangeCount (int index, int count);
+
+  /**
+   * \brief Resets the count of total packets
+   * expected and/or within range(index) that are received
+   * \return none
+   */
+  void ResetTotalRxPktCounts (int index);
+
+  /**
+   * \brief Sets the count of packets transmitted
+   * \param count the count of packets transmitted
+   * \return none
+   */
+  void SetTxPktCount (int count);
+
+  /**
+   * \brief Sets the count of packets received
+   * \param count the count of packets received
+   * \return none
+   */
+  void SetRxPktCount (int count);
+
+  /**
+   * \brief Increments the count of (application data) bytes transmitted
+   * not including MAC/PHY overhead
+   * \param bytes the bytes of application-data transmitted
+   * \return none
+   */
+  void IncTxByteCount (int bytes);
+
+  /**
+   * \brief Returns the count of (application data) bytes transmitted
+   * not include MAC/PHY overhead
+   * \return number of bytes of application-data transmitted
+   */
+  int GetTxByteCount ();
+
+  /**
+   * \brief Returns the BSM Packet Delivery Ratio (PDR)
+   * which is the percent of expected packets within range(index) that
+   * are actually received
+   * \return the packet delivery ratio (PDR) of BSMs.
+   */
+  double GetBsmPdr (int index);
+
+  /**
+   * \brief Returns the cumulative BSM Packet Delivery Ratio (PDR)
+   * which is the percent of cumulative expected packets within range(index)
+   * that are actually received
+   * \return the packet delivery ratio (PDR) of BSMs.
+   */
+  double GetCumulativeBsmPdr (int index);
+
+  /**
+   * \brief Enables/disables logging
+   * \return none
+   */
+  void SetLogging (int log);
+
+  /**
+   * \brief Gets logging state
+   * \return logging state
+   */
+  int GetLogging ();
+
+private:
+  int m_wavePktSendCount;
+  int m_waveByteSendCount;
+  int m_wavePktReceiveCount;
+  std::vector <int> m_wavePktInCoverageReceiveCounts;
+  std::vector <int> m_wavePktExpectedReceiveCounts;
+  std::vector <int> m_waveTotalPktInCoverageReceiveCounts;
+  std::vector <int> m_waveTotalPktExpectedReceiveCounts;
+  int m_log;
+};
+
+} // namespace ns3
+
+#endif /* WAVE_BSM_STATS_H*/
diff -Naur ns-3.21/src/wave/helper/wave-helper.cc ns-3.22/src/wave/helper/wave-helper.cc
--- ns-3.21/src/wave/helper/wave-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/helper/wave-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,625 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#include "ns3/wifi-mac.h"
+#include "ns3/wifi-phy.h"
+#include "ns3/log.h"
+#include "ns3/pointer.h"
+#include "ns3/string.h"
+#include "ns3/wifi-mode.h"
+#include "ns3/config.h"
+#include "ns3/names.h"
+#include "ns3/abort.h"
+#include "ns3/wave-net-device.h"
+#include "ns3/minstrel-wifi-manager.h"
+#include "ns3/radiotap-header.h"
+#include "wave-mac-helper.h"
+#include "wave-helper.h"
+
+NS_LOG_COMPONENT_DEFINE ("WaveHelper");
+
+namespace ns3 {
+
+static void
+AsciiPhyTransmitSinkWithContext (
+  Ptr<OutputStreamWrapper> stream,
+  std::string context,
+  Ptr<const Packet> p,
+  WifiMode mode,
+  WifiPreamble preamble,
+  uint8_t txLevel)
+{
+  NS_LOG_FUNCTION (stream << context << p << mode << preamble << txLevel);
+  *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << context << " " << *p << std::endl;
+}
+
+static void
+AsciiPhyTransmitSinkWithoutContext (
+  Ptr<OutputStreamWrapper> stream,
+  Ptr<const Packet> p,
+  WifiMode mode,
+  WifiPreamble preamble,
+  uint8_t txLevel)
+{
+  NS_LOG_FUNCTION (stream << p << mode << preamble << txLevel);
+  *stream->GetStream () << "t " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
+}
+
+static void
+AsciiPhyReceiveSinkWithContext (
+  Ptr<OutputStreamWrapper> stream,
+  std::string context,
+  Ptr<const Packet> p,
+  double snr,
+  WifiMode mode,
+  enum WifiPreamble preamble)
+{
+  NS_LOG_FUNCTION (stream << context << p << snr << mode << preamble);
+  *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << context << " " << *p << std::endl;
+}
+
+static void
+AsciiPhyReceiveSinkWithoutContext (
+  Ptr<OutputStreamWrapper> stream,
+  Ptr<const Packet> p,
+  double snr,
+  WifiMode mode,
+  enum WifiPreamble preamble)
+{
+  NS_LOG_FUNCTION (stream << p << snr << mode << preamble);
+  *stream->GetStream () << "r " << Simulator::Now ().GetSeconds () << " " << *p << std::endl;
+}
+
+static void
+PcapSniffTxEvent (
+  Ptr<PcapFileWrapper> file,
+  Ptr<const Packet>   packet,
+  uint16_t            channelFreqMhz,
+  uint16_t            channelNumber,
+  uint32_t            rate,
+  bool                isShortPreamble,
+  uint8_t             txPower)
+{
+  uint32_t dlt = file->GetDataLinkType ();
+
+  switch (dlt)
+    {
+    case PcapHelper::DLT_IEEE802_11:
+      file->Write (Simulator::Now (), packet);
+      return;
+    case PcapHelper::DLT_PRISM_HEADER:
+      {
+        NS_FATAL_ERROR ("PcapSniffTxEvent(): DLT_PRISM_HEADER not implemented");
+        return;
+      }
+    case PcapHelper::DLT_IEEE802_11_RADIO:
+      {
+        Ptr<Packet> p = packet->Copy ();
+        RadiotapHeader header;
+        uint8_t frameFlags = RadiotapHeader::FRAME_FLAG_NONE;
+        header.SetTsft (Simulator::Now ().GetMicroSeconds ());
+
+        // Our capture includes the FCS, so we set the flag to say so.
+        frameFlags |= RadiotapHeader::FRAME_FLAG_FCS_INCLUDED;
+
+        if (isShortPreamble)
+          {
+            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
+          }
+
+        header.SetFrameFlags (frameFlags);
+        header.SetRate (rate);
+
+        uint16_t channelFlags = 0;
+        switch (rate)
+          {
+          case 2:  // 1Mbps
+          case 4:  // 2Mbps
+          case 10: // 5Mbps
+          case 22: // 11Mbps
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
+            break;
+
+          default:
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
+            break;
+          }
+
+        if (channelFreqMhz < 2500)
+          {
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
+          }
+        else
+          {
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
+          }
+
+        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
+
+
+        p->AddHeader (header);
+        file->Write (Simulator::Now (), p);
+        return;
+      }
+    default:
+      NS_ABORT_MSG ("PcapSniffTxEvent(): Unexpected data link type " << dlt);
+    }
+}
+
+static void
+PcapSniffRxEvent (
+  Ptr<PcapFileWrapper> file,
+  Ptr<const Packet> packet,
+  uint16_t channelFreqMhz,
+  uint16_t channelNumber,
+  uint32_t rate,
+  bool isShortPreamble,
+  double signalDbm,
+  double noiseDbm)
+{
+  uint32_t dlt = file->GetDataLinkType ();
+
+  switch (dlt)
+    {
+    case PcapHelper::DLT_IEEE802_11:
+      file->Write (Simulator::Now (), packet);
+      return;
+    case PcapHelper::DLT_PRISM_HEADER:
+      {
+        NS_FATAL_ERROR ("PcapSniffRxEvent(): DLT_PRISM_HEADER not implemented");
+        return;
+      }
+    case PcapHelper::DLT_IEEE802_11_RADIO:
+      {
+        Ptr<Packet> p = packet->Copy ();
+        RadiotapHeader header;
+        uint8_t frameFlags = RadiotapHeader::FRAME_FLAG_NONE;
+        header.SetTsft (Simulator::Now ().GetMicroSeconds ());
+
+        // Our capture includes the FCS, so we set the flag to say so.
+        frameFlags |= RadiotapHeader::FRAME_FLAG_FCS_INCLUDED;
+
+        if (isShortPreamble)
+          {
+            frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
+          }
+
+        header.SetFrameFlags (frameFlags);
+        header.SetRate (rate);
+
+        uint16_t channelFlags = 0;
+        switch (rate)
+          {
+          case 2:  // 1Mbps
+          case 4:  // 2Mbps
+          case 10: // 5Mbps
+          case 22: // 11Mbps
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_CCK;
+            break;
+
+          default:
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_OFDM;
+            break;
+          }
+
+        if (channelFreqMhz < 2500)
+          {
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_2GHZ;
+          }
+        else
+          {
+            channelFlags |= RadiotapHeader::CHANNEL_FLAG_SPECTRUM_5GHZ;
+          }
+
+        header.SetChannelFrequencyAndFlags (channelFreqMhz, channelFlags);
+
+        header.SetAntennaSignalPower (signalDbm);
+        header.SetAntennaNoisePower (noiseDbm);
+
+        p->AddHeader (header);
+        file->Write (Simulator::Now (), p);
+        return;
+      }
+    default:
+      NS_ABORT_MSG ("PcapSniffRxEvent(): Unexpected data link type " << dlt);
+    }
+}
+
+/****************************** YansWavePhyHelper ***********************************/
+YansWavePhyHelper
+YansWavePhyHelper::Default (void)
+{
+  YansWavePhyHelper helper;
+  helper.SetErrorRateModel ("ns3::NistErrorRateModel");
+  return helper;
+}
+
+void
+YansWavePhyHelper::EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename)
+{
+  //
+  // All of the Pcap enable functions vector through here including the ones
+  // that are wandering through all of devices on perhaps all of the nodes in
+  // the system.  We can only deal with devices of type WaveNetDevice.
+  //
+  Ptr<WaveNetDevice> device = nd->GetObject<WaveNetDevice> ();
+  if (device == 0)
+    {
+      NS_LOG_INFO ("YansWavePhyHelper::EnablePcapInternal(): Device " << &device << " not of type ns3::WaveNetDevice");
+      return;
+    }
+
+  std::vector<Ptr<WifiPhy> > phys = device->GetPhys ();
+  NS_ABORT_MSG_IF (phys.size () == 0, "EnablePcapInternal(): Phy layer in WaveNetDevice must be set");
+
+  PcapHelper pcapHelper;
+
+  std::string filename;
+  if (explicitFilename)
+    {
+      filename = prefix;
+    }
+  else
+    {
+      filename = pcapHelper.GetFilenameFromDevice (prefix, device);
+    }
+
+  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile (filename, std::ios::out, GetPcapDataLinkType ());
+
+  std::vector<Ptr<WifiPhy> >::iterator i;
+  for (i = phys.begin (); i != phys.end (); ++i)
+    {
+      Ptr<WifiPhy> phy = (*i);
+      phy->TraceConnectWithoutContext ("MonitorSnifferTx", MakeBoundCallback (&PcapSniffTxEvent, file));
+      phy->TraceConnectWithoutContext ("MonitorSnifferRx", MakeBoundCallback (&PcapSniffRxEvent, file));
+    }
+}
+
+void
+YansWavePhyHelper::EnableAsciiInternal (
+  Ptr<OutputStreamWrapper> stream,
+  std::string prefix,
+  Ptr<NetDevice> nd,
+  bool explicitFilename)
+{
+  //
+  // All of the ascii enable functions vector through here including the ones
+  // that are wandering through all of devices on perhaps all of the nodes in
+  // the system.  We can only deal with devices of type WaveNetDevice.
+  //
+  Ptr<WaveNetDevice> device = nd->GetObject<WaveNetDevice> ();
+  if (device == 0)
+    {
+      NS_LOG_INFO ("EnableAsciiInternal(): Device " << device << " not of type ns3::WaveNetDevice");
+      return;
+    }
+
+  //
+  // Our trace sinks are going to use packet printing, so we have to make sure
+  // that is turned on.
+  //
+  Packet::EnablePrinting ();
+
+  uint32_t nodeid = nd->GetNode ()->GetId ();
+  uint32_t deviceid = nd->GetIfIndex ();
+  std::ostringstream oss;
+
+  //
+  // If we are not provided an OutputStreamWrapper, we are expected to create
+  // one using the usual trace filename conventions and write our traces
+  // without a context since there will be one file per context and therefore
+  // the context would be redundant.
+  //
+  if (stream == 0)
+    {
+      //
+      // Set up an output stream object to deal with private ofstream copy
+      // constructor and lifetime issues.  Let the helper decide the actual
+      // name of the file given the prefix.
+      //
+      AsciiTraceHelper asciiTraceHelper;
+
+      std::string filename;
+      if (explicitFilename)
+        {
+          filename = prefix;
+        }
+      else
+        {
+          filename = asciiTraceHelper.GetFilenameFromDevice (prefix, device);
+        }
+
+      Ptr<OutputStreamWrapper> theStream = asciiTraceHelper.CreateFileStream (filename);
+      //
+      // We could go poking through the phy and the state looking for the
+      // correct trace source, but we can let Config deal with that with
+      // some search cost.  Since this is presumably happening at topology
+      // creation time, it doesn't seem much of a price to pay.
+      //
+      oss.str ("");
+      oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WaveNetDevice/PhyEntities/*/$ns3::WifiPhy/State/RxOk";
+      Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&AsciiPhyReceiveSinkWithoutContext, theStream));
+
+      oss.str ("");
+      oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WaveNetDevice/PhyEntities/*/$ns3::WifiPhy/State/Tx";
+      Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&AsciiPhyTransmitSinkWithoutContext, theStream));
+
+      return;
+    }
+
+  //
+  // If we are provided an OutputStreamWrapper, we are expected to use it, and
+  // to provide a context.  We are free to come up with our own context if we
+  // want, and use the AsciiTraceHelper Hook*WithContext functions, but for
+  // compatibility and simplicity, we just use Config::Connect and let it deal
+  // with coming up with a context.
+  //
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WaveNetDevice/PhyEntities/*/$ns3::WifiPhy/RxOk";
+  Config::Connect (oss.str (), MakeBoundCallback (&AsciiPhyReceiveSinkWithContext, stream));
+
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::WaveNetDevice/PhyEntities/*/$ns3::WifiPhy/State/Tx";
+  Config::Connect (oss.str (), MakeBoundCallback (&AsciiPhyTransmitSinkWithContext, stream));
+}
+
+/********************************** WaveHelper ******************************************/
+WaveHelper::WaveHelper ()
+{
+}
+
+WaveHelper::~WaveHelper ()
+{
+}
+
+WaveHelper
+WaveHelper::Default (void)
+{
+  WaveHelper helper;
+  // default 7 MAC entities and single PHY device.
+  helper.CreateMacForChannel (ChannelManager::GetWaveChannels ());
+  helper.CreatePhys (1);
+  helper.SetChannelScheduler ("ns3::DefaultChannelScheduler");
+  helper.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                  "DataMode", StringValue ("OfdmRate6MbpsBW10MHz"),
+                                  "ControlMode",StringValue ("OfdmRate6MbpsBW10MHz"),
+                                  "NonUnicastMode", StringValue ("OfdmRate6MbpsBW10MHz"));
+  return helper;
+}
+
+void
+WaveHelper::CreateMacForChannel (std::vector<uint32_t> channelNumbers)
+{
+  if (channelNumbers.size () == 0)
+    {
+      NS_FATAL_ERROR ("the WAVE MAC entities is at least one");
+    }
+  for (std::vector<uint32_t>::iterator i = channelNumbers.begin (); i != channelNumbers.end (); ++i)
+    {
+      if (!ChannelManager::IsWaveChannel (*i))
+        {
+          NS_FATAL_ERROR ("the channel number " << (*i) << " is not a valid WAVE channel number");
+        }
+    }
+  m_macsForChannelNumber = channelNumbers;
+}
+
+void
+WaveHelper::CreatePhys (uint32_t phys)
+{
+  if (phys == 0)
+    {
+      NS_FATAL_ERROR ("the WAVE PHY entities is at least one");
+    }
+  if (phys > ChannelManager::GetNumberOfWaveChannels ())
+    {
+      NS_FATAL_ERROR ("the number of assigned WAVE PHY entities is more than the number of valid WAVE channels");
+    }
+  m_physNumber = phys;
+}
+
+void
+WaveHelper::SetRemoteStationManager (std::string type,
+                                     std::string n0, const AttributeValue &v0,
+                                     std::string n1, const AttributeValue &v1,
+                                     std::string n2, const AttributeValue &v2,
+                                     std::string n3, const AttributeValue &v3,
+                                     std::string n4, const AttributeValue &v4,
+                                     std::string n5, const AttributeValue &v5,
+                                     std::string n6, const AttributeValue &v6,
+                                     std::string n7, const AttributeValue &v7)
+{
+  m_stationManager = ObjectFactory ();
+  m_stationManager.SetTypeId (type);
+  m_stationManager.Set (n0, v0);
+  m_stationManager.Set (n1, v1);
+  m_stationManager.Set (n2, v2);
+  m_stationManager.Set (n3, v3);
+  m_stationManager.Set (n4, v4);
+  m_stationManager.Set (n5, v5);
+  m_stationManager.Set (n6, v6);
+  m_stationManager.Set (n7, v7);
+}
+
+void
+WaveHelper::SetChannelScheduler (std::string type,
+                                 std::string n0, const AttributeValue &v0,
+                                 std::string n1, const AttributeValue &v1,
+                                 std::string n2, const AttributeValue &v2,
+                                 std::string n3, const AttributeValue &v3,
+                                 std::string n4, const AttributeValue &v4,
+                                 std::string n5, const AttributeValue &v5,
+                                 std::string n6, const AttributeValue &v6,
+                                 std::string n7, const AttributeValue &v7)
+{
+  m_channelScheduler = ObjectFactory ();
+  m_channelScheduler.SetTypeId (type);
+  m_channelScheduler.Set (n0, v0);
+  m_channelScheduler.Set (n1, v1);
+  m_channelScheduler.Set (n2, v2);
+  m_channelScheduler.Set (n3, v3);
+  m_channelScheduler.Set (n4, v4);
+  m_channelScheduler.Set (n5, v5);
+  m_channelScheduler.Set (n6, v6);
+  m_channelScheduler.Set (n7, v7);
+}
+
+NetDeviceContainer
+WaveHelper::Install (const WifiPhyHelper &phyHelper,  const WifiMacHelper &macHelper, NodeContainer c) const
+{
+  try
+    {
+      const QosWaveMacHelper& qosMac = dynamic_cast<const QosWaveMacHelper&> (macHelper);
+      // below check will never fail, just used for survive from
+      // gcc warn "-Wunused-but-set-variable"
+      if (&qosMac == 0)
+        {
+          NS_FATAL_ERROR ("it could never get here");
+        }
+    }
+  catch (const std::bad_cast &)
+    {
+      NS_FATAL_ERROR ("WifiMacHelper should be the class or subclass of QosWaveMacHelper");
+    }
+
+  NetDeviceContainer devices;
+  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      Ptr<Node> node = *i;
+      Ptr<WaveNetDevice> device = CreateObject<WaveNetDevice> ();
+
+      device->SetChannelManager (CreateObject<ChannelManager> ());
+      device->SetChannelCoordinator (CreateObject<ChannelCoordinator> ());
+      device->SetVsaManager (CreateObject<VsaManager> ());
+      device->SetChannelScheduler (m_channelScheduler.Create<ChannelScheduler> ());
+
+      for (uint32_t j = 0; j != m_physNumber; ++j)
+        {
+          Ptr<WifiPhy> phy = phyHelper.Create (node, device);
+          phy->ConfigureStandard (WIFI_PHY_STANDARD_80211_10MHZ);
+          phy->SetChannelNumber (ChannelManager::GetCch ());
+          device->AddPhy (phy);
+        }
+
+      for (std::vector<uint32_t>::const_iterator k = m_macsForChannelNumber.begin ();
+           k != m_macsForChannelNumber.end (); ++k)
+        {
+          Ptr<WifiMac> wifiMac = macHelper.Create ();
+          Ptr<OcbWifiMac> ocbMac = DynamicCast<OcbWifiMac> (wifiMac);
+          // we use WaveMacLow to replace original MacLow
+          ocbMac->EnableForWave (device);
+          ocbMac->SetWifiRemoteStationManager ( m_stationManager.Create<WifiRemoteStationManager> ());
+          ocbMac->ConfigureStandard (WIFI_PHY_STANDARD_80211_10MHZ);
+          device->AddMac (*k, ocbMac);
+        }
+
+      device->SetAddress (Mac48Address::Allocate ());
+
+      node->AddDevice (device);
+      devices.Add (device);
+    }
+  return devices;
+}
+
+NetDeviceContainer
+WaveHelper::Install (const WifiPhyHelper &phy, const WifiMacHelper &mac, Ptr<Node> node) const
+{
+  return Install (phy, mac, NodeContainer (node));
+}
+
+NetDeviceContainer
+WaveHelper::Install (const WifiPhyHelper &phy, const WifiMacHelper &mac, std::string nodeName) const
+{
+  Ptr<Node> node = Names::Find<Node> (nodeName);
+  return Install (phy, mac, NodeContainer (node));
+}
+
+void
+WaveHelper::EnableLogComponents (void)
+{
+  WifiHelper::EnableLogComponents ();
+
+  LogComponentEnable ("WaveNetDevice", LOG_LEVEL_ALL);
+  LogComponentEnable ("ChannelCoordinator", LOG_LEVEL_ALL);
+  LogComponentEnable ("ChannelManager", LOG_LEVEL_ALL);
+  LogComponentEnable ("ChannelScheduler", LOG_LEVEL_ALL);
+  LogComponentEnable ("DefaultChannelScheduler", LOG_LEVEL_ALL);
+  LogComponentEnable ("VsaManager", LOG_LEVEL_ALL);
+  LogComponentEnable ("OcbWifiMac", LOG_LEVEL_ALL);
+  LogComponentEnable ("VendorSpecificAction", LOG_LEVEL_ALL);
+  LogComponentEnable ("WaveMacLow", LOG_LEVEL_ALL);
+  LogComponentEnable ("HigherLayerTxVectorTag", LOG_LEVEL_ALL);
+}
+
+int64_t
+WaveHelper::AssignStreams (NetDeviceContainer c, int64_t stream)
+{
+  int64_t currentStream = stream;
+  Ptr<NetDevice> netDevice;
+  for (NetDeviceContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      netDevice = (*i);
+      Ptr<WaveNetDevice> wave = DynamicCast<WaveNetDevice> (netDevice);
+      if (wave)
+        {
+          // Handle any random numbers in the PHY objects.
+          std::vector<Ptr<WifiPhy> > phys = wave->GetPhys ();
+          for (std::vector<Ptr<WifiPhy> >::iterator j = phys.begin (); j != phys.end (); ++i)
+            {
+              currentStream += (*j)->AssignStreams (currentStream);
+            }
+
+          // Handle any random numbers in the MAC objects.
+          std::map<uint32_t, Ptr<OcbWifiMac> > macs = wave->GetMacs ();
+          for ( std::map<uint32_t, Ptr<OcbWifiMac> >::iterator k = macs.begin (); k != macs.end (); ++k)
+            {
+              Ptr<RegularWifiMac> rmac = DynamicCast<RegularWifiMac> (k->second);
+
+              // Handle any random numbers in the station managers.
+              Ptr<WifiRemoteStationManager> manager = rmac->GetWifiRemoteStationManager ();
+              Ptr<MinstrelWifiManager> minstrel = DynamicCast<MinstrelWifiManager> (manager);
+              if (minstrel)
+                {
+                  currentStream += minstrel->AssignStreams (currentStream);
+                }
+
+              PointerValue ptr;
+              rmac->GetAttribute ("DcaTxop", ptr);
+              Ptr<DcaTxop> dcaTxop = ptr.Get<DcaTxop> ();
+              currentStream += dcaTxop->AssignStreams (currentStream);
+
+              rmac->GetAttribute ("VO_EdcaTxopN", ptr);
+              Ptr<EdcaTxopN> vo_edcaTxopN = ptr.Get<EdcaTxopN> ();
+              currentStream += vo_edcaTxopN->AssignStreams (currentStream);
+
+              rmac->GetAttribute ("VI_EdcaTxopN", ptr);
+              Ptr<EdcaTxopN> vi_edcaTxopN = ptr.Get<EdcaTxopN> ();
+              currentStream += vi_edcaTxopN->AssignStreams (currentStream);
+
+              rmac->GetAttribute ("BE_EdcaTxopN", ptr);
+              Ptr<EdcaTxopN> be_edcaTxopN = ptr.Get<EdcaTxopN> ();
+              currentStream += be_edcaTxopN->AssignStreams (currentStream);
+
+              rmac->GetAttribute ("BK_EdcaTxopN", ptr);
+              Ptr<EdcaTxopN> bk_edcaTxopN = ptr.Get<EdcaTxopN> ();
+              currentStream += bk_edcaTxopN->AssignStreams (currentStream);
+            }
+        }
+    }
+  return (currentStream - stream);
+}
+} // namespace ns3
diff -Naur ns-3.21/src/wave/helper/wave-helper.h ns-3.22/src/wave/helper/wave-helper.h
--- ns-3.21/src/wave/helper/wave-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/helper/wave-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,251 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#ifndef WAVE_HELPER_H
+#define WAVE_HELPER_H
+
+#include <string>
+#include "ns3/attribute.h"
+#include "ns3/object-factory.h"
+#include "ns3/node-container.h"
+#include "ns3/net-device-container.h"
+#include "ns3/trace-helper.h"
+#include "ns3/yans-wifi-helper.h"
+
+namespace ns3 {
+class WifiPhy;
+class WifiMac;
+class WaveNetDevice;
+class Node;
+
+/**
+ * To trace WaveNetDevice, we have to overwrite the trace functions of class YansWifiPhyHelper.
+ * The source code is very similar with YansWifiPhy, only with some adaptation.
+ */
+class YansWavePhyHelper : public YansWifiPhyHelper
+{
+public:
+  /**
+   * Create a phy helper in a default working state.
+   */
+  static YansWavePhyHelper Default (void);
+
+private:
+  /**
+   * @brief Enable pcap output the indicated net device.
+   *
+   * NetDevice-specific implementation mechanism for hooking the trace and
+   * writing to the trace file.
+   *
+   * @param prefix Filename prefix to use for pcap files.
+   * @param nd Net device for which you want to enable tracing.
+   * @param promiscuous If true capture all possible packets available at the device.
+   * @param explicitFilename Treat the prefix as an explicit filename if true
+   */
+  virtual void EnablePcapInternal (std::string prefix,
+                                   Ptr<NetDevice> nd,
+                                   bool promiscuous,
+                                   bool explicitFilename);
+
+  /**
+   * \brief Enable ascii trace output on the indicated net device.
+   * \internal
+   *
+   * NetDevice-specific implementation mechanism for hooking the trace and
+   * writing to the trace file.
+   *
+   * \param stream The output stream object to use when logging ascii traces.
+   * \param prefix Filename prefix to use for ascii trace files.
+   * \param nd Net device for which you want to enable tracing.
+   * \param explicitFilename Treat the prefix as an explicit filename if true
+   */
+  virtual void EnableAsciiInternal (Ptr<OutputStreamWrapper> stream,
+                                    std::string prefix,
+                                    Ptr<NetDevice> nd,
+                                    bool explicitFilename);
+};
+
+/**
+ * \brief helps to create WaveNetDevice objects
+ *
+ * This class can help to create a large set of similar
+ * WaveNetDevice objects and to configure a large set of
+ * their attributes during creation.
+ *
+ * Generally WaveHelper with default configuration will
+ * create devices with 7 MAC entities,1 PHY entity and a
+ * multiple-channel scheduler for to deal with these entities.
+ *
+ * If users can make sure on which channel this WAVE device
+ * will work, they can set specific channel numbers to save
+ * resources of unused channels as below:
+ * WaveHelper helper = WaveHelper::Default ();
+ * uint32_t channels[] = {CCH, SCH1};
+ * std::vector<uint32_t> channelsVector (channels, channels + 2);
+ * helper.helper.CreateMacForChannel (channelsVector);
+ *
+ * If users can create other channel scheduler such as "AnotherScheduler"
+ * which can assign channel access in the context of  more PHY entities,
+ * they can use this helper to create WAVE devices as below:
+ * WaveHelper helper = WaveHelper::Default ();
+ * helper.helper.CreateMacForChannel (ChannelManager::GetWaveChannels ());
+ * helper.CreatePhys (2);        // or other number which should be less than 7
+ * helper.SetChannelScheduler ("ns3::AnotherScheduler");
+ * helper.SetRemoteStationManager ("ns3::ConstantRateWifiManager");  // or other  rate control algorithms
+ */
+class WaveHelper
+{
+public:
+  WaveHelper ();
+  virtual ~WaveHelper ();
+
+  /**
+   * \returns a new WaveHelper in a default state
+   *
+   * The default state is defined as being seven OcbWifiMac MAC entities
+   * with an ConstantRate rate control algorithm, one WifiPhy entity and
+   * a default multiple-channel scheduler DefaultChannelScheduler for
+   * assigning channel access with these created entities.
+   */
+  static WaveHelper Default (void);
+
+  /**
+   * \param channelNumbers the MAC entities will be created to support these channels for multiple channel operation.
+   */
+  void CreateMacForChannel (std::vector<uint32_t>  channelNumbers);
+  /**
+   * \param phys the number of PHY entity which will be created for multiple channel operation.
+   */
+  void CreatePhys (uint32_t phys);
+
+  /**
+   * \param type the type of ns3::WifiRemoteStationManager to create.
+   * \param n0 the name of the attribute to set
+   * \param v0 the value of the attribute to set
+   * \param n1 the name of the attribute to set
+   * \param v1 the value of the attribute to set
+   * \param n2 the name of the attribute to set
+   * \param v2 the value of the attribute to set
+   * \param n3 the name of the attribute to set
+   * \param v3 the value of the attribute to set
+   * \param n4 the name of the attribute to set
+   * \param v4 the value of the attribute to set
+   * \param n5 the name of the attribute to set
+   * \param v5 the value of the attribute to set
+   * \param n6 the name of the attribute to set
+   * \param v6 the value of the attribute to set
+   * \param n7 the name of the attribute to set
+   * \param v7 the value of the attribute to set
+   *
+   * All the attributes specified in this method should exist
+   * in the requested station manager.
+   */
+  void SetRemoteStationManager (std::string type,
+                                std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
+                                std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
+                                std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
+                                std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
+                                std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
+                                std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
+                                std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
+                                std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+  /**
+   * \param type the type of ns3::ChannelScheduler to create.
+   * \param n0 the name of the attribute to set
+   * \param v0 the value of the attribute to set
+   * \param n1 the name of the attribute to set
+   * \param v1 the value of the attribute to set
+   * \param n2 the name of the attribute to set
+   * \param v2 the value of the attribute to set
+   * \param n3 the name of the attribute to set
+   * \param v3 the value of the attribute to set
+   * \param n4 the name of the attribute to set
+   * \param v4 the value of the attribute to set
+   * \param n5 the name of the attribute to set
+   * \param v5 the value of the attribute to set
+   * \param n6 the name of the attribute to set
+   * \param v6 the value of the attribute to set
+   * \param n7 the name of the attribute to set
+   * \param v7 the value of the attribute to set
+   *
+   * All the attributes specified in this method should exist
+   * in the requested channel scheduler.
+   */
+  void SetChannelScheduler (std::string type,
+                            std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
+                            std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
+                            std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
+                            std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
+                            std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
+                            std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
+                            std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
+                            std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+
+  /**
+   * \param phy the PHY helper to create PHY objects
+   * \param mac the MAC helper to create MAC objects
+   * \param c the set of nodes on which a wifi device must be created
+   * \returns a device container which contains all the devices created by this method.
+   */
+  virtual NetDeviceContainer Install (const WifiPhyHelper &phy,
+                                      const WifiMacHelper &mac, NodeContainer c) const;
+  /**
+   * \param phy the PHY helper to create PHY objects
+   * \param mac the MAC helper to create MAC objects
+   * \param node the node on which a wifi device must be created
+   * \returns a device container which contains all the devices created by this method.
+   */
+  virtual NetDeviceContainer Install (const WifiPhyHelper &phy,
+                                      const WifiMacHelper &mac,   Ptr<Node> node) const;
+  /**
+   * \param phy the PHY helper to create PHY objects
+   * \param mac the MAC helper to create MAC objects
+   * \param nodeName the name of node on which a wifi device must be created
+   * \returns a device container which contains all the devices created by this method.
+   */
+  virtual NetDeviceContainer Install (const WifiPhyHelper &phy,
+                                      const WifiMacHelper &mac, std::string nodeName) const;
+
+  /**
+   * Helper to enable all WaveNetDevice log components with one statement
+   */
+  static void EnableLogComponents (void);
+
+  /**
+  * Assign a fixed random variable stream number to the random variables
+  * used by the Phy and Mac aspects of the WAVE models.  Each device in
+  * container c has fixed stream numbers assigned to its random variables.
+  * The Wifi channel (e.g. propagation loss model) is excluded.
+  * Return the number of streams (possibly zero) that
+  * have been assigned. The Install() method should have previously been
+  * called by the user.
+  *
+  * \param c NetDeviceContainer of the set of net devices for which the
+  *          WaveNetDevice should be modified to use fixed streams
+  * \param stream first stream index to use
+  * \return the number of stream indices assigned by this helper
+  */
+  int64_t AssignStreams (NetDeviceContainer c, int64_t stream);
+
+protected:
+  ObjectFactory m_stationManager;
+  ObjectFactory m_channelScheduler;
+  std::vector<uint32_t> m_macsForChannelNumber;
+  uint32_t m_physNumber;
+};
+}
+#endif /* WAVE_HELPER_H */
diff -Naur ns-3.21/src/wave/helper/wave-mac-helper.cc ns-3.22/src/wave/helper/wave-mac-helper.cc
--- ns-3.21/src/wave/helper/wave-mac-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/helper/wave-mac-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,12 +21,7 @@
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  * Author: Junling Bu <linlinjavaer@gmail.com>
  */
-#include "ns3/wifi-mac.h"
-#include "ns3/wifi-phy.h"
-#include "ns3/log.h"
-#include "ns3/pointer.h"
 #include "ns3/boolean.h"
-#include "ns3/string.h"
 #include "wave-mac-helper.h"
 
 namespace ns3 {
diff -Naur ns-3.21/src/wave/helper/wave-mac-helper.h ns-3.22/src/wave/helper/wave-mac-helper.h
--- ns-3.21/src/wave/helper/wave-mac-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/helper/wave-mac-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -38,7 +38,6 @@
   NqosWaveMacHelper (void);
 
   /**
-   * \internal
    * Destroy a NqosWaveMacHelper.
    */
   virtual ~NqosWaveMacHelper (void);
@@ -93,7 +92,6 @@
   QosWaveMacHelper (void);
 
   /**
-   * \internal
    * Destroy a QosWaveMacHelper
    */
   virtual ~QosWaveMacHelper (void);
diff -Naur ns-3.21/src/wave/helper/wifi-80211p-helper.cc ns-3.22/src/wave/helper/wifi-80211p-helper.cc
--- ns-3.21/src/wave/helper/wifi-80211p-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/helper/wifi-80211p-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,6 +26,7 @@
 #include <typeinfo>
 #include "wave-mac-helper.h"
 #include "wifi-80211p-helper.h"
+#include "ns3/unused.h"
 
 namespace ns3 {
 
@@ -44,7 +45,8 @@
   helper.SetStandard (WIFI_PHY_STANDARD_80211_10MHZ);
   helper.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                   "DataMode", StringValue ("OfdmRate6MbpsBW10MHz"),
-                                  "ControlMode",StringValue ("OfdmRate6MbpsBW10MHz"));
+                                  "ControlMode",StringValue ("OfdmRate6MbpsBW10MHz"),
+                                  "NonUnicastMode", StringValue ("OfdmRate6MbpsBW10MHz"));
   return helper;
 }
 
@@ -79,12 +81,7 @@
     {
       const QosWaveMacHelper& qosMac = dynamic_cast<const QosWaveMacHelper&> (macHelper);
       isWaveMacHelper = true;
-      // below check will never fail, just used for survive from
-      // gcc warn "-Wunused-but-set-variable"
-      if (&qosMac == 0)
-        {
-          NS_FATAL_ERROR ("it could never get here");
-        }
+      NS_UNUSED (qosMac);
     }
   catch (const std::bad_cast &)
     {
@@ -95,10 +92,7 @@
     {
       const NqosWaveMacHelper& nqosMac = dynamic_cast<const NqosWaveMacHelper&> (macHelper);
       isWaveMacHelper = true;
-      if (&nqosMac == 0)
-        {
-          NS_FATAL_ERROR ("it could never get here");
-        }
+      NS_UNUSED (nqosMac);
     }
   catch (const std::bad_cast &)
     {
diff -Naur ns-3.21/src/wave/model/bsm-application.cc ns-3.22/src/wave/model/bsm-application.cc
--- ns-3.21/src/wave/model/bsm-application.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/bsm-application.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,413 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 North Carolina State 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: Scott E. Carpenter <scarpen@ncsu.edu>
+ *
+ */
+
+#include "ns3/bsm-application.h"
+#include "ns3/log.h"
+#include "ns3/seq-ts-header.h"
+#include "ns3/wave-net-device.h"
+#include "ns3/wave-mac-helper.h"
+#include "ns3/wave-helper.h"
+#include "ns3/mobility-model.h"
+#include "ns3/mobility-helper.h"
+
+NS_LOG_COMPONENT_DEFINE ("BsmApplication");
+
+namespace ns3 {
+
+// (Arbitrary) port for establishing socket to transmit WAVE BSMs
+int BsmApplication::wavePort = 9080;
+
+NS_OBJECT_ENSURE_REGISTERED (BsmApplication);
+
+TypeId
+BsmApplication::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::BsmApplication")
+    .SetParent<Application> ()
+    .AddConstructor<BsmApplication> ()
+    ;
+  return tid;
+}
+
+BsmApplication::BsmApplication ()
+  : m_waveBsmStats (0),
+    m_txSafetyRangesSq (),
+    m_TotalSimTime (Seconds (10)),
+    m_wavePacketSize (200),
+    m_numWavePackets (1),
+    m_waveInterval (MilliSeconds (100)),
+    m_gpsAccuracyNs (10000),
+    m_adhocTxInterfaces (0),
+    m_nodesMoving (0),
+    m_unirv (0),
+    m_nodeId (0),
+    m_chAccessMode (0),
+    m_txMaxDelay (MilliSeconds (10)),
+    m_prevTxDelay (MilliSeconds (0))
+{
+  NS_LOG_FUNCTION (this);
+}
+
+BsmApplication::~BsmApplication ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+BsmApplication::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  // chain up
+  Application::DoDispose ();
+}
+
+// Application Methods
+void BsmApplication::StartApplication () // Called at time specified by Start
+{
+  NS_LOG_FUNCTION (this);
+
+  // setup generation of WAVE BSM messages
+  Time waveInterPacketInterval = m_waveInterval;
+
+  // BSMs are not transmitted for the first second
+  Time startTime = Seconds (1.0);
+  // total length of time transmitting WAVE packets
+  Time totalTxTime = m_TotalSimTime - startTime;
+  // total WAVE packets needing to be sent
+  m_numWavePackets = (uint32_t) (totalTxTime.GetDouble () / m_waveInterval.GetDouble ());
+
+  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+
+  // every node broadcasts WAVE BSM to potentially all other nodes
+  Ptr<Socket> recvSink = Socket::CreateSocket (GetNode (m_nodeId), tid);
+  recvSink->SetRecvCallback (MakeCallback (&BsmApplication::ReceiveWavePacket, this));
+  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), wavePort);
+  recvSink->Bind (local);
+  recvSink->BindToNetDevice (GetNetDevice (m_nodeId));
+  recvSink->SetAllowBroadcast (true);
+
+  // dest is broadcast address
+  InetSocketAddress remote = InetSocketAddress (Ipv4Address ("255.255.255.255"), wavePort);
+  recvSink->Connect (remote);
+
+  // Transmission start time for each BSM:
+  // We assume that the start transmission time
+  // for the first packet will be on a ns-3 time
+  // "Second" boundary - e.g., 1.0 s.
+  // However, the actual transmit time must reflect
+  // additional effects of 1) clock drift and
+  // 2) transmit delay requirements.
+  // 1) Clock drift - clocks are not perfectly
+  // synchronized across all nodes.  In a VANET
+  // we assume all nodes sync to GPS time, which
+  // itself is assumed  accurate to, say, 40-100 ns.
+  // Thus, the start transmission time must be adjusted
+  // by some value, t_drift.
+  // 2) Transmit delay requirements - The US
+  // minimum performance requirements for V2V
+  // BSM transmission expect a random delay of
+  // +/- 5 ms, to avoid simultanous transmissions
+  // by all vehicles congesting the channel.  Thus,
+  // we need to adjust the start trasmission time by
+  // some value, t_tx_delay.
+  // Therefore, the actual transmit time should be:
+  // t_start = t_time + t_drift + t_tx_delay
+  // t_drift is always added to t_time.
+  // t_tx_delay is supposed to be +/- 5ms, but if we
+  // allow negative numbers the time could drift to a value
+  // BEFORE the interval start time (i.e., at 100 ms
+  // boundaries, we do not want to drift into the
+  // previous interval, such as at 95 ms.  Instead,
+  // we always want to be at the 100 ms interval boundary,
+  // plus [0..10] ms tx delay.
+  // Thus, the average t_tx_delay will be
+  // within the desired range of [0..10] ms of
+  // (t_time + t_drift)
+
+  // WAVE devices sync to GPS time
+  // and all devices would like to begin broadcasting
+  // their safety messages immediately at the start of
+  // the CCH interval.  However, if all do so, then
+  // significant collisions occur.  Thus, we assume there
+  // is some GPS sync accuracy on GPS devices,
+  // typically 40-100 ns.
+  // Get a uniformly random number for GPS sync accuracy, in ns.
+  Time tDrift = NanoSeconds (m_unirv->GetInteger (0, m_gpsAccuracyNs));
+
+  // When transmitting at a default rate of 10 Hz,
+  // the subsystem shall transmit every 100 ms +/-
+  // a random value between 0 and 5 ms. [MPR-BSMTX-TXTIM-002]
+  // Source: CAMP Vehicle Safety Communications 4 Consortium
+  // On-board Minimum Performance Requirements
+  // for V2V Safety Systems Version 1.0, December 17, 2014
+  // max transmit delay (default 10ms)
+  // get value for transmit delay, as number of ns
+  uint32_t d_ns = static_cast<uint32_t> (m_txMaxDelay.GetInteger ());
+  // convert random tx delay to ns-3 time
+  // see note above regarding centering tx delay
+  // offset by 5ms + a random value.
+  Time txDelay = NanoSeconds (m_unirv->GetInteger (0, d_ns));
+  m_prevTxDelay = txDelay;
+
+  Time txTime = startTime + tDrift + txDelay;
+  // schedule transmission of first packet
+  Simulator::ScheduleWithContext (recvSink->GetNode ()->GetId (),
+                                  txTime, &BsmApplication::GenerateWaveTraffic, this,
+                                  recvSink, m_wavePacketSize, m_numWavePackets, waveInterPacketInterval, m_nodeId);
+}
+
+void BsmApplication::StopApplication () // Called at time specified by Stop
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+BsmApplication::Setup (Ipv4InterfaceContainer & i,
+                       int nodeId,
+                       Time totalTime,
+                       uint32_t wavePacketSize, // bytes
+                       Time waveInterval,
+                       double gpsAccuracyNs,
+                       std::vector <double> rangesSq,           // m ^2
+                       Ptr<WaveBsmStats> waveBsmStats,
+                       std::vector<int> * nodesMoving,
+                       int chAccessMode,
+                       Time txMaxDelay)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_unirv = CreateObject<UniformRandomVariable> ();
+
+  m_TotalSimTime = totalTime;
+  m_wavePacketSize = wavePacketSize;
+  m_waveInterval = waveInterval;
+  m_gpsAccuracyNs = gpsAccuracyNs;
+  int size = rangesSq.size ();
+  m_waveBsmStats = waveBsmStats;
+  m_nodesMoving = nodesMoving;
+  m_chAccessMode = chAccessMode;
+  m_txSafetyRangesSq.clear ();
+  m_txSafetyRangesSq.resize (size, 0);
+
+  for (int index = 0; index < size; index++)
+    {
+      // stored as square of value, for optimization
+      m_txSafetyRangesSq[index] = rangesSq[index];
+    }
+
+  m_adhocTxInterfaces = &i;
+  m_nodeId = nodeId;
+  m_txMaxDelay = txMaxDelay;
+}
+
+void
+BsmApplication::GenerateWaveTraffic (Ptr<Socket> socket, uint32_t pktSize,
+                                     uint32_t pktCount, Time pktInterval,
+                                     uint32_t sendingNodeId)
+{
+  NS_LOG_FUNCTION (this);
+
+  // more packets to send?
+  if (pktCount > 0)
+    {
+      // for now, we cannot tell if each node has
+      // started mobility.  so, as an optimization
+      // only send if  this node is moving
+      // if not, then skip
+      int txNodeId = sendingNodeId;
+      Ptr<Node> txNode = GetNode (txNodeId);
+      Ptr<MobilityModel> txPosition = txNode->GetObject<MobilityModel> ();
+      NS_ASSERT (txPosition != 0);
+
+      int senderMoving = m_nodesMoving->at (txNodeId);
+      if (senderMoving != 0)
+        {
+          // send it!
+          socket->Send (Create<Packet> (pktSize));
+          // count it
+          m_waveBsmStats->IncTxPktCount ();
+          m_waveBsmStats->IncTxByteCount (pktSize);
+          int wavePktsSent = m_waveBsmStats->GetTxPktCount ();
+          if ((m_waveBsmStats->GetLogging () != 0) && ((wavePktsSent % 1000) == 0))
+            {
+              NS_LOG_UNCOND ("Sending WAVE pkt # " << wavePktsSent );
+            }
+
+          // find other nodes within range that would be
+          // expected to receive this broadbast
+          int nRxNodes = m_adhocTxInterfaces->GetN ();
+          for (int i = 0; i < nRxNodes; i++)
+            {
+              Ptr<Node> rxNode = GetNode (i);
+              int rxNodeId = rxNode->GetId ();
+
+              if (rxNodeId != txNodeId)
+                {
+                  Ptr<MobilityModel> rxPosition = rxNode->GetObject<MobilityModel> ();
+                  NS_ASSERT (rxPosition != 0);
+                  // confirm that the receiving node
+                  // has also started moving in the scenario
+                  // if it has not started moving, then
+                  // it is not a candidate to receive a packet
+                  int receiverMoving = m_nodesMoving->at (rxNodeId);
+                  if (receiverMoving == 1)
+                    {
+                      double distSq = MobilityHelper::GetDistanceSquaredBetween (txNode, rxNode);
+                      if (distSq > 0.0)
+                        {
+                          // dest node within range?
+                          int rangeCount = m_txSafetyRangesSq.size ();
+                          for (int index = 1; index <= rangeCount; index++)
+                            {
+                              if (distSq <= m_txSafetyRangesSq[index - 1])
+                                {
+                                  // we should expect dest node to receive broadcast pkt
+                                  m_waveBsmStats->IncExpectedRxPktCount (index);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+      // every BSM must be scheduled with a tx time delay
+      // of +/- (5) ms.  See comments in StartApplication().
+      // we handle this as a tx delay of [0..10] ms
+      // from the start of the pktInterval boundary
+      uint32_t d_ns = static_cast<uint32_t> (m_txMaxDelay.GetInteger ());
+      Time txDelay = NanoSeconds (m_unirv->GetInteger (0, d_ns));
+
+      // do not want the tx delay to be cumulative, so
+      // deduct the previous delay value.  thus we adjust
+      // to schedule the next event at the next pktInterval,
+      // plus some new [0..10] ms tx delay
+      Time txTime = pktInterval - m_prevTxDelay + txDelay;
+      m_prevTxDelay = txDelay;
+
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (),
+                                      txTime, &BsmApplication::GenerateWaveTraffic, this,
+                                      socket, pktSize, pktCount - 1, pktInterval,  socket->GetNode ()->GetId ());
+    }
+  else
+    {
+      socket->Close ();
+    }
+}
+
+void BsmApplication::ReceiveWavePacket (Ptr<Socket> socket)
+{
+  NS_LOG_FUNCTION (this);
+
+  Ptr<Packet> packet;
+  while ((packet = socket->Recv ()))
+    {
+      Ptr<Node> rxNode = socket->GetNode ();
+
+      SocketAddressTag tag;
+      bool found;
+      found = packet->PeekPacketTag (tag);
+
+      if (found)
+        {
+          InetSocketAddress addr = InetSocketAddress::ConvertFrom (tag.GetAddress ());
+          int nodes = m_adhocTxInterfaces->GetN ();
+          for (int i = 0; i < nodes; i++)
+            {
+              if (addr.GetIpv4 () == m_adhocTxInterfaces->GetAddress (i) )
+                {
+                  Ptr<Node> txNode = GetNode (i);
+                  HandleReceivedBsmPacket (txNode, rxNode);
+                }
+            }
+        }
+    }
+}
+
+void BsmApplication::HandleReceivedBsmPacket (Ptr<Node> txNode,
+                                              Ptr<Node> rxNode)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_waveBsmStats->IncRxPktCount ();
+
+  Ptr<MobilityModel> rxPosition = rxNode->GetObject<MobilityModel> ();
+  NS_ASSERT (rxPosition != 0);
+  // confirm that the receiving node
+  // has also started moving in the scenario
+  // if it has not started moving, then
+  // it is not a candidate to receive a packet
+  int rxNodeId = rxNode->GetId ();
+  int receiverMoving = m_nodesMoving->at (rxNodeId);
+  if (receiverMoving == 1)
+    {
+      double rxDistSq = MobilityHelper::GetDistanceSquaredBetween (rxNode, txNode);
+      if (rxDistSq > 0.0)
+        {
+          int rangeCount = m_txSafetyRangesSq.size ();
+          for (int index = 1; index <= rangeCount; index++)
+            {
+              if (rxDistSq <= m_txSafetyRangesSq[index - 1])
+                {
+                  m_waveBsmStats->IncRxPktInRangeCount (index);
+                }
+            }
+        }
+    }
+}
+
+int64_t
+BsmApplication::AssignStreams (int64_t streamIndex)
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_ASSERT (m_unirv);  // should be set by Setup() prevoiusly
+  m_unirv->SetStream (streamIndex);
+
+  return 1;
+}
+
+Ptr<Node>
+BsmApplication::GetNode (int id)
+{
+  NS_LOG_FUNCTION (this);
+
+  std::pair<Ptr<Ipv4>, uint32_t> interface = m_adhocTxInterfaces->Get (id);
+  Ptr<Ipv4> pp = interface.first;
+  Ptr<Node> node = pp->GetObject<Node> ();
+
+  return node;
+}
+
+Ptr<NetDevice>
+BsmApplication::GetNetDevice (int id)
+{
+  NS_LOG_FUNCTION (this);
+
+  std::pair<Ptr<Ipv4>, uint32_t> interface = m_adhocTxInterfaces->Get (id);
+  Ptr<Ipv4> pp = interface.first;
+  Ptr<NetDevice> device = pp->GetObject<NetDevice> ();
+
+  return device;
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wave/model/bsm-application.h ns-3.22/src/wave/model/bsm-application.h
--- ns-3.21/src/wave/model/bsm-application.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/bsm-application.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,175 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 North Carolina State 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: Scott E. Carpenter <scarpen@ncsu.edu>
+ *
+ */
+
+#ifndef BSM_APPLICATION_H
+#define BSM_APPLICATION_H
+
+#include "ns3/application.h"
+#include "ns3/wave-bsm-stats.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/internet-stack-helper.h"
+
+namespace ns3 {
+/**
+ * \ingroup wave
+ * \brief The BsmApplication class sends and receives the
+ * IEEE 1609 WAVE (Wireless Access in Vehicular Environments)
+ * Basic Safety Messages (BSMs) and uses the WaveBsmStats class
+ * to manage statistics about BSMs transmitted and received
+ * The BSM is a ~200-byte packet that is
+ * generally broadcast from every vehicle at a nominal rate of 10 Hz.
+ */
+class BsmApplication : public Application
+{
+public:
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Constructor
+   * \return none
+   */
+  BsmApplication ();
+  virtual ~BsmApplication ();
+
+  /**
+   * \brief Setup BSM generation parameters for a node
+   * \param i IPv4 interface container
+   * \param nodeId identifier of the node (index into container)
+   * \param totalTime total amount of time that BSM packets should be transmitted
+   * \param wavePacketSize the size, in bytes, of a WAVE BSM
+   * \param waveInterval the time, in seconds, between each WAVE BSM transmission,
+   * typically 10 Hz (0.1 second)
+   * \param gpsAccuracy the timing synchronization accuracy of GPS time, in seconds.
+   * GPS time-sync is ~40-100 ns.  Universally synchronized time among all vehicles
+   * will result in all vehicles transmitting safety messages simultaneously, leading
+   * to excessive wireless collisions.
+   * \param range the expected transmission range, in m ^ 2.
+   * \param collection class for WAVE BSM statistics
+   * \param indicators of whether or not node(s) are moving
+   * \return none
+   */
+  void Setup (Ipv4InterfaceContainer & i,
+              int nodeId,
+              Time totalTime,
+              uint32_t wavePacketSize, // bytes
+              Time waveInterval,
+              double gpsAccuracyNs,
+              std::vector <double> rangesSq,          // m ^ 2
+              Ptr<WaveBsmStats> waveBsmStats,
+              std::vector<int> * nodesMoving,
+              int mode,
+              Time txDelay);
+
+  /**
+  * 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
+  * called by the user.
+  *
+  * \param stream first stream index to use
+  * \return the number of stream indices assigned by this helper
+  */
+  int64_t AssignStreams (int64_t streamIndex);
+
+  /**
+  * (Arbitrary) port number that is used to create a socket for transmitting WAVE BSMs.
+  */
+  static int wavePort;
+
+protected:
+  virtual void DoDispose (void);
+
+private:
+  // inherited from Application base class.
+  virtual void StartApplication (void);    // Called at time specified by Start
+  virtual void StopApplication (void);     // Called at time specified by Stop
+
+  /**
+   * \brief Creates and transmits a WAVE BSM packet
+   * \param socket socket to use for transmission
+   * \param pktSize the size, in bytes, of the WAVE BSM packet
+   * \param pktCount the number of remaining WAVE BSM packets to be transmitted
+   * \param pktInterval the interval, in seconds, until the next packet
+   * should be transmitted
+   * \return none
+   */
+  void GenerateWaveTraffic (Ptr<Socket> socket, uint32_t pktSize,
+                            uint32_t pktCount, Time pktInterval,
+                            uint32_t sendingNodeId);
+
+  /**
+   * \brief Receive a WAVE BSM packet
+   * \param socket the receiving socket
+   * \return none
+   */
+  void ReceiveWavePacket (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle the receipt of a WAVE BSM packet from sender to receiver
+   * \param txNode the sending node
+   * \param rxNode the receiving node
+   * \return none
+   */
+  void HandleReceivedBsmPacket (Ptr<Node> txNode,
+                                Ptr<Node> rxNode);
+
+  /**
+   * \brief Get the node for the desired id
+   * \param id the id of the desired node
+   * \return ptr to the desired node
+   */
+  Ptr<Node> GetNode (int id);
+
+  /**
+   * \brief Get the net device for the desired id
+   * \param id the id of the desired net device
+   * \return ptr to the desired net device
+   */
+  Ptr<NetDevice> GetNetDevice (int id);
+
+  Ptr<WaveBsmStats> m_waveBsmStats;
+  // tx safety range squared, for optimization
+  std::vector <double> m_txSafetyRangesSq;
+  Time m_TotalSimTime;
+  uint32_t m_wavePacketSize; // bytes
+  uint32_t m_numWavePackets;
+  Time m_waveInterval;
+  double m_gpsAccuracyNs;
+  Ipv4InterfaceContainer * m_adhocTxInterfaces;
+  std::vector<int> * m_nodesMoving;
+  Ptr<UniformRandomVariable> m_unirv;
+  int m_nodeId;
+  // WAVE channel access mode.  0=continuous PHY; 1=channel-switching
+  int m_chAccessMode;
+  // When transmitting at a default rate of 10 Hz,
+  // the subsystem shall transmit every 100 ms +/-
+  // a random value between 0 and 5 ms. [MPR-BSMTX-TXTIM-002]
+  // Source: CAMP Vehicle Safety Communications 4 Consortium
+  // On-board Minimum Performance Requirements
+  // for V2V Safety Systems Version 1.0, December 17, 2014
+  // max transmit delay (default 10ms)
+  Time m_txMaxDelay;
+  Time m_prevTxDelay;
+};
+
+} // namespace ns3
+
+#endif /* BSM_APPLICATION_H*/
diff -Naur ns-3.21/src/wave/model/channel-coordinator.cc ns-3.22/src/wave/model/channel-coordinator.cc
--- ns-3.21/src/wave/model/channel-coordinator.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/channel-coordinator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,398 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#include "channel-coordinator.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("ChannelCoordinator");
+
+/****************************************************************
+ *       This destructor is needed.
+ ****************************************************************/
+
+ChannelCoordinationListener::~ChannelCoordinationListener (void)
+{
+}
+
+/****************************************************************/
+
+NS_OBJECT_ENSURE_REGISTERED (ChannelCoordinator);
+
+TypeId
+ChannelCoordinator::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::ChannelCoordinator")
+    .SetParent<Object> ()
+    .AddConstructor<ChannelCoordinator> ()
+    .AddAttribute ("CchInterval", "CCH Interval, default value is 50ms.",
+                   TimeValue (GetDefaultCchInterval ()),
+                   MakeTimeAccessor (&ChannelCoordinator::m_cchi),
+                   MakeTimeChecker ())
+    .AddAttribute ("SchInterval", "SCH Interval, default value is 50ms.",
+                   TimeValue (GetDefaultSchInterval ()),
+                   MakeTimeAccessor (&ChannelCoordinator::m_schi),
+                   MakeTimeChecker ())
+    .AddAttribute ("GuardInterval", "Guard Interval, default value is 4ms.",
+                   TimeValue (GetDefaultGuardInterval ()),
+                   MakeTimeAccessor (&ChannelCoordinator::m_gi),
+                   MakeTimeChecker ())
+  ;
+  return tid;
+}
+
+ChannelCoordinator::ChannelCoordinator ()
+  : m_guardCount (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+ChannelCoordinator::~ChannelCoordinator ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+ChannelCoordinator::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  StartChannelCoordination ();
+}
+
+void
+ChannelCoordinator::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  StopChannelCoordination ();
+  UnregisterAllListeners ();
+}
+
+Time
+ChannelCoordinator::GetDefaultCchInterval (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  // refer to Annex H of IEEE 1609.4-2010
+  const static uint8_t DEFAULT_CCH_INTERVAL = 50;
+  return MilliSeconds (DEFAULT_CCH_INTERVAL);
+}
+
+Time
+ChannelCoordinator::GetDefaultSchInterval (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  // refer to Annex H of IEEE 1609.4-2010
+  const static uint8_t DEFAULT_SCH_INTERVAL = 50;
+  return MilliSeconds (DEFAULT_SCH_INTERVAL);
+}
+
+Time
+ChannelCoordinator::GetDefaultSyncInterval (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  return GetDefaultCchInterval  () + GetDefaultSchInterval  ();
+}
+
+Time
+ChannelCoordinator::GetDefaultGuardInterval (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  // refer to Annex H of IEEE 1609.4-2010
+  const static uint8_t SyncTolerance = 2;
+  const static uint8_t MaxChSwitchTime  = 2;
+  const static uint8_t DEFAULT_GUARD_INTERVAL = SyncTolerance + MaxChSwitchTime;
+  return MilliSeconds (DEFAULT_GUARD_INTERVAL);
+}
+
+void
+ChannelCoordinator::SetCchInterval (Time cchInterval)
+{
+  NS_LOG_FUNCTION (this << cchInterval);
+  m_cchi = cchInterval;
+}
+
+Time
+ChannelCoordinator::GetCchInterval (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_cchi;
+}
+
+void
+ChannelCoordinator::SetSchInterval (Time schInterval)
+{
+  NS_LOG_FUNCTION (this << schInterval);
+  m_schi = schInterval;
+}
+
+Time
+ChannelCoordinator::GetSchInterval (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_schi;
+}
+
+Time
+ChannelCoordinator::GetSyncInterval (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return GetCchInterval () + GetSchInterval ();
+}
+
+void
+ChannelCoordinator::SetGuardInterval (Time guard)
+{
+  NS_LOG_FUNCTION (this);
+  m_gi =  guard;
+}
+
+Time
+ChannelCoordinator::GetGuardInterval (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_gi;
+}
+
+Time
+ChannelCoordinator::GetSchSlot (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_schi - m_gi;
+}
+
+Time
+ChannelCoordinator::GetCchSlot (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_cchi - m_gi;
+}
+
+bool
+ChannelCoordinator::IsCchInterval (Time duration) const
+{
+  NS_LOG_FUNCTION (this << duration);
+  Time future = GetIntervalTime (duration);
+  return (future < m_cchi);
+}
+
+bool
+ChannelCoordinator::IsSchInterval (Time duration) const
+{
+  NS_LOG_FUNCTION (this << duration);
+  return !IsCchInterval (duration);
+}
+
+bool
+ChannelCoordinator::IsGuardInterval (Time duration) const
+{
+  NS_LOG_FUNCTION (this << duration);
+  Time future = GetIntervalTime (duration);
+  // the interval is either in CchInterval or SchInterval
+  Time interval = future < m_cchi ? future : future - m_cchi;
+  return interval < m_gi;
+}
+
+bool
+ChannelCoordinator::IsValidConfig (void) const
+{
+  NS_LOG_FUNCTION (this);
+  if (GetCchInterval ().GetMilliSeconds () == 0 || GetSchInterval ().GetMilliSeconds () == 0
+      || GetGuardInterval ().GetMilliSeconds () == 0)
+    {
+      NS_LOG_WARN ("the channel interval should not be zero");
+      return false;
+    }
+  // 1000 is 1000ms which is one UTC second
+  if ((1000 % GetSyncInterval ().GetMilliSeconds ()) != 0)
+    {
+      NS_LOG_WARN ("every UTC second shall be an integer number of SyncInterval");
+      return false;
+    }
+  if (GetCchInterval () <= GetGuardInterval ())
+    {
+      NS_LOG_WARN ("CCH Interval should be large than GuardInterval");
+      return false;
+    }
+  if (GetSchInterval () <= GetGuardInterval ())
+    {
+      NS_LOG_WARN ("SCH Interval should be large than GuardInterval");
+      return false;
+    }
+  // at last, GguardInterval should be larger than real channel switch time of PHY layer.
+  // However there is no method such as GetChannelSwitchTime in the WifiPhy to support test here.
+  return true;
+}
+
+Time
+ChannelCoordinator::NeedTimeToCchInterval (Time duration) const
+{
+  NS_LOG_FUNCTION (this << duration);
+  if (IsCchInterval (duration))
+    {
+      return MilliSeconds (0);
+    }
+  return GetSyncInterval () - GetIntervalTime (duration);
+}
+
+Time
+ChannelCoordinator::NeedTimeToSchInterval (Time duration) const
+{
+  NS_LOG_FUNCTION (this << duration);
+  if (IsSchInterval (duration))
+    {
+      return MilliSeconds (0);
+    }
+  return GetCchInterval () - GetIntervalTime (duration);
+}
+
+Time
+ChannelCoordinator::NeedTimeToGuardInterval (Time duration) const
+{
+  NS_LOG_FUNCTION (this << duration);
+  if (IsGuardInterval (duration))
+    {
+      return MilliSeconds (0);
+    }
+  if (IsCchInterval (duration))
+    {
+      // the time to Guard Interval of SCH Interval
+      return (GetCchInterval () - GetIntervalTime (duration));
+    }
+  // the time to Guard Interval of next CCH Interval
+  return (GetSyncInterval () - GetIntervalTime (duration));
+}
+
+Time
+ChannelCoordinator::GetIntervalTime (Time duration) const
+{
+  NS_LOG_FUNCTION (this << duration);
+  Time future = Now () + duration;
+  Time sync = GetSyncInterval ();
+  uint32_t n = future.GetMilliSeconds () / sync.GetMilliSeconds ();
+  return future - MilliSeconds (n * sync.GetMilliSeconds ());
+}
+
+Time
+ChannelCoordinator::GetRemainTime (Time duration) const
+{
+  NS_LOG_FUNCTION (this << duration);
+  return GetSyncInterval () - GetIntervalTime (duration);
+}
+
+void
+ChannelCoordinator::RegisterListener (Ptr<ChannelCoordinationListener> listener)
+{
+  NS_LOG_FUNCTION (this << listener);
+  NS_ASSERT (listener != 0);
+  m_listeners.push_back (listener);
+}
+
+void
+ChannelCoordinator::UnregisterListener (Ptr<ChannelCoordinationListener> listener)
+{
+  NS_LOG_FUNCTION (this << listener);
+  NS_ASSERT (listener != 0);
+  for (ListenersI i = m_listeners.begin (); i != m_listeners.end (); ++i)
+    {
+      if ((*i) == listener)
+        {
+          m_listeners.erase (i);
+          return;
+        }
+    }
+}
+
+void
+ChannelCoordinator::UnregisterAllListeners (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_listeners.clear ();
+}
+
+void
+ChannelCoordinator::StartChannelCoordination (void)
+{
+  NS_LOG_FUNCTION (this);
+  Time now = Now ();
+  if ((now.GetMilliSeconds () % 1000) != 0)
+    {
+      // see chapter 5.5.2
+      NS_FATAL_ERROR ("the coordination event order should start with the beginning of 1 second");
+    }
+  if (!IsValidConfig ())
+    {
+      NS_FATAL_ERROR ("the channel intervals configured for channel coordination events are invalid");
+    }
+  m_guardCount = 0;
+  NotifyGuardSlot ();
+}
+
+void
+ChannelCoordinator::StopChannelCoordination (void)
+{
+  if (!m_coordination.IsExpired ())
+    {
+      m_coordination.Cancel ();
+    }
+  m_guardCount = 0;
+}
+
+void
+ChannelCoordinator::NotifySchSlot (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_coordination = Simulator::Schedule (GetSchSlot (), &ChannelCoordinator::NotifyGuardSlot, this);
+  for (ListenersI i = m_listeners.begin (); i != m_listeners.end (); ++i)
+    {
+      (*i)->NotifySchSlotStart (GetSchSlot ());
+    }
+}
+
+void
+ChannelCoordinator::NotifyCchSlot (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_coordination = Simulator::Schedule (GetCchSlot (), &ChannelCoordinator::NotifyGuardSlot, this);
+  for (ListenersI i = m_listeners.begin (); i != m_listeners.end (); ++i)
+    {
+      (*i)->NotifyCchSlotStart (GetCchSlot ());
+    }
+}
+
+void
+ChannelCoordinator::NotifyGuardSlot (void)
+{
+  NS_LOG_FUNCTION (this);
+  Time guardSlot = GetGuardInterval ();
+  bool inCchi = ((m_guardCount % 2) == 0);
+  if (inCchi)
+    {
+      m_coordination = Simulator::Schedule (guardSlot, &ChannelCoordinator::NotifyCchSlot, this);
+    }
+  else
+    {
+      m_coordination = Simulator::Schedule (guardSlot, &ChannelCoordinator::NotifySchSlot, this);
+    }
+  for (ListenersI i = m_listeners.begin (); i != m_listeners.end (); ++i)
+    {
+      (*i)->NotifyGuardSlotStart (guardSlot, inCchi);
+    }
+  m_guardCount++;
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wave/model/channel-coordinator.h ns-3.22/src/wave/model/channel-coordinator.h
--- ns-3.21/src/wave/model/channel-coordinator.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/channel-coordinator.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,239 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#ifndef CHANNEL_COORDINATOR_H
+#define CHANNEL_COORDINATOR_H
+#include "ns3/nstime.h"
+#include "ns3/object.h"
+#include "ns3/event-id.h"
+
+namespace ns3 {
+
+/**
+ * \brief receive notifications about channel coordination events.
+ */
+class ChannelCoordinationListener : public SimpleRefCount<ChannelCoordinationListener>
+{
+public:
+  virtual ~ChannelCoordinationListener (void);
+  /**
+   * \param duration the CCH access time (CCHI - GI) continues,
+   */
+  virtual void NotifyCchSlotStart (Time duration) = 0;
+  /**
+   * \param duration the SCH access time (SCHI - GI) continues,
+   */
+  virtual void NotifySchSlotStart (Time duration) = 0;
+  /**
+   * \param duration the time Guard access time (GI) continues
+   * \param cchi indicate whether the guard slot is in the GI of CCHI or SCHI.
+   */
+  virtual void NotifyGuardSlotStart (Time duration, bool cchi) = 0;
+};
+/**
+ * \ingroup wave
+ * \brief ChannelCoordinator deals with channel coordination in data plane (see 1609.4 chapter 5.2)
+ *
+ *      <------------   -----SYNCI-----------------> <-------------------SYNCI------------------>
+ *                   CCHI                      SCHI                         CCHI                     SCHI
+ *     |..************|..************|..************|..************|
+ *      GI                             GI                            GI                             GI
+ *
+ *  The relation among CCHI(CCH Interval), SCHI(SCH Interval), GI(Guard Interval), SYNCI(Sync Interval):
+ *  1. they are all time durations, gegerally default CCHI is 50ms,
+ *  default SCHI is 50ms, default GI is 4ms, default SYNCI is 100ms.
+ *  2. Every UTC second shall be an integer number of sync interval, and the
+ *  beginning of a sync interval shall align with beginning of UTC second;
+ *  3. SYNCI is the sum of CCHI and SCHI.
+ *  GI is the sum of SyncTolerance and MaxSwitchTime defined for
+ *  multi-channel synchronization (see 1609.4 chapter 6.2). And since all
+ *  devices the in simulation could be supposed to synchronize by "perfect GPS",
+ *  here the synchronization mechanism defined in the standard will be not implemented.
+ *  4. Although the real channel switch time of wifi PHY layer is very fast, and the "ChannelSwitchDelay"
+ *  of YansWifiPhy is 250 microseconds, here in 4ms guard interval WAVE devices
+ *  cannot transmit packets while may receive packets.
+ */
+class ChannelCoordinator : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  ChannelCoordinator ();
+  virtual ~ChannelCoordinator ();
+
+  /**
+   * \return the default control channel interval for multi-channel operation (50 milliseconds).
+   */
+  static Time GetDefaultCchInterval (void);
+  /**
+   * \return the default service channel interval for multi-channel operation (50 milliseconds).
+   */
+  static Time GetDefaultSchInterval (void);
+  /**
+   * \return the default sync interval for multi-channel operation (100 milliseconds).
+   */
+  static Time GetDefaultSyncInterval (void);
+  /**
+   * \return the default guard channel interval for multi-channel operation (4 milliseconds).
+   */
+  static Time GetDefaultGuardInterval (void);
+
+  /**
+   * \param cchi the CCH interval for multi-channel operation.
+   */
+  void SetCchInterval (Time cchi);
+  /**
+   * \return the CCH interval for multi-channel operation.
+   */
+  Time GetCchInterval (void) const;
+  /**
+   * \param schi the SCH interval for multi-channel operation.
+   */
+  void SetSchInterval (Time schi);
+  /**
+   * \return the SCH interval for multi-channel operation.
+   */
+  Time GetSchInterval (void) const;
+  /**
+   * \return the Sync interval for multi-channel operation.
+   */
+  Time GetSyncInterval (void) const;
+  /**
+   * \param guardi the guard interval for multi-channel operation.
+   */
+  void SetGuardInterval (Time guardi);
+  /**
+   * \return the guard interval for multi-channel operation.
+   */
+  Time GetGuardInterval (void) const;
+  /**
+   * \return whether current channel interval configuration is valid.
+   *
+   * If users set the channel intervals different from default values here,
+   * it should be better to test whether the configuration is valid.
+   */
+  bool IsValidConfig (void) const;
+
+  /**
+   * \param duration the future time after duration
+   * \returns whether future time is in CCH Interval
+   */
+  bool IsCchInterval (Time duration = Seconds (0.0)) const;
+  /**
+   * \param duration the future time after duration
+   * \returns whether future time is in SCH Interval
+   */
+  bool IsSchInterval (Time duration = Seconds (0.0)) const;
+  /**
+   * \param duration the future time after duration
+   * \returns whether future time is in Guard Interval
+   */
+  bool IsGuardInterval (Time duration = Seconds (0.0)) const;
+  /**
+   * \param duration the future time after duration
+   * \returns the time to the next CCH interval.
+   * If current time is already in CCH interval, return 0;
+   */
+  Time NeedTimeToCchInterval (Time duration = Seconds (0.0)) const;
+  /**
+   * \param duration the future time after duration
+   * \returns the duration time to the next SCH interval.
+   * If current time is already in SCH interval, return 0;
+   */
+  Time NeedTimeToSchInterval (Time duration = Seconds (0.0)) const;
+  /**
+   * \param duration the future time after duration
+   * \returns the duration time to next Guard Interval;
+   * return 0 if current time is already in Guard Interval, ;
+   */
+  Time NeedTimeToGuardInterval (Time duration = Seconds (0.0)) const;
+  /**
+   * \param duration the future time after duration
+   * \return the time in a Sync Interval of future time
+   *  for example:
+   *  SyncInterval = 100ms;
+   *  Now = 5s20ms;
+   *  duration = 50ms;
+   *  then GetIntervalTime (duration) = 70ms.
+   */
+  Time GetIntervalTime (Time duration = Seconds (0.0)) const;
+  /**
+   * \param duration the future time after duration
+   * \return the remain time in a Sync Interval of future time
+   *  for example:
+   *  SyncInterval = 100ms;
+   *  Now = 5s20ms;
+   *  duration = 50ms;
+   *  then GetRemainTime (duration) = 30ms.
+   */
+  Time GetRemainTime (Time duration = Seconds (0.0)) const;
+  /**
+   * \param listener the new listener for channel coordination events.
+   *
+   * Add the input listener to the list of objects to be notified of
+   * channel coordination events.
+   */
+  void RegisterListener (Ptr<ChannelCoordinationListener> listener);
+  /**
+   * \param listener the current attached listener
+   *
+   * Remove the specified listener.
+   */
+  void UnregisterListener (Ptr<ChannelCoordinationListener> listener);
+  /**
+   * Remove all listeners.
+   */
+  void UnregisterAllListeners (void);
+
+private:
+  virtual void DoDispose (void);
+  virtual void DoInitialize (void);
+
+  /**
+   * start to make channel coordination events
+   */
+  void StartChannelCoordination (void);
+  /**
+   * stop channel coordination events
+   */
+  void StopChannelCoordination (void);
+
+  void NotifySchSlot (void);
+  void NotifyCchSlot (void);
+  void NotifyGuardSlot (void);
+  /**
+   * \return SCH channel access time which is SchInterval - GuardInterval, default 46ms
+   */
+  Time GetSchSlot (void) const;
+  /**
+   * \return CCH channel access time which is SchInterval - GuardInterval, default 46ms
+   */
+  Time GetCchSlot (void) const;
+
+  Time m_cchi;  // CchInterval
+  Time m_schi;  // SchInterval
+  Time m_gi;    // GuardInterval
+
+  typedef std::vector<Ptr<ChannelCoordinationListener> > Listeners;
+  typedef std::vector<Ptr<ChannelCoordinationListener> >::iterator ListenersI;
+  Listeners m_listeners;
+
+  uint32_t m_guardCount;
+  EventId m_coordination;
+};
+
+}
+#endif /* CHANNEL_COORDINATOR_H */
diff -Naur ns-3.21/src/wave/model/channel-manager.cc ns-3.22/src/wave/model/channel-manager.cc
--- ns-3.21/src/wave/model/channel-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/channel-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,170 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#include "channel-manager.h"
+#include "ns3/log.h"
+#include "ns3/assert.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("ChannelManager");
+
+NS_OBJECT_ENSURE_REGISTERED (ChannelManager);
+
+TypeId
+ChannelManager::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::ChannelManager")
+    .SetParent<Object> ()
+    .AddConstructor<ChannelManager> ()
+  ;
+  return tid;
+}
+
+ChannelManager::ChannelManager ()
+{
+  NS_LOG_FUNCTION (this);
+  m_channels.insert (std::make_pair (CCH, new WaveChannel (CCH)));
+  m_channels.insert (std::make_pair (SCH1, new WaveChannel (SCH1)));
+  m_channels.insert (std::make_pair (SCH2, new WaveChannel (SCH2)));
+  m_channels.insert (std::make_pair (SCH3, new WaveChannel (SCH3)));
+  m_channels.insert (std::make_pair (SCH4, new WaveChannel (SCH4)));
+  m_channels.insert (std::make_pair (SCH5, new WaveChannel (SCH5)));
+  m_channels.insert (std::make_pair (SCH6, new WaveChannel (SCH6)));
+}
+
+ChannelManager::~ChannelManager ()
+{
+  NS_LOG_FUNCTION (this);
+  std::map<uint32_t, WaveChannel *> ::iterator i;
+  for (i = m_channels.begin (); i != m_channels.end (); ++i)
+    {
+      delete (i->second);
+    }
+  m_channels.clear ();
+}
+
+uint32_t
+ChannelManager::GetCch (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  return CCH;
+}
+
+std::vector<uint32_t>
+ChannelManager::GetSchs (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  std::vector<uint32_t> schs;
+  schs.push_back (SCH1);
+  schs.push_back (SCH2);
+  schs.push_back (SCH3);
+  schs.push_back (SCH4);
+  schs.push_back (SCH5);
+  schs.push_back (SCH6);
+  return schs;
+}
+
+std::vector<uint32_t>
+ChannelManager::GetWaveChannels (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  std::vector<uint32_t> channels;
+  channels.push_back (CCH);
+  channels.push_back (SCH1);
+  channels.push_back (SCH2);
+  channels.push_back (SCH3);
+  channels.push_back (SCH4);
+  channels.push_back (SCH5);
+  channels.push_back (SCH6);
+  return channels;
+}
+
+uint32_t
+ChannelManager::GetNumberOfWaveChannels (void)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  static  uint32_t NumberOfWaveChannels  = GetWaveChannels ().size ();
+  return NumberOfWaveChannels;
+}
+
+bool
+ChannelManager::IsCch (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  return channelNumber == CCH;
+}
+
+bool
+ChannelManager::IsSch (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  if (channelNumber < SCH1 || channelNumber > SCH6)
+    {
+      return false;
+    }
+  if (channelNumber % 2 == 1)
+    {
+      return false;
+    }
+  return (channelNumber != CCH);
+}
+
+bool
+ChannelManager::IsWaveChannel (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  if (channelNumber < SCH1 || channelNumber > SCH6)
+    {
+      return false;
+    }
+  if (channelNumber % 2 == 1)
+    {
+      return false;
+    }
+  return true;
+}
+
+uint32_t
+ChannelManager::GetOperatingClass (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  return m_channels[channelNumber]->operatingClass;
+}
+
+bool
+ChannelManager::GetManagementAdaptable (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  return m_channels[channelNumber]->adaptable;
+}
+
+WifiMode
+ChannelManager::GetManagementDataRate (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  return m_channels[channelNumber]->dataRate;
+}
+
+uint32_t
+ChannelManager::GetManagementPowerLevel (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  return m_channels[channelNumber]->txPowerLevel;
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wave/model/channel-manager.h ns-3.22/src/wave/model/channel-manager.h
--- ns-3.21/src/wave/model/channel-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/channel-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,148 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#ifndef CHANNEL_MANAGER_H
+#define CHANNEL_MANAGER_H
+#include <map>
+#include <vector>
+#include "ns3/object.h"
+#include "ns3/wifi-mode.h"
+
+namespace ns3 {
+
+/**
+ * WAVE channels
+ * channel number             |   172   |   174   |   176   |   178   |   180   |   182   |   184   |
+ * channel bandwidth          10MHz  10MHz  10MHz  10MHz 10MHz  10MHz  10MHz
+ * channel name                      SCH1     SCH2     SCH3     CCH       SCH4     SCH5     SCH6
+ * another name                     CH172   CH174   CH176   CH178   CH180  CH182   CH184
+ *
+ * not support
+ * channel 175 : combine channel 174 and 176
+ * channel 181 : combine channel 180 and 182
+ */
+#define CH172 172
+#define CH174 174
+#define CH176 176
+#define CH178 178
+#define CH180 180
+#define CH182 182
+#define CH184 184
+
+#define SCH1 172
+#define SCH2 174
+#define SCH3 176
+#define CCH  178
+#define SCH4 180
+#define SCH5 182
+#define SCH6 184
+
+/**
+ * \ingroup wave
+ * \brief manage 7 WaveChannels and the tx information such as data rate and txPowerLevel.
+ * for transmitting VSA management frames.
+ */
+class ChannelManager : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  ChannelManager ();
+  virtual ~ChannelManager ();
+
+  /**
+   * \return the channel number of WAVE CCH.
+   */
+  static uint32_t GetCch (void);
+  /**
+   * \return the channel number set of WAVE SCHs.
+   */
+  static std::vector<uint32_t> GetSchs (void);
+  /**
+    * \return the channel number set of WAVE channels.
+    *
+    * The sequence is CCH, SCH1, SCH2, SCH3, SCH4, SCH5 and SCH6.
+    */
+  static std::vector<uint32_t> GetWaveChannels (void);
+  /**
+   * \return the number of WAVE channels.
+   */
+  static uint32_t GetNumberOfWaveChannels (void);
+  /**
+   * \param channelNumber the specific channel
+   * \return whether channel is valid CCH channel
+   */
+  static bool IsCch (uint32_t channelNumber);
+  /**
+   * \param channelNumber the specific channel
+   * \return whether channel is valid SCH channel
+   */
+  static bool IsSch (uint32_t channelNumber);
+  /**
+   * \param channelNumber the specific channel
+   * \return whether channel is valid WAVE channel
+   */
+  static bool IsWaveChannel (uint32_t channelNumber);
+
+  /**
+   * \param channelNumber the specific channel
+   * \return the operating class on this channel
+   *
+   * the operating class is unused in the simulation
+   */
+  uint32_t GetOperatingClass (uint32_t channelNumber);
+  /**
+   * \param channelNumber the specific channel
+   * \return the adaptable mode for management frames
+   */
+  bool GetManagementAdaptable (uint32_t channelNumber);
+  /**
+   * \param channelNumber the specific channel
+   * \return the data rate for management frames
+   */
+  WifiMode GetManagementDataRate (uint32_t channelNumber);
+  /**
+   * \param channelNumber the specific channel
+   * \return the tx power level for management frames
+   */
+  uint32_t GetManagementPowerLevel (uint32_t channelNumber);
+
+private:
+  // 1609.4-2010 Annex H
+  static const uint32_t  DEFAULT_OPERATING_CLASS = 17;
+
+  struct WaveChannel
+  {
+    uint32_t channelNumber;
+    uint32_t operatingClass;
+    bool adaptable;
+    WifiMode dataRate;
+    uint32_t txPowerLevel;
+
+    WaveChannel (uint32_t channel)
+      : channelNumber (channel),
+        operatingClass (DEFAULT_OPERATING_CLASS),
+        adaptable (true),
+        dataRate (WifiMode ("OfdmRate6MbpsBW10MHz")),
+        txPowerLevel (4)
+    {
+    }
+  };
+  std::map<uint32_t, WaveChannel *> m_channels;
+};
+
+}
+#endif /* CHANNEL_MANAGER_H */
diff -Naur ns-3.21/src/wave/model/channel-scheduler.cc ns-3.22/src/wave/model/channel-scheduler.cc
--- ns-3.21/src/wave/model/channel-scheduler.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/channel-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,158 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+
+#include "channel-scheduler.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("ChannelScheduler");
+
+NS_OBJECT_ENSURE_REGISTERED (ChannelScheduler);
+
+TypeId
+ChannelScheduler::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::ChannelScheduler")
+    .SetParent<Object> ()
+  ;
+  return tid;
+}
+
+ChannelScheduler::ChannelScheduler ()
+{
+  NS_LOG_FUNCTION (this);
+}
+ChannelScheduler::~ChannelScheduler ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+ChannelScheduler::DoInitialize (void)
+{
+  // assign default CCH access when the device is initialized
+  AssignDefaultCchAccess ();
+}
+
+void
+ChannelScheduler::SetWaveNetDevice (Ptr<WaveNetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+  m_device = device;
+}
+
+bool
+ChannelScheduler::IsChannelAccessAssigned (uint32_t channelNumber) const
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  return (GetAssignedAccessType (channelNumber) != NoAccess);
+}
+
+bool
+ChannelScheduler::IsCchAccessAssigned (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return (GetAssignedAccessType (CCH) != NoAccess);
+}
+
+bool
+ChannelScheduler::IsSchAccessAssigned (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return (GetAssignedAccessType (SCH1) != NoAccess) || (GetAssignedAccessType (SCH2) != NoAccess)
+         || (GetAssignedAccessType (SCH3) != NoAccess) || (GetAssignedAccessType (SCH4) != NoAccess)
+         || (GetAssignedAccessType (SCH5) != NoAccess) || (GetAssignedAccessType (SCH6) != NoAccess);
+}
+
+bool
+ChannelScheduler::IsContinuousAccessAssigned (uint32_t channelNumber) const
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  return (GetAssignedAccessType (channelNumber) == ContinuousAccess);
+}
+bool
+ChannelScheduler::IsAlternatingAccessAssigned (uint32_t channelNumber) const
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  return (GetAssignedAccessType (channelNumber) == AlternatingAccess);
+}
+bool
+ChannelScheduler::IsExtendedAccessAssigned (uint32_t channelNumber) const
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  return (GetAssignedAccessType (channelNumber) == ExtendedAccess);
+}
+bool
+ChannelScheduler::IsDefaultCchAccessAssigned (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return (GetAssignedAccessType (CCH) == DefaultCchAccess);
+}
+bool
+ChannelScheduler::StartSch (const SchInfo & schInfo)
+{
+  NS_LOG_FUNCTION (this << &schInfo);
+  uint32_t cn = schInfo.channelNumber;
+
+  if (ChannelManager::IsCch (schInfo.channelNumber))
+    {
+      NS_LOG_DEBUG ("the channel access requirement for CCH is not allowed.");
+      return false;
+    }
+  uint32_t extends = schInfo.extendedAccess;
+  bool immediate = schInfo.immediateAccess;
+  Ptr<OcbWifiMac> mac = m_device->GetMac (cn);
+  for (EdcaParameterSetI i = schInfo.edcaParameterSet.begin (); i != schInfo.edcaParameterSet.end (); ++i)
+    {
+      EdcaParameter edca = i->second;
+      mac->ConfigureEdca (edca.cwmin, edca.cwmax, edca.aifsn, i->first);
+    }
+
+  if (extends == EXTENDED_CONTINUOUS)
+    {
+      return AssignContinuousAccess (cn, immediate);
+    }
+  else if (extends == EXTENDED_ALTERNATING)
+    {
+      return AssignAlternatingAccess (cn, immediate);
+    }
+  else
+    {
+      return AssignExtendedAccess (cn, extends, immediate);
+    }
+}
+
+bool
+ChannelScheduler::StopSch (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  if (ChannelManager::IsCch (channelNumber))
+    {
+      NS_LOG_DEBUG ("the channel access for CCH is not allowed to be released.");
+      return false;
+    }
+  if (!IsChannelAccessAssigned (channelNumber))
+    {
+      NS_LOG_DEBUG ("the channel access for channel " << channelNumber << " has already been released.");
+      return true;
+    }
+  return ReleaseAccess (channelNumber);
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wave/model/channel-scheduler.h ns-3.22/src/wave/model/channel-scheduler.h
--- ns-3.21/src/wave/model/channel-scheduler.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/channel-scheduler.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,201 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#ifndef CHANNEL_SCHEDULER_H
+#define CHANNEL_SCHEDULER_H
+
+#include <map>
+#include "wave-net-device.h"
+namespace ns3 {
+class WaveNetDevice;
+
+struct EdcaParameter
+{
+  uint32_t cwmin;
+  uint32_t cwmax;
+  uint32_t aifsn;
+};
+typedef std::map<AcIndex,EdcaParameter> EdcaParameterSet;
+typedef std::map<AcIndex,EdcaParameter>::const_iterator EdcaParameterSetI;
+
+#define EXTENDED_ALTERNATING 0x00
+#define EXTENDED_CONTINUOUS 0xff
+/**
+ * \param channelNumber channel number that the SCH service
+ * can be made available for communications.
+ * \param operationalRateSet OperationalRateSet if present, as specified in IEEE Std 802.11.
+ * valid range: 1-127.
+ * \param immediateAccess Indicates that the MLME should provide immediate
+ * access to the SCH and not wait until the next SCH interval.
+ * \param extendedAccess Indicates that the MLME should provide continuous
+ * access (during both SCH interval and CCH interval) to the SCH for ExtendedAccess
+ * control channel intervals. A value of 255 indicates indefinite access.
+ * \param edcaParameterSet If present, as specified in IEEE Std 802.11.
+ */
+struct SchInfo
+{
+  uint32_t channelNumber;
+  //OperationalRateSet  operationalRateSet;  // not supported
+  bool immediateAccess;
+  uint8_t extendedAccess;
+  EdcaParameterSet edcaParameterSet;
+  SchInfo ()
+    : channelNumber (SCH1),
+      immediateAccess (false),
+      extendedAccess (EXTENDED_ALTERNATING)
+  {
+
+  }
+  SchInfo (uint32_t channel, bool immediate, uint32_t channelAccess)
+    : channelNumber (channel),
+      immediateAccess (immediate),
+      extendedAccess (channelAccess)
+  {
+
+  }
+  SchInfo (uint32_t channel, bool immediate, uint32_t channelAccess, EdcaParameterSet edca)
+    : channelNumber (channel),
+      immediateAccess (immediate),
+      extendedAccess (channelAccess),
+      edcaParameterSet (edca)
+  {
+
+  }
+};
+
+enum ChannelAccess
+{
+  ContinuousAccess,      // continuous access for SCHs
+  AlternatingAccess,       //alternating CCH and SCH access
+  ExtendedAccess,         // extended access in SCHs
+  DefaultCchAccess,     // default continuous CCH access
+  NoAccess,                    // no channel access assigned
+};
+
+/**
+ * \ingroup wave
+ * \brief This class will assign channel access for requests from higher layers.
+ * The channel access options include (1) continuous access for SCHs, (2) alternating
+ * CCH and SCH access,  (3) extended access for SCHs and (4) default continuous CCH
+ * access. The options except (4) have an immediate parameter to enable immediate
+ * access assignment without the need for waiting.
+ * Its sub-class can use different mechanism to assign the channel access.
+ */
+class ChannelScheduler : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  ChannelScheduler ();
+  virtual ~ChannelScheduler ();
+
+  /**
+   * \param device enable channel scheduler associated with WaveNetDevice
+   */
+  virtual void SetWaveNetDevice (Ptr<WaveNetDevice> device);
+  /**
+   * \return whether CCH channel access is assigned.
+.   */
+  bool IsCchAccessAssigned (void) const;
+  /**
+   * \return whether SCH channel access is assigned.
+.   */
+  bool IsSchAccessAssigned (void) const;
+  /**
+   * \param channelNumber the specified channel number
+   * \return  whether channel access is assigned for the channel.
+   */
+  bool IsChannelAccessAssigned (uint32_t channelNumber) const;
+  /**
+   * \param channelNumber the specified channel number
+   * \return whether the continuous access is assigned for the specific channel.
+   */
+  bool IsContinuousAccessAssigned (uint32_t channelNumber) const;
+  /**
+   * \param channelNumber the specified channel number
+   * \return whether the continuous access is assigned for the specific channel.
+   */
+  bool IsAlternatingAccessAssigned (uint32_t channelNumber) const;
+  /**
+   * \param channelNumber the specified channel number
+   * \return whether the continuous access is assigned for the specific channel.
+   */
+  bool IsExtendedAccessAssigned (uint32_t channelNumber) const;
+  /**
+   * \return whether the continuous access is assigned for CCHl.
+   */
+  bool IsDefaultCchAccessAssigned (void) const;
+  /**
+   * \param channelNumber the specified channel number
+   * \return  the type of current assigned channel access for the specific channel.
+.  */
+  virtual enum ChannelAccess GetAssignedAccessType (uint32_t channelNumber) const = 0;
+
+  /**
+   * \param sch_info the request information for assigning SCH access.
+   * \return whether the channel access is assigned successfully.
+   *
+   * This method is called to assign channel access for sending packets.
+   */
+  bool StartSch (const SchInfo & schInfo);
+  /**
+   * \param channelNumber indicating which channel should release
+   * the assigned channel access resource.
+   */
+  bool StopSch (uint32_t channelNumber);
+
+protected:
+  virtual void DoInitialize (void);
+
+  /**
+     * \param channelNumber the specific channel
+     * \param immediate indicate whether channel switch to channel
+     * \return whether the channel access is assigned successfully
+     *
+     * This method will assign alternating access for SCHs and CCH.
+     */
+  virtual bool AssignAlternatingAccess (uint32_t channelNumber, bool immediate) = 0;
+  /**
+   * \param channelNumber the specific channel
+   * \param immediate indicate whether channel switch to channel
+   * \return whether the channel access is assigned successfully
+   *
+   * This method will assign continuous access CCH.
+   */
+  virtual bool AssignContinuousAccess (uint32_t channelNumber, bool immediate) = 0;
+  /**
+   * \param channelNumber the specific channel
+   * \param immediate indicate whether channel switch to channel
+   * \return whether the channel access is assigned successfully
+   *
+   * This method will assign extended access for SCHs.
+   */
+  virtual bool AssignExtendedAccess (uint32_t channelNumber, uint32_t extends, bool immediate) = 0;
+  /*
+   * This method will assign default CCH access for CCH.
+   */
+  virtual bool AssignDefaultCchAccess (void) = 0;
+  /**
+   * \param channelNumber indicating for which channel should release
+   * the assigned channel access resource.
+   */
+  virtual bool ReleaseAccess (uint32_t channelNumber) = 0;
+
+  Ptr<WaveNetDevice> m_device;
+};
+
+}
+#endif /* CHANNEL_SCHEDULER_H */
diff -Naur ns-3.21/src/wave/model/default-channel-scheduler.cc ns-3.22/src/wave/model/default-channel-scheduler.cc
--- ns-3.21/src/wave/model/default-channel-scheduler.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/default-channel-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,434 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#include "default-channel-scheduler.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("DefaultChannelScheduler");
+
+NS_OBJECT_ENSURE_REGISTERED (DefaultChannelScheduler);
+
+class CoordinationListener : public ChannelCoordinationListener
+{
+public:
+  CoordinationListener (DefaultChannelScheduler * scheduler)
+    : m_scheduler (scheduler)
+  {
+  }
+  virtual ~CoordinationListener ()
+  {
+  }
+  virtual void NotifyCchSlotStart (Time duration)
+  {
+    m_scheduler->NotifyCchSlotStart (duration);
+  }
+  virtual void NotifySchSlotStart (Time duration)
+  {
+    m_scheduler->NotifySchSlotStart (duration);
+  }
+  virtual void NotifyGuardSlotStart (Time duration, bool cchi)
+  {
+    m_scheduler->NotifyGuardSlotStart (duration, cchi);
+  }
+private:
+  DefaultChannelScheduler * m_scheduler;
+};
+
+TypeId
+DefaultChannelScheduler::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::DefaultChannelScheduler")
+    .SetParent<ChannelScheduler> ()
+    .AddConstructor<DefaultChannelScheduler> ()
+  ;
+  return tid;
+}
+
+DefaultChannelScheduler::DefaultChannelScheduler ()
+  : m_channelNumber (0),
+    m_extend (EXTENDED_CONTINUOUS),
+    m_channelAccess (NoAccess),
+    m_waitChannelNumber (0),
+    m_waitExtend (0),
+    m_coordinationListener (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+DefaultChannelScheduler::~DefaultChannelScheduler ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+DefaultChannelScheduler::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  ChannelScheduler::DoInitialize ();
+}
+
+void
+DefaultChannelScheduler::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_coordinator = 0;
+  if (m_coordinationListener != 0)
+    {
+      m_coordinationListener = 0;
+    }
+  if (!m_waitEvent.IsExpired ())
+    {
+      m_waitEvent.Cancel ();
+    }
+  if (!m_extendEvent.IsExpired ())
+    {
+      m_waitEvent.Cancel ();
+    }
+  ChannelScheduler::DoDispose ();
+}
+
+void
+DefaultChannelScheduler::SetWaveNetDevice (Ptr<WaveNetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+  ChannelScheduler::SetWaveNetDevice (device);
+  std::vector<Ptr<WifiPhy> > phys = device->GetPhys ();
+  if (phys.size () > 1)
+    {
+      NS_LOG_WARN ("The class is only in the context of single-PHY device, while there are more than one PHY devices");
+    }
+  // since default channel scheduler is in the context of single-PHY, we only use one phy object.
+  m_phy = device->GetPhy (0);
+  m_coordinator = device->GetChannelCoordinator ();
+  m_coordinationListener = Create<CoordinationListener> (this);
+  m_coordinator->RegisterListener (m_coordinationListener);
+}
+
+enum ChannelAccess
+DefaultChannelScheduler::GetAssignedAccessType (uint32_t channelNumber) const
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  if (m_channelAccess == AlternatingAccess && channelNumber == CCH)
+    {
+      return AlternatingAccess;
+    }
+  return (m_channelNumber == channelNumber) ? m_channelAccess : NoAccess;
+}
+
+
+bool
+DefaultChannelScheduler::AssignAlternatingAccess (uint32_t channelNumber, bool immediate)
+{
+  NS_LOG_FUNCTION (this << channelNumber << immediate);
+  NS_ASSERT (m_channelAccess != NoAccess && m_channelNumber != 0);
+  uint32_t sch = channelNumber;
+
+  if (m_channelAccess == ContinuousAccess || m_channelAccess == ExtendedAccess)
+    {
+      return false;
+    }
+
+  if (m_channelAccess == AlternatingAccess)
+    {
+      if (m_channelNumber != sch)
+        {
+          return false;
+        }
+      else
+        {
+          return true;
+        }
+    }
+
+  // if we need immediately switch SCH in CCHI, or we are in SCHI now,
+  // we switch to specific SCH.
+  if ((immediate || m_coordinator->IsSchInterval ()))
+    {
+      NS_ASSERT (m_channelNumber == CCH);
+      SwitchToNextChannel (CCH, sch);
+    }
+
+  m_channelNumber = sch;
+  m_channelAccess = AlternatingAccess;
+  return true;
+}
+
+bool
+DefaultChannelScheduler::AssignContinuousAccess (uint32_t channelNumber, bool immediate)
+{
+  NS_LOG_FUNCTION (this << channelNumber << immediate);
+  NS_ASSERT (m_channelAccess != NoAccess && m_channelNumber != 0);
+  uint32_t sch = channelNumber;
+  if (m_channelAccess == AlternatingAccess || m_channelAccess == ExtendedAccess)
+    {
+      return false;
+    }
+
+  if (m_channelAccess == ContinuousAccess)
+    {
+      if (m_channelNumber != sch)
+        {
+          return false;
+        }
+      else
+        {
+          return true;
+        }
+    }
+
+  // if there is already an wait event for previous non-immediate request
+  if (!m_waitEvent.IsExpired ())
+    {
+      if (m_waitChannelNumber != sch)
+        {
+          // then the coming new request will be rejected because of FCFS
+          return false;
+        }
+      else
+        {
+          if (!immediate)
+            {
+              return true;
+            }
+          // then cancel this wait event and assign access for request immediately
+          m_waitEvent.Cancel ();
+        }
+    }
+
+  if (immediate || m_coordinator->IsSchInterval ())
+    {
+      SwitchToNextChannel (m_channelNumber, sch);
+      m_channelNumber = sch;
+      m_channelAccess = ContinuousAccess;
+    }
+  else
+    {
+      Time wait = m_coordinator->NeedTimeToSchInterval ();
+      m_waitEvent = Simulator::Schedule (wait, &DefaultChannelScheduler::AssignContinuousAccess, this, sch, false);
+      m_waitChannelNumber = sch;
+    }
+
+  return true;
+}
+
+bool
+DefaultChannelScheduler::AssignExtendedAccess (uint32_t channelNumber, uint32_t extends, bool immediate)
+{
+  NS_LOG_FUNCTION (this << channelNumber << extends << immediate);
+  NS_ASSERT (m_channelAccess != NoAccess && m_channelNumber != 0);
+  uint32_t sch = channelNumber;
+  if (m_channelAccess == AlternatingAccess || m_channelAccess == ContinuousAccess)
+    {
+      return false;
+    }
+
+  if (m_channelAccess == ExtendedAccess)
+    {
+      if (m_channelNumber != sch)
+        {
+          return false;
+        }
+      else
+        {
+          // if current remain extends cannot fulfill the requirement for extends
+          Time remainTime = Simulator::GetDelayLeft (m_extendEvent);
+          uint32_t remainExtends = remainTime / m_coordinator->GetSyncInterval ();
+          if (remainExtends > extends)
+            {
+              return true;
+            }
+          else
+            {
+              return false;
+            }
+        }
+    }
+
+  // if there is already an wait event for previous non-immediate request
+  if (!m_waitEvent.IsExpired ())
+    {
+      NS_ASSERT (m_extendEvent.IsExpired ());
+      if (m_waitChannelNumber != sch)
+        {
+          // then the coming new request will be rejected because of FCFS
+          return false;
+        }
+      else
+        {
+          if (m_waitExtend < extends)
+            {
+              return false;
+            }
+
+          if (immediate)
+            {
+              // then cancel previous wait event and
+              // go to below code to assign access for request immediately
+              m_waitEvent.Cancel ();
+            }
+          else
+            {
+              return true;
+            }
+        }
+    }
+
+  if (immediate || m_coordinator->IsSchInterval ())
+    {
+      SwitchToNextChannel (m_channelNumber, sch);
+      m_channelNumber = sch;
+      m_channelAccess = ExtendedAccess;
+      m_extend = extends;
+
+      Time sync = m_coordinator->GetSyncInterval ();
+      // the wait time to proper interval will not be calculated as extended time.
+      Time extendedDuration = m_coordinator->NeedTimeToCchInterval () + MilliSeconds (extends * sync.GetMilliSeconds ());
+      // after end_duration time, DefaultChannelScheduler will release channel access automatically
+      m_extendEvent = Simulator::Schedule (extendedDuration, &DefaultChannelScheduler::ReleaseAccess, this, sch);
+    }
+  else
+    {
+      Time wait = m_coordinator->NeedTimeToSchInterval ();
+      m_waitEvent = Simulator::Schedule (wait, &DefaultChannelScheduler::AssignExtendedAccess, this, sch, extends, false);
+      m_waitChannelNumber = sch;
+      m_waitExtend = extends;
+    }
+  return true;
+}
+
+bool
+DefaultChannelScheduler::AssignDefaultCchAccess (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_channelAccess == DefaultCchAccess)
+    {
+      return true;
+    }
+  if (m_channelNumber != 0)
+    {
+      // This class does not support preemptive scheduling
+      NS_LOG_DEBUG ("channel access is already assigned for other SCHs, thus cannot assign default CCH access.");
+      return false;
+    }
+  // CCH MAC is to attach single-PHY device and wake up for transmission.
+  Ptr<OcbWifiMac> cchMacEntity = m_device->GetMac (CCH);
+  m_phy->SetChannelNumber (CCH);
+  cchMacEntity->SetWifiPhy (m_phy);
+  cchMacEntity->Resume ();
+
+  m_channelAccess = DefaultCchAccess;
+  m_channelNumber = CCH;
+  m_extend = EXTENDED_CONTINUOUS;
+  return true;
+}
+
+void
+DefaultChannelScheduler::SwitchToNextChannel (uint32_t curChannelNumber, uint32_t nextChannelNumber)
+{
+  NS_LOG_FUNCTION (this << curChannelNumber << curChannelNumber);
+  if (m_phy->GetChannelNumber () == nextChannelNumber)
+    {
+      return;
+    }
+  Ptr<OcbWifiMac> curMacEntity = m_device->GetMac (curChannelNumber);
+  Ptr<OcbWifiMac> nextMacEntity = m_device->GetMac (nextChannelNumber);
+  // Perfect channel switch operation among multiple MAC entities in the context of single PHY device.
+  // first make current MAC entity in sleep mode.
+  curMacEntity->Suspend ();
+  // second unattached current MAC entity from single PHY device
+  curMacEntity->ResetWifiPhy ();
+  // third switch PHY device from current channel to next channel;
+  m_phy->SetChannelNumber (nextChannelNumber);
+  // Here channel switch time is required to notify next MAC entity
+  // that channel access cannot be enabled in channel switch time.
+  Time switchTime = m_phy->GetChannelSwitchDelay ();
+  nextMacEntity->MakeVirtualBusy (switchTime);
+  // four attach next MAC entity to single PHY device
+  nextMacEntity->SetWifiPhy (m_phy);
+  // finally resume next MAC entity from sleep mode
+  nextMacEntity->Resume ();
+}
+
+bool
+DefaultChannelScheduler::ReleaseAccess (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  NS_ASSERT (m_channelNumber != 0);
+  if (m_channelNumber != channelNumber)
+    {
+      return false;
+    }
+  // cancel  current SCH MAC activity and assigned default CCH access.
+  SwitchToNextChannel (m_channelNumber, CCH);
+  m_channelAccess = DefaultCchAccess;
+  m_channelNumber = CCH;
+  m_extend = EXTENDED_CONTINUOUS;
+  if (!m_waitEvent.IsExpired ())
+    {
+      m_waitEvent.Cancel ();
+    }
+  if (!m_extendEvent.IsExpired ())
+    {
+      m_extendEvent.Cancel ();
+    }
+  m_waitChannelNumber = 0;
+  m_waitExtend = 0;
+  return true;
+}
+
+void
+DefaultChannelScheduler::NotifyCchSlotStart (Time duration)
+{
+  NS_LOG_FUNCTION (this << duration);
+}
+
+void
+DefaultChannelScheduler::NotifySchSlotStart (Time duration)
+{
+  NS_LOG_FUNCTION (this << duration);
+}
+
+void
+DefaultChannelScheduler::NotifyGuardSlotStart (Time duration, bool cchi)
+{
+  NS_LOG_FUNCTION (this << duration << cchi);
+  // only alternating access requires channel coordination events
+  if (m_channelAccess != AlternatingAccess)
+    {
+      return;
+    }
+
+  if (cchi)
+    {
+      SwitchToNextChannel (m_channelNumber, CCH);
+      Ptr<OcbWifiMac> mac = m_device->GetMac (CCH);
+      // see chapter 6.2.5 Sync tolerance
+      // a medium busy shall be declared during the guard interval.
+      mac->MakeVirtualBusy (duration);
+    }
+  else
+    {
+      Ptr<OcbWifiMac> mac = m_device->GetMac (m_channelNumber);
+      SwitchToNextChannel (CCH, m_channelNumber);
+      // see chapter 6.2.5 Sync tolerance
+      // a medium busy shall be declared during the guard interval.
+      mac->MakeVirtualBusy (duration);
+    }
+}
+} // namespace ns3
diff -Naur ns-3.21/src/wave/model/default-channel-scheduler.h ns-3.22/src/wave/model/default-channel-scheduler.h
--- ns-3.21/src/wave/model/default-channel-scheduler.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/default-channel-scheduler.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,120 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#ifndef DEFAULT_CHANNEL_SCHEDULER_H
+#define DEFAULT_CHANNEL_SCHEDULER_H
+
+#include "wave-net-device.h"
+namespace ns3 {
+class WaveNetDevice;
+
+/**
+ * \ingroup wave
+ * \brief This class uses a simple mechanism to assign channel access with following features:
+ * (1) only in the context of single-PHY device;
+ * (2) FCFS (First come First service) strategy, which seems against the description of
+ * the standard (preemptive strategy).
+ */
+class DefaultChannelScheduler : public ChannelScheduler
+{
+public:
+  static TypeId GetTypeId (void);
+  DefaultChannelScheduler ();
+  virtual ~DefaultChannelScheduler ();
+
+  /**
+   * \param device enable channel scheduler associated with WaveNetDevice
+   */
+  virtual void SetWaveNetDevice (Ptr<WaveNetDevice> device);
+  /**
+   * \param channelNumber the specified channel number
+   * \return  the type of current assigned channel access for the specific channel.
+.  */
+  virtual enum ChannelAccess GetAssignedAccessType (uint32_t channelNumber) const;
+
+  void NotifyCchSlotStart (Time duration);
+  void NotifySchSlotStart (Time duration);
+  void NotifyGuardSlotStart (Time duration, bool cchi);
+private:
+  virtual void DoInitialize (void);
+  virtual void DoDispose (void);
+  /**
+   * \param channelNumber the specific channel
+   * \param immediate indicate whether channel switch to channel
+   * \return whether the channel access is assigned successfully
+   *
+   * This method will assign alternating access for SCHs and CCH.
+   */
+  virtual bool AssignAlternatingAccess (uint32_t channelNumber, bool immediate);
+  /**
+   * \param channelNumber the specific channel
+   * \param immediate indicate whether channel switch to channel
+   * \return whether the channel access is assigned successfully
+   *
+   * This method will assign continuous SCH access CCH.
+   */
+  virtual bool AssignContinuousAccess (uint32_t channelNumber, bool immediate);
+  /**
+   * \param channelNumber the specific channel
+   * \param immediate indicate whether channel switch to channel
+   * \return whether the channel access is assigned successfully
+   *
+   * This method will assign extended SCH access for SCHs.
+   */
+  virtual bool AssignExtendedAccess (uint32_t channelNumber, uint32_t extends, bool immediate);
+  /**
+   * This method will assign default CCH access for CCH.
+   */
+  virtual bool AssignDefaultCchAccess (void);
+  /**
+   * \param channelNumber indicating for which channel should release
+   * the assigned channel access resource.
+   */
+  virtual bool ReleaseAccess (uint32_t channelNumber);
+  /**
+   * \param curChannelNumber switch from MAC activity for current channel
+   * \param nextChannelNumber switch to MAC activity for next channel
+   */
+  void SwitchToNextChannel (uint32_t curChannelNumber, uint32_t nextChannelNumber);
+
+  Ptr<ChannelManager> m_manager;
+  Ptr<ChannelCoordinator> m_coordinator;
+  Ptr<WifiPhy> m_phy;
+
+  /**
+   *  when m_channelAccess is ContinuousAccess, m_channelNumber
+   *   is continuous channel number;
+   *  when m_channelAccess is AlternatingAccess, m_channelNumber
+   *   is SCH channel number, another alternating channel is CCH;
+   *  when m_channelAccess is ExtendedAccess, m_channelNumber
+   *   is extended access, extends is the number of extends access.
+   *  when m_channelAccess is DefaultCchAccess, m_channelNumber is CCH.
+   */
+  uint32_t m_channelNumber;
+  uint32_t m_extend;
+  EventId m_extendEvent;
+  enum ChannelAccess m_channelAccess;
+
+  EventId m_waitEvent;
+  uint32_t m_waitChannelNumber;
+  uint32_t m_waitExtend;
+
+  Ptr<ChannelCoordinationListener> m_coordinationListener;
+};
+
+}
+#endif /* DEFAULT_CHANNEL_SCHEDULER_H */
diff -Naur ns-3.21/src/wave/model/higher-tx-tag.cc ns-3.22/src/wave/model/higher-tx-tag.cc
--- ns-3.21/src/wave/model/higher-tx-tag.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/model/higher-tx-tag.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,85 +20,86 @@
  *         Junling Bu <linlinjavaer@gmail.com>
  */
 #include "higher-tx-tag.h"
-#include "ns3/tag.h"
 #include "ns3/log.h"
-#include "ns3/uinteger.h"
-
-NS_LOG_COMPONENT_DEFINE ("HigherDataTxVectorTag");
 
 namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED (HigherDataTxVectorTag);
+NS_LOG_COMPONENT_DEFINE ("HigherLayerTxVectorTag");
+
+NS_OBJECT_ENSURE_REGISTERED (HigherLayerTxVectorTag);
 
 TypeId
-HigherDataTxVectorTag::GetTypeId (void)
+HigherLayerTxVectorTag::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::HigherDataTxVectorTag")
+  static TypeId tid = TypeId ("ns3::HigherLayerTxVectorTag")
     .SetParent<Tag> ()
-    .AddConstructor<HigherDataTxVectorTag> ()
+    .AddConstructor<HigherLayerTxVectorTag> ()
   ;
   return tid;
 }
-HigherDataTxVectorTag::HigherDataTxVectorTag (void)
-  : m_adapter (false)
-{
-  NS_LOG_FUNCTION (this);
-}
-HigherDataTxVectorTag::HigherDataTxVectorTag (WifiTxVector dataTxVector, bool adapter)
-  : m_dataTxVector (dataTxVector),
-    m_adapter (adapter)
+
+TypeId
+HigherLayerTxVectorTag::GetInstanceTypeId (void) const
 {
   NS_LOG_FUNCTION (this);
+  return GetTypeId ();
 }
-HigherDataTxVectorTag::~HigherDataTxVectorTag (void)
+
+HigherLayerTxVectorTag::HigherLayerTxVectorTag (void)
+  : m_adaptable (false)
 {
   NS_LOG_FUNCTION (this);
 }
-TypeId
-HigherDataTxVectorTag::GetInstanceTypeId (void) const
+
+HigherLayerTxVectorTag::HigherLayerTxVectorTag (WifiTxVector txVector, bool adaptable)
+  : m_txVector (txVector),
+    m_adaptable (adaptable)
 {
   NS_LOG_FUNCTION (this);
-  return GetTypeId ();
 }
 
 WifiTxVector
-HigherDataTxVectorTag::GetDataTxVector (void) const
+HigherLayerTxVectorTag::GetTxVector (void) const
 {
   NS_LOG_FUNCTION (this);
-  return m_dataTxVector;
+  return m_txVector;
 }
+
 bool
-HigherDataTxVectorTag::IsAdapter (void) const
+HigherLayerTxVectorTag::IsAdaptable (void) const
 {
   NS_LOG_FUNCTION (this);
-  return m_adapter;
+  return m_adaptable;
 }
 
 uint32_t
-HigherDataTxVectorTag::GetSerializedSize (void) const
+HigherLayerTxVectorTag::GetSerializedSize (void) const
 {
   NS_LOG_FUNCTION (this);
   return (sizeof (WifiTxVector) + 1);
 }
+
 void
-HigherDataTxVectorTag::Serialize (TagBuffer i) const
+HigherLayerTxVectorTag::Serialize (TagBuffer i) const
 {
   NS_LOG_FUNCTION (this << &i);
-  i.Write ((uint8_t *)&m_dataTxVector, sizeof (WifiTxVector));
-  i.WriteU8 (static_cast<uint8_t> (m_adapter));
+  i.Write ((uint8_t *)&m_txVector, sizeof (WifiTxVector));
+  i.WriteU8 (static_cast<uint8_t> (m_adaptable));
 }
+
 void
-HigherDataTxVectorTag::Deserialize (TagBuffer i)
+HigherLayerTxVectorTag::Deserialize (TagBuffer i)
 {
   NS_LOG_FUNCTION (this << &i);
-  i.Read ((uint8_t *)&m_dataTxVector, sizeof (WifiTxVector));
-  m_adapter = i.ReadU8 ();
+  i.Read ((uint8_t *)&m_txVector, sizeof (WifiTxVector));
+  m_adaptable = i.ReadU8 ();
 }
+
 void
-HigherDataTxVectorTag::Print (std::ostream &os) const
+HigherLayerTxVectorTag::Print (std::ostream &os) const
 {
   NS_LOG_FUNCTION (this << &os);
-  os << " Data=" << m_dataTxVector << " Adapter=" << m_adapter;
+  os << " TxVector=" << m_txVector << ";  Adapter=" << m_adaptable;
 }
 
 } // namespace ns3
diff -Naur ns-3.21/src/wave/model/higher-tx-tag.h ns-3.22/src/wave/model/higher-tx-tag.h
--- ns-3.21/src/wave/model/higher-tx-tag.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/model/higher-tx-tag.h	2015-02-05 15:46:22.000000000 -0800
@@ -19,41 +19,56 @@
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *         Junling Bu <linlinjavaer@gmail.com>
  */
-#ifndef HIGHER_DATA_TXVECTOR_TAG_H
-#define HIGHER_DATA_TXVECTOR_TAG_H
+#ifndef HIGHER_LAYER_TX_VECTOR_TAG_H
+#define HIGHER_LAYER_TX_VECTOR_TAG_H
 
-#include "ns3/packet.h"
+#include "ns3/tag.h"
 #include "ns3/wifi-tx-vector.h"
 
 namespace ns3 {
 class Tag;
+class WifiTxVector;
+class TypeId;
 
 /**
- * This tag will be used to support higher layer control data rate
- * and tx power level.
+ * \ingroup packet
+ * \brief This tag will be used to support higher layer control DataRate
+ * and TxPwr_Level for transmission.
+ * If the high layer enables adaptable mode,  DataRate will be the
+ * minimum allowable value and TxPwr_Level will be the maximum
+ * allowable value for transmission.
+ * If the higher layer does not enable adaptable parameter, the
+ * DataRate and TxPwr_Level will be actual values for transmission.
+ * However, if this tag is not used and inserted in the packet, the actual
+ * DataRate and TxPwr_Level for transmission will be determined by MAC layer.
  */
-class HigherDataTxVectorTag : public Tag
+class HigherLayerTxVectorTag : public Tag
 {
 public:
-  HigherDataTxVectorTag (void);
-  HigherDataTxVectorTag (WifiTxVector dataTxVector, bool adapter);
-  virtual ~HigherDataTxVectorTag (void);
-
-  WifiTxVector GetDataTxVector (void) const;
-  bool IsAdapter (void) const;
-
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
+
+  HigherLayerTxVectorTag (void);
+  HigherLayerTxVectorTag (WifiTxVector txVector, bool adaptable);
+  /**
+   * \returns the tx vector for transmission
+   */
+  WifiTxVector GetTxVector (void) const;
+  /**
+   * \returns the adaptable mode for transmission
+   */
+  bool IsAdaptable (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_dataTxVector;
-  bool m_adapter;
+  WifiTxVector m_txVector;
+  bool m_adaptable;
 };
 
 } // namespace ns3
 
-#endif /* HIGHER_DATA_TXVECTOR_TAG_H*/
+#endif /* HIGHER_LAYER_TX_VECTOR_TAG_H*/
diff -Naur ns-3.21/src/wave/model/ocb-wifi-mac.cc ns-3.22/src/wave/model/ocb-wifi-mac.cc
--- ns-3.21/src/wave/model/ocb-wifi-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/model/ocb-wifi-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include "vendor-specific-action.h"
 #include "higher-tx-tag.h"
 
-NS_LOG_COMPONENT_DEFINE ("OcbWifiMac");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("OcbWifiMac");
+
 NS_OBJECT_ENSURE_REGISTERED (OcbWifiMac);
 
 const static Mac48Address WILDCARD_BSSID = Mac48Address::GetBroadcast ();
@@ -53,17 +53,6 @@
 OcbWifiMac::OcbWifiMac (void)
 {
   NS_LOG_FUNCTION (this);
-
-  // use WaveMacLow instead of MacLow
-  m_low = CreateObject<WaveMacLow> ();
-  m_low->SetRxCallback (MakeCallback (&MacRxMiddle::Receive, m_rxMiddle));
-  m_dcfManager->SetupLowListener (m_low);
-  m_dca->SetLow (m_low);
-  for (EdcaQueues::iterator i = m_edca.begin (); i != m_edca.end (); ++i)
-    {
-      i->second->SetLow (m_low);
-    }
-
   // Let the lower layers know that we are acting as an OCB node
   SetTypeOfStation (OCB);
   // BSSID is still needed in the low part of MAC
@@ -172,10 +161,7 @@
     {
       // In ocb mode, we assume that every destination supports all
       // the rates we support.
-      for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
-        {
-          m_stationManager->AddSupportedMode (to, m_phy->GetMode (i));
-        }
+      m_stationManager->AddAllSupportedModes (to);
       m_stationManager->RecordDisassociated (to);
     }
 
@@ -308,6 +294,7 @@
 void
 OcbWifiMac::ConfigureEdca (uint32_t cwmin, uint32_t cwmax, uint32_t aifsn, enum AcIndex ac)
 {
+  NS_LOG_FUNCTION (this << cwmin << cwmax << aifsn << ac);
   Ptr<Dcf> dcf;
   switch (ac)
     {
@@ -350,6 +337,7 @@
 void
 OcbWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
 {
+  NS_LOG_FUNCTION (this << standard);
   NS_ASSERT ((standard == WIFI_PHY_STANDARD_80211_10MHZ)
              || (standard == WIFI_PHY_STANDARD_80211a));
 
@@ -367,6 +355,65 @@
   ConfigureEdca (cwmin, cwmax, 3, AC_VI);
   ConfigureEdca (cwmin, cwmax, 6, AC_BE);
   ConfigureEdca (cwmin, cwmax, 9, AC_BK);
+}
 
+
+void
+OcbWifiMac::Suspend (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_dcfManager->NotifySleepNow ();
+  m_low->NotifySleepNow ();
+}
+
+void
+OcbWifiMac::Resume (void)
+{
+  NS_LOG_FUNCTION (this);
+  // wake-up operation is not required in m_low object
+  m_dcfManager->NotifyWakeupNow ();
+}
+
+void
+OcbWifiMac::MakeVirtualBusy (Time duration)
+{
+  NS_LOG_FUNCTION (this << duration);
+  m_dcfManager->NotifyMaybeCcaBusyStartNow (duration);
+}
+
+void
+OcbWifiMac::CancleTx (enum AcIndex ac)
+{
+  NS_LOG_FUNCTION (this << ac);
+  Ptr<EdcaTxopN> queue = m_edca.find (ac)->second;
+  NS_ASSERT (queue != 0);
+  // reset and flush queue
+  queue->NotifyChannelSwitching ();
+}
+
+void
+OcbWifiMac::Reset (void)
+{
+  NS_LOG_FUNCTION (this);
+  // The switching event is used to notify MAC entity reset its operation.
+  m_dcfManager->NotifySwitchingStartNow (Time (0));
+  m_low->NotifySwitchingStartNow (Time (0));
+}
+
+void
+OcbWifiMac::EnableForWave (Ptr<WaveNetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+  // To extend current OcbWifiMac for WAVE 1609.4, we shall use WaveMacLow instead of MacLow
+  m_low = CreateObject<WaveMacLow> ();
+  (DynamicCast<WaveMacLow> (m_low))->SetWaveNetDevice (device);
+  m_low->SetRxCallback (MakeCallback (&MacRxMiddle::Receive, m_rxMiddle));
+  m_dcfManager->SetupLowListener (m_low);
+  m_dca->SetLow (m_low);
+  for (EdcaQueues::iterator i = m_edca.begin (); i != m_edca.end (); ++i)
+    {
+      i->second->SetLow (m_low);
+      i->second->CompleteConfig ();
+    }
 }
 } // namespace ns3
diff -Naur ns-3.21/src/wave/model/ocb-wifi-mac.h ns-3.22/src/wave/model/ocb-wifi-mac.h
--- ns-3.21/src/wave/model/ocb-wifi-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/model/ocb-wifi-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,11 @@
 #include "ns3/wifi-mac-queue.h"
 #include "ns3/qos-utils.h"
 #include "vendor-specific-action.h"
+#include "wave-net-device.h"
 
 namespace ns3 {
 class OrganizationIdentifier;
-class WifiMacQueue;
+class WaveNetDevice;
 /**
  * \brief STAs communicate with each directly outside the context of a BSS
  * \ingroup wave
@@ -67,7 +68,9 @@
    * every node shall register first if it wants to receive specific vendor specific content.
    */
   void AddReceiveVscCallback (OrganizationIdentifier oi, VscCallback cb);
-
+  /**
+   * \param oi Organization Identifier
+   */
   void RemoveReceiveVscCallback (OrganizationIdentifier oi);
 
   /**
@@ -129,6 +132,44 @@
     */
   void ConfigureEdca (uint32_t cwmin, uint32_t cwmax, uint32_t aifsn, enum AcIndex ac);
 
+  // below six public methods are used for MAC extension defined in IEEE 1609.4
+  /**
+   * \param device make current MAC entity associated with WaveNetDevice
+   *
+   * To support MAC extension for multiple channel operation,
+   *  WaveMacLow object will be used to replace original MacLow object.
+   */
+  void EnableForWave (Ptr<WaveNetDevice> device);
+  /**
+   * To support MAC extension for multiple channel operation,
+   * Suspend the activity in current MAC entity
+   */
+  void Suspend (void);
+  /**
+   * To support MAC extension for multiple channel operation,
+   * Resume the activity of suspended MAC entity
+   */
+  void Resume (void);
+  /**
+   * \param duration the virtual busy time for MAC entity
+   *
+   * To support MAC extension for multiple channel operation,
+   * Notify MAC entity busy for some time to prevent transmission
+   */
+  void MakeVirtualBusy (Time duration);
+  /**
+   * \param ac the specified access category
+   *
+   * To support MAC extension for multiple channel operation,
+   * Cancel transmit operation for internal queue associated with a specified Access Category.
+   */
+  void CancleTx (enum AcIndex ac);
+  /**
+   * To support MAC extension for multiple channel operation,
+   * Reset current MAC entity and flush its internal queues.
+   */
+  void Reset (void);
+
 protected:
   virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
 private:
diff -Naur ns-3.21/src/wave/model/vendor-specific-action.cc ns-3.22/src/wave/model/vendor-specific-action.cc
--- ns-3.21/src/wave/model/vendor-specific-action.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/model/vendor-specific-action.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "ns3/assert.h"
 #include "vendor-specific-action.h"
 
-NS_LOG_COMPONENT_DEFINE ("VendorSpecificAction");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("VendorSpecificAction");
+
 /*********** OrganizationIdentifier *******/
 
 ATTRIBUTE_HELPER_CPP (OrganizationIdentifier);
@@ -321,8 +321,11 @@
 VendorSpecificContentManager::RegisterVscCallback (OrganizationIdentifier oi, VscCallback cb)
 {
   NS_LOG_FUNCTION (this << oi << &cb);
+  if (IsVscCallbackRegistered (oi))
+    {
+      NS_LOG_WARN ("there is already a VsaCallback registered for OrganizationIdentifier " << oi);
+    }
   m_callbacks.insert (std::make_pair (oi, cb));
-  OrganizationIdentifiers.push_back (oi);
 }
 
 void
@@ -332,6 +335,18 @@
   m_callbacks.erase (oi);
 }
 
+bool
+VendorSpecificContentManager::IsVscCallbackRegistered (OrganizationIdentifier &oi)
+{
+  NS_LOG_FUNCTION (this << oi);
+  if (m_callbacks.find (oi) == m_callbacks.end ())
+    {
+      OrganizationIdentifiers.push_back (oi);
+      return false;
+    }
+  return true;
+}
+
 static VscCallback null_callback = MakeNullCallback<bool, Ptr<WifiMac>, const OrganizationIdentifier &,Ptr<const Packet>,const Address &> ();
 
 VscCallback
diff -Naur ns-3.21/src/wave/model/vendor-specific-action.h ns-3.22/src/wave/model/vendor-specific-action.h
--- ns-3.21/src/wave/model/vendor-specific-action.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/model/vendor-specific-action.h	2015-02-05 15:46:22.000000000 -0800
@@ -45,6 +45,8 @@
  * Normally the value is assigned by IEEE and the length of field is
  * either 24 bits or 36 bits.
  * For more, see IEEE802.11p-2010 section 7.3.1.31 and 7.4.5
+ *
+ * \see attribute_OrganizationIdentifier
  */
 class OrganizationIdentifier
 {
@@ -69,9 +71,14 @@
    * \returns whether current OrganizationIdentifier is initial state
    */
   bool IsNull (void) const;
-
+  /**
+   * \param type set the type of current OrganizationIdentifier
+   */
   void SetType (enum OrganizationIdentifierType type);
-  enum OrganizationIdentifierType GetType () const;
+  /**
+   * \returns whether this OrganizationIdentifier is OUI24 or OUI36.
+   */
+  enum OrganizationIdentifierType GetType (void) const;
 
   // below methods will be called by VendorSpecificActionHeader
   uint32_t GetSerializedSize (void) const;
@@ -139,7 +146,7 @@
   /**
    * the category field shall be CATEGORY_OF_VSA
    */
-  uint8_t GetCategory () const;
+  uint8_t GetCategory (void) const;
 
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
@@ -174,7 +181,20 @@
    * \param cb the receive callback when oi related management packets are received
    */
   void RegisterVscCallback (OrganizationIdentifier oi, VscCallback cb);
+  /**
+   * \param oi the specific OrganizationIdentifier when receive management information
+   * by VendorSpecificAction management frame.
+   */
   void DeregisterVscCallback (OrganizationIdentifier &oi);
+  /**
+   * \param oi the specific OrganizationIdentifier when receive management information
+   * by VendorSpecificAction management frame.
+   */
+  bool IsVscCallbackRegistered (OrganizationIdentifier &oi);
+  /**
+   * \param oi the specific OrganizationIdentifier when receive management information
+   * by VendorSpecificAction management frame.
+   */
   VscCallback FindVscCallback (OrganizationIdentifier &oi);
 
 private:
@@ -182,7 +202,6 @@
   typedef std::map<OrganizationIdentifier,VscCallback>::iterator VscCallbacksI;
 
   VscCallbacks m_callbacks;
-  friend class OrganizationIdentifier;
 };
 
 static std::vector<OrganizationIdentifier> OrganizationIdentifiers;
diff -Naur ns-3.21/src/wave/model/vsa-manager.cc ns-3.22/src/wave/model/vsa-manager.cc
--- ns-3.21/src/wave/model/vsa-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/vsa-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,271 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#include "ns3/log.h"
+#include "ns3/assert.h"
+#include "ns3/simulator.h"
+#include "ns3/qos-tag.h"
+#include "vsa-manager.h"
+#include "higher-tx-tag.h"
+#include "wave-net-device.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("VsaManager");
+
+NS_OBJECT_ENSURE_REGISTERED (VsaManager);
+
+const static uint8_t oi_bytes_1609[5] = {0x00, 0x50, 0xC2, 0x4A, 0x40};
+const static OrganizationIdentifier oi_1609 = OrganizationIdentifier (oi_bytes_1609, 5);
+
+TypeId
+VsaManager::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::VsaManager")
+    .SetParent<Object> ()
+    .AddConstructor<VsaManager> ()
+  ;
+  return tid;
+}
+
+VsaManager::VsaManager (void)
+  : m_device (0)
+{
+  m_vsaReceived = MakeNullCallback<bool, Ptr<const Packet>,const Address &, uint32_t, uint32_t> ();
+}
+
+VsaManager::~VsaManager (void)
+{
+
+}
+
+void
+VsaManager::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  RemoveAll ();
+  m_device = 0;
+}
+
+void
+VsaManager::DoInitialize (void)
+{
+  std::map<uint32_t, Ptr<OcbWifiMac> > macs = m_device->GetMacs ();
+  for (std::map<uint32_t, Ptr<OcbWifiMac> >::iterator i = macs.begin (); i != macs.end (); ++i)
+    {
+      i->second->AddReceiveVscCallback (oi_1609, MakeCallback (&VsaManager::ReceiveVsc, this));
+    }
+}
+
+void
+VsaManager::SetWaveNetDevice (Ptr<WaveNetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+  m_device = device;
+}
+
+void
+VsaManager::SendVsa (const VsaInfo & vsaInfo)
+{
+  NS_LOG_FUNCTION (this << &vsaInfo);
+  OrganizationIdentifier oi;
+  if (vsaInfo.oi.IsNull ())
+    {
+      // refer to 1609.4-2010 chapter 6.4.1.1
+      uint8_t oibytes[5] = {0x00, 0x50, 0xC2, 0x4A, 0x40};
+      oibytes[4] |= (vsaInfo.managementId & 0x0f);
+      oi = OrganizationIdentifier (oibytes, 5);
+    }
+  else
+    {
+      oi = vsaInfo.oi;
+    }
+
+  // if destination MAC address is the unicast address or  repeat rate is 0,
+  // then only single one VSA frame is to be sent.
+  if (vsaInfo.peer.IsGroup () && (vsaInfo.repeatRate != 0))
+    {
+      VsaWork *vsa = new VsaWork ();
+      vsa->sentInterval = vsaInfo.sendInterval;
+      vsa->channelNumber = vsaInfo.channelNumber;
+      vsa->peer = vsaInfo.peer;
+      vsa->repeatPeriod = MilliSeconds (VSA_REPEAT_PERIOD * 1000 / vsaInfo.repeatRate);
+      vsa->vsc = vsaInfo.vsc;
+      vsa->oi = oi;
+      vsa->repeat =  Simulator::Schedule (vsa->repeatPeriod, &VsaManager::DoRepeat, this, vsa);
+      m_vsas.push_back (vsa);
+    }
+  DoSendVsa (vsaInfo.sendInterval, vsaInfo.channelNumber, vsaInfo.vsc->Copy (), oi, vsaInfo.peer);
+}
+
+void
+VsaManager::DoRepeat (VsaWork *vsa)
+{
+  NS_LOG_FUNCTION (this << vsa);
+  vsa->repeat =  Simulator::Schedule (vsa->repeatPeriod, &VsaManager::DoRepeat, this, vsa);
+  DoSendVsa (vsa->sentInterval, vsa->channelNumber, vsa->vsc->Copy (), vsa->oi, vsa->peer);
+}
+
+void
+VsaManager::DoSendVsa (enum VsaTransmitInterval  interval, uint32_t channel,
+                       Ptr<Packet> vsc, OrganizationIdentifier oi, Mac48Address peer)
+{
+  NS_LOG_FUNCTION (this << interval << channel << vsc << oi << peer);
+  NS_ASSERT (m_device != 0);
+  Ptr<ChannelCoordinator> coordinator = m_device->GetChannelCoordinator ();
+  Ptr<ChannelScheduler> scheduler = m_device->GetChannelScheduler ();
+  Ptr<ChannelManager> manager = m_device->GetChannelManager ();
+
+  // if the request is for transmitting in SCH Interval (or CCH Interval), but currently
+  // is not in SCH Interval (or CCH Interval) and , then the WAVE device  will wait
+  // some time to insert this VSA frame into MAC internal queue.
+  // if the request is for transmitting in any channel interval, then the WAVE device
+  // insert this VSA frame into MAC internal queue immediately.
+  if (interval == VSA_TRANSMIT_IN_SCHI)
+    {
+      Time wait = coordinator->NeedTimeToSchInterval ();
+      if (wait != Seconds (0))
+        {
+          Simulator::Schedule (wait, &VsaManager::DoSendVsa, this,
+                               interval, channel, vsc, oi, peer);
+          return;
+        }
+    }
+  else if (interval == VSA_TRANSMIT_IN_CCHI)
+    {
+      Time wait = coordinator->NeedTimeToCchInterval ();
+      if (wait != Seconds (0))
+        {
+          Simulator::Schedule (wait, &VsaManager::DoSendVsa, this,
+                               interval, channel, vsc, oi, peer);
+          return;
+        }
+    }
+  else
+    {
+      NS_ASSERT (interval == VSA_TRANSMIT_IN_BOTHI);
+      // do nothing here, since VSA_IN_BOTHI allows to sent VSA frames in any interval.
+    }
+
+  if (!scheduler->IsChannelAccessAssigned (channel))
+    {
+      NS_LOG_DEBUG ("there is no channel access assigned for channel " << channel);
+      return;
+    }
+
+  // refer to 1609.4-2010 chapter 5.4.1
+  // Management frames are assigned the highest AC (AC_VO).
+  QosTag qosTag (7);
+  vsc->AddPacketTag (qosTag);
+
+  WifiTxVector txVector;
+  txVector.SetTxPowerLevel (manager->GetManagementPowerLevel (channel));
+  txVector.SetMode (manager->GetManagementDataRate (channel));
+  HigherLayerTxVectorTag tag = HigherLayerTxVectorTag (txVector, manager->GetManagementAdaptable (channel));
+  vsc->AddPacketTag (tag);
+
+  Ptr<OcbWifiMac> mac = m_device->GetMac (channel);
+  mac->SendVsc (vsc, peer, oi);
+}
+
+void
+VsaManager::RemoveAll (void)
+{
+  NS_LOG_FUNCTION (this);
+  for (std::vector<VsaWork *>::iterator i = m_vsas.begin ();
+       i != m_vsas.end (); ++i)
+    {
+      if (!(*i)->repeat.IsExpired ())
+        {
+          (*i)->repeat.Cancel ();
+        }
+      (*i)->vsc = 0;
+      delete (*i);
+    }
+  m_vsas.clear ();
+}
+
+void
+VsaManager::RemoveByChannel (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  for (std::vector<VsaWork *>::iterator i = m_vsas.begin ();
+       i != m_vsas.end (); )
+    {
+      if ((*i)->channelNumber == channelNumber)
+        {
+          if (!(*i)->repeat.IsExpired ())
+            {
+              (*i)->repeat.Cancel ();
+            }
+          (*i)->vsc = 0;
+          delete (*i);
+          i = m_vsas.erase (i);
+        }
+      else
+        {
+          ++i;
+        }
+    }
+}
+
+
+void
+VsaManager::RemoveByOrganizationIdentifier (const OrganizationIdentifier &oi)
+{
+  NS_LOG_FUNCTION (this << oi);
+  for (std::vector<VsaWork *>::iterator i = m_vsas.begin ();
+       i != m_vsas.end (); )
+    {
+      if ((*i)->oi == oi)
+        {
+          if (!(*i)->repeat.IsExpired ())
+            {
+              (*i)->repeat.Cancel ();
+            }
+          (*i)->vsc = 0;
+          delete (*i);
+          i = m_vsas.erase (i);
+        }
+      else
+        {
+          ++i;
+        }
+    }
+}
+
+void
+VsaManager::SetWaveVsaCallback (Callback<bool, Ptr<const Packet>,const Address &, uint32_t, uint32_t> vsaCallback)
+{
+  NS_LOG_FUNCTION (this);
+  m_vsaReceived = vsaCallback;
+}
+
+bool
+VsaManager::ReceiveVsc (Ptr<WifiMac> mac, const OrganizationIdentifier &oi, Ptr<const Packet> vsc, const Address &src)
+{
+  NS_LOG_FUNCTION (this << mac << oi << vsc << src);
+  NS_ASSERT (oi == oi_1609);
+  if (m_vsaReceived.IsNull ())
+    {
+      return true;
+    }
+  uint32_t channelNumber = mac->GetWifiPhy ()->GetChannelNumber ();
+  uint32_t managementId = oi.GetManagementId ();
+  return m_vsaReceived (vsc, src, managementId, channelNumber);
+}
+} // namespace ns3
diff -Naur ns-3.21/src/wave/model/vsa-manager.h ns-3.22/src/wave/model/vsa-manager.h
--- ns-3.21/src/wave/model/vsa-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/vsa-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,181 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 Dalian University of Technology
+ * 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: Junling Bu <linlinjavaer@gmail.com>
+ */
+#ifndef VSA_MANAGER_H
+#define VSA_MANAGER_H
+#include <vector>
+#include "wave-net-device.h"
+
+namespace ns3 {
+
+/**
+ * \brief indicate which interval the VSA frames will be transmitted in.
+ * VSA_TRANSMIT_IN_CCHI will only allow in CCH Interval;
+ * VSA_TRANSMIT_IN_SCHI will only allow in SCH Interval;
+ * VSA_TRANSMIT_IN_BOTHI will allow anytime.
+ */
+enum VsaTransmitInterval
+{
+  VSA_TRANSMIT_IN_CCHI = 1,
+  VSA_TRANSMIT_IN_SCHI = 2,
+  VSA_TRANSMIT_IN_BOTHI = 3,
+};
+
+/**
+ * \param peer The address of the peer MAC entity to which the
+ * VSA is sent.
+ * \param oi Identifies the source of the data when the source
+ * is not an IEEE 1609 entity. See IEEE Std 802.11p.
+ * \param managementId Identifies the source of the data when the source
+ * is an IEEE 1609 entity. Values are specified in IEEE P1609.0.
+ * Valid range: 0-15
+ * \param vsc pointer to Information that will be sent as vendor specific content.
+ * \param vscLength the length of vendor specific content
+ * \param channelNumber The channel on which the transmissions are to occur.
+ * While section 7.2 of the standard specifies that channel identification
+ * comprises Country String, Operating Class, and Channel Number, the channel
+ * number is enough for simulation.
+ * \param repeatRate The number of Vendor Specific Action frames to
+ * be transmitted per 5 s. A value of 0 indicates a single message is to be sent.
+ * If Destination MAC Address is an individual address, Repeat Rate is ignored.
+ * \param channelInterval The channel interval in which the transmissions
+ * are to occur.
+ */
+struct VsaInfo
+{
+  Mac48Address peer;
+  OrganizationIdentifier oi;
+  uint8_t managementId;
+  Ptr<Packet> vsc;
+  uint32_t channelNumber;
+  uint8_t repeatRate;
+  enum VsaTransmitInterval sendInterval;
+
+  VsaInfo (Mac48Address peer, OrganizationIdentifier identifier, uint8_t manageId, Ptr<Packet> vscPacket,
+           uint32_t channel, uint8_t repeat, enum VsaTransmitInterval interval)
+    : peer (peer),
+      oi (identifier),
+      managementId (manageId),
+      vsc (vscPacket),
+      channelNumber (channel),
+      repeatRate (repeat),
+      sendInterval (interval)
+  {
+
+  }
+};
+
+/**
+ * refer to 1609.4-2010 chapter 6.4
+ * Vendor Specific Action (VSA) frames transmission.
+ *
+ * The channel interval and channel number indicating how to transmit VSA frames.
+ * However making the VSA transmitted strictly in required channel interval and channel number
+ * is hard to achieve. For example, if current channel is assigned “Alternating Access” and higher layer wants
+ * VSA transmitted only in CCHI (VSA_TRANSMIT_IN_CCHI), but when packet is dequeued from
+ * the internal queue of MAC layer in SCHI and can contend for channel access, how to deal with
+ * this case? Reinserting into the head of the queue and dequeuing the second packet is not a good
+ * choice, because it will require queue traversal. Reinserting the packet into the tail of the queue is
+ * worse, because it will make queue not in order. And both solutions may affect many MAC classes
+ * of Wifi module. Current approach is to guarantee packets can be inserted into the  MAC
+ * internal queue strictly in channel interval and channel number required by higher layers. This solution
+ * will result in high probability that packets will be sent in channel interval as higher layer wants,
+ * while some packet may be sent practically in other channel interval that not follows the requirement
+ * of higher layer request due to queue delay of MAC layer.
+ * Therefore, we suggest users assign alternating access for sending VSAs in CCH Interval (VSA_TRANSMIT_IN_CCHI)
+ * or SCH Interval (VSA_TRANSMIT_IN_SCHI), and assign continuous access or extended access for
+ * sending VSAs in both interval (VSA_TRANSMIT_IN_BOTHI) to avoid the above cases.
+ */
+class VsaManager : public Object
+{
+public:
+  static TypeId GetTypeId (void);
+  VsaManager (void);
+  virtual ~VsaManager (void);
+
+  /**
+   * \param device WaveNetDevice associated with VsaManager
+   */
+  void SetWaveNetDevice (Ptr<WaveNetDevice> device);
+
+  void SetWaveVsaCallback (Callback<bool, Ptr<const Packet>,const Address &, uint32_t, uint32_t>  vsaCallback);
+
+  /**
+   * \param vsaInfo the tx information for VSA transmissions
+   */
+  void SendVsa (const VsaInfo &vsaInfo);
+  /**
+   * cancel all VSA transmissions
+   */
+  void RemoveAll (void);
+  /**
+   * \param channelNumber cancel VSA transmission specified by channel number
+   */
+  void RemoveByChannel (uint32_t channelNumber);
+  /**
+   * \param channelNumber cancel VSA transmission specified by organization identifier
+   */
+  void RemoveByOrganizationIdentifier (const OrganizationIdentifier &oi);
+private:
+  void DoDispose (void);
+  void DoInitialize (void);
+
+  /**
+   * \param mac the MAC entity which receives VSA frame
+   * \param oi the Organization Identifier of received VSA frame
+   * \param vsc the vendor specific content of received VSA frame
+   * \param src the source address of received VSA frame
+   */
+  bool ReceiveVsc (Ptr<WifiMac> mac, const OrganizationIdentifier &oi, Ptr<const Packet> vsc, const Address &src);
+
+  // A number of VSA frames will be transmitted repeatedly during the period of 5s.
+  const static uint32_t VSA_REPEAT_PERIOD = 5;
+
+  struct VsaWork
+  {
+    Mac48Address peer;
+    OrganizationIdentifier oi;
+    Ptr<Packet> vsc;
+    uint32_t channelNumber;
+    enum VsaTransmitInterval sentInterval;
+    Time repeatPeriod;
+    EventId repeat;
+  };
+
+  /**
+   * \param vsa the specific VSA repeat work
+   *
+   * Repeat to send VSA frames
+   */
+  void DoRepeat (VsaWork *vsa);
+  /**
+   * \param interval the specific channel interval for VSA transmission
+   * \param channel the specific channel number for VSA transmission
+   * \param vsc the data field of VSA frame that contains vendor specific content
+   * \param oi the Organization Identifier for VSA frame
+   * \param peer the destination address
+   */
+  void DoSendVsa (enum VsaTransmitInterval  interval, uint32_t channel, Ptr<Packet> vsc, OrganizationIdentifier oi, Mac48Address peer);
+
+  Callback<bool, Ptr<const Packet>,const Address &, uint32_t, uint32_t> m_vsaReceived;
+  std::vector<VsaWork *> m_vsas;
+  Ptr<WaveNetDevice> m_device;
+};
+
+}
+#endif /* VSA_MANAGER_H */
diff -Naur ns-3.21/src/wave/model/wave-mac-low.cc ns-3.22/src/wave/model/wave-mac-low.cc
--- ns-3.21/src/wave/model/wave-mac-low.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/model/wave-mac-low.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "wave-mac-low.h"
 #include "higher-tx-tag.h"
 
-NS_LOG_COMPONENT_DEFINE ("WaveMacLow");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WaveMacLow");
+
 NS_OBJECT_ENSURE_REGISTERED (WaveMacLow);
 
 TypeId
@@ -38,37 +38,51 @@
   ;
   return tid;
 }
-WaveMacLow::WaveMacLow (void)
+WaveMacLow::WaveMacLow ()
 {
   NS_LOG_FUNCTION (this);
 }
-WaveMacLow::~WaveMacLow (void)
+WaveMacLow::~WaveMacLow ()
 {
   NS_LOG_FUNCTION (this);
 }
 
+void
+WaveMacLow::SetWaveNetDevice (Ptr<WaveNetDevice> device)
+{
+  m_scheduler  =  device->GetChannelScheduler ();
+  m_coordinator =  device->GetChannelCoordinator ();
+  NS_ASSERT (m_scheduler != 0 && m_coordinator != 0);
+}
+
 WifiTxVector
 WaveMacLow::GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
 {
-  NS_LOG_FUNCTION (this << packet << *hdr);
-  HigherDataTxVectorTag datatag;
+  NS_LOG_FUNCTION (this << packet << hdr);
+  HigherLayerTxVectorTag datatag;
   bool found;
   found = ConstCast<Packet> (packet)->PeekPacketTag (datatag);
+  // if high layer has not controlled transmit parameters, the real transmit parameters
+  // will be determined by MAC layer itself.
   if (!found)
     {
       return MacLow::GetDataTxVector (packet, hdr);
     }
 
-  if (!datatag.IsAdapter ())
+  // if high layer has set the transmit parameters with non-adaption mode,
+  // the real transmit parameters are determined by high layer.
+  if (!datatag.IsAdaptable ())
     {
-      return datatag.GetDataTxVector ();
+      return datatag.GetTxVector ();
     }
 
-  WifiTxVector txHigher = datatag.GetDataTxVector ();
+  // if high layer has set the transmit parameters with non-adaption mode,
+  // the real transmit parameters are determined by both high layer and MAC layer.
+  WifiTxVector txHigher = datatag.GetTxVector ();
   WifiTxVector txMac = MacLow::GetDataTxVector (packet, hdr);
   WifiTxVector txAdapter;
-  // if adapter is true, DataRate set by higher layer is the minimum data rate
-  // that sets the lower bound for the actual data rate.
+  // the DataRate set by higher layer is the minimum data rate
+  // which is the lower bound for the actual data rate.
   if (txHigher.GetMode ().GetDataRate () > txMac.GetMode ().GetDataRate ())
     {
       txAdapter.SetMode (txHigher.GetMode ());
@@ -77,10 +91,44 @@
     {
       txAdapter.SetMode (txMac.GetMode ());
     }
-
-  // if adapter is true, TxPwr_Level set by higher layer is the maximum
-  // transmit power that sets the upper bound for the actual transmit power;
+  // the TxPwr_Level set by higher layer is the maximum transmit
+  // power which is the upper bound for the actual transmit power;
   txAdapter.SetTxPowerLevel (std::min (txHigher.GetTxPowerLevel (), txMac.GetTxPowerLevel ()));
+
   return txAdapter;
 }
+
+void
+WaveMacLow::StartTransmission (Ptr<const Packet> packet,
+                               const WifiMacHeader* hdr,
+                               MacLowTransmissionParameters params,
+                               MacLowTransmissionListener *listener)
+{
+  NS_LOG_FUNCTION (this << packet << hdr << params << listener);
+  Ptr<WifiPhy> phy = MacLow::GetPhy ();
+  uint32_t curChannel = phy->GetChannelNumber ();
+  // if current channel access is not AlternatingAccess, just do as MacLow.
+  if (!m_scheduler->IsAlternatingAccessAssigned (curChannel))
+    {
+      MacLow::StartTransmission (packet, hdr, params, listener);
+      return;
+    }
+
+  Time transmissionTime = MacLow::CalculateTransmissionTime (packet, hdr, params);
+  Time remainingTime = m_coordinator->NeedTimeToGuardInterval ();
+
+  if (transmissionTime > remainingTime)
+    {
+      // The attempt for this transmission will be canceled;
+      // and this packet will be pending for next transmission by EdcaTxopN class
+      NS_LOG_DEBUG ("Because the required transmission time = " << transmissionTime.GetMilliSeconds ()
+                                                                << "ms exceeds the remainingTime = " << remainingTime.GetMilliSeconds ()
+                                                                << "ms, currently this packet will not be transmitted.");
+    }
+  else
+    {
+      MacLow::StartTransmission (packet, hdr, params, listener);
+    }
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/wave/model/wave-mac-low.h ns-3.22/src/wave/model/wave-mac-low.h
--- ns-3.21/src/wave/model/wave-mac-low.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/model/wave-mac-low.h	2015-02-05 15:46:22.000000000 -0800
@@ -1,7 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2008 INRIA
- * Copyright (c) 2013 Dalian University of Technology
  *
  * 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
@@ -23,27 +22,65 @@
 #define WAVE_MAC_LOW_H
 
 #include "ns3/mac-low.h"
+#include "wave-net-device.h"
 
 namespace ns3 {
+class WaveNetDevice;
+
 /**
  * \ingroup wave
- * This class allows higher layer control data rate and tx power level.
- * If higher layer do not select, it will select by WifiRemoteStationManager
- * of MAC layer;
- * If higher layer selects tx arguments without adapter set, the data rate
- * and tx power level will be used to send the packet.
- * If higher layer selects tx arguments with adapter set, the data rate
- * will be lower bound for the actual data rate, and the power level
- * will be upper bound for the actual transmit power.
+ * This class is the subclass of MacLow to provide support for MAC extension
+ * (1) allows higher layer control data rate and tx power level.
+ *     If higher layer does not set, they will be determined by WifiRemoteStationManager
+ *          of MAC layer;
+ *     If higher layer sets tx parameters in non-adaptable mode, the data rate
+ *        and tx power level will be used for transmission;.
+ *    If higher layer sets tx parameters in adaptable mode, the data rate
+ *        will be lower bound for the actual data rate, and the power level
+ *        will be upper bound for the actual transmit power.
+ * (2) implements the feature described in Annex C : avoid transmission at scheduled guard intervals
+ *      However, the feature is extended further here that the required transmit time is determined
+ *      by MAC layer itself rather than PHY layer, which contains RTS/CTS, DATA and ACK time.
  */
 class WaveMacLow : public MacLow
 {
 public:
   static TypeId GetTypeId (void);
-  WaveMacLow (void);
-  virtual ~WaveMacLow (void);
+  WaveMacLow ();
+  virtual ~WaveMacLow ();
+
+  /**
+   * \param device WaveNetDevice associated with WaveMacLow
+   */
+  void SetWaveNetDevice (Ptr<WaveNetDevice> device);
+
+  /**
+   * \param packet packet to send
+   * \param hdr 802.11 header for packet to send
+   * \param parameters the transmission parameters to use for this packet.
+   * \param listener listen to transmission events.
+   *
+   * Start the transmission of the input packet and notify the listener
+   * of transmission events.
+   */
+  virtual void StartTransmission (Ptr<const Packet> packet,
+                                  const WifiMacHeader* hdr,
+                                  MacLowTransmissionParameters parameters,
+                                  MacLowTransmissionListener *listener);
 private:
+  /**
+   * Return a TXVECTOR for the DATA frame given the destination.
+   * The function consults WifiRemoteStationManager, which controls the rate
+   * to different destinations.
+   *
+   * \param packet the packet being asked for TXVECTOR
+   * \param hdr the WifiMacHeader
+   * \return TXVECTOR for the given packet
+   */
   virtual WifiTxVector GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
+
+  Ptr<ChannelScheduler> m_scheduler;
+  Ptr<ChannelCoordinator> m_coordinator;
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/wave/model/wave-net-device.cc ns-3.22/src/wave/model/wave-net-device.cc
--- ns-3.21/src/wave/model/wave-net-device.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/wave-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,740 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2005,2006 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
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ *         Junling Bu <linlinjavaer@gmail.com>
+ */
+#include <algorithm>
+#include "ns3/wifi-channel.h"
+#include "ns3/llc-snap-header.h"
+#include "ns3/uinteger.h"
+#include "ns3/node.h"
+#include "ns3/trace-source-accessor.h"
+#include "ns3/log.h"
+#include "ns3/qos-tag.h"
+#include "ns3/object-map.h"
+#include "ns3/object-vector.h"
+#include "wave-net-device.h"
+#include "higher-tx-tag.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("WaveNetDevice");
+
+NS_OBJECT_ENSURE_REGISTERED (WaveNetDevice);
+
+TypeId
+WaveNetDevice::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::WaveNetDevice")
+    .SetParent<NetDevice> ()
+    .AddConstructor<WaveNetDevice> ()
+    .AddAttribute ("Mtu", "The MAC-level Maximum Transmission Unit",
+                   UintegerValue (MAX_MSDU_SIZE - LLC_SNAP_HEADER_LENGTH),
+                   MakeUintegerAccessor (&WaveNetDevice::SetMtu,
+                                         &WaveNetDevice::GetMtu),
+                   MakeUintegerChecker<uint16_t> (1,MAX_MSDU_SIZE - LLC_SNAP_HEADER_LENGTH))
+    .AddAttribute ("Channel", "The channel attached to this device",
+                   PointerValue (),
+                   MakePointerAccessor (&WaveNetDevice::GetChannel),
+                   MakePointerChecker<WifiChannel> ())
+    .AddAttribute ("PhyEntities", "The PHY entities attached to this device.",
+                   ObjectVectorValue (),
+                   MakeObjectVectorAccessor (&WaveNetDevice::m_phyEntities),
+                   MakeObjectVectorChecker<WifiPhy> ())
+    .AddAttribute ("MacEntities", "The MAC layer attached to this device.",
+                   ObjectMapValue (),
+                   MakeObjectMapAccessor (&WaveNetDevice::m_macEntities),
+                   MakeObjectMapChecker<OcbWifiMac> ())
+    .AddAttribute ("ChannelScheduler", "The channel scheduler attached to this device.",
+                   PointerValue (),
+                   MakePointerAccessor (&WaveNetDevice::SetChannelScheduler,
+                                        &WaveNetDevice::GetChannelScheduler),
+                   MakePointerChecker<ChannelScheduler> ())
+    .AddAttribute ("ChannelManager", "The channel manager attached to this device.",
+                   PointerValue (),
+                   MakePointerAccessor (&WaveNetDevice::SetChannelManager,
+                                        &WaveNetDevice::GetChannelManager),
+                   MakePointerChecker<ChannelManager> ())
+    .AddAttribute ("ChannelCoordinator", "The channel coordinator attached to this device.",
+                   PointerValue (),
+                   MakePointerAccessor (&WaveNetDevice::SetChannelCoordinator,
+                                        &WaveNetDevice::GetChannelCoordinator),
+                   MakePointerChecker<ChannelCoordinator> ())
+    .AddAttribute ("VsaManager", "The VSA manager attached to this device.",
+                   PointerValue (),
+                   MakePointerAccessor (&WaveNetDevice::SetVsaManager,
+                                        &WaveNetDevice::GetVsaManager),
+                   MakePointerChecker<VsaManager> ())
+  ;
+  return tid;
+}
+
+WaveNetDevice::WaveNetDevice (void)
+  : m_txProfile (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+WaveNetDevice::~WaveNetDevice (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+WaveNetDevice::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_txProfile != 0)
+    {
+      delete m_txProfile;
+      m_txProfile = 0;
+    }
+  for (PhyEntitiesI i = m_phyEntities.begin (); i != m_phyEntities.end (); ++i)
+    {
+      Ptr<WifiPhy> phy = (*i);
+      phy->Dispose ();
+    }
+  m_phyEntities.clear ();
+  for (MacEntitiesI i = m_macEntities.begin (); i != m_macEntities.end (); ++i)
+    {
+      Ptr<OcbWifiMac> mac = i->second;
+      Ptr<WifiRemoteStationManager> stationManager = mac->GetWifiRemoteStationManager ();
+      stationManager->Dispose ();
+      mac->Dispose ();
+    }
+  m_macEntities.clear ();
+  m_channelCoordinator->Dispose ();
+  m_channelManager->Dispose ();
+  m_channelScheduler->Dispose ();
+  m_vsaManager->Dispose ();
+  m_channelCoordinator = 0;
+  m_channelManager = 0;
+  m_channelScheduler = 0;
+  m_vsaManager = 0;
+  // chain up.
+  NetDevice::DoDispose ();
+}
+
+void
+WaveNetDevice::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_phyEntities.size () == 0)
+    {
+      NS_FATAL_ERROR ("there is no PHY entity in this WAVE device");
+    }
+  for (PhyEntitiesI i = m_phyEntities.begin (); i != m_phyEntities.end (); ++i)
+    {
+      Ptr<WifiPhy> phy = (*i);
+      phy->Initialize ();
+    }
+  if (m_macEntities.size () == 0)
+    {
+      NS_FATAL_ERROR ("there is no MAC entity in this WAVE device");
+    }
+  for (MacEntitiesI i = m_macEntities.begin (); i != m_macEntities.end (); ++i)
+    {
+      Ptr<OcbWifiMac> mac = i->second;
+      mac->SetForwardUpCallback (MakeCallback (&WaveNetDevice::ForwardUp, this));
+      // Make each MAC entity in sleep mode.
+      mac->Suspend ();
+      mac->Initialize ();
+
+      Ptr<WifiRemoteStationManager> stationManager = mac->GetWifiRemoteStationManager ();
+      // Currently PHY is not attached to MAC and will be dynamically attached and unattached to MAC latter,
+      // however WifiRemoteStationManager in the MAC shall know something  in the PHY such as supported data rates.
+      // Since these information can be treated as same when same PHY devices are added, here we force
+      // all of WifiRemoteStationManagers in multiple MAC entities only associate with single PHY device even there may
+      // be multiple PHY entities. This approach may be strange but can work fine.
+      stationManager->SetupPhy (m_phyEntities[0]);
+      stationManager->Initialize ();
+    }
+  m_channelScheduler->SetWaveNetDevice (this);
+  m_vsaManager->SetWaveNetDevice (this);
+  m_channelScheduler->Initialize ();
+  m_channelCoordinator->Initialize ();
+  m_channelManager->Initialize ();
+  m_vsaManager->Initialize ();
+  NetDevice::DoInitialize ();
+}
+
+void
+WaveNetDevice::AddMac (uint32_t channelNumber, Ptr<OcbWifiMac> mac)
+{
+  NS_LOG_FUNCTION (this << channelNumber << mac);
+  if (!ChannelManager::IsWaveChannel (channelNumber))
+    {
+      NS_FATAL_ERROR ("The channel " << channelNumber << " is not a valid WAVE channel number");
+    }
+  if (m_macEntities.find (channelNumber) != m_macEntities.end ())
+    {
+      NS_FATAL_ERROR ("The MAC entity for channel " << channelNumber << " already exists.");
+    }
+  m_macEntities.insert (std::make_pair (channelNumber, mac));
+}
+Ptr<OcbWifiMac>
+WaveNetDevice::GetMac (uint32_t channelNumber) const
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  MacEntitiesI i = m_macEntities.find (channelNumber);
+  if (i == m_macEntities.end ())
+    {
+      NS_FATAL_ERROR ("there is no available MAC entity for channel " << channelNumber);
+    }
+  return i->second;
+}
+
+std::map<uint32_t, Ptr<OcbWifiMac> >
+WaveNetDevice::GetMacs (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_macEntities;
+}
+
+void
+WaveNetDevice::AddPhy (Ptr<WifiPhy> phy)
+{
+  NS_LOG_FUNCTION (this << phy);
+  if (std::find (m_phyEntities.begin (), m_phyEntities.end (), phy) != m_phyEntities.end ())
+    {
+      NS_FATAL_ERROR ("This PHY entity is already inserted");
+    }
+  m_phyEntities.push_back (phy);
+}
+Ptr<WifiPhy>
+WaveNetDevice::GetPhy (uint32_t index) const
+{
+  NS_LOG_FUNCTION (this << index);
+  return m_phyEntities.at (index);
+}
+
+std::vector<Ptr<WifiPhy> >
+WaveNetDevice::GetPhys (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_phyEntities;
+}
+
+bool
+WaveNetDevice::StartVsa (const VsaInfo & vsaInfo)
+{
+  NS_LOG_FUNCTION (this << &vsaInfo);
+  if (!IsAvailableChannel ( vsaInfo.channelNumber))
+    {
+      return false;
+    }
+  if (!m_channelScheduler->IsChannelAccessAssigned (vsaInfo.channelNumber))
+    {
+      NS_LOG_DEBUG ("there is no channel access assigned for channel " << vsaInfo.channelNumber);
+      return false;
+    }
+  if (vsaInfo.vsc == 0)
+    {
+      NS_LOG_DEBUG ("vendor specific information shall not be null");
+      return false;
+    }
+  if (vsaInfo.oi.IsNull () && vsaInfo.managementId >= 16)
+    {
+      NS_LOG_DEBUG ("when organization identifier is not set, management ID "
+                    "shall be in range from 0 to 15");
+      return false;
+    }
+
+  m_vsaManager->SendVsa (vsaInfo);
+  return true;
+}
+
+
+bool
+WaveNetDevice::StopVsa (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  if (!IsAvailableChannel (channelNumber))
+    {
+      return false;
+    }
+  m_vsaManager->RemoveByChannel (channelNumber);
+  return true;
+}
+
+void
+WaveNetDevice::SetWaveVsaCallback (WaveVsaCallback vsaCallback)
+{
+  NS_LOG_FUNCTION (this);
+  m_vsaManager->SetWaveVsaCallback (vsaCallback);
+}
+
+bool
+WaveNetDevice::StartSch (const SchInfo & schInfo)
+{
+  NS_LOG_FUNCTION (this << &schInfo);
+  if (!IsAvailableChannel (schInfo.channelNumber))
+    {
+      return false;
+    }
+  return m_channelScheduler->StartSch (schInfo);
+}
+
+bool
+WaveNetDevice::StopSch (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  if (!IsAvailableChannel (channelNumber))
+    {
+      return false;
+    }
+  return m_channelScheduler->StopSch (channelNumber);
+}
+
+bool
+WaveNetDevice::RegisterTxProfile (const TxProfile & txprofile)
+{
+  NS_LOG_FUNCTION (this << &txprofile);
+  if (m_txProfile != 0)
+    {
+      return false;
+    }
+  if (!IsAvailableChannel (txprofile.channelNumber))
+    {
+      return false;
+    }
+  if (txprofile.txPowerLevel > 8)
+    {
+      return false;
+    }
+  // IP-based packets is not allowed to send in the CCH.
+  if (txprofile.channelNumber == CCH)
+    {
+      NS_LOG_DEBUG ("IP-based packets shall not be transmitted on the CCH");
+      return false;
+    }
+  if  (txprofile.dataRate == WifiMode () || txprofile.txPowerLevel == 8)
+    {
+      // let MAC layer itself determine tx parameters.
+      NS_LOG_DEBUG ("High layer does not want to control tx parameters.");
+    }
+  else
+    {
+      // if current PHY devices do not support data rate of the tx profile
+      for (PhyEntitiesI i = m_phyEntities.begin (); i != m_phyEntities.end (); ++i)
+        {
+          if (!((*i)->IsModeSupported (txprofile.dataRate)))
+            {
+              NS_LOG_DEBUG ("This data rate " << txprofile.dataRate.GetUniqueName () << " is not supported by current PHY device");
+              return false;
+            }
+        }
+    }
+
+  m_txProfile = new TxProfile ();
+  *m_txProfile = txprofile;
+  return true;
+}
+
+bool
+WaveNetDevice::DeleteTxProfile (uint32_t channelNumber)
+{
+  NS_LOG_FUNCTION (this << channelNumber);
+  if (!IsAvailableChannel (channelNumber))
+    {
+      return false;
+    }
+  if (m_txProfile == 0)
+    {
+      return false;
+    }
+  if (m_txProfile->channelNumber != channelNumber)
+    {
+      return false;
+    }
+
+  delete m_txProfile;
+  m_txProfile = 0;
+  return true;
+}
+
+bool
+WaveNetDevice::SendX (Ptr<Packet> packet, const Address & dest, uint32_t protocol, const TxInfo & txInfo)
+{
+  NS_LOG_FUNCTION (this << packet << dest << protocol << &txInfo);
+  if (!IsAvailableChannel (txInfo.channelNumber))
+    {
+      return false;
+    }
+  if (!m_channelScheduler->IsChannelAccessAssigned (txInfo.channelNumber))
+    {
+      NS_LOG_DEBUG ("there is no channel access assigned for channel " << txInfo.channelNumber);
+      return false;
+    }
+  if ((txInfo.channelNumber == CCH) && (protocol == IPv4_PROT_NUMBER || protocol == IPv6_PROT_NUMBER))
+    {
+      NS_LOG_DEBUG ("IP-based packets shall not be transmitted on the CCH");
+      return false;
+    }
+  if ((txInfo.priority > 7) || txInfo.txPowerLevel > 8)
+    {
+      NS_LOG_DEBUG ("invalid transmit parameters.");
+      return false;
+    }
+
+  if ((txInfo.dataRate == WifiMode ()) ||  (txInfo.txPowerLevel == 8))
+    {
+      // let MAC layer itself determine tx parameters.
+      NS_LOG_DEBUG ("High layer does not want to control tx parameters.");
+    }
+  else
+    {
+      // if current PHY devices do not support data rate of the  tx profile
+      for (PhyEntitiesI i = m_phyEntities.begin (); i != m_phyEntities.end (); ++i)
+        {
+          if ( !((*i)->IsModeSupported (txInfo.dataRate)))
+            {
+              return false;
+            }
+        }
+      WifiTxVector txVector;
+      txVector.SetTxPowerLevel (txInfo.txPowerLevel);
+      txVector.SetMode (txInfo.dataRate);
+      HigherLayerTxVectorTag tag = HigherLayerTxVectorTag (txVector, false);
+      packet->AddPacketTag (tag);
+    }
+
+  LlcSnapHeader llc;
+  llc.SetType (protocol);
+  packet->AddHeader (llc);
+
+  // according to channel number and priority,
+  // route the packet to a proper queue.
+  QosTag qos = QosTag (txInfo.priority);
+  packet->AddPacketTag (qos);
+  Ptr<WifiMac> mac = GetMac (txInfo.channelNumber);
+  Mac48Address realTo = Mac48Address::ConvertFrom (dest);
+  mac->NotifyTx (packet);
+  mac->Enqueue (packet, realTo);
+  return true;
+}
+
+void
+WaveNetDevice::ChangeAddress (Address newAddress)
+{
+  NS_LOG_FUNCTION (this << newAddress);
+  Address oldAddress = GetAddress ();
+  if (newAddress == oldAddress)
+    {
+      return;
+    }
+  SetAddress (newAddress);
+  // Since MAC address is changed, the MAC layer including multiple MAC entities should be reset
+  // and internal MAC queues will be flushed.
+  for (MacEntitiesI i = m_macEntities.begin (); i != m_macEntities.end (); ++i)
+    {
+      i->second->Reset ();
+    }
+  m_addressChange (oldAddress, newAddress);
+}
+
+void
+WaveNetDevice::CancelTx (uint32_t channelNumber, enum AcIndex ac)
+{
+  if (IsAvailableChannel (channelNumber))
+    {
+      return;
+    }
+  Ptr<OcbWifiMac> mac = GetMac (channelNumber);
+  mac->CancleTx (ac);
+}
+
+void
+WaveNetDevice::SetChannelManager (Ptr<ChannelManager> channelManager)
+{
+  m_channelManager = channelManager;
+}
+Ptr<ChannelManager>
+WaveNetDevice::GetChannelManager (void) const
+{
+  return m_channelManager;
+}
+void
+WaveNetDevice::SetChannelScheduler (Ptr<ChannelScheduler> channelScheduler)
+{
+  m_channelScheduler = channelScheduler;
+}
+Ptr<ChannelScheduler>
+WaveNetDevice::GetChannelScheduler (void) const
+{
+  return m_channelScheduler;
+}
+void
+WaveNetDevice::SetChannelCoordinator (Ptr<ChannelCoordinator> channelCoordinator)
+{
+  m_channelCoordinator = channelCoordinator;
+}
+Ptr<ChannelCoordinator>
+WaveNetDevice::GetChannelCoordinator (void) const
+{
+  return m_channelCoordinator;
+}
+void
+WaveNetDevice::SetVsaManager (Ptr<VsaManager> vsaManager)
+{
+  m_vsaManager = vsaManager;
+}
+Ptr<VsaManager>
+WaveNetDevice::GetVsaManager (void) const
+{
+  return m_vsaManager;
+}
+
+void
+WaveNetDevice::SetIfIndex (const uint32_t index)
+{
+  m_ifIndex = index;
+}
+uint32_t
+WaveNetDevice::GetIfIndex (void) const
+{
+  return m_ifIndex;
+}
+Ptr<Channel>
+WaveNetDevice::GetChannel (void) const
+{
+  NS_ASSERT (!m_phyEntities.empty ());
+  return GetPhy (0)->GetChannel ();
+}
+void
+WaveNetDevice::SetAddress (Address address)
+{
+  for (MacEntitiesI i = m_macEntities.begin (); i != m_macEntities.end (); ++i)
+    {
+      i->second->SetAddress (Mac48Address::ConvertFrom (address));
+    }
+}
+Address
+WaveNetDevice::GetAddress (void) const
+{
+  return (GetMac (CCH))->GetAddress ();
+}
+bool
+WaveNetDevice::SetMtu (const uint16_t mtu)
+{
+  if (mtu > MAX_MSDU_SIZE - LLC_SNAP_HEADER_LENGTH)
+    {
+      return false;
+    }
+  m_mtu = mtu;
+  return true;
+}
+uint16_t
+WaveNetDevice::GetMtu (void) const
+{
+  return m_mtu;
+}
+bool
+WaveNetDevice::IsLinkUp (void) const
+{
+  // Different from WifiNetDevice::IsLinkUp, a WaveNetDevice device
+  // is always link up so the m_linkup variable is true forever.
+  // Even the device is in channel switch state, packets can still be queued.
+  return true;
+}
+void
+WaveNetDevice::AddLinkChangeCallback (Callback<void> callback)
+{
+  NS_LOG_WARN ("WaveNetDevice is linkup forever, so this callback will be never called");
+}
+bool
+WaveNetDevice::IsBroadcast (void) const
+{
+  return true;
+}
+Address
+WaveNetDevice::GetBroadcast (void) const
+{
+  return Mac48Address::GetBroadcast ();
+}
+bool
+WaveNetDevice::IsMulticast (void) const
+{
+  return true;
+}
+Address
+WaveNetDevice::GetMulticast (Ipv4Address multicastGroup) const
+{
+  return Mac48Address::GetMulticast (multicastGroup);
+}
+Address WaveNetDevice::GetMulticast (Ipv6Address addr) const
+{
+  return Mac48Address::GetMulticast (addr);
+}
+bool
+WaveNetDevice::IsPointToPoint (void) const
+{
+  return false;
+}
+bool
+WaveNetDevice::IsBridge (void) const
+{
+  return false;
+}
+
+bool
+WaveNetDevice::Send (Ptr<Packet> packet, const Address& dest, uint16_t protocol)
+{
+  NS_LOG_FUNCTION (this << packet << dest << protocol);
+  if (m_txProfile == 0)
+    {
+      NS_LOG_DEBUG ("there is no tx profile registered for transmission");
+      return false;
+    }
+  if (!m_channelScheduler->IsChannelAccessAssigned (m_txProfile->channelNumber))
+    {
+      NS_LOG_DEBUG ("there is no channel access assigned for channel " << m_txProfile->channelNumber);
+      return false;
+    }
+  if (m_txProfile->dataRate == WifiMode () || m_txProfile->txPowerLevel == 8)
+    {
+      // let MAC layer itself determine tx parameters.
+      NS_LOG_DEBUG ("High layer does not want to control tx parameters.");
+    }
+  else
+    {
+      WifiTxVector txVector;
+      txVector.SetTxPowerLevel (m_txProfile->txPowerLevel);
+      txVector.SetMode (m_txProfile->dataRate);
+      HigherLayerTxVectorTag tag = HigherLayerTxVectorTag (txVector, m_txProfile->adaptable);
+      packet->AddPacketTag (tag);
+    }
+
+  LlcSnapHeader llc;
+  llc.SetType (protocol);
+  packet->AddHeader (llc);
+
+  // qos tag is already inserted into the packet by high layer  or with default value 7 if high layer forget it.
+  Ptr<WifiMac> mac = GetMac (m_txProfile->channelNumber);
+  Mac48Address realTo = Mac48Address::ConvertFrom (dest);
+  mac->NotifyTx (packet);
+  mac->Enqueue (packet, realTo);
+  return true;
+}
+
+Ptr<Node>
+WaveNetDevice::GetNode (void) const
+{
+  return m_node;
+}
+void
+WaveNetDevice::SetNode (Ptr<Node> node)
+{
+  m_node = node;
+}
+bool
+WaveNetDevice::NeedsArp (void) const
+{
+  // Whether NeedsArp or not?
+  // For IP-based packets , yes; For WSMP packets, no;
+  // so return true always.
+  return true;
+}
+void
+WaveNetDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb)
+{
+  m_forwardUp = cb;
+}
+
+bool
+WaveNetDevice::IsAvailableChannel (uint32_t channelNumber) const
+{
+  if (!ChannelManager::IsWaveChannel (channelNumber))
+    {
+      NS_LOG_DEBUG ("this is no a valid WAVE channel for channel " << channelNumber);
+      return false;
+    }
+  if (m_macEntities.find (channelNumber) == m_macEntities.end ())
+    {
+      NS_LOG_DEBUG ("this is no available WAVE entity  for channel " << channelNumber);
+      return false;
+    }
+  return true;
+}
+
+void
+WaveNetDevice::ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to)
+{
+  NS_LOG_FUNCTION (this << packet << from << to);
+  LlcSnapHeader llc;
+  packet->RemoveHeader (llc);
+  enum NetDevice::PacketType type;
+  if (to.IsBroadcast ())
+    {
+      type = NetDevice::PACKET_BROADCAST;
+    }
+  else if (to.IsGroup ())
+    {
+      type = NetDevice::PACKET_MULTICAST;
+    }
+  else if (to == GetAddress ())
+    {
+      type = NetDevice::PACKET_HOST;
+    }
+  else
+    {
+      type = NetDevice::PACKET_OTHERHOST;
+    }
+
+  if (type != NetDevice::PACKET_OTHERHOST)
+    {
+      // currently we cannot know from which MAC entity the packet is received,
+      // so we use the MAC entity for CCH as it receives this packet.
+      Ptr<OcbWifiMac> mac = GetMac (CCH);
+      mac->NotifyRx (packet);
+      m_forwardUp (this, packet, llc.GetType (), from);
+    }
+
+  if (!m_promiscRx.IsNull ())
+    {
+      // currently we cannot know from which MAC entity the packet is received,
+      // so we use the MAC entity for CCH as it receives this packet.
+      Ptr<OcbWifiMac> mac = GetMac (CCH);
+      mac->NotifyPromiscRx (packet);
+      m_promiscRx (this, packet, llc.GetType (), from, to, type);
+    }
+}
+
+bool
+WaveNetDevice::SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocol)
+{
+  NS_LOG_FUNCTION (this << packet << source << dest << protocol);
+  return false;
+}
+
+void
+WaveNetDevice::SetPromiscReceiveCallback (PromiscReceiveCallback cb)
+{
+  m_promiscRx = cb;
+  for (MacEntitiesI i = m_macEntities.begin (); i != m_macEntities.end (); ++i)
+    {
+      i->second->SetPromisc ();
+    }
+}
+
+bool
+WaveNetDevice::SupportsSendFrom (void) const
+{
+  return (GetMac (CCH))->SupportsSendFrom ();
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wave/model/wave-net-device.h ns-3.22/src/wave/model/wave-net-device.h
--- ns-3.21/src/wave/model/wave-net-device.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/model/wave-net-device.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,367 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2005,2006 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
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ *         Junling Bu <linlinjavaer@gmail.com>
+ */
+#ifndef WAVE_NET_DEVICE_H
+#define WAVE_NET_DEVICE_H
+
+#include <map>
+#include <vector>
+#include "ns3/packet.h"
+#include "ns3/traced-callback.h"
+#include "ns3/mac48-address.h"
+#include "ns3/net-device.h"
+#include "ocb-wifi-mac.h"
+#include "vendor-specific-action.h"
+#include "channel-coordinator.h"
+#include "channel-manager.h"
+#include "channel-scheduler.h"
+#include "vsa-manager.h"
+namespace ns3 {
+struct SchInfo;
+struct VsaInfo;
+class NetDevice;
+class ChannelScheduler;
+class VsaManager;
+class OcbWifiMac;
+
+/**
+ * \param channelNumber the specific channel
+ * \param priority the priority of packet with range 0-7
+ * \param dataRate the transmit data rate of packet
+ * \param txPowerLevel the transmit power level with range 0-7
+ * \param expireTime indicate how many milliseconds the packet
+ * can stay before sent
+ *
+ * typically these parameters are used by higher layer to control
+ * the transmission characteristics of WSMP packets.
+ * When dataRate is an invalid WifiMode and txPowerLevel is 8, this
+ * indicates that high layer does not set tx parameters.
+ */
+struct TxInfo
+{
+  uint32_t channelNumber;
+  uint32_t priority;
+  WifiMode dataRate;
+  uint32_t txPowerLevel;
+  // Time expiryTime;   // unsupported
+  TxInfo ()
+    : channelNumber (CCH),
+      priority (7),
+      txPowerLevel (8)
+  {
+
+  }
+  TxInfo (uint32_t channel, uint32_t prio = 7, WifiMode rate = WifiMode (), uint32_t powerLevel = 8)
+    : channelNumber (channel),
+      priority (prio),
+      dataRate (rate),
+      txPowerLevel (powerLevel)
+  {
+
+  }
+};
+
+/**
+ * \param channelNumber the channel number for the SCH.
+ * \param adaptable if true, the actual power level and data
+ * rate for transmission are adaptable. TxPwr_Level is the maximum
+ * transmit power that sets the upper bound for the actual transmit
+ * power; DataRate is the minimum data rate that sets the lower
+ * bound for the actual data rate. If false, the actual power level
+ * and data rate for transmission are non-adaptable. TxPwr_Level and
+ * DataRate are the actual values to be used for transmission.
+ * \param txPowerLevel transmit power level.
+ * \param dataRate transmit data rate
+ */
+struct TxProfile
+{
+  uint32_t channelNumber;
+  bool adaptable;
+  uint32_t txPowerLevel;
+  WifiMode dataRate;
+  TxProfile (void)
+    : channelNumber (SCH1),
+      adaptable (false),
+      txPowerLevel (4)
+  {
+      dataRate = WifiMode ("OfdmRate6MbpsBW10MHz");
+  }
+  TxProfile (uint32_t channel, bool adapt = true, uint32_t powerLevel = 4)
+    : channelNumber (channel),
+      adaptable (adapt),
+      txPowerLevel (powerLevel)
+  {
+      dataRate = WifiMode ("OfdmRate6MbpsBW10MHz");
+  }
+};
+
+/**
+ * This class holds together multiple, ns3::WifiPhy,
+ * and ns3::OcbWifiMac (including ns3::WifiRemoteStationManager).
+ * Besides that, to support multiple channel operation this
+ * class also holds ns3::ChannelScheduler, ns3::ChannelManager,
+ * ns3::ChannelCoordinator and ns3::VsaManager.
+ *
+ * these primitives specified in the standard will not be implemented
+ * because of limited use in simulation:
+ * void StartTimingAdvertisement ();
+ * void StopTimingAdvertisement ();
+ * UtcTime GetUtcTime ();
+ * void SetUtcTime ();
+ */
+class WaveNetDevice : public NetDevice
+{
+public:
+  static TypeId GetTypeId (void);
+  WaveNetDevice (void);
+  virtual ~WaveNetDevice (void);
+
+  /**
+   * \param channelNumber the specific channel
+   * \param mac add a new available MAC entity for specific channel
+   */
+  void AddMac (uint32_t channelNumber, Ptr<OcbWifiMac> mac);
+  /**
+   * \param channelNumber the specific channel number
+   * \return corresponding MAC entity
+   */
+  Ptr<OcbWifiMac> GetMac (uint32_t channelNumber) const;
+  /**
+   * \return all inserted MAC entities.
+   */
+  std::map<uint32_t, Ptr<OcbWifiMac> >  GetMacs (void) const;
+  /**
+   * \param phy add a new available PHY entity
+   */
+  void AddPhy (Ptr<WifiPhy> phy);
+  /**
+   * \param index the index of PHY entity
+   * \return corresponding PHY entity
+   */
+  Ptr<WifiPhy> GetPhy (uint32_t index) const;
+  /**
+   * \return all inserted PHY entities.
+   */
+  std::vector<Ptr<WifiPhy> > GetPhys (void) const;
+
+  /**
+   * \param channelScheduler the channel scheduler for multiple channel operation
+   */
+  void SetChannelScheduler (Ptr<ChannelScheduler> channelScheduler);
+  /**
+   * \return current channel scheduler for multiple channel operation
+   */
+  Ptr<ChannelScheduler> GetChannelScheduler (void) const;
+  /**
+   * \param channelManager the channel manager for multiple channel operation
+   */
+  void SetChannelManager (Ptr<ChannelManager> channelManager);
+  /**
+   * \return currentc channel manager for multiple channel operation
+   */
+  Ptr<ChannelManager> GetChannelManager (void) const;
+  /**
+   * \param channelCoordinator  the channel coordinator for multiple channel operation
+   */
+  void SetChannelCoordinator (Ptr<ChannelCoordinator> channelCoordinator);
+  /**
+   * \return current channel coordinator for multiple channel operation
+   */
+  Ptr<ChannelCoordinator> GetChannelCoordinator (void) const;
+  /**
+   * \param vsaManager the VSA manager for multiple channel operation
+   */
+  void SetVsaManager (Ptr<VsaManager> vsaManager);
+  /**
+   * \return current VSA manager for multiple channel operation
+   */
+  Ptr<VsaManager> GetVsaManager (void) const;
+
+  /**
+   * \param sch_info the parameters about how to start SCH service
+   * \return whether channel access is assigned successfully
+   */
+  bool StartSch (const SchInfo & schInfo);
+  /**
+   *  \param channelNumber the channel which access resource will be released.
+   *  \return whether channel access is released successfully
+   */
+  bool StopSch (uint32_t channelNumber);
+
+  /**
+   * \param vsa_info the parameters about how to send VSA frame
+   * \return whether the request for VSA transmission is completed
+   */
+  bool StartVsa (const VsaInfo & vsaInfo);
+  /**
+   * \param channelNumber the channel on which VSA transmit event will be canceled.
+   * \return whether the request for stopping VSA transmission is completed
+   */
+  bool StopVsa (uint32_t channelNumber);
+  /**
+   * \param packet the packet is Vendor Specific Action frame.
+   * \param address the address of the MAC from which the management frame
+   *  was received.
+   * \param managementID identify the originator of the data.
+   *  Values are specified in IEEE P1609.0 with range 0-15.
+   * \param channelNumber the channel on which the frame was received.
+   * \returns true if the callback could handle the packet successfully, false
+   *          otherwise.
+   */
+  typedef Callback<bool, Ptr<const Packet>,const Address &, uint32_t, uint32_t> WaveVsaCallback;
+  /**
+   * \param vsaCallback the VSA receive callback for 1609 management information
+   */
+  void SetWaveVsaCallback (WaveVsaCallback vsaCallback);
+
+  /**
+   * \param txprofile transmit profile for IP-based data
+   * register a transmitter profile in the MLME before
+   * the associated IP-based data transfer starts.
+   * \return whether the tx profile is registered successfully
+   *
+   * note: This method should be called before WaveNetDevice::Send method
+   */
+  bool RegisterTxProfile (const TxProfile &txprofile);
+  /**
+   * \param channelNumber the specific channel number
+   * delete a registered transmitter profile in the MLME
+   * after the associated IP-based data transfer is complete
+   * \return whether the tx profile is unregistered successfully
+   */
+  bool DeleteTxProfile (uint32_t channelNumber);
+
+  /**
+   * \param packet packet sent from above down to Network Device
+   * \param dest mac address of the destination (already resolved)
+   * \param protocol identifies the type of payload contained in the packet.
+   *  Used to call the right L3Protocol when the packet is received.
+   * \param txInfo WSMP or other packets parameters for sending
+   * \return whether the SendX operation succeeded
+   *
+   * Normally this method is called by 1609.3 standard to
+   * send WSMP packets, however high layers can also send packets
+   * in other types except IP-based packets in CCH.
+   */
+  bool SendX (Ptr<Packet> packet, const Address& dest, uint32_t protocol, const TxInfo & txInfo);
+  /**
+   * \param newAddress  an immediate MAC-layer address change is required
+   *
+   * This method is similar with SetAddress method, but
+   * SetAddress is suggested for initializing a device, while this method
+   * is preferred for changing address and a addressChange TracedCallback
+   * will be called.
+   */
+  void ChangeAddress (Address newAddress);
+  /**
+   * \param channelNumber the specific channel number
+   * \param ac the specific access category
+   *
+   * Cancel all transmissions with the particular category and channel number.
+   */
+  void CancelTx (uint32_t channelNumber, enum AcIndex ac);
+
+  /**
+   * \param packet packet sent from above down to Network Device
+    * \param dest mac address of the destination (already resolved)
+    * \param protocolNumber identifies the type of payload contained in
+    *        this packet. Used to call the right L3Protocol when the packet
+    *        is received.
+    * \return whether the Send operation succeeded
+    *
+    * Normally this method is called by 1609.3 standard to
+    * send IP-based packets, however high layers can also send packets
+    * in other types except IP-based packets in CCH.
+    */
+  virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
+
+  // inherited from NetDevice base class.
+  virtual void SetIfIndex (const uint32_t index);
+  virtual uint32_t GetIfIndex (void) const;
+  virtual Ptr<Channel> GetChannel (void) const;
+  virtual void SetAddress (Address address);
+  virtual Address GetAddress (void) const;
+  virtual bool SetMtu (const uint16_t mtu);
+  virtual uint16_t GetMtu (void) const;
+  virtual bool IsLinkUp (void) const;
+  virtual void AddLinkChangeCallback (Callback<void> callback);
+  virtual bool IsBroadcast (void) const;
+  virtual Address GetBroadcast (void) const;
+  virtual bool IsMulticast (void) const;
+  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
+  virtual bool IsPointToPoint (void) const;
+  virtual bool IsBridge (void) const;
+  virtual Ptr<Node> GetNode (void) const;
+  virtual void SetNode (Ptr<Node> node);
+  virtual bool NeedsArp (void) const;
+  virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
+  virtual Address GetMulticast (Ipv6Address addr) const;
+  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
+  virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
+  virtual bool SupportsSendFrom (void) const;
+
+private:
+  // This value conforms to the 802.11 specification
+  static const uint16_t MAX_MSDU_SIZE = 2304;
+
+  static const uint16_t IPv4_PROT_NUMBER = 0x0800;
+  static const uint16_t IPv6_PROT_NUMBER = 0x86DD;
+
+  virtual void DoDispose (void);
+  virtual void DoInitialize (void);
+  /**
+   * \param channelNumber the specific channel
+   * \return whether this channel is valid and available for use
+   */
+  bool IsAvailableChannel (uint32_t channelNumber) const;
+  /**
+   * Receive a packet from the lower layer and pass the
+   * packet up the stack.
+   *
+   * \param packet
+   * \param from
+   * \param to
+   */
+  void ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to);
+
+  typedef std::map<uint32_t, Ptr<OcbWifiMac> > MacEntities;
+  typedef std::map<uint32_t, Ptr<OcbWifiMac> >::const_iterator MacEntitiesI;
+  MacEntities m_macEntities;
+  typedef std::vector<Ptr<WifiPhy> >  PhyEntities;
+  typedef std::vector<Ptr<WifiPhy> >::const_iterator PhyEntitiesI;
+  PhyEntities m_phyEntities;
+
+  Ptr<ChannelManager> m_channelManager;
+  Ptr<ChannelScheduler> m_channelScheduler;
+  Ptr<ChannelCoordinator> m_channelCoordinator;
+  Ptr<VsaManager> m_vsaManager;
+  TxProfile *m_txProfile;
+  TracedCallback<Address, Address> m_addressChange;
+
+  // copy from WifiNetDevice
+  Ptr<Node> m_node;
+  NetDevice::ReceiveCallback m_forwardUp;
+  NetDevice::PromiscReceiveCallback m_promiscRx;
+  uint32_t m_ifIndex;
+  mutable uint16_t m_mtu;
+};
+
+} // namespace ns3
+
+#endif /* WAVE_NET_DEVICE_H */
diff -Naur ns-3.21/src/wave/test/examples-to-run.py ns-3.22/src/wave/test/examples-to-run.py
--- ns-3.21/src/wave/test/examples-to-run.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/test/examples-to-run.py	2015-02-05 15:46:22.000000000 -0800
@@ -9,6 +9,7 @@
 # See test.py for more information.
 cpp_examples = [
     ("wave-simple-80211p", "True", "True"),
+    ("wave-simple-device", "True", "True"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.21/src/wave/test/mac-extension-test-suite.cc ns-3.22/src/wave/test/mac-extension-test-suite.cc
--- ns-3.21/src/wave/test/mac-extension-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wave/test/mac-extension-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,978 @@
+/* -*- 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
+ *
+ * Author: Junling Bu <linlinjavaer@gmail.com>
+ */
+#include <cmath>
+#include "ns3/test.h"
+#include "ns3/config.h"
+#include "ns3/string.h"
+#include "ns3/node-list.h"
+#include "ns3/mobility-model.h"
+#include "ns3/yans-wifi-helper.h"
+#include "ns3/mobility-helper.h"
+#include "ns3/seq-ts-header.h"
+#include "ns3/wave-net-device.h"
+#include "ns3/wave-mac-helper.h"
+#include "ns3/wave-helper.h"
+
+using namespace ns3;
+
+// This test case tests the channel coordination.
+// In particular, it checks the following:
+// - channel interval calculation including CCH Interval, SCH Interval,
+//   Guard Interval and Sync Interval
+// - current interval state for current time and future time
+// - channel coordination events notified at the correct time.
+class ChannelCoordinationTestCase : public TestCase
+{
+public:
+  ChannelCoordinationTestCase (void);
+  virtual ~ChannelCoordinationTestCase (void);
+
+  // below three methods are used in CoordinationTestListener
+  void NotifyCchStartNow (Time duration);
+  void NotifySchStartNow (Time duration);
+  void NotifyGuardStartNow (Time duration, bool inCchInterval);
+private:
+  void TestIntervalAfter (bool cchi, bool schi, bool guardi);
+  virtual void DoRun (void);
+  Ptr<ChannelCoordinator> m_coordinator;
+
+};
+
+// CoordinationTestListener is used to test channel coordination events
+class CoordinationTestListener : public ChannelCoordinationListener
+{
+public:
+  CoordinationTestListener (ChannelCoordinationTestCase *coordinatorTest)
+    : m_coordinatorTest (coordinatorTest)
+  {
+  }
+  virtual ~CoordinationTestListener (void)
+  {
+  }
+  virtual void NotifyCchSlotStart (Time duration)
+  {
+    m_coordinatorTest->NotifyCchStartNow (duration);
+  }
+  virtual void NotifySchSlotStart (Time duration)
+  {
+    m_coordinatorTest->NotifySchStartNow (duration);
+  }
+  virtual void NotifyGuardSlotStart (Time duration, bool cchi)
+  {
+    m_coordinatorTest->NotifyGuardStartNow (duration, cchi);
+  }
+  ChannelCoordinationTestCase *m_coordinatorTest;
+};
+
+ChannelCoordinationTestCase::ChannelCoordinationTestCase (void)
+  : TestCase ("channel-coordination")
+{
+}
+ChannelCoordinationTestCase::~ChannelCoordinationTestCase (void)
+{
+}
+
+void
+ChannelCoordinationTestCase::TestIntervalAfter (bool cchi, bool schi, bool guardi)
+{
+  uint32_t now = Now ().GetMilliSeconds ();
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->IsCchInterval (), cchi, "now is " << now  << "ms "
+                         "check whether is CCH interval");
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->IsSchInterval (), schi, "now is " << now  << "ms "
+                         "check whether is SCH interval");
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->IsGuardInterval (), guardi, "now is " << now  << "ms "
+                         "check whether is Guard interval");
+}
+void
+ChannelCoordinationTestCase::NotifyCchStartNow (Time duration)
+{
+  // this method shall be called at 4ms, 104ms, ... synci * n + guardi
+  // synci is sync interval with default value 100ms
+  // guardi is guard interval with default value 4ms
+  // n is sequence number
+  int64_t now = Now ().GetMilliSeconds ();
+  int64_t synci = m_coordinator->GetSyncInterval ().GetMilliSeconds ();
+  int64_t guardi = m_coordinator->GetGuardInterval ().GetMilliSeconds ();
+  bool test = (((now - guardi) % synci) == 0);
+  NS_TEST_EXPECT_MSG_EQ (test, true, "the time of now shall be synci * n + guardi");
+
+  // besides that, the argument duration shall be cchi - guardi
+  Time d = m_coordinator->GetCchInterval () - m_coordinator->GetGuardInterval ();
+  NS_TEST_EXPECT_MSG_EQ ((duration == d), true, "the duration shall be cchi - guardi");
+}
+
+void
+ChannelCoordinationTestCase::NotifySchStartNow (Time duration)
+{
+  // this method shall be called at 54ms, 154ms, ... synci * n + cchi + guardi
+  // synci is sync interval with default value 100ms
+  // cchi is CCH interval with default value 50ms
+  // guardi is guard interval with default value 4ms
+  // n is sequence number
+  int64_t now = Now ().GetMilliSeconds ();
+  int64_t synci = m_coordinator->GetSyncInterval ().GetMilliSeconds ();
+  int64_t cchi = m_coordinator->GetCchInterval ().GetMilliSeconds ();
+  int64_t guardi = m_coordinator->GetGuardInterval ().GetMilliSeconds ();
+  bool test = ((now - guardi - cchi) % synci == 0);
+  NS_TEST_EXPECT_MSG_EQ (test, true, "the time of now shall be synci * n + cchi + guardi");
+
+  // besides that, the argument duration shall be schi - guardi
+  Time d = m_coordinator->GetSchInterval () - m_coordinator->GetGuardInterval ();
+  NS_TEST_EXPECT_MSG_EQ ((duration == d), true, "the duration shall be schi - guardi");
+}
+
+void
+ChannelCoordinationTestCase::NotifyGuardStartNow (Time duration, bool inCchInterval)
+{
+  int64_t now = Now ().GetMilliSeconds ();
+  int64_t sync = m_coordinator->GetSyncInterval ().GetMilliSeconds ();
+  int64_t cchi = m_coordinator->GetCchInterval ().GetMilliSeconds ();
+  bool test = false;
+  if (inCchInterval)
+    {
+      // if cchi, this method will be called at 0ms, 100ms, sync * n
+      test = ((now % sync) == 0);
+      NS_TEST_EXPECT_MSG_EQ (test, true, "the time of now shall be sync * n");
+    }
+  else
+    {
+      // if schi, this method will be called at 50ms, 150ms, sync * n + cchi
+      test = (((now - cchi) % sync) == 0);
+      NS_TEST_EXPECT_MSG_EQ (test, true, "the time of now shall be sync * n");
+    }
+  // the duration shall be guardi
+  test = (duration == m_coordinator->GetGuardInterval ());
+  NS_TEST_EXPECT_MSG_EQ (test, true, "the duration shall be guard interval");
+}
+
+void
+ChannelCoordinationTestCase::DoRun ()
+{
+  // first test configure method
+  m_coordinator = CreateObject<ChannelCoordinator> ();
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->GetCchInterval (), MilliSeconds (50), "normally CCH interval is 50ms");
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->GetSchInterval (), MilliSeconds (50), "normally SCH interval is 50ms");
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->GetSyncInterval (), MilliSeconds (100), "normally Sync interval is 50ms");
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->GetGuardInterval (), MilliSeconds (4), "normally Guard interval is 50ms");
+  m_coordinator->SetCchInterval (MilliSeconds (40));
+  m_coordinator->SetSchInterval (MilliSeconds (60));
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->IsValidConfig (), true, "valid configuration of channel intervals");
+  m_coordinator->SetCchInterval (MilliSeconds (40));
+  m_coordinator->SetSchInterval (MilliSeconds (50));
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->IsValidConfig (), false, "invalid configuration of channel intervals");
+  m_coordinator->SetGuardInterval (MilliSeconds (50));
+  m_coordinator->SetCchInterval (MilliSeconds (40));
+  m_coordinator->SetSchInterval (MilliSeconds (50));
+  NS_TEST_EXPECT_MSG_EQ (m_coordinator->IsValidConfig (), false, "invalid configuration of channel intervals");
+
+  // second test member method
+  m_coordinator = CreateObject<ChannelCoordinator> ();
+  Simulator::Schedule (MilliSeconds (0), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, true);
+  Simulator::Schedule (MilliSeconds (1), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, true);
+  Simulator::Schedule (MilliSeconds (3), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, true);
+  Simulator::Schedule (MilliSeconds (4), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, false);
+  Simulator::Schedule (MilliSeconds (5), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, false);
+  Simulator::Schedule (MilliSeconds (50), &ChannelCoordinationTestCase::TestIntervalAfter, this, false, true, true);
+  Simulator::Schedule (MilliSeconds (51), &ChannelCoordinationTestCase::TestIntervalAfter, this, false, true, true);
+  Simulator::Schedule (MilliSeconds (53), &ChannelCoordinationTestCase:: TestIntervalAfter, this, false, true, true);
+  Simulator::Schedule (MilliSeconds (54), &ChannelCoordinationTestCase::TestIntervalAfter, this, false, true, false);
+  Simulator::Schedule (MilliSeconds (55), &ChannelCoordinationTestCase::TestIntervalAfter, this, false, true, false);
+  Simulator::Schedule (MilliSeconds (100), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, true);
+  Simulator::Schedule (MilliSeconds (200), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, true);
+  Simulator::Schedule (MilliSeconds (201), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, true);
+  Simulator::Schedule (MilliSeconds (203), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, true);
+  Simulator::Schedule (MilliSeconds (204), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, false);
+  Simulator::Schedule (MilliSeconds (205), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, false);
+  Simulator::Schedule (MilliSeconds (250), &ChannelCoordinationTestCase::TestIntervalAfter, this, false, true, true);
+  Simulator::Schedule (MilliSeconds (251), &ChannelCoordinationTestCase::TestIntervalAfter, this, false, true, true);
+  Simulator::Schedule (MilliSeconds (253), &ChannelCoordinationTestCase:: TestIntervalAfter, this, false, true, true);
+  Simulator::Schedule (MilliSeconds (254), &ChannelCoordinationTestCase::TestIntervalAfter, this, false, true, false);
+  Simulator::Schedule (MilliSeconds (255), &ChannelCoordinationTestCase::TestIntervalAfter, this, false, true, false);
+  Simulator::Schedule (MilliSeconds (300), &ChannelCoordinationTestCase::TestIntervalAfter, this, true, false, true);
+  Simulator::Stop (Seconds (1.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  m_coordinator = CreateObject<ChannelCoordinator> ();
+  // third test channel coordination events
+  Ptr<CoordinationTestListener> ptr = Create<CoordinationTestListener> (this);
+  m_coordinator->RegisterListener (ptr);
+  Simulator::Stop (Seconds (100.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+class TestCaseHelper
+{
+public:
+  static NetDeviceContainer  CreatWaveDevice (uint32_t nodesNumber = 2);
+};
+
+#define PI 3.14159265
+
+NetDeviceContainer
+TestCaseHelper::CreatWaveDevice (uint32_t nodesNumber)
+{
+  NodeContainer nodes;
+  nodes.Create (nodesNumber);
+
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (nodes);
+  // this is a circle with radius 10
+  Ptr<MobilityModel> model = NodeList::GetNode (0)->GetObject<MobilityModel> ();
+  model->SetPosition (Vector (0, 0, 0));
+  for (uint32_t n = 1; n != nodesNumber; ++n)
+    {
+      double angle = (PI / 180) * (360 / (nodesNumber - 1) * n);
+      double x = cos (angle) * 10;
+      double y = sin (angle) * 10;
+      Ptr<MobilityModel> model = NodeList::GetNode (n)->GetObject<MobilityModel> ();
+      model->SetPosition (Vector (x, y,0));
+    }
+
+  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
+  YansWavePhyHelper wifiPhy =  YansWavePhyHelper::Default ();
+  wifiPhy.SetChannel (wifiChannel.Create ());
+  QosWaveMacHelper waveMac = QosWaveMacHelper::Default ();
+  WaveHelper waveHelper = WaveHelper::Default ();
+  NetDeviceContainer devices = waveHelper.Install (wifiPhy, waveMac, nodes);
+  return devices;
+}
+
+/**
+ *  route packets or frames in different approaches
+ *  see 1609.4-2010 chapter 5.3.4
+ */
+class ChannelRoutingTestCase : public TestCase
+{
+public:
+  ChannelRoutingTestCase (void);
+  virtual ~ChannelRoutingTestCase (void);
+
+  // send IP-based packets
+  // shouldSuccess is used to check whether packet sent should be successful.
+  void SendIp (bool shouldSucceed, bool ipv6);
+  // send WSMP or other packets
+  // shouldSuccess is used to check whether packet sent should be successful.
+  void SendWsmp (bool shouldSucceed, const TxInfo &txInfo);
+  // send VSA management frames
+  // shouldSuccess is used to check whether packet sent should be successful.
+  void SendWsa (bool shouldSucceed, const VsaInfo &vsaInfo);
+
+private:
+  virtual void DoRun (void);
+  bool Receive (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender);
+  bool ReceiveVsa (Ptr<const Packet>,const Address &, uint32_t, uint32_t);
+
+  Ptr<WaveNetDevice>  m_sender;
+};
+
+ChannelRoutingTestCase::ChannelRoutingTestCase (void)
+  : TestCase ("channel-routing")
+{
+
+}
+ChannelRoutingTestCase::~ChannelRoutingTestCase (void)
+{
+
+}
+void
+ChannelRoutingTestCase::SendWsmp (bool shouldSucceed, const TxInfo &txInfo)
+{
+  Ptr<Packet> packet = Create<Packet> (100);
+  const Address dest = Mac48Address::GetBroadcast ();
+  uint16_t protocol = 0x80dd; // any number is OK even ipv4 and ipv6
+  bool result = m_sender->SendX (packet, dest, protocol, txInfo);
+  NS_TEST_EXPECT_MSG_EQ (result, shouldSucceed, "test SendWsmp method error");
+}
+void
+ChannelRoutingTestCase::SendIp (bool shouldSucceed, bool ipv6)
+{
+  Ptr<Packet> packet = Create<Packet> (100);
+  const Address dest = Mac48Address::GetBroadcast ();
+  const static uint16_t IPv4_PROT_NUMBER = 0x0800;
+  const static uint16_t IPv6_PROT_NUMBER = 0x86DD;
+  uint16_t protocol = ipv6 ? IPv6_PROT_NUMBER : IPv4_PROT_NUMBER;
+  bool result = m_sender->Send (packet, dest, protocol);
+  NS_TEST_EXPECT_MSG_EQ (result, shouldSucceed, "test SendIp method error");
+}
+
+void
+ChannelRoutingTestCase::SendWsa (bool shouldSucceed, const VsaInfo &vsaInfo)
+{
+  bool result = m_sender->StartVsa (vsaInfo);
+  NS_TEST_EXPECT_MSG_EQ (result, shouldSucceed, "test SendWsa method error");
+}
+
+void
+ChannelRoutingTestCase::DoRun ()
+{
+  //  check SendX method for WSMP packets
+  {
+    NetDeviceContainer devices = TestCaseHelper::CreatWaveDevice (1);
+    m_sender = DynamicCast<WaveNetDevice> (devices.Get (0));
+
+    Simulator::Schedule (Seconds (0.1), &ChannelRoutingTestCase::SendWsmp, this, true, TxInfo (CCH));
+    Simulator::Schedule (Seconds (0.1), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH1));
+    Simulator::Schedule (Seconds (0.1), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH2));
+
+    const SchInfo schInfo = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (0.2), &WaveNetDevice::StartSch, m_sender, schInfo);
+
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendWsmp, this, true, TxInfo (CCH));
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendWsmp, this, true, TxInfo (SCH1));
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH2));
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH3));
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH4));
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH5));
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH6));
+
+    // invalid channel number
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (0));
+    // invalid user priority
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (CCH, 8));
+    // invalid tx parameters
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (CCH, 7, WifiMode ("OfdmRate6Mbps"),  7));
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (CCH, 7, WifiMode ("OfdmRate3MbpsBW10MHz"), 10));
+    // valid tx parameters
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsmp, this, true, TxInfo (CCH, 7, WifiMode ("OfdmRate3MbpsBW10MHz"),  7));
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsmp, this, true, TxInfo (CCH, 7, WifiMode (),  8));
+
+    // release channel access at 0.6s
+    Simulator::Schedule (Seconds (0.5), &WaveNetDevice::StopSch, m_sender, SCH1);
+
+    // the packet will be dropped because channel access is not assigned again
+    Simulator::Schedule (Seconds (0.6), &ChannelRoutingTestCase::SendWsmp, this, true, TxInfo (CCH));
+    Simulator::Schedule (Seconds (0.6), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH1));
+    Simulator::Schedule (Seconds (0.6), &ChannelRoutingTestCase::SendWsmp, this, false, TxInfo (SCH2));
+
+    Simulator::Stop (Seconds (1.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+  }
+
+  // check Send method for IP-based packets
+  {
+    NetDeviceContainer devices = TestCaseHelper::CreatWaveDevice (1);
+    m_sender = DynamicCast<WaveNetDevice> (devices.Get (0));
+
+    bool ipv6 = true, ipv4 = false;
+    Simulator::Schedule (Seconds (0.1), &ChannelRoutingTestCase::SendIp, this, false, ipv6);
+    Simulator::Schedule (Seconds (0.1), &ChannelRoutingTestCase::SendIp, this, false, ipv4);
+
+    const SchInfo schInfo = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (0.2), &WaveNetDevice::StartSch, m_sender, schInfo);
+
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendIp, this, false, ipv6);
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendIp, this, false, ipv4);
+
+    TxProfile txProfile = TxProfile (SCH1);
+    Simulator::Schedule (Seconds (0.4), &WaveNetDevice::RegisterTxProfile, m_sender, txProfile);
+
+    Simulator::Schedule (Seconds (0.5), &ChannelRoutingTestCase::SendIp, this, true, ipv6);
+    Simulator::Schedule (Seconds (0.5), &ChannelRoutingTestCase::SendIp, this, true, ipv4);
+
+    // unregister txprofile
+    Simulator::Schedule (Seconds (0.5), &WaveNetDevice::DeleteTxProfile, m_sender,SCH1);
+
+    Simulator::Schedule (Seconds (0.6), &ChannelRoutingTestCase::SendIp, this, false, ipv6);
+    Simulator::Schedule (Seconds (0.6), &ChannelRoutingTestCase::SendIp, this, false, ipv4);
+
+    // release channel access
+    // mac entities have no channel resource even phy device has ability to send
+    Simulator::Schedule (Seconds (0.7),&WaveNetDevice::StopSch, m_sender, SCH1);
+
+    Simulator::Schedule (Seconds (0.8), &ChannelRoutingTestCase::SendIp, this, false, ipv6);
+    Simulator::Schedule (Seconds (0.8), &ChannelRoutingTestCase::SendIp, this, false, ipv4);
+
+    Simulator::Stop (Seconds (1.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+  }
+
+  // check StartVsa method for WSA management frames
+  {
+    NetDeviceContainer devices = TestCaseHelper::CreatWaveDevice (1);
+    m_sender = DynamicCast<WaveNetDevice> (devices.Get (0));
+
+    Ptr<Packet> packet = Create<Packet> (100);
+    const Mac48Address dest = Mac48Address::GetBroadcast ();
+    VsaInfo vsaInfo = VsaInfo (dest, OrganizationIdentifier (), 3, packet, SCH1, 50, VSA_TRANSMIT_IN_BOTHI);
+    Simulator::Schedule (Seconds (0.1), &ChannelRoutingTestCase::SendWsa, this, false, vsaInfo);
+
+    vsaInfo.channelNumber = 0;
+    Simulator::Schedule (Seconds (0.2), &ChannelRoutingTestCase::SendWsa, this, false, vsaInfo);
+
+    vsaInfo.channelNumber = CCH;
+    Simulator::Schedule (Seconds (0.3), &ChannelRoutingTestCase::SendWsa, this, true, vsaInfo);
+    Simulator::Schedule (Seconds (0.39), &WaveNetDevice::StopVsa, m_sender, CCH);
+
+    const SchInfo schInfo = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (0.4), &WaveNetDevice::StartSch, m_sender, schInfo);
+    vsaInfo.channelNumber = CCH;
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsa, this, true, vsaInfo);
+    vsaInfo.channelNumber = SCH1;
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsa, this, true, vsaInfo);
+    vsaInfo.channelNumber = SCH2;
+    Simulator::Schedule (Seconds (0.4), &ChannelRoutingTestCase::SendWsa, this, false, vsaInfo);
+
+    Simulator::Schedule (Seconds (0.49), &WaveNetDevice::StopVsa, m_sender, CCH);
+    Simulator::Schedule (Seconds (0.49), &WaveNetDevice::StopVsa, m_sender, SCH1);
+    Simulator::Schedule (Seconds (0.49),&WaveNetDevice::StopSch, m_sender, SCH1);
+
+    vsaInfo.channelNumber = CCH;
+    Simulator::Schedule (Seconds (0.5), &ChannelRoutingTestCase::SendWsa, this, true, vsaInfo);
+    vsaInfo.channelNumber = SCH1;
+    Simulator::Schedule (Seconds (0.5), &ChannelRoutingTestCase::SendWsa, this, false, vsaInfo);
+    vsaInfo.channelNumber = SCH2;
+    Simulator::Schedule (Seconds (0.5), &ChannelRoutingTestCase::SendWsa, this, false, vsaInfo);
+
+    Simulator::Stop (Seconds (1.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+  }
+}
+
+// This test case tests channel access assignments which is done by
+// StartSch and StopSch method of WaveNetDevice.
+// channel access assignments include ContinuousAccess, ExtendedAccess,
+// and AlternatingAccess.
+// The results of this test case depend on the implementation of ChannelScheduler
+// In this case, the results depend on class "DefaultChannelScheduler".
+class ChannelAccessTestCase : public TestCase
+{
+public:
+  ChannelAccessTestCase (void);
+  virtual ~ChannelAccessTestCase (void);
+private:
+  void TestContinuous (SchInfo &info, bool shouldSuccceed);
+  void TestContinuousAfter (uint32_t channelNumber, bool isAccessAssigned);
+  void TestExtended (SchInfo &info, bool shouldSuccceed);
+  void TestExtendedAfter (uint32_t channelNumber, bool isAccessAssigned);
+  void TestAlternating (SchInfo &info, bool shouldSuccceed);
+  void TestAlternatingAfter (uint32_t channelNumber, bool isAccessAssigned);
+
+  void SendX (uint32_t channel, uint32_t receiverId);
+  bool Receive (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender);
+
+  virtual void DoRun (void);
+
+  NetDeviceContainer m_devices;
+  Ptr<WaveNetDevice>  m_sender;
+  uint32_t m_received;
+};
+
+ChannelAccessTestCase::ChannelAccessTestCase (void)
+  : TestCase ("channel-access")
+{
+}
+ChannelAccessTestCase::~ChannelAccessTestCase (void)
+{
+
+}
+void
+ChannelAccessTestCase::TestContinuous (SchInfo &info, bool shouldSuccceed)
+{
+  bool result = m_sender->StartSch (info);
+  NS_TEST_EXPECT_MSG_EQ (result, shouldSuccceed, "TestContinuous fail at " << Now ().GetSeconds ());
+}
+void
+ChannelAccessTestCase::TestContinuousAfter (uint32_t channelNumber, bool isAccessAssigned)
+{
+  bool result = m_sender->GetChannelScheduler ()->IsContinuousAccessAssigned (channelNumber);
+  NS_TEST_EXPECT_MSG_EQ (result, isAccessAssigned, "TestContinuousAfter fail at " << Now ().GetSeconds ());
+}
+void
+ChannelAccessTestCase::TestExtended (SchInfo &info, bool shouldSuccceed)
+{
+  bool result = m_sender->StartSch (info);
+  NS_TEST_EXPECT_MSG_EQ (result, shouldSuccceed, "TestExtended fail at " << Now ().GetSeconds ());
+}
+void
+ChannelAccessTestCase::TestExtendedAfter (uint32_t channelNumber, bool isAccessAssigned)
+{
+  bool result = m_sender->GetChannelScheduler ()->IsExtendedAccessAssigned (channelNumber);
+  NS_TEST_EXPECT_MSG_EQ (result, isAccessAssigned, "TestExtendedAfter fail at " << Now ().GetSeconds ());
+}
+
+void
+ChannelAccessTestCase::TestAlternating (SchInfo &info, bool shouldSuccceed)
+{
+  bool result = m_sender->StartSch (info);
+  NS_TEST_EXPECT_MSG_EQ (result, shouldSuccceed, "TestAlternating fail at " << Now ().GetSeconds ());
+}
+void
+ChannelAccessTestCase::TestAlternatingAfter (uint32_t channelNumber, bool isAccessAssigned)
+{
+  bool result = m_sender->GetChannelScheduler ()->IsAlternatingAccessAssigned (channelNumber);
+  NS_TEST_EXPECT_MSG_EQ (result, isAccessAssigned, "TestAlternating fail at " << Now ().GetSeconds ());
+}
+
+void
+ChannelAccessTestCase::SendX  (uint32_t channel, uint32_t receiverId)
+{
+  const static uint16_t WSMP_PROT_NUMBER = 0x88DC;
+  const Mac48Address dest = Mac48Address::GetBroadcast ();
+  const TxInfo txInfo = TxInfo (channel);
+  Ptr<Packet> p  = Create<Packet> (100);
+  // the sequence here indicates the node id which should receive transmitted packets.
+  SeqTsHeader seqTs;
+  seqTs.SetSeq (receiverId);
+  p->AddHeader (seqTs);
+  m_sender->SendX  (p, dest, WSMP_PROT_NUMBER, txInfo);
+}
+
+bool
+ChannelAccessTestCase::Receive (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender)
+{
+  SeqTsHeader seqTs;
+  ConstCast<Packet> (pkt)->RemoveHeader (seqTs);
+  uint32_t curNodeId =  dev->GetNode ()->GetId ();
+  NS_TEST_EXPECT_MSG_EQ (curNodeId, seqTs.GetSeq (), "fail to assign channel access");
+  m_received++;
+  return true;
+}
+
+void
+ChannelAccessTestCase::DoRun ()
+{
+  // test ContinuousAccess in the sender side
+  {
+    m_devices = TestCaseHelper::CreatWaveDevice (1);
+    m_sender = DynamicCast<WaveNetDevice> (m_devices.Get (0));
+
+    // there is no need for assigning CCH continuous access.
+    SchInfo info = SchInfo (CCH, false, EXTENDED_CONTINUOUS);
+    Simulator::Schedule (Seconds (1), &ChannelAccessTestCase::TestContinuous, this, info, false);
+
+    info = SchInfo (SCH1, false, EXTENDED_CONTINUOUS);
+    Simulator::Schedule (Seconds (2), &ChannelAccessTestCase::TestContinuous, this, info, true);
+
+    // BE ATTENTION !!!
+    // because channel access is assigned in non-immediate mode, the first CCH Interval will be
+    // the wait time with DefaultCchAccess assigned, thus there is no ContinuousAccess assigned.
+    Simulator::Schedule (Seconds (2), &ChannelAccessTestCase::TestContinuousAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (2.01), &ChannelAccessTestCase::TestContinuousAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (2.049), &ChannelAccessTestCase::TestContinuousAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (2.05), &ChannelAccessTestCase::TestContinuousAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (2.051), &ChannelAccessTestCase::TestContinuousAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (2.99), &ChannelAccessTestCase::TestContinuousAfter, this, SCH1, true);
+
+    // it's OK to assign same access again,
+    Simulator::Schedule (Seconds (3), &ChannelAccessTestCase::TestContinuous, this, info, true);
+    // fail to assign continuous access for other SCH if current channel is assigned
+    info = SchInfo (SCH2, false, EXTENDED_CONTINUOUS);
+    Simulator::Schedule (Seconds (4), &ChannelAccessTestCase::TestContinuous, this, info, false);
+
+    // then we release channel access at 0.5s
+    Simulator::Schedule (Seconds (5), &WaveNetDevice::StopSch, m_sender, SCH1);
+
+    info = SchInfo (SCH2, false, EXTENDED_CONTINUOUS);
+    // succeed to assign access for other SCH is previous SCH access is released
+    Simulator::Schedule (Seconds (6), &ChannelAccessTestCase::TestContinuous, this, info, true);
+
+    Simulator::Stop (Seconds (7.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+  }
+
+  // test ContinuousAccess again in the receiver side
+  {
+    m_devices = TestCaseHelper::CreatWaveDevice (8);
+    m_sender = DynamicCast<WaveNetDevice> (m_devices.Get (0));
+    m_received = 0;
+
+    for (uint32_t i = 1; i != 8; ++i)
+      {
+        Ptr<WaveNetDevice> device = DynamicCast<WaveNetDevice> (m_devices.Get (i));
+        device->SetReceiveCallback (MakeCallback (&ChannelAccessTestCase::Receive, this));
+
+        // at 0s, receivers are assigned ContinuousAccess from CCH, SCH1 to SCH6
+        static std::vector<uint32_t> WaveChannels = ChannelManager::GetWaveChannels ();
+        uint32_t channel = WaveChannels[i - 1];
+        const SchInfo info = SchInfo (channel, false, EXTENDED_CONTINUOUS);
+        Simulator::Schedule (Seconds (0), &WaveNetDevice::StartSch, device, info);
+      }
+
+    // at 0s, the sender is assigned DefaultCchAccess, so only node-1 can receive packets.
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, CCH, 1);
+    // if receivers assigned for SCH access can receive packets, there shall be crashed
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH1, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH2, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH3, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH4, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH5, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH6, 0);
+
+    // at 1s, the sender is assigned ContinuousAccess for SCH1, so only node-2 can receive packets.
+    SchInfo info = SchInfo (SCH1, false, EXTENDED_CONTINUOUS);
+    Simulator::Schedule (Seconds (1), &WaveNetDevice::StartSch, m_sender, info);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH1, 2);
+    // other channel access cannot receive packets
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, CCH, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH2, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH3, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH4, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH5, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH6, 0);
+
+    Simulator::Stop (Seconds (10.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+
+    NS_TEST_EXPECT_MSG_EQ (m_received, 2, "test ContinuousAccess fail in receive side");
+  }
+
+  // test ExtendedAccess in the sender side
+  {
+    m_devices = TestCaseHelper::CreatWaveDevice (1);
+    m_sender = DynamicCast<WaveNetDevice> (m_devices.Get (0));
+
+    // there is no need for assigning CCH extended access.
+    SchInfo info = SchInfo (CCH, false, 10);
+    Simulator::Schedule (Seconds (1), &ChannelAccessTestCase::TestExtended, this, info, false);
+
+    info = SchInfo (SCH1, false, 10);
+    Simulator::Schedule (Seconds (2), &ChannelAccessTestCase::TestExtended, this, info, true);
+    // succeed because request for extends 8 can be fulfilled by previous extends 10..
+    info = SchInfo (SCH1, false, 8);
+    Simulator::Schedule (Seconds (2), &ChannelAccessTestCase::TestExtended, this, info, true);
+    // fail because request for extends 12 cannot be fulfilled by previous extends 10..
+    info = SchInfo (SCH1, false, 12);
+    Simulator::Schedule (Seconds (2), &ChannelAccessTestCase::TestExtended, this, info, false);
+
+    // BE ATTENTION !!!
+    // because channel access is assigned in non-immediate mode, the first CCH Interval will be
+    // the wait time with DefaultCchAccess assigned, while there is no ExtendedAccess assigned.
+    Simulator::Schedule (Seconds (2), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (2.01), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (2.049), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (2.05), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (2.051), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (2.99), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, true);
+
+    // the end of extended access is (2s +  100ms + 100ms * 10) = 3.1s
+    Simulator::Schedule (Seconds (3), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (3.1), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (3.2), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, false);
+    Simulator::Schedule (Seconds (3.3), &ChannelAccessTestCase::TestExtendedAfter, this, SCH1, false);
+
+    // succeed to assign extended access for other SCH since previous extended access is released automatically
+    info = SchInfo (SCH2, false, 10);
+    Simulator::Schedule (Seconds (4), &ChannelAccessTestCase::TestExtended, this, info, true);
+
+    // stop it at 5s even the end of extended access is (4s + 100ms + 100ms * 10) = 5.1s
+    Simulator::Schedule (Seconds (5), &WaveNetDevice::StopSch, m_sender, SCH2);
+
+    Simulator::Schedule (Seconds (5), &ChannelAccessTestCase::TestExtendedAfter, this, SCH2, false);
+    Simulator::Schedule (Seconds (5.1), &ChannelAccessTestCase::TestExtendedAfter, this, SCH2, false);
+    Simulator::Schedule (Seconds (5.2), &ChannelAccessTestCase::TestExtendedAfter, this, SCH2, false);
+
+    Simulator::Stop (Seconds (6.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+  }
+
+  // test ExtendedAccess again in the receiver side
+  {
+    m_devices = TestCaseHelper::CreatWaveDevice (8);
+    m_sender = DynamicCast<WaveNetDevice> (m_devices.Get (0));
+    m_received = 0;
+
+    for (uint32_t i = 1; i != 8; ++i)
+      {
+        Ptr<WaveNetDevice> device = DynamicCast<WaveNetDevice> (m_devices.Get (i));
+        device->SetReceiveCallback (MakeCallback (&ChannelAccessTestCase::Receive, this));
+
+        // at 0s, receivers are assigned ContinuosAccess from CCH, SCH1 to SCH6
+        static std::vector<uint32_t> WaveChannels = ChannelManager::GetWaveChannels ();
+        uint32_t channel = WaveChannels[i - 1];
+        const SchInfo info = SchInfo (channel, false, EXTENDED_CONTINUOUS);
+        Simulator::Schedule (Seconds (0), &WaveNetDevice::StartSch, device, info);
+      }
+
+    // at 0s, the sender is assigned DefaultCchAccess, so only node-1 can receive packets.
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, CCH, 1);
+    // if receivers assigned for SCH access can receive packets, there shall be crashed
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH1, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH2, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH3, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH4, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH5, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH6, 0);
+
+    // at 1s, the sender is assigned ExtendedAccess for SCH1 with extends 10,
+    //, so only node-2 can receive packets from 1s - 2.1s ( 1s + 100ms + 100ms * 10)
+    SchInfo info = SchInfo (SCH1, false, 10);
+    Simulator::Schedule (Seconds (1), &WaveNetDevice::StartSch, m_sender, info);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH1, 2);
+    // other channel access cannot receive packets
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, CCH, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH2, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH3, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH4, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH5, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH6, 0);
+    // at 2.2s the node-2 cannot receive this packet because of extended access released in node-0
+    // but sended is assigned DefaultCchAccess again, thus node-1 can receive broadcasted packets.
+    Simulator::Schedule (Seconds (2.2), &ChannelAccessTestCase::SendX, this, CCH, 1);
+    Simulator::Schedule (Seconds (2.2), &ChannelAccessTestCase::SendX, this, SCH1, 0);
+    Simulator::Schedule (Seconds (2.2), &ChannelAccessTestCase::SendX, this, SCH2, 0);
+    Simulator::Schedule (Seconds (2.2), &ChannelAccessTestCase::SendX, this, SCH3, 0);
+    Simulator::Schedule (Seconds (2.2), &ChannelAccessTestCase::SendX, this, SCH4, 0);
+    Simulator::Schedule (Seconds (2.2), &ChannelAccessTestCase::SendX, this, SCH5, 0);
+    Simulator::Schedule (Seconds (2.2), &ChannelAccessTestCase::SendX, this, SCH6, 0);
+
+    Simulator::Stop (Seconds (10.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+
+    NS_TEST_EXPECT_MSG_EQ (m_received, 3, "test ExtendedAccess fail in receive side");
+  }
+
+  // test AlternatingAccess in the sender side
+  {
+    m_devices = TestCaseHelper::CreatWaveDevice (1);
+    m_sender = DynamicCast<WaveNetDevice> (m_devices.Get (0));
+
+    // there is no need for assigning CCH alternating  access.
+    SchInfo info = SchInfo (CCH, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (1), &ChannelAccessTestCase::TestAlternating, this, info, false);
+
+    info = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (2), &ChannelAccessTestCase::TestAlternating, this, info, true);
+
+    // BE ATTENTION !!!
+    // No matter whether channel access is assigned in immediate mode or non-immediate mode,
+    // the channel access will assigned immediately which is different from the test results in
+    // ExtendedAccess assignment and ContinuousAccess assignment.
+    Simulator::Schedule (Seconds (2), &ChannelAccessTestCase::TestAlternatingAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (2.01), &ChannelAccessTestCase::TestAlternatingAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (2.049), &ChannelAccessTestCase::TestAlternatingAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (2.05), &ChannelAccessTestCase::TestAlternatingAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (2.051), &ChannelAccessTestCase::TestAlternatingAfter, this, SCH1, true);
+    Simulator::Schedule (Seconds (2.99), &ChannelAccessTestCase::TestAlternatingAfter, this, SCH1, true);
+
+    Simulator::Schedule (Seconds (3), &ChannelAccessTestCase::TestAlternating, this, info, true);
+    info = SchInfo (SCH2, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (3), &ChannelAccessTestCase::TestAlternating, this, info, false);
+    info = SchInfo (0, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (3), &ChannelAccessTestCase::TestAlternating, this, info, false);
+
+    // then we release channel access at 0.5s
+    Simulator::Schedule (Seconds (4), &WaveNetDevice::StopSch, m_sender, SCH1);
+
+    info = SchInfo (SCH2, false, EXTENDED_ALTERNATING);
+    // succeed to assign access for other SCH is previous SCH access is released
+    Simulator::Schedule (Seconds (5), &ChannelAccessTestCase::TestAlternating, this, info, true);
+
+    Simulator::Stop (Seconds (6.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+  }
+
+  // test AlternatingAccess again in the receiver side
+  {
+    m_devices = TestCaseHelper::CreatWaveDevice (8);
+    m_sender = DynamicCast<WaveNetDevice> (m_devices.Get (0));
+    m_received = 0;
+
+    for (uint32_t i = 1; i != 8; ++i)
+      {
+        Ptr<WaveNetDevice> device = DynamicCast<WaveNetDevice> (m_devices.Get (i));
+        device->SetReceiveCallback (MakeCallback (&ChannelAccessTestCase::Receive, this));
+
+        // at 0s, receivers are assigned ContinuosAccess from CCH, SCH1 to SCH6
+        static std::vector<uint32_t> WaveChannels = ChannelManager::GetWaveChannels ();
+        uint32_t channel = WaveChannels[i - 1];
+        const SchInfo info = SchInfo (channel, false, EXTENDED_CONTINUOUS);
+        Simulator::Schedule (Seconds (0), &WaveNetDevice::StartSch, device, info);
+      }
+
+    // at 0s, the sender is assigned DefaultCchAccess, so only node-1 can receive packets.
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, CCH, 1);
+    // if receivers assigned for SCH access can receive packets, there shall be crashed
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH1, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH2, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH3, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH4, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH5, 0);
+    Simulator::Schedule (Seconds (0.1), &ChannelAccessTestCase::SendX, this, SCH6, 0);
+
+    // at 1s, the sender is assigned ContinuosAccess for SCH1, so only node-2 can receive packets.
+    SchInfo info = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+    Simulator::Schedule (Seconds (1), &WaveNetDevice::StartSch, m_sender, info);
+    // node-1 (assigned CCH access) and node-2 (assigned SCH1 access) can receive packets
+    // in different channel interval
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH1, 2);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, CCH, 1);
+    // other channel access cannot receive packets
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH2, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH3, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH4, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH5, 0);
+    Simulator::Schedule (Seconds (1.1), &ChannelAccessTestCase::SendX, this, SCH6, 0);
+
+    Simulator::Schedule (Seconds (2), &WaveNetDevice::StopSch, m_sender, SCH1);
+    // if ContinuousAccess for SCH1 is released, node-2 cannot receive packets again
+    Simulator::Schedule (Seconds (2.1), &ChannelAccessTestCase::SendX, this, CCH, 1);
+    Simulator::Schedule (Seconds (2.1), &ChannelAccessTestCase::SendX, this, SCH1, 0);
+    Simulator::Schedule (Seconds (2.1), &ChannelAccessTestCase::SendX, this, SCH2, 0);
+    Simulator::Schedule (Seconds (2.1), &ChannelAccessTestCase::SendX, this, SCH3, 0);
+    Simulator::Schedule (Seconds (2.1), &ChannelAccessTestCase::SendX, this, SCH4, 0);
+    Simulator::Schedule (Seconds (2.1), &ChannelAccessTestCase::SendX, this, SCH5, 0);
+    Simulator::Schedule (Seconds (2.1), &ChannelAccessTestCase::SendX, this, SCH6, 0);
+
+    Simulator::Stop (Seconds (10.0));
+    Simulator::Run ();
+    Simulator::Destroy ();
+
+    NS_TEST_EXPECT_MSG_EQ (m_received, 4, "test AlternatingAccess fail in receive side");
+  }
+}
+
+// The Annex C of  IEEE 1609.4 : "Avoiding transmission at scheduled guard intervals"
+// This feature is implemented in WaveMacLow::StartTransmission method
+class AnnexC_TestCase : public TestCase
+{
+public:
+  AnnexC_TestCase ();
+  virtual ~AnnexC_TestCase ();
+private:
+  virtual void DoRun (void);
+
+  void SendPacket  (uint32_t packetSize, const TxInfo & txInfo, uint32_t sequence);
+  bool Receive (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender);
+
+  NetDeviceContainer m_devices;
+  Ptr<WaveNetDevice>  m_sender;
+  Ptr<WaveNetDevice>  m_receiver;
+};
+
+AnnexC_TestCase::AnnexC_TestCase (void)
+  : TestCase ("annex-c")
+{
+}
+
+AnnexC_TestCase::~AnnexC_TestCase (void)
+{
+}
+
+void
+AnnexC_TestCase::SendPacket  (uint32_t packetSize, const TxInfo & txInfo, uint32_t sequence)
+{
+  const static uint16_t WSMP_PROT_NUMBER = 0x88DC;
+  const Mac48Address dest = Mac48Address::ConvertFrom (m_receiver->GetAddress ());
+//   const Mac48Address dest = Mac48Address::GetBroadcast();
+
+
+  Ptr<Packet> p  = Create<Packet> (packetSize - (8 + 4)); // 8+4 : the size of the seqTs header
+  // the sequence here indicates whether the node id which should receive transmitted packets.
+  SeqTsHeader seqTs;
+  seqTs.SetSeq (sequence);
+  p->AddHeader (seqTs);
+  m_sender->SendX  (p, dest, WSMP_PROT_NUMBER, txInfo);
+}
+
+bool
+AnnexC_TestCase::Receive (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender)
+{
+  SeqTsHeader seqTs;
+  ConstCast<Packet> (pkt)->RemoveHeader (seqTs);
+  uint32_t seq = seqTs.GetSeq ();
+  Time sendTime =  seqTs.GetTs ();
+  Time curTime = Now ();
+  Time duration = curTime - sendTime;
+
+  if (seq == 1)
+    {
+      NS_TEST_EXPECT_MSG_GT (duration, ChannelCoordinator::GetDefaultSchInterval (), "fail to test Annex C when packet sequence is " << seq);
+    }
+  else if (seq == 2)
+    {
+      NS_TEST_EXPECT_MSG_LT (duration, ChannelCoordinator::GetDefaultSchInterval (), "fail to test Annex C when packet sequence is " << seq);
+    }
+  else if (seq == 3)
+    {
+      NS_TEST_EXPECT_MSG_GT (duration, ChannelCoordinator::GetDefaultCchInterval (), "fail to test Annex C when packet sequence is " << seq);
+    }
+  else if (seq == 4)
+    {
+      NS_TEST_EXPECT_MSG_LT (duration, ChannelCoordinator::GetDefaultCchInterval (), "fail to test Annex C when packet sequence is " << seq);
+    }
+  return true;
+}
+
+void
+AnnexC_TestCase::DoRun (void)
+{
+  m_devices = TestCaseHelper::CreatWaveDevice (2);
+  m_sender = DynamicCast<WaveNetDevice> (m_devices.Get (0));
+  m_receiver = DynamicCast<WaveNetDevice> (m_devices.Get (1));
+  m_receiver->SetReceiveCallback (MakeCallback (&AnnexC_TestCase::Receive, this));
+
+  // at 0s, the receiver is assigned AlternatingAccess  for SCH1
+  SchInfo infoReceiver = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+  Simulator::Schedule (MilliSeconds (0), &WaveNetDevice::StartSch, m_receiver, infoReceiver);
+
+  // at 0s, the sender is assigned AlternatingAccess for SCH1
+  SchInfo infoSender = SchInfo (SCH1, false, EXTENDED_ALTERNATING);
+  Simulator::Schedule (MilliSeconds (0), &WaveNetDevice::StartSch, m_sender, infoSender);
+
+  TxInfo txInfo = TxInfo (CCH, 0, WifiMode ("OfdmRate3MbpsBW10MHz"), 0);
+  // the packet size with 2312 bytes costs 6.42s, which will cancel this transmission in the CCH Interval
+  // so the receiver will receive this packet in next CCH Interval
+  Simulator::Schedule (MilliSeconds (45), &AnnexC_TestCase::SendPacket, this, 2304, txInfo, 1);
+
+  // the packet size with 312 bytes costs 1.104ms, which will not cancel transmission in the CCH Interval
+  // so the receiver can this packet is this CCH Interval
+  Simulator::Schedule (MilliSeconds (145), &AnnexC_TestCase::SendPacket, this, 312, txInfo, 2);
+
+  txInfo = TxInfo (SCH1, 0, WifiMode ("OfdmRate3MbpsBW10MHz"), 0);
+  // the packet size with 2312 bytes costs 6.42ms, which will cancel this transmission in the SCH Interval
+  // so the receiver will receive this packet in next SCH Interval
+  Simulator::Schedule (MilliSeconds (295), &AnnexC_TestCase::SendPacket, this, 2304, txInfo, 3);
+
+  // the packet size with 312 bytes costs 1.104ms, which will not cancel transmission in the SCH Interval
+  // so the receiver can this packet is this SCH Interval
+  Simulator::Schedule (MilliSeconds (395), &AnnexC_TestCase::SendPacket, this, 312, txInfo, 4);
+
+  Simulator::Stop (Seconds (1.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+class WaveMacTestSuite : public TestSuite
+{
+public:
+  WaveMacTestSuite ();
+};
+
+WaveMacTestSuite::WaveMacTestSuite ()
+  : TestSuite ("wave-mac-extension", UNIT)
+{
+  // TestDuration for TestCase can be QUICK, EXTENSIVE or TAKES_FOREVER
+  AddTestCase (new ChannelCoordinationTestCase, TestCase::QUICK);
+  AddTestCase (new ChannelRoutingTestCase, TestCase::QUICK);
+  AddTestCase (new ChannelAccessTestCase, TestCase::QUICK);
+  AddTestCase (new AnnexC_TestCase, TestCase::QUICK);
+}
+
+// Do not forget to allocate an instance of this TestSuite
+static WaveMacTestSuite waveMacTestSuite;
diff -Naur ns-3.21/src/wave/wscript ns-3.22/src/wave/wscript
--- ns-3.21/src/wave/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wave/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -7,30 +7,51 @@
 #     conf.check_nonfatal(header_name='stdint.h', define_name='HAVE_STDINT_H')
 
 def build(bld):
-    module = bld.create_ns3_module('wave', ['core', 'wifi'])
+    module = bld.create_ns3_module('wave', ['core','wifi', 'propagation', 'internet', 'applications'])
     module.source = [
-	'model/wave-mac-low.cc',
+        'model/wave-mac-low.cc',
         'model/ocb-wifi-mac.cc',
         'model/vendor-specific-action.cc',
+        'model/channel-coordinator.cc',
+        'model/channel-scheduler.cc',
+        'model/default-channel-scheduler.cc',
+        'model/channel-manager.cc',
+        'model/vsa-manager.cc',
+        'model/bsm-application.cc',
         'model/higher-tx-tag.cc',
+        'model/wave-net-device.cc',
+        'helper/wave-bsm-stats.cc',
         'helper/wave-mac-helper.cc',
+        'helper/wave-helper.cc',
         'helper/wifi-80211p-helper.cc',
+        'helper/wave-bsm-helper.cc'
         ]
 
     module_test = bld.create_ns3_module_test_library('wave')
     module_test.source = [
+        'test/mac-extension-test-suite.cc',
         'test/ocb-test-suite.cc',
         ]
 
     headers = bld(features='ns3header')
     headers.module = 'wave'
     headers.source = [
-    	'model/wave-mac-low.h',
+        'model/wave-mac-low.h',
         'model/ocb-wifi-mac.h',
         'model/vendor-specific-action.h',
+        'model/channel-coordinator.h',
+        'model/channel-manager.h',
+        'model/channel-scheduler.h',
+        'model/default-channel-scheduler.h',
+        'model/vsa-manager.h',
         'model/higher-tx-tag.h',
+        'model/wave-net-device.h',
+        'model/bsm-application.h',
+        'helper/wave-bsm-stats.h',
         'helper/wave-mac-helper.h',
+        'helper/wave-helper.h',
         'helper/wifi-80211p-helper.h',
+        'helper/wave-bsm-helper.h',
         ]
 
     if bld.env.ENABLE_EXAMPLES:
diff -Naur ns-3.21/src/wifi/bindings/modulegen__gcc_ILP32.py ns-3.22/src/wifi/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/wifi/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -29,7 +29,7 @@
     ## 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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'])
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'])
     ## 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]
@@ -224,6 +224,8 @@
     module.add_class('int64x64_t', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
+    ## ampdu-tag.h (module 'wifi'): ns3::AmpduTag [class]
+    module.add_class('AmpduTag', parent=root_module['ns3::Tag'])
     ## 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]
@@ -366,10 +368,16 @@
     module.add_class('AarfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## aarfcd-wifi-manager.h (module 'wifi'): ns3::AarfcdWifiManager [class]
     module.add_class('AarfcdWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader [class]
+    module.add_class('AmpduSubframeHeader', parent=root_module['ns3::Header'])
     ## amrr-wifi-manager.h (module 'wifi'): ns3::AmrrWifiManager [class]
     module.add_class('AmrrWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## amsdu-subframe-header.h (module 'wifi'): ns3::AmsduSubframeHeader [class]
     module.add_class('AmsduSubframeHeader', parent=root_module['ns3::Header'])
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager [class]
+    module.add_class('AparfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::State [enumeration]
+    module.add_enum('State', ['High', 'Low', 'Spread'], outer_class=root_module['ns3::AparfWifiManager'])
     ## arf-wifi-manager.h (module 'wifi'): ns3::ArfWifiManager [class]
     module.add_class('ArfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## athstats-helper.h (module 'wifi'): ns3::AthstatsWifiTraceSink [class]
@@ -398,8 +406,6 @@
     module.add_class('ConstantSpeedPropagationDelayModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationDelayModel'])
     ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel [class]
     module.add_class('Cost231PropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
-    ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel::Environment [enumeration]
-    module.add_enum('Environment', ['SubUrban', 'MediumCity', 'Metropolitan'], outer_class=root_module['ns3::Cost231PropagationLossModel'], import_from_module='ns.propagation')
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader [class]
     module.add_class('CtrlBAckRequestHeader', parent=root_module['ns3::Header'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader [class]
@@ -486,6 +492,10 @@
     module.add_class('MinstrelWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
     module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator [class]
+    module.add_class('MpduAggregator', parent=root_module['ns3::Object'])
+    ## mpdu-standard-aggregator.h (module 'wifi'): ns3::MpduStandardAggregator [class]
+    module.add_class('MpduStandardAggregator', parent=root_module['ns3::MpduAggregator'])
     ## msdu-aggregator.h (module 'wifi'): ns3::MsduAggregator [class]
     module.add_class('MsduAggregator', parent=root_module['ns3::Object'])
     ## propagation-loss-model.h (module 'propagation'): ns3::NakagamiPropagationLossModel [class]
@@ -516,6 +526,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'])
+    ## parf-wifi-manager.h (module 'wifi'): ns3::ParfWifiManager [class]
+    module.add_class('ParfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## regular-wifi-mac.h (module 'wifi'): ns3::RegularWifiMac [class]
     module.add_class('RegularWifiMac', parent=root_module['ns3::WifiMac'])
     ## rraa-wifi-manager.h (module 'wifi'): ns3::RraaWifiManager [class]
@@ -570,10 +582,14 @@
     module.add_class('DcaTxop', parent=root_module['ns3::Dcf'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
     module.add_container('ns3::WifiMcsList', 'unsigned char', container_type=u'vector')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader >', container_type=u'list')
     module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader >', container_type=u'list')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
+    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', u'ns3::MinstrelRate')
+    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', u'ns3::MinstrelRate*')
+    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', u'ns3::MinstrelRate&')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
@@ -584,9 +600,6 @@
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', u'ns3::MinstrelRate')
-    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', u'ns3::MinstrelRate*')
-    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', u'ns3::MinstrelRate&')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
@@ -741,6 +754,7 @@
     register_Ns3YansWifiPhyHelper_methods(root_module, root_module['ns3::YansWifiPhyHelper'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3AmpduTag_methods(root_module, root_module['ns3::AmpduTag'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3MgtAddBaRequestHeader_methods(root_module, root_module['ns3::MgtAddBaRequestHeader'])
@@ -800,8 +814,10 @@
     register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
     register_Ns3AarfWifiManager_methods(root_module, root_module['ns3::AarfWifiManager'])
     register_Ns3AarfcdWifiManager_methods(root_module, root_module['ns3::AarfcdWifiManager'])
+    register_Ns3AmpduSubframeHeader_methods(root_module, root_module['ns3::AmpduSubframeHeader'])
     register_Ns3AmrrWifiManager_methods(root_module, root_module['ns3::AmrrWifiManager'])
     register_Ns3AmsduSubframeHeader_methods(root_module, root_module['ns3::AmsduSubframeHeader'])
+    register_Ns3AparfWifiManager_methods(root_module, root_module['ns3::AparfWifiManager'])
     register_Ns3ArfWifiManager_methods(root_module, root_module['ns3::ArfWifiManager'])
     register_Ns3AthstatsWifiTraceSink_methods(root_module, root_module['ns3::AthstatsWifiTraceSink'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
@@ -859,6 +875,8 @@
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
     register_Ns3MinstrelWifiManager_methods(root_module, root_module['ns3::MinstrelWifiManager'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
+    register_Ns3MpduAggregator_methods(root_module, root_module['ns3::MpduAggregator'])
+    register_Ns3MpduStandardAggregator_methods(root_module, root_module['ns3::MpduStandardAggregator'])
     register_Ns3MsduAggregator_methods(root_module, root_module['ns3::MsduAggregator'])
     register_Ns3NakagamiPropagationLossModel_methods(root_module, root_module['ns3::NakagamiPropagationLossModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -873,6 +891,7 @@
     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_Ns3ParfWifiManager_methods(root_module, root_module['ns3::ParfWifiManager'])
     register_Ns3RegularWifiMac_methods(root_module, root_module['ns3::RegularWifiMac'])
     register_Ns3RraaWifiManager_methods(root_module, root_module['ns3::RraaWifiManager'])
     register_Ns3Ssid_methods(root_module, root_module['ns3::Ssid'])
@@ -1211,11 +1230,21 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): uint16_t ns3::BlockAckAgreement::GetWinEnd() const [member function]
+    cls.add_method('GetWinEnd', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsAmsduSupported() const [member function]
     cls.add_method('IsAmsduSupported', 
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsHtSupported() const [member function]
+    cls.add_method('IsHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsImmediateBlockAck() const [member function]
     cls.add_method('IsImmediateBlockAck', 
                    'bool', 
@@ -1233,6 +1262,10 @@
     cls.add_method('SetDelayedBlockAck', 
                    'void', 
                    [])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetHtSupported(bool htSupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'htSupported')])
     ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetImmediateBlockAck() [member function]
     cls.add_method('SetImmediateBlockAck', 
                    'void', 
@@ -1245,6 +1278,10 @@
     cls.add_method('SetTimeout', 
                    'void', 
                    [param('uint16_t', 'timeout')])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetWinEnd(uint16_t seq) [member function]
+    cls.add_method('SetWinEnd', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
     return
 
 def register_Ns3BlockAckCache_methods(root_module, cls):
@@ -1256,6 +1293,10 @@
     cls.add_method('FillBlockAckBitmap', 
                    'void', 
                    [param('ns3::CtrlBAckResponseHeader *', 'blockAckHeader')])
+    ## block-ack-cache.h (module 'wifi'): uint16_t ns3::BlockAckCache::GetWinStart() [member function]
+    cls.add_method('GetWinStart', 
+                   'uint16_t', 
+                   [])
     ## block-ack-cache.h (module 'wifi'): void ns3::BlockAckCache::Init(uint16_t winStart, uint16_t winSize) [member function]
     cls.add_method('Init', 
                    'void', 
@@ -1273,6 +1314,14 @@
 def register_Ns3BlockAckManager_methods(root_module, cls):
     ## block-ack-manager.h (module 'wifi'): ns3::BlockAckManager::BlockAckManager() [constructor]
     cls.add_constructor([])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::AlreadyExists(uint16_t currentSeq, ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('AlreadyExists', 
+                   'bool', 
+                   [param('uint16_t', 'currentSeq'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CompleteAmpduExchange(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduExchange', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CreateAgreement(ns3::MgtAddBaRequestHeader const * reqHdr, ns3::Mac48Address recipient) [member function]
     cls.add_method('CreateAgreement', 
                    'void', 
@@ -1329,6 +1378,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::NeedBarRetransmission(uint8_t tid, uint16_t seqNumber, ns3::Mac48Address recipient) [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('uint16_t', 'seqNumber'), param('ns3::Mac48Address', 'recipient')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyAgreementEstablished(ns3::Mac48Address recipient, uint8_t tid, uint16_t startingSeq) [member function]
     cls.add_method('NotifyAgreementEstablished', 
                    'void', 
@@ -1337,14 +1390,22 @@
     cls.add_method('NotifyAgreementUnsuccessful', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('NotifyGotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber) [member function]
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, ns3::WifiMacHeader::QosAckPolicy policy) [member function]
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
-                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber')])
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemovePacket', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetBlockAckInactivityCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetBlockAckInactivityCallback', 
                    'void', 
@@ -1369,14 +1430,26 @@
     cls.add_method('SetQueue', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiMacQueue >', 'queue')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxFailedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
     cls.add_method('SetTxMiddle', 
                    'void', 
                    [param('ns3::MacTxMiddle *', 'txMiddle')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetUnblockDestinationCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetUnblockDestinationCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> manager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'manager')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::StorePacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr, ns3::Time tStamp) [member function]
     cls.add_method('StorePacket', 
                    'void', 
@@ -1881,6 +1954,10 @@
     cls.add_method('NotifyWakeupNow', 
                    'void', 
                    [])
+    ## dcf-manager.h (module 'wifi'): void ns3::DcfManager::RemovePhyListener(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('RemovePhyListener', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')])
     ## dcf-manager.h (module 'wifi'): void ns3::DcfManager::RequestAccess(ns3::DcfState * state) [member function]
     cls.add_method('RequestAccess', 
                    'void', 
@@ -1981,6 +2058,16 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## dcf-manager.h (module 'wifi'): void ns3::DcfState::DoNotifySleep() [member function]
+    cls.add_method('DoNotifySleep', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## dcf-manager.h (module 'wifi'): void ns3::DcfState::DoNotifyWakeUp() [member function]
+    cls.add_method('DoNotifyWakeUp', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3DsssErrorRateModel_methods(root_module, cls):
@@ -2659,6 +2746,61 @@
                    'void', 
                    [param('ns3::Mac48Address', 'originator'), param('uint8_t', 'tid')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::CompleteTransfer(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('CompleteTransfer', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLowBlockAckEventListener::GetBlockAckAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBlockAckAgreementExists', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint32_t ns3::MacLowBlockAckEventListener::GetNOutstandingPackets(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint32_t ns3::MacLowBlockAckEventListener::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint16_t ns3::MacLowBlockAckEventListener::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::MacLowBlockAckEventListener::GetQueue() [member function]
+    cls.add_method('GetQueue', 
+                   'ns3::Ptr< ns3::WifiMacQueue >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::MacLowBlockAckEventListener::PeekNextPacketInBaQueue(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketInBaQueue', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint16_t ns3::MacLowBlockAckEventListener::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::RemoveFromBaQueue(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveFromBaQueue', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::SetAmpdu(bool ampdu) [member function]
+    cls.add_method('SetAmpdu', 
+                   'void', 
+                   [param('bool', 'ampdu')], 
+                   is_virtual=True)
     return
 
 def register_Ns3MacLowDcfListener_methods(root_module, cls):
@@ -2718,10 +2860,10 @@
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, ns3::WifiMode txMode) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source')], 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('ns3::WifiMode', 'txMode')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
@@ -3004,10 +3146,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -3433,10 +3575,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3505,8 +3647,6 @@
     cls.add_constructor([param('ns3::RateInfo const &', 'arg0')])
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::adjustedRetryCount [variable]
     cls.add_instance_attribute('adjustedRetryCount', 'uint32_t', is_const=False)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::attemptHist [variable]
-    cls.add_instance_attribute('attemptHist', 'uint64_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::ewmaProb [variable]
     cls.add_instance_attribute('ewmaProb', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::numRateAttempt [variable]
@@ -3515,16 +3655,10 @@
     cls.add_instance_attribute('numRateSuccess', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::perfectTxTime [variable]
     cls.add_instance_attribute('perfectTxTime', 'ns3::Time', is_const=False)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prevNumRateAttempt [variable]
-    cls.add_instance_attribute('prevNumRateAttempt', 'uint32_t', is_const=False)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prevNumRateSuccess [variable]
-    cls.add_instance_attribute('prevNumRateSuccess', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prob [variable]
     cls.add_instance_attribute('prob', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::retryCount [variable]
     cls.add_instance_attribute('retryCount', 'uint32_t', is_const=False)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::successHist [variable]
-    cls.add_instance_attribute('successHist', 'uint64_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::throughput [variable]
     cls.add_instance_attribute('throughput', 'uint32_t', is_const=False)
     return
@@ -3781,7 +3915,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3832,6 +3971,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3908,6 +4052,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3942,6 +4090,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4106,10 +4256,10 @@
     cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
-    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::WifiNetDevice> device) const [member function]
+    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::WifiNetDevice >', 'device')], 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
@@ -4206,6 +4356,8 @@
     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_ness [variable]
+    cls.add_instance_attribute('m_ness', 'uint32_t', 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]
@@ -4332,6 +4484,11 @@
                    'ns3::YansWifiPhyHelper', 
                    [], 
                    is_static=True)
+    ## yans-wifi-helper.h (module 'wifi'): uint32_t ns3::YansWifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
     cls.add_method('Set', 
                    'void', 
@@ -4352,10 +4509,10 @@
     cls.add_method('SetPcapDataLinkType', 
                    'void', 
                    [param('ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
-    ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::WifiNetDevice> device) const [member function]
+    ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::WifiNetDevice >', 'device')], 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_const=True, visibility='private', is_virtual=True)
     ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
     cls.add_method('EnableAsciiInternal', 
@@ -4443,6 +4600,61 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
+def register_Ns3AmpduTag_methods(root_module, cls):
+    ## ampdu-tag.h (module 'wifi'): ns3::AmpduTag::AmpduTag(ns3::AmpduTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AmpduTag const &', 'arg0')])
+    ## ampdu-tag.h (module 'wifi'): ns3::AmpduTag::AmpduTag() [constructor]
+    cls.add_constructor([])
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): bool ns3::AmpduTag::GetAmpdu() const [member function]
+    cls.add_method('GetAmpdu', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ampdu-tag.h (module 'wifi'): ns3::TypeId ns3::AmpduTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): uint8_t ns3::AmpduTag::GetNoOfMpdus() const [member function]
+    cls.add_method('GetNoOfMpdus', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ampdu-tag.h (module 'wifi'): uint32_t ns3::AmpduTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): static ns3::TypeId ns3::AmpduTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetAmpdu(bool supported) [member function]
+    cls.add_method('SetAmpdu', 
+                   'void', 
+                   [param('bool', 'supported')])
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetNoOfMpdus(uint8_t noofmpdus) [member function]
+    cls.add_method('SetNoOfMpdus', 
+                   'void', 
+                   [param('uint8_t', 'noofmpdus')])
+    return
+
 def register_Ns3Chunk_methods(root_module, cls):
     ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
     cls.add_constructor([])
@@ -5320,6 +5532,10 @@
     cls.add_method('SetBlockAckThresholdForAc', 
                    'void', 
                    [param('ns3::AcIndex', 'ac'), param('uint8_t', 'threshold')])
+    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMpduAggregatorForAc(ns3::AcIndex ac, std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetMpduAggregatorForAc', 
+                   'void', 
+                   [param('ns3::AcIndex', 'ac'), param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()')])
     ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMsduAggregatorForAc(ns3::AcIndex ac, std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
     cls.add_method('SetMsduAggregatorForAc', 
                    'void', 
@@ -6409,6 +6625,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiMac::GetWifiPhy() const [member function]
+    cls.add_method('GetWifiPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiRemoteStationManager> ns3::WifiMac::GetWifiRemoteStationManager() const [member function]
+    cls.add_method('GetWifiRemoteStationManager', 
+                   'ns3::Ptr< ns3::WifiRemoteStationManager >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyPromiscRx', 
                    'void', 
@@ -6429,6 +6655,11 @@
     cls.add_method('NotifyTxDrop', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -7018,10 +7249,10 @@
     cls.add_method('Peek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [param('ns3::WifiMacHeader *', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr, ns3::Time * timestamp) [member function]
     cls.add_method('PeekByTidAndAddress', 
                    'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr'), param('ns3::Time *', 'timestamp')])
     ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
     cls.add_method('PeekFirstAvailable', 
                    'ns3::Ptr< ns3::Packet const >', 
@@ -7106,11 +7337,10 @@
                    '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -7136,6 +7366,11 @@
                    'uint16_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -7556,14 +7791,13 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
@@ -7571,19 +7805,19 @@
                    '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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
                    [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')], 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
@@ -7698,10 +7932,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
     cls.add_method('SetChannelBonding', 
@@ -7763,6 +7997,11 @@
                    'void', 
                    [param('bool', 'stbc')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -7869,6 +8108,10 @@
     cls.add_method('SwitchToTx', 
                    'void', 
                    [param('ns3::Time', 'txDuration'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')])
     ## 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
@@ -7878,6 +8121,10 @@
     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::AddAllSupportedModes(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedModes', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
@@ -8136,6 +8383,11 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -8156,6 +8408,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiRemoteStationManager::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::WifiMac >', 
+                   [], 
+                   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', 
@@ -8171,6 +8428,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNess(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNess', 
+                   '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', 
@@ -8181,6 +8443,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   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', 
@@ -8403,6 +8670,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -8597,10 +8869,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetCcaMode1Threshold(double threshold) [member function]
     cls.add_method('SetCcaMode1Threshold', 
@@ -8710,10 +8982,15 @@
     cls.add_method('SetTxPowerStart', 
                    'void', 
                    [param('double', 'start')])
-    ## 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]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, ns3::Time rxDuration) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('ns3::Time', 'rxDuration')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -8724,6 +9001,11 @@
                    'void', 
                    [], 
                    visibility='private', is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3ZetaRandomVariable_methods(root_module, cls):
@@ -8936,6 +9218,70 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3AmpduSubframeHeader_methods(root_module, cls):
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader::AmpduSubframeHeader(ns3::AmpduSubframeHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AmpduSubframeHeader const &', 'arg0')])
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader::AmpduSubframeHeader() [constructor]
+    cls.add_constructor([])
+    ## ampdu-subframe-header.h (module 'wifi'): uint32_t ns3::AmpduSubframeHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint8_t ns3::AmpduSubframeHeader::GetCrc() const [member function]
+    cls.add_method('GetCrc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::TypeId ns3::AmpduSubframeHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint16_t ns3::AmpduSubframeHeader::GetLength() const [member function]
+    cls.add_method('GetLength', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint32_t ns3::AmpduSubframeHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint8_t ns3::AmpduSubframeHeader::GetSig() const [member function]
+    cls.add_method('GetSig', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): static ns3::TypeId ns3::AmpduSubframeHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetCrc(uint8_t crc) [member function]
+    cls.add_method('SetCrc', 
+                   'void', 
+                   [param('uint8_t', 'crc')])
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetLength(uint16_t length) [member function]
+    cls.add_method('SetLength', 
+                   'void', 
+                   [param('uint16_t', 'length')])
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetSig() [member function]
+    cls.add_method('SetSig', 
+                   'void', 
+                   [])
+    return
+
 def register_Ns3AmrrWifiManager_methods(root_module, cls):
     ## amrr-wifi-manager.h (module 'wifi'): ns3::AmrrWifiManager::AmrrWifiManager(ns3::AmrrWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AmrrWifiManager const &', 'arg0')])
@@ -9067,6 +9413,78 @@
                    [param('ns3::Mac48Address', 'to')])
     return
 
+def register_Ns3AparfWifiManager_methods(root_module, cls):
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::AparfWifiManager(ns3::AparfWifiManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AparfWifiManager const &', 'arg0')])
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::AparfWifiManager() [constructor]
+    cls.add_constructor([])
+    ## aparf-wifi-manager.h (module 'wifi'): static ns3::TypeId ns3::AparfWifiManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetupPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::AparfWifiManager::DoCreateStation() const [member function]
+    cls.add_method('DoCreateStation', 
+                   'ns3::WifiRemoteStation *', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::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)
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('DoReportDataOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('DoReportRtsOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('DoReportRxOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): bool ns3::AparfWifiManager::IsLowLatency() const [member function]
+    cls.add_method('IsLowLatency', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3ArfWifiManager_methods(root_module, cls):
     ## arf-wifi-manager.h (module 'wifi'): ns3::ArfWifiManager::ArfWifiManager(ns3::ArfWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ArfWifiManager const &', 'arg0')])
@@ -9579,14 +9997,14 @@
     cls.add_method('SetSSAntennaHeight', 
                    'void', 
                    [param('double', 'height')])
-    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetEnvironment(ns3::Cost231PropagationLossModel::Environment env) [member function]
-    cls.add_method('SetEnvironment', 
-                   'void', 
-                   [param('ns3::Cost231PropagationLossModel::Environment', 'env')])
     ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double lambda) [member function]
     cls.add_method('SetLambda', 
                    'void', 
                    [param('double', 'lambda')])
+    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double frequency, double speed) [member function]
+    cls.add_method('SetLambda', 
+                   'void', 
+                   [param('double', 'frequency'), param('double', 'speed')])
     ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetMinDistance(double minDistance) [member function]
     cls.add_method('SetMinDistance', 
                    'void', 
@@ -9601,11 +10019,6 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel::Environment ns3::Cost231PropagationLossModel::GetEnvironment() const [member function]
-    cls.add_method('GetEnvironment', 
-                   'ns3::Cost231PropagationLossModel::Environment', 
-                   [], 
-                   is_const=True)
     ## cost231-propagation-loss-model.h (module 'propagation'): double ns3::Cost231PropagationLossModel::GetMinDistance() const [member function]
     cls.add_method('GetMinDistance', 
                    'double', 
@@ -9616,10 +10029,6 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
     ## cost231-propagation-loss-model.h (module 'propagation'): double ns3::Cost231PropagationLossModel::GetShadowing() [member function]
     cls.add_method('GetShadowing', 
                    'double', 
@@ -9997,8 +10406,8 @@
                    'ns3::TypeOfStation', 
                    [], 
                    is_const=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetQueue() const [member function]
-    cls.add_method('GetQueue', 
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetEdcaQueue() const [member function]
+    cls.add_method('GetEdcaQueue', 
                    'ns3::Ptr< ns3::WifiMacQueue >', 
                    [], 
                    is_const=True)
@@ -10041,6 +10450,23 @@
                    'ns3::Ptr< ns3::MsduAggregator >', 
                    [], 
                    is_const=True)
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBaAgreementExists', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPacketsInBa', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteAmpduTransfer(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduTransfer', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedsAccess() const [member function]
     cls.add_method('NeedsAccess', 
                    'bool', 
@@ -10062,6 +10488,14 @@
     cls.add_method('NotifyChannelSwitching', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifySleep() [member function]
+    cls.add_method('NotifySleep', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyWakeUp() [member function]
+    cls.add_method('NotifyWakeUp', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
                    'void', 
@@ -10074,10 +10508,10 @@
     cls.add_method('GotAck', 
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
@@ -10126,6 +10560,10 @@
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedFragmentation() const [member function]
     cls.add_method('NeedFragmentation', 
                    'bool', 
@@ -10193,6 +10631,42 @@
     cls.add_method('SendDelbaFrame', 
                    'void', 
                    [param('ns3::Mac48Address', 'addr'), param('uint8_t', 'tid'), param('bool', 'byOriginator')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist() [member function]
+    cls.add_method('GetAmpduExist', 
+                   'bool', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(bool ampdu) [member function]
+    cls.add_method('SetAmpduExist', 
+                   'void', 
+                   [param('bool', 'ampdu')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RemoveRetransmitPacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveRetransmitPacket', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::EdcaTxopN::PeekNextRetransmitPacket(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextRetransmitPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxOk(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxOk', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxFailed(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxFailed', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): int64_t ns3::EdcaTxopN::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -10419,6 +10893,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SetSupportedRates(ns3::SupportedRates * rates) [member function]
+    cls.add_method('SetSupportedRates', 
+                   'void', 
+                   [param('ns3::SupportedRates *', 'rates')])
     return
 
 def register_Ns3FixedRssLossModel_methods(root_module, cls):
@@ -11019,15 +11497,13 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## jakes-process.h (module 'propagation'): void ns3::JakesProcess::SetPropagationLossModel(ns3::Ptr<const ns3::PropagationLossModel> arg0) [member function]
+    ## jakes-process.h (module 'propagation'): void ns3::JakesProcess::SetPropagationLossModel(ns3::Ptr<const ns3::PropagationLossModel> model) [member function]
     cls.add_method('SetPropagationLossModel', 
                    'void', 
-                   [param('ns3::Ptr< ns3::PropagationLossModel const >', 'arg0')])
+                   [param('ns3::Ptr< ns3::PropagationLossModel const >', 'model')])
     return
 
 def register_Ns3JakesPropagationLossModel_methods(root_module, cls):
-    ## jakes-propagation-loss-model.h (module 'propagation'): ns3::JakesPropagationLossModel::PI [variable]
-    cls.add_static_attribute('PI', 'double const', is_const=True)
     ## jakes-propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::JakesPropagationLossModel::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -11188,6 +11664,10 @@
     cls.add_constructor([param('ns3::MacLow const &', 'arg0')])
     ## mac-low.h (module 'wifi'): ns3::MacLow::MacLow() [constructor]
     cls.add_constructor([])
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::Packet> ns3::MacLow::AggregateToAmpdu(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const hdr) [member function]
+    cls.add_method('AggregateToAmpdu', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const', 'hdr')])
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateTransmissionTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & parameters) const [member function]
     cls.add_method('CalculateTransmissionTime', 
                    'ns3::Time', 
@@ -11197,10 +11677,18 @@
     cls.add_method('CreateBlockAckAgreement', 
                    'void', 
                    [param('ns3::MgtAddBaResponseHeader const *', 'respHdr'), param('ns3::Mac48Address', 'originator'), param('uint16_t', 'startingSeq')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::DeaggregateAmpduAndReceive(ns3::Ptr<ns3::Packet> aggregatedPacket, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('DeaggregateAmpduAndReceive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::DestroyBlockAckAgreement(ns3::Mac48Address originator, uint8_t tid) [member function]
     cls.add_method('DestroyBlockAckAgreement', 
                    'void', 
                    [param('ns3::Mac48Address', 'originator'), param('uint8_t', 'tid')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::FlushAggregateQueue() [member function]
+    cls.add_method('FlushAggregateQueue', 
+                   'void', 
+                   [])
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetAckTimeout() const [member function]
     cls.add_method('GetAckTimeout', 
                    'ns3::Time', 
@@ -11236,6 +11724,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
@@ -11273,10 +11766,10 @@
     cls.add_method('ReceiveError', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'rxSnr')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble, bool ampduSubframe) [member function]
     cls.add_method('ReceiveOk', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble'), param('bool', 'ampduSubframe')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::RegisterBlockAckListenerForAc(ns3::AcIndex ac, ns3::MacLowBlockAckEventListener * listener) [member function]
     cls.add_method('RegisterBlockAckListenerForAc', 
                    'void', 
@@ -11285,6 +11778,10 @@
     cls.add_method('RegisterDcfListener', 
                    'void', 
                    [param('ns3::MacLowDcfListener *', 'listener')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ResetPhy() [member function]
+    cls.add_method('ResetPhy', 
+                   'void', 
+                   [])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -11313,6 +11810,10 @@
     cls.add_method('SetCtsToSelfSupported', 
                    'void', 
                    [param('bool', 'enable')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggregator) [member function]
+    cls.add_method('SetMpduAggregator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggregator')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -11348,7 +11849,13 @@
     ## mac-low.h (module 'wifi'): void ns3::MacLow::StartTransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters parameters, ns3::MacLowTransmissionListener * listener) [member function]
     cls.add_method('StartTransmission', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLow::StopAggregation(ns3::Ptr<ns3::Packet const> peekedPacket, ns3::WifiMacHeader peekedHdr, ns3::Ptr<ns3::Packet> aggregatedPacket, uint16_t size) const [member function]
+    cls.add_method('StopAggregation', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'peekedPacket'), param('ns3::WifiMacHeader', 'peekedHdr'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint16_t', 'size')], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
@@ -11373,10 +11880,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
@@ -11430,6 +11937,11 @@
                    'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
+    ## minstrel-wifi-manager.h (module 'wifi'): bool ns3::MinstrelWifiManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * st, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedDataRetransmission', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'st'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoReportDataFailed', 
                    'void', 
@@ -11537,6 +12049,75 @@
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3MpduAggregator_methods(root_module, cls):
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator::MpduAggregator() [constructor]
+    cls.add_constructor([])
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator::MpduAggregator(ns3::MpduAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MpduAggregator const &', 'arg0')])
+    ## mpdu-aggregator.h (module 'wifi'): void ns3::MpduAggregator::AddHeaderAndPad(ns3::Ptr<ns3::Packet> packet, bool last) [member function]
+    cls.add_method('AddHeaderAndPad', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('bool', 'last')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): bool ns3::MpduAggregator::Aggregate(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Aggregate', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): uint32_t ns3::MpduAggregator::CalculatePadding(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('CalculatePadding', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): bool ns3::MpduAggregator::CanBeAggregated(uint32_t packetSize, ns3::Ptr<ns3::Packet> aggregatedPacket, uint8_t blockAckSize) [member function]
+    cls.add_method('CanBeAggregated', 
+                   'bool', 
+                   [param('uint32_t', 'packetSize'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint8_t', 'blockAckSize')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): static std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::AmpduSubframeHeader>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::AmpduSubframeHeader> > > ns3::MpduAggregator::Deaggregate(ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Deaggregate', 
+                   'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3MpduStandardAggregator_methods(root_module, cls):
+    ## mpdu-standard-aggregator.h (module 'wifi'): ns3::MpduStandardAggregator::MpduStandardAggregator(ns3::MpduStandardAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MpduStandardAggregator const &', 'arg0')])
+    ## mpdu-standard-aggregator.h (module 'wifi'): ns3::MpduStandardAggregator::MpduStandardAggregator() [constructor]
+    cls.add_constructor([])
+    ## mpdu-standard-aggregator.h (module 'wifi'): void ns3::MpduStandardAggregator::AddHeaderAndPad(ns3::Ptr<ns3::Packet> packet, bool last) [member function]
+    cls.add_method('AddHeaderAndPad', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('bool', 'last')], 
+                   is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): bool ns3::MpduStandardAggregator::Aggregate(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Aggregate', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): uint32_t ns3::MpduStandardAggregator::CalculatePadding(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('CalculatePadding', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): bool ns3::MpduStandardAggregator::CanBeAggregated(uint32_t packetSize, ns3::Ptr<ns3::Packet> aggregatedPacket, uint8_t blockAckSize) [member function]
+    cls.add_method('CanBeAggregated', 
+                   'bool', 
+                   [param('uint32_t', 'packetSize'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint8_t', 'blockAckSize')], 
+                   is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduStandardAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3MsduAggregator_methods(root_module, cls):
     ## msdu-aggregator.h (module 'wifi'): ns3::MsduAggregator::MsduAggregator() [constructor]
     cls.add_constructor([])
@@ -12153,11 +12734,6 @@
                    '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', 
@@ -12228,6 +12804,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -12273,6 +12854,78 @@
                    is_virtual=True)
     return
 
+def register_Ns3ParfWifiManager_methods(root_module, cls):
+    ## parf-wifi-manager.h (module 'wifi'): ns3::ParfWifiManager::ParfWifiManager(ns3::ParfWifiManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ParfWifiManager const &', 'arg0')])
+    ## parf-wifi-manager.h (module 'wifi'): ns3::ParfWifiManager::ParfWifiManager() [constructor]
+    cls.add_constructor([])
+    ## parf-wifi-manager.h (module 'wifi'): static ns3::TypeId ns3::ParfWifiManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetupPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::ParfWifiManager::DoCreateStation() const [member function]
+    cls.add_method('DoCreateStation', 
+                   'ns3::WifiRemoteStation *', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::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)
+    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('DoReportDataOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('DoReportRtsOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('DoReportRxOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): bool ns3::ParfWifiManager::IsLowLatency() const [member function]
+    cls.add_method('IsLowLatency', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3RegularWifiMac_methods(root_module, cls):
     ## regular-wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::RegularWifiMac::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -12420,6 +13073,11 @@
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
     cls.add_method('SetWifiRemoteStationManager', 
                    'void', 
@@ -12759,10 +13417,10 @@
 
 def register_Ns3SupportedRates_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates() [constructor]
     cls.add_constructor([])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -12811,6 +13469,8 @@
     cls.add_method('SetBasicRate', 
                    'void', 
                    [param('uint32_t', 'bs')])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::MAX_SUPPORTED_RATES [variable]
+    cls.add_static_attribute('MAX_SUPPORTED_RATES', 'uint8_t const', is_const=True)
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::extended [variable]
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
@@ -13272,10 +13932,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## 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]
+    ## 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, uint8_t packetType, ns3::Time duration) 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::WifiTxVector', 'txVector'), 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'), param('uint8_t', 'packetType'), param('ns3::Time', 'duration')], 
                    is_const=True)
     ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
     cls.add_method('SetPropagationDelayModel', 
diff -Naur ns-3.21/src/wifi/bindings/modulegen__gcc_LP64.py ns-3.22/src/wifi/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/wifi/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -29,7 +29,7 @@
     ## 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', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF'])
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'])
     ## 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]
@@ -224,6 +224,8 @@
     module.add_class('int64x64_t', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
+    ## ampdu-tag.h (module 'wifi'): ns3::AmpduTag [class]
+    module.add_class('AmpduTag', parent=root_module['ns3::Tag'])
     ## 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]
@@ -366,10 +368,16 @@
     module.add_class('AarfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## aarfcd-wifi-manager.h (module 'wifi'): ns3::AarfcdWifiManager [class]
     module.add_class('AarfcdWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader [class]
+    module.add_class('AmpduSubframeHeader', parent=root_module['ns3::Header'])
     ## amrr-wifi-manager.h (module 'wifi'): ns3::AmrrWifiManager [class]
     module.add_class('AmrrWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## amsdu-subframe-header.h (module 'wifi'): ns3::AmsduSubframeHeader [class]
     module.add_class('AmsduSubframeHeader', parent=root_module['ns3::Header'])
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager [class]
+    module.add_class('AparfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::State [enumeration]
+    module.add_enum('State', ['High', 'Low', 'Spread'], outer_class=root_module['ns3::AparfWifiManager'])
     ## arf-wifi-manager.h (module 'wifi'): ns3::ArfWifiManager [class]
     module.add_class('ArfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## athstats-helper.h (module 'wifi'): ns3::AthstatsWifiTraceSink [class]
@@ -398,8 +406,6 @@
     module.add_class('ConstantSpeedPropagationDelayModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationDelayModel'])
     ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel [class]
     module.add_class('Cost231PropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
-    ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel::Environment [enumeration]
-    module.add_enum('Environment', ['SubUrban', 'MediumCity', 'Metropolitan'], outer_class=root_module['ns3::Cost231PropagationLossModel'], import_from_module='ns.propagation')
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckRequestHeader [class]
     module.add_class('CtrlBAckRequestHeader', parent=root_module['ns3::Header'])
     ## ctrl-headers.h (module 'wifi'): ns3::CtrlBAckResponseHeader [class]
@@ -486,6 +492,10 @@
     module.add_class('MinstrelWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
     module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator [class]
+    module.add_class('MpduAggregator', parent=root_module['ns3::Object'])
+    ## mpdu-standard-aggregator.h (module 'wifi'): ns3::MpduStandardAggregator [class]
+    module.add_class('MpduStandardAggregator', parent=root_module['ns3::MpduAggregator'])
     ## msdu-aggregator.h (module 'wifi'): ns3::MsduAggregator [class]
     module.add_class('MsduAggregator', parent=root_module['ns3::Object'])
     ## propagation-loss-model.h (module 'propagation'): ns3::NakagamiPropagationLossModel [class]
@@ -516,6 +526,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'])
+    ## parf-wifi-manager.h (module 'wifi'): ns3::ParfWifiManager [class]
+    module.add_class('ParfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## regular-wifi-mac.h (module 'wifi'): ns3::RegularWifiMac [class]
     module.add_class('RegularWifiMac', parent=root_module['ns3::WifiMac'])
     ## rraa-wifi-manager.h (module 'wifi'): ns3::RraaWifiManager [class]
@@ -570,10 +582,14 @@
     module.add_class('DcaTxop', parent=root_module['ns3::Dcf'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
     module.add_container('ns3::WifiMcsList', 'unsigned char', container_type=u'vector')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader >', container_type=u'list')
     module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader >', container_type=u'list')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
     typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
+    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', u'ns3::MinstrelRate')
+    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', u'ns3::MinstrelRate*')
+    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', u'ns3::MinstrelRate&')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
@@ -584,9 +600,6 @@
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
-    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', u'ns3::MinstrelRate')
-    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', u'ns3::MinstrelRate*')
-    typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', u'ns3::MinstrelRate&')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
@@ -741,6 +754,7 @@
     register_Ns3YansWifiPhyHelper_methods(root_module, root_module['ns3::YansWifiPhyHelper'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3AmpduTag_methods(root_module, root_module['ns3::AmpduTag'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3MgtAddBaRequestHeader_methods(root_module, root_module['ns3::MgtAddBaRequestHeader'])
@@ -800,8 +814,10 @@
     register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
     register_Ns3AarfWifiManager_methods(root_module, root_module['ns3::AarfWifiManager'])
     register_Ns3AarfcdWifiManager_methods(root_module, root_module['ns3::AarfcdWifiManager'])
+    register_Ns3AmpduSubframeHeader_methods(root_module, root_module['ns3::AmpduSubframeHeader'])
     register_Ns3AmrrWifiManager_methods(root_module, root_module['ns3::AmrrWifiManager'])
     register_Ns3AmsduSubframeHeader_methods(root_module, root_module['ns3::AmsduSubframeHeader'])
+    register_Ns3AparfWifiManager_methods(root_module, root_module['ns3::AparfWifiManager'])
     register_Ns3ArfWifiManager_methods(root_module, root_module['ns3::ArfWifiManager'])
     register_Ns3AthstatsWifiTraceSink_methods(root_module, root_module['ns3::AthstatsWifiTraceSink'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
@@ -859,6 +875,8 @@
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
     register_Ns3MinstrelWifiManager_methods(root_module, root_module['ns3::MinstrelWifiManager'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
+    register_Ns3MpduAggregator_methods(root_module, root_module['ns3::MpduAggregator'])
+    register_Ns3MpduStandardAggregator_methods(root_module, root_module['ns3::MpduStandardAggregator'])
     register_Ns3MsduAggregator_methods(root_module, root_module['ns3::MsduAggregator'])
     register_Ns3NakagamiPropagationLossModel_methods(root_module, root_module['ns3::NakagamiPropagationLossModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -873,6 +891,7 @@
     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_Ns3ParfWifiManager_methods(root_module, root_module['ns3::ParfWifiManager'])
     register_Ns3RegularWifiMac_methods(root_module, root_module['ns3::RegularWifiMac'])
     register_Ns3RraaWifiManager_methods(root_module, root_module['ns3::RraaWifiManager'])
     register_Ns3Ssid_methods(root_module, root_module['ns3::Ssid'])
@@ -1211,11 +1230,21 @@
                    'uint16_t', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): uint16_t ns3::BlockAckAgreement::GetWinEnd() const [member function]
+    cls.add_method('GetWinEnd', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsAmsduSupported() const [member function]
     cls.add_method('IsAmsduSupported', 
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsHtSupported() const [member function]
+    cls.add_method('IsHtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## block-ack-agreement.h (module 'wifi'): bool ns3::BlockAckAgreement::IsImmediateBlockAck() const [member function]
     cls.add_method('IsImmediateBlockAck', 
                    'bool', 
@@ -1233,6 +1262,10 @@
     cls.add_method('SetDelayedBlockAck', 
                    'void', 
                    [])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetHtSupported(bool htSupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('bool', 'htSupported')])
     ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetImmediateBlockAck() [member function]
     cls.add_method('SetImmediateBlockAck', 
                    'void', 
@@ -1245,6 +1278,10 @@
     cls.add_method('SetTimeout', 
                    'void', 
                    [param('uint16_t', 'timeout')])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetWinEnd(uint16_t seq) [member function]
+    cls.add_method('SetWinEnd', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
     return
 
 def register_Ns3BlockAckCache_methods(root_module, cls):
@@ -1256,6 +1293,10 @@
     cls.add_method('FillBlockAckBitmap', 
                    'void', 
                    [param('ns3::CtrlBAckResponseHeader *', 'blockAckHeader')])
+    ## block-ack-cache.h (module 'wifi'): uint16_t ns3::BlockAckCache::GetWinStart() [member function]
+    cls.add_method('GetWinStart', 
+                   'uint16_t', 
+                   [])
     ## block-ack-cache.h (module 'wifi'): void ns3::BlockAckCache::Init(uint16_t winStart, uint16_t winSize) [member function]
     cls.add_method('Init', 
                    'void', 
@@ -1273,6 +1314,14 @@
 def register_Ns3BlockAckManager_methods(root_module, cls):
     ## block-ack-manager.h (module 'wifi'): ns3::BlockAckManager::BlockAckManager() [constructor]
     cls.add_constructor([])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::AlreadyExists(uint16_t currentSeq, ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('AlreadyExists', 
+                   'bool', 
+                   [param('uint16_t', 'currentSeq'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CompleteAmpduExchange(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduExchange', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::CreateAgreement(ns3::MgtAddBaRequestHeader const * reqHdr, ns3::Mac48Address recipient) [member function]
     cls.add_method('CreateAgreement', 
                    'void', 
@@ -1329,6 +1378,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::NeedBarRetransmission(uint8_t tid, uint16_t seqNumber, ns3::Mac48Address recipient) [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('uint16_t', 'seqNumber'), param('ns3::Mac48Address', 'recipient')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyAgreementEstablished(ns3::Mac48Address recipient, uint8_t tid, uint16_t startingSeq) [member function]
     cls.add_method('NotifyAgreementEstablished', 
                    'void', 
@@ -1337,14 +1390,22 @@
     cls.add_method('NotifyAgreementUnsuccessful', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('NotifyGotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber) [member function]
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, ns3::WifiMacHeader::QosAckPolicy policy) [member function]
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
-                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber')])
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('uint16_t', 'nextSeqNumber'), param('ns3::WifiMacHeader::QosAckPolicy', 'policy')])
+    ## block-ack-manager.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::BlockAckManager::PeekNextPacket(ns3::WifiMacHeader & hdr, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'hdr'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## block-ack-manager.h (module 'wifi'): bool ns3::BlockAckManager::RemovePacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemovePacket', 
+                   'bool', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetBlockAckInactivityCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetBlockAckInactivityCallback', 
                    'void', 
@@ -1369,14 +1430,26 @@
     cls.add_method('SetQueue', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiMacQueue >', 'queue')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxFailedCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxFailedCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxMiddle(ns3::MacTxMiddle * txMiddle) [member function]
     cls.add_method('SetTxMiddle', 
                    'void', 
                    [param('ns3::MacTxMiddle *', 'txMiddle')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetTxOkCallback(ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    cls.add_method('SetTxOkCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetUnblockDestinationCallback(ns3::Callback<void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('SetUnblockDestinationCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Mac48Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> manager) [member function]
+    cls.add_method('SetWifiRemoteStationManager', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiRemoteStationManager >', 'manager')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::StorePacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr, ns3::Time tStamp) [member function]
     cls.add_method('StorePacket', 
                    'void', 
@@ -1881,6 +1954,10 @@
     cls.add_method('NotifyWakeupNow', 
                    'void', 
                    [])
+    ## dcf-manager.h (module 'wifi'): void ns3::DcfManager::RemovePhyListener(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('RemovePhyListener', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')])
     ## dcf-manager.h (module 'wifi'): void ns3::DcfManager::RequestAccess(ns3::DcfState * state) [member function]
     cls.add_method('RequestAccess', 
                    'void', 
@@ -1981,6 +2058,16 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## dcf-manager.h (module 'wifi'): void ns3::DcfState::DoNotifySleep() [member function]
+    cls.add_method('DoNotifySleep', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## dcf-manager.h (module 'wifi'): void ns3::DcfState::DoNotifyWakeUp() [member function]
+    cls.add_method('DoNotifyWakeUp', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3DsssErrorRateModel_methods(root_module, cls):
@@ -2659,6 +2746,61 @@
                    'void', 
                    [param('ns3::Mac48Address', 'originator'), param('uint8_t', 'tid')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::CompleteTransfer(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('CompleteTransfer', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLowBlockAckEventListener::GetBlockAckAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBlockAckAgreementExists', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint32_t ns3::MacLowBlockAckEventListener::GetNOutstandingPackets(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint32_t ns3::MacLowBlockAckEventListener::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint16_t ns3::MacLowBlockAckEventListener::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::MacLowBlockAckEventListener::GetQueue() [member function]
+    cls.add_method('GetQueue', 
+                   'ns3::Ptr< ns3::WifiMacQueue >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::MacLowBlockAckEventListener::PeekNextPacketInBaQueue(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextPacketInBaQueue', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): uint16_t ns3::MacLowBlockAckEventListener::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::RemoveFromBaQueue(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveFromBaQueue', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): void ns3::MacLowBlockAckEventListener::SetAmpdu(bool ampdu) [member function]
+    cls.add_method('SetAmpdu', 
+                   'void', 
+                   [param('bool', 'ampdu')], 
+                   is_virtual=True)
     return
 
 def register_Ns3MacLowDcfListener_methods(root_module, cls):
@@ -2718,10 +2860,10 @@
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, ns3::WifiMode txMode) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source')], 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('ns3::WifiMode', 'txMode')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
@@ -3004,10 +3146,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -3433,10 +3575,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -3505,8 +3647,6 @@
     cls.add_constructor([param('ns3::RateInfo const &', 'arg0')])
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::adjustedRetryCount [variable]
     cls.add_instance_attribute('adjustedRetryCount', 'uint32_t', is_const=False)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::attemptHist [variable]
-    cls.add_instance_attribute('attemptHist', 'uint64_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::ewmaProb [variable]
     cls.add_instance_attribute('ewmaProb', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::numRateAttempt [variable]
@@ -3515,16 +3655,10 @@
     cls.add_instance_attribute('numRateSuccess', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::perfectTxTime [variable]
     cls.add_instance_attribute('perfectTxTime', 'ns3::Time', is_const=False)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prevNumRateAttempt [variable]
-    cls.add_instance_attribute('prevNumRateAttempt', 'uint32_t', is_const=False)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prevNumRateSuccess [variable]
-    cls.add_instance_attribute('prevNumRateSuccess', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prob [variable]
     cls.add_instance_attribute('prob', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::retryCount [variable]
     cls.add_instance_attribute('retryCount', 'uint32_t', is_const=False)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::successHist [variable]
-    cls.add_instance_attribute('successHist', 'uint64_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::throughput [variable]
     cls.add_instance_attribute('throughput', 'uint32_t', is_const=False)
     return
@@ -3781,7 +3915,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -3832,6 +3971,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -3908,6 +4052,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -3942,6 +4090,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -4106,10 +4256,10 @@
     cls.add_constructor([])
     ## wifi-helper.h (module 'wifi'): ns3::WifiPhyHelper::WifiPhyHelper(ns3::WifiPhyHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiPhyHelper const &', 'arg0')])
-    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::WifiNetDevice> device) const [member function]
+    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::WifiNetDevice >', 'device')], 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
@@ -4206,6 +4356,8 @@
     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_ness [variable]
+    cls.add_instance_attribute('m_ness', 'uint32_t', 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]
@@ -4332,6 +4484,11 @@
                    'ns3::YansWifiPhyHelper', 
                    [], 
                    is_static=True)
+    ## yans-wifi-helper.h (module 'wifi'): uint32_t ns3::YansWifiPhyHelper::GetPcapDataLinkType() const [member function]
+    cls.add_method('GetPcapDataLinkType', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
     cls.add_method('Set', 
                    'void', 
@@ -4352,10 +4509,10 @@
     cls.add_method('SetPcapDataLinkType', 
                    'void', 
                    [param('ns3::YansWifiPhyHelper::SupportedPcapDataLinkTypes', 'dlt')])
-    ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::WifiNetDevice> device) const [member function]
+    ## yans-wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::YansWifiPhyHelper::Create(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> device) const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiPhy >', 
-                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::WifiNetDevice >', 'device')], 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'device')], 
                    is_const=True, visibility='private', is_virtual=True)
     ## yans-wifi-helper.h (module 'wifi'): void ns3::YansWifiPhyHelper::EnableAsciiInternal(ns3::Ptr<ns3::OutputStreamWrapper> stream, std::string prefix, ns3::Ptr<ns3::NetDevice> nd, bool explicitFilename) [member function]
     cls.add_method('EnableAsciiInternal', 
@@ -4443,6 +4600,61 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
+def register_Ns3AmpduTag_methods(root_module, cls):
+    ## ampdu-tag.h (module 'wifi'): ns3::AmpduTag::AmpduTag(ns3::AmpduTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AmpduTag const &', 'arg0')])
+    ## ampdu-tag.h (module 'wifi'): ns3::AmpduTag::AmpduTag() [constructor]
+    cls.add_constructor([])
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): bool ns3::AmpduTag::GetAmpdu() const [member function]
+    cls.add_method('GetAmpdu', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ampdu-tag.h (module 'wifi'): ns3::TypeId ns3::AmpduTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): uint8_t ns3::AmpduTag::GetNoOfMpdus() const [member function]
+    cls.add_method('GetNoOfMpdus', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ampdu-tag.h (module 'wifi'): uint32_t ns3::AmpduTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): static ns3::TypeId ns3::AmpduTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetAmpdu(bool supported) [member function]
+    cls.add_method('SetAmpdu', 
+                   'void', 
+                   [param('bool', 'supported')])
+    ## ampdu-tag.h (module 'wifi'): void ns3::AmpduTag::SetNoOfMpdus(uint8_t noofmpdus) [member function]
+    cls.add_method('SetNoOfMpdus', 
+                   'void', 
+                   [param('uint8_t', 'noofmpdus')])
+    return
+
 def register_Ns3Chunk_methods(root_module, cls):
     ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
     cls.add_constructor([])
@@ -5320,6 +5532,10 @@
     cls.add_method('SetBlockAckThresholdForAc', 
                    'void', 
                    [param('ns3::AcIndex', 'ac'), param('uint8_t', 'threshold')])
+    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMpduAggregatorForAc(ns3::AcIndex ac, std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetMpduAggregatorForAc', 
+                   'void', 
+                   [param('ns3::AcIndex', 'ac'), param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()')])
     ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMsduAggregatorForAc(ns3::AcIndex ac, std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue()) [member function]
     cls.add_method('SetMsduAggregatorForAc', 
                    'void', 
@@ -6409,6 +6625,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiMac::GetWifiPhy() const [member function]
+    cls.add_method('GetWifiPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): ns3::Ptr<ns3::WifiRemoteStationManager> ns3::WifiMac::GetWifiRemoteStationManager() const [member function]
+    cls.add_method('GetWifiRemoteStationManager', 
+                   'ns3::Ptr< ns3::WifiRemoteStationManager >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::NotifyPromiscRx(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyPromiscRx', 
                    'void', 
@@ -6429,6 +6655,11 @@
     cls.add_method('NotifyTxDrop', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -7018,10 +7249,10 @@
     cls.add_method('Peek', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [param('ns3::WifiMacHeader *', 'hdr')])
-    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr) [member function]
+    ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekByTidAndAddress(ns3::WifiMacHeader * hdr, uint8_t tid, ns3::WifiMacHeader::AddressType type, ns3::Mac48Address addr, ns3::Time * timestamp) [member function]
     cls.add_method('PeekByTidAndAddress', 
                    'ns3::Ptr< ns3::Packet const >', 
-                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr')])
+                   [param('ns3::WifiMacHeader *', 'hdr'), param('uint8_t', 'tid'), param('ns3::WifiMacHeader::AddressType', 'type'), param('ns3::Mac48Address', 'addr'), param('ns3::Time *', 'timestamp')])
     ## wifi-mac-queue.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::WifiMacQueue::PeekFirstAvailable(ns3::WifiMacHeader * hdr, ns3::Time & tStamp, ns3::QosBlockedDestinations const * blockedPackets) [member function]
     cls.add_method('PeekFirstAvailable', 
                    'ns3::Ptr< ns3::Packet const >', 
@@ -7106,11 +7337,10 @@
                    '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::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -7136,6 +7366,11 @@
                    'uint16_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -7556,14 +7791,13 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static double ns3::WifiPhy::GetPayloadDurationMicroSeconds(uint32_t size, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPayloadDurationMicroSeconds', 
-                   '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', 
-                   'uint32_t', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHeaderDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
@@ -7571,19 +7805,19 @@
                    '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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpHtSigHeaderDuration', 
+                   'ns3::Time', 
                    [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')], 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
+                   'ns3::Time', 
+                   [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', 
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpPreambleDuration', 
+                   'ns3::Time', 
                    [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
@@ -7698,10 +7932,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
     cls.add_method('SetChannelBonding', 
@@ -7763,6 +7997,11 @@
                    'void', 
                    [param('bool', 'stbc')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -7869,6 +8108,10 @@
     cls.add_method('SwitchToTx', 
                    'void', 
                    [param('ns3::Time', 'txDuration'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')])
     ## 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
@@ -7878,6 +8121,10 @@
     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::AddAllSupportedModes(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedModes', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
@@ -8136,6 +8383,11 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
@@ -8156,6 +8408,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiRemoteStationManager::GetMac() const [member function]
+    cls.add_method('GetMac', 
+                   'ns3::Ptr< ns3::WifiMac >', 
+                   [], 
+                   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', 
@@ -8171,6 +8428,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNess(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNess', 
+                   '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', 
@@ -8181,6 +8443,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   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', 
@@ -8403,6 +8670,11 @@
                    'uint16_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetChannelSwitchDelay() const [member function]
+    cls.add_method('GetChannelSwitchDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -8597,10 +8869,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
                    is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetCcaMode1Threshold(double threshold) [member function]
     cls.add_method('SetCcaMode1Threshold', 
@@ -8710,10 +8982,15 @@
     cls.add_method('SetTxPowerStart', 
                    'void', 
                    [param('double', 'start')])
-    ## 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]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, ns3::Time rxDuration) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('ns3::Time', 'rxDuration')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
+    cls.add_method('UnregisterListener', 
+                   'void', 
+                   [param('ns3::WifiPhyListener *', 'listener')], 
+                   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', 
@@ -8724,6 +9001,11 @@
                    'void', 
                    [], 
                    visibility='private', is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3ZetaRandomVariable_methods(root_module, cls):
@@ -8936,6 +9218,70 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3AmpduSubframeHeader_methods(root_module, cls):
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader::AmpduSubframeHeader(ns3::AmpduSubframeHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AmpduSubframeHeader const &', 'arg0')])
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::AmpduSubframeHeader::AmpduSubframeHeader() [constructor]
+    cls.add_constructor([])
+    ## ampdu-subframe-header.h (module 'wifi'): uint32_t ns3::AmpduSubframeHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint8_t ns3::AmpduSubframeHeader::GetCrc() const [member function]
+    cls.add_method('GetCrc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): ns3::TypeId ns3::AmpduSubframeHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint16_t ns3::AmpduSubframeHeader::GetLength() const [member function]
+    cls.add_method('GetLength', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint32_t ns3::AmpduSubframeHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): uint8_t ns3::AmpduSubframeHeader::GetSig() const [member function]
+    cls.add_method('GetSig', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ampdu-subframe-header.h (module 'wifi'): static ns3::TypeId ns3::AmpduSubframeHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetCrc(uint8_t crc) [member function]
+    cls.add_method('SetCrc', 
+                   'void', 
+                   [param('uint8_t', 'crc')])
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetLength(uint16_t length) [member function]
+    cls.add_method('SetLength', 
+                   'void', 
+                   [param('uint16_t', 'length')])
+    ## ampdu-subframe-header.h (module 'wifi'): void ns3::AmpduSubframeHeader::SetSig() [member function]
+    cls.add_method('SetSig', 
+                   'void', 
+                   [])
+    return
+
 def register_Ns3AmrrWifiManager_methods(root_module, cls):
     ## amrr-wifi-manager.h (module 'wifi'): ns3::AmrrWifiManager::AmrrWifiManager(ns3::AmrrWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AmrrWifiManager const &', 'arg0')])
@@ -9067,6 +9413,78 @@
                    [param('ns3::Mac48Address', 'to')])
     return
 
+def register_Ns3AparfWifiManager_methods(root_module, cls):
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::AparfWifiManager(ns3::AparfWifiManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AparfWifiManager const &', 'arg0')])
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::AparfWifiManager::AparfWifiManager() [constructor]
+    cls.add_constructor([])
+    ## aparf-wifi-manager.h (module 'wifi'): static ns3::TypeId ns3::AparfWifiManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetupPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::AparfWifiManager::DoCreateStation() const [member function]
+    cls.add_method('DoCreateStation', 
+                   'ns3::WifiRemoteStation *', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::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)
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('DoReportDataOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('DoReportRtsOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): void ns3::AparfWifiManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('DoReportRxOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
+                   visibility='private', is_virtual=True)
+    ## aparf-wifi-manager.h (module 'wifi'): bool ns3::AparfWifiManager::IsLowLatency() const [member function]
+    cls.add_method('IsLowLatency', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3ArfWifiManager_methods(root_module, cls):
     ## arf-wifi-manager.h (module 'wifi'): ns3::ArfWifiManager::ArfWifiManager(ns3::ArfWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ArfWifiManager const &', 'arg0')])
@@ -9579,14 +9997,14 @@
     cls.add_method('SetSSAntennaHeight', 
                    'void', 
                    [param('double', 'height')])
-    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetEnvironment(ns3::Cost231PropagationLossModel::Environment env) [member function]
-    cls.add_method('SetEnvironment', 
-                   'void', 
-                   [param('ns3::Cost231PropagationLossModel::Environment', 'env')])
     ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double lambda) [member function]
     cls.add_method('SetLambda', 
                    'void', 
                    [param('double', 'lambda')])
+    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double frequency, double speed) [member function]
+    cls.add_method('SetLambda', 
+                   'void', 
+                   [param('double', 'frequency'), param('double', 'speed')])
     ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetMinDistance(double minDistance) [member function]
     cls.add_method('SetMinDistance', 
                    'void', 
@@ -9601,11 +10019,6 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## cost231-propagation-loss-model.h (module 'propagation'): ns3::Cost231PropagationLossModel::Environment ns3::Cost231PropagationLossModel::GetEnvironment() const [member function]
-    cls.add_method('GetEnvironment', 
-                   'ns3::Cost231PropagationLossModel::Environment', 
-                   [], 
-                   is_const=True)
     ## cost231-propagation-loss-model.h (module 'propagation'): double ns3::Cost231PropagationLossModel::GetMinDistance() const [member function]
     cls.add_method('GetMinDistance', 
                    'double', 
@@ -9616,10 +10029,6 @@
                    'double', 
                    [], 
                    is_const=True)
-    ## cost231-propagation-loss-model.h (module 'propagation'): void ns3::Cost231PropagationLossModel::SetLambda(double frequency, double speed) [member function]
-    cls.add_method('SetLambda', 
-                   'void', 
-                   [param('double', 'frequency'), param('double', 'speed')])
     ## cost231-propagation-loss-model.h (module 'propagation'): double ns3::Cost231PropagationLossModel::GetShadowing() [member function]
     cls.add_method('GetShadowing', 
                    'double', 
@@ -9997,8 +10406,8 @@
                    'ns3::TypeOfStation', 
                    [], 
                    is_const=True)
-    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetQueue() const [member function]
-    cls.add_method('GetQueue', 
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::WifiMacQueue> ns3::EdcaTxopN::GetEdcaQueue() const [member function]
+    cls.add_method('GetEdcaQueue', 
                    'ns3::Ptr< ns3::WifiMacQueue >', 
                    [], 
                    is_const=True)
@@ -10041,6 +10450,23 @@
                    'ns3::Ptr< ns3::MsduAggregator >', 
                    [], 
                    is_const=True)
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetBaAgreementExists', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
+    cls.add_method('GetNOutstandingPacketsInBa', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
+    ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNRetryNeededPackets(ns3::Mac48Address recipient, uint8_t tid) const [member function]
+    cls.add_method('GetNRetryNeededPackets', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')], 
+                   is_const=True)
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteAmpduTransfer(ns3::Mac48Address recipient, uint8_t tid) [member function]
+    cls.add_method('CompleteAmpduTransfer', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedsAccess() const [member function]
     cls.add_method('NeedsAccess', 
                    'bool', 
@@ -10062,6 +10488,14 @@
     cls.add_method('NotifyChannelSwitching', 
                    'void', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifySleep() [member function]
+    cls.add_method('NotifySleep', 
+                   'void', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::NotifyWakeUp() [member function]
+    cls.add_method('NotifyWakeUp', 
+                   'void', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
                    'void', 
@@ -10074,10 +10508,10 @@
     cls.add_method('GotAck', 
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient) [member function]
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient')])
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
@@ -10126,6 +10560,10 @@
     cls.add_method('NeedDataRetransmission', 
                    'bool', 
                    [])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedBarRetransmission() [member function]
+    cls.add_method('NeedBarRetransmission', 
+                   'bool', 
+                   [])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedFragmentation() const [member function]
     cls.add_method('NeedFragmentation', 
                    'bool', 
@@ -10193,6 +10631,42 @@
     cls.add_method('SendDelbaFrame', 
                    'void', 
                    [param('ns3::Mac48Address', 'addr'), param('uint8_t', 'tid'), param('bool', 'byOriginator')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::CompleteMpduTx(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader hdr, ns3::Time tstamp) [member function]
+    cls.add_method('CompleteMpduTx', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')])
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist() [member function]
+    cls.add_method('GetAmpduExist', 
+                   'bool', 
+                   [])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(bool ampdu) [member function]
+    cls.add_method('SetAmpduExist', 
+                   'void', 
+                   [param('bool', 'ampdu')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('GetNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::PeekNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
+    cls.add_method('PeekNextSequenceNumberfor', 
+                   'uint16_t', 
+                   [param('ns3::WifiMacHeader *', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::RemoveRetransmitPacket(uint8_t tid, ns3::Mac48Address recipient, uint16_t seqnumber) [member function]
+    cls.add_method('RemoveRetransmitPacket', 
+                   'void', 
+                   [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')])
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::Packet const> ns3::EdcaTxopN::PeekNextRetransmitPacket(ns3::WifiMacHeader & header, ns3::Mac48Address recipient, uint8_t tid, ns3::Time * timestamp) [member function]
+    cls.add_method('PeekNextRetransmitPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [param('ns3::WifiMacHeader &', 'header'), param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid'), param('ns3::Time *', 'timestamp')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxOk(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxOk', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::BaTxFailed(ns3::WifiMacHeader const & hdr) [member function]
+    cls.add_method('BaTxFailed', 
+                   'void', 
+                   [param('ns3::WifiMacHeader const &', 'hdr')])
     ## edca-txop-n.h (module 'wifi'): int64_t ns3::EdcaTxopN::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -10419,6 +10893,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## supported-rates.h (module 'wifi'): void ns3::ExtendedSupportedRatesIE::SetSupportedRates(ns3::SupportedRates * rates) [member function]
+    cls.add_method('SetSupportedRates', 
+                   'void', 
+                   [param('ns3::SupportedRates *', 'rates')])
     return
 
 def register_Ns3FixedRssLossModel_methods(root_module, cls):
@@ -11019,15 +11497,13 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## jakes-process.h (module 'propagation'): void ns3::JakesProcess::SetPropagationLossModel(ns3::Ptr<const ns3::PropagationLossModel> arg0) [member function]
+    ## jakes-process.h (module 'propagation'): void ns3::JakesProcess::SetPropagationLossModel(ns3::Ptr<const ns3::PropagationLossModel> model) [member function]
     cls.add_method('SetPropagationLossModel', 
                    'void', 
-                   [param('ns3::Ptr< ns3::PropagationLossModel const >', 'arg0')])
+                   [param('ns3::Ptr< ns3::PropagationLossModel const >', 'model')])
     return
 
 def register_Ns3JakesPropagationLossModel_methods(root_module, cls):
-    ## jakes-propagation-loss-model.h (module 'propagation'): ns3::JakesPropagationLossModel::PI [variable]
-    cls.add_static_attribute('PI', 'double const', is_const=True)
     ## jakes-propagation-loss-model.h (module 'propagation'): static ns3::TypeId ns3::JakesPropagationLossModel::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -11188,6 +11664,10 @@
     cls.add_constructor([param('ns3::MacLow const &', 'arg0')])
     ## mac-low.h (module 'wifi'): ns3::MacLow::MacLow() [constructor]
     cls.add_constructor([])
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::Packet> ns3::MacLow::AggregateToAmpdu(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const hdr) [member function]
+    cls.add_method('AggregateToAmpdu', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const', 'hdr')])
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::CalculateTransmissionTime(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters const & parameters) const [member function]
     cls.add_method('CalculateTransmissionTime', 
                    'ns3::Time', 
@@ -11197,10 +11677,18 @@
     cls.add_method('CreateBlockAckAgreement', 
                    'void', 
                    [param('ns3::MgtAddBaResponseHeader const *', 'respHdr'), param('ns3::Mac48Address', 'originator'), param('uint16_t', 'startingSeq')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::DeaggregateAmpduAndReceive(ns3::Ptr<ns3::Packet> aggregatedPacket, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('DeaggregateAmpduAndReceive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::DestroyBlockAckAgreement(ns3::Mac48Address originator, uint8_t tid) [member function]
     cls.add_method('DestroyBlockAckAgreement', 
                    'void', 
                    [param('ns3::Mac48Address', 'originator'), param('uint8_t', 'tid')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::FlushAggregateQueue() [member function]
+    cls.add_method('FlushAggregateQueue', 
+                   'void', 
+                   [])
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetAckTimeout() const [member function]
     cls.add_method('GetAckTimeout', 
                    'ns3::Time', 
@@ -11236,6 +11724,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
+    cls.add_method('GetPhy', 
+                   'ns3::Ptr< ns3::WifiPhy >', 
+                   [], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::Time ns3::MacLow::GetPifs() const [member function]
     cls.add_method('GetPifs', 
                    'ns3::Time', 
@@ -11273,10 +11766,10 @@
     cls.add_method('ReceiveError', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'rxSnr')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiMode txMode, ns3::WifiPreamble preamble, bool ampduSubframe) [member function]
     cls.add_method('ReceiveOk', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('ns3::WifiPreamble', 'preamble'), param('bool', 'ampduSubframe')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::RegisterBlockAckListenerForAc(ns3::AcIndex ac, ns3::MacLowBlockAckEventListener * listener) [member function]
     cls.add_method('RegisterBlockAckListenerForAc', 
                    'void', 
@@ -11285,6 +11778,10 @@
     cls.add_method('RegisterDcfListener', 
                    'void', 
                    [param('ns3::MacLowDcfListener *', 'listener')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ResetPhy() [member function]
+    cls.add_method('ResetPhy', 
+                   'void', 
+                   [])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetAckTimeout(ns3::Time ackTimeout) [member function]
     cls.add_method('SetAckTimeout', 
                    'void', 
@@ -11313,6 +11810,10 @@
     cls.add_method('SetCtsToSelfSupported', 
                    'void', 
                    [param('bool', 'enable')])
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggregator) [member function]
+    cls.add_method('SetMpduAggregator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggregator')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -11348,7 +11849,13 @@
     ## mac-low.h (module 'wifi'): void ns3::MacLow::StartTransmission(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr, ns3::MacLowTransmissionParameters parameters, ns3::MacLowTransmissionListener * listener) [member function]
     cls.add_method('StartTransmission', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const *', 'hdr'), param('ns3::MacLowTransmissionParameters', 'parameters'), param('ns3::MacLowTransmissionListener *', 'listener')], 
+                   is_virtual=True)
+    ## mac-low.h (module 'wifi'): bool ns3::MacLow::StopAggregation(ns3::Ptr<ns3::Packet const> peekedPacket, ns3::WifiMacHeader peekedHdr, ns3::Ptr<ns3::Packet> aggregatedPacket, uint16_t size) const [member function]
+    cls.add_method('StopAggregation', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'peekedPacket'), param('ns3::WifiMacHeader', 'peekedHdr'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint16_t', 'size')], 
+                   is_const=True)
     ## mac-low.h (module 'wifi'): ns3::WifiTxVector ns3::MacLow::GetDataTxVector(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const * hdr) const [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
@@ -11373,10 +11880,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
@@ -11430,6 +11937,11 @@
                    'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
+    ## minstrel-wifi-manager.h (module 'wifi'): bool ns3::MinstrelWifiManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * st, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedDataRetransmission', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'st'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoReportDataFailed', 
                    'void', 
@@ -11537,6 +12049,75 @@
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3MpduAggregator_methods(root_module, cls):
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator::MpduAggregator() [constructor]
+    cls.add_constructor([])
+    ## mpdu-aggregator.h (module 'wifi'): ns3::MpduAggregator::MpduAggregator(ns3::MpduAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MpduAggregator const &', 'arg0')])
+    ## mpdu-aggregator.h (module 'wifi'): void ns3::MpduAggregator::AddHeaderAndPad(ns3::Ptr<ns3::Packet> packet, bool last) [member function]
+    cls.add_method('AddHeaderAndPad', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('bool', 'last')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): bool ns3::MpduAggregator::Aggregate(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Aggregate', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): uint32_t ns3::MpduAggregator::CalculatePadding(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('CalculatePadding', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): bool ns3::MpduAggregator::CanBeAggregated(uint32_t packetSize, ns3::Ptr<ns3::Packet> aggregatedPacket, uint8_t blockAckSize) [member function]
+    cls.add_method('CanBeAggregated', 
+                   'bool', 
+                   [param('uint32_t', 'packetSize'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint8_t', 'blockAckSize')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## mpdu-aggregator.h (module 'wifi'): static std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::AmpduSubframeHeader>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::AmpduSubframeHeader> > > ns3::MpduAggregator::Deaggregate(ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Deaggregate', 
+                   'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3MpduStandardAggregator_methods(root_module, cls):
+    ## mpdu-standard-aggregator.h (module 'wifi'): ns3::MpduStandardAggregator::MpduStandardAggregator(ns3::MpduStandardAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MpduStandardAggregator const &', 'arg0')])
+    ## mpdu-standard-aggregator.h (module 'wifi'): ns3::MpduStandardAggregator::MpduStandardAggregator() [constructor]
+    cls.add_constructor([])
+    ## mpdu-standard-aggregator.h (module 'wifi'): void ns3::MpduStandardAggregator::AddHeaderAndPad(ns3::Ptr<ns3::Packet> packet, bool last) [member function]
+    cls.add_method('AddHeaderAndPad', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('bool', 'last')], 
+                   is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): bool ns3::MpduStandardAggregator::Aggregate(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Packet> aggregatedPacket) [member function]
+    cls.add_method('Aggregate', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
+                   is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): uint32_t ns3::MpduStandardAggregator::CalculatePadding(ns3::Ptr<ns3::Packet const> packet) [member function]
+    cls.add_method('CalculatePadding', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
+                   is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): bool ns3::MpduStandardAggregator::CanBeAggregated(uint32_t packetSize, ns3::Ptr<ns3::Packet> aggregatedPacket, uint8_t blockAckSize) [member function]
+    cls.add_method('CanBeAggregated', 
+                   'bool', 
+                   [param('uint32_t', 'packetSize'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint8_t', 'blockAckSize')], 
+                   is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduStandardAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3MsduAggregator_methods(root_module, cls):
     ## msdu-aggregator.h (module 'wifi'): ns3::MsduAggregator::MsduAggregator() [constructor]
     cls.add_constructor([])
@@ -12153,11 +12734,6 @@
                    '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', 
@@ -12228,6 +12804,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
@@ -12273,6 +12854,78 @@
                    is_virtual=True)
     return
 
+def register_Ns3ParfWifiManager_methods(root_module, cls):
+    ## parf-wifi-manager.h (module 'wifi'): ns3::ParfWifiManager::ParfWifiManager(ns3::ParfWifiManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ParfWifiManager const &', 'arg0')])
+    ## parf-wifi-manager.h (module 'wifi'): ns3::ParfWifiManager::ParfWifiManager() [constructor]
+    cls.add_constructor([])
+    ## parf-wifi-manager.h (module 'wifi'): static ns3::TypeId ns3::ParfWifiManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetupPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::ParfWifiManager::DoCreateStation() const [member function]
+    cls.add_method('DoCreateStation', 
+                   'ns3::WifiRemoteStation *', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::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)
+    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('DoReportDataOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('DoReportRtsOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): void ns3::ParfWifiManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('DoReportRxOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
+                   visibility='private', is_virtual=True)
+    ## parf-wifi-manager.h (module 'wifi'): bool ns3::ParfWifiManager::IsLowLatency() const [member function]
+    cls.add_method('IsLowLatency', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3RegularWifiMac_methods(root_module, cls):
     ## regular-wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::RegularWifiMac::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -12420,6 +13073,11 @@
                    'ns3::Ptr< ns3::WifiPhy >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::ResetWifiPhy() [member function]
+    cls.add_method('ResetWifiPhy', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetWifiRemoteStationManager(ns3::Ptr<ns3::WifiRemoteStationManager> stationManager) [member function]
     cls.add_method('SetWifiRemoteStationManager', 
                    'void', 
@@ -12759,10 +13417,10 @@
 
 def register_Ns3SupportedRates_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates() [constructor]
     cls.add_constructor([])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::SupportedRates(ns3::SupportedRates const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SupportedRates const &', 'arg0')])
     ## supported-rates.h (module 'wifi'): void ns3::SupportedRates::AddSupportedRate(uint32_t bs) [member function]
     cls.add_method('AddSupportedRate', 
                    'void', 
@@ -12811,6 +13469,8 @@
     cls.add_method('SetBasicRate', 
                    'void', 
                    [param('uint32_t', 'bs')])
+    ## supported-rates.h (module 'wifi'): ns3::SupportedRates::MAX_SUPPORTED_RATES [variable]
+    cls.add_static_attribute('MAX_SUPPORTED_RATES', 'uint8_t const', is_const=True)
     ## supported-rates.h (module 'wifi'): ns3::SupportedRates::extended [variable]
     cls.add_instance_attribute('extended', 'ns3::ExtendedSupportedRatesIE', is_const=False)
     return
@@ -13272,10 +13932,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## 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]
+    ## 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, uint8_t packetType, ns3::Time duration) 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::WifiTxVector', 'txVector'), 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'), param('uint8_t', 'packetType'), param('ns3::Time', 'duration')], 
                    is_const=True)
     ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
     cls.add_method('SetPropagationDelayModel', 
diff -Naur ns-3.21/src/wifi/doc/wifi.rst ns-3.22/src/wifi/doc/wifi.rst
--- ns-3.21/src/wifi/doc/wifi.rst	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/doc/wifi.rst	2015-02-05 15:46:22.000000000 -0800
@@ -19,7 +19,7 @@
 
 * basic 802.11 DCF with **infrastructure** and **adhoc** modes
 * **802.11a**, **802.11b**, **802.11g** and **802.11n** (both 2.4 and 5 GHz bands) physical layers
-* **MSDU aggregation** extension of 802.11n
+* **MSDU aggregation** and **MPDU aggregation** extensions of 802.11n
 * QoS-based EDCA and queueing extensions of **802.11e**
 * the ability to use different propagation loss models and propagation delay models,
   please see the chapter on :ref:`Propagation` for more detail
@@ -331,6 +331,38 @@
 This creates the WifiNetDevice which includes also a WifiRemoteStationManager, a
 WifiMac, and a WifiPhy (connected to the matching WifiChannel).
 
+The ``WifiHelper::SetStandard`` method set various default timing parameters as defined in the selected standard version, overwriting values that may exist or have been previously configured.
+In order to change parameters that are overwritten by ``WifiHelper::SetStandard``, this should be done post-install using ``Config::Set``::
+
+  WifiHelper wifi = WifiHelper::Default ();
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("OfdmRate65MbpsBW20MHz"), "ControlMode", StringValue("OfdmRate6_5MbpsBW20MHz"));
+  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+
+  //Install PHY and MAC
+  Ssid ssid = Ssid ("ns3-wifi");
+  mac.SetType ("ns3::StaWifiMac",
+  "Ssid", SsidValue (ssid),
+  "ActiveProbing", BooleanValue (false));
+
+  NetDeviceContainer staDevice;
+  staDevice = wifi.Install (phy, mac, wifiStaNode);
+
+  mac.SetType ("ns3::ApWifiMac",
+  "Ssid", SsidValue (ssid));
+
+  NetDeviceContainer apDevice;
+  apDevice = wifi.Install (phy, mac, wifiApNode);
+
+  //Once install is done, we overwrite the standard timing values
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Slot", TimeValue (MicroSeconds (slot)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Sifs", TimeValue (MicroSeconds (sifs)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/AckTimeout", TimeValue (MicroSeconds (ackTimeout)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/CtsTimeout", TimeValue (MicroSeconds (ctsTimeout)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/Rifs", TimeValue (MicroSeconds (rifs)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/BasicBlockAckTimeout", TimeValue (MicroSeconds (basicBlockAckTimeout)));
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/CompressedBlockAckTimeout", TimeValue (MicroSeconds (compressedBlockAckTimeout)));
+
 There are many |ns3| attributes that can be set on the above helpers to
 deviate from the default behavior; the example scripts show how to do some of
 this reconfiguration.
@@ -521,9 +553,7 @@
    *SNIR function over time.*
 
 From the SNIR function we can derive the Bit Error Rate (BER) and Packet Error Rate (PER) for
-the modulation and coding scheme being used for the transmission.  Please refer to [pei80211ofdm]_, [pei80211b]_ 
-and [lacage2006yans]_ for a detailed description of the available BER/PER models.
-
+the modulation and coding scheme being used for the transmission.  Please refer to [pei80211ofdm]_, [pei80211b]_, [lacage2006yans]_, [Haccoun]_ and [Frenger]_ for a detailed description of the available BER/PER models.
 
 WifiChannel configuration
 =========================
@@ -600,6 +630,8 @@
 * ``CaraWifiManager`` [kim2006cara]_
 * ``RraaWifiManager`` [wong2006rraa]_
 * ``AarfcdWifiManager`` [maguolo2008aarfcd]_
+* ``ParfWifiManager`` [akella2007parf]_
+* ``AparfWifiManager`` [chevillat2005aparf]_
 
 ConstantRateWifiManager
 =======================
@@ -701,7 +733,7 @@
 * PHY_RXSTART is not supported
 * 802.11e TXOP is not supported
 * 802.11n MIMO is not supported
-* MPDU aggregation is not supported
+* hybrid aggregation is not supported
 
 
 Wifi Tracing
@@ -721,6 +753,10 @@
 
 .. [lacage2006yans] \M. Lacage and T. Henderson, `Yet another Network Simulator <http://cutebugs.net/files/wns2-yans.pdf>`__ 
 
+.. [Haccoun] \D. Haccoun and G. Begin, *High-Rate Punctured Convolutional Codes for Viterbi Sequential Decoding*, IEEE Transactions on Communications, Vol. 32, Issue 3, pp.315-319.
+
+.. [Frenger] \Pâl Frenger et al., "Multi-rate Convolutional Codes".
+
 .. [ji2004sslswn] \Z. Ji, J. Zhou, M. Takai and R. Bagrodia, *Scalable simulation of large-scale wireless networks with bounded inaccuracies*, in Proc. of the Seventh ACM Symposium on Modeling, Analysis and Simulation of Wireless and Mobile Systems, October 2004.
 
 .. [linuxminstrel] `minstrel linux wireless <http://wireless.kernel.org/en/developers/Documentation/mac80211/RateControl/minstrel>`_
@@ -732,3 +768,7 @@
 .. [wong2006rraa] \ S. Wong, H. Yang, S. Lu, and V. Bharghavan, *Robust Rate Adaptation for 802.11 Wireless Networks*, in Proc. 12th Annual International Conference on Mobile Computing and Networking, 2006
 
 .. [maguolo2008aarfcd] \ F. Maguolo, M. Lacage, and T. Turletti, *Efficient collision detection for auto rate fallback algorithm*, in IEEE Symposium on Computers and Communications, 2008
+
+.. [akella2007parf] \ A. Akella, G. Judd, S. Seshan, and P. Steenkiste, 'Self-management in chaotic wireless deployments', in Wireless Networks, Kluwer Academic Publishers, 2007, 13, 737-755.  `<http://www.cs.odu.edu/~nadeem/classes/cs795-WNS-S13/papers/enter-006.pdf>`__
+
+.. [chevillat2005aparf] \  Chevillat, P.; Jelitto, J., and Truong, H. L., 'Dynamic data rate and transmit power adjustment in IEEE 802.11 wireless LANs', in International Journal of Wireless Information Networks, Springer, 2005, 12, 123-145.  `<http://www.cs.mun.ca/~yzchen/papers/papers/rate_adaptation/80211_dynamic_rate_power_adjustment_chevillat_j2005.pdf>`__
\ No newline at end of file
diff -Naur ns-3.21/src/wifi/examples/wifi-phy-test.cc ns-3.22/src/wifi/examples/wifi-phy-test.cc
--- ns-3.21/src/wifi/examples/wifi-phy-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/examples/wifi-phy-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -73,7 +73,7 @@
   WifiTxVector txVector;
   txVector.SetTxPowerLevel (m_input.txPowerLevel);
   txVector.SetMode (mode);
-  m_tx->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT);
+  m_tx->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT, 0);
 }
 
 void
@@ -178,7 +178,7 @@
   WifiTxVector txVector;
   txVector.SetTxPowerLevel (m_input.txPowerLevelA);
   txVector.SetMode (WifiMode (m_input.txModeA));
-  m_txA->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT);
+  m_txA->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT, 0);
 }
 
 void
@@ -189,7 +189,7 @@
   WifiTxVector txVector;
   txVector.SetTxPowerLevel (m_input.txPowerLevelB);
   txVector.SetMode (WifiMode (m_input.txModeB));
-  m_txB->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT);
+  m_txB->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT, 0);
 }
 
 void
diff -Naur ns-3.21/src/wifi/helper/athstats-helper.cc ns-3.22/src/wifi/helper/athstats-helper.cc
--- ns-3.21/src/wifi/helper/athstats-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/athstats-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,9 @@
 #include <fstream>
 
 
-NS_LOG_COMPONENT_DEFINE ("Athstats");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Athstats");
 
 AthstatsHelper::AthstatsHelper ()
   : m_interval (Seconds (1.0))
diff -Naur ns-3.21/src/wifi/helper/athstats-helper.h ns-3.22/src/wifi/helper/athstats-helper.h
--- ns-3.21/src/wifi/helper/athstats-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/athstats-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -193,14 +193,8 @@
   void Open (std::string const& name);
 
 private:
-  /**
-   * @internal
-   */
-  void WriteStats ();
 
-  /**
-   * @internal
-   */
+  void WriteStats ();
   void ResetCounters ();
 
   uint32_t m_txCount;
diff -Naur ns-3.21/src/wifi/helper/ht-wifi-mac-helper.h ns-3.22/src/wifi/helper/ht-wifi-mac-helper.h
--- ns-3.21/src/wifi/helper/ht-wifi-mac-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/ht-wifi-mac-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -43,7 +43,6 @@
   HtWifiMacHelper ();
 
   /**
-   * \internal
    * Destroy a HtWifiMacHelper
    */
   virtual ~HtWifiMacHelper ();
diff -Naur ns-3.21/src/wifi/helper/nqos-wifi-mac-helper.h ns-3.22/src/wifi/helper/nqos-wifi-mac-helper.h
--- ns-3.21/src/wifi/helper/nqos-wifi-mac-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/nqos-wifi-mac-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -40,7 +40,6 @@
   NqosWifiMacHelper ();
 
   /**
-   * \internal
    * Destroy a NqosWifiMacHelper.
    */
 
@@ -85,7 +84,6 @@
   ObjectFactory m_mac;
 private:
   /**
-   * \internal
    * \returns a newly-created MAC object.
    *
    * This method implements the pure virtual method defined in \ref ns3::WifiMacHelper.
diff -Naur ns-3.21/src/wifi/helper/qos-wifi-mac-helper.cc ns-3.22/src/wifi/helper/qos-wifi-mac-helper.cc
--- ns-3.21/src/wifi/helper/qos-wifi-mac-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/qos-wifi-mac-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,6 +24,8 @@
 #include "ns3/pointer.h"
 #include "ns3/boolean.h"
 #include "ns3/uinteger.h"
+#include "ns3/mpdu-aggregator.h"
+#include "ns3/mac-low.h"
 
 namespace ns3 {
 
@@ -101,6 +103,21 @@
 }
 
 void
+QosWifiMacHelper::SetMpduAggregatorForAc (enum AcIndex ac, std::string name,
+                                          std::string n0, const AttributeValue &v0,
+                                          std::string n1, const AttributeValue &v1,
+                                          std::string n2, const AttributeValue &v2,
+                                          std::string n3, const AttributeValue &v3)
+{
+  m_mpduAggregator = ObjectFactory ();
+  m_mpduAggregator.SetTypeId (name);
+  m_mpduAggregator.Set (n0, v0);
+  m_mpduAggregator.Set (n1, v1);
+  m_mpduAggregator.Set (n2, v2);
+  m_mpduAggregator.Set (n3, v3); 
+}
+
+void
 QosWifiMacHelper::SetBlockAckThresholdForAc (enum AcIndex ac, uint8_t threshold)
 {
   m_bAckThresholds[ac] = threshold;
@@ -120,6 +137,12 @@
   mac->GetAttribute (dcaAttrName, ptr);
   Ptr<EdcaTxopN> edca = ptr.Get<EdcaTxopN> ();
 
+  if (m_mpduAggregator.GetTypeId().GetUid() != 0)
+    {
+      Ptr<MpduAggregator> mpduaggregator = m_mpduAggregator.Create<MpduAggregator> ();
+      Ptr<MacLow> low = edca->Low();
+      low->SetMpduAggregator (mpduaggregator);
+    }
   if (it != m_aggregators.end ())
     {
       ObjectFactory factory = it->second;
@@ -136,7 +159,6 @@
     }
 }
 
-
 Ptr<WifiMac>
 QosWifiMacHelper::Create (void) const
 {
diff -Naur ns-3.21/src/wifi/helper/qos-wifi-mac-helper.h ns-3.22/src/wifi/helper/qos-wifi-mac-helper.h
--- ns-3.21/src/wifi/helper/qos-wifi-mac-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/qos-wifi-mac-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -43,7 +43,6 @@
   QosWifiMacHelper ();
 
   /**
-   * \internal
    * Destroy a QosWifiMacHelper
    */
   virtual ~QosWifiMacHelper ();
@@ -109,6 +108,29 @@
                                std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
                                std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
                                std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue ());
+ /**
+  * Set the class, type and attributes for the Mpdu aggregator
+  *
+  * \param ac access category for which we are setting aggregator. Possibilities
+  *  are: AC_BK, AC_BE, AC_VI, AC_VO.
+  * \param type the type of ns3::MsduAggregator to create.
+  * \param n0 the name of the attribute to set
+  * \param v0 the value of the attribute to set
+  * \param n1 the name of the attribute to set
+  * \param v1 the value of the attribute to set
+  * \param n2 the name of the attribute to set
+  * \param v2 the value of the attribute to set
+  * \param n3 the name of the attribute to set
+  * \param v3 the value of the attribute to set
+  *
+  * All the attributes specified in this method should exist
+  * in the requested aggregator.
+  */
+  void SetMpduAggregatorForAc (enum AcIndex ac, std::string type,
+                               std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
+                               std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
+                               std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
+                               std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue ()); //A-MPDU
   /**
    * This method sets value of block ack threshold for a specific access class.
    * If number of packets in the respective queue reaches this value block ack mechanism
@@ -135,7 +157,6 @@
   ObjectFactory m_mac;
 private:
   /**
-   * \internal
    * \returns a newly-created MAC object.
    *
    * This method implements the pure virtual method defined in \ref ns3::WifiMacHelper.
@@ -143,7 +164,8 @@
   virtual Ptr<WifiMac> Create (void) const;
   void Setup (Ptr<WifiMac> mac, enum AcIndex ac, std::string dcaAttrName) const;
 
-  std::map<AcIndex, ObjectFactory> m_aggregators;
+  std::map<AcIndex, ObjectFactory> m_aggregators; //!<
+  ObjectFactory m_mpduAggregator;                 //!<
   /*
    * Next maps contain, for every access category, the values for
    * block ack threshold and block ack inactivity timeout.
diff -Naur ns-3.21/src/wifi/helper/wifi-helper.cc ns-3.22/src/wifi/helper/wifi-helper.cc
--- ns-3.21/src/wifi/helper/wifi-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/wifi-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,10 +40,10 @@
 #include "ns3/simulator.h"
 #include "ns3/names.h"
 
-NS_LOG_COMPONENT_DEFINE ("WifiHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WifiHelper");
+
 WifiPhyHelper::~WifiPhyHelper ()
 {
 }
@@ -145,7 +145,7 @@
   LogComponentEnable ("AdhocWifiMac", LOG_LEVEL_ALL);
   LogComponentEnable ("AmrrWifiRemoteStation", LOG_LEVEL_ALL);
   LogComponentEnable ("ApWifiMac", LOG_LEVEL_ALL);
-  LogComponentEnable ("ns3::ArfWifiManager", LOG_LEVEL_ALL);
+  LogComponentEnable ("ArfWifiManager", LOG_LEVEL_ALL);
   LogComponentEnable ("Cara", LOG_LEVEL_ALL);
   LogComponentEnable ("DcaTxop", LOG_LEVEL_ALL);
   LogComponentEnable ("DcfManager", LOG_LEVEL_ALL);
diff -Naur ns-3.21/src/wifi/helper/wifi-helper.h ns-3.22/src/wifi/helper/wifi-helper.h
--- ns-3.21/src/wifi/helper/wifi-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/wifi-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -55,8 +55,12 @@
    *
    * Subclasses must implement this method to allow the ns3::WifiHelper class
    * to create PHY objects from ns3::WifiHelper::Install.
+   *
+   * Typically the device type will be of class WifiNetDevice but the
+   * type of the pointer is generalized so that this method may be used
+   * by other Wifi device variants such as WaveNetDevice.
    */
-  virtual Ptr<WifiPhy> Create (Ptr<Node> node, Ptr<WifiNetDevice> device) const = 0;
+  virtual Ptr<WifiPhy> Create (Ptr<Node> node, Ptr<NetDevice> device) const = 0;
 };
 
 /**
@@ -160,11 +164,29 @@
    */
   virtual NetDeviceContainer Install (const WifiPhyHelper &phy,
                               const WifiMacHelper &mac, std::string nodeName) const;
-
   /**
    * \param standard the phy standard to configure during installation
    *
-   * By default, all objects are configured for 802.11a
+   * This method sets standards-compliant defaults for WifiMac
+   * parameters such as sifs time, slot time, timeout values, etc.,
+   * based on the standard selected.  It results in
+   * WifiMac::ConfigureStandard(standard) being called on each
+   * installed mac object.
+   *
+   * The default standard of 802.11a will be applied if SetStandard()
+   * is not called.
+   *
+   * Note that WifiMac::ConfigureStandard () will overwrite certain
+   * defaults in the attribute system, so if a user wants to manipulate
+   * any default values affected by ConfigureStandard() while using this
+   * helper, the user should use a post-install configuration such as
+   * Config::Set() on any objects that this helper creates, such as:
+   * \code
+   * Config::Set ("/NodeList/0/DeviceList/0/$ns3::WifiNetDevice/Mac/Slot", TimeValue (MicroSeconds (slot)));
+   * \endcode
+   *
+   * \sa WifiMac::ConfigureStandard
+   * \sa Config::Set
    */
   virtual void SetStandard (enum WifiPhyStandard standard);
 
diff -Naur ns-3.21/src/wifi/helper/yans-wifi-helper.cc ns-3.22/src/wifi/helper/yans-wifi-helper.cc
--- ns-3.21/src/wifi/helper/yans-wifi-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/yans-wifi-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,10 @@
 #include "ns3/abort.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("YansWifiHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("YansWifiHelper");
+
 static void
 AsciiPhyTransmitSinkWithContext (
   Ptr<OutputStreamWrapper> stream,
@@ -234,7 +234,7 @@
 }
 
 Ptr<WifiPhy>
-YansWifiPhyHelper::Create (Ptr<Node> node, Ptr<WifiNetDevice> device) const
+YansWifiPhyHelper::Create (Ptr<Node> node, Ptr<NetDevice> device) const
 {
   Ptr<YansWifiPhy> phy = m_phy.Create<YansWifiPhy> ();
   Ptr<ErrorRateModel> error = m_errorRateModel.Create<ErrorRateModel> ();
@@ -419,6 +419,12 @@
     }
 }
 
+uint32_t
+YansWifiPhyHelper::GetPcapDataLinkType (void) const
+{
+  return m_pcapDlt;
+}
+
 void
 YansWifiPhyHelper::EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, bool promiscuous, bool explicitFilename)
 {
diff -Naur ns-3.21/src/wifi/helper/yans-wifi-helper.h ns-3.22/src/wifi/helper/yans-wifi-helper.h
--- ns-3.21/src/wifi/helper/yans-wifi-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/helper/yans-wifi-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -23,7 +23,6 @@
 #include "wifi-helper.h"
 #include "ns3/trace-helper.h"
 #include "ns3/yans-wifi-channel.h"
-#include "ns3/deprecated.h"
 
 namespace ns3 {
 
@@ -244,6 +243,15 @@
    */
   void SetPcapDataLinkType (enum SupportedPcapDataLinkTypes dlt);
 
+  /**
+   * Get the data link type of PCAP traces to be used. 
+   *
+   * @see SupportedPcapDataLinkTypes
+   *
+   * @returns The data link type of the pcap file (and packets) to be used
+   */
+  uint32_t GetPcapDataLinkType (void) const;
+
 private:
   /**
    * \param node the node on which we wish to create a wifi PHY
@@ -252,7 +260,7 @@
    *
    * This method implements the pure virtual method defined in \ref ns3::WifiPhyHelper.
    */
-  virtual Ptr<WifiPhy> Create (Ptr<Node> node, Ptr<WifiNetDevice> device) const;
+  virtual Ptr<WifiPhy> Create (Ptr<Node> node, Ptr<NetDevice> device) const;
 
   /**
    * @brief Enable pcap output the indicated net device.
@@ -272,7 +280,6 @@
 
   /**
    * \brief Enable ascii trace output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
diff -Naur ns-3.21/src/wifi/model/aarfcd-wifi-manager.cc ns-3.22/src/wifi/model/aarfcd-wifi-manager.cc
--- ns-3.21/src/wifi/model/aarfcd-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/aarfcd-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #define Min(a,b) ((a < b) ? a : b)
 #define Max(a,b) ((a > b) ? a : b)
 
-NS_LOG_COMPONENT_DEFINE ("Aarfcd");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Aarfcd");
+
 /**
  * \brief hold per-remote-station state for AARF-CD Wifi manager.
  *
@@ -297,7 +297,7 @@
 {
   NS_LOG_FUNCTION (this << st << size);
   AarfcdWifiRemoteStation *station = (AarfcdWifiRemoteStation *) st;
-  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 WifiTxVector
 AarfcdWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
@@ -306,7 +306,7 @@
   /// \todo we could/should implement the Aarf algorithm for
   /// RTS only by picking a single rate within the BasicRateSet.
   AarfcdWifiRemoteStation *station = (AarfcdWifiRemoteStation *) st;
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.21/src/wifi/model/aarf-wifi-manager.cc ns-3.22/src/wifi/model/aarf-wifi-manager.cc
--- ns-3.21/src/wifi/model/aarf-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/aarf-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #define Min(a,b) ((a < b) ? a : b)
 #define Max(a,b) ((a > b) ? a : b)
 
-NS_LOG_COMPONENT_DEFINE ("AarfWifiManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AarfWifiManager");
+
 /**
  * \brief hold per-remote-station state for AARF Wifi manager.
  *
@@ -229,7 +229,7 @@
 {
   NS_LOG_FUNCTION (this << st << size);
   AarfWifiRemoteStation *station = (AarfWifiRemoteStation *) st;
-  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 WifiTxVector
 AarfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
@@ -238,7 +238,7 @@
   /// \todo we could/should implement the Aarf algorithm for
   /// RTS only by picking a single rate within the BasicRateSet.
   AarfWifiRemoteStation *station = (AarfWifiRemoteStation *) st;
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.21/src/wifi/model/adhoc-wifi-mac.cc ns-3.22/src/wifi/model/adhoc-wifi-mac.cc
--- ns-3.21/src/wifi/model/adhoc-wifi-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/adhoc-wifi-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,10 @@
 #include "amsdu-subframe-header.h"
 #include "mgt-headers.h"
 
-NS_LOG_COMPONENT_DEFINE ("AdhocWifiMac");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AdhocWifiMac");
+
 NS_OBJECT_ENSURE_REGISTERED (AdhocWifiMac);
 
 TypeId
@@ -87,10 +87,7 @@
     {
       // In ad hoc mode, we assume that every destination supports all
       // the rates we support.
-      for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
-        {
-          m_stationManager->AddSupportedMode (to, m_phy->GetMode (i));
-        }
+      m_stationManager->AddAllSupportedModes (to);
       m_stationManager->RecordDisassociated (to);
     }
 
diff -Naur ns-3.21/src/wifi/model/ampdu-subframe-header.cc ns-3.22/src/wifi/model/ampdu-subframe-header.cc
--- ns-3.21/src/wifi/model/ampdu-subframe-header.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/ampdu-subframe-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,118 @@
+/* -*- 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>
+ */
+#include "ampdu-subframe-header.h"
+#include "ns3/address-utils.h"
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (AmpduSubframeHeader);
+
+TypeId
+AmpduSubframeHeader::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::AmpduSubframeHeader")
+    .SetParent<Header> ()
+    .AddConstructor<AmpduSubframeHeader> ()
+  ;
+  return tid;
+}
+
+TypeId
+AmpduSubframeHeader::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+AmpduSubframeHeader::AmpduSubframeHeader ()
+  : m_length (0)
+{
+}
+
+AmpduSubframeHeader::~AmpduSubframeHeader ()
+{
+}
+
+uint32_t
+AmpduSubframeHeader::GetSerializedSize () const
+{
+  return (2 + 1 + 1);
+}
+
+void
+AmpduSubframeHeader::Serialize (Buffer::Iterator i) const
+{
+  i.WriteHtolsbU16 (m_length);
+  i.WriteU8 (m_crc);
+  i.WriteU8 (m_sig);
+}
+
+uint32_t
+AmpduSubframeHeader::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+  m_length = i.ReadLsbtohU16 ();
+  m_crc = i.ReadU8 ();
+  m_sig = i.ReadU8 ();
+  return i.GetDistanceFrom (start);
+}
+
+void
+AmpduSubframeHeader::Print (std::ostream &os) const
+{
+  os << "length = " << m_length << ", CRC = " << m_crc << ", Signature = " << m_sig;
+}
+
+void
+AmpduSubframeHeader::SetCrc (uint8_t crc)
+{
+  m_crc = crc;
+}
+
+void
+AmpduSubframeHeader::SetSig ()
+{
+  m_sig = 0x4E;
+}
+
+void
+AmpduSubframeHeader::SetLength (uint16_t length)
+{
+  m_length = length;
+}
+
+uint8_t
+AmpduSubframeHeader::GetCrc (void) const
+{
+  return m_crc;
+}
+
+uint8_t
+AmpduSubframeHeader::GetSig (void) const
+{
+  return m_sig;
+}
+
+uint16_t
+AmpduSubframeHeader::GetLength (void) const
+{
+  return m_length;
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wifi/model/ampdu-subframe-header.h ns-3.22/src/wifi/model/ampdu-subframe-header.h
--- ns-3.21/src/wifi/model/ampdu-subframe-header.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/ampdu-subframe-header.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,91 @@
+/* -*- 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 AMPDU_SUBFRAME_HEADER_H
+#define AMPDU_SUBFRAME_HEADER_H
+
+#include "ns3/header.h"
+#include "ns3/mac48-address.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup wifi
+ *
+ *
+ */
+class AmpduSubframeHeader : public Header
+{
+public:
+  AmpduSubframeHeader ();
+  virtual ~AmpduSubframeHeader ();
+
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+  virtual void Print (std::ostream &os) const;
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (Buffer::Iterator start) const;
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+  /**
+   * Set the CRC field.
+   *
+   * \param crc
+   */
+  void SetCrc (uint8_t crc);
+  /**
+   * Set the SIG field.
+   *
+   * \param crc
+   */
+  void SetSig ();
+  /**
+   * Set the length field.
+   *
+   * \param length
+   */
+  void SetLength (uint16_t length);
+  /**
+   * Return the CRC field.
+   *
+   * \return the CRC field
+   */
+  uint8_t GetCrc (void) const;
+  /**
+   * Return the SIG field.
+   *
+   * \return the SIG field
+   */
+  uint8_t GetSig (void) const;
+  /**
+   * Return the length field.
+   *
+   * \return the length field
+   */
+  uint16_t GetLength (void) const;
+
+private:
+  uint8_t m_crc;     //!< CRC field
+  uint8_t m_sig;     //!< SIG field
+  uint16_t m_length; //!< length field
+};
+
+} // namespace ns3
+
+#endif /* AMPDU_SUBFRAME_HEADER_H */
diff -Naur ns-3.21/src/wifi/model/ampdu-tag.cc ns-3.22/src/wifi/model/ampdu-tag.cc
--- ns-3.21/src/wifi/model/ampdu-tag.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/ampdu-tag.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,104 @@
+/* -*- 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>
+ */
+#include "ampdu-tag.h"
+#include "ns3/tag.h"
+#include "ns3/uinteger.h"
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (AmpduTag);
+
+TypeId
+AmpduTag::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::AmpduTag")
+    .SetParent<Tag> ()
+    .AddConstructor<AmpduTag> ()
+    .AddAttribute ("Ampdu Exists", "The value that indicates that the packet contains an AMPDU",
+                   UintegerValue (false),
+                   MakeUintegerAccessor (&AmpduTag::GetAmpdu),
+                   MakeUintegerChecker<uint8_t> ())
+  ;
+  return tid;
+}
+
+TypeId
+AmpduTag::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+AmpduTag::AmpduTag ()
+  : m_ampdu (0)
+{
+}
+
+void
+AmpduTag::SetAmpdu (bool supported)
+{
+  m_ampdu = supported;
+}
+
+void
+AmpduTag::SetNoOfMpdus (uint8_t noofmpdus)
+{
+  NS_ASSERT (noofmpdus <= 64);
+  m_noOfMpdus = noofmpdus;
+}
+
+uint32_t
+AmpduTag::GetSerializedSize (void) const
+{
+  return 2;
+}
+
+void
+AmpduTag::Serialize (TagBuffer i) const
+{
+  i.WriteU8 (m_ampdu);
+  i.WriteU8 (m_noOfMpdus);
+}
+
+void
+AmpduTag::Deserialize (TagBuffer i)
+{
+  m_ampdu = i.ReadU8 ();
+  m_noOfMpdus = i.ReadU8 ();
+}
+
+bool
+AmpduTag::GetAmpdu () const
+{
+  return (m_ampdu == 1) ? true : false;
+}
+
+uint8_t
+AmpduTag::GetNoOfMpdus () const
+{
+  return m_noOfMpdus;
+}
+
+void
+AmpduTag::Print (std::ostream &os) const
+{
+  os << "A-MPDU exists=" << m_ampdu;
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wifi/model/ampdu-tag.h ns-3.22/src/wifi/model/ampdu-tag.h
--- ns-3.21/src/wifi/model/ampdu-tag.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/ampdu-tag.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,82 @@
+/* -*- 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 AMPDU_TAG_H
+#define AMPDU_TAG_H
+
+#include "ns3/packet.h"
+
+namespace ns3 {
+
+class Tag;
+
+/**
+ * \ingroup wifi
+ *
+ * The aim of the AmpduTag is to provide means for a MAC to specify that a packet includes A-MPDU
+ * since this is done in HT-SIG and there is no HT-SIG representation in ns-3
+ */
+class AmpduTag : public Tag
+{
+public:
+  static TypeId GetTypeId (void);
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  /**
+   * Create a AmpduTag with the default =0 no Ampdu
+   */
+  AmpduTag ();
+  /**
+   * Set m_ampdu to 1.
+   */
+  void SetAmpdu (bool supported);
+  /**
+   * \param noofmpdus the number of MPDUs
+   *
+   * Set the number of MPDUs in the A-MPDU.
+   */
+  void SetNoOfMpdus (uint8_t noofmpdus);
+
+  virtual void Serialize (TagBuffer i) const;
+  virtual void Deserialize (TagBuffer i);
+  virtual uint32_t GetSerializedSize () const;
+  virtual void Print (std::ostream &os) const;
+
+  /**
+   * \return true if it is an A-MPDU,
+   *         false otherwise.
+   *
+   * Returns m_ampdu
+   */
+  bool GetAmpdu (void) const;
+  /**
+   * \return the number of MPDUs in an A-MPDU
+   *
+   * Returns the number of MPDUs in an A-MPDU
+   */
+  uint8_t GetNoOfMpdus (void) const;
+
+private:
+  uint8_t m_ampdu;     //!< Flag whether it is an A-MPDU
+  uint8_t m_noOfMpdus; //!< number of MPDUs in the A-MPDU
+};
+
+} // namespace ns3
+
+#endif /* AMPDU_TAG_H */
diff -Naur ns-3.21/src/wifi/model/amrr-wifi-manager.cc ns-3.22/src/wifi/model/amrr-wifi-manager.cc
--- ns-3.21/src/wifi/model/amrr-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/amrr-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 
 #define Min(a,b) ((a < b) ? a : b)
 
-NS_LOG_COMPONENT_DEFINE ("AmrrWifiRemoteStation");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AmrrWifiRemoteStation");
+
 /**
  * \brief hold per-remote-station state for AMRR Wifi manager.
  *
@@ -321,7 +321,7 @@
         }
     }
 
-  return WifiTxVector (GetSupported (station, rateIndex), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, rateIndex), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 WifiTxVector
 AmrrWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
@@ -330,7 +330,7 @@
   AmrrWifiRemoteStation *station = (AmrrWifiRemoteStation *)st;
   UpdateMode (station);
   /// \todo can we implement something smarter ?
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 
 
diff -Naur ns-3.21/src/wifi/model/amsdu-subframe-header.cc ns-3.22/src/wifi/model/amsdu-subframe-header.cc
--- ns-3.21/src/wifi/model/amsdu-subframe-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/amsdu-subframe-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "ns3/address-utils.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("AmsduSubframeHeader");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("AmsduSubframeHeader");
+
 NS_OBJECT_ENSURE_REGISTERED (AmsduSubframeHeader);
 
 TypeId
diff -Naur ns-3.21/src/wifi/model/aparf-wifi-manager.cc ns-3.22/src/wifi/model/aparf-wifi-manager.cc
--- ns-3.21/src/wifi/model/aparf-wifi-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/aparf-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,338 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universidad de la República - Uruguay
+ *
+ * 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: Matias Richart <mrichart@fing.edu.uy>
+ */
+#include "aparf-wifi-manager.h"
+#include "wifi-phy.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include "ns3/uinteger.h"
+#include "ns3/trace-source-accessor.h"
+#define Min(a,b) ((a < b) ? a : b)
+NS_LOG_COMPONENT_DEFINE ("ns3::AparfWifiManager");
+
+namespace ns3 {
+
+/**
+ * Hold per-remote-station state for APARF Wifi manager.
+ *
+ * This struct extends from WifiRemoteStation struct to hold additional
+ * information required by the APARF Wifi manager
+ */
+struct
+AparfWifiRemoteStation : public WifiRemoteStation
+{
+  uint32_t m_nSuccess; //!< Number of successful transmission attempts.
+  uint32_t m_nFailed; //!< Number of failed transmission attempts.
+  uint32_t m_pCount; //!< Number of power changes.
+
+  uint32_t m_successThreshold; //!< The minimum number of successful transmissions to try a new power or rate.
+  uint32_t m_failThreshold; //!< The minimum number of failed transmissions to try a new power or rate.
+
+  uint32_t m_rate; //!< Current rate.
+  uint32_t m_rateCrit; //!< Critical rate.
+  uint8_t m_power; //!< Current power.
+
+  uint32_t m_nSupported; //!< Number of supported rates by the remote station.
+  bool m_initialized; //!< For initializing variables.
+
+  AparfWifiManager::State m_aparfState; //!< The estimated state of the channel.
+};
+
+NS_OBJECT_ENSURE_REGISTERED (AparfWifiManager);
+
+TypeId
+AparfWifiManager::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::AparfWifiManager")
+    .SetParent<WifiRemoteStationManager> ()
+    .AddConstructor<AparfWifiManager> ()
+    .AddAttribute ("SuccessThreshold 1",
+                   "The minimum number of successful transmissions in \"High\" state to try a new power or rate.",
+                   UintegerValue (3),
+                   MakeUintegerAccessor (&AparfWifiManager::m_succesMax1),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("SuccessThreshold 2",
+                   "The minimum number of successful transmissions in \"Low\" state to try a new power or rate.",
+                   UintegerValue (10),
+                   MakeUintegerAccessor (&AparfWifiManager::m_succesMax2),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("FailThreshold",
+                   "The minimum number of failed transmissions to try a new power or rate.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&AparfWifiManager::m_failMax),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("PowerThreshold",
+                   "The maximum number of power changes.",
+                   UintegerValue (10),
+                   MakeUintegerAccessor (&AparfWifiManager::m_powerMax),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Power decrement step",
+                   "Step size for decrement the power.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&AparfWifiManager::m_powerDec),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Power increment step",
+                   "Step size for increment the power.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&AparfWifiManager::m_powerInc),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Rate decrement step",
+                   "Step size for decrement the rate.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&AparfWifiManager::m_rateDec),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Rate increment step",
+                   "Step size for increment the rate.",
+                   UintegerValue (1),
+                   MakeUintegerAccessor (&AparfWifiManager::m_rateInc),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddTraceSource ("PowerChange",
+                     "The transmission power has change",
+                     MakeTraceSourceAccessor (&AparfWifiManager::m_powerChange),
+                     "ns3::AparfWifiManager::PowerChangeTracedCallback")
+    .AddTraceSource ("RateChange",
+                     "The transmission rate has change",
+                     MakeTraceSourceAccessor (&AparfWifiManager::m_rateChange),
+                     "ns3::AparfWifiManager::RateChangeTracedCallback")
+  ;
+  return tid;
+}
+
+AparfWifiManager::AparfWifiManager ()
+{
+  NS_LOG_FUNCTION (this);
+}
+AparfWifiManager::~AparfWifiManager ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+AparfWifiManager::SetupPhy (Ptr<WifiPhy> phy)
+{
+  m_nPower = phy->GetNTxPower ();
+  WifiRemoteStationManager::SetupPhy (phy);
+}
+
+WifiRemoteStation *
+AparfWifiManager::DoCreateStation (void) const
+{
+  NS_LOG_FUNCTION (this);
+  AparfWifiRemoteStation *station = new AparfWifiRemoteStation ();
+
+  station->m_successThreshold = m_succesMax1;
+  station->m_failThreshold = m_failMax;
+  station->m_nSuccess = 0;
+  station->m_nFailed = 0;
+  station->m_pCount = 0;
+  station->m_aparfState = AparfWifiManager::High;
+  station->m_initialized = false;
+
+  NS_LOG_DEBUG ("create station=" << station << ", rate=" << station->m_rate
+                                  << ", power=" << (int)station->m_power);
+
+  return station;
+}
+
+void
+AparfWifiManager::CheckInit (AparfWifiRemoteStation *station)
+{
+  if (!station->m_initialized)
+    {
+      station->m_nSupported = GetNSupported (station);
+      station->m_rate = station->m_nSupported - 1;
+      station->m_power = m_nPower - 1;
+      station->m_rateCrit = 0;
+      m_powerChange (station->m_power, station->m_state->m_address);
+      m_rateChange (station->m_rate, station->m_state->m_address);
+      station->m_initialized = true;
+    }
+}
+
+void AparfWifiManager::DoReportRtsFailed (WifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+}
+
+void AparfWifiManager::DoReportDataFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
+  CheckInit (station);
+  station->m_nFailed++;
+  station->m_nSuccess = 0;
+  NS_LOG_DEBUG ("station=" << station << ", rate=" << station->m_rate
+                           << ", power=" << (int)station->m_power);
+
+  if (station->m_aparfState == AparfWifiManager::Low)
+    {
+      station->m_aparfState = AparfWifiManager::High;
+      station->m_successThreshold = m_succesMax1;
+    }
+  else if (station->m_aparfState == AparfWifiManager::Spread)
+    {
+      station->m_aparfState = AparfWifiManager::Low;
+      station->m_successThreshold = m_succesMax2;
+    }
+
+  if (station->m_nFailed == station->m_failThreshold)
+    {
+      station->m_nFailed = 0;
+      station->m_nSuccess = 0;
+      station->m_pCount = 0;
+      if (station->m_power == (m_nPower - 1))
+        {
+          station->m_rateCrit = station->m_rate;
+          if (station->m_rate != 0)
+            {
+              NS_LOG_DEBUG ("station=" << station << " dec rate");
+              station->m_rate -= m_rateDec;
+              m_rateChange (station->m_rate, station->m_state->m_address);
+            }
+        }
+      else
+        {
+          NS_LOG_DEBUG ("station=" << station << " inc power");
+          station->m_power += m_powerInc;
+          m_powerChange (station->m_power, station->m_state->m_address);
+        }
+    }
+}
+void
+AparfWifiManager::DoReportRxOk (WifiRemoteStation *station, double rxSnr, WifiMode txMode)
+{
+  NS_LOG_FUNCTION (this << station << rxSnr << txMode);
+}
+void
+AparfWifiManager::DoReportRtsOk (WifiRemoteStation *station, double ctsSnr,
+                                 WifiMode ctsMode, double rtsSnr)
+{
+  NS_LOG_FUNCTION (this << station << ctsSnr << ctsMode << rtsSnr);
+  NS_LOG_DEBUG ("station=" << station << " rts ok");
+}
+void
+AparfWifiManager::DoReportDataOk (WifiRemoteStation *st, double ackSnr,
+                                  WifiMode ackMode, double dataSnr)
+{
+  NS_LOG_FUNCTION (this << st << ackSnr << ackMode << dataSnr);
+  AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
+  CheckInit (station);
+  station->m_nSuccess++;
+  station->m_nFailed = 0;
+  NS_LOG_DEBUG ("station=" << station << " data ok success=" << station->m_nSuccess << ", rate=" << station->m_rate << ", power=" << (int)station->m_power);
+
+  if ((station->m_aparfState == AparfWifiManager::High) && (station->m_nSuccess >= station->m_successThreshold))
+    {
+      station->m_aparfState = AparfWifiManager::Spread;
+    }
+  else if ((station->m_aparfState == AparfWifiManager::Low) && (station->m_nSuccess >= station->m_successThreshold))
+    {
+      station->m_aparfState = AparfWifiManager::Spread;
+    }
+  else if (station->m_aparfState == AparfWifiManager::Spread)
+    {
+      station->m_aparfState = AparfWifiManager::High;
+      station->m_successThreshold = m_succesMax1;
+    }
+
+  if (station->m_nSuccess == station->m_successThreshold)
+    {
+      station->m_nSuccess = 0;
+      station->m_nFailed = 0;
+      if (station->m_rate == (station->m_state->m_operationalRateSet.size () - 1))
+        {
+          if (station->m_power != 0)
+            {
+              NS_LOG_DEBUG ("station=" << station << " dec power");
+              station->m_power -= m_powerDec;
+              m_powerChange (station->m_power, station->m_state->m_address);
+            }
+        }
+      else
+        {
+          if (station->m_rateCrit == 0)
+            {
+              if (station->m_rate != (station->m_state->m_operationalRateSet.size () - 1))
+                {
+                  NS_LOG_DEBUG ("station=" << station << " inc rate");
+                  station->m_rate += m_rateInc;
+                  m_rateChange (station->m_rate, station->m_state->m_address);
+                }
+            }
+          else
+            {
+              if (station->m_pCount == m_powerMax)
+                {
+                  station->m_power = (m_nPower - 1);
+                  m_powerChange (station->m_power, station->m_state->m_address);
+                  station->m_rate = station->m_rateCrit;
+                  m_rateChange (station->m_rate, station->m_state->m_address);
+                  station->m_pCount = 0;
+                  station->m_rateCrit = 0;
+                }
+              else
+                {
+                  if (station->m_power != 0)
+                    {
+                      station->m_power -= m_powerDec;
+                      m_powerChange (station->m_power, station->m_state->m_address);
+                      station->m_pCount++;
+                    }
+                }
+            }
+        }
+    }
+}
+void
+AparfWifiManager::DoReportFinalRtsFailed (WifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+}
+void
+AparfWifiManager::DoReportFinalDataFailed (WifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+}
+
+WifiTxVector
+AparfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+{
+  NS_LOG_FUNCTION (this << st << size);
+  AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
+  CheckInit (station);
+  return WifiTxVector (GetSupported (station, station->m_rate), station->m_power, GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas ()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+}
+WifiTxVector
+AparfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  /// \todo we could/should implement the Arf algorithm for
+  /// RTS only by picking a single rate within the BasicRateSet.
+  AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas ()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+}
+
+bool
+AparfWifiManager::IsLowLatency (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return true;
+}
+
+} // namespace ns3
diff -Naur ns-3.21/src/wifi/model/aparf-wifi-manager.h ns-3.22/src/wifi/model/aparf-wifi-manager.h
--- ns-3.21/src/wifi/model/aparf-wifi-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/aparf-wifi-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,131 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universidad de la República - Uruguay
+ *
+ * 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: Matias Richart <mrichart@fing.edu.uy>
+ */
+#ifndef APARF_WIFI_MANAGER_H
+#define APARF_WIFI_MANAGER_H
+
+#include "wifi-remote-station-manager.h"
+
+namespace ns3 {
+
+struct AparfWifiRemoteStation;
+
+/**
+ * \ingroup wifi
+ * APARF Power and rate control algorithm
+ *
+ * This class implements the High Performance power and rate control algorithm
+ * described in <i>Dynamic data rate and transmit power adjustment
+ * in IEEE 802.11 wireless LANs</i> by Chevillat, P.; Jelitto, J.
+ * and Truong, H. L. in International Journal of Wireless Information
+ * Networks, Springer, 2005, 12, 123-145.
+ * http://www.cs.mun.ca/~yzchen/papers/papers/rate_adaptation/80211_dynamic_rate_power_adjustment_chevillat_j2005.pdf
+ *
+ */
+class AparfWifiManager : public WifiRemoteStationManager
+{
+public:
+  /**
+   * Register this type.
+   * \return The object TypeId.
+   */
+  static TypeId GetTypeId (void);
+  AparfWifiManager ();
+  virtual ~AparfWifiManager ();
+
+  virtual void SetupPhy (Ptr<WifiPhy> phy);
+
+  /**
+   * Enumeration of the possible states of the channel.
+   */
+  enum State
+  {
+    High,
+    Low,
+    Spread
+  };
+
+  /**
+   * TracedCallback signature for power change events.
+   *
+   * \param [in] power The new power.
+   * \param [in] address The remote station MAC address.
+   */
+  typedef void (*PowerChangeTracedCallback)(const uint8_t power, const Mac48Address remoteAddress);
+
+  /**
+   * TracedCallback signature for rate change events.
+   *
+   * \param [in] rate The new rate.
+   * \param [in] address The remote station MAC address.
+   */
+  typedef void (*RateChangeTracedCallback)(const uint32_t rate, const Mac48Address remoteAddress);
+
+private:
+  // overriden from base class
+  virtual WifiRemoteStation * DoCreateStation (void) const;
+  virtual void DoReportRxOk (WifiRemoteStation *station,
+                             double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (WifiRemoteStation *station);
+  virtual void DoReportDataFailed (WifiRemoteStation *station);
+  virtual void DoReportRtsOk (WifiRemoteStation *station,
+                              double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (WifiRemoteStation *station,
+                               double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
+  virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
+  virtual bool IsLowLatency (void) const;
+
+  /** Check for initializations.
+   *
+   * \param station The remote station.
+   */
+  void CheckInit (AparfWifiRemoteStation *station);
+
+  uint32_t m_succesMax1; //!< The minimum number of successful transmissions in \"High\" state to try a new power or rate.
+  uint32_t m_succesMax2; //!< The minimum number of successful transmissions in \"Low\" state to try a new power or rate.
+  uint32_t m_failMax; //!< The minimum number of failed transmissions to try a new power or rate.
+  uint32_t m_powerMax; //!< The maximum number of power changes.
+  uint32_t m_powerInc; //!< Step size for increment the power.
+  uint32_t m_powerDec; //!< Step size for decrement the power.
+  uint32_t m_rateInc; //!< Step size for increment the rate.
+  uint32_t m_rateDec; //!< Step size for decrement the rate.
+  /**
+   * Number of power levels.
+   * Differently form rate, power levels do not depend on the remote station.
+   * The levels depend only on the physical layer of the device.
+   */
+  uint32_t m_nPower;
+
+  /**
+   * The trace source fired when the transmission power change
+   */
+  TracedCallback<uint8_t, Mac48Address> m_powerChange;
+  /**
+   * The trace source fired when the transmission rate change
+   */
+  TracedCallback<uint32_t, Mac48Address> m_rateChange;
+
+};
+
+} // namespace ns3
+
+#endif /* APARF_WIFI_MANAGER_H */
diff -Naur ns-3.21/src/wifi/model/ap-wifi-mac.cc ns-3.22/src/wifi/model/ap-wifi-mac.cc
--- ns-3.21/src/wifi/model/ap-wifi-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/ap-wifi-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -38,10 +38,10 @@
 #include "amsdu-subframe-header.h"
 #include "msdu-aggregator.h"
 
-NS_LOG_COMPONENT_DEFINE ("ApWifiMac");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ApWifiMac");
+
 NS_OBJECT_ENSURE_REGISTERED (ApWifiMac);
 
 TypeId
diff -Naur ns-3.21/src/wifi/model/arf-wifi-manager.cc ns-3.22/src/wifi/model/arf-wifi-manager.cc
--- ns-3.21/src/wifi/model/arf-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/arf-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,11 +25,10 @@
 
 #define Min(a,b) ((a < b) ? a : b)
 
-NS_LOG_COMPONENT_DEFINE ("ns3::ArfWifiManager");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ArfWifiManager");
+
 /**
  * \brief hold per-remote-station state for ARF Wifi manager.
  *
@@ -203,7 +202,7 @@
 {
   NS_LOG_FUNCTION (this << st << size);
   ArfWifiRemoteStation *station = (ArfWifiRemoteStation *) st;
-  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 WifiTxVector
 ArfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
@@ -212,7 +211,7 @@
   /// \todo we could/should implement the Arf algorithm for
   /// RTS only by picking a single rate within the BasicRateSet.
   ArfWifiRemoteStation *station = (ArfWifiRemoteStation *) st;
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.21/src/wifi/model/block-ack-agreement.cc ns-3.22/src/wifi/model/block-ack-agreement.cc
--- ns-3.21/src/wifi/model/block-ack-agreement.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/block-ack-agreement.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,13 +20,14 @@
 #include "block-ack-agreement.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("BlockAckAgreement");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BlockAckAgreement");
+
 BlockAckAgreement::BlockAckAgreement ()
   : m_amsduSupported (0),
     m_blockAckPolicy (1),
+    m_htSupported (0),
     m_inactivityEvent ()
 {
   NS_LOG_FUNCTION (this);
@@ -35,6 +36,7 @@
 BlockAckAgreement::BlockAckAgreement (Mac48Address peer, uint8_t tid)
   : m_amsduSupported (0),
     m_blockAckPolicy (1),
+    m_htSupported (0),
     m_inactivityEvent ()
 {
   NS_LOG_FUNCTION (this << peer << static_cast<uint32_t> (tid));
@@ -137,5 +139,27 @@
   NS_LOG_FUNCTION (this);
   return (m_amsduSupported == 1) ? true : false;
 }
+uint16_t
+BlockAckAgreement::GetWinEnd (void) const
+{
+  return m_winEnd;
+}
+void
+BlockAckAgreement::SetWinEnd (uint16_t seq)
+{
+  m_winEnd = seq;
+}
+void
+BlockAckAgreement::SetHtSupported (bool htSupported)
+{
+  NS_LOG_FUNCTION (this << htSupported);
+  m_htSupported = htSupported;
+}
+bool
+BlockAckAgreement::IsHtSupported (void) const
+{
+    NS_LOG_FUNCTION (this);
+    return (m_htSupported == 1) ? true : false;
+}
 
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/block-ack-agreement.h ns-3.22/src/wifi/model/block-ack-agreement.h
--- ns-3.21/src/wifi/model/block-ack-agreement.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/block-ack-agreement.h	2015-02-05 15:46:22.000000000 -0800
@@ -73,7 +73,12 @@
    * \param supported enable or disable A-MSDU support
    */
   void SetAmsduSupport (bool supported);
-
+  /**
+   * Set ending sequence number.
+   *
+   * \param seq the ending sequence number
+   */
+  void SetWinEnd (uint16_t seq);
   /**
    * Return the Traffic ID (TID).
    *
@@ -111,6 +116,12 @@
    */
   uint16_t GetStartingSequenceControl (void) const;
   /**
+   * Return the ending sequence number
+   *
+   * \return ending sequence number
+   */
+  uint16_t GetWinEnd (void) const;
+  /**
    * Check whether the current ACK policy is immediate block ACK.
    *
    * \return true if the current ACK policy is immediate block ACK,
@@ -124,17 +135,31 @@
    *         false otherwise
    */
   bool IsAmsduSupported (void) const;
+  /**
+   * Enable or disable HT support.
+   *
+   * \param htSupported enable or disable HT support
+   */
+  void SetHtSupported (bool htSupported);
+  /**
+   * Check whether HT is supported
+   *
+   * \return true if HT is supported,
+   *         false otherwise
+   */
+  bool IsHtSupported (void) const;
 
 protected:
-  Mac48Address m_peer;
-  uint8_t m_amsduSupported;
-  uint8_t m_blockAckPolicy; /* represents type of block ack: immediate or delayed */
-  uint8_t m_tid;
-  uint16_t m_bufferSize;
-  uint16_t m_timeout;
-  uint16_t m_startingSeq;
-
-  EventId m_inactivityEvent;
+  Mac48Address m_peer;       //!< Peer address
+  uint8_t m_amsduSupported;  //!< Flag whether MSDU aggregation is supported
+  uint8_t m_blockAckPolicy;  //!< Type of block ack: immediate or delayed
+  uint8_t m_tid;             //!< Traffic ID
+  uint16_t m_bufferSize;     //!< Buffer size
+  uint16_t m_timeout;        //!< Timeout
+  uint16_t m_startingSeq;    //!< Starting squence control
+  uint16_t m_winEnd;         //!< Ending sequence number
+  uint8_t m_htSupported;     //!< Flag whether HT is supported
+  EventId m_inactivityEvent; //!<
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/block-ack-cache.cc ns-3.22/src/wifi/model/block-ack-cache.cc
--- ns-3.21/src/wifi/model/block-ack-cache.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/block-ack-cache.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 
 #define WINSIZE_ASSERT NS_ASSERT ((m_winEnd - m_winStart + 4096) % 4096 == m_winSize - 1)
 
-NS_LOG_COMPONENT_DEFINE ("BlockAckCache");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BlockAckCache");
+
 void
 BlockAckCache::Init (uint16_t winStart, uint16_t winSize)
 {
@@ -39,6 +39,12 @@
   memset (m_bitmap, 0, sizeof (m_bitmap));
 }
 
+uint16_t
+BlockAckCache::GetWinStart ()
+{
+  return m_winStart;
+}
+
 void
 BlockAckCache::UpdateWithMpdu (const WifiMacHeader *hdr)
 {
diff -Naur ns-3.21/src/wifi/model/block-ack-cache.h ns-3.22/src/wifi/model/block-ack-cache.h
--- ns-3.21/src/wifi/model/block-ack-cache.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/block-ack-cache.h	2015-02-05 15:46:22.000000000 -0800
@@ -38,7 +38,13 @@
   void Init (uint16_t winStart, uint16_t winSize);
 
   void UpdateWithMpdu (const WifiMacHeader *hdr);
-  void UpdateWithBlockAckReq (uint16_t startingSeq);
+    void UpdateWithBlockAckReq (uint16_t startingSeq);
+ /**
+  * When an A-MPDU is received, the window start may change to a new value
+  * depending on the sequence number of the received MPDU (standard11n page 134).
+  * This function is used to retrieve this value in order to add it to the BlockAck.
+  */
+  uint16_t GetWinStart (void);
 
   void FillBlockAckBitmap (CtrlBAckResponseHeader *blockAckHeader);
 private:
diff -Naur ns-3.21/src/wifi/model/block-ack-manager.cc ns-3.22/src/wifi/model/block-ack-manager.cc
--- ns-3.21/src/wifi/model/block-ack-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/block-ack-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,11 +30,12 @@
 #include "mac-low.h"
 #include "wifi-mac-queue.h"
 #include "mac-tx-middle.h"
-
-NS_LOG_COMPONENT_DEFINE ("BlockAckManager");
+#include "qos-utils.h"
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BlockAckManager");
+
 BlockAckManager::Item::Item ()
 {
   NS_LOG_FUNCTION (this);
@@ -117,9 +118,11 @@
   agreement.SetStartingSequence (reqHdr->GetStartingSequence ());
   /* for now we assume that originator doesn't use this field. Use of this field
      is mandatory only for recipient */
-  agreement.SetBufferSize (0);
+  agreement.SetBufferSize (64);
+  agreement.SetWinEnd ((agreement.GetStartingSequence()+ agreement.GetBufferSize()-1) % 4096);
   agreement.SetTimeout (reqHdr->GetTimeout ());
   agreement.SetAmsduSupport (reqHdr->IsAmsduSupported ());
+  agreement.SetHtSupported (m_stationManager->HasHtSupported ());
   if (reqHdr->IsImmediateBlockAck ())
     {
       agreement.SetImmediateBlockAck ();
@@ -214,46 +217,182 @@
   Item item (packet, hdr, tStamp);
   AgreementsI it = m_agreements.find (std::make_pair (recipient, tid));
   NS_ASSERT (it != m_agreements.end ());
-  it->second.second.push_back (item);
+  PacketQueueI queueIt = it->second.second.begin ();
+  for (; queueIt != it->second.second.end ();)
+  {
+      if(((hdr.GetSequenceNumber () - queueIt->hdr.GetSequenceNumber () + 4096) % 4096) > 2047)
+      {
+          queueIt = it->second.second.insert (queueIt, item);
+          break;
+      }
+      else
+      {
+          queueIt++;
+      }
+  }
+  if(queueIt == it->second.second.end ())
+  {
+    it->second.second.push_back (item);
+  }
+}
+
+void
+BlockAckManager::CompleteAmpduExchange(Mac48Address recipient, uint8_t tid)
+{
+  AgreementsI it = m_agreements.find (std::make_pair (recipient, tid));
+  NS_ASSERT (it != m_agreements.end ());
+  OriginatorBlockAckAgreement &agreement = (*it).second.first;
+  agreement.CompleteExchange ();
 }
 
 Ptr<const Packet>
 BlockAckManager::GetNextPacket (WifiMacHeader &hdr)
+ {
+   NS_LOG_FUNCTION (this << &hdr);
+   Ptr<const Packet> packet = 0;
+   uint8_t tid;
+   Mac48Address recipient;
+   CleanupBuffers ();
+   if (!m_retryPackets.empty())
+     {
+       NS_LOG_DEBUG("Retry buffer size is " << m_retryPackets.size ());
+       std::list<PacketQueueI>::iterator it = m_retryPackets.begin ();  
+       while (it != m_retryPackets.end ())
+         {  
+           if ((*it)->hdr.IsQosData ())
+             tid = (*it)->hdr.GetQosTid ();
+           else
+             NS_FATAL_ERROR("Packet in blockAck manager retry queue is not Qos Data");
+           recipient = (*it)->hdr.GetAddr1 ();
+           AgreementsI agreement = m_agreements.find (std::make_pair (recipient, tid));
+           NS_ASSERT (agreement != m_agreements.end());
+           if (QosUtilsIsOldPacket (agreement->second.first.GetStartingSequence (),(*it)->hdr.GetSequenceNumber ()))
+             {
+               //standard says the originator should not send a packet with seqnum < winstart
+               NS_LOG_DEBUG("The Retry packet have sequence number < WinStartO --> Discard " << (*it)->hdr.GetSequenceNumber () << " " << agreement->second.first.GetStartingSequence ());
+               agreement->second.second.erase ((*it));   
+               it = m_retryPackets.erase (it);
+               continue;
+             }
+           else if ((*it)->hdr.GetSequenceNumber () > (agreement->second.first.GetStartingSequence ()+63) %4096)
+             {
+               agreement->second.first.SetStartingSequence ((*it)->hdr.GetSequenceNumber ());
+             }
+           packet = (*it)->packet->Copy();
+           hdr = (*it)->hdr;
+           hdr.SetRetry ();
+           NS_LOG_INFO ("Retry packet seq = " << hdr.GetSequenceNumber ());
+           if (hdr.IsQosData ())
+             tid = hdr.GetQosTid ();
+           else
+             NS_FATAL_ERROR("Packet in blockAck manager retry queue is not Qos Data");
+           recipient = hdr.GetAddr1 ();
+           if (!agreement->second.first.IsHtSupported ()
+               && (ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED)
+                  || SwitchToBlockAckIfNeeded (recipient, tid, hdr.GetSequenceNumber ())))
+             {
+                hdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
+             }
+           else
+            {
+               /* From section 9.10.3 in IEEE802.11e standard:
+                * In order to improve efficiency, originators using the Block Ack facility
+                * may send MPDU frames with the Ack Policy subfield in QoS control frames
+                * set to Normal Ack if only a few MPDUs are available for transmission.[...]
+                * When there are sufficient number of MPDUs, the originator may switch back to
+                * the use of Block Ack.
+                */
+               hdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
+               AgreementsI i = m_agreements.find (std::make_pair (recipient, tid));
+               i->second.second.erase (*it);
+             }
+           it = m_retryPackets.erase (it);
+           NS_LOG_DEBUG("Removed one packet retry buffer size = " <<m_retryPackets.size () );
+           break;
+         }
+     }
+  return packet;
+}
+
+
+Ptr<const Packet>
+BlockAckManager::PeekNextPacket (WifiMacHeader &hdr, Mac48Address recipient, uint8_t tid, Time *tstamp)
 {
-  NS_LOG_FUNCTION (this << &hdr);
+  NS_LOG_FUNCTION (this);
   Ptr<const Packet> packet = 0;
   CleanupBuffers ();
-  if (m_retryPackets.size () > 0)
-    {
-      PacketQueueI queueIt = m_retryPackets.front ();
-      m_retryPackets.pop_front ();
-      packet = queueIt->packet;
-      hdr = queueIt->hdr;
-      hdr.SetRetry ();
-      NS_LOG_INFO ("Retry packet seq=" << hdr.GetSequenceNumber ());
-      uint8_t tid = hdr.GetQosTid ();
-      Mac48Address recipient = hdr.GetAddr1 ();
+  AgreementsI agreement = m_agreements.find (std::make_pair (recipient, tid));
+  NS_ASSERT (agreement != m_agreements.end());
+  std::list<PacketQueueI>::iterator it = m_retryPackets.begin ();    
+  for (; it != m_retryPackets.end();it++)
+    {
+       if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid)
+       {
+         if (QosUtilsIsOldPacket (agreement->second.first.GetStartingSequence (),(*it)->hdr.GetSequenceNumber ()))
+           { 
+               //standard says the originator should not send a packet with seqnum < winstart
+               NS_LOG_DEBUG("The Retry packet have sequence number < WinStartO --> Discard " << (*it)->hdr.GetSequenceNumber () << " " << agreement->second.first.GetStartingSequence ());
+               agreement->second.second.erase ((*it));   
+               it = m_retryPackets.erase (it);
+                it--; 
+               continue;
+           }
+          else if ((*it)->hdr.GetSequenceNumber () > (agreement->second.first.GetStartingSequence () + 63) % 4096)
+            {
+               agreement->second.first.SetStartingSequence ((*it)->hdr.GetSequenceNumber ());
+            }
+        packet = (*it)->packet->Copy();
+        hdr = (*it)->hdr;
+        hdr.SetRetry ();
+        *tstamp = (*it)->timestamp;
+        NS_LOG_INFO ("Retry packet seq = " << hdr.GetSequenceNumber ());
+            Mac48Address recipient = hdr.GetAddr1 ();
+           if (!agreement->second.first.IsHtSupported ()
+               && (ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED)
+                  || SwitchToBlockAckIfNeeded (recipient, tid, hdr.GetSequenceNumber ())))
+             {
+                hdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
+             }
+          else
+            {
+                /* From section 9.10.3 in IEEE802.11e standard:
+                 * In order to improve efficiency, originators using the Block Ack facility
+                 * may send MPDU frames with the Ack Policy subfield in QoS control frames
+                 * set to Normal Ack if only a few MPDUs are available for transmission.[...]
+                 * When there are sufficient number of MPDUs, the originator may switch back to
+                 * the use of Block Ack.
+                 */
+                hdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
+             }
+          NS_LOG_DEBUG("Peeked one packet from retry buffer size = " << m_retryPackets.size () );
+         return packet;        
+      }
+    }
+  return packet;
+}
 
-      if (ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED)
-          || SwitchToBlockAckIfNeeded (recipient, tid, hdr.GetSequenceNumber ()))
-        {
-          hdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
-        }
-      else
+bool
+BlockAckManager::RemovePacket (uint8_t tid, Mac48Address recipient, uint16_t seqnumber)
+{
+
+  std::list<PacketQueueI>::iterator it = m_retryPackets.begin ();                
+  for (; it != m_retryPackets.end (); it++)
+    {
+      if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid && (*it)->hdr.GetSequenceNumber () == seqnumber)
         {
-          /* From section 9.10.3 in IEEE802.11e standard:
-           * In order to improve efficiency, originators using the Block Ack facility
-           * may send MPDU frames with the Ack Policy subfield in QoS control frames
-           * set to Normal Ack if only a few MPDUs are available for transmission.[...]
-           * When there are sufficient number of MPDUs, the originator may switch back to
-           * the use of Block Ack.
-           */
-          hdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
+          WifiMacHeader hdr = (*it)->hdr;
+          uint8_t tid = hdr.GetQosTid ();
+          Mac48Address recipient = hdr.GetAddr1 ();
+
           AgreementsI i = m_agreements.find (std::make_pair (recipient, tid));
-          i->second.second.erase (queueIt);
+          i->second.second.erase ((*it));
+         
+          m_retryPackets.erase (it);  
+          NS_LOG_DEBUG("Removed Packet from retry queue = " << hdr.GetSequenceNumber () << " " << (uint32_t) tid << " " << recipient << " Buffer Size = " << m_retryPackets.size ());
+          return true;
         }
     }
-  return packet;
+  return false;
 }
 
 bool
@@ -322,6 +461,11 @@
                   it++;
                 }
             }
+          //go to next packet
+          if (it != m_retryPackets.end ())
+            {
+              it++;
+            }
         }
     }
   return nPackets;
@@ -333,9 +477,30 @@
   NS_LOG_FUNCTION (this << static_cast<uint32_t> (nPackets));
   m_blockAckThreshold = nPackets;
 }
+    
+void
+BlockAckManager::SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> manager)
+{
+  NS_LOG_FUNCTION (this << manager);
+  m_stationManager = manager;
+}
+
+bool
+BlockAckManager::AlreadyExists(uint16_t currentSeq, Mac48Address recipient, uint8_t tid)
+{
+  std::list<PacketQueueI>::const_iterator it = m_retryPackets.begin ();
+  while (it != m_retryPackets.end ())
+    {
+       NS_LOG_FUNCTION (this<<(*it)->hdr.GetType());
+       if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid && currentSeq == (*it)->hdr.GetSequenceNumber ())
+         return true;
+       it++;
+     }
+  return false;
+}
 
 void
-BlockAckManager::NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient)
+BlockAckManager::NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, WifiMode txMode)
 {
   NS_LOG_FUNCTION (this << blockAck << recipient);
   uint16_t sequenceFirstLost = 0;
@@ -377,7 +542,10 @@
                           sequenceFirstLost = (*queueIt).hdr.GetSequenceNumber ();
                           (*it).second.first.SetStartingSequence (sequenceFirstLost);
                         }
-                      m_retryPackets.push_back (queueIt);
+
+                      if (!AlreadyExists((*queueIt).hdr.GetSequenceNumber (),recipient,tid))
+                        InsertInRetryQueue(queueIt);
+
                       queueIt++;
                     }
                 }
@@ -392,6 +560,12 @@
                       while (queueIt != queueEnd
                              && (*queueIt).hdr.GetSequenceNumber () == currentSeq)
                         {
+                          //notify remote station of successful transmission
+                          m_stationManager->ReportDataOk ((*queueIt).hdr.GetAddr1 (), &(*queueIt).hdr, 0, txMode, 0);
+                          if (!m_txOkCallback.IsNull ())
+                            {
+                              m_txOkCallback ((*queueIt).hdr);
+                            }
                           queueIt = it->second.second.erase (queueIt);
                         }
                     }
@@ -403,7 +577,16 @@
                           sequenceFirstLost = (*queueIt).hdr.GetSequenceNumber ();
                           (*it).second.first.SetStartingSequence (sequenceFirstLost);
                         }
-                      m_retryPackets.push_back (queueIt);
+                      //notify remote station of unsuccessful transmission
+                      m_stationManager->ReportDataFailed ((*queueIt).hdr.GetAddr1 (), &(*queueIt).hdr);
+                      if (!m_txFailedCallback.IsNull ())
+                        {
+                          m_txFailedCallback ((*queueIt).hdr);
+                        }
+                      if (!AlreadyExists((*queueIt).hdr.GetSequenceNumber (),recipient,tid))
+                        {
+                          InsertInRetryQueue(queueIt);
+                        }
                       queueIt++;
                     }
                 }
@@ -412,7 +595,7 @@
           if ((foundFirstLost && !SwitchToBlockAckIfNeeded (recipient, tid, sequenceFirstLost))
               || (!foundFirstLost && !SwitchToBlockAckIfNeeded (recipient, tid, newSeq)))
             {
-              it->second.first.SetState (OriginatorBlockAckAgreement::INACTIVE);
+              it->second.first.CompleteExchange();
             }
         }
     }
@@ -502,7 +685,7 @@
 }
 
 void
-BlockAckManager::NotifyMpduTransmission (Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber)
+BlockAckManager::NotifyMpduTransmission (Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, enum WifiMacHeader::QosAckPolicy policy)
 {
   NS_LOG_FUNCTION (this << recipient << static_cast<uint32_t> (tid) << nextSeqNumber);
   Ptr<Packet> bar = 0;
@@ -519,11 +702,14 @@
       nextSeq = nextSeqNumber;
     }
   it->second.first.NotifyMpduTransmission (nextSeq);
-  bar = ScheduleBlockAckReqIfNeeded (recipient, tid);
-  if (bar != 0)
+  if (policy == WifiMacHeader::BLOCK_ACK)
     {
-      Bar request (bar, recipient, tid, it->second.first.IsImmediateBlockAck ());
-      m_bars.push_back (request);
+      bar = ScheduleBlockAckReqIfNeeded (recipient, tid);
+      if (bar != 0)
+        {
+            Bar request (bar, recipient, tid, it->second.first.IsImmediateBlockAck ());
+            m_bars.push_back (request);
+        }
     }
 }
 
@@ -588,6 +774,18 @@
   return size;
 }
 
+bool BlockAckManager::NeedBarRetransmission (uint8_t tid, uint16_t seqNumber, Mac48Address recipient)
+{
+  //the standard says the BAR gets discarded when all MSDUs lifetime expires
+  AgreementsI it = m_agreements.find (std::make_pair (recipient, tid));
+  NS_ASSERT (it != m_agreements.end());
+  CleanupBuffers();
+  if ((seqNumber+63) < it->second.first.GetStartingSequence())
+    return false;
+  else
+    return true;
+}
+
 void
 BlockAckManager::CleanupBuffers (void)
 {
@@ -616,7 +814,7 @@
                       && (*it)->hdr.GetQosTid () == j->second.first.GetTid ()
                       && (*it)->hdr.GetSequenceNumber () == i->hdr.GetSequenceNumber ())
                     {
-                      it = m_retryPackets.erase (it);
+                        it = m_retryPackets.erase (it);
                     }
                   else
                     {
@@ -676,8 +874,48 @@
         {
           return (*it)->hdr.GetSequenceNumber ();
         }
+      it++;
     }
   return 4096;
 }
 
+void
+BlockAckManager::SetTxOkCallback (TxOk callback)
+{
+  m_txOkCallback = callback;
+}
+
+void
+BlockAckManager::SetTxFailedCallback (TxFailed callback)
+{
+  m_txFailedCallback = callback;
+}
+
+void
+BlockAckManager::InsertInRetryQueue (PacketQueueI item)
+{
+  NS_LOG_INFO ("Adding to retry queue " <<(*item).hdr.GetSequenceNumber ());
+  if (m_retryPackets.size () == 0)
+    {
+      m_retryPackets.push_back (item);
+    }
+  else
+    {
+      for (std::list<PacketQueueI>::iterator it = m_retryPackets.begin (); it != m_retryPackets.end ();)
+        {
+            if(((item->hdr.GetSequenceNumber () - (*it)->hdr.GetSequenceNumber () + 4096) % 4096) > 2047)
+            {
+              it = m_retryPackets.insert (it, item);
+              break;
+            }
+            else
+            {
+              it++;
+              if(it == m_retryPackets.end ())
+                m_retryPackets.push_back (item); 
+            }
+        }
+    }
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/block-ack-manager.h ns-3.22/src/wifi/model/block-ack-manager.h
--- ns-3.21/src/wifi/model/block-ack-manager.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/block-ack-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -30,6 +30,8 @@
 #include "originator-block-ack-agreement.h"
 #include "ctrl-headers.h"
 #include "qos-utils.h"
+#include "wifi-mode.h"
+#include "wifi-remote-station-manager.h"
 
 namespace ns3 {
 
@@ -79,6 +81,13 @@
 public:
   BlockAckManager ();
   ~BlockAckManager ();
+  
+  /**
+   * Set up WifiRemoteStationManager associated with this BlockAckManager.
+   *
+   * \param manager WifiRemoteStationManager associated with this BlockAckManager
+   */
+  void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> manager);
   /**
    * \param recipient Address of peer station involved in block ack mechanism.
    * \param tid Traffic ID.
@@ -151,13 +160,14 @@
   /**
    * \param blockAck The received block ack frame.
    * \param recipient Sender of block ack frame.
+   * \param txMode mode of block ack frame.
    *
    * Invoked upon receipt of a block ack frame. Typically, this function, is called
    * by ns3::EdcaTxopN object. Performs a check on which MPDUs, previously sent
    * with ack policy set to Block Ack, were correctly received by the recipient.
    * An acknowledged MPDU is removed from the buffer, retransmitted otherwise.
    */
-  void NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient);
+  void NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, WifiMode txMode);
   /**
    * \param recipient Address of peer station involved in block ack mechanism.
    * \param tid Traffic ID.
@@ -190,7 +200,7 @@
    * \param tid Traffic ID of transmitted packet.
    *
    * Marks an agreement as unsuccessful. This happens if <i>recipient</i> station reject block ack setup
-   * by an ADDBAResponse frame with a failure status code. FOr now we assume that every QoS station accepts
+   * by an ADDBA Response frame with a failure status code. For now we assume that every QoS station accepts
    * a block ack setup.
    */
   void NotifyAgreementUnsuccessful (Mac48Address recipient, uint8_t tid);
@@ -198,12 +208,20 @@
    * \param recipient Address of peer station involved in block ack mechanism.
    * \param tid Traffic ID of transmitted packet.
    * \param nextSeqNumber Sequence number of the next packet that would be trasmitted by EdcaTxopN.
+   * \param policy ack policy of the transmitted packet.
    *
    * This method is typically invoked by ns3::EdcaTxopN object every time that a MPDU
    * with ack policy subfield in Qos Control field set to Block Ack is transmitted.
    * The <i>nextSeqNumber</i> parameter is used to block transmission of packets that are out of bitmap.
    */
-  void NotifyMpduTransmission (Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber);
+  void NotifyMpduTransmission (Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, WifiMacHeader::QosAckPolicy policy);
+  /**
+   * \param recipient Address of peer station involved in block ack mechanism.
+   * \param tid Traffic ID of transmitted packet.
+   *
+   * This method to set the number of packets waitin for blockAck = 0 since the receiver will send the blockAck right away
+   */ 
+  void CompleteAmpduExchange(Mac48Address recipient, uint8_t tid);
   /**
    * \param nPackets Minimum number of packets for use of block ack.
    *
@@ -281,6 +299,45 @@
    * the agreement doesn't exist the function returns 4096;
    */
   uint16_t GetSeqNumOfNextRetryPacket (Mac48Address recipient, uint8_t tid) const;
+  /**
+   * Checks if the packet already exists in the retransmit queue or not if it does then it doesn't add it again
+   */
+  bool AlreadyExists(uint16_t currentSeq, Mac48Address recipient, uint8_t tid);
+  /**
+   * Remove a packet after you peek in the queue and get it
+   */
+  bool RemovePacket (uint8_t tid, Mac48Address recipient, uint16_t seqnumber);
+  /*
+   * Peek in retransmit queue and get the next packet without removing it from the queue
+   */
+  Ptr<const Packet> PeekNextPacket (WifiMacHeader &hdr, Mac48Address recipient, uint8_t tid, Time *timestamp);
+  /**
+   * This function returns true if the lifetime of the packets a BAR refers to didn't expire yet else it returns false.
+   * If it return false then the BAR will be discarded (i.e. will not be re-transmitted)
+   */
+  bool NeedBarRetransmission (uint8_t tid, uint16_t seqNumber, Mac48Address recipient);
+
+  /**
+   * typedef for a callback to invoke when a
+   * packet transmission was completed successfully.
+   */
+  typedef Callback <void, const WifiMacHeader&> TxOk;
+  /**
+   * typedef for a callback to invoke when a
+   * packet transmission was failed.
+   */
+  typedef Callback <void, const WifiMacHeader&> TxFailed;
+  /**
+   * \param callback the callback to invoke when a
+   * packet transmission was completed successfully.
+   */
+  void SetTxOkCallback (TxOk callback);
+  /**
+   * \param callback the callback to invoke when a
+   * packet transmission was completed unsuccessfully.
+   */
+  void SetTxFailedCallback (TxFailed callback);
+    
 private:
   /**
    * \param recipient
@@ -343,6 +400,13 @@
     WifiMacHeader hdr;
     Time timestamp;
   };
+  /**
+   * \param item
+   *
+   * Insert item in retransmission queue.
+   * This method ensures packets are retransmitted in the correct order.
+   */
+  void InsertInRetryQueue (PacketQueueI item);
 
   /**
    * This data structure contains, for each block ack agreement (recipient, tid), a set of packets
@@ -368,6 +432,9 @@
   Callback<void, Mac48Address, uint8_t, bool> m_blockAckInactivityTimeout;
   Callback<void, Mac48Address, uint8_t> m_blockPackets;
   Callback<void, Mac48Address, uint8_t> m_unblockPackets;
+  TxOk m_txOkCallback;
+  TxFailed m_txFailedCallback;
+  Ptr<WifiRemoteStationManager> m_stationManager; //!<
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/capability-information.cc ns-3.22/src/wifi/model/capability-information.cc
--- ns-3.21/src/wifi/model/capability-information.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/capability-information.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,10 +20,10 @@
 #include "capability-information.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("CapabilityInformation");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CapabilityInformation");
+
 CapabilityInformation::CapabilityInformation ()
   : m_capability (0)
 {
diff -Naur ns-3.21/src/wifi/model/cara-wifi-manager.cc ns-3.22/src/wifi/model/cara-wifi-manager.cc
--- ns-3.21/src/wifi/model/cara-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/cara-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,11 +27,10 @@
 
 #define Min(a,b) ((a < b) ? a : b)
 
-NS_LOG_COMPONENT_DEFINE ("Cara");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Cara");
+
 /**
  * \brief hold per-remote-station state for CARA Wifi manager.
  *
@@ -177,7 +176,7 @@
 {
   NS_LOG_FUNCTION (this << st << size);
   CaraWifiRemoteStation *station = (CaraWifiRemoteStation *) st;
-  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 WifiTxVector
 CaraWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
@@ -185,7 +184,7 @@
   NS_LOG_FUNCTION (this << st);
   /// \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));
+  return WifiTxVector (GetSupported (st, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNess (st), GetStbc (st));
 }
 
 bool
diff -Naur ns-3.21/src/wifi/model/constant-rate-wifi-manager.cc ns-3.22/src/wifi/model/constant-rate-wifi-manager.cc
--- ns-3.21/src/wifi/model/constant-rate-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/constant-rate-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,12 +24,12 @@
 #include "ns3/assert.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("ConstantRateWifiManager");
-
 #define Min(a,b) ((a < b) ? a : b)
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ConstantRateWifiManager");
+
 NS_OBJECT_ENSURE_REGISTERED (ConstantRateWifiManager);
 
 TypeId
@@ -112,13 +112,13 @@
 ConstantRateWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
 {
   NS_LOG_FUNCTION (this << st << size);
-  return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (st), GetStbc (st));
+  return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNess (st), GetStbc (st));
 }
 WifiTxVector
 ConstantRateWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
   NS_LOG_FUNCTION (this << st);
-  return WifiTxVector (m_ctlMode, GetDefaultTxPowerLevel (), GetShortRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (st), GetStbc (st));
+  return WifiTxVector (m_ctlMode, GetDefaultTxPowerLevel (), GetShortRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNess (st), GetStbc (st));
 }
 
 bool
diff -Naur ns-3.21/src/wifi/model/ctrl-headers.cc ns-3.22/src/wifi/model/ctrl-headers.cc
--- ns-3.21/src/wifi/model/ctrl-headers.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/ctrl-headers.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 
 #include "ctrl-headers.h"
 
-NS_LOG_COMPONENT_DEFINE ("CtrlHeaders");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("CtrlHeaders");
+
 /***********************************
  *       Block ack request
  ***********************************/
diff -Naur ns-3.21/src/wifi/model/dca-txop.cc ns-3.22/src/wifi/model/dca-txop.cc
--- ns-3.21/src/wifi/model/dca-txop.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/dca-txop.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,13 +35,13 @@
 #include "wifi-mac.h"
 #include "random-stream.h"
 
-NS_LOG_COMPONENT_DEFINE ("DcaTxop");
-
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT if (m_low != 0) { std::clog << "[mac=" << m_low->GetAddress () << "] "; }
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DcaTxop");
+
 class DcaTxop::Dcf : public DcfState
 {
 public:
@@ -66,6 +66,14 @@
   {
     m_txop->NotifyChannelSwitching ();
   }
+  virtual void DoNotifySleep (void)
+  {
+    m_txop->NotifySleep ();
+  }
+  virtual void DoNotifyWakeUp (void)
+  {
+    m_txop->NotifyWakeUp ();
+  }
   DcaTxop *m_txop;
 };
 
@@ -512,6 +520,22 @@
   m_queue->Flush ();
   m_currentPacket = 0;
 }
+void
+DcaTxop::NotifySleep (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_currentPacket != 0)
+    {
+      m_queue->PushFront (m_currentPacket, m_currentHdr);
+      m_currentPacket = 0;
+    }
+}
+void
+DcaTxop::NotifyWakeUp (void)
+{
+  NS_LOG_FUNCTION (this);
+  RestartAccessIfNeeded ();
+}
 
 void
 DcaTxop::GotCts (double snr, WifiMode txMode)
diff -Naur ns-3.21/src/wifi/model/dca-txop.h ns-3.22/src/wifi/model/dca-txop.h
--- ns-3.21/src/wifi/model/dca-txop.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/dca-txop.h	2015-02-05 15:46:22.000000000 -0800
@@ -194,6 +194,15 @@
    * When a channel switching occurs, enqueued packets are removed.
    */
   void NotifyChannelSwitching (void);
+  /**
+   * When sleep operation occurs, if there is a pending packet transmission,
+   * it will be reinserted to the front of the queue.
+   */
+  void NotifySleep (void);
+  /**
+   * When wake up operation occurs, channel access will be restarted
+   */
+  void NotifyWakeUp (void);
 
   /* Event handlers */
   /**
diff -Naur ns-3.21/src/wifi/model/dcf.cc ns-3.22/src/wifi/model/dcf.cc
--- ns-3.21/src/wifi/model/dcf.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/dcf.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,10 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("Dcf");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("Dcf");
+
 NS_OBJECT_ENSURE_REGISTERED (Dcf);
 
 TypeId
diff -Naur ns-3.21/src/wifi/model/dcf-manager.cc ns-3.22/src/wifi/model/dcf-manager.cc
--- ns-3.21/src/wifi/model/dcf-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/dcf-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,13 +28,13 @@
 #include "wifi-mac.h"
 #include "mac-low.h"
 
-NS_LOG_COMPONENT_DEFINE ("DcfManager");
-
 #define MY_DEBUG(x) \
   NS_LOG_DEBUG (Simulator::Now () << " " << this << " " << x)
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DcfManager");
+
 /****************************************************************
  *      Implement the DCF state holder
  ****************************************************************/
@@ -161,6 +161,16 @@
 {
   DoNotifyChannelSwitching ();
 }
+void
+DcfState::NotifySleep (void)
+{
+  DoNotifySleep ();
+}
+void
+DcfState::NotifyWakeUp (void)
+{
+  DoNotifyWakeUp ();
+}
 
 
 /**
@@ -311,6 +321,19 @@
   m_phyListener = new PhyListener (this);
   phy->RegisterListener (m_phyListener);
 }
+
+void
+DcfManager::RemovePhyListener (Ptr<WifiPhy> phy)
+{
+  NS_LOG_FUNCTION (this << phy);
+  if (m_phyListener != 0)
+    {
+      phy->UnregisterListener (m_phyListener);
+      delete m_phyListener;
+      m_phyListener = 0;
+    }
+}
+
 void
 DcfManager::SetupLowListener (Ptr<MacLow> low)
 {
@@ -765,6 +788,13 @@
     {
       m_accessTimeout.Cancel ();
     }
+
+  // Reset backoffs
+  for (States::iterator i = m_states.begin (); i != m_states.end (); i++)
+    {
+      DcfState *state = *i;
+      state->NotifySleep ();
+    }
 }
 
 void
@@ -772,7 +802,6 @@
 {
   NS_LOG_FUNCTION (this);
   m_sleeping = false;
-  // Reset backoffs
   for (States::iterator i = m_states.begin (); i != m_states.end (); i++)
     {
       DcfState *state = *i;
@@ -784,6 +813,7 @@
         }
       state->ResetCw ();
       state->m_accessRequested = false;
+      state->NotifyWakeUp ();
     }
 }
 
diff -Naur ns-3.21/src/wifi/model/dcf-manager.h ns-3.22/src/wifi/model/dcf-manager.h
--- ns-3.21/src/wifi/model/dcf-manager.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/dcf-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -160,6 +160,14 @@
    * Notify that the device is switching channel.
    */
   void NotifyChannelSwitching (void);
+  /**
+   * Notify that the device has started to sleep.
+   */
+  void NotifySleep (void);
+  /**
+   * Notify that the device has started to wake up
+   */
+  void NotifyWakeUp (void);
 
 
   /**
@@ -194,10 +202,25 @@
   * Called by DcfManager to notify a DcfState subclass
   * that a channel switching occured.
   *
-  * The subclass is expected to flush the queue of
-  * packets.
+  * The subclass is expected to flush the queue of packets.
+  */
+  virtual void DoNotifyChannelSwitching (void) = 0;
+  /**
+  * Called by DcfManager to notify a DcfState subclass that the device has
+  * begun to sleep.
+  *
+  * The subclass is expected to re-insert the pending packet into the queue
   */
-  virtual void DoNotifyChannelSwitching () = 0;
+  virtual void DoNotifySleep (void) = 0;
+  /**
+  * Called by DcfManager to notify a DcfState subclass that the device 
+  * has begun to wake up.
+  *
+  * The subclass is expected to restart a new backoff by
+  * calling DcfState::StartBackoffNow and DcfManager::RequestAccess
+  * is access is still needed.
+  */
+  virtual void DoNotifyWakeUp (void) = 0;
 
   uint32_t m_aifsn;
   uint32_t m_backoffSlots;
@@ -239,6 +262,12 @@
    */
   void SetupPhyListener (Ptr<WifiPhy> phy);
   /**
+   * Remove current registered listener for Phy events.
+   *
+   * \param phy
+   */
+  void RemovePhyListener (Ptr<WifiPhy> phy);
+  /**
    * Set up listener for MacLow events.
    *
    * \param low
diff -Naur ns-3.21/src/wifi/model/dsss-error-rate-model.cc ns-3.22/src/wifi/model/dsss-error-rate-model.cc
--- ns-3.21/src/wifi/model/dsss-error-rate-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/dsss-error-rate-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "dsss-error-rate-model.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("DsssErrorRateModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("DsssErrorRateModel");
+
 #ifndef ENABLE_GSL
 const double DsssErrorRateModel::WLAN_SIR_PERFECT = 10.0;
 const double DsssErrorRateModel::WLAN_SIR_IMPOSSIBLE = 0.1;
@@ -35,7 +35,7 @@
 DsssErrorRateModel::DqpskFunction (double x)
 {
   NS_LOG_FUNCTION_NOARGS ();
-  return ((std::sqrt (2.0) + 1.0) / std::sqrt (8.0 * 3.1415926 * std::sqrt (2.0)))
+  return ((std::sqrt (2.0) + 1.0) / std::sqrt (8.0 * M_PI * std::sqrt (2.0)))
     * (1.0 / std::sqrt (x)) * std::exp ( -(2.0 - std::sqrt (2.0)) * x);
 }
 
diff -Naur ns-3.21/src/wifi/model/edca-txop-n.cc ns-3.22/src/wifi/model/edca-txop-n.cc
--- ns-3.21/src/wifi/model/edca-txop-n.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/edca-txop-n.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,13 +35,13 @@
 #include "mgt-headers.h"
 #include "qos-blocked-destinations.h"
 
-NS_LOG_COMPONENT_DEFINE ("EdcaTxopN");
-
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT if (m_low != 0) { std::clog << "[mac=" << m_low->GetAddress () << "] "; }
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("EdcaTxopN");
+
 class EdcaTxopN::Dcf : public DcfState
 {
 public:
@@ -66,6 +66,14 @@
   {
     m_txop->NotifyChannelSwitching ();
   }
+  virtual void DoNotifySleep (void)
+  {
+    m_txop->NotifySleep ();
+  }
+  virtual void DoNotifyWakeUp (void)
+  {
+    m_txop->NotifyWakeUp ();
+  }
   EdcaTxopN *m_txop;
 };
 
@@ -95,9 +103,9 @@
   {
     m_txop->MissedAck ();
   }
-  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source)
+  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, WifiMode txMode)
   {
-    m_txop->GotBlockAck (blockAck, source);
+    m_txop->GotBlockAck (blockAck, source,txMode);
   }
   virtual void MissedBlockAck (void)
   {
@@ -115,6 +123,10 @@
   {
     m_txop->EndTxNoAck ();
   }
+  virtual Ptr<WifiMacQueue> GetQueue (void)
+  { 
+    return m_txop->GetEdcaQueue ();
+  }
 
 private:
   EdcaTxopN *m_txop;
@@ -133,6 +145,50 @@
   {
     m_txop->SendDelbaFrame (address, tid, false);
   }
+  virtual Ptr<WifiMacQueue> GetQueue (void)
+  { 
+    return m_txop->GetEdcaQueue ();
+  }
+  virtual  void CompleteTransfer (Mac48Address recipient, uint8_t tid)
+  {
+    m_txop->CompleteAmpduTransfer (recipient, tid);
+  }
+  virtual void SetAmpdu(bool ampdu)
+  {
+    return m_txop->SetAmpduExist (ampdu);
+  }
+  virtual void CompleteMpduTx(Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp)
+  {
+    m_txop->CompleteMpduTx (packet, hdr, tstamp);
+  }
+  virtual uint16_t GetNextSequenceNumberfor (WifiMacHeader *hdr)
+  {
+    return m_txop->GetNextSequenceNumberfor (hdr);
+  }
+  virtual uint16_t PeekNextSequenceNumberfor (WifiMacHeader *hdr)
+  {
+    return m_txop->PeekNextSequenceNumberfor (hdr);
+  }
+  virtual Ptr<const Packet> PeekNextPacketInBaQueue (WifiMacHeader &header, Mac48Address recipient, uint8_t tid, Time *timestamp)
+  {
+    return m_txop->PeekNextRetransmitPacket (header, recipient, tid, timestamp);
+  }
+  virtual void RemoveFromBaQueue (uint8_t tid, Mac48Address recipient, uint16_t seqnumber)
+  {
+     m_txop->RemoveRetransmitPacket(tid, recipient, seqnumber);
+  }
+  virtual bool GetBlockAckAgreementExists (Mac48Address address, uint8_t tid)
+  {
+    return m_txop->GetBaAgreementExists (address,tid);
+  }
+  virtual uint32_t GetNOutstandingPackets (Mac48Address address, uint8_t tid)
+  {
+    return m_txop->GetNOutstandingPacketsInBa (address, tid);
+  }
+  virtual uint32_t GetNRetryNeededPackets (Mac48Address recipient, uint8_t tid) const
+  {
+    return m_txop->GetNRetryNeededPackets (recipient, tid);
+  }
 
 private:
   EdcaTxopN *m_txop;
@@ -161,7 +217,7 @@
                    MakeUintegerChecker<uint16_t> ())
     .AddAttribute ("Queue", "The WifiMacQueue object",
                    PointerValue (),
-                   MakePointerAccessor (&EdcaTxopN::GetQueue),
+                   MakePointerAccessor (&EdcaTxopN::GetEdcaQueue),
                    MakePointerChecker<WifiMacQueue> ())
   ;
   return tid;
@@ -171,7 +227,8 @@
   : m_manager (0),
     m_currentPacket (0),
     m_aggregator (0),
-    m_blockAckType (COMPRESSED_BLOCK_ACK)
+    m_blockAckType (COMPRESSED_BLOCK_ACK),
+    m_ampduExist (false)
 {
   NS_LOG_FUNCTION (this);
   m_transmissionListener = new EdcaTxopN::TransmissionListener (this);
@@ -186,6 +243,8 @@
   m_baManager->SetBlockDestinationCallback (MakeCallback (&QosBlockedDestinations::Block, m_qosBlockedDestinations));
   m_baManager->SetUnblockDestinationCallback (MakeCallback (&QosBlockedDestinations::Unblock, m_qosBlockedDestinations));
   m_baManager->SetMaxPacketDelay (m_queue->GetMaxDelay ());
+  m_baManager->SetTxOkCallback (MakeCallback (&EdcaTxopN::BaTxOk, this));
+  m_baManager->SetTxFailedCallback (MakeCallback (&EdcaTxopN::BaTxFailed, this));
 }
 
 EdcaTxopN::~EdcaTxopN ()
@@ -216,6 +275,30 @@
   m_aggregator = 0;
 }
 
+bool
+EdcaTxopN::GetBaAgreementExists (Mac48Address address, uint8_t tid)
+{
+  return m_baManager->ExistsAgreement (address, tid); 
+}
+
+uint32_t
+EdcaTxopN::GetNOutstandingPacketsInBa (Mac48Address address, uint8_t tid)
+{
+  return m_baManager->GetNBufferedPackets (address, tid); 
+}
+
+uint32_t
+EdcaTxopN::GetNRetryNeededPackets (Mac48Address recipient, uint8_t tid) const
+{
+ return m_baManager->GetNRetryNeededPackets (recipient, tid);
+}
+
+void
+EdcaTxopN::CompleteAmpduTransfer (Mac48Address recipient, uint8_t tid)
+{
+  m_baManager->CompleteAmpduExchange (recipient, tid);
+}
+
 void
 EdcaTxopN::SetManager (DcfManager *manager)
 {
@@ -243,6 +326,7 @@
 {
   NS_LOG_FUNCTION (this << remoteManager);
   m_stationManager = remoteManager;
+  m_baManager->SetWifiRemoteStationManager(m_stationManager);
 }
 void
 EdcaTxopN::SetTypeOfStation (enum TypeOfStation type)
@@ -259,7 +343,7 @@
 }
 
 Ptr<WifiMacQueue >
-EdcaTxopN::GetQueue () const
+EdcaTxopN::GetEdcaQueue () const
 {
   NS_LOG_FUNCTION (this);
   return m_queue;
@@ -335,6 +419,28 @@
   return !m_queue->IsEmpty () || m_currentPacket != 0 || m_baManager->HasPackets ();
 }
 
+uint16_t EdcaTxopN::GetNextSequenceNumberfor (WifiMacHeader *hdr)
+{
+  return m_txMiddle->GetNextSequenceNumberfor (hdr);
+}
+
+uint16_t EdcaTxopN::PeekNextSequenceNumberfor (WifiMacHeader *hdr)
+{
+  return m_txMiddle->PeekNextSequenceNumberfor (hdr);
+}
+
+Ptr<const Packet>
+EdcaTxopN::PeekNextRetransmitPacket (WifiMacHeader &header,Mac48Address recipient, uint8_t tid, Time *timestamp)
+{
+  return m_baManager->PeekNextPacket (header,recipient,tid, timestamp);
+}
+
+void
+EdcaTxopN::RemoveRetransmitPacket (uint8_t tid, Mac48Address recipient, uint16_t seqnumber)
+{
+   m_baManager->RemovePacket (tid, recipient, seqnumber);
+}
+
 void
 EdcaTxopN::NotifyAccessGranted (void)
 {
@@ -405,7 +511,7 @@
     }
   else
     {
-      if (m_currentHdr.IsQosData () && m_currentHdr.IsQosBlockAck ())
+        if (m_currentHdr.IsQosData () && m_currentHdr.IsQosBlockAck ())
         {
           params.DisableAck ();
         }
@@ -441,9 +547,10 @@
       else
         {
           WifiMacHeader peekedHdr;
+          Time tstamp;
           if (m_currentHdr.IsQosData ()
               && m_queue->PeekByTidAndAddress (&peekedHdr, m_currentHdr.GetQosTid (),
-                                               WifiMacHeader::ADDR1, m_currentHdr.GetAddr1 ())
+                                               WifiMacHeader::ADDR1, m_currentHdr.GetAddr1 (), &tstamp)
               && !m_currentHdr.GetAddr1 ().IsBroadcast ()
               && m_aggregator != 0 && !m_currentHdr.IsRetry ())
             {
@@ -456,7 +563,7 @@
               bool isAmsdu = false;
               Ptr<const Packet> peekedPacket = m_queue->PeekByTidAndAddress (&peekedHdr, m_currentHdr.GetQosTid (),
                                                                              WifiMacHeader::ADDR1,
-                                                                             m_currentHdr.GetAddr1 ());
+                                                                             m_currentHdr.GetAddr1 (), &tstamp);
               while (peekedPacket != 0)
                 {
                   aggregated = m_aggregator->Aggregate (peekedPacket, currentAggregatedPacket,
@@ -472,7 +579,7 @@
                       break;
                     }
                   peekedPacket = m_queue->PeekByTidAndAddress (&peekedHdr, m_currentHdr.GetQosTid (),
-                                                               WifiMacHeader::ADDR1, m_currentHdr.GetAddr1 ());
+                                                               WifiMacHeader::ADDR1, m_currentHdr.GetAddr1 (), &tstamp);
                 }
               if (isAmsdu)
                 {
@@ -496,7 +603,8 @@
           params.DisableNextData ();
           m_low->StartTransmission (m_currentPacket, &m_currentHdr,
                                     params, m_transmissionListener);
-          CompleteTx ();
+          if(!GetAmpduExist())
+            CompleteTx ();
         }
     }
 }
@@ -535,6 +643,10 @@
         {
           m_txFailedCallback (m_currentHdr);
         }
+      if (GetAmpduExist())
+        {
+          m_low->FlushAggregateQueue ();
+        }
       // to reset the dcf.
       m_currentPacket = 0;
       m_dcf->ResetCw ();
@@ -554,6 +666,22 @@
   m_queue->Flush ();
   m_currentPacket = 0;
 }
+void
+EdcaTxopN::NotifySleep (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_currentPacket != 0)
+    {
+      m_queue->PushFront (m_currentPacket, m_currentHdr);
+      m_currentPacket = 0;
+    }
+}
+void
+EdcaTxopN::NotifyWakeUp (void)
+{
+  NS_LOG_FUNCTION (this);
+  RestartAccessIfNeeded ();
+}
 
 void
 EdcaTxopN::Queue (Ptr<const Packet> packet, const WifiMacHeader &hdr)
@@ -626,8 +754,36 @@
         {
           m_txFailedCallback (m_currentHdr);
         }
-      // to reset the dcf.
-      m_currentPacket = 0;
+      if (!GetAmpduExist())
+        {
+        // to reset the dcf.
+        m_currentPacket = 0;
+        }
+      else
+        {
+          NS_LOG_DEBUG ("Transmit Block Ack Request");
+          CtrlBAckRequestHeader reqHdr;
+          reqHdr.SetType (COMPRESSED_BLOCK_ACK);
+          uint8_t tid = m_currentHdr.GetQosTid ();
+          reqHdr.SetStartingSequence (m_txMiddle->PeekNextSequenceNumberfor (&m_currentHdr));
+          reqHdr.SetTidInfo (tid);
+          reqHdr.SetHtImmediateAck(true);
+          Ptr<Packet> bar = Create<Packet> ();
+          bar->AddHeader (reqHdr);
+          Bar request (bar, m_currentHdr.GetAddr1 (), tid, reqHdr.MustSendHtImmediateAck());
+          m_currentBar = request;
+          WifiMacHeader hdr;
+          hdr.SetType (WIFI_MAC_CTL_BACKREQ);
+          hdr.SetAddr1 (request.recipient);
+          hdr.SetAddr2 (m_low->GetAddress ());
+          hdr.SetAddr3 (m_low->GetBssid ());
+          hdr.SetDsNotTo ();
+          hdr.SetDsNotFrom ();
+          hdr.SetNoRetry ();
+          hdr.SetNoMoreFragments ();
+          m_currentPacket = request.bar;
+          m_currentHdr = hdr;
+        }
       m_dcf->ResetCw ();
     }
   else
@@ -645,11 +801,68 @@
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("missed block ack");
-  //should i report this to station addressed by ADDR1?
-  NS_LOG_DEBUG ("Retransmit block ack request");
-  m_currentHdr.SetRetry ();
+  if (NeedBarRetransmission())
+  {
+    if (!GetAmpduExist())
+    {
+      //should i report this to station addressed by ADDR1?
+      NS_LOG_DEBUG ("Retransmit block ack request");
+      m_currentHdr.SetRetry ();
+    }
+    else
+    {
+          //standard says when loosing a BlockAck originator may send a BAR page 139
+          NS_LOG_DEBUG ("Transmit Block Ack Request"); 
+          CtrlBAckRequestHeader reqHdr;
+          reqHdr.SetType (COMPRESSED_BLOCK_ACK);
+          uint8_t tid = 0;
+          if (m_currentHdr.IsQosData())
+            {
+               tid = m_currentHdr.GetQosTid ();
+               reqHdr.SetStartingSequence (m_currentHdr.GetSequenceNumber ());
+            }
+          else if (m_currentHdr.IsBlockAckReq())
+            {
+              CtrlBAckRequestHeader baReqHdr;
+              m_currentPacket->PeekHeader (baReqHdr);
+              tid = baReqHdr.GetTidInfo ();
+              reqHdr.SetStartingSequence (baReqHdr.GetStartingSequence ());
+            }
+         else if (m_currentHdr.IsBlockAck())
+           {
+             CtrlBAckResponseHeader baRespHdr;
+             m_currentPacket->PeekHeader (baRespHdr);
+             tid = baRespHdr.GetTidInfo();
+             reqHdr.SetStartingSequence (m_currentHdr.GetSequenceNumber ());
+           }   
+        reqHdr.SetTidInfo (tid);
+        reqHdr.SetHtImmediateAck (true);
+        Ptr<Packet> bar = Create<Packet> ();
+        bar->AddHeader (reqHdr);
+        Bar request (bar, m_currentHdr.GetAddr1 (), tid, reqHdr.MustSendHtImmediateAck ());
+        m_currentBar = request;
+        WifiMacHeader hdr;
+        hdr.SetType (WIFI_MAC_CTL_BACKREQ);
+        hdr.SetAddr1 (request.recipient);
+        hdr.SetAddr2 (m_low->GetAddress ());
+        hdr.SetAddr3 (m_low->GetBssid ());
+        hdr.SetDsNotTo ();
+        hdr.SetDsNotFrom ();
+        hdr.SetNoRetry ();
+        hdr.SetNoMoreFragments ();
+
+        m_currentPacket = request.bar;
+        m_currentHdr = hdr;
+      }
   m_dcf->UpdateFailedCw ();
-
+  }
+  else
+  {
+      NS_LOG_DEBUG ("Block Ack Request Fail");
+      // to reset the dcf.
+      m_currentPacket = 0;
+      m_dcf->ResetCw ();
+  }
   m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
   RestartAccessIfNeeded ();
 }
@@ -708,6 +921,33 @@
                                                    m_currentPacket);
 }
 
+bool
+EdcaTxopN::NeedBarRetransmission (void)
+{
+   uint8_t tid = 0;
+   uint16_t seqNumber = 0;
+   if (m_currentHdr.IsQosData ())
+     {
+       tid = m_currentHdr.GetQosTid ();
+       seqNumber = m_currentHdr.GetSequenceNumber ();
+     }
+  else if (m_currentHdr.IsBlockAckReq ())
+    {
+      CtrlBAckRequestHeader baReqHdr;
+      m_currentPacket->PeekHeader (baReqHdr);
+      tid = baReqHdr.GetTidInfo ();
+      seqNumber = baReqHdr.GetStartingSequence ();
+     }
+  else if (m_currentHdr.IsBlockAck ())
+     {
+        CtrlBAckResponseHeader baRespHdr;
+        m_currentPacket->PeekHeader (baRespHdr);
+        tid = baRespHdr.GetTidInfo ();
+        seqNumber = m_currentHdr.GetSequenceNumber ();
+     }  
+  return m_baManager->NeedBarRetransmission (tid, seqNumber, m_currentHdr.GetAddr1 ());
+}
+
 void
 EdcaTxopN::NextFragment (void)
 {
@@ -908,11 +1148,15 @@
 }
 
 void
-EdcaTxopN::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient)
+EdcaTxopN::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, WifiMode txMode)
 {
   NS_LOG_FUNCTION (this << blockAck << recipient);
   NS_LOG_DEBUG ("got block ack from=" << recipient);
-  m_baManager->NotifyGotBlockAck (blockAck, recipient);
+  m_baManager->NotifyGotBlockAck (blockAck, recipient, txMode);
+  if (!m_txOkCallback.IsNull ())
+    {
+      m_txOkCallback (m_currentHdr);
+    }
   m_currentPacket = 0;
   m_dcf->ResetCw ();
   m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
@@ -932,10 +1176,20 @@
     }
   if (m_baManager->ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED))
     {
-      m_currentHdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
+        m_currentHdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
     }
 }
 
+bool EdcaTxopN::GetAmpduExist(void)
+{
+  return m_ampduExist;
+}
+ 
+void EdcaTxopN::SetAmpduExist(bool ampdu)
+{
+  m_ampduExist = ampdu;
+}
+
 void
 EdcaTxopN::CompleteTx (void)
 {
@@ -948,10 +1202,19 @@
         }
       m_baManager->NotifyMpduTransmission (m_currentHdr.GetAddr1 (), m_currentHdr.GetQosTid (),
                                            m_txMiddle->GetNextSeqNumberByTidAndAddress (m_currentHdr.GetQosTid (),
-                                                                                        m_currentHdr.GetAddr1 ()));
+                                                                                        m_currentHdr.GetAddr1 ()), WifiMacHeader::BLOCK_ACK);
     }
 }
 
+void
+EdcaTxopN::CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp)
+{
+    m_baManager->StorePacket (packet, hdr, tstamp);
+    m_baManager->NotifyMpduTransmission (hdr.GetAddr1 (), hdr.GetQosTid (),
+                                         m_txMiddle->GetNextSeqNumberByTidAndAddress (hdr.GetQosTid (),
+                                                                                      hdr.GetAddr1 ()), WifiMacHeader::NORMAL_ACK);
+}
+
 bool
 EdcaTxopN::SetupBlockAckIfNeeded ()
 {
@@ -1160,4 +1423,25 @@
   m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
   ns3::Dcf::DoInitialize ();
 }
+
+void
+EdcaTxopN::BaTxOk (const WifiMacHeader &hdr)
+{
+  NS_LOG_FUNCTION (this << hdr);
+  if (!m_txOkCallback.IsNull ())
+    {
+      m_txOkCallback (m_currentHdr);
+    }
+}
+
+void
+EdcaTxopN::BaTxFailed (const WifiMacHeader &hdr)
+{
+  NS_LOG_FUNCTION (this << hdr);
+  if (!m_txFailedCallback.IsNull ())
+    {
+      m_txFailedCallback (m_currentHdr);
+    }
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/edca-txop-n.h ns-3.22/src/wifi/model/edca-txop-n.h
--- ns-3.21/src/wifi/model/edca-txop-n.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/edca-txop-n.h	2015-02-05 15:46:22.000000000 -0800
@@ -141,13 +141,12 @@
    * \return type of station
    */
   enum TypeOfStation GetTypeOfStation (void) const;
-
   /**
    * Return the packet queue associated with this EdcaTxopN.
    *
    * \return WifiMacQueue
    */
-  Ptr<WifiMacQueue > GetQueue () const;
+  Ptr<WifiMacQueue > GetEdcaQueue () const;
   virtual void SetMinCw (uint32_t minCw);
   virtual void SetMaxCw (uint32_t maxCw);
   virtual void SetAifsn (uint32_t aifsn);
@@ -162,6 +161,39 @@
    */
   Ptr<MacLow> Low (void);
   Ptr<MsduAggregator> GetMsduAggregator (void) const;
+  /**
+   * \param recipient address of the peer station
+   * \param tid traffic ID.
+   * \return true if a block ack agreement exists, false otherwise
+   *
+   * Checks if a block ack agreement exists with station addressed by
+   * <i>recipient</i> for tid <i>tid</i>.
+   */
+  bool GetBaAgreementExists (Mac48Address address, uint8_t tid);
+  /**
+   * \param recipient address of peer station involved in block ack mechanism.
+   * \param tid traffic ID.
+   * \return the number of packets buffered for a specified agreement
+   *
+   * Returns number of packets buffered for a specified agreement. 
+   */
+  uint32_t GetNOutstandingPacketsInBa (Mac48Address address, uint8_t tid);
+  /**
+   * \param recipient address of peer station involved in block ack mechanism.
+   * \param tid traffic ID.
+   * \return the number of packets for a specific agreement that need retransmission
+   *
+   * Returns number of packets for a specific agreement that need retransmission.
+   */
+  uint32_t GetNRetryNeededPackets (Mac48Address recipient, uint8_t tid) const;
+  /**
+   * \param recipient address of peer station involved in block ack mechanism.
+   * \param tid Ttraffic ID of transmitted packet.
+   *
+   * This function resets the status of OriginatorBlockAckAgreement after the transfer
+   * of an A-MPDU with ImmediateBlockAck policy (i.e. no BAR is scheduled)
+   */
+  void CompleteAmpduTransfer(Mac48Address recipient, uint8_t tid);
 
   /* dcf notifications forwarded here */
   /**
@@ -187,6 +219,14 @@
    * When a channel switching occurs, enqueued packets are removed.
    */
   void NotifyChannelSwitching (void);
+  /**
+   * When sleep operation occurs, re-insert pending packet into front of the queue
+   */
+  void NotifySleep (void);
+  /**
+   * When wake up operation occurs, restart channel access
+   */
+  void NotifyWakeUp (void);
 
   /* Event handlers */
   /**
@@ -212,8 +252,9 @@
    *
    * \param blockAck
    * \param recipient
+   * \param txMode
    */
-  void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient);
+  void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, WifiMode txMode);
   /**
    * Event handler when a Block ACK timeout has occurred.
    */
@@ -238,7 +279,6 @@
    * does not require an ACK has completed.
    */
   void EndTxNoAck (void);
-
   /**
    * Restart access request if needed.
    */
@@ -266,6 +306,12 @@
    */
   bool NeedDataRetransmission (void);
   /**
+   * Check if Block ACK Request should be re-transmitted.
+   *
+   * \return true if BAR should be re-transmitted, false otherwise
+   */
+  bool NeedBarRetransmission (void);
+  /**
    * Check if the current packet should be fragmented.
    *
    * \return true if the current packet should be fragmented,
@@ -291,9 +337,9 @@
    */
   uint32_t GetFragmentOffset (void);
   /**
-   * Check if the curren fragment is the last fragment.
+   * Check if the current fragment is the last fragment.
    *
-   * \return true if the curren fragment is the last fragment,
+   * \return true if the current fragment is the last fragment,
    *         false otherwise
    */
   bool IsLastFragment (void) const;
@@ -311,7 +357,6 @@
    * \return the fragment with the current fragment number
    */
   Ptr<Packet> GetFragmentPacket (WifiMacHeader *hdr);
-
   /**
    * Set the access category of this EDCAF.
    *
@@ -352,8 +397,46 @@
    * \return the current threshold for block ACK mechanism
    */
   uint8_t GetBlockAckThreshold (void) const;
+    
   void SetBlockAckInactivityTimeout (uint16_t timeout);
   void SendDelbaFrame (Mac48Address addr, uint8_t tid, bool byOriginator);
+  void CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp);
+  bool GetAmpduExist (void);
+  void SetAmpduExist (bool ampdu);
+  /**
+   * Return the next sequence number for the given header.
+   *
+   * \param hdr Wi-Fi header
+   * \return the next sequence number
+   */
+  uint16_t GetNextSequenceNumberfor (WifiMacHeader *hdr);
+  /**
+   * Return the next sequence number for the Traffic ID and destination, but do not pick it (i.e. the current sequence number remains unchanged).
+   *
+   * \param hdr Wi-Fi header
+   * \return the next sequence number
+   */
+  uint16_t PeekNextSequenceNumberfor (WifiMacHeader *hdr);
+  /**
+   * Remove a packet after you peek in the retransmit queue and get it
+   */
+  void RemoveRetransmitPacket (uint8_t tid, Mac48Address recipient, uint16_t seqnumber);
+  /*
+   * Peek in retransmit queue and get the next packet without removing it from the queue
+   */
+  Ptr<const Packet> PeekNextRetransmitPacket (WifiMacHeader &header, Mac48Address recipient, uint8_t tid, Time *timestamp);
+  /**
+   * The packet we sent was successfully received by the receiver
+   *
+   * \param hdr the header of the packet that we successfully sent
+   */
+  void BaTxOk (const WifiMacHeader &hdr);
+  /**
+   * The packet we sent was successfully received by the receiver
+   *
+   * \param hdr the header of the packet that we failed to sent
+   */
+  void BaTxFailed (const WifiMacHeader &hdr);
 
  /**
   * Assign a fixed random variable stream number to the random variables
@@ -385,14 +468,14 @@
   EdcaTxopN (const EdcaTxopN &);
 
   /**
-   * If number of packets in the queue reaches m_blockAckThreshold value, an ADDBARequest frame
+   * If number of packets in the queue reaches m_blockAckThreshold value, an ADDBA Request frame
    * is sent to destination in order to setup a block ack.
    *
    * \return true if we tried to set up block ACK, false otherwise
    */
   bool SetupBlockAckIfNeeded ();
   /**
-   * Sends an ADDBARequest to establish a block ack agreement with sta
+   * Sends an ADDBA Request to establish a block ack agreement with sta
    * addressed by <i>recipient</i> for tid <i>tid</i>.
    *
    * \param recipient
@@ -458,6 +541,7 @@
   Time m_currentPacketTimestamp;
   uint16_t m_blockAckInactivityTimeout;
   struct Bar m_currentBar;
+  bool m_ampduExist;
 };
 
 }  // namespace ns3
diff -Naur ns-3.21/src/wifi/model/ht-capabilities.cc ns-3.22/src/wifi/model/ht-capabilities.cc
--- ns-3.21/src/wifi/model/ht-capabilities.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/ht-capabilities.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,9 @@
 #include "ns3/log.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("HtCapabilities");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("HtCapabilities");
 
 HtCapabilities::HtCapabilities ()
    :  m_ldpc(0),
@@ -314,9 +313,10 @@
 std::ostream &
 operator << (std::ostream &os, const HtCapabilities &htcapabilities)
 {
-  os <<  htcapabilities.GetLdpc () << "|" << htcapabilities.GetSupportedChannelWidth ()
-  << "|" << htcapabilities.GetGreenfield ()
-  << "|" << htcapabilities.GetShortGuardInterval20 ();
+  os <<  bool (htcapabilities.GetLdpc ())
+     << "|" << bool (htcapabilities.GetSupportedChannelWidth ())
+     << "|" << bool (htcapabilities.GetGreenfield ())
+     << "|" << bool (htcapabilities.GetShortGuardInterval20 ());
 
   return os;
 }
diff -Naur ns-3.21/src/wifi/model/ht-capabilities.h ns-3.22/src/wifi/model/ht-capabilities.h
--- ns-3.21/src/wifi/model/ht-capabilities.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/ht-capabilities.h	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,12 @@
 namespace ns3 {
 
 /**
- * \brief The Ht Capabilities Information Element
+ * \brief The HT Capabilities Information Element
  * \ingroup wifi
  *
- * This class knows how to serialise and deserialise the Ht Capabilities Information Element
+ * This class knows how to serialise and deserialise the HT Capabilities Information Element
+ *
+ * \see attribute_HtCapabilities
  */
 class HtCapabilities: public WifiInformationElement
 {
@@ -64,7 +66,7 @@
   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 GetSupportedChannelWidth (void) const;
   uint8_t* GetRxMcsBitmask();
   
   WifiInformationElementId ElementId () const;
@@ -125,7 +127,7 @@
 std::ostream &operator << (std::ostream &os, const HtCapabilities &htcapabilities);
 std::istream &operator >> (std::istream &is, HtCapabilities &htcapabilities);
 
-ATTRIBUTE_HELPER_HEADER (HtCapabilities)
+ATTRIBUTE_HELPER_HEADER (HtCapabilities);
 
 } // namespace ns3
 
diff -Naur ns-3.21/src/wifi/model/ideal-wifi-manager.cc ns-3.22/src/wifi/model/ideal-wifi-manager.cc
--- ns-3.21/src/wifi/model/ideal-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/ideal-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -160,7 +160,7 @@
           maxMode = mode;
         }
     }
-  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 WifiTxVector
 IdealWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
@@ -182,7 +182,7 @@
           maxMode = mode;
         }
     }
-  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.21/src/wifi/model/interference-helper.cc ns-3.22/src/wifi/model/interference-helper.cc
--- ns-3.21/src/wifi/model/interference-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/interference-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -24,10 +24,10 @@
 #include "ns3/log.h"
 #include <algorithm>
 
-NS_LOG_COMPONENT_DEFINE ("InterferenceHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("InterferenceHelper");
+
 /****************************************************************
  *       Phy event class
  ****************************************************************/
@@ -281,10 +281,10 @@
 
    }
   WifiMode headerMode = WifiPhy::GetPlcpHeaderMode (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
+  Time plcpHeaderStart = (*j).GetTime () + WifiPhy::GetPlcpPreambleDuration (payloadMode, preamble); //packet start time+ preamble
+  Time plcpHsigHeaderStart = plcpHeaderStart + WifiPhy::GetPlcpHeaderDuration (payloadMode, preamble);//packet start time+ preamble+L SIG
+  Time plcpHtTrainingSymbolsStart = plcpHsigHeaderStart + WifiPhy::GetPlcpHtSigHeaderDuration (payloadMode, preamble);//packet start time+ preamble+L SIG+HT SIG
+  Time plcpPayloadStart =plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble,event->GetTxVector()); //packet start time+ preamble+L SIG+HT SIG+Training
   double noiseInterferenceW = (*j).GetDelta ();
   double powerW = event->GetRxPowerW ();
     j++;
diff -Naur ns-3.21/src/wifi/model/mac-low.cc ns-3.22/src/wifi/model/mac-low.cc
--- ns-3.21/src/wifi/model/mac-low.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/mac-low.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,8 +34,10 @@
 #include "qos-utils.h"
 #include "edca-txop-n.h"
 #include "snr-tag.h"
-
-NS_LOG_COMPONENT_DEFINE ("MacLow");
+#include "yans-wifi-phy.h"
+#include "ampdu-tag.h"
+#include "wifi-mac-queue.h"
+#include "mpdu-aggregator.h"
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT std::clog << "[mac=" << m_self << "] "
@@ -43,6 +45,8 @@
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MacLow");
+
 MacLowTransmissionListener::MacLowTransmissionListener ()
 {
 }
@@ -50,8 +54,7 @@
 {
 }
 void
-MacLowTransmissionListener::GotBlockAck (const CtrlBAckResponseHeader *blockAck,
-                                         Mac48Address source)
+MacLowTransmissionListener::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, WifiMode mode)
 {
 }
 void
@@ -72,6 +75,46 @@
 {
 }
 
+void MacLowBlockAckEventListener::SetAmpdu (bool ampdu)
+{
+}
+void MacLowBlockAckEventListener::CompleteTransfer(Mac48Address address, uint8_t tid)
+{
+}
+void
+MacLowBlockAckEventListener::CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp)
+{
+}
+uint16_t 
+MacLowBlockAckEventListener::GetNextSequenceNumberfor (WifiMacHeader *hdr)
+{
+ return 0;
+}
+uint16_t 
+MacLowBlockAckEventListener::PeekNextSequenceNumberfor (WifiMacHeader *hdr)
+{
+ return 0;
+}
+Ptr<const Packet> 
+MacLowBlockAckEventListener::PeekNextPacketInBaQueue (WifiMacHeader &header, Mac48Address recipient, uint8_t tid, Time *timestamp)
+{
+ return 0;
+}
+void 
+MacLowBlockAckEventListener::RemoveFromBaQueue (uint8_t tid, Mac48Address recipient, uint16_t seqnumber)
+{
+}
+uint32_t 
+MacLowBlockAckEventListener::GetNOutstandingPackets (Mac48Address recipient, uint8_t tid)
+{
+  return 0;
+}
+uint32_t 
+MacLowBlockAckEventListener::GetNRetryNeededPackets (Mac48Address recipient, uint8_t tid) const
+{
+  return 0;
+}
+
 MacLowTransmissionParameters::MacLowTransmissionParameters ()
   : m_nextSize (0),
     m_waitAck (ACK_NONE),
@@ -304,15 +347,20 @@
     m_sendDataEvent (),
     m_waitSifsEvent (),
     m_endTxNoAckEvent (),
+    m_mpduAggregator (0),
     m_currentPacket (0),
     m_listener (0),
     m_phyMacLowListener (0),
-    m_ctsToSelfSupported (false)
+    m_ctsToSelfSupported (false),
+    m_receivedAtLeastOneMpdu (false)
 {
   NS_LOG_FUNCTION (this);
   m_lastNavDuration = Seconds (0);
   m_lastNavStart = Seconds (0);
   m_promisc = false;
+  m_ampdu = false;
+  m_sentMpdus = 0;
+  m_aggregateQueue = CreateObject<WifiMacQueue> ();
 }
 
 MacLow::~MacLow ()
@@ -327,6 +375,16 @@
   phy->RegisterListener (m_phyMacLowListener);
 }
 
+void
+MacLow::RemovePhyMacLowListener (Ptr<WifiPhy> phy)
+{
+  if (m_phyMacLowListener != 0 )
+    {
+      phy->UnregisterListener (m_phyMacLowListener);
+      delete m_phyMacLowListener;
+      m_phyMacLowListener = 0;
+    }
+}
 
 void
 MacLow::DoDispose (void)
@@ -351,6 +409,10 @@
 	  delete m_phyMacLowListener;
 	  m_phyMacLowListener = 0;
     }
+  m_mpduAggregator = 0;
+  m_sentMpdus = 0;
+  m_aggregateQueue = 0;
+  m_ampdu = false;
 }
 
 void
@@ -429,10 +491,23 @@
 MacLow::SetPhy (Ptr<WifiPhy> phy)
 {
   m_phy = phy;
-  m_phy->SetReceiveOkCallback (MakeCallback (&MacLow::ReceiveOk, this));
+  m_phy->SetReceiveOkCallback (MakeCallback (&MacLow::DeaggregateAmpduAndReceive, this));
   m_phy->SetReceiveErrorCallback (MakeCallback (&MacLow::ReceiveError, this));
   SetupPhyMacLowListener (phy);
 }
+Ptr<WifiPhy>
+MacLow::GetPhy (void) const
+{
+  return m_phy;
+}
+void
+MacLow::ResetPhy (void)
+{
+  m_phy->SetReceiveOkCallback (MakeNullCallback<void,Ptr<Packet>, double, WifiMode, enum WifiPreamble>  ());
+  m_phy->SetReceiveErrorCallback (MakeNullCallback<void,Ptr<const Packet>, double> ());
+  RemovePhyMacLowListener (m_phy);
+  m_phy = 0;
+}
 void
 MacLow::SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> manager)
 {
@@ -571,6 +646,22 @@
   m_dcfListeners.push_back (listener);
 }
 
+bool
+MacLow::IsAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
+{
+  uint32_t size, actualSize;
+  WifiMacTrailer fcs;
+  size = packet->GetSize () + hdr.GetSize () + fcs.GetSerializedSize ();
+  Ptr<Packet> p = AggregateToAmpdu (packet, hdr);
+  actualSize = p->GetSize();
+  if (actualSize > size)
+    {
+      m_currentPacket = p;
+      return true;
+    }
+  else
+      return false;
+}
 
 void
 MacLow::StartTransmission (Ptr<const Packet> packet,
@@ -593,7 +684,6 @@
    * QapScheduler has taken access to the channel from
    * one of the Edca of the QAP.
    */
-  m_currentPacket = packet->Copy ();
   m_currentHdr = *hdr;
   CancelAllEvents ();
   m_listener = listener;
@@ -601,9 +691,26 @@
 
   //NS_ASSERT (m_phy->IsStateIdle ());
 
+  if(m_aggregateQueue->GetSize () == 0)
+  {
+    m_currentPacket = packet->Copy ();
+    m_ampdu = IsAmpdu (m_currentPacket, m_currentHdr);
+  }
+  else
+  {
+   /*m_aggregateQueue > 0 occurs when a RTS/CTS exchange failed before an A-MPDU transmission.
+    *In that case, we transmit the same A-MPDU as previously.
+    */
+    m_sentMpdus = m_aggregateQueue->GetSize ();
+    m_ampdu = true;
+  }
+
   NS_LOG_DEBUG ("startTx size=" << GetSize (m_currentPacket, &m_currentHdr) <<
                 ", to=" << m_currentHdr.GetAddr1 () << ", listener=" << m_listener);
 
+  if (m_ampdu)
+      m_txParams.EnableCompressedBlockAck ();
+
   if (m_txParams.MustSendRts ())
     {
       SendRtsForPacket ();
@@ -634,7 +741,33 @@
 {
   NS_LOG_FUNCTION (this << packet << rxSnr);
   NS_LOG_DEBUG ("rx failed ");
-  if (m_txParams.MustWaitFastAck ())
+  AmpduTag ampdu;
+  Ptr<Packet> pkt = packet->Copy();
+  bool isInAmpdu = pkt->RemovePacketTag(ampdu);
+
+  if(isInAmpdu && m_receivedAtLeastOneMpdu && (ampdu.GetNoOfMpdus() == 1))
+    {
+      MpduAggregator::DeaggregatedMpdus packets =  MpduAggregator::Deaggregate (pkt);
+      MpduAggregator::DeaggregatedMpdusCI n = packets.begin ();
+      WifiMacHeader hdr;
+      (*n).first->PeekHeader(hdr);
+      if(hdr.IsQosData())
+        {
+          NS_LOG_DEBUG ("last a-mpdu subframe detected/sendImmediateBlockAck from=" << hdr.GetAddr2 ());
+          m_sendAckEvent = Simulator::Schedule (GetSifs (),
+                                                &MacLow::SendBlockAckAfterAmpdu, this,
+                                                hdr.GetQosTid(),
+                                                hdr.GetAddr2 (),
+                                                hdr.GetDuration (),
+                                                m_currentMode);
+        }
+      else if (hdr.IsBlockAckReq())
+        {
+ 	  NS_LOG_DEBUG("last a-mpdu subframe is BAR");
+  	}
+      m_receivedAtLeastOneMpdu = false;
+    }
+  else if (m_txParams.MustWaitFastAck ())
     {
       NS_ASSERT (m_fastAckFailedTimeoutEvent.IsExpired ());
       m_fastAckFailedTimeoutEvent = Simulator::Schedule (GetSifs (),
@@ -663,7 +796,6 @@
 MacLow::NotifySleepNow (void)
 {
   NS_LOG_DEBUG ("Device in sleep mode. Cancelling MAC pending events");
-  m_stationManager->Reset ();
   CancelAllEvents ();
   if (m_navCounterResetCtsMissed.IsRunning ())
     {
@@ -676,7 +808,7 @@
 }
 
 void
-MacLow::ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble)
+MacLow::ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble, bool ampduSubframe)
 {
   NS_LOG_FUNCTION (this << packet << rxSnr << txMode << preamble);
   /* A packet is received from the PHY.
@@ -698,23 +830,30 @@
        * idle. If the NAV at the STA receiving the RTS indicates the medium is not idle,
        * that STA shall not respond to the RTS frame.
        */
-      if (isPrevNavZero
-          && hdr.GetAddr1 () == m_self)
+      if (ampduSubframe)
         {
-          NS_LOG_DEBUG ("rx RTS from=" << hdr.GetAddr2 () << ", schedule CTS");
-          NS_ASSERT (m_sendCtsEvent.IsExpired ());
-          m_stationManager->ReportRxOk (hdr.GetAddr2 (), &hdr,
-                                        rxSnr, txMode);
-          m_sendCtsEvent = Simulator::Schedule (GetSifs (),
-                                                &MacLow::SendCtsAfterRts, this,
-                                                hdr.GetAddr2 (),
-                                                hdr.GetDuration (),
-                                                txMode,
-                                                rxSnr);
+           NS_FATAL_ERROR ("Received RTS as part of an A-MPDU");
         }
       else
         {
-          NS_LOG_DEBUG ("rx RTS from=" << hdr.GetAddr2 () << ", cannot schedule CTS");
+          if (isPrevNavZero
+              && hdr.GetAddr1 () == m_self)
+            {
+              NS_LOG_DEBUG ("rx RTS from=" << hdr.GetAddr2 () << ", schedule CTS");
+              NS_ASSERT (m_sendCtsEvent.IsExpired ());
+              m_stationManager->ReportRxOk (hdr.GetAddr2 (), &hdr,
+                                            rxSnr, txMode);
+              m_sendCtsEvent = Simulator::Schedule (GetSifs (),
+                                                    &MacLow::SendCtsAfterRts, this,
+                                                    hdr.GetAddr2 (),
+                                                    hdr.GetDuration (),
+                                                    txMode,
+                                                    rxSnr);
+            }
+          else
+            {
+              NS_LOG_DEBUG ("rx RTS from=" << hdr.GetAddr2 () << ", cannot schedule CTS");
+            }
         }
     }
   else if (hdr.IsCts ()
@@ -722,6 +861,10 @@
            && m_ctsTimeoutEvent.IsRunning ()
            && m_currentPacket != 0)
     {
+      if (ampduSubframe)
+        {
+          NS_FATAL_ERROR ("Received CTS as part of an A-MPDU");
+        }
       NS_LOG_DEBUG ("receive cts from=" << m_currentHdr.GetAddr1 ());
       SnrTag tag;
       packet->RemovePacketTag (tag);
@@ -754,6 +897,7 @@
                                     rxSnr, txMode);
       m_stationManager->ReportDataOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
                                       rxSnr, txMode, tag.Get ());
+        
       bool gotAck = false;
       if (m_txParams.MustWaitNormalAck ()
           && m_normalAckTimeoutEvent.IsRunning ())
@@ -787,7 +931,10 @@
       CtrlBAckResponseHeader blockAck;
       packet->RemoveHeader (blockAck);
       m_blockAckTimeoutEvent.Cancel ();
-      m_listener->GotBlockAck (&blockAck, hdr.GetAddr2 ());
+      NotifyAckTimeoutResetNow ();
+      m_listener->GotBlockAck (&blockAck, hdr.GetAddr2 (),txMode);
+      m_sentMpdus = 0;
+      m_ampdu = false;
     }
   else if (hdr.IsBlockAckReq () && hdr.GetAddr1 () == m_self)
     {
@@ -805,7 +952,7 @@
               (*i).second.UpdateWithBlockAckReq (blockAckReq.GetStartingSequence ());
 
               NS_ASSERT (m_sendAckEvent.IsExpired ());
-              /* See section 11.5.3 in IEEE802.11 for mean of this timer */
+              /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
               ResetBlockAckInactivityTimerIfNeeded (it->second.first);
               if ((*it).second.first.IsImmediateBlockAck ())
                 {
@@ -821,6 +968,7 @@
                 {
                   NS_FATAL_ERROR ("Delayed block ack not supported.");
                 }
+              m_receivedAtLeastOneMpdu = false;
             }
           else
             {
@@ -835,22 +983,24 @@
   else if (hdr.IsCtl ())
     {
       NS_LOG_DEBUG ("rx drop " << hdr.GetTypeString ());
+      m_receivedAtLeastOneMpdu = false;
     }
   else if (hdr.GetAddr1 () == m_self)
     {
       m_stationManager->ReportRxOk (hdr.GetAddr2 (), &hdr,
                                     rxSnr, txMode);
-
-      if (hdr.IsQosData () && StoreMpduIfNeeded (packet, hdr))
+      if (hdr.IsQosData () && ReceiveMpdu (packet, hdr))
         {
-          /* From section 9.10.4 in IEEE802.11:
+          /* From section 9.10.4 in IEEE 802.11:
              Upon the receipt of a QoS data frame from the originator for which
              the Block Ack agreement exists, the recipient shall buffer the MSDU
              regardless of the value of the Ack Policy subfield within the
-             QoS Control field of the QoS data frame. */
-          if (hdr.IsQosAck ())
+             QoS Control field of the QoS data frame. */;
+          if (hdr.IsQosAck () && !ampduSubframe)
             {
+              NS_LOG_DEBUG ("rx QoS unicast/sendAck from=" << hdr.GetAddr2 ());
               AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
+
               RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequence (),
                                                             hdr.GetAddr2 (), hdr.GetQosTid ());
               RxCompleteBufferedPacketsUntilFirstLost (hdr.GetAddr2 (), hdr.GetQosTid ());
@@ -861,11 +1011,12 @@
                                                     hdr.GetDuration (),
                                                     txMode,
                                                     rxSnr);
+              m_receivedAtLeastOneMpdu = false;
             }
           else if (hdr.IsQosBlockAck ())
             {
               AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
-              /* See section 11.5.3 in IEEE802.11 for mean of this timer */
+              /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
               ResetBlockAckInactivityTimerIfNeeded (it->second.first);
             }
           return;
@@ -875,7 +1026,7 @@
           /* This happens if a packet with ack policy Block Ack is received and a block ack
              agreement for that packet doesn't exist.
 
-             From section 11.5.3 in IEEE802.11e:
+             From section 11.5.3 in IEEE 802.11e:
              When a recipient does not have an active Block ack for a TID, but receives
              data MPDUs with the Ack Policy subfield set to Block Ack, it shall discard
              them and shall send a DELBA frame using the normal access
@@ -886,31 +1037,53 @@
         }
       else if (hdr.IsQosData () && hdr.IsQosNoAck ())
         {
-          NS_LOG_DEBUG ("rx unicast/noAck from=" << hdr.GetAddr2 ());
+           if (ampduSubframe)
+               {
+                 NS_LOG_DEBUG ("rx Ampdu with No Ack Policy from=" << hdr.GetAddr2 ());
+               }
+             else
+               {
+                 NS_LOG_DEBUG ("rx unicast/noAck from=" << hdr.GetAddr2 ());
+               }
         }
       else if (hdr.IsData () || hdr.IsMgt ())
         {
-          NS_LOG_DEBUG ("rx unicast/sendAck from=" << hdr.GetAddr2 ());
-          NS_ASSERT (m_sendAckEvent.IsExpired ());
-          m_sendAckEvent = Simulator::Schedule (GetSifs (),
-                                                &MacLow::SendAckAfterData, this,
-                                                hdr.GetAddr2 (),
-                                                hdr.GetDuration (),
-                                                txMode,
-                                                rxSnr);
+          if (hdr.IsMgt() && ampduSubframe)
+            {
+              NS_FATAL_ERROR ("Received management packet as part of an A-MPDU");
+            }
+          else
+            {
+              NS_LOG_DEBUG ("rx unicast/sendAck from=" << hdr.GetAddr2 ());
+              NS_ASSERT (m_sendAckEvent.IsExpired ());
+              m_sendAckEvent = Simulator::Schedule (GetSifs (),
+                                                    &MacLow::SendAckAfterData, this,
+                                                    hdr.GetAddr2 (),
+                                                    hdr.GetDuration (),
+                                                    txMode,
+                                                    rxSnr);
+            }
         }
       goto rxPacket;
     }
   else if (hdr.GetAddr1 ().IsGroup ())
     {
-      if (hdr.IsData () || hdr.IsMgt ())
+      if (ampduSubframe)
         {
-          NS_LOG_DEBUG ("rx group from=" << hdr.GetAddr2 ());
-          goto rxPacket;
+          NS_FATAL_ERROR ("Received group addressed packet as part of an A-MPDU");
         }
       else
         {
-          // DROP
+          if (hdr.IsData () || hdr.IsMgt ())
+            {
+              NS_LOG_DEBUG ("rx group from=" << hdr.GetAddr2 ());
+              m_receivedAtLeastOneMpdu = false;
+              goto rxPacket;
+            }
+          else
+            {
+              // DROP
+            }
         }
     }
   else if (m_promisc)
@@ -933,6 +1106,27 @@
   return;
 }
 
+uint8_t
+MacLow::GetTid (Ptr<const Packet> packet, const WifiMacHeader hdr) const
+{
+  uint8_t tid = 0;
+  if (hdr.IsQosData ()) 
+    tid = hdr.GetQosTid ();
+  else if (hdr.IsBlockAckReq ())
+    {
+      CtrlBAckRequestHeader baReqHdr;
+      packet->PeekHeader (baReqHdr);
+      tid = baReqHdr.GetTidInfo();
+     }
+  else if (hdr.IsBlockAck ())
+    {
+      CtrlBAckResponseHeader baRespHdr;
+      packet->PeekHeader (baRespHdr);
+      tid = baRespHdr.GetTidInfo ();
+    }   
+  return tid;
+}
+
 uint32_t
 MacLow::GetAckSize (void) const
 {
@@ -982,7 +1176,7 @@
     preamble= WIFI_PREAMBLE_HT_MF;
   else
     preamble=WIFI_PREAMBLE_LONG;
-  return m_phy->CalculateTxDuration (GetAckSize (), ackTxVector, preamble);
+  return m_phy->CalculateTxDuration (GetAckSize (), ackTxVector, preamble, m_phy->GetFrequency(), 0, 0);
 }
 Time
 MacLow::GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const
@@ -991,7 +1185,7 @@
    * For immediate BlockAck we should transmit the frame with the same WifiMode
    * as the BlockAckReq.
    *
-   * from section 9.6 in IEEE802.11e:
+   * from section 9.6 in IEEE 802.11e:
    * 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.
    */
@@ -1000,7 +1194,7 @@
     preamble= WIFI_PREAMBLE_HT_MF;
   else
     preamble=WIFI_PREAMBLE_LONG;
-  return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble);
+  return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble, m_phy->GetFrequency(), 0, 0);
 }
 Time
 MacLow::GetCtsDuration (Mac48Address to, WifiTxVector rtsTxVector) const
@@ -1017,7 +1211,7 @@
     preamble= WIFI_PREAMBLE_HT_MF;
   else
     preamble=WIFI_PREAMBLE_LONG;
-  return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble);
+  return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble, m_phy->GetFrequency(), 0, 0);
 }
 uint32_t
 MacLow::GetCtsSize (void) const
@@ -1029,8 +1223,13 @@
 uint32_t
 MacLow::GetSize (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
 {
+  uint32_t size;
   WifiMacTrailer fcs;
-  return packet->GetSize () + hdr->GetSize () + fcs.GetSerializedSize ();
+  if (m_ampdu)
+     size = packet->GetSize ();
+  else
+     size= packet->GetSize () + hdr->GetSize () + fcs.GetSerializedSize ();
+  return size;
 }
 
 WifiTxVector
@@ -1105,7 +1304,7 @@
         {
           preamble = WIFI_PREAMBLE_LONG;
         }
-      txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble);
+      txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency(), 0, 0);
       txTime += GetCtsDuration (hdr->GetAddr1 (), rtsTxVector);
       txTime += Time (GetSifs () * 2);
     }
@@ -1118,7 +1317,7 @@
   else
     preamble=WIFI_PREAMBLE_LONG;
   uint32_t dataSize = GetSize (packet, hdr);
-  txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble);
+  txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
   if (params.MustWaitAck ())
     {
       txTime += GetSifs ();
@@ -1145,7 +1344,7 @@
       else
         preamble=WIFI_PREAMBLE_LONG;
       txTime += GetSifs ();
-      txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble);
+      txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
     }
   return txTime;
 }
@@ -1183,7 +1382,7 @@
           cts.SetType (WIFI_MAC_CTL_CTS);
           WifiTxVector txVector=GetRtsTxVector (packet, &hdr);
           Time navCounterResetCtsMissedDelay =
-            m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble) +
+            m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble, m_phy->GetFrequency(), 0, 0) +
             Time (2 * GetSifs ()) + Time (2 * GetSlotTime ());
           m_navCounterResetCtsMissed = Simulator::Schedule (navCounterResetCtsMissedDelay,
                                                             &MacLow::NavCounterResetCtsMissed, this,
@@ -1272,7 +1471,61 @@
                 ", mode=" << txVector.GetMode() <<
                 ", duration=" << hdr->GetDuration () <<
                 ", seq=0x" << std::hex << m_currentHdr.GetSequenceControl () << std::dec);
-  m_phy->SendPacket (packet, txVector, preamble);
+  if (!m_ampdu || hdr->IsRts ())
+    {
+      m_phy->SendPacket (packet, txVector, preamble, 0);
+    }
+  else
+    {
+      Ptr<Packet> newPacket;
+      Ptr <const Packet> dequeuedPacket;
+      WifiMacHeader newHdr;
+      WifiMacTrailer fcs;
+        uint32_t queueSize = m_aggregateQueue->GetSize ();
+      bool last = false;
+      uint8_t packetType = 0;
+      //Add packet tag
+      AmpduTag ampdutag;
+      ampdutag.SetAmpdu (true);
+      Time delay = Seconds (0);
+      for ( ; queueSize > 0; queueSize--)
+        {
+          dequeuedPacket = m_aggregateQueue->Dequeue (&newHdr);
+          newPacket = dequeuedPacket->Copy ();
+          newHdr.SetDuration (hdr->GetDuration ());
+          newPacket->AddHeader (newHdr);
+          newPacket->AddTrailer (fcs);
+          if (queueSize == 1)
+            {
+              last = true;
+              packetType = 2;
+            }
+          m_mpduAggregator->AddHeaderAndPad (newPacket, last);
+
+          ampdutag.SetNoOfMpdus(queueSize);
+          newPacket->AddPacketTag(ampdutag);
+          if (delay == Seconds (0))
+            {
+              NS_LOG_DEBUG("Sending MPDU as part of A-MPDU");
+              packetType = 1;
+              m_phy->SendPacket (newPacket, txVector, preamble, packetType);
+            }
+          else
+            {
+              Simulator::Schedule (delay, &MacLow::SendPacket, this, newPacket, txVector, preamble, packetType);
+            }
+          if(queueSize > 1)
+            delay = delay + m_phy->CalculateTxDuration (GetSize (newPacket, &newHdr), txVector, preamble, m_phy->GetFrequency(), packetType, 0);
+          preamble = WIFI_PREAMBLE_NONE;
+        }
+    }
+}
+
+void
+MacLow::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType)
+{
+  NS_LOG_DEBUG("Sending MPDU as part of A-MPDU");
+  m_phy->SendPacket (packet, txVector, preamble, packetType); 
 }
 
 void
@@ -1284,9 +1537,14 @@
   /// 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;
+  if(m_sentMpdus == 0)
+    {
+      m_currentPacket = 0;
+    }
   MacLowTransmissionListener *listener = m_listener;
   m_listener = 0;
+  m_sentMpdus = 0;
+  m_ampdu = false;
   listener->MissedCts ();
 }
 void
@@ -1300,6 +1558,8 @@
   m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
   MacLowTransmissionListener *listener = m_listener;
   m_listener = 0;
+  m_sentMpdus = 0;
+  m_ampdu = false;
   listener->MissedAck ();
 }
 void
@@ -1328,6 +1588,8 @@
   m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
   MacLowTransmissionListener *listener = m_listener;
   m_listener = 0;
+  m_sentMpdus = 0;
+  m_ampdu = false;
   listener->MissedBlockAck ();
 }
 void
@@ -1385,13 +1647,36 @@
       duration += GetCtsDuration (m_currentHdr.GetAddr1 (), rtsTxVector);
       duration += GetSifs ();
       duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),
-                                              dataTxVector, preamble);
+                                              dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
       duration += GetSifs ();
-      duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+      if (m_txParams.MustWaitBasicBlockAck ())
+        {
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2(), dataTxVector.GetMode());
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
+        }
+      else if (m_txParams.MustWaitCompressedBlockAck ())
+        {
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2(), dataTxVector.GetMode());
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
+        }
+      else if (m_txParams.MustWaitAck ())
+        {
+          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+        }
+      if (m_txParams.HasNextPacket ())
+        {
+          duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
+                                                  dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
+          if (m_txParams.MustWaitAck ())
+            {
+              duration += GetSifs ();
+              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+            }
+        }
     }
   rts.SetDuration (duration);
 
-  Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble);
+  Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency(), 0, 0);
   Time timerDelay = txDuration + GetCtsTimeout ();
 
   NS_ASSERT (m_ctsTimeoutEvent.IsExpired ());
@@ -1419,7 +1704,7 @@
   else
     preamble=WIFI_PREAMBLE_LONG;
  
-  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble);
+  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
   if (m_txParams.MustWaitNormalAck ())
     {
       Time timerDelay = txDuration + GetAckTimeout ();
@@ -1446,12 +1731,14 @@
     {
       Time timerDelay = txDuration + GetBasicBlockAckTimeout ();
       NS_ASSERT (m_blockAckTimeoutEvent.IsExpired ());
+      NotifyAckTimeoutStartNow (timerDelay);
       m_blockAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::BlockAckTimeout, this);
     }
   else if (m_txParams.MustWaitCompressedBlockAck ())
     {
       Time timerDelay = txDuration + GetCompressedBlockAckTimeout ();
       NS_ASSERT (m_blockAckTimeoutEvent.IsExpired ());
+      NotifyAckTimeoutStartNow (timerDelay);
       m_blockAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::BlockAckTimeout, this);
     }
   else if (m_txParams.HasNextPacket ())
@@ -1504,12 +1791,14 @@
       if (m_txParams.MustWaitBasicBlockAck ())
         {
           duration += GetSifs ();
-          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, BASIC_BLOCK_ACK);
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode());
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitCompressedBlockAck ())
         {
           duration += GetSifs ();
-          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode());
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitAck ())
         {
@@ -1520,7 +1809,7 @@
         {
           duration += GetSifs ();
           duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
-                                                  dataTxVector, preamble);
+                                                  dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
           if (m_txParams.MustWaitAck ())
             {
               duration += GetSifs ();
@@ -1530,9 +1819,12 @@
     }
   m_currentHdr.SetDuration (duration);
 
-  m_currentPacket->AddHeader (m_currentHdr);
-  WifiMacTrailer fcs;
-  m_currentPacket->AddTrailer (fcs);
+  if (!m_ampdu)
+    {
+      m_currentPacket->AddHeader (m_currentHdr);
+      WifiMacTrailer fcs;
+      m_currentPacket->AddTrailer (fcs);
+    }
 
   ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector,preamble);
   m_currentPacket = 0;
@@ -1580,17 +1872,19 @@
       WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
       duration += GetSifs ();
       duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket,&m_currentHdr),
-                                              dataTxVector, preamble);
+                                              dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
       if (m_txParams.MustWaitBasicBlockAck ())
         {
           
           duration += GetSifs ();
-          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, BASIC_BLOCK_ACK);
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode());
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitCompressedBlockAck ())
         {
           duration += GetSifs ();
-          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode());
+          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitAck ())
         {
@@ -1601,11 +1895,12 @@
         {
           duration += GetSifs ();
           duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
-                                                  dataTxVector, preamble);
+                                                  dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
           if (m_txParams.MustWaitCompressedBlockAck ())
             {
               duration += GetSifs ();
-              duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
+              WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode());
+              duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
             }
           else if (m_txParams.MustWaitAck ())
             {
@@ -1624,7 +1919,7 @@
 
   ForwardDown (packet, &cts, ctsTxVector,preamble);
 
-  Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble);
+  Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble, m_phy->GetFrequency(), 0, 0);
   txDuration += GetSifs ();
   NS_ASSERT (m_sendDataEvent.IsExpired ());
   
@@ -1692,10 +1987,41 @@
   
   StartDataTxTimers (dataTxVector);
   Time newDuration = Seconds (0);
-  newDuration += GetSifs ();
-  newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
-  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),
-                                                dataTxVector, preamble);
+  if (m_txParams.MustWaitBasicBlockAck ())
+    {
+      newDuration += GetSifs ();
+      WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode());
+      newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
+    }
+  else if (m_txParams.MustWaitCompressedBlockAck ())
+    {
+      newDuration += GetSifs ();
+      WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode());
+      newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
+    }
+  else if (m_txParams.MustWaitAck ())
+    {
+      newDuration += GetSifs ();
+      newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+    }
+  if (m_txParams.HasNextPacket ())
+    {
+      newDuration += GetSifs ();
+      newDuration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
+      if (m_txParams.MustWaitCompressedBlockAck ())
+        {
+           newDuration += GetSifs ();
+           WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode());
+           newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
+        }
+      else if (m_txParams.MustWaitAck ())
+        {
+           newDuration += GetSifs ();
+           newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+        }
+    }
+
+  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),dataTxVector, preamble, m_phy->GetFrequency(), 0, 0);
   duration -= txDuration;
   duration -= GetSifs ();
 
@@ -1703,9 +2029,12 @@
   NS_ASSERT (duration >= MicroSeconds (0));
   m_currentHdr.SetDuration (duration);
 
-  m_currentPacket->AddHeader (m_currentHdr);
-  WifiMacTrailer fcs;
-  m_currentPacket->AddTrailer (fcs);
+  if (!m_ampdu)
+  {
+    m_currentPacket->AddHeader (m_currentHdr);
+    WifiMacTrailer fcs;
+    m_currentPacket->AddTrailer (fcs);
+  }
 
   ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector,preamble);
   m_currentPacket = 0;
@@ -1764,7 +2093,7 @@
   tag.Set (dataSnr);
   packet->AddPacketTag (tag);
 
-   //since ACK is a control response it can't have Fomat =GF
+   //since ACK is a control response it can't have format GF
   WifiPreamble preamble;
   if (ackTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
     preamble= WIFI_PREAMBLE_HT_MF;
@@ -1774,6 +2103,53 @@
 }
 
 bool
+MacLow::IsInWindow (uint16_t seq, uint16_t winstart, uint16_t winsize)
+{
+  return ((seq - winstart+ 4096) % 4096) < winsize;
+}
+
+bool 
+MacLow::ReceiveMpdu (Ptr<Packet> packet, WifiMacHeader hdr)
+ {
+  if (m_stationManager->HasHtSupported ())
+    {
+      Mac48Address originator = hdr.GetAddr2 ();
+      uint8_t tid = 0;
+      if (hdr.IsQosData ())
+        tid = hdr.GetQosTid ();
+      uint16_t seqNumber = hdr.GetSequenceNumber ();
+      AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid));
+      if (it != m_bAckAgreements.end ())
+        {
+          //Implement HT immediate Block Ack support for HT Delayed Block Ack is not added yet
+          if (!QosUtilsIsOldPacket ((*it).second.first.GetStartingSequence (), seqNumber))
+            { 
+              StoreMpduIfNeeded (packet, hdr);
+              if (!IsInWindow(hdr.GetSequenceNumber (), (*it).second.first.GetStartingSequence (), (*it).second.first.GetBufferSize ()))
+                {
+                  uint16_t delta = (seqNumber - (*it).second.first.GetWinEnd()+ 4096) % 4096;
+                  if (delta > 1)
+                    {
+                     (*it).second.first.SetWinEnd (seqNumber);
+                     int16_t winEnd = (*it).second.first.GetWinEnd ();
+                     int16_t bufferSize = (*it).second.first.GetBufferSize ();
+                     uint16_t sum = ((uint16_t)(std::abs(winEnd - bufferSize + 1))) % 4096;
+                     (*it).second.first.SetStartingSequence (sum);
+                     RxCompleteBufferedPacketsWithSmallerSequence ((*it).second.first.GetStartingSequence (), originator, tid);
+                   } 
+               }
+              RxCompleteBufferedPacketsUntilFirstLost (originator, tid); //forwards up packets starting from winstart and set winstart to last +1
+             (*it).second.first.SetWinEnd(((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize()-1)%4096);  
+           }
+          return true;
+        }  
+      return false;
+    }
+ else
+   return StoreMpduIfNeeded (packet,hdr);
+}
+
+bool
 MacLow::StoreMpduIfNeeded (Ptr<Packet> packet, WifiMacHeader hdr)
 {
   AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
@@ -1798,7 +2174,6 @@
       BlockAckCachesI j = m_bAckCaches.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
       NS_ASSERT (j != m_bAckCaches.end ());
       (*j).second.UpdateWithMpdu (&hdr);
-
       return true;
     }
   return false;
@@ -1870,9 +2245,12 @@
     {
       uint16_t endSequence = ((*it).second.first.GetStartingSequence () + 2047) % 4096;
       uint16_t mappedStart = QosUtilsMapSeqControlToUniqueInteger (seq, endSequence);
-      uint16_t guard = (*it).second.second.begin ()->second.GetSequenceControl () & 0xfff0;
       BufferedPacketI last = (*it).second.second.begin ();
-
+      uint16_t guard = 0;
+      if (last != (*it).second.second.end ())
+        {
+          guard = (*it).second.second.begin ()->second.GetSequenceControl () & 0xfff0;
+        }
       BufferedPacketI i = (*it).second.second.begin ();
       for (; i != (*it).second.second.end ()
            && QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceNumber (), endSequence) < mappedStart;)
@@ -1953,7 +2331,6 @@
       (*it).second.second.erase ((*it).second.second.begin (), lastComplete);
     }
 }
-
 void
 MacLow::SendBlockAckResponse (const CtrlBAckResponseHeader* blockAck, Mac48Address originator, bool immediate,
                               Time duration, WifiMode blockAckReqTxMode)
@@ -1970,11 +2347,7 @@
   hdr.SetNoRetry ();
   hdr.SetNoMoreFragments ();
 
-  WifiTxVector blockAckTxVector = GetBlockAckTxVector (originator, blockAckReqTxMode);
-  WifiTxVector blockAckReqTxVector;
-  blockAckReqTxVector.SetMode(blockAckReqTxMode);
-  blockAckReqTxVector.SetNss(1);
-  blockAckReqTxVector.SetStbc(false);
+  WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (originator, blockAckReqTxMode);
 
   m_currentPacket = packet;
   m_currentHdr = hdr;
@@ -2005,7 +2378,7 @@
 
   if (!immediate)
     {
-      StartDataTxTimers (blockAckTxVector);
+      StartDataTxTimers (blockAckReqTxVector);
     }
 
   NS_ASSERT (duration >= MicroSeconds (0));
@@ -2015,14 +2388,35 @@
   packet->AddHeader (hdr);
   WifiMacTrailer fcs;
   packet->AddTrailer (fcs);
-   WifiPreamble preamble;
-  if (blockAckTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+  WifiPreamble preamble;
+  if (blockAckReqTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
     preamble= WIFI_PREAMBLE_HT_MF;
   else
     preamble=WIFI_PREAMBLE_LONG;
-  ForwardDown (packet, &hdr, blockAckTxVector,preamble);
+  ForwardDown (packet, &hdr, blockAckReqTxVector, preamble);
   m_currentPacket = 0;
 }
+void 
+MacLow::SendBlockAckAfterAmpdu (uint8_t tid, Mac48Address originator, Time duration, WifiMode blockAckReqTxMode)
+{
+  NS_LOG_FUNCTION (this);
+  CtrlBAckResponseHeader blockAck;
+  uint16_t seqNumber = 0;
+  BlockAckCachesI i = m_bAckCaches.find (std::make_pair (originator, tid));
+  NS_ASSERT (i != m_bAckCaches.end ());
+  seqNumber = (*i).second.GetWinStart ();
+
+  bool immediate = true;
+  AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid));
+  blockAck.SetStartingSequence (seqNumber);
+  blockAck.SetTidInfo (tid);
+  immediate = (*it).second.first.IsImmediateBlockAck ();
+  blockAck.SetType (COMPRESSED_BLOCK_ACK);
+  NS_LOG_DEBUG ("Got Implicit block Ack Req with seq " << seqNumber);
+  (*i).second.FillBlockAckBitmap (&blockAck);  
+
+  SendBlockAckResponse (&blockAck, originator, immediate, duration, blockAckReqTxMode);
+}
 
 void
 MacLow::SendBlockAckAfterBlockAckRequest (const CtrlBAckRequestHeader reqHdr, Mac48Address originator,
@@ -2030,7 +2424,7 @@
 {
   NS_LOG_FUNCTION (this);
   CtrlBAckResponseHeader blockAck;
-  uint8_t tid;
+  uint8_t tid = 0;
   bool immediate = false;
   if (!reqHdr.IsMultiTid ())
     {
@@ -2052,12 +2446,27 @@
           BlockAckCachesI i = m_bAckCaches.find (std::make_pair (originator, tid));
           NS_ASSERT (i != m_bAckCaches.end ());
           (*i).second.FillBlockAckBitmap (&blockAck);
+          NS_LOG_DEBUG ("Got block Ack Req with seq " << reqHdr.GetStartingSequence ());
 
-          /* All packets with smaller sequence than starting sequence control must be passed up to Wifimac
-           * See 9.10.3 in IEEE8022.11e standard.
-           */
-          RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequence (), originator, tid);
-          RxCompleteBufferedPacketsUntilFirstLost (originator, tid);
+          if (!m_stationManager->HasHtSupported())
+            {
+              /* All packets with smaller sequence than starting sequence control must be passed up to Wifimac
+               * See 9.10.3 in IEEE 802.11e standard.
+               */
+              RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequence (), originator, tid);
+              RxCompleteBufferedPacketsUntilFirstLost (originator, tid);
+            }
+          else
+            {
+              if (!QosUtilsIsOldPacket ((*it).second.first.GetStartingSequence(), reqHdr.GetStartingSequence ()))
+                { 
+                  (*it).second.first.SetStartingSequence(reqHdr.GetStartingSequence ());
+                  (*it).second.first.SetWinEnd(((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize()-1) % 4096);
+                  RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequence (), originator, tid);
+                  RxCompleteBufferedPacketsUntilFirstLost (originator, tid);
+                  (*it).second.first.SetWinEnd(((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize()-1) % 4096);
+                }
+            }
         }
       else
         {
@@ -2080,7 +2489,6 @@
       NS_ASSERT (agreement.m_inactivityEvent.IsRunning ());
       agreement.m_inactivityEvent.Cancel ();
       Time timeout = MicroSeconds (1024 * agreement.GetTimeout ());
-
       AcIndex ac = QosUtilsMapTidToAc (agreement.GetTid ());
       //std::map<AcIndex, MacLowTransmissionListener*>::iterator it = m_edcaListeners.find (ac);
       //NS_ASSERT (it != m_edcaListeners.end ());
@@ -2099,4 +2507,310 @@
   m_edcaListeners.insert (std::make_pair (ac, listener));
 }
 
+void
+MacLow::SetMpduAggregator (Ptr<MpduAggregator> aggregator)
+{
+  m_mpduAggregator = aggregator;
+}
+
+void
+MacLow::DeaggregateAmpduAndReceive (Ptr<Packet> aggregatedPacket, double rxSnr, WifiMode txMode, WifiPreamble preamble)
+{
+  m_currentMode = txMode;
+  AmpduTag ampdu;
+  bool normalAck = false;
+  bool ampduSubframe = false;
+  if (aggregatedPacket->RemovePacketTag(ampdu))
+    {
+      ampduSubframe = true;
+      MpduAggregator::DeaggregatedMpdus packets =  MpduAggregator::Deaggregate (aggregatedPacket);
+      MpduAggregator::DeaggregatedMpdusCI n = packets.begin ();
+
+      WifiMacHeader firsthdr;
+      (*n).first->PeekHeader(firsthdr);
+      NS_LOG_DEBUG ("duration/id=" << firsthdr.GetDuration ());
+      NotifyNav ((*n).first,firsthdr, txMode, preamble);
+      if (firsthdr.GetAddr1 () == m_self)
+        {
+          m_receivedAtLeastOneMpdu = true;
+          if (firsthdr.IsAck () || firsthdr.IsBlockAck () || firsthdr.IsBlockAckReq ())
+              ReceiveOk ((*n).first, rxSnr, txMode, preamble, ampduSubframe);
+          else if (firsthdr.IsData () || firsthdr.IsQosData ())
+            {
+              NS_LOG_DEBUG ("Deaagregate packet with sequence=" << firsthdr.GetSequenceNumber ());
+              ReceiveOk ((*n).first, rxSnr, txMode, preamble, ampduSubframe);
+              if (firsthdr.IsQosAck ())
+                {
+                  NS_LOG_DEBUG ("Normal Ack");
+                  normalAck = true;
+                }
+            } 
+          else
+              NS_FATAL_ERROR ("Received A-MPDU with invalid first MPDU type");
+        }
+
+      if (normalAck && (ampdu.GetNoOfMpdus () == 1))
+        { 
+          //send block Ack
+          if (firsthdr.IsBlockAckReq ())
+            {
+              NS_FATAL_ERROR ("Sending a BlockAckReq with QosPolicy equal to Normal Ack");
+            }
+          uint8_t tid = firsthdr.GetQosTid ();
+          AgreementsI it = m_bAckAgreements.find (std::make_pair (firsthdr.GetAddr2 (), tid));
+          if (it != m_bAckAgreements.end ())
+            { 
+              NS_ASSERT (m_sendAckEvent.IsExpired ());
+              /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
+              ResetBlockAckInactivityTimerIfNeeded (it->second.first);
+              NS_LOG_DEBUG ("rx A-MPDU/sendImmediateBlockAck from=" << firsthdr.GetAddr2 ());
+              m_sendAckEvent = Simulator::Schedule (GetSifs (),
+                                                    &MacLow::SendBlockAckAfterAmpdu, this,
+                                                    firsthdr.GetQosTid(),
+                                                    firsthdr.GetAddr2 (),
+                                                    firsthdr.GetDuration (),
+                                                    txMode);
+            } 
+          else
+            { 
+              NS_LOG_DEBUG ("There's not a valid agreement for this block ack request.");
+            }
+          m_receivedAtLeastOneMpdu = false;
+        }
+    }
+  else
+    {     
+          ReceiveOk (aggregatedPacket,rxSnr, txMode, preamble, ampduSubframe);
+    }
+}
+
+bool 
+MacLow::StopAggregation(Ptr<const Packet> peekedPacket, WifiMacHeader peekedHdr, Ptr<Packet> aggregatedPacket, uint16_t size) const
+{
+    WifiPreamble preamble;
+    WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
+    if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
+        preamble = WIFI_PREAMBLE_HT_GF;
+    else
+        preamble = WIFI_PREAMBLE_HT_MF;
+    
+    if (peekedPacket == 0)
+        return true;
+    
+    //An HT STA shall not transmit a PPDU that has a duration that is greater than aPPDUMaxTime (10 milliseconds)
+    if(m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () +WIFI_MAC_FCS_LENGTH,dataTxVector, preamble, m_phy->GetFrequency(), 0, 0) > MilliSeconds(10))
+        return true;
+    
+    if (!m_mpduAggregator->CanBeAggregated (peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, aggregatedPacket, size))
+        return true;
+    
+    return false;
+}
+
+Ptr<Packet>
+MacLow::AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
+{
+  NS_ASSERT (m_aggregateQueue->GetSize () == 0);
+  bool isAmpdu = false;
+  Ptr<Packet> newPacket;
+  WifiMacHeader peekedHdr;
+  newPacket = packet->Copy();
+  //missing hdr.IsAck() since we have no means of knowing the Tid of the Ack yet
+  if (hdr.IsQosData() || hdr.IsBlockAck()|| hdr.IsBlockAckReq())
+    {
+      Time tstamp;
+      uint8_t tid = GetTid (packet, hdr);
+      Ptr<WifiMacQueue> queue;
+      AcIndex ac = QosUtilsMapTidToAc (tid);
+      //since a blockack agreement always preceeds mpdu aggregation there should always exist blockAck listener
+      std::map<AcIndex, MacLowBlockAckEventListener*>::const_iterator listenerIt= m_edcaListeners.find(ac);
+      NS_ASSERT (listenerIt != m_edcaListeners.end ());
+      queue = listenerIt->second->GetQueue();
+      
+      if (!hdr.GetAddr1 ().IsBroadcast () && m_mpduAggregator!= 0)
+        {
+          //Have to make sure that their exist a block Ack agreement before sending an AMPDU (BlockAck Manager)
+          if (listenerIt->second->GetBlockAckAgreementExists (hdr.GetAddr1(), tid))
+            {
+              /* here is performed mpdu aggregation */
+              /* MSDU aggregation happened in edca if the user asked for it so m_currentPacket may contains a normal packet or a A-MSDU*/
+              Ptr<Packet> currentAggregatedPacket = Create<Packet> ();
+              peekedHdr = hdr;
+              uint16_t startingSequenceNumber = 0;
+              uint16_t currentSequenceNumber = 0;
+              uint8_t qosPolicy = 0;
+              uint16_t blockAckSize = 0;
+              bool aggregated = false;
+              int i = 0;
+              Ptr<Packet> aggPacket = newPacket->Copy ();
+
+              if (!hdr.IsBlockAckReq())
+                {
+                  if (!hdr.IsBlockAck())
+                    {
+                       startingSequenceNumber = peekedHdr.GetSequenceNumber();
+                       peekedHdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
+                    }
+                  currentSequenceNumber = peekedHdr.GetSequenceNumber();
+                  newPacket->AddHeader (peekedHdr);
+                  WifiMacTrailer fcs;
+                  newPacket->AddTrailer (fcs);
+
+                  aggregated=m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
+
+                  if (aggregated)
+                    {
+                      NS_LOG_DEBUG ("Adding packet with Sequence number " << peekedHdr.GetSequenceNumber()<<" to A-MPDU");
+                      i++;
+                      m_sentMpdus++;
+                      m_aggregateQueue->Enqueue (aggPacket, peekedHdr);
+                    }
+                } 
+              else if (hdr.IsBlockAckReq())
+                {
+                  blockAckSize = packet->GetSize() + hdr.GetSize() + WIFI_MAC_FCS_LENGTH;
+                  qosPolicy = 3; //if the last subrame is block ack req then set ack policy of all frames to blockack
+                  CtrlBAckRequestHeader blockAckReq;
+                  packet->PeekHeader (blockAckReq);
+                  startingSequenceNumber = blockAckReq.GetStartingSequence ();
+                }
+              aggregated = false;
+              bool retry = false;
+              //looks for other packets to the same destination with the same Tid need to extend that to include MSDUs
+              Ptr<const Packet> peekedPacket = listenerIt->second->PeekNextPacketInBaQueue (peekedHdr, peekedHdr.GetAddr1 (), tid, &tstamp);
+              if (peekedPacket == 0) 
+                {
+                  peekedPacket = queue->PeekByTidAndAddress (&peekedHdr, tid,
+                                                             WifiMacHeader::ADDR1,
+                                                             hdr.GetAddr1 (), &tstamp);
+                  currentSequenceNumber = listenerIt->second->PeekNextSequenceNumberfor (&peekedHdr);
+                }
+              else
+                {
+                  retry = true;
+                  currentSequenceNumber = peekedHdr.GetSequenceNumber(); 
+                }
+
+               while (IsInWindow (currentSequenceNumber, startingSequenceNumber, 64) && !StopAggregation (peekedPacket, peekedHdr, currentAggregatedPacket, blockAckSize))
+                {
+                  //for now always send AMPDU with normal ACK
+                  if (retry == false)
+                    {
+                      currentSequenceNumber = listenerIt->second->GetNextSequenceNumberfor (&peekedHdr);
+                      peekedHdr.SetSequenceNumber (currentSequenceNumber);
+                      peekedHdr.SetFragmentNumber (0);
+                      peekedHdr.SetNoMoreFragments ();
+                      peekedHdr.SetNoRetry ();
+                    }                      
+                  if (qosPolicy == 0)
+                      peekedHdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
+                  else
+                      peekedHdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
+
+                  newPacket = peekedPacket->Copy ();
+                  Ptr<Packet> aggPacket = newPacket->Copy ();
+                 
+                  newPacket->AddHeader (peekedHdr);
+                  WifiMacTrailer fcs;
+                  newPacket->AddTrailer (fcs);
+                  aggregated = m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
+                  if (aggregated)
+                    {
+                      m_aggregateQueue->Enqueue (aggPacket, peekedHdr);
+                      if (i == 1 && hdr.IsQosData ())
+                      {
+                          listenerIt->second->CompleteMpduTx (packet, hdr, tstamp);
+                      }
+                      NS_LOG_DEBUG ("Adding packet with Sequence number " << peekedHdr.GetSequenceNumber()<<" to A-MPDU");
+                      i++;
+                      isAmpdu = true;
+                      m_sentMpdus++;
+                      listenerIt->second->CompleteMpduTx (peekedPacket, peekedHdr, tstamp);
+                      if (retry)
+                          listenerIt->second->RemoveFromBaQueue(tid, hdr.GetAddr1 (), peekedHdr.GetSequenceNumber ());
+                      else
+                          queue->Remove (peekedPacket);
+                      newPacket = 0;
+                    }
+                  else
+                      break;
+                  if (retry == true)
+                    {
+                      peekedPacket = listenerIt->second->PeekNextPacketInBaQueue(peekedHdr, hdr.GetAddr1(), tid, &tstamp);
+                      if (peekedPacket == 0)
+                        {
+                          //I reached the first packet that I added to this A-MPDU
+                          retry = false;
+                          peekedPacket = queue->PeekByTidAndAddress (&peekedHdr, tid,
+                                                                     WifiMacHeader::ADDR1, hdr.GetAddr1 (), &tstamp);
+                          if (peekedPacket != 0)
+                            {
+                              //find what will the sequence number be so that we don't send more than 64 packets apart
+                              currentSequenceNumber = listenerIt->second->PeekNextSequenceNumberfor (&peekedHdr);
+                            }   
+                        }
+                      else
+                          currentSequenceNumber = peekedHdr.GetSequenceNumber();
+                    }
+                  else
+                    {
+                      peekedPacket = queue->PeekByTidAndAddress (&peekedHdr, tid,
+                                                                 WifiMacHeader::ADDR1, hdr.GetAddr1 (), &tstamp);
+                      if (peekedPacket != 0)
+                        {
+                          //find what will the sequence number be so that we don't send more than 64 packets apart
+                          currentSequenceNumber = listenerIt->second->PeekNextSequenceNumberfor (&peekedHdr);
+                        }   
+                    }
+                }
+              if (isAmpdu)
+                {
+                  if (hdr.IsBlockAckReq())
+                    {
+                      newPacket = packet->Copy();
+                      peekedHdr = hdr;
+                      Ptr<Packet> aggPacket = newPacket->Copy();
+                      m_aggregateQueue->Enqueue (aggPacket, peekedHdr);
+                      newPacket->AddHeader (peekedHdr);
+                      WifiMacTrailer fcs;
+                      newPacket->AddTrailer (fcs);
+                      m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
+                    }
+                  if (qosPolicy==0)
+                    {
+                         listenerIt->second->CompleteTransfer(hdr.GetAddr1 (),tid);
+                    }
+                  //Add packet tag
+                  AmpduTag ampdutag;
+                  ampdutag.SetAmpdu (true);
+                  ampdutag.SetNoOfMpdus(i);
+                  newPacket = currentAggregatedPacket;
+                  newPacket->AddPacketTag(ampdutag);
+                  currentAggregatedPacket = 0;
+                  NS_LOG_DEBUG ("tx unicast A-MPDU");
+                  listenerIt->second->SetAmpdu(true);
+                }
+              else
+                {
+                  uint32_t queueSize = m_aggregateQueue->GetSize ();
+                  NS_ASSERT (queueSize <= 2); //since it is not an A-MPDU then only 2 packets should have been added to the queue no more
+                  if (queueSize >= 1)
+                    {
+                      //remove any packets that we added to the aggregate queue
+                      FlushAggregateQueue ();
+                    }
+                }
+            }
+        }
+    }
+  return newPacket;
+}
+
+void
+MacLow::FlushAggregateQueue (void)
+{
+  NS_LOG_DEBUG("Flush aggregate queue");
+  m_aggregateQueue->Flush ();
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/mac-low.h ns-3.22/src/wifi/model/mac-low.h
--- ns-3.21/src/wifi/model/mac-low.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/mac-low.h	2015-02-05 15:46:22.000000000 -0800
@@ -42,12 +42,14 @@
 #include "qos-utils.h"
 #include "block-ack-cache.h"
 #include "wifi-tx-vector.h"
+#include "mpdu-aggregator.h"
 
 namespace ns3 {
 
 class WifiPhy;
 class WifiMac;
 class EdcaTxopN;
+class WifiMacQueue;
 
 /**
  * \ingroup wifi
@@ -76,7 +78,7 @@
    * \param snr the snr of the ack
    * \param txMode the transmission mode of the ack
    *
-   * ns3::MacLow received an expected ACL within
+   * ns3::MacLow received an expected ACK within
    * AckTimeout. The <i>snr</i> and <i>txMode</i>
    * arguments are not valid when SUPER_FAST_ACK is
    * used.
@@ -90,6 +92,7 @@
   /**
    * \param blockAck Block ack response header
    * \param source Address of block ack sender
+   * \param txMode mode of block ack response
    *
    * Invoked when ns3::MacLow receives a block ack frame.
    * Block ack frame is received after a block ack request
@@ -99,7 +102,7 @@
    * queue that intends to be notified by MacLow of reception
    * of a block ack must redefine this function.
    */
-  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source);
+  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, WifiMode txMode);
   /**
    * ns3::MacLow did not receive an expected BLOCK_ACK within
    * BlockAckTimeout. This method is used only for immediate
@@ -117,15 +120,13 @@
    * with the "next" data to send.
    */
   virtual void StartNext (void) = 0;
-
   /**
    * Invoked if this transmission was canceled
    * one way or another. When this method is invoked,
    * you can assume that the packet has not been passed
    * down the stack to the PHY.
    */
-  virtual void Cancel (void) = 0;	
-
+  virtual void Cancel (void) = 0;
   /** 
    * Invoked upon the end of the transmission of a frame that does not
    * require an ACK (e.g., broadcast and multicast frames).
@@ -205,6 +206,72 @@
    * \param tid
    */
   virtual void BlockAckInactivityTimeout (Mac48Address originator, uint8_t tid) = 0;
+  /**
+   * Returns the EDCA queue to check if there are packets that can be aggregated with a Block Ack
+   */
+  virtual Ptr<WifiMacQueue> GetQueue (void) = 0;
+  /**
+   * \param address address of peer station involved in block ack mechanism.
+   * \param tid traffic ID of transmitted packet.
+   *
+   * Calls CompleteAmpduTransfer that resets the status of OriginatorBlockAckAgreement after the transfer 
+   * of an A-MPDU with ImmediateBlockAck policy (i.e. no BAR is scheduled)
+   */
+  virtual void CompleteTransfer (Mac48Address address, uint8_t tid);
+  virtual void SetAmpdu (bool ampdu);
+  /**
+   * This function stores an MPDU (part of an A-MPDU) in blockackagreement (i.e. the sender is waiting 
+   * for a blockack containing the sequence number of this MPDU). 
+   * It also calls NotifyMpdu transmission that updates the status of OriginatorBlockAckAgreement.
+   */
+  virtual void CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp);
+  /**
+   * Return the next sequence number for the given header.
+   *
+   * \param hdr Wi-Fi header
+   * \return the next sequence number
+   */
+  virtual uint16_t GetNextSequenceNumberfor (WifiMacHeader *hdr);
+  /**
+   * Return the next sequence number for the Traffic ID and destination, but do not pick it (i.e. the current sequence number remains unchanged).
+   *
+   * \param hdr Wi-Fi header
+   * \return the next sequence number
+   */
+  virtual uint16_t PeekNextSequenceNumberfor (WifiMacHeader *hdr);
+  /* 
+   * Peek in retransmit queue and get the next packet without removing it from the queue
+   */
+  virtual Ptr<const Packet> PeekNextPacketInBaQueue (WifiMacHeader &header, Mac48Address recipient, uint8_t tid, Time *timestamp);
+  /**
+   * Remove a packet after you peek in the retransmit queue and get it
+   */
+  virtual void RemoveFromBaQueue (uint8_t tid, Mac48Address recipient, uint16_t seqnumber);
+  /**
+   * \param recipient address of the peer station
+   * \param tid traffic ID.
+   * \return true if a block ack agreement exists, false otherwise
+   *
+   * Checks if a block ack agreement exists with station addressed by
+   * <i>recipient</i> for tid <i>tid</i>.
+   */
+  virtual bool GetBlockAckAgreementExists (Mac48Address address, uint8_t tid) = 0;
+  /**
+   * \param recipient address of peer station involved in block ack mechanism.
+   * \param tid traffic ID.
+   * \return the number of packets buffered for a specified agreement
+   *
+   * Returns number of packets buffered for a specified agreement.
+   */
+  virtual uint32_t GetNOutstandingPackets (Mac48Address recipient, uint8_t tid);
+  /**
+   * \param recipient address of peer station involved in block ack mechanism.
+   * \param tid traffic ID.
+   * \return the number of packets for a specific agreement that need retransmission
+   *
+   * Returns number of packets for a specific agreement that need retransmission.
+   */
+  virtual uint32_t GetNRetryNeededPackets (Mac48Address recipient, uint8_t tid) const;
 };
 
 /**
@@ -276,7 +343,6 @@
    * the current transmission + SIFS.
    */
   void EnableNextData (uint32_t size);
-
   /**
    * \param durationId the value to set in the duration/Id field of
    *        the outgoing packet.
@@ -285,7 +351,6 @@
    * packet's durationId field to this value.
    */
   void EnableOverrideDurationId (Time durationId);
-
   /**
    * Do not wait for Ack after data transmission. Typically
    * used for Broadcast and multicast frames.
@@ -305,7 +370,6 @@
    * calling WifiPhy::Send.
    */
   void DisableOverrideDurationId (void);
-
   /**
    * \returns true if must wait for ACK after data transmission,
    *          false otherwise.
@@ -425,13 +489,28 @@
    * \param phy WifiPhy associated with this MacLow
    */
   void SetPhy (Ptr<WifiPhy> phy);
+  /*
+   * \return current attached PHY device
+   */
+  Ptr<WifiPhy> GetPhy (void) const;
+  /**
+   * Remove WifiPhy associated with this MacLow.
+   *
+   * \param phy WifiPhy associated with this MacLow
+   */
+  void ResetPhy (void);
   /**
    * Set up WifiRemoteStationManager associated with this MacLow.
    *
    * \param manager WifiRemoteStationManager associated with this MacLow
    */
   void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> manager);
-
+  /**
+   * Set up MpduAggregator associated with this MacLow.
+   *
+   * \param aggregator MpduAggregator associated with this MacLow
+   */
+  void SetMpduAggregator (Ptr<MpduAggregator> aggregator);
   /**
    * Set MAC address of this MacLow.
    *
@@ -611,7 +690,7 @@
    * Start the transmission of the input packet and notify the listener
    * of transmission events.
    */
-  void StartTransmission (Ptr<const Packet> packet,
+  virtual void StartTransmission (Ptr<const Packet> packet,
                           const WifiMacHeader* hdr,
                           MacLowTransmissionParameters parameters,
                           MacLowTransmissionListener *listener);
@@ -621,11 +700,12 @@
    * \param rxSnr snr of packet received
    * \param txMode transmission mode of packet received
    * \param preamble type of preamble used for the packet received
+   * \param ampduSubframe true if this MPDU is part of an A-MPDU
    *
    * This method is typically invoked by the lower PHY layer to notify
    * the MAC layer that a packet was successfully received.
    */
-  void ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble);
+  void ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble, bool ampduSubframe);
   /**
    * \param packet packet received.
    * \param rxSnr snr of packet received.
@@ -683,6 +763,43 @@
    * associated to this AC.
    */
   void RegisterBlockAckListenerForAc (enum AcIndex ac, MacLowBlockAckEventListener *listener);
+  /**
+   * \param packet the packet to be aggregated. If the aggregation is succesfull, it corresponds either to the first data packet that will be aggregated or to the BAR that will be piggybacked at the end of the A-MPDU.
+   * \param hdr the WifiMacHeader for the packet.
+   * \return the A-MPDU packet if aggregation is successfull, the input packet otherwise
+   *
+   * This function adds the packets that will be added to an A-MPDU to an aggregate queue
+   * 
+   */
+  Ptr<Packet> AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr);
+  /**
+   * \param aggregatedPacket which is the current A-MPDU
+   * \param rxSnr snr of packet received
+   * \param txMode transmission mode of packet received
+   * \param preamble type of preamble used for the packet received        
+   *
+   * This function de-aggregates an A-MPDU and decide if each MPDU is received correctly or not
+   * 
+   */
+  void DeaggregateAmpduAndReceive (Ptr<Packet> aggregatedPacket, double rxSnr, WifiMode txMode, WifiPreamble preamble);
+  /**
+   * \param peekedPacket the packet to be aggregated
+   * \param peekedHdr the WifiMacHeader for the packet.
+   * \param aggregatedPacket the current A-MPDU
+   * \param size the size of a piggybacked block ack request
+   * \return false if the given packet can be added to an A-MPDU, true otherwise
+   *
+   * This function decides if a given packet can be added to an A-MPDU or not
+   * 
+   */
+  bool StopAggregation (Ptr<const Packet> peekedPacket, WifiMacHeader peekedHdr, Ptr<Packet> aggregatedPacket, uint16_t size) const;
+  /**
+   *
+   * This function is called to flush the aggregate queue, which is used for A-MPDU
+   *
+   */
+  void FlushAggregateQueue (void);
+
 protected:
   /**
    * Return a TXVECTOR for the DATA frame given the destination.
@@ -735,7 +852,7 @@
    */
   uint32_t GetSize (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
   /**
-   * Forward the packet down to WifiPhy for transmission.
+   * Forward the packet down to WifiPhy for transmission. This is called for the entire A-MPDu when MPDU aggregation is used.
    *
    * \param packet
    * \param hdr
@@ -745,6 +862,15 @@
   void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr,
                     WifiTxVector txVector, WifiPreamble preamble);
   /**
+   * Forward the packet down to WifiPhy for transmission. This is called for each MPDU when MPDU aggregation is used.
+   *
+   * \param packet
+   * \param hdr
+   * \param txVector
+   * \param preamble
+   */
+  void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType);
+  /**
    * Return a TXVECTOR for the RTS frame given the destination.
    * The function consults WifiRemoteStationManager, which controls the rate
    * to different destinations.
@@ -787,7 +913,6 @@
    * \return TXVECTOR for the Block ACK
    */
   WifiTxVector GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
-
   /**
    * Return a TXVECTOR for the CTS-to-self frame.
    * The function consults WifiRemoteStationManager, which controls the rate
@@ -798,7 +923,6 @@
    * \return TXVECTOR for the CTS-to-self operation
    */
   WifiTxVector GetCtsToSelfTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
-
   /**
    * Return a TXVECTOR for the CTS frame given the destination and the mode of the RTS
    * used by the sender.
@@ -821,7 +945,6 @@
    * \return TXVECTOR for the Block ACK
    */
   WifiTxVector GetAckTxVectorForData (Mac48Address to, WifiMode dataTxMode) const;
-
   /**
    * Return the time required to transmit the CTS (including preamble and FCS).
    *
@@ -854,8 +977,16 @@
    * \return the time required to transmit the ACK (including preamble and FCS)
    */
   Time GetAckDuration (Mac48Address to, WifiTxVector dataTxVector) const;
+  /**
+   * Return the time required to transmit the Block ACK to the specified address
+   * given the TXVECTOR of the BAR (including preamble and FCS).
+   *
+   * \param to
+   * \param dataTxVector
+   * \param type the Block ACK type
+   * \return the time required to transmit the Block ACK (including preamble and FCS)
+   */
   Time GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const;
-
   /**
    * Check if CTS-to-self mechanism should be used for the current packet.
    *
@@ -914,7 +1045,6 @@
    * CTS timer should be resetted.
    */
   void NotifyCtsTimeoutResetNow ();
-
   /**
    * Reset NAV after CTS was missed when the NAV was
    * setted with RTS.
@@ -922,7 +1052,6 @@
    * \param rtsEndRxTime
    */
   void NavCounterResetCtsMissed (Time rtsEndRxTime);
-
   /* Event handlers */
   /**
    * Event handler when normal ACK timeout occurs.
@@ -987,7 +1116,6 @@
    * A transmission that does not require an ACK has completed.
    */
   void EndTxNoAck (void);
-
   /**
    * Send RTS to begin RTS-CTS-DATA-ACK transaction.
    */
@@ -1004,7 +1132,16 @@
    * \param dataTxVector
    */
   void StartDataTxTimers (WifiTxVector dataTxVector);
+    
   virtual void DoDispose (void);
+    
+  /**
+   * \param packet packet to check
+   * \param hdr 802.11 header for packet to check
+   *
+   * Returns Tid of different packet types
+   */
+  uint8_t GetTid(Ptr<const Packet> packet, const WifiMacHeader hdr) const;
   /**
    * \param originator Address of peer participating in Block Ack mechanism.
    * \param tid TID for which Block Ack was created.
@@ -1024,10 +1161,23 @@
    * This happens when the originator of block ack has only few MPDUs to send.
    * All completed MSDUs starting with starting sequence number of block ack
    * agreement are forward up to WifiMac until there is an incomplete or missing MSDU.
-   * See section 9.10.4 in IEEE802.11 standard for more details.
+   * See section 9.10.4 in IEEE 802.11 standard for more details.
    */
   void RxCompleteBufferedPacketsUntilFirstLost (Mac48Address originator, uint8_t tid);
-  /*
+  /**
+   * \param seq MPDU sequence number
+   * \param winstart sequence number window start
+   * \param winsize the size of the sequence number window (currently default is 64)
+   * This method checks if the MPDU's sequence number is inside the scoreboard boundaries or not
+   */
+  bool IsInWindow (uint16_t seq, uint16_t winstart, uint16_t winsize);
+  /**
+   * This method updates the reorder buffer and the scoreboard when an MPDU is received in an HT station
+   * and sotres the MPDU if needed when an MPDU is received in an non-HT Station (implements HT
+   * immediate block Ack)
+   */
+  bool ReceiveMpdu (Ptr<Packet> packet, WifiMacHeader hdr);
+  /**
    * This method checks if exists a valid established block ack agreement.
    * If there is, store the packet without pass it up to WifiMac. The packet is buffered
    * in order of increasing sequence control field. All comparison are performed
@@ -1046,6 +1196,12 @@
   void SendBlockAckAfterBlockAckRequest (const CtrlBAckRequestHeader reqHdr, Mac48Address originator,
                                          Time duration, WifiMode blockAckReqTxMode);
   /**
+   * Invoked after an A-MPDU has been received. Looks for corresponding
+   * block ack agreement and creates block ack bitmap on a received packets basis.
+   */
+  void SendBlockAckAfterAmpdu (uint8_t tid, Mac48Address originator,
+                                          Time duration, WifiMode blockAckReqTxMode);
+  /**
    * This method creates block ack frame with header equals to <i>blockAck</i> and start its transmission.
    *
    * \param blockAck
@@ -1060,7 +1216,7 @@
    * Every time that a block ack request or a packet with ack policy equals to <i>block ack</i>
    * are received, if a relative block ack agreement exists and the value of inactivity timeout
    * is not 0, the timer is reset.
-   * see section 11.5.3 in IEEE802.11e for more details.
+   * see section 11.5.3 in IEEE 802.11e for more details.
    *
    * \param agreement
    */
@@ -1072,6 +1228,20 @@
    * \param phy the WifiPhy this MacLow is connected to
    */
   void SetupPhyMacLowListener (Ptr<WifiPhy> phy);
+  /**
+   * Remove current WifiPhy listener for this MacLow.
+   *
+   * \param phy the WifiPhy this MacLow is connected to
+   */
+  void RemovePhyMacLowListener (Ptr<WifiPhy> phy);
+  /**
+   * Checks if the given packet will be aggregated to an A-MPDU or not
+   *
+   * \param packet packet to check whether it can be aggregated in an A-MPDU
+   * \param hdr 802.11 header for packet to check whether it can be aggregated in an A-MPDU
+   *
+   */
+  bool IsAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr);
 
   Ptr<WifiPhy> m_phy; //!< Pointer to WifiPhy (actually send/receives frames)
   Ptr<WifiRemoteStationManager> m_stationManager; //!< Pointer to WifiRemoteStationManager (rate control)
@@ -1100,6 +1270,8 @@
   EventId m_navCounterResetCtsMissed;   //!< Event to reset NAV when CTS is not received
   EventId m_waitRifsEvent;              //!< Wait for RIFS event
 
+  Ptr<MpduAggregator> m_mpduAggregator; //!<
+
   Ptr<Packet> m_currentPacket;              //!< Current packet transmitted/to be transmitted
   WifiMacHeader m_currentHdr;               //!< Header of the current packet
   MacLowTransmissionParameters m_txParams;  //!< Transmission parameters of the current packet
@@ -1119,8 +1291,9 @@
   Time m_lastNavDuration;  //!< The duration of the latest NAV
 
   bool m_promisc;  //!< Flag if the device is operating in promiscuous mode
+  bool m_ampdu;    //!< Flag if the current transmission involves an A-MPDU
 
-  class PhyMacLowListener * m_phyMacLowListener; //!< Listerner needed to monitor when a channel switching occurs.
+  class PhyMacLowListener * m_phyMacLowListener; //!< Listener needed to monitor when a channel switching occurs.
 
   /*
    * BlockAck data structures.
@@ -1142,7 +1315,11 @@
 
   typedef std::map<AcIndex, MacLowBlockAckEventListener*> QueueListeners;
   QueueListeners m_edcaListeners;
-  bool m_ctsToSelfSupported;
+  bool m_ctsToSelfSupported;          //!< Flag whether CTS-to-self is supported
+  uint8_t m_sentMpdus;                //!< Number of transmitted MPDUs in an A-MPDU that have not been acknowledged yet
+  Ptr<WifiMacQueue> m_aggregateQueue; //!< Queue used for MPDU aggregation
+  WifiMode m_currentMode;             //!< mode used for the current packet transmission
+  bool m_receivedAtLeastOneMpdu;      //!< Flag whether an MPDU has already been successfully received while receiving an A-MPDU
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/mac-rx-middle.cc ns-3.22/src/wifi/model/mac-rx-middle.cc
--- ns-3.21/src/wifi/model/mac-rx-middle.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/mac-rx-middle.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,9 @@
 #include "ns3/sequence-number.h"
 #include <list>
 
-NS_LOG_COMPONENT_DEFINE ("MacRxMiddle");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MacRxMiddle");
 
 /**
  * A class to keep track of the packet originator status.
diff -Naur ns-3.21/src/wifi/model/mac-tx-middle.cc ns-3.22/src/wifi/model/mac-tx-middle.cc
--- ns-3.21/src/wifi/model/mac-tx-middle.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/mac-tx-middle.cc	2015-02-05 15:46:22.000000000 -0800
@@ -18,6 +18,7 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Mirko Banchi <mk.banchi@gmail.com>
+ * Author: Ghada Badawy <gbadawy@gmail.com>
  */
 
 #include "ns3/assert.h"
@@ -77,6 +78,31 @@
     }
   return retval;
 }
+uint16_t
+MacTxMiddle::PeekNextSequenceNumberfor (const WifiMacHeader *hdr)
+{
+  uint16_t retval;
+  if (hdr->IsQosData ()
+      && !hdr->GetAddr1 ().IsGroup ())
+    {
+      uint8_t tid = hdr->GetQosTid ();
+      NS_ASSERT (tid < 16);
+      std::map<Mac48Address, uint16_t*>::iterator it = m_qosSequences.find (hdr->GetAddr1 ());
+      if (it != m_qosSequences.end ())
+        {
+          retval = it->second[tid];
+        }
+      else
+        {
+          retval = 0;
+        }
+    }
+  else
+    {
+      retval = m_sequence;
+    }
+  return retval;
+}
 
 uint16_t
 MacTxMiddle::GetNextSeqNumberByTidAndAddress (uint8_t tid, Mac48Address addr) const
diff -Naur ns-3.21/src/wifi/model/mac-tx-middle.h ns-3.22/src/wifi/model/mac-tx-middle.h
--- ns-3.21/src/wifi/model/mac-tx-middle.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/mac-tx-middle.h	2015-02-05 15:46:22.000000000 -0800
@@ -50,6 +50,14 @@
    */
   uint16_t GetNextSequenceNumberfor (const WifiMacHeader *hdr);
   /**
+   * Return the next sequence number for the Traffic ID and destination, but do not pick it (i.e. the current sequence number remains unchanged). 
+   * This functions is used for A-MPDU aggregation.
+   *
+   * \param hdr Wi-Fi header
+   * \return the next sequence number
+   */
+  uint16_t PeekNextSequenceNumberfor (const WifiMacHeader *hdr);
+  /**
    * Return the next sequence number for the Traffic ID and destination.
    *
    * \param tid Traffic ID
diff -Naur ns-3.21/src/wifi/model/minstrel-wifi-manager.cc ns-3.22/src/wifi/model/minstrel-wifi-manager.cc
--- ns-3.21/src/wifi/model/minstrel-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/minstrel-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -40,11 +40,10 @@
 
 #define Min(a,b) ((a < b) ? a : b)
 
-NS_LOG_COMPONENT_DEFINE ("MinstrelWifiManager");
-
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MinstrelWifiManager");
+
 /**
  * \brief hold per-remote-station state for Minstrel Wifi manager.
  *
@@ -72,7 +71,6 @@
   bool m_isSampling;  ///< a flag to indicate we are currently sampling
   uint32_t m_sampleRate;  ///< current sample rate
   bool  m_sampleRateSlower;  ///< a flag to indicate sample rate is slower
-  uint32_t m_currentRate;  ///< current rate we are using
 
   uint32_t m_shortRetry;  ///< short retries such as control packts
   uint32_t m_longRetry;  ///< long retries such as data packets
@@ -81,6 +79,9 @@
   uint32_t m_txrate;  ///< current transmit rate
 
   bool m_initialized;  ///< for initializing tables
+
+  MinstrelRate m_minstrelTable;  ///< minstrel table
+  SampleRate m_sampleTable;  ///< sample table
 };
 
 NS_OBJECT_ENSURE_REGISTERED (MinstrelWifiManager);
@@ -134,13 +135,14 @@
 void
 MinstrelWifiManager::SetupPhy (Ptr<WifiPhy> phy)
 {
+  NS_LOG_FUNCTION(this << phy);
   uint32_t nModes = phy->GetNModes ();
   for (uint32_t i = 0; i < nModes; i++)
     {
       WifiMode mode = phy->GetMode (i);
       WifiTxVector txVector;
       txVector.SetMode(mode);
-      AddCalcTxTime (mode, phy->CalculateTxDuration (m_pktLen, txVector, WIFI_PREAMBLE_LONG));
+      AddCalcTxTime (mode, phy->CalculateTxDuration (m_pktLen, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency(), 0, 0));
     }
   WifiRemoteStationManager::SetupPhy (phy);
 }
@@ -190,7 +192,6 @@
   station->m_isSampling = false;
   station->m_sampleRate = 0;
   station->m_sampleRateSlower = false;
-  station->m_currentRate = 0;
   station->m_shortRetry = 0;
   station->m_longRetry = 0;
   station->m_retry = 0;
@@ -210,11 +211,14 @@
       // to make sure that the set of supported rates has been initialized
       // before we perform our own initialization.
       m_nsupported = GetNSupported (station);
-      m_minstrelTable = MinstrelRate (m_nsupported);
-      m_sampleTable = SampleRate (m_nsupported, std::vector<uint32_t> (m_sampleCol));
+      station->m_minstrelTable = MinstrelRate (m_nsupported);
+      station->m_sampleTable = SampleRate (m_nsupported, std::vector<uint32_t> (m_sampleCol));
       InitSampleTable (station);
       RateInit (station);
       station->m_initialized = true;
+
+      PrintTable (station);
+      PrintSampleTable (station);
     }
 }
 
@@ -222,7 +226,7 @@
 MinstrelWifiManager::DoReportRxOk (WifiRemoteStation *st,
                                    double rxSnr, WifiMode txMode)
 {
-  NS_LOG_DEBUG ("DoReportRxOk m_txrate=" << ((MinstrelWifiRemoteStation *)st)->m_txrate);
+  NS_LOG_FUNCTION (this);
 }
 
 void
@@ -275,38 +279,46 @@
     }
 
   station->m_longRetry++;
+  station->m_minstrelTable[station->m_txrate].numRateAttempt++;
 
-  NS_LOG_DEBUG ("DoReportDataFailed " << station << "\t rate " << station->m_txrate << "\tlongRetry \t" << station->m_longRetry);
+  PrintTable (station);
+
+  NS_LOG_DEBUG ("DoReportDataFailed " << station << " rate " << station->m_txrate << " longRetry " << station->m_longRetry);
 
   /// for normal rate, we're not currently sampling random rates
   if (!station->m_isSampling)
     {
+      NS_LOG_DEBUG ("Failed with normal rate: current=" << station->m_txrate << ", sample=" << station->m_sampleRate << ", maxTp=" << station->m_maxTpRate << ", maxTp2=" << station->m_maxTpRate2 << ", maxProb=" << station->m_maxProbRate);
       /// use best throughput rate
-      if (station->m_longRetry < m_minstrelTable[station->m_txrate].adjustedRetryCount)
+      if (station->m_longRetry < station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount)
         {
-          ;  ///<  there's still a few retries left
+          NS_LOG_DEBUG (" More retries left for the maximum throughput rate.");
+          station->m_txrate = station->m_maxTpRate;
         }
 
       /// use second best throughput rate
-      else if (station->m_longRetry <= (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                        m_minstrelTable[station->m_maxTpRate].adjustedRetryCount))
+      else if (station->m_longRetry <= (station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                        station->m_minstrelTable[station->m_maxTpRate2].adjustedRetryCount))
         {
+          NS_LOG_DEBUG (" More retries left for the second maximum throughput rate.");
           station->m_txrate = station->m_maxTpRate2;
         }
 
       /// use best probability rate
-      else if (station->m_longRetry <= (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                        m_minstrelTable[station->m_maxTpRate2].adjustedRetryCount +
-                                        m_minstrelTable[station->m_maxTpRate].adjustedRetryCount))
+      else if (station->m_longRetry <= (station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                        station->m_minstrelTable[station->m_maxTpRate2].adjustedRetryCount +
+                                        station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount))
         {
+          NS_LOG_DEBUG (" More retries left for the maximum probability rate.");
           station->m_txrate = station->m_maxProbRate;
         }
 
       /// use lowest base rate
-      else if (station->m_longRetry > (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                       m_minstrelTable[station->m_maxTpRate2].adjustedRetryCount +
-                                       m_minstrelTable[station->m_maxTpRate].adjustedRetryCount))
+      else if (station->m_longRetry > (station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                       station->m_minstrelTable[station->m_maxTpRate2].adjustedRetryCount +
+                                       station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount))
         {
+          NS_LOG_DEBUG (" More retries left for the base rate.");
           station->m_txrate = 0;
         }
     }
@@ -314,35 +326,41 @@
   /// for look-around rate, we're currently sampling random rates
   else
     {
+      NS_LOG_DEBUG ("Failed with look around rate: current=" << station->m_txrate << ", sample=" << station->m_sampleRate << ", maxTp=" << station->m_maxTpRate << ", maxTp2=" << station->m_maxTpRate2 << ", maxProb=" << station->m_maxProbRate);
       /// current sampling rate is slower than the current best rate
       if (station->m_sampleRateSlower)
         {
+          NS_LOG_DEBUG ("Look around rate is slower than the maximum throughput rate.");
           /// use best throughput rate
-          if (station->m_longRetry < m_minstrelTable[station->m_txrate].adjustedRetryCount)
+          if (station->m_longRetry < station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount)
             {
-              ; ///<  there are a few retries left
+              NS_LOG_DEBUG (" More retries left for the maximum throughput rate.");
+              station->m_txrate = station->m_maxTpRate;
             }
 
           ///	use random rate
-          else if (station->m_longRetry <= (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                            m_minstrelTable[station->m_maxTpRate].adjustedRetryCount))
+          else if (station->m_longRetry <= (station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                            station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount))
             {
+              NS_LOG_DEBUG (" More retries left for the sampling rate.");
               station->m_txrate = station->m_sampleRate;
             }
 
           /// use max probability rate
-          else if (station->m_longRetry <= (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                            m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
-                                            m_minstrelTable[station->m_maxTpRate].adjustedRetryCount ))
+          else if (station->m_longRetry <= (station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                            station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
+                                            station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount ))
             {
+              NS_LOG_DEBUG (" More retries left for the maximum probability rate.");
               station->m_txrate = station->m_maxProbRate;
             }
 
           /// use lowest base rate
-          else if (station->m_longRetry > (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                           m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
-                                           m_minstrelTable[station->m_maxTpRate].adjustedRetryCount))
+          else if (station->m_longRetry > (station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                           station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
+                                           station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount))
             {
+              NS_LOG_DEBUG (" More retries left for the base rate.");
               station->m_txrate = 0;
             }
         }
@@ -350,32 +368,37 @@
       /// current sampling rate is better than current best rate
       else
         {
+          NS_LOG_DEBUG ("Look around rate is faster than the maximum throughput rate.");
           /// use random rate
-          if (station->m_longRetry < m_minstrelTable[station->m_txrate].adjustedRetryCount)
+          if (station->m_longRetry < station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount)
             {
-              ;    ///< keep using it
+              NS_LOG_DEBUG (" More retries left for the sampling rate.");
+              station->m_txrate = station->m_sampleRate;
             }
 
-          /// use the best rate
-          else if (station->m_longRetry <= (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                            m_minstrelTable[station->m_sampleRate].adjustedRetryCount))
+          /// use the best throughput rate
+          else if (station->m_longRetry <= (station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
+                                            station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount))
             {
+              NS_LOG_DEBUG (" More retries left for the maximum throughput rate.");
               station->m_txrate = station->m_maxTpRate;
             }
 
           /// use the best probability rate
-          else if (station->m_longRetry <= (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                            m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
-                                            m_minstrelTable[station->m_sampleRate].adjustedRetryCount))
+          else if (station->m_longRetry <= (station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
+                                            station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                            station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount))
             {
+              NS_LOG_DEBUG (" More retries left for the maximum probability rate.");
               station->m_txrate = station->m_maxProbRate;
             }
 
           /// use the lowest base rate
-          else if (station->m_longRetry > (m_minstrelTable[station->m_txrate].adjustedRetryCount +
-                                           m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
-                                           m_minstrelTable[station->m_sampleRate].adjustedRetryCount))
+          else if (station->m_longRetry > (station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
+                                           station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                           station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount))
             {
+              NS_LOG_DEBUG (" More retries left for the base rate.");
               station->m_txrate = 0;
             }
         }
@@ -386,6 +409,7 @@
 MinstrelWifiManager::DoReportDataOk (WifiRemoteStation *st,
                                      double ackSnr, WifiMode ackMode, double dataSnr)
 {
+  NS_LOG_FUNCTION (st << ackSnr << ackMode << dataSnr);
   MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
 
   station->m_isSampling = false;
@@ -396,13 +420,15 @@
     {
       return;
     }
+  NS_LOG_DEBUG ("DoReportDataOk m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (before update).");
+
+  station->m_minstrelTable[station->m_txrate].numRateSuccess++;
+  station->m_minstrelTable[station->m_txrate].numRateAttempt++;
 
-  m_minstrelTable[station->m_txrate].numRateSuccess++;
-  m_minstrelTable[station->m_txrate].numRateAttempt++;
+  NS_LOG_DEBUG ("DoReportDataOk m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (after update).");
 
   UpdateRetry (station);
 
-  m_minstrelTable[station->m_txrate].numRateAttempt += station->m_retry;
   station->m_packetCount++;
 
   if (m_nsupported >= 1)
@@ -414,17 +440,26 @@
 void
 MinstrelWifiManager::DoReportFinalDataFailed (WifiRemoteStation *st)
 {
+  NS_LOG_FUNCTION (st);
   MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
-  NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate=" << station->m_txrate);
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (before update).");
 
   station->m_isSampling = false;
   station->m_sampleRateSlower = false;
 
   UpdateRetry (station);
 
-  m_minstrelTable[station->m_txrate].numRateAttempt += station->m_retry;
   station->m_err++;
 
+  NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (after update).");
+
   if (m_nsupported >= 1)
     {
       station->m_txrate = FindRate (station);
@@ -452,7 +487,7 @@
       station->m_txrate = m_nsupported / 2;
     }
   UpdateStats (station);
-  return WifiTxVector (GetSupported (station, station->m_txrate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, station->m_txrate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 
 WifiTxVector
@@ -461,7 +496,48 @@
   MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
   NS_LOG_DEBUG ("DoGetRtsMode m_txrate=" << station->m_txrate);
 
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
+}
+
+bool
+MinstrelWifiManager::DoNeedDataRetransmission (WifiRemoteStation *st, Ptr<const Packet> packet, bool normally)
+{
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return normally;
+    }
+
+  if (!station->m_isSampling)
+    {
+      if (station->m_longRetry > (station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                  station->m_minstrelTable[station->m_maxTpRate2].adjustedRetryCount +
+                                  station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount +
+                                  station->m_minstrelTable[0].adjustedRetryCount))
+        {
+          return false;
+        }
+      else
+        {
+          return true;
+        }
+    }
+  else
+    {
+      if (station->m_longRetry > (station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
+                                  station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+                                  station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount +
+                                  station->m_minstrelTable[0].adjustedRetryCount))
+        {
+          return false;
+        }
+      else
+        {
+          return true;
+        }
+    }
 }
 
 bool
@@ -473,7 +549,7 @@
 MinstrelWifiManager::GetNextSample (MinstrelWifiRemoteStation *station)
 {
   uint32_t bitrate;
-  bitrate = m_sampleTable[station->m_index][station->m_col];
+  bitrate = station->m_sampleTable[station->m_index][station->m_col];
   station->m_index++;
 
   /// bookeeping for m_index and m_col variables
@@ -492,7 +568,7 @@
 uint32_t
 MinstrelWifiManager::FindRate (MinstrelWifiRemoteStation *station)
 {
-  NS_LOG_DEBUG ("FindRate " << "packet=" << station->m_packetCount );
+  NS_LOG_FUNCTION (this << station);
 
   if ((station->m_sampleCount + station->m_packetCount) == 0)
     {
@@ -513,7 +589,7 @@
   if ( (((100 * station->m_sampleCount) / (station->m_sampleCount + station->m_packetCount )) < m_lookAroundRate)
        && (coinFlip == 1) )
     {
-
+      NS_LOG_DEBUG ("Using look around rate");
       /// now go through the table and find an index rate
       idx = GetNextSample (station);
 
@@ -554,25 +630,26 @@
 
           /// is this rate slower than the current best rate
           station->m_sampleRateSlower =
-            (m_minstrelTable[idx].perfectTxTime > m_minstrelTable[station->m_maxTpRate].perfectTxTime);
+            (station->m_minstrelTable[idx].perfectTxTime > station->m_minstrelTable[station->m_maxTpRate].perfectTxTime);
 
           /// using the best rate instead
           if (station->m_sampleRateSlower)
             {
+              NS_LOG_DEBUG ("The next look around rate is slower than the maximum throughput rate, continue with the maximum throughput rate: " << station->m_maxTpRate << "(" << GetSupported (station, station->m_maxTpRate) << ")");
               idx =  station->m_maxTpRate;
             }
         }
-
     }
 
   ///	continue using the best rate
   else
     {
+      NS_LOG_DEBUG ("Continue using the maximum throughput rate: " << station->m_maxTpRate << "(" << GetSupported (station, station->m_maxTpRate) << ")");
       idx = station->m_maxTpRate;
     }
 
 
-  NS_LOG_DEBUG ("FindRate " << "sample rate=" << idx);
+  NS_LOG_DEBUG ("Rate = " << idx << "(" << GetSupported (station, idx) << ")");
 
   return idx;
 }
@@ -589,18 +666,20 @@
     {
       return;
     }
-  NS_LOG_DEBUG ("Updating stats=" << this);
-
+  NS_LOG_FUNCTION (this);
   station->m_nextStatsUpdate = Simulator::Now () + m_updateStats;
+  NS_LOG_DEBUG ("Next update at " << station->m_nextStatsUpdate);
+  NS_LOG_DEBUG ("Currently using rate: " << station->m_txrate << " (" << GetSupported (station, station->m_txrate) << ")");
 
   Time txTime;
   uint32_t tempProb;
 
+  NS_LOG_DEBUG ("Index-Rate\t\tAttempt\tSuccess");
   for (uint32_t i = 0; i < m_nsupported; i++)
     {
 
       /// calculate the perfect tx time for this rate
-      txTime = m_minstrelTable[i].perfectTxTime;
+      txTime = station->m_minstrelTable[i].perfectTxTime;
 
       /// just for initialization
       if (txTime.GetMicroSeconds () == 0)
@@ -608,84 +687,90 @@
           txTime = Seconds (1);
         }
 
-      NS_LOG_DEBUG ("m_txrate=" << station->m_txrate <<
-                    "\t attempt=" << m_minstrelTable[i].numRateAttempt <<
-                    "\t success=" << m_minstrelTable[i].numRateSuccess);
+      NS_LOG_DEBUG (i << " " << GetSupported (station, i) <<
+                    "\t" << station->m_minstrelTable[i].numRateAttempt <<
+                    "\t" << station->m_minstrelTable[i].numRateSuccess);
 
       /// if we've attempted something
-      if (m_minstrelTable[i].numRateAttempt)
+      if (station->m_minstrelTable[i].numRateAttempt)
         {
           /**
            * calculate the probability of success
            * assume probability scales from 0 to 18000
            */
-          tempProb = (m_minstrelTable[i].numRateSuccess * 18000) / m_minstrelTable[i].numRateAttempt;
+          tempProb = (station->m_minstrelTable[i].numRateSuccess * 18000) / station->m_minstrelTable[i].numRateAttempt;
 
           /// bookeeping
-          m_minstrelTable[i].successHist += m_minstrelTable[i].numRateSuccess;
-          m_minstrelTable[i].attemptHist += m_minstrelTable[i].numRateAttempt;
-          m_minstrelTable[i].prob = tempProb;
+          station->m_minstrelTable[i].prob = tempProb;
 
           /// ewma probability (cast for gcc 3.4 compatibility)
-          tempProb = static_cast<uint32_t> (((tempProb * (100 - m_ewmaLevel)) + (m_minstrelTable[i].ewmaProb * m_ewmaLevel) ) / 100);
+          tempProb = static_cast<uint32_t> (((tempProb * (100 - m_ewmaLevel)) + (station->m_minstrelTable[i].ewmaProb * m_ewmaLevel) ) / 100);
 
-          m_minstrelTable[i].ewmaProb = tempProb;
+          station->m_minstrelTable[i].ewmaProb = tempProb;
 
           /// calculating throughput
-          m_minstrelTable[i].throughput = tempProb * (1000000 / txTime.GetMicroSeconds ());
+          station->m_minstrelTable[i].throughput = tempProb * (1000000 / txTime.GetMicroSeconds ());
 
         }
 
       /// bookeeping
-      m_minstrelTable[i].prevNumRateAttempt = m_minstrelTable[i].numRateAttempt;
-      m_minstrelTable[i].prevNumRateSuccess = m_minstrelTable[i].numRateSuccess;
-      m_minstrelTable[i].numRateSuccess = 0;
-      m_minstrelTable[i].numRateAttempt = 0;
+      station->m_minstrelTable[i].numRateSuccess = 0;
+      station->m_minstrelTable[i].numRateAttempt = 0;
 
       /// Sample less often below 10% and  above 95% of success
-      if ((m_minstrelTable[i].ewmaProb > 17100) || (m_minstrelTable[i].ewmaProb < 1800))
+      if ((station->m_minstrelTable[i].ewmaProb > 17100) || (station->m_minstrelTable[i].ewmaProb < 1800))
         {
           /**
-           * retry count denotes the number of retries permitted for each rate
-           * # retry_count/2
+           * See: http://wireless.kernel.org/en/developers/Documentation/mac80211/RateControl/minstrel/
+           *
+           * Analysis of information showed that the system was sampling too hard at some rates.
+           * For those rates that never work (54mb, 500m range) there is no point in sending 10 sample packets (< 6 ms time).
+           * Consequently, for the very very low probability rates, we sample at most twice. 
            */
-          m_minstrelTable[i].adjustedRetryCount = m_minstrelTable[i].retryCount >> 1;
-          if (m_minstrelTable[i].adjustedRetryCount > 2)
+          if (station->m_minstrelTable[i].retryCount > 2)
             {
-              m_minstrelTable[i].adjustedRetryCount = 2;
+              station->m_minstrelTable[i].adjustedRetryCount = 2;
+            }
+          else
+            {
+              station->m_minstrelTable[i].adjustedRetryCount = station->m_minstrelTable[i].retryCount;
             }
         }
       else
         {
-          m_minstrelTable[i].adjustedRetryCount = m_minstrelTable[i].retryCount;
+          station->m_minstrelTable[i].adjustedRetryCount = station->m_minstrelTable[i].retryCount;
         }
 
       /// if it's 0 allow one retry limit
-      if (m_minstrelTable[i].adjustedRetryCount == 0)
+      if (station->m_minstrelTable[i].adjustedRetryCount == 0)
         {
-          m_minstrelTable[i].adjustedRetryCount = 1;
+          station->m_minstrelTable[i].adjustedRetryCount = 1;
         }
     }
+  NS_LOG_DEBUG ("Attempt/success resetted to 0");
 
 
   uint32_t max_prob = 0, index_max_prob = 0, max_tp = 0, index_max_tp = 0, index_max_tp2 = 0;
 
   /// go find max throughput, second maximum throughput, high probability succ
+  NS_LOG_DEBUG ("Finding the maximum throughput, second maximum throughput, and highest probability");
+  NS_LOG_DEBUG ("Index-Rate\t\tT-put\tEWMA");
   for (uint32_t i = 0; i < m_nsupported; i++)
     {
-      NS_LOG_DEBUG ("throughput" << m_minstrelTable[i].throughput <<
-                    "\n ewma" << m_minstrelTable[i].ewmaProb);
+      NS_LOG_DEBUG (i << " " << GetSupported (station, i) <<
+                    "\t" << station->m_minstrelTable[i].throughput <<
+                    "\t" << station->m_minstrelTable[i].ewmaProb);
 
-      if (max_tp < m_minstrelTable[i].throughput)
+      if (max_tp < station->m_minstrelTable[i].throughput)
         {
           index_max_tp = i;
-          max_tp = m_minstrelTable[i].throughput;
+          max_tp = station->m_minstrelTable[i].throughput;
         }
 
-      if (max_prob < m_minstrelTable[i].ewmaProb)
+      if (max_prob < station->m_minstrelTable[i].ewmaProb)
         {
           index_max_prob = i;
-          max_prob = m_minstrelTable[i].ewmaProb;
+          max_prob = station->m_minstrelTable[i].ewmaProb;
         }
     }
 
@@ -694,49 +779,88 @@
   /// find the second highest max
   for (uint32_t i = 0; i < m_nsupported; i++)
     {
-      if ((i != index_max_tp) && (max_tp < m_minstrelTable[i].throughput))
+      if ((i != index_max_tp) && (max_tp < station->m_minstrelTable[i].throughput))
         {
           index_max_tp2 = i;
-          max_tp = m_minstrelTable[i].throughput;
+          max_tp = station->m_minstrelTable[i].throughput;
         }
     }
 
   station->m_maxTpRate = index_max_tp;
   station->m_maxTpRate2 = index_max_tp2;
   station->m_maxProbRate = index_max_prob;
-  station->m_currentRate = index_max_tp;
 
   if (index_max_tp > station->m_txrate)
     {
       station->m_txrate = index_max_tp;
     }
 
-  NS_LOG_DEBUG ("max tp=" << index_max_tp << "\nmax tp2=" << index_max_tp2 << "\nmax prob=" << index_max_prob);
-
-  /// reset it
-  RateInit (station);
+  NS_LOG_DEBUG ("max throughput=" << index_max_tp << "(" << GetSupported (station, index_max_tp) <<
+                ")\tsecond max throughput=" << index_max_tp2 << "(" << GetSupported (station, index_max_tp2) <<
+                ")\tmax prob=" << index_max_prob << "(" << GetSupported (station, index_max_prob) << ")");
 }
 
 void
 MinstrelWifiManager::RateInit (MinstrelWifiRemoteStation *station)
 {
-  NS_LOG_DEBUG ("RateInit=" << station);
+  NS_LOG_FUNCTION (station);
 
   for (uint32_t i = 0; i < m_nsupported; i++)
     {
-      m_minstrelTable[i].numRateAttempt = 0;
-      m_minstrelTable[i].numRateSuccess = 0;
-      m_minstrelTable[i].prob = 0;
-      m_minstrelTable[i].ewmaProb = 0;
-      m_minstrelTable[i].prevNumRateAttempt = 0;
-      m_minstrelTable[i].prevNumRateSuccess = 0;
-      m_minstrelTable[i].successHist = 0;
-      m_minstrelTable[i].attemptHist = 0;
-      m_minstrelTable[i].throughput = 0;
-      m_minstrelTable[i].perfectTxTime = GetCalcTxTime (GetSupported (station, i));
-      m_minstrelTable[i].retryCount = 1;
-      m_minstrelTable[i].adjustedRetryCount = 1;
+      NS_LOG_DEBUG ("Initializing rate index " << i << " " << GetSupported (station, i));
+      station->m_minstrelTable[i].numRateAttempt = 0;
+      station->m_minstrelTable[i].numRateSuccess = 0;
+      station->m_minstrelTable[i].prob = 0;
+      station->m_minstrelTable[i].ewmaProb = 0;
+      station->m_minstrelTable[i].throughput = 0;
+      station->m_minstrelTable[i].perfectTxTime = GetCalcTxTime (GetSupported (station, i));
+      NS_LOG_DEBUG (" perfectTxTime = " << station->m_minstrelTable[i].perfectTxTime);
+      station->m_minstrelTable[i].retryCount = 1;
+      station->m_minstrelTable[i].adjustedRetryCount = 1;
+      // Emulating minstrel.c::ath_rate_ctl_reset
+      // We only check from 2 to 10 retries. This guarantee that
+      // at least one retry is permitter.
+      Time totalTxTimeWithGivenRetries = Seconds (0.0); // tx_time in minstrel.c
+      NS_LOG_DEBUG (" Calculating the number of retries");
+      for (uint32_t retries = 2; retries < 11; retries++)
+        {
+          NS_LOG_DEBUG ("  Checking " << retries << " retries");
+          totalTxTimeWithGivenRetries = CalculateTimeUnicastPacket (station->m_minstrelTable[i].perfectTxTime, 0, retries);
+          NS_LOG_DEBUG ("   totalTxTimeWithGivenRetries = " << totalTxTimeWithGivenRetries);
+          if (totalTxTimeWithGivenRetries > MilliSeconds (6))
+            {
+              break;
+            }
+          station->m_minstrelTable[i].retryCount = retries;
+          station->m_minstrelTable[i].adjustedRetryCount = retries;
+        }
+    }
+}
+
+Time
+MinstrelWifiManager::CalculateTimeUnicastPacket (Time dataTransmissionTime, uint32_t shortRetries, uint32_t longRetries)
+{
+  NS_LOG_FUNCTION (this << dataTransmissionTime << shortRetries << longRetries);
+  // See rc80211_minstrel.c
+  
+  //First transmission (DATA + ACK timeout)
+  Time tt = dataTransmissionTime + GetMac ()->GetAckTimeout ();
+
+  uint32_t cwMax = 1023;
+  uint32_t cw = 31;
+  for (uint32_t retry = 0; retry < longRetries; retry++)
+    {
+      // Add one re-transmission (DATA + ACK timeout)
+      tt += dataTransmissionTime + GetMac ()->GetAckTimeout ();
+
+      // Add average back off (half the current contention window)
+      tt += NanoSeconds ((cw / 2) * GetMac ()->GetSlot ());
+
+      // Update contention window
+      cw = std::min (cwMax, (cw + 1) * 2);
     }
+
+  return tt;
 }
 
 void
@@ -763,11 +887,11 @@
           newIndex = (i + uv) % numSampleRates;
 
           /// this loop is used for filling in other uninitilized places
-          while (m_sampleTable[newIndex][col] != 0)
+          while (station->m_sampleTable[newIndex][col] != 0)
             {
               newIndex = (newIndex + 1) % m_nsupported;
             }
-          m_sampleTable[newIndex][col] = i;
+          station->m_sampleTable[newIndex][col] = i;
 
         }
     }
@@ -779,14 +903,16 @@
   NS_LOG_DEBUG ("PrintSampleTable=" << station);
 
   uint32_t numSampleRates = m_nsupported;
+  std::stringstream table;
   for (uint32_t i = 0; i < numSampleRates; i++)
     {
       for (uint32_t j = 0; j < m_sampleCol; j++)
         {
-          std::cout << m_sampleTable[i][j] << "\t";
+          table << station->m_sampleTable[i][j] << "\t";
         }
-      std::cout << std::endl;
+      table << std::endl;
     }
+  NS_LOG_DEBUG (table.str());
 }
 
 void
@@ -796,7 +922,7 @@
 
   for (uint32_t i = 0; i < m_nsupported; i++)
     {
-      std::cout << "index(" << i << ") = " << m_minstrelTable[i].perfectTxTime << "\n";
+      NS_LOG_DEBUG (i << " (" << GetSupported (station, i) << "): "  << station->m_minstrelTable[i].perfectTxTime << ", retryCount = " << station->m_minstrelTable[i].retryCount << ", adjustedRetryCount = " << station->m_minstrelTable[i].adjustedRetryCount);
     }
 }
 
diff -Naur ns-3.21/src/wifi/model/minstrel-wifi-manager.h ns-3.22/src/wifi/model/minstrel-wifi-manager.h
--- ns-3.21/src/wifi/model/minstrel-wifi-manager.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/minstrel-wifi-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -56,10 +56,6 @@
    */
   uint32_t ewmaProb;
 
-  uint32_t prevNumRateAttempt;  ///< from last rate
-  uint32_t prevNumRateSuccess;  ///< from last rate
-  uint64_t successHist;  ///< aggregate of all successes
-  uint64_t attemptHist;  ///< aggregate of all attempts
   uint32_t throughput;  ///< throughput of a rate
 };
 
@@ -117,8 +113,11 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
- virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
+
+  virtual bool DoNeedDataRetransmission (WifiRemoteStation *st, Ptr<const Packet> packet, bool normally);
+
   virtual bool IsLowLatency (void) const;
 
   /// for estimating the TxTime of a packet with a given mode
@@ -146,6 +145,24 @@
   /// initialize Minstrel Table
   void RateInit (MinstrelWifiRemoteStation *station);
 
+  /**
+   * Estimate the time to transmit the given packet with the given number of retries.
+   * This function is "roughly" the function "calc_usecs_unicast_packet" in minstrel.c
+   * in the madwifi implementation.
+   *
+   * The basic idea is that, we try to estimate the "average" time used to transmit the
+   * packet for the given number of retries while also accounting for the 802.11 congestion
+   * window change. The original code in the madwifi seems to estimate the number of backoff
+   * slots as the half of the current CW size.
+   *
+   * There are four main parts:
+   *  - wait for DIFS (sense idle channel)
+   *  - ACK timeouts
+   *  - DATA transmission
+   *  - backoffs according to CW
+   */
+  Time CalculateTimeUnicastPacket (Time dataTransmissionTime, uint32_t shortRetries, uint32_t longRetries);
+
   /// initialize Sample Table
   void InitSampleTable (MinstrelWifiRemoteStation *station);
 
@@ -163,16 +180,13 @@
    * to transmit a reference packet.
    */
   typedef std::vector<std::pair<Time,WifiMode> > TxTime;
-  MinstrelRate m_minstrelTable;  ///< minstrel table
-  SampleRate m_sampleTable;  ///< sample table
-
 
   TxTime m_calcTxTime;  ///< to hold all the calculated TxTime for all modes
-  Time m_updateStats;  ///< how frequent do we calculate the stats(1/10 seconds)
+  Time m_updateStats;  ///< how frequent do we calculate the stats (1/10 seconds)
   double m_lookAroundRate;  ///< the % to try other rates than our current rate
   double m_ewmaLevel;  ///< exponential weighted moving average
   uint32_t m_sampleCol;  ///< number of sample columns
-  uint32_t m_pktLen;  ///< packet length used  for calculate mode TxTime
+  uint32_t m_pktLen;  ///< packet length used for calculate mode TxTime
   uint32_t m_nsupported;  ///< modes supported
 
   /// Provides uniform random variables.
diff -Naur ns-3.21/src/wifi/model/mpdu-aggregator.cc ns-3.22/src/wifi/model/mpdu-aggregator.cc
--- ns-3.21/src/wifi/model/mpdu-aggregator.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/mpdu-aggregator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,77 @@
+/* -*- 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>
+ */
+#include "ns3/log.h"
+
+#include "mpdu-aggregator.h"
+#include "wifi-mac-header.h"
+
+NS_LOG_COMPONENT_DEFINE ("MpduAggregator");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (MpduAggregator);
+
+TypeId
+MpduAggregator::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::MpduAggregator")
+    .SetParent<Object> ()
+  ;
+  return tid;
+}
+
+MpduAggregator::DeaggregatedMpdus
+MpduAggregator::Deaggregate (Ptr<Packet> aggregatedPacket)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  DeaggregatedMpdus set;
+
+  AmpduSubframeHeader hdr;
+  Ptr<Packet> extractedMpdu = Create<Packet> ();
+  uint32_t maxSize = aggregatedPacket->GetSize ();
+  uint16_t extractedLength;
+  uint32_t padding;
+  uint32_t deserialized = 0;
+
+  while (deserialized < maxSize)
+    {
+      deserialized += aggregatedPacket->RemoveHeader (hdr);
+      extractedLength = hdr.GetLength ();
+      extractedMpdu = aggregatedPacket->CreateFragment (0, static_cast<uint32_t> (extractedLength));
+      aggregatedPacket->RemoveAtStart (extractedLength);
+      deserialized += extractedLength;
+
+      padding = (4 - (extractedLength % 4 )) % 4;
+
+      if (padding > 0 && deserialized < maxSize)
+        {
+          aggregatedPacket->RemoveAtStart (padding);
+          deserialized += padding;
+        }
+
+      std::pair<Ptr<Packet>, AmpduSubframeHeader> packetHdr (extractedMpdu, hdr);
+      set.push_back (packetHdr);
+    }
+  NS_LOG_INFO ("Deaggreated A-MPDU: extracted " << set.size () << " MPDUs");
+  return set;
+}
+
+
+} // namespace ns3
diff -Naur ns-3.21/src/wifi/model/mpdu-aggregator.h ns-3.22/src/wifi/model/mpdu-aggregator.h
--- ns-3.21/src/wifi/model/mpdu-aggregator.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/mpdu-aggregator.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,91 @@
+/* -*- 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 MPDU_AGGREGATOR_H
+#define MPDU_AGGREGATOR_H
+
+#include "ns3/ptr.h"
+#include "ns3/packet.h"
+#include "ns3/object.h"
+
+#include "ampdu-subframe-header.h"
+
+#include <list>
+
+namespace ns3 {
+
+class WifiMacHeader;
+
+/**
+ * \brief Abstract class that concrete mpdu aggregators have to implement
+ * \ingroup wifi
+ */
+class MpduAggregator : public Object
+{
+public:
+  /**
+   * A list of deaggregated packets and their A-MPDU subframe headers.
+   */
+  typedef std::list<std::pair<Ptr<Packet>, AmpduSubframeHeader> > DeaggregatedMpdus;
+  /**
+   * A constant iterator for a list of deaggregated packets and their A-MPDU subframe headers.
+   */
+  typedef std::list<std::pair<Ptr<Packet>, AmpduSubframeHeader> >::const_iterator DeaggregatedMpdusCI;
+
+  static TypeId GetTypeId (void);
+  /**
+   * \param packet Packet we have to insert into <i>aggregatedPacket</i>.
+   * \param aggregatedPacket Packet that will contain <i>packet</i>, if aggregation is possible.
+   * \return true if <i>packet</i> can be aggregated to <i>aggregatedPacket</i>, false otherwise.
+   *
+   * Adds <i>packet</i> to <i>aggregatedPacket</i>. In concrete aggregator's implementation is
+   * specified how and if <i>packet</i> can be added to <i>aggregatedPacket</i>.
+   */
+  virtual bool Aggregate (Ptr<const Packet> packet, Ptr<Packet> aggregatedPacket) = 0;
+  /**
+   * Adds A-MPDU subframe header and padding to each MPDU that is part of an A-MPDU before it is sent.
+   */
+  virtual void AddHeaderAndPad (Ptr<Packet> packet,bool last) = 0;
+  /**
+   * \param packetSize size of the packet we want to insert into <i>aggregatedPacket</i>.
+   * \param aggregatedPacket packet that will contain the packet of size <i>packetSize</i>, if aggregation is possible.
+   * \param blockAckSize size of the piggybacked block ack request
+   * \return true if the packet of size <i>packetSize</i> can be aggregated to <i>aggregatedPacket</i>, false otherwise.
+   *
+   * This method is used to determine if a packet could be aggregated to an A-MPDU without exceeding the maximum packet size.
+   */
+  virtual bool CanBeAggregated (uint32_t packetSize, Ptr<Packet> aggregatedPacket, uint8_t blockAckSize) = 0;
+  /**
+   * \return padding that must be added to the end of an aggregated packet
+   *
+   * Calculates how much padding must be added to the end of an aggregated packet, after that a new packet is added.
+   * Each A-MPDU subframe is padded so that its length is multiple of 4 octets.
+   */
+  virtual uint32_t CalculatePadding (Ptr<const Packet> packet) = 0;
+  /**
+   * Deaggregates an A-MPDU by removing the A-MPDU subframe header and padding.
+   *
+   * \return list of deaggragted packets and their A-MPDU subframe headers
+   */
+  static DeaggregatedMpdus Deaggregate (Ptr<Packet> aggregatedPacket);
+};
+
+}  // namespace ns3
+
+#endif /* MPDU_AGGREGATOR_H */
diff -Naur ns-3.21/src/wifi/model/mpdu-standard-aggregator.cc ns-3.22/src/wifi/model/mpdu-standard-aggregator.cc
--- ns-3.21/src/wifi/model/mpdu-standard-aggregator.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/mpdu-standard-aggregator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,128 @@
+/* -*- 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>
+ */
+#include "ns3/log.h"
+#include "ns3/uinteger.h"
+
+#include "ampdu-subframe-header.h"
+#include "mpdu-standard-aggregator.h"
+
+NS_LOG_COMPONENT_DEFINE ("MpduStandardAggregator");
+
+namespace ns3 {
+
+NS_OBJECT_ENSURE_REGISTERED (MpduStandardAggregator);
+
+TypeId
+MpduStandardAggregator::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::MpduStandardAggregator")
+    .SetParent<MpduAggregator> ()
+    .AddConstructor<MpduStandardAggregator> ()
+    .AddAttribute ("MaxAmpduSize", "Max length in bytes of an A-MPDU",
+                   UintegerValue (65535),
+                   MakeUintegerAccessor (&MpduStandardAggregator::m_maxAmpduLength),
+                   MakeUintegerChecker<uint32_t> ())
+  ;
+  return tid;
+}
+
+MpduStandardAggregator::MpduStandardAggregator ()
+{
+}
+
+MpduStandardAggregator::~MpduStandardAggregator ()
+{
+}
+
+bool
+MpduStandardAggregator::Aggregate (Ptr<const Packet> packet, Ptr<Packet> aggregatedPacket)
+{
+  NS_LOG_FUNCTION (this);
+  Ptr<Packet> currentPacket;
+  AmpduSubframeHeader currentHdr;
+
+  uint32_t padding = CalculatePadding (aggregatedPacket);
+  uint32_t actualSize = aggregatedPacket->GetSize ();
+
+  if ((4 + packet->GetSize () + actualSize + padding) <= m_maxAmpduLength)
+    {
+      if (padding)
+        {
+          Ptr<Packet> pad = Create<Packet> (padding);
+          aggregatedPacket->AddAtEnd (pad);
+        }
+      currentHdr.SetCrc (1);
+      currentHdr.SetSig ();
+      currentHdr.SetLength (packet->GetSize ());
+      currentPacket = packet->Copy ();
+
+      currentPacket->AddHeader (currentHdr);
+      aggregatedPacket->AddAtEnd (currentPacket);
+      return true;
+    }
+  return false;
+}
+
+void
+MpduStandardAggregator::AddHeaderAndPad (Ptr<Packet> packet, bool last)
+{
+  NS_LOG_FUNCTION (this);
+  AmpduSubframeHeader currentHdr;
+  //This is called to prepare packets from the aggregte queue to be sent so no need to check total size since it has already been
+  //done before when deciding how many packets to add to the queue
+  currentHdr.SetCrc (1);
+  currentHdr.SetSig ();
+  currentHdr.SetLength (packet->GetSize ());
+  packet->AddHeader (currentHdr);
+  uint32_t padding = CalculatePadding (packet);
+
+  if (padding && !last)
+    {
+      Ptr<Packet> pad = Create<Packet> (padding);
+      packet->AddAtEnd (pad);
+    }
+}
+
+bool
+MpduStandardAggregator::CanBeAggregated (uint32_t packetSize, Ptr<Packet> aggregatedPacket, uint8_t blockAckSize)
+{
+  uint32_t padding = CalculatePadding (aggregatedPacket);
+  uint32_t actualSize = aggregatedPacket->GetSize ();
+  if (blockAckSize > 0)
+    {
+      blockAckSize = blockAckSize + 4 + padding;
+    }
+  if ((4 + packetSize + actualSize + padding + blockAckSize) <= m_maxAmpduLength)
+    {
+      return true;
+    }
+  else
+    {
+      return false;
+    }
+}
+
+uint32_t
+MpduStandardAggregator::CalculatePadding (Ptr<const Packet> packet)
+{
+  return (4 - (packet->GetSize () % 4 )) % 4;
+}
+
+}  // namespace ns3
diff -Naur ns-3.21/src/wifi/model/mpdu-standard-aggregator.h ns-3.22/src/wifi/model/mpdu-standard-aggregator.h
--- ns-3.21/src/wifi/model/mpdu-standard-aggregator.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/mpdu-standard-aggregator.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,74 @@
+/* -*- 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 MPDU_STANDARD_AGGREGATOR_H
+#define MPDU_STANDARD_AGGREGATOR_H
+
+#include "mpdu-aggregator.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup wifi
+ * Standard MPDU aggregator
+ *
+ */
+class MpduStandardAggregator : public MpduAggregator
+{
+public:
+  static TypeId GetTypeId (void);
+  MpduStandardAggregator ();
+  ~MpduStandardAggregator ();
+  /**
+   * \param packet packet we have to insert into <i>aggregatedPacket</i>.
+   * \param aggregatedPacket packet that will contain <i>packet</i>, if aggregation is possible.
+   * \return true if <i>packet</i> can be aggregated to <i>aggregatedPacket</i>, false otherwise.
+   *
+   * This method performs an MPDU aggregation.
+   * Returns true if <i>packet</i> can be aggregated to <i>aggregatedPacket</i>, false otherwise.
+   */
+  virtual bool Aggregate (Ptr<const Packet> packet, Ptr<Packet> aggregatedPacket);
+  /**
+   * Adds A-MPDU subframe header and padding to each MPDU that is part of an A-MPDU before it is sent.
+   */
+  virtual void AddHeaderAndPad (Ptr<Packet> packet, bool last);
+  /**
+   * \param packetSize size of the packet we want to insert into <i>aggregatedPacket</i>.
+   * \param aggregatedPacket packet that will contain the packet of size <i>packetSize</i>, if aggregation is possible.
+   * \param blockAckSize size of the piggybacked block ack request
+   * \return true if the packet of size <i>packetSize</i> can be aggregated to <i>aggregatedPacket</i>, false otherwise.
+   *
+   * This method is used to determine if a packet could be aggregated to an A-MPDU without exceeding the maximum packet size.
+   */
+  virtual bool CanBeAggregated (uint32_t packetSize, Ptr<Packet> aggregatedPacket, uint8_t blockAckSize);
+  /**
+   * \return padding that must be added to the end of an aggregated packet
+   *
+   * Calculates how much padding must be added to the end of an aggregated packet, after that a new packet is added.
+   * Each A-MPDU subframe is padded so that its length is multiple of 4 octets.
+   */
+  virtual uint32_t CalculatePadding (Ptr<const Packet> packet);
+
+private:
+  uint32_t m_maxAmpduLength; //!< Maximum length in bytes of A-MPDUs
+};
+
+}  // namespace ns3
+
+#endif /* MPDU_STANDARD_AGGREGATOR_H */
diff -Naur ns-3.21/src/wifi/model/msdu-aggregator.cc ns-3.22/src/wifi/model/msdu-aggregator.cc
--- ns-3.21/src/wifi/model/msdu-aggregator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/msdu-aggregator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,10 +22,10 @@
 #include "msdu-aggregator.h"
 #include "wifi-mac-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("MsduAggregator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MsduAggregator");
+
 NS_OBJECT_ENSURE_REGISTERED (MsduAggregator);
 
 TypeId
diff -Naur ns-3.21/src/wifi/model/msdu-standard-aggregator.cc ns-3.22/src/wifi/model/msdu-standard-aggregator.cc
--- ns-3.21/src/wifi/model/msdu-standard-aggregator.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/msdu-standard-aggregator.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,10 +23,10 @@
 #include "amsdu-subframe-header.h"
 #include "msdu-standard-aggregator.h"
 
-NS_LOG_COMPONENT_DEFINE ("MsduStandardAggregator");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MsduStandardAggregator");
+
 NS_OBJECT_ENSURE_REGISTERED (MsduStandardAggregator);
 
 TypeId
diff -Naur ns-3.21/src/wifi/model/nist-error-rate-model.cc ns-3.22/src/wifi/model/nist-error-rate-model.cc
--- ns-3.21/src/wifi/model/nist-error-rate-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/nist-error-rate-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -15,7 +15,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Author: Gary Pei <guangyu.pei@boeing.com>
+ * Authors: Gary Pei <guangyu.pei@boeing.com>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
 #include <cmath>
@@ -23,10 +24,10 @@
 #include "wifi-phy.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("NistErrorRateModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("NistErrorRateModel");
+
 NS_OBJECT_ENSURE_REGISTERED (NistErrorRateModel);
 
 TypeId
@@ -154,6 +155,23 @@
           + 428005675.0 * std::pow (D, 14)
         );
     }
+  else if (bValue == 5)
+    {
+      // code rate 5/6, use table V from D. Haccoun and G. Begin, "High-Rate Punctured Convolutional Codes 
+      // for Viterbi Sequential Decoding", IEEE Transactions on Communications, Vol. 32, Issue 3, pp.315-319.
+      pe = 1.0 / (2.0 * bValue) *
+        ( 92.0 * std::pow (D, 4.0)
+          + 528.0 * std::pow (D, 5.0)
+          + 8694.0 * std::pow (D, 6.0)
+          + 79453.0 * std::pow (D, 7.0)
+          + 792114.0 * std::pow (D, 8.0)
+          + 7375573.0 * std::pow (D, 9.0)
+          + 67884974.0 * std::pow (D, 10.0)
+          + 610875423.0 * std::pow (D, 11.0)
+          + 5427275376.0 * std::pow (D, 12.0)
+          + 47664215639.0 * std::pow (D, 13.0)
+        );
+    }
   else
     {
       NS_ASSERT (false);
@@ -255,13 +273,20 @@
                                      2 // b value
                                      );
             }
-          else
-            {
-              return GetFec64QamBer (snr,
-                                     nbits,
-                                     3 // b value
-                                     );
-            }
+          else if (mode.GetCodeRate () == WIFI_CODE_RATE_5_6)
+                 {
+                   return GetFec64QamBer (snr,
+                                          nbits,
+                                          5 // b value
+                                          );
+                 }
+               else
+                 {
+                   return GetFec64QamBer (snr,
+                                          nbits,
+                                          3 // b value
+                                          );
+                 }
         }
     }
   else if (mode.GetModulationClass () == WIFI_MOD_CLASS_DSSS)
diff -Naur ns-3.21/src/wifi/model/onoe-wifi-manager.cc ns-3.22/src/wifi/model/onoe-wifi-manager.cc
--- ns-3.21/src/wifi/model/onoe-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/onoe-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -25,10 +25,10 @@
 
 #define Min(a,b) ((a < b) ? a : b)
 
-NS_LOG_COMPONENT_DEFINE ("OnoeWifiRemoteStation");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("OnoeWifiRemoteStation");
+
 /**
  * \brief hold per-remote-station state for ONOE Wifi manager.
  *
@@ -268,7 +268,7 @@
           rateIndex = station->m_txrate;
         }
     }
-  return WifiTxVector (GetSupported (station, rateIndex), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, rateIndex), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 WifiTxVector
 OnoeWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
@@ -276,7 +276,7 @@
   OnoeWifiRemoteStation *station = (OnoeWifiRemoteStation *)st;
   UpdateMode (station);
   /// \todo can we implement something smarter ?
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 
 bool
diff -Naur ns-3.21/src/wifi/model/parf-wifi-manager.cc ns-3.22/src/wifi/model/parf-wifi-manager.cc
--- ns-3.21/src/wifi/model/parf-wifi-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/parf-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,311 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universidad de la República - Uruguay
+ *
+ * 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: Matias Richart <mrichart@fing.edu.uy>
+ */
+
+#include "parf-wifi-manager.h"
+#include "wifi-phy.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include "ns3/uinteger.h"
+#include "ns3/trace-source-accessor.h"
+
+#define Min(a,b) ((a < b) ? a : b)
+
+NS_LOG_COMPONENT_DEFINE ("ns3::ParfWifiManager");
+
+
+namespace ns3 {
+
+/**
+ * Hold per-remote-station state for PARF Wifi manager.
+ *
+ * This struct extends from WifiRemoteStation struct to hold additional
+ * information required by the PARF Wifi manager
+ */
+struct ParfWifiRemoteStation : public WifiRemoteStation
+{
+  uint32_t m_nAttempt; //!< Number of transmission attempts.
+  uint32_t m_nSuccess; //!< Number of successful transmission attempts.
+  uint32_t m_nFail; //!< Number of failed transmission attempts.
+  bool m_usingRecoveryRate; //!< If using recovery rate.
+  bool m_usingRecoveryPower; //!< If using recovery power.
+  uint32_t m_nRetry; //!< Number of transmission retries.
+
+  uint32_t m_currentRate; //!< Current rate used by the remote station.
+
+  uint8_t m_currentPower; //!< Current power used by the remote station.
+
+  uint32_t m_nSupported; //!< Number of supported rates by the remote station.
+  bool m_initialized; //!< For initializing variables.
+};
+
+NS_OBJECT_ENSURE_REGISTERED (ParfWifiManager);
+
+TypeId
+ParfWifiManager::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::ParfWifiManager")
+    .SetParent<WifiRemoteStationManager> ()
+    .AddConstructor<ParfWifiManager> ()
+    .AddAttribute ("AttemptThreshold",
+                   "The minimum number of transmission attempts to try a new power or rate.",
+                   UintegerValue (15),
+                   MakeUintegerAccessor (&ParfWifiManager::m_attemptThreshold),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("SuccessThreshold",
+                   "The minimum number of successful transmissions to try a new power or rate.",
+                   UintegerValue (10),
+                   MakeUintegerAccessor (&ParfWifiManager::m_successThreshold),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddTraceSource ("PowerChange",
+                     "The transmission power has change",
+                     MakeTraceSourceAccessor (&ParfWifiManager::m_powerChange),
+                     "ns3::ParfWifiManager::PowerChangeTracedCallback")
+    .AddTraceSource ("RateChange",
+                     "The transmission rate has change",
+                     MakeTraceSourceAccessor (&ParfWifiManager::m_rateChange),
+                     "ns3::ParfWifiManager::RateChangeTracedCallback")
+  ;
+  return tid;
+}
+
+ParfWifiManager::ParfWifiManager ()
+{
+  NS_LOG_FUNCTION (this);
+}
+ParfWifiManager::~ParfWifiManager ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+ParfWifiManager::SetupPhy (Ptr<WifiPhy> phy)
+{
+  m_nPower = phy->GetNTxPower ();
+  WifiRemoteStationManager::SetupPhy (phy);
+}
+
+WifiRemoteStation *
+ParfWifiManager::DoCreateStation (void) const
+{
+  NS_LOG_FUNCTION (this);
+  ParfWifiRemoteStation *station = new ParfWifiRemoteStation ();
+
+  station->m_nSuccess = 0;
+  station->m_nFail = 0;
+  station->m_usingRecoveryRate = false;
+  station->m_usingRecoveryPower = false;
+  station->m_initialized = false;
+  station->m_nRetry = 0;
+  station->m_nAttempt = 0;
+
+  NS_LOG_DEBUG ("create station=" << station << ", timer=" << station->m_nAttempt
+                                  << ", rate=" << station->m_currentRate << ", power=" << (int)station->m_currentPower);
+
+  return station;
+}
+
+void
+ParfWifiManager::CheckInit (ParfWifiRemoteStation *station)
+{
+  if (!station->m_initialized)
+    {
+      station->m_nSupported = GetNSupported (station);
+      station->m_currentRate = station->m_nSupported - 1;
+      station->m_currentPower = m_nPower - 1;
+      m_powerChange (station->m_currentPower, station->m_state->m_address);
+      m_rateChange (station->m_currentRate, station->m_state->m_address);
+      station->m_initialized = true;
+    }
+}
+
+void
+ParfWifiManager::DoReportRtsFailed (WifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+}
+/**
+ * \internal
+ * It is important to realize that "recovery" mode starts after failure of
+ * the first transmission after a rate increase and ends at the first successful
+ * transmission. Specifically, recovery mode spans retransmissions boundaries.
+ * Fundamentally, ARF handles each data transmission independently, whether it
+ * is the initial transmission of a packet or the retransmission of a packet.
+ * The fundamental reason for this is that there is a backoff between each data
+ * transmission, be it an initial transmission or a retransmission.
+ */
+void
+ParfWifiManager::DoReportDataFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  ParfWifiRemoteStation *station = (ParfWifiRemoteStation *)st;
+  CheckInit (station);
+  station->m_nAttempt++;
+  station->m_nFail++;
+  station->m_nRetry++;
+  station->m_nSuccess = 0;
+
+  NS_LOG_DEBUG ("station=" << station << " data fail retry=" << station->m_nRetry << ", timer=" << station->m_nAttempt
+                           << ", rate=" << station->m_currentRate << ", power=" << (int)station->m_currentPower);
+  if (station->m_usingRecoveryRate)
+    {
+      NS_ASSERT (station->m_nRetry >= 1);
+      if (station->m_nRetry == 1)
+        {
+          // need recovery fallback
+          if (station->m_currentRate != 0)
+            {
+              NS_LOG_DEBUG ("station=" << station << " dec rate");
+              station->m_currentRate--;
+              m_rateChange (station->m_currentRate, station->m_state->m_address);
+              station->m_usingRecoveryRate = false;
+            }
+        }
+      station->m_nAttempt = 0;
+    }
+  else if (station->m_usingRecoveryPower)
+    {
+      NS_ASSERT (station->m_nRetry >= 1);
+      if (station->m_nRetry == 1)
+        {
+          // need recovery fallback
+          if (station->m_currentPower < m_nPower - 1)
+            {
+              NS_LOG_DEBUG ("station=" << station << " inc power");
+              station->m_currentPower++;
+              m_powerChange (station->m_currentPower, station->m_state->m_address);
+              station->m_usingRecoveryPower = false;
+            }
+        }
+      station->m_nAttempt = 0;
+    }
+  else
+    {
+      NS_ASSERT (station->m_nRetry >= 1);
+      if (((station->m_nRetry - 1) % 2) == 1)
+        {
+          // need normal fallback
+          if (station->m_currentPower == m_nPower - 1)
+            {
+              if (station->m_currentRate != 0)
+                {
+                  NS_LOG_DEBUG ("station=" << station << " dec rate");
+                  station->m_currentRate--;
+                  m_rateChange (station->m_currentRate, station->m_state->m_address);
+                }
+            }
+          else
+            {
+              NS_LOG_DEBUG ("station=" << station << " inc power");
+              station->m_currentPower++;
+              m_powerChange (station->m_currentPower, station->m_state->m_address);
+            }
+        }
+      if (station->m_nRetry >= 2)
+        {
+          station->m_nAttempt = 0;
+        }
+    }
+}
+void
+ParfWifiManager::DoReportRxOk (WifiRemoteStation *station,
+                               double rxSnr, WifiMode txMode)
+{
+  NS_LOG_FUNCTION (this << station << rxSnr << txMode);
+}
+void ParfWifiManager::DoReportRtsOk (WifiRemoteStation *station,
+                                     double ctsSnr, WifiMode ctsMode, double rtsSnr)
+{
+  NS_LOG_FUNCTION (this << station << ctsSnr << ctsMode << rtsSnr);
+  NS_LOG_DEBUG ("station=" << station << " rts ok");
+}
+void ParfWifiManager::DoReportDataOk (WifiRemoteStation *st,
+                                      double ackSnr, WifiMode ackMode, double dataSnr)
+{
+  NS_LOG_FUNCTION (this << st << ackSnr << ackMode << dataSnr);
+  ParfWifiRemoteStation *station = (ParfWifiRemoteStation *) st;
+  CheckInit (station);
+  station->m_nAttempt++;
+  station->m_nSuccess++;
+  station->m_nFail = 0;
+  station->m_usingRecoveryRate = false;
+  station->m_usingRecoveryPower = false;
+  station->m_nRetry = 0;
+  NS_LOG_DEBUG ("station=" << station << " data ok success=" << station->m_nSuccess << ", timer=" << station->m_nAttempt << ", rate=" << station->m_currentRate << ", power=" << (int)station->m_currentPower);
+  if ((station->m_nSuccess == m_successThreshold
+       || station->m_nAttempt == m_attemptThreshold)
+      && (station->m_currentRate < (station->m_state->m_operationalRateSet.size () - 1)))
+    {
+      NS_LOG_DEBUG ("station=" << station << " inc rate");
+      station->m_currentRate++;
+      m_rateChange (station->m_currentRate, station->m_state->m_address);
+      station->m_nAttempt = 0;
+      station->m_nSuccess = 0;
+      station->m_usingRecoveryRate = true;
+    }
+  else if (station->m_nSuccess == m_successThreshold || station->m_nAttempt == m_attemptThreshold)
+    {
+      //we are at the maximum rate, we decrease power
+      if (station->m_currentPower != 0)
+        {
+          NS_LOG_DEBUG ("station=" << station << " dec power");
+          station->m_currentPower--;
+          m_powerChange (station->m_currentPower, station->m_state->m_address);
+        }
+      station->m_nAttempt = 0;
+      station->m_nSuccess = 0;
+      station->m_usingRecoveryPower = true;
+    }
+}
+void
+ParfWifiManager::DoReportFinalRtsFailed (WifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+}
+void
+ParfWifiManager::DoReportFinalDataFailed (WifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+}
+
+WifiTxVector
+ParfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+{
+  NS_LOG_FUNCTION (this << st << size);
+  ParfWifiRemoteStation *station = (ParfWifiRemoteStation *) st;
+  CheckInit (station);
+  return WifiTxVector (GetSupported (station, station->m_currentRate), station->m_currentPower, GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas ()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+}
+WifiTxVector
+ParfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  /// \todo we could/should implement the Arf algorithm for
+  /// RTS only by picking a single rate within the BasicRateSet.
+  ParfWifiRemoteStation *station = (ParfWifiRemoteStation *) st;
+  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas ()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+}
+
+bool
+ParfWifiManager::IsLowLatency (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return true;
+}
+} // namespace ns3
diff -Naur ns-3.21/src/wifi/model/parf-wifi-manager.h ns-3.22/src/wifi/model/parf-wifi-manager.h
--- ns-3.21/src/wifi/model/parf-wifi-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/model/parf-wifi-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,115 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universidad de la República - Uruguay
+ *
+ * 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: Matias Richart <mrichart@fing.edu.uy>
+ */
+
+#ifndef PARF_WIFI_MANAGER_H
+#define PARF_WIFI_MANAGER_H
+
+#include "wifi-remote-station-manager.h"
+
+namespace ns3 {
+
+struct ParfWifiRemoteStation;
+/**
+ * \ingroup wifi
+ * PARF Rate control algorithm
+ *
+ * This class implements the PARF algorithm as described in
+ * <i>Self-management in chaotic wireless deployments</i>, by
+ * Akella, A.; Judd, G.; Seshan, S. and Steenkiste, P. in
+ * Wireless Networks, Kluwer Academic Publishers, 2007, 13, 737-755
+ * http://www.cs.odu.edu/~nadeem/classes/cs795-WNS-S13/papers/enter-006.pdf
+ *
+ */
+class ParfWifiManager : public WifiRemoteStationManager
+{
+public:
+  /**
+   * Register this type.
+   * \return The object TypeId.
+   */
+  static TypeId GetTypeId (void);
+  ParfWifiManager ();
+  virtual ~ParfWifiManager ();
+
+  virtual void SetupPhy (Ptr<WifiPhy> phy);
+
+  /**
+   * TracedCallback signature for power change events.
+   *
+   * \param [in] power The new power.
+   * \param [in] address The remote station MAC address.
+   */
+  typedef void (*PowerChangeTracedCallback)(const uint8_t power, const Mac48Address remoteAddress);
+
+  /**
+   * TracedCallback signature for rate change events.
+   *
+   * \param [in] rate The new rate.
+   * \param [in] address The remote station MAC address.
+   */
+  typedef void (*RateChangeTracedCallback)(const uint32_t rate, const Mac48Address remoteAddress);
+
+private:
+  // overriden from base class
+  virtual WifiRemoteStation * DoCreateStation (void) const;
+  virtual void DoReportRxOk (WifiRemoteStation *station,
+                             double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (WifiRemoteStation *station);
+  virtual void DoReportDataFailed (WifiRemoteStation *station);
+  virtual void DoReportRtsOk (WifiRemoteStation *station,
+                              double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (WifiRemoteStation *station,
+                               double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
+  virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
+  virtual bool IsLowLatency (void) const;
+
+  /** Check for initializations.
+   *
+   * \param station The remote station.
+   */
+  void CheckInit (ParfWifiRemoteStation *station);
+
+
+  uint32_t m_attemptThreshold; //!< The minimum number of transmission attempts to try a new power or rate. The 'timer' threshold in the ARF algorithm.
+  uint32_t m_successThreshold; //!< The minimum number of successful transmissions to try a new power or rate.
+  /**
+   * Number of power levels.
+   * In contrast to rate, power levels do not depend on the remote station.
+   * The levels depend only on the physical layer of the device.
+   */
+  uint32_t m_nPower;
+
+  /**
+   * The trace source fired when the transmission power changes....
+   */
+  TracedCallback<uint8_t, Mac48Address> m_powerChange;
+  /**
+   * The trace source fired when the transmission rate changes.
+   */
+  TracedCallback<uint32_t, Mac48Address> m_rateChange;
+
+};
+
+} // namespace ns3
+
+#endif /* PARF_WIFI_MANAGER_H */
diff -Naur ns-3.21/src/wifi/model/qos-utils.h ns-3.22/src/wifi/model/qos-utils.h
--- ns-3.21/src/wifi/model/qos-utils.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/qos-utils.h	2015-02-05 15:46:22.000000000 -0800
@@ -51,7 +51,7 @@
 /**
  * \ingroup wifi
  * Maps TID (Traffic ID) to Access classes.
- * For more details see (Table 9-1 "UP-to-AC mapping"; IEEE802.11-2012).
+ * For more details see (Table 9-1 "UP-to-AC mapping"; IEEE 802.11-2012).
  *
  * \param tid the Traffic ID to be mapped to Access class
  * \return the access class for the given TID
@@ -73,7 +73,7 @@
  * \ingroup wifi
  * Next function is useful to correctly sort buffered packets under block ack.
  * When an BAR is received from originator station, completed "old"
- * (see section 9.10.3 in IEEE802.11e) packets must be forwarded up before "new" packets.
+ * (see section 9.10.3 in IEEE 802.11e) packets must be forwarded up before "new" packets.
  *
  * \param seqControl the sequence control field
  * \param endSequence
diff -Naur ns-3.21/src/wifi/model/regular-wifi-mac.cc ns-3.22/src/wifi/model/regular-wifi-mac.cc
--- ns-3.21/src/wifi/model/regular-wifi-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/regular-wifi-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -34,10 +34,10 @@
 
 #include "msdu-aggregator.h"
 
-NS_LOG_COMPONENT_DEFINE ("RegularWifiMac");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RegularWifiMac");
+
 NS_OBJECT_ENSURE_REGISTERED (RegularWifiMac);
 
 RegularWifiMac::RegularWifiMac ()
@@ -208,12 +208,22 @@
 }
 
 Ptr<WifiPhy>
-RegularWifiMac::GetWifiPhy () const
+RegularWifiMac::GetWifiPhy (void) const
 {
+  NS_LOG_FUNCTION (this);
   return m_phy;
 }
 
 void
+RegularWifiMac::ResetWifiPhy (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_low->ResetPhy ();
+  m_dcfManager->RemovePhyListener (m_phy);
+  m_phy = 0;
+}
+
+void
 RegularWifiMac::SetForwardUpCallback (ForwardUpCallback upCallback)
 {
   NS_LOG_FUNCTION (this);
@@ -685,10 +695,12 @@
                    MakePointerChecker<EdcaTxopN> ())
     .AddTraceSource ( "TxOkHeader",
                       "The header of successfully transmitted packet",
-                      MakeTraceSourceAccessor (&RegularWifiMac::m_txOkCallback))
+                     MakeTraceSourceAccessor (&RegularWifiMac::m_txOkCallback),
+                     "ns3::WifiMacHeader::TracedCallback")
     .AddTraceSource ("TxErrHeader",
                      "The header of unsuccessfully transmitted packet",
-                     MakeTraceSourceAccessor (&RegularWifiMac::m_txErrCallback))
+                     MakeTraceSourceAccessor (&RegularWifiMac::m_txErrCallback),
+                     "ns3::WifiMacHeader::TracedCallback")
   ;
 
   return tid;
diff -Naur ns-3.21/src/wifi/model/regular-wifi-mac.h ns-3.22/src/wifi/model/regular-wifi-mac.h
--- ns-3.21/src/wifi/model/regular-wifi-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/regular-wifi-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -189,7 +189,11 @@
   /**
    * \return the physical layer attached to this MAC.
    */
-  virtual Ptr<WifiPhy> GetWifiPhy () const;
+  virtual Ptr<WifiPhy> GetWifiPhy (void) const;
+  /**
+   * removes attached WifiPhy device from this MAC.
+   */
+  virtual void ResetWifiPhy (void);
   /**
    * \param stationManager the station manager attached to this MAC.
    */
@@ -197,7 +201,7 @@
   /**
    * \return the station manager attached to this MAC.
    */
-  virtual Ptr<WifiRemoteStationManager> GetWifiRemoteStationManager () const;
+  virtual Ptr<WifiRemoteStationManager> GetWifiRemoteStationManager (void) const;
 
   /**
    * This type defines the callback of a higher layer that a
diff -Naur ns-3.21/src/wifi/model/rraa-wifi-manager.cc ns-3.22/src/wifi/model/rraa-wifi-manager.cc
--- ns-3.21/src/wifi/model/rraa-wifi-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/rraa-wifi-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -28,10 +28,10 @@
 
 #define Min(a,b) ((a < b) ? a : b)
 
-NS_LOG_COMPONENT_DEFINE ("RraaWifiManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("RraaWifiManager");
+
 /**
  * \brief hold per-remote-station state for RRAA Wifi manager.
  *
@@ -284,12 +284,12 @@
     {
       ResetCountersBasic (station);
     }
-  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (station), GetStbc (station));
+  return WifiTxVector (GetSupported (station, station->m_rate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas()), GetNess (station), GetStbc (station));
 }
 WifiTxVector
 RraaWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
-  return WifiTxVector (GetSupported (st, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNumberOfTransmitAntennas (st), GetStbc (st));
+  return WifiTxVector (GetSupported (st, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (st), GetShortGuardInterval (st), Min (GetNumberOfReceiveAntennas (st),GetNumberOfTransmitAntennas()), GetNess (st), GetStbc (st));
 }
 
 bool
diff -Naur ns-3.21/src/wifi/model/ssid.h ns-3.22/src/wifi/model/ssid.h
--- ns-3.21/src/wifi/model/ssid.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/ssid.h	2015-02-05 15:46:22.000000000 -0800
@@ -31,6 +31,8 @@
  * \ingroup wifi
  *
  * The IEEE 802.11 SSID Information Element
+ *
+ * \see attribute_Ssid
  */
 class Ssid : public WifiInformationElement
 {
@@ -88,11 +90,6 @@
 std::ostream &operator << (std::ostream &os, const Ssid &ssid);
 std::istream &operator >> (std::istream &is, Ssid &ssid);
 
-/**
- * \class ns3::SsidValue
- * \brief hold objects of type ns3::Ssid
- */
-
 ATTRIBUTE_HELPER_HEADER (Ssid);
 
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/sta-wifi-mac.cc ns-3.22/src/wifi/model/sta-wifi-mac.cc
--- ns-3.21/src/wifi/model/sta-wifi-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/sta-wifi-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,9 +39,6 @@
 #include "mgt-headers.h"
 #include "ht-capabilities.h"
 
-NS_LOG_COMPONENT_DEFINE ("StaWifiMac");
-
-
 /*
  * The state machine for this STA is:
  --------------                                          -----------
@@ -60,6 +57,8 @@
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("StaWifiMac");
+
 NS_OBJECT_ENSURE_REGISTERED (StaWifiMac);
 
 TypeId
@@ -87,9 +86,11 @@
                    MakeBooleanAccessor (&StaWifiMac::SetActiveProbing, &StaWifiMac::GetActiveProbing),
                    MakeBooleanChecker ())
     .AddTraceSource ("Assoc", "Associated with an access point.",
-                     MakeTraceSourceAccessor (&StaWifiMac::m_assocLogger))
+                     MakeTraceSourceAccessor (&StaWifiMac::m_assocLogger),
+                     "ns3::Mac48Address::TracedCallback")
     .AddTraceSource ("DeAssoc", "Association with an access point lost.",
-                     MakeTraceSourceAccessor (&StaWifiMac::m_deAssocLogger))
+                     MakeTraceSourceAccessor (&StaWifiMac::m_deAssocLogger),
+                     "ns3::Mac48Address::TracedCallback")
   ;
   return tid;
 }
@@ -258,8 +259,8 @@
       m_linkDown ();
       if (m_activeProbing) 
         {
-          SetState (WAIT_PROBE_RESP);
-          SendProbeRequest ();
+      SetState (WAIT_PROBE_RESP);
+      SendProbeRequest ();
         }
       break;
     case WAIT_ASSOC_RESP:
diff -Naur ns-3.21/src/wifi/model/supported-rates.cc ns-3.22/src/wifi/model/supported-rates.cc
--- ns-3.21/src/wifi/model/supported-rates.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/supported-rates.cc	2015-02-05 15:46:22.000000000 -0800
@@ -22,16 +22,35 @@
 #include "ns3/assert.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("SupportedRates");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SupportedRates");
+
 SupportedRates::SupportedRates ()
   : extended (this),
     m_nRates (0)
 {
 }
 
+SupportedRates::SupportedRates (const SupportedRates &rates)
+{
+  m_nRates = rates.m_nRates;
+  memcpy (m_rates, rates.m_rates, MAX_SUPPORTED_RATES);
+  // reset the back pointer to this object
+  extended.SetSupportedRates (this);
+
+}
+
+SupportedRates&
+SupportedRates::operator= (const SupportedRates& rates)
+{
+  this->m_nRates = rates.m_nRates;
+  memcpy (this->m_rates, rates.m_rates, MAX_SUPPORTED_RATES);
+  // reset the back pointer to this object
+  this->extended.SetSupportedRates (this);
+  return (*this);
+}
+
 void
 SupportedRates::AddSupportedRate (uint32_t bs)
 {
@@ -148,6 +167,12 @@
   return IE_EXTENDED_SUPPORTED_RATES;
 }
 
+void
+ExtendedSupportedRatesIE::SetSupportedRates (SupportedRates *sr)
+{
+  m_supportedRates = sr;
+}
+
 uint8_t
 ExtendedSupportedRatesIE::GetInformationFieldSize () const
 {
@@ -211,7 +236,7 @@
                                                        uint8_t length)
 {
   NS_ASSERT (length > 0);
-  NS_ASSERT (m_supportedRates->m_nRates + length <= MAX_SUPPORTED_RATES);
+  NS_ASSERT (m_supportedRates->m_nRates + length <= SupportedRates::MAX_SUPPORTED_RATES);
   start.Read (m_supportedRates->m_rates + m_supportedRates->m_nRates, length);
   m_supportedRates->m_nRates += length;
   return length;
diff -Naur ns-3.21/src/wifi/model/supported-rates.h ns-3.22/src/wifi/model/supported-rates.h
--- ns-3.21/src/wifi/model/supported-rates.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/supported-rates.h	2015-02-05 15:46:22.000000000 -0800
@@ -27,14 +27,6 @@
 
 namespace ns3 {
 
-/**
- * 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 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 (32)
-
 class SupportedRates;
 
 /**
@@ -61,6 +53,8 @@
    */
   ExtendedSupportedRatesIE (SupportedRates *rates);
 
+  void SetSupportedRates (SupportedRates *rates);
+
   WifiInformationElementId ElementId () const;
   uint8_t GetInformationFieldSize () const;
   void SerializeInformationField (Buffer::Iterator start) const;
@@ -110,6 +104,17 @@
 public:
   SupportedRates ();
 
+  SupportedRates (const SupportedRates &);
+  SupportedRates& operator= (const SupportedRates&);
+
+/**
+ * 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 and SISO IEE 802.11n
+ * stations which need 2 rates each from Clauses 15 and 18, and then 8
+ * from Clause 19.
+ */
+  static const uint8_t MAX_SUPPORTED_RATES = 32;
+
   /**
    * Add the given rate to the supported rates.
    *
diff -Naur ns-3.21/src/wifi/model/wifi-channel.cc ns-3.22/src/wifi/model/wifi-channel.cc
--- ns-3.21/src/wifi/model/wifi-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include "ns3/propagation-loss-model.h"
 #include "ns3/propagation-delay-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("WifiChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WifiChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (WifiChannel);
 
 TypeId
diff -Naur ns-3.21/src/wifi/model/wifi-information-element.h ns-3.22/src/wifi/model/wifi-information-element.h
--- ns-3.21/src/wifi/model/wifi-information-element.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-information-element.h	2015-02-05 15:46:22.000000000 -0800
@@ -167,8 +167,7 @@
    */
   uint16_t GetSerializedSize () const;
 
-  ///\name Each subclass must implement
-  //\{
+  // Each subclass must implement these pure virtual functions:
   /// Own unique Element ID
   virtual WifiInformationElementId ElementId () const = 0;
   /**
@@ -199,10 +198,8 @@
    */
   virtual uint8_t DeserializeInformationField (Buffer::Iterator start,
                                                uint8_t length) = 0;
-  //\}
 
-  /// In addition, a subclass may optionally override the following...
-  //\{
+  // In addition, a subclass my optionally override the following...
   /**
    * Generate human-readable form of IE
    *
@@ -225,7 +222,7 @@
    * \return true if the two IEs are equal, false otherwise
    */
   virtual bool operator== (WifiInformationElement const & a) const;
-  //\}
+
 };
 
 }
diff -Naur ns-3.21/src/wifi/model/wifi-mac.cc ns-3.22/src/wifi/model/wifi-mac.cc
--- ns-3.21/src/wifi/model/wifi-mac.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-mac.cc	2015-02-05 15:46:22.000000000 -0800
@@ -197,22 +197,27 @@
     .AddTraceSource ("MacTx",
                      "A packet has been received from higher layers and is being processed in preparation for "
                      "queueing for transmission.",
-                     MakeTraceSourceAccessor (&WifiMac::m_macTxTrace))
+                     MakeTraceSourceAccessor (&WifiMac::m_macTxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacTxDrop",
                      "A packet has been dropped in the MAC layer before being queued for transmission.",
-                     MakeTraceSourceAccessor (&WifiMac::m_macTxDropTrace))
+                     MakeTraceSourceAccessor (&WifiMac::m_macTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacPromiscRx",
                      "A packet has been received by this device, has been passed up from the physical layer "
                      "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&WifiMac::m_macPromiscRxTrace))
+                     MakeTraceSourceAccessor (&WifiMac::m_macPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRx",
                      "A packet has been received by this device, has been passed up from the physical layer "
                      "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&WifiMac::m_macRxTrace))
+                     MakeTraceSourceAccessor (&WifiMac::m_macRxTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MacRxDrop",
                      "A packet has been dropped in the MAC layer after it has been passed up from the physical "
                      "layer.",
-                     MakeTraceSourceAccessor (&WifiMac::m_macRxDropTrace))
+                     MakeTraceSourceAccessor (&WifiMac::m_macRxDropTrace),
+                     "ns3::Packet::TracedCallback")
 #if 0
     // Not currently implemented in this device
     .AddTraceSource ("Sniffer",
@@ -370,6 +375,8 @@
   SetRifs(MicroSeconds (2));
   SetCtsTimeout (MicroSeconds (10 + 52 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
   SetAckTimeout (MicroSeconds (10 + 52 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetBasicBlockAckTimeout (GetSifs () + GetSlot () + GetDefaultBasicBlockAckDelay () + GetDefaultMaxPropagationDelay () * 2);
+  SetCompressedBlockAckTimeout (GetSifs () + GetSlot () + GetDefaultCompressedBlockAckDelay () + GetDefaultMaxPropagationDelay () * 2);
 }
 void
 WifiMac::Configure80211n_5Ghz (void)
@@ -378,6 +385,8 @@
   SetRifs(MicroSeconds (2));
   SetCtsTimeout (MicroSeconds (10 + 52 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
   SetAckTimeout (MicroSeconds (10 + 52 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetBasicBlockAckTimeout (GetSifs () + GetSlot () + GetDefaultBasicBlockAckDelay () + GetDefaultMaxPropagationDelay () * 2);
+  SetCompressedBlockAckTimeout (GetSifs () + GetSlot () + GetDefaultCompressedBlockAckDelay () + GetDefaultMaxPropagationDelay () * 2);
 }
 
 void
diff -Naur ns-3.21/src/wifi/model/wifi-mac.h ns-3.22/src/wifi/model/wifi-mac.h
--- ns-3.21/src/wifi/model/wifi-mac.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-mac.h	2015-02-05 15:46:22.000000000 -0800
@@ -190,10 +190,23 @@
    */
   virtual void SetWifiPhy (Ptr<WifiPhy> phy) = 0;
   /**
+   * return current attached WifiPhy device
+   */
+  virtual Ptr<WifiPhy> GetWifiPhy (void) const = 0;
+  /**
+   * remove current attached WifiPhy device from this MAC.
+   */
+  virtual void ResetWifiPhy (void) = 0;
+  /**
    * \param stationManager the station manager attached to this MAC.
    */
   virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager) = 0;
   /**
+   * \return the station manager attached to this MAC.
+   */
+  virtual Ptr<WifiRemoteStationManager> GetWifiRemoteStationManager (void) const = 0;
+
+  /**
    * \param upCallback the callback to invoke when a packet must be forwarded up the stack.
    */
   virtual void SetForwardUpCallback (Callback<void,Ptr<Packet>, Mac48Address, Mac48Address> upCallback) = 0;
@@ -273,6 +286,17 @@
   void NotifyRxDrop (Ptr<const Packet> packet);
   /**
    * \param standard the wifi standard to be configured
+   *
+   * This method sets standards-compliant defaults for WifiMac
+   * parameters such as sifs time, slot time, timeout values, etc.,
+   * based on the standard selected.
+   * \sa WifiMac::Configure80211a
+   * \sa WifiMac::Configure80211b
+   * \sa WifiMac::Configure80211g
+   * \sa WifiMac::Configure80211_10Mhz
+   * \sa WifiMac::Configure80211_5Mhz
+   * \sa WifiMac::Configure80211n_2_4Ghz
+   * \sa WifiMac::Configure80211n_5Ghz
    */
   void ConfigureStandard (enum WifiPhyStandard standard);
 
@@ -373,31 +397,40 @@
   Time m_maxPropagationDelay;
 
   /**
-   * Configure appropriate timing parameters for 802.11a.
+   * This method sets 802.11a standards-compliant defaults for following attributes:
+   * Sifs, Slot, EifsNoDifs, Pifs, CtsTimeout, and AckTimeout.
    */
   void Configure80211a (void);
   /**
-   * Configure appropriate timing parameters for 802.11b.
+   * This method sets 802.11b standards-compliant defaults for following attributes:
+   * Sifs, Slot, EifsNoDifs, Pifs, CtsTimeout, and AckTimeout.
    */
   void Configure80211b (void);
   /**
-   * Configure appropriate timing parameters for 802.11g.
+   * This method sets 802.11g standards-compliant defaults for following attributes:  
+   * Sifs, Slot, EifsNoDifs, Pifs, CtsTimeout, and AckTimeout.
+   * There is no support for short slot time.
    */
   void Configure80211g (void);
   /**
-   * Configure appropriate timing parameters for 802.11 with 10Mhz channel spacing.
+   * This method sets 802.11 with 10Mhz channel spacing standards-compliant defaults
+   * for following attributes: Sifs, Slot, EifsNoDifs, Pifs, CtsTimeout, and AckTimeout.
    */
   void Configure80211_10Mhz (void);
   /**
-   * Configure appropriate timing parameters for 802.11 with 5Mhz channel spacing.
+   * This method sets 802.11 with 5Mhz channel spacing standards-compliant defaults
+   * for following attributes: Sifs, Slot, EifsNoDifs, Pifs, CtsTimeout, and AckTimeout.
    */
   void Configure80211_5Mhz ();
   /**
-   * Configure appropriate timing parameters for 802.11n operating at 2.4Ghz.
+   * This method sets 802.11n 2.4 GHz standards-compliant defaults for following attributes:
+   * Sifs, Slot, EifsNoDifs, Pifs, CtsTimeout, and AckTimeout.
+   * There is no support for short slot time.
    */
   void Configure80211n_2_4Ghz (void);
   /**
-   * Configure appropriate timing parameters for 802.11n operating at 5Ghz.
+   * This method sets 802.11n 5 GHz standards-compliant defaults for following attributes:
+   * Sifs, Slot, EifsNoDifs, Pifs, CtsTimeout, and AckTimeout.
    */
   void Configure80211n_5Ghz (void);
 
diff -Naur ns-3.21/src/wifi/model/wifi-mac-header.cc ns-3.22/src/wifi/model/wifi-mac-header.cc
--- ns-3.21/src/wifi/model/wifi-mac-header.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-mac-header.cc	2015-02-05 15:46:22.000000000 -0800
@@ -313,7 +313,7 @@
 void
 WifiMacHeader::SetDuration (Time duration)
 {
-  int64_t duration_us = duration.GetMicroSeconds ();
+  int64_t duration_us = ceil((double)duration.GetNanoSeconds ()/1000);
   NS_ASSERT (duration_us >= 0 && duration_us <= 0x7fff);
   m_duration = static_cast<uint16_t> (duration_us);
 }
diff -Naur ns-3.21/src/wifi/model/wifi-mac-header.h ns-3.22/src/wifi/model/wifi-mac-header.h
--- ns-3.21/src/wifi/model/wifi-mac-header.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-mac-header.h	2015-02-05 15:46:22.000000000 -0800
@@ -582,6 +582,13 @@
    */
   const char * GetTypeString (void) const;
 
+  /**
+   * TracedCallback signature for WifiMacHeader
+   *
+   * \param [in] header The header 
+   */
+  typedef void (* TracedCallback)(const WifiMacHeader &header);
+  
 
 private:
   /**
diff -Naur ns-3.21/src/wifi/model/wifi-mac-queue.cc ns-3.22/src/wifi/model/wifi-mac-queue.cc
--- ns-3.21/src/wifi/model/wifi-mac-queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-mac-queue.cc	2015-02-05 15:46:22.000000000 -0800
@@ -188,7 +188,7 @@
 
 Ptr<const Packet>
 WifiMacQueue::PeekByTidAndAddress (WifiMacHeader *hdr, uint8_t tid,
-                                   WifiMacHeader::AddressType type, Mac48Address dest)
+                                   WifiMacHeader::AddressType type, Mac48Address dest, Time *timestamp)
 {
   Cleanup ();
   if (!m_queue.empty ())
@@ -202,6 +202,7 @@
                   && it->hdr.GetQosTid () == tid)
                 {
                   *hdr = it->hdr;
+                  *timestamp=it->tstamp;
                   return it->packet;
                 }
             }
diff -Naur ns-3.21/src/wifi/model/wifi-mac-queue.h ns-3.22/src/wifi/model/wifi-mac-queue.h
--- ns-3.21/src/wifi/model/wifi-mac-queue.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-mac-queue.h	2015-02-05 15:46:22.000000000 -0800
@@ -135,12 +135,14 @@
    * \param tid the given TID
    * \param type the given address type
    * \param addr the given destination
+   * \param timestamp
    * \return packet
    */
   Ptr<const Packet> PeekByTidAndAddress (WifiMacHeader *hdr,
                                          uint8_t tid,
                                          WifiMacHeader::AddressType type,
-                                         Mac48Address addr);
+                                         Mac48Address addr,
+                                         Time *timestamp);
   /**
    * If exists, removes <i>packet</i> from queue and returns true. Otherwise it
    * takes no effects and return false. Deletion of the packet is
@@ -205,13 +207,33 @@
    * \return the current queue size
    */
   uint32_t GetSize (void);
+
 protected:
   /**
    * Clean up the queue by removing packets that exceeded the maximum delay.
    */
   virtual void Cleanup (void);
 
-  struct Item;
+  /**
+   * A struct that holds information about a packet for putting
+   * in a packet queue.
+   */
+  struct Item
+  {
+    /**
+     * Create a struct with the given parameters.
+     *
+     * \param packet
+     * \param hdr
+     * \param tstamp
+     */
+    Item (Ptr<const Packet> packet,
+          const WifiMacHeader &hdr,
+          Time tstamp);
+    Ptr<const Packet> packet; //!< Actual packet
+    WifiMacHeader hdr; //!< Wifi MAC header associated with the packet
+    Time tstamp; //!< timestamp when the packet arrived at the queue
+  };
 
   /**
    * typedef for packet (struct Item) queue.
@@ -234,27 +256,6 @@
    */
   Mac48Address GetAddressForPacket (enum WifiMacHeader::AddressType type, PacketQueueI it);
 
-  /**
-   * A struct that holds information about a packet for putting
-   * in a packet queue.
-   */
-  struct Item
-  {
-    /**
-     * Create a struct with the given parameters.
-     *
-     * \param packet
-     * \param hdr
-     * \param tstamp
-     */
-    Item (Ptr<const Packet> packet,
-          const WifiMacHeader &hdr,
-          Time tstamp);
-    Ptr<const Packet> packet; //!< Actual packet
-    WifiMacHeader hdr; //!< Wifi MAC header associated with the packet
-    Time tstamp; //!< timestamp when the packet arrived at the queue
-  };
-
   PacketQueue m_queue; //!< Packet (struct Item) queue
   uint32_t m_size; //!< Current queue size
   uint32_t m_maxSize; //!< Queue capacity
diff -Naur ns-3.21/src/wifi/model/wifi-mode.h ns-3.22/src/wifi/model/wifi-mode.h
--- ns-3.21/src/wifi/model/wifi-mode.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-mode.h	2015-02-05 15:46:22.000000000 -0800
@@ -87,6 +87,8 @@
  * to lookup in a global array the characteristics of the
  * associated transmission mode. It is thus extremely cheap to
  * keep a WifiMode variable around.
+ *
+ * \see attribute_WifiMode
  */
 class WifiMode
 {
@@ -99,7 +101,7 @@
    * \returns the physical bit rate of this signal.
    *
    * If a transmission mode uses 1/2 FEC, and if its
-   * data rate is 3Mbs, the phy rate is 6Mbs
+   * data rate is 3Mbps, the phy rate is 6Mbps
    */
   uint64_t GetPhyRate (void) const;
   /**
@@ -131,7 +133,7 @@
    * \returns the uid associated to this wireless mode.
    *
    * Each specific wireless mode should have a different uid.
-   * For example, the 802.11b 1Mbs and the 802.11b 2Mbs modes
+   * For example, the 802.11b 1Mbps and the 802.11b 2Mbps modes
    * should have different uids.
    */
   uint32_t GetUid (void) const;
@@ -172,11 +174,6 @@
 std::ostream & operator << (std::ostream & os, const WifiMode &mode);
 std::istream & operator >> (std::istream &is, WifiMode &mode);
 
-/**
- * \class ns3::WifiModeValue
- * \brief hold objects of type ns3::WifiMode
- */
-
 ATTRIBUTE_HELPER_HEADER (WifiMode);
 
 /**
diff -Naur ns-3.21/src/wifi/model/wifi-net-device.cc ns-3.22/src/wifi/model/wifi-net-device.cc
--- ns-3.21/src/wifi/model/wifi-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ns3/trace-source-accessor.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("WifiNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WifiNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (WifiNetDevice);
 
 TypeId
@@ -121,6 +121,7 @@
   m_mac->SetLinkUpCallback (MakeCallback (&WifiNetDevice::LinkUp, this));
   m_mac->SetLinkDownCallback (MakeCallback (&WifiNetDevice::LinkDown, this));
   m_stationManager->SetupPhy (m_phy);
+  m_stationManager->SetupMac (m_mac);
   m_configComplete = true;
 }
 
diff -Naur ns-3.21/src/wifi/model/wifi-phy.cc ns-3.22/src/wifi/model/wifi-phy.cc
--- ns-3.21/src/wifi/model/wifi-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include "ns3/trace-source-accessor.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("WifiPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WifiPhy");
+
 /****************************************************************
  *       This destructor is needed.
  ****************************************************************/
@@ -56,29 +56,50 @@
   static TypeId tid = TypeId ("ns3::WifiPhy")
     .SetParent<Object> ()
     .AddTraceSource ("PhyTxBegin",
-                     "Trace source indicating a packet has begun transmitting over the channel medium",
-                     MakeTraceSourceAccessor (&WifiPhy::m_phyTxBeginTrace))
+                     "Trace source indicating a packet "
+                     "has begun transmitting over the channel medium",
+                     MakeTraceSourceAccessor (&WifiPhy::m_phyTxBeginTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxEnd",
-                     "Trace source indicating a packet has been completely transmitted over the channel. NOTE: the only official WifiPhy implementation available to this date (YansWifiPhy) never fires this trace source.",
-                     MakeTraceSourceAccessor (&WifiPhy::m_phyTxEndTrace))
+                     "Trace source indicating a packet "
+                     "has been completely transmitted over the channel. "
+                     "NOTE: the only official WifiPhy implementation "
+                     "available to this date (YansWifiPhy) never fires "
+                     "this trace source.",
+                     MakeTraceSourceAccessor (&WifiPhy::m_phyTxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyTxDrop",
-                     "Trace source indicating a packet has been dropped by the device during transmission",
-                     MakeTraceSourceAccessor (&WifiPhy::m_phyTxDropTrace))
+                     "Trace source indicating a packet "
+                     "has been dropped by the device during transmission",
+                     MakeTraceSourceAccessor (&WifiPhy::m_phyTxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxBegin",
-                     "Trace source indicating a packet has begun being received from the channel medium by the device",
-                     MakeTraceSourceAccessor (&WifiPhy::m_phyRxBeginTrace))
+                     "Trace source indicating a packet "
+                     "has begun being received from the channel medium "
+                     "by the device",
+                     MakeTraceSourceAccessor (&WifiPhy::m_phyRxBeginTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxEnd",
-                     "Trace source indicating a packet has been completely received from the channel medium by the device",
-                     MakeTraceSourceAccessor (&WifiPhy::m_phyRxEndTrace))
+                     "Trace source indicating a packet "
+                     "has been completely received from the channel medium "
+                     "by the device",
+                     MakeTraceSourceAccessor (&WifiPhy::m_phyRxEndTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("PhyRxDrop",
-                     "Trace source indicating a packet has been dropped by the device during reception",
-                     MakeTraceSourceAccessor (&WifiPhy::m_phyRxDropTrace))
+                     "Trace source indicating a packet "
+                     "has been dropped by the device during reception",
+                     MakeTraceSourceAccessor (&WifiPhy::m_phyRxDropTrace),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("MonitorSnifferRx",
-                     "Trace source simulating a wifi device in monitor mode sniffing all received frames",
-                     MakeTraceSourceAccessor (&WifiPhy::m_phyMonitorSniffRxTrace))
+                     "Trace source simulating a wifi device in monitor mode "
+                     "sniffing all received frames",
+                     MakeTraceSourceAccessor (&WifiPhy::m_phyMonitorSniffRxTrace),
+                     "ns3::WifiPhy::MonitorSnifferRxCallback")
     .AddTraceSource ("MonitorSnifferTx",
-                     "Trace source simulating the capability of a wifi device in monitor mode to sniff all frames being transmitted",
-                     MakeTraceSourceAccessor (&WifiPhy::m_phyMonitorSniffTxTrace))
+                     "Trace source simulating the capability of a wifi device "
+                     "in monitor mode to sniff all frames being transmitted",
+                     MakeTraceSourceAccessor (&WifiPhy::m_phyMonitorSniffTxTrace),
+                     "ns3::WifiPhy::MonitorSnifferTxCallback")
   ;
   return tid;
 }
@@ -86,6 +107,8 @@
 WifiPhy::WifiPhy ()
 {
   NS_LOG_FUNCTION (this);
+  m_totalAmpduSize = 0;
+  m_totalAmpduNumSymbols = 0;
 }
 
 WifiPhy::~WifiPhy ()
@@ -93,8 +116,6 @@
   NS_LOG_FUNCTION (this);
 }
 
-//Added by Ghada to support 11n
-
 //return the L-SIG
 WifiMode
 WifiPhy::GetMFPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble)
@@ -109,40 +130,60 @@
             return WifiPhy::GetOfdmRate6_5MbpsBW20MHz ();
       }
 }
-uint32_t
-WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble, WifiTxVector txvector)
+
+Time
+WifiPhy::GetPlcpHtTrainingSymbolDuration (WifiPreamble preamble, WifiTxVector txvector)
 {
-   switch (preamble)
-     {
+  uint8_t Ndltf, Neltf;
+
+  //We suppose here that STBC = 0. 
+  //If STBC > 0, we need a different mapping between Nss and Nltf (IEEE 802.11n-2012 standard, page 1682).
+  if (txvector.GetNss () < 3)
+    {
+      Ndltf = txvector.GetNss();
+    }
+  else 
+    {
+      Ndltf = 4;
+    }
+  if (txvector.GetNess () < 3)
+    {
+      Neltf = txvector.GetNess();
+    }
+  else 
+    {
+      Neltf = 4;
+    }
+
+  switch (preamble)
+    {
      case WIFI_PREAMBLE_HT_MF:
-        return 4+ (4* txvector.GetNss());
+         return MicroSeconds(4 + (4 * Ndltf) + (4 * Neltf));
      case WIFI_PREAMBLE_HT_GF:
-         return (4*txvector.GetNss())+(4*txvector.GetNess());
-      default:
-         // no training for non HT
-          return 0;
-      }
+	     return MicroSeconds((4 * Ndltf) + (4 * Neltf));
+     default:
+       // no training for non HT
+         return MicroSeconds(0);
+    }
 }
 
 //return L-SIG
-uint32_t
-WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
+Time
+WifiPhy::GetPlcpHtSigHeaderDuration (WifiMode payloadMode, WifiPreamble preamble)
 {
          switch (preamble)
             {
              case WIFI_PREAMBLE_HT_MF:
                // HT-SIG
-               return 8;
+               return MicroSeconds(8);
              case WIFI_PREAMBLE_HT_GF:
                //HT-SIG
-               return 8;
+               return MicroSeconds(8);
              default:
                // no HT-SIG for non HT
-               return 0;
+               return MicroSeconds(0);
             }
-
 }
-//end added by Ghada
 
 WifiMode
 WifiPhy::GetPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble)
@@ -217,9 +258,13 @@
 }
 
 
-uint32_t
-WifiPhy::GetPlcpHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
+Time
+WifiPhy::GetPlcpHeaderDuration (WifiMode payloadMode, WifiPreamble preamble)
 {
+  if (preamble == WIFI_PREAMBLE_NONE)
+  {
+      return MicroSeconds(0);
+  }
   switch (payloadMode.GetModulationClass ())
     {
     case WIFI_MOD_CLASS_OFDM:
@@ -234,13 +279,13 @@
             // SERVICE field (which strictly speaking belongs to the PLCP
             // header, see Section 18.3.2 and Figure 18-1) is sent using the
             // payload mode.
-            return 4;
+            return MicroSeconds(4);
           case 10000000:
             // (Section 18.3.2.4 "Timing related parameters" Table 18-5 "Timing-related parameters"; IEEE Std 802.11-2012)
-            return 8;
+            return MicroSeconds(8);
           case 5000000:
             // (Section 18.3.2.4 "Timing related parameters" Table 18-5 "Timing-related parameters"; IEEE Std 802.11-2012)
-            return 16;
+            return MicroSeconds(16);
           }
       }
      //Added by Ghada to support 11n
@@ -250,39 +295,43 @@
             {
              case WIFI_PREAMBLE_HT_MF:
                // L-SIG
-               return 4;
+               return MicroSeconds(4);
              case WIFI_PREAMBLE_HT_GF:
                //L-SIG
-               return 0;
+               return MicroSeconds(0);
              default:
                // L-SIG
-               return 4;
+               return MicroSeconds(4);
             }
       }
     case WIFI_MOD_CLASS_ERP_OFDM:
-      return 4;
+      return MicroSeconds(4);
 
     case WIFI_MOD_CLASS_DSSS:
       if (preamble == WIFI_PREAMBLE_SHORT)
         {
           // (Section 17.2.2.3 "Short PPDU format" and Figure 17-2 "Short PPDU format"; IEEE Std 802.11-2012)
-          return 24;
+          return MicroSeconds(24);
         }
       else // WIFI_PREAMBLE_LONG
         {
           // (Section 17.2.2.2 "Long PPDU format" and Figure 17-1 "Short PPDU format"; IEEE Std 802.11-2012)
-          return 48;
+          return MicroSeconds(48);
         }
 
     default:
       NS_FATAL_ERROR ("unsupported modulation class");
-      return 0;
+      return MicroSeconds(0);
     }
 }
 
-uint32_t
-WifiPhy::GetPlcpPreambleDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
+Time
+WifiPhy::GetPlcpPreambleDuration (WifiMode payloadMode, WifiPreamble preamble)
 {
+  if (preamble == WIFI_PREAMBLE_NONE)
+  {
+      return MicroSeconds(0);
+  }
   switch (payloadMode.GetModulationClass ())
     {
     case WIFI_MOD_CLASS_OFDM:
@@ -293,43 +342,44 @@
           default:
             // (Section 18.3.3 "PLCP preamble (SYNC))" Figure 18-4 "OFDM training structure"
             // also Section 18.3.2.3 "Modulation-dependent parameters" Table 18-4 "Modulation-dependent parameters"; IEEE Std 802.11-2012)
-            return 16;
+            return MicroSeconds(16);
           case 10000000:
             // (Section 18.3.3 "PLCP preamble (SYNC))" Figure 18-4 "OFDM training structure"
             // also Section 18.3.2.3 "Modulation-dependent parameters" Table 18-4 "Modulation-dependent parameters"; IEEE Std 802.11-2012)
-            return 32;
+            return MicroSeconds(32);
           case 5000000:
             // (Section 18.3.3 "PLCP preamble (SYNC))" Figure 18-4 "OFDM training structure"
             // also Section 18.3.2.3 "Modulation-dependent parameters" Table 18-4 "Modulation-dependent parameters"; IEEE Std 802.11-2012)
-            return 64;
+            return MicroSeconds(64);
           }
       }
     case WIFI_MOD_CLASS_HT:
-      { //IEEE 802.11n Figure 20.1 the training symbols before L_SIG or HT_SIG
-           return 16;
+      {
+        //IEEE 802.11n Figure 20.1 the training symbols before L_SIG or HT_SIG
+        return MicroSeconds(16);
       }
     case WIFI_MOD_CLASS_ERP_OFDM:
-      return 16;
+      return MicroSeconds(16);
 
     case WIFI_MOD_CLASS_DSSS:
       if (preamble == WIFI_PREAMBLE_SHORT)
         {
           // (Section 17.2.2.3 "Short PPDU format)" Figure 17-2 "Short PPDU format"; IEEE Std 802.11-2012)
-          return 72;
+          return MicroSeconds(72);
         }
       else // WIFI_PREAMBLE_LONG
         {
           // (Section 17.2.2.2 "Long PPDU format)" Figure 17-1 "Long PPDU format"; IEEE Std 802.11-2012)
-          return 144;
+          return MicroSeconds(144);
         }
     default:
       NS_FATAL_ERROR ("unsupported modulation class");
-      return 0;
+      return MicroSeconds(0);
     }
 }
 
-double
-WifiPhy::GetPayloadDurationMicroSeconds (uint32_t size, WifiTxVector txvector)
+Time
+WifiPhy::GetPayloadDuration (uint32_t size, WifiTxVector txvector, WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag)
 {
   WifiMode payloadMode=txvector.GetMode();
 
@@ -342,48 +392,88 @@
       {
         // (Section 18.3.2.4 "Timing related parameters" Table 18-5 "Timing-related parameters"; IEEE Std 802.11-2012
         // corresponds to T_{SYM} in the table)
-        uint32_t symbolDurationUs;
+        Time symbolDuration;
 
         switch (payloadMode.GetBandwidth ())
           {
           case 20000000:
           default:
-            symbolDurationUs = 4;
+            symbolDuration = MicroSeconds(4);
             break;
           case 10000000:
-            symbolDurationUs = 8;
+            symbolDuration = MicroSeconds(8);
             break;
           case 5000000:
-            symbolDurationUs = 16;
+            symbolDuration = MicroSeconds(16);
             break;
           }
 
         // (Section 18.3.2.3 "Modulation-dependent parameters" Table 18-4 "Modulation-dependent parameters"; IEEE Std 802.11-2012)
         // corresponds to N_{DBPS} in the table
-        double numDataBitsPerSymbol = payloadMode.GetDataRate () * symbolDurationUs / 1e6;
+        double numDataBitsPerSymbol = payloadMode.GetDataRate () * symbolDuration.GetNanoSeconds() / 1e9;
 
         // (Section 18.3.5.4 "Pad bits (PAD)" Equation 18-11; IEEE Std 802.11-2012)
-        uint32_t numSymbols = lrint (ceil ((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol));
+        uint32_t numSymbols;
+
+        if (packetType == 1 && preamble != WIFI_PREAMBLE_NONE)
+          {
+            //First packet in an A-MPDU
+            numSymbols= ceil((16 + size * 8.0 + 6) / (numDataBitsPerSymbol));
+            if (incFlag == 1)
+              {
+                m_totalAmpduSize += size;
+                m_totalAmpduNumSymbols += numSymbols;
+              } 
+          }
+        else if (packetType == 1 && preamble == WIFI_PREAMBLE_NONE)
+          {
+            //consecutive packets in an A-MPDU
+            numSymbols= ((size * 8.0) / (numDataBitsPerSymbol));
+            if (incFlag == 1)
+              {
+                m_totalAmpduSize += size;
+                m_totalAmpduNumSymbols += numSymbols;
+              }
+          }
+        else if (packetType == 2 && preamble == WIFI_PREAMBLE_NONE)
+          {
+           //last packet in an A-MPDU
+           uint32_t totalAmpduSize = m_totalAmpduSize + size;
+           numSymbols = lrint (ceil((16 + totalAmpduSize * 8.0 + 6) / (numDataBitsPerSymbol)));
+           numSymbols -= m_totalAmpduNumSymbols;
+           if (incFlag == 1)
+             {
+               m_totalAmpduSize = 0;
+               m_totalAmpduNumSymbols = 0;
+             }
+          }
+        else if (packetType == 0 && preamble != WIFI_PREAMBLE_NONE)
+          {
+            //Not an A-MPDU
+            numSymbols = lrint (ceil ((16 + size * 8.0 + 6.0) / (numDataBitsPerSymbol)));
+          }
+        else
+            NS_FATAL_ERROR ("Wrong combination of preamble and packet type"); 
 
         // Add signal extension for ERP PHY
         if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
           {
-            return numSymbols * symbolDurationUs + 6;
+            return Time (numSymbols * symbolDuration) + MicroSeconds(6);
           }
         else
           {
-            return numSymbols * symbolDurationUs;
+            return Time (numSymbols * symbolDuration);
           }
       }
     case WIFI_MOD_CLASS_HT:
       {
-         double symbolDurationUs;
+         Time symbolDuration;
          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;
+             symbolDuration = NanoSeconds(3600);
            }
          else
            {
@@ -403,23 +493,70 @@
                   case 90000000:
                   case 120000000:
                   case 150000000:
-                    symbolDurationUs=3.6;
+                    symbolDuration = NanoSeconds(3600);
                     break;               
                  default:
-                    symbolDurationUs=4;
+                    symbolDuration = MicroSeconds(4);
               }
            }
          if  (txvector.IsStbc())
             m_Stbc=2;
          else
            m_Stbc=1;
-         double numDataBitsPerSymbol = payloadMode.GetDataRate () *txvector.GetNss()  * symbolDurationUs / 1e6;
+         double numDataBitsPerSymbol = payloadMode.GetDataRate () * txvector.GetNss() * symbolDuration.GetNanoSeconds() / 1e9;
          //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)));
+        uint32_t numSymbols;
+        if (packetType == 1 && preamble != WIFI_PREAMBLE_NONE)
+          {
+           //First packet in an A-MPDU
+           numSymbols = ceil(m_Stbc*(16 + size * 8.0 + 6*Nes) / (m_Stbc* numDataBitsPerSymbol));
+           if (incFlag == 1)
+             {
+               m_totalAmpduSize += size;
+               m_totalAmpduNumSymbols += numSymbols;
+             }
+          }
+        else if (packetType == 1 && preamble == WIFI_PREAMBLE_NONE)
+          {
+            //consecutive packets in an A-MPDU
+            numSymbols = m_Stbc* ((size * 8.0 ) / (m_Stbc* numDataBitsPerSymbol));
+            if (incFlag == 1)
+              {
+                m_totalAmpduSize += size;
+                m_totalAmpduNumSymbols += numSymbols;
+              }
+          }
+        else if (packetType == 2 && preamble == WIFI_PREAMBLE_NONE)
+          {
+            //last packet in an A-MPDU
+            uint32_t totalAmpduSize = m_totalAmpduSize+size;
+            numSymbols = lrint (m_Stbc* ceil((16 + totalAmpduSize * 8.0 + 6*Nes) / (m_Stbc* numDataBitsPerSymbol)));
+            NS_ASSERT (m_totalAmpduNumSymbols <= numSymbols);
+            numSymbols -= m_totalAmpduNumSymbols;
+            if (incFlag == 1)
+              {
+                m_totalAmpduSize = 0;
+                m_totalAmpduNumSymbols = 0;
+              }
+          }
+        else if (packetType == 0 && preamble != WIFI_PREAMBLE_NONE)
+           //Not an A-MPDU
+          {
+           numSymbols = lrint (m_Stbc*ceil ((16 + size * 8.0 + 6.0*Nes) / (m_Stbc* numDataBitsPerSymbol)));
+          }
+        else
+           NS_FATAL_ERROR ("Wrong combination of preamble and packet type");
        
-        return numSymbols * symbolDurationUs;
+        if (frequency >= 2400 && frequency <= 2500 && ((packetType == 0 && preamble != WIFI_PREAMBLE_NONE) || (packetType == 2 && preamble == WIFI_PREAMBLE_NONE))) //at 2.4 GHz
+          {
+            return Time (numSymbols * symbolDuration) + MicroSeconds(6);
+          }
+        else  //at 5 GHz
+          {
+            return Time (numSymbols * symbolDuration);
+          }
          
       }
     case WIFI_MOD_CLASS_DSSS:
@@ -427,28 +564,26 @@
       NS_LOG_LOGIC (" size=" << size
                              << " mode=" << payloadMode
                              << " rate=" << payloadMode.GetDataRate () );
-      return lrint (ceil ((size * 8.0) / (payloadMode.GetDataRate () / 1.0e6)));
+      return MicroSeconds (lrint (ceil ((size * 8.0) / (payloadMode.GetDataRate () / 1.0e6))));
 
     default:
       NS_FATAL_ERROR ("unsupported modulation class");
-      return 0;
+      return MicroSeconds (0);
     }
 }
 
 Time
-WifiPhy::CalculateTxDuration (uint32_t size, WifiTxVector txvector, WifiPreamble preamble)
+WifiPhy::CalculateTxDuration (uint32_t size, WifiTxVector txvector, WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag)
 {
   WifiMode payloadMode=txvector.GetMode();
-  double duration = GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble)
-    + GetPlcpHeaderDurationMicroSeconds (payloadMode, preamble)
-    + GetPlcpHtSigHeaderDurationMicroSeconds (payloadMode, preamble)
-    + GetPlcpHtTrainingSymbolDurationMicroSeconds (payloadMode, preamble,txvector)
-    + GetPayloadDurationMicroSeconds (size, txvector);
-  return MicroSeconds (duration);
+  Time duration = GetPlcpPreambleDuration (payloadMode, preamble)
+    + GetPlcpHeaderDuration (payloadMode, preamble)
+    + GetPlcpHtSigHeaderDuration (payloadMode, preamble)
+    + GetPlcpHtTrainingSymbolDuration (preamble, txvector)
+    + GetPayloadDuration (size, txvector, preamble, frequency, packetType, incFlag);
+  return duration;
 }
 
-
-
 void
 WifiPhy::NotifyTxBegin (Ptr<const Packet> packet)
 {
@@ -1487,7 +1622,14 @@
     ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz ();
     ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi ();
     ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz ();
-
+    ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi ();
+    ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz ();
   }
 } g_constructor;
 }
diff -Naur ns-3.21/src/wifi/model/wifi-phy.h ns-3.22/src/wifi/model/wifi-phy.h
--- ns-3.21/src/wifi/model/wifi-phy.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-phy.h	2015-02-05 15:46:22.000000000 -0800
@@ -205,13 +205,13 @@
 
   /**
    * \param packet the packet to send
-   * \param mode the transmission mode to use to send this packet
    * \param txvector the txvector that has tx parameters such as mode, the transmission mode to use to send
    *        this packet, and txPowerLevel, a power level to use to send this packet. The real transmission
    *        power is calculated as txPowerMin + txPowerLevel * (txPowerMax - txPowerMin) / nTxLevels
    * \param preamble the type of preamble to use to send this packet.
+   * \param packetType the type of the packet 0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU and 2 is the last MPDU in an A-MPDU
    */
-  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txvector, enum WifiPreamble preamble) = 0;
+  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txvector, enum WifiPreamble preamble, uint8_t packetType) = 0;
 
   /**
    * \param listener the new listener
@@ -220,6 +220,13 @@
    * PHY-level events.
    */
   virtual void RegisterListener (WifiPhyListener *listener) = 0;
+  /**
+   * \param listener the listener to be unregistered
+   *
+   * Remove the input listener from the list of objects to be notified of
+   * PHY-level events.
+   */
+  virtual void UnregisterListener (WifiPhyListener *listener) = 0;
 
   /**
    * Put in sleep mode.
@@ -281,33 +288,35 @@
    * \param size the number of bytes in the packet to send
    * \param txvector the transmission parameters used for this packet
    * \param preamble the type of preamble to use for this packet.
+   * \param frequency the channel center frequency (MHz)
+   * \param packetType the type of the packet 0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU  and 2 is the last MPDU in an A-MPDU
+   * \param incFlag this flag is used to indicate that the static variables need to be update or not. This function is called a couple of times for the same packet so static variables should not be increased each time. 
    * \return the total amount of time this PHY will stay busy for
    *          the transmission of these bytes.
    */
-  static Time CalculateTxDuration (uint32_t size, WifiTxVector txvector, enum WifiPreamble preamble);
+  Time CalculateTxDuration (uint32_t size, WifiTxVector txvector, enum WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag);
 
-/** 
-   * \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);
-/** 
+  static Time GetPlcpHtTrainingSymbolDuration (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 
+   * \return the duration of the HT-SIG in Mixed Format and greenfield format PLCP header 
    */
-  static uint32_t GetPlcpHtSigHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
+  static Time GetPlcpHtSigHeaderDuration (WifiMode payloadMode, WifiPreamble preamble);
 
 
   /** 
@@ -322,25 +331,29 @@
    * \param payloadMode the WifiMode use for the transmission of the payload
    * \param preamble the type of preamble
    * 
-   * \return the duration of the PLCP header in microseconds
+   * \return the duration of the PLCP header
    */
-  static uint32_t GetPlcpHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
+  static Time GetPlcpHeaderDuration (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 PLCP preamble in microseconds
+   * \return the duration of the PLCP preamble
    */
-  static uint32_t GetPlcpPreambleDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
+  static Time GetPlcpPreambleDuration (WifiMode payloadMode, WifiPreamble preamble);
 
   /** 
    * \param size the number of bytes in the packet to send
    * \param txvector the transmission parameters used for this packet
+   * \param preamble the type of preamble to use for this packet.
+   * \param frequency the channel center frequency (MHz)
+   * \param packetType the type of the packet 0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU  and 2 is the last MPDU in an A-MPDU
+   * \param incFlag this flag is used to indicate that the static variables need to be update or not. This function is called a couple of times for the same packet so static variables should not be increased each time
    * 
-   * \return the duration of the payload in microseconds
+   * \return the duration of the payload
    */
-  static double GetPayloadDurationMicroSeconds (uint32_t size, WifiTxVector txvector);
+  Time GetPayloadDuration (uint32_t size, WifiTxVector txvector, WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag);
 
   /**
    * The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used
@@ -399,7 +412,7 @@
    * (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.
+   * BssMembershipSelectorSet, and which is stored as WifiPhy::m_bssMembershipSelectorSet.
    *
    * This was introduced with 11n
    *
@@ -412,11 +425,11 @@
    * (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.
+   * BssMembershipSelectorSet, and which is stored as WifiPhy::m_bssMembershipSelectorSet.
    *
    * This was introduced with 11n
    *
-   * \param selector index in array of supported memeberships
+   * \param selector index in array of supported memberships
    * \return the memebership selector whose index is specified.
    */
   virtual uint32_t GetBssMembershipSelector (uint32_t selector) const=0;
@@ -425,11 +438,11 @@
    * (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.
+   * BssMembershipSelectorSet, and which is stored as WifiPhy::m_bssMembershipSelectorSet.
    *
    * This was introduced with 11n
    *
-   * \param selector index in array of supported memeberships
+   * \param selector index in array of supported memberships
    * \return a WifiModeList that contains the WifiModes associrated with the selected index.
    *
    * \sa WifiPhy::GetMembershipSelectorModes()
@@ -439,25 +452,25 @@
    * The WifiPhy::GetNMcs() method is 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
+   * 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
    *
-   * \return the Mcs index whose index is specified.
+   * \return the MCS index whose index is specified.
    */
   virtual uint8_t GetNMcs (void) const=0;
   /**
    * The WifiPhy::GetMcs() method is 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
+   * 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
-   * \return the Mcs index whose index is specified.
+   * \param mcs index in array of supported MCS
+   * \return the MCS index whose index is specified.
    */
   virtual uint8_t GetMcs (uint8_t mcs) const=0;
 
@@ -474,7 +487,7 @@
   * as defined in the IEEE 802.11n standard. 
   * 
   * \param mcs the MCS number 
-  * \return the WifiMode that corresponds to the given mcs number
+  * \return the WifiMode that corresponds to the given MCS number
   */
   virtual WifiMode McsToWifiMode (uint8_t mcs)=0;
 
@@ -495,7 +508,11 @@
    *
    * \return the current channel number
    */
-  virtual uint16_t GetChannelNumber () const = 0;
+  virtual uint16_t GetChannelNumber (void) const = 0;
+  /**
+   * \return the required time for channel switch operation of this WifiPhy
+   */
+  virtual Time GetChannelSwitchDelay (void) const = 0;
 
   /**
    * Configure the PHY-level parameters for different Wi-Fi standard.
@@ -536,388 +553,388 @@
    */
   static WifiMode GetDsssRate11Mbps ();
   /**
-   * Return a WifiMode for ERP-ODFM at 6Mbps.
+   * Return a WifiMode for ERP-OFDM at 6Mbps.
    *
    * \return a WifiMode for ERP-OFDM at 6Mbps
    */
   static WifiMode GetErpOfdmRate6Mbps ();
   /**
-   * Return a WifiMode for ERP-ODFM at 9Mbps.
+   * Return a WifiMode for ERP-OFDM at 9Mbps.
    *
    * \return a WifiMode for ERP-OFDM at 9Mbps
    */
   static WifiMode GetErpOfdmRate9Mbps ();
   /**
-   * Return a WifiMode for ERP-ODFM at 12Mbps.
+   * Return a WifiMode for ERP-OFDM at 12Mbps.
    *
    * \return a WifiMode for ERP-OFDM at 12Mbps
    */
   static WifiMode GetErpOfdmRate12Mbps ();
   /**
-   * Return a WifiMode for ERP-ODFM at 18Mbps.
+   * Return a WifiMode for ERP-OFDM at 18Mbps.
    *
    * \return a WifiMode for ERP-OFDM at 18Mbps
    */
   static WifiMode GetErpOfdmRate18Mbps ();
   /**
-   * Return a WifiMode for ERP-ODFM at 24Mbps.
+   * Return a WifiMode for ERP-OFDM at 24Mbps.
    *
    * \return a WifiMode for ERP-OFDM at 24Mbps
    */
   static WifiMode GetErpOfdmRate24Mbps ();
   /**
-   * Return a WifiMode for ERP-ODFM at 36Mbps.
+   * Return a WifiMode for ERP-OFDM at 36Mbps.
    *
    * \return a WifiMode for ERP-OFDM at 36Mbps
    */
   static WifiMode GetErpOfdmRate36Mbps ();
   /**
-   * Return a WifiMode for ERP-ODFM at 48Mbps.
+   * Return a WifiMode for ERP-OFDM at 48Mbps.
    *
    * \return a WifiMode for ERP-OFDM at 48Mbps
    */
   static WifiMode GetErpOfdmRate48Mbps ();
   /**
-   * Return a WifiMode for ERP-ODFM at 54Mbps.
+   * Return a WifiMode for ERP-OFDM at 54Mbps.
    *
    * \return a WifiMode for ERP-OFDM at 54Mbps
    */
   static WifiMode GetErpOfdmRate54Mbps ();
   /**
-   * Return a WifiMode for ODFM at 6Mbps.
+   * Return a WifiMode for OFDM at 6Mbps.
    *
    * \return a WifiMode for OFDM at 6Mbps
    */
   static WifiMode GetOfdmRate6Mbps ();
   /**
-   * Return a WifiMode for ODFM at 9Mbps.
+   * Return a WifiMode for OFDM at 9Mbps.
    *
    * \return a WifiMode for OFDM at 9Mbps
    */
   static WifiMode GetOfdmRate9Mbps ();
   /**
-   * Return a WifiMode for ODFM at 12Mbps.
+   * Return a WifiMode for OFDM at 12Mbps.
    *
    * \return a WifiMode for OFDM at 12Mbps
    */
   static WifiMode GetOfdmRate12Mbps ();
   /**
-   * Return a WifiMode for ODFM at 18Mbps.
+   * Return a WifiMode for OFDM at 18Mbps.
    *
    * \return a WifiMode for OFDM at 18Mbps
    */
   static WifiMode GetOfdmRate18Mbps ();
   /**
-   * Return a WifiMode for ODFM at 24Mbps.
+   * Return a WifiMode for OFDM at 24Mbps.
    *
    * \return a WifiMode for OFDM at 24Mbps
    */
   static WifiMode GetOfdmRate24Mbps ();
   /**
-   * Return a WifiMode for ODFM at 36Mbps.
+   * Return a WifiMode for OFDM at 36Mbps.
    *
    * \return a WifiMode for OFDM at 36Mbps
    */
   static WifiMode GetOfdmRate36Mbps ();
   /**
-   * Return a WifiMode for ODFM at 48Mbps.
+   * Return a WifiMode for OFDM at 48Mbps.
    *
    * \return a WifiMode for OFDM at 48Mbps
    */
   static WifiMode GetOfdmRate48Mbps ();
   /**
-   * Return a WifiMode for ODFM at 54Mbps.
+   * Return a WifiMode for OFDM at 54Mbps.
    *
    * \return a WifiMode for OFDM at 54Mbps
    */
   static WifiMode GetOfdmRate54Mbps ();
   /**
-   * Return a WifiMode for ODFM at 3Mbps with 10MHz channel spacing.
+   * Return a WifiMode for OFDM at 3Mbps with 10MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 3Mbps with 10MHz channel spacing
    */
   static WifiMode GetOfdmRate3MbpsBW10MHz ();
   /**
-   * Return a WifiMode for ODFM at 4.5Mbps with 10MHz channel spacing.
+   * Return a WifiMode for OFDM at 4.5Mbps with 10MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 4.5Mbps with 10MHz channel spacing
    */
   static WifiMode GetOfdmRate4_5MbpsBW10MHz ();
   /**
-   * Return a WifiMode for ODFM at 6Mbps with 10MHz channel spacing.
+   * Return a WifiMode for OFDM at 6Mbps with 10MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 6Mbps with 10MHz channel spacing
    */
   static WifiMode GetOfdmRate6MbpsBW10MHz ();
   /**
-   * Return a WifiMode for ODFM at 9Mbps with 10MHz channel spacing.
+   * Return a WifiMode for OFDM at 9Mbps with 10MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 9Mbps with 10MHz channel spacing
    */
   static WifiMode GetOfdmRate9MbpsBW10MHz ();
   /**
-   * Return a WifiMode for ODFM at 12Mbps with 10MHz channel spacing.
+   * Return a WifiMode for OFDM at 12Mbps with 10MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 12Mbps with 10MHz channel spacing
    */
   static WifiMode GetOfdmRate12MbpsBW10MHz ();
   /**
-   * Return a WifiMode for ODFM at 18Mbps with 10MHz channel spacing.
+   * Return a WifiMode for OFDM at 18Mbps with 10MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 18Mbps with 10MHz channel spacing
    */
   static WifiMode GetOfdmRate18MbpsBW10MHz ();
   /**
-   * Return a WifiMode for ODFM at 24Mbps with 10MHz channel spacing.
+   * Return a WifiMode for OFDM at 24Mbps with 10MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 24Mbps with 10MHz channel spacing
    */
   static WifiMode GetOfdmRate24MbpsBW10MHz ();
   /**
-   * Return a WifiMode for ODFM at 27Mbps with 10MHz channel spacing.
+   * Return a WifiMode for OFDM at 27Mbps with 10MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 27Mbps with 10MHz channel spacing
    */
   static WifiMode GetOfdmRate27MbpsBW10MHz ();
   /**
-   * Return a WifiMode for ODFM at 1.5Mbps with 5MHz channel spacing.
+   * Return a WifiMode for OFDM at 1.5Mbps with 5MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 1.5Mbps with 5MHz channel spacing
    */
   static WifiMode GetOfdmRate1_5MbpsBW5MHz ();
   /**
-   * Return a WifiMode for ODFM at 2.25Mbps with 5MHz channel spacing.
+   * Return a WifiMode for OFDM at 2.25Mbps with 5MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 2.25Mbps with 5MHz channel spacing
    */
   static WifiMode GetOfdmRate2_25MbpsBW5MHz ();
   /**
-   * Return a WifiMode for ODFM at 3Mbps with 5MHz channel spacing.
+   * Return a WifiMode for OFDM at 3Mbps with 5MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 3Mbps with 5MHz channel spacing
    */
   static WifiMode GetOfdmRate3MbpsBW5MHz ();
   /**
-   * Return a WifiMode for ODFM at 4.5Mbps with 5MHz channel spacing.
+   * Return a WifiMode for OFDM at 4.5Mbps with 5MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 4.5Mbps with 5MHz channel spacing
    */
   static WifiMode GetOfdmRate4_5MbpsBW5MHz ();
   /**
-   * Return a WifiMode for ODFM at 6Mbps with 5MHz channel spacing.
+   * Return a WifiMode for OFDM at 6Mbps with 5MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 6Mbps with 5MHz channel spacing
    */
   static WifiMode GetOfdmRate6MbpsBW5MHz ();
   /**
-   * Return a WifiMode for ODFM at 9Mbps with 5MHz channel spacing.
+   * Return a WifiMode for OFDM at 9Mbps with 5MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 9Mbps with 5MHz channel spacing
    */
   static WifiMode GetOfdmRate9MbpsBW5MHz ();
   /**
-   * Return a WifiMode for ODFM at 12Mbps with 5MHz channel spacing.
+   * Return a WifiMode for OFDM at 12Mbps with 5MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 12Mbps with 5MHz channel spacing
    */
   static WifiMode GetOfdmRate12MbpsBW5MHz ();
   /**
-   * Return a WifiMode for ODFM at 13.5Mbps with 5MHz channel spacing.
+   * Return a WifiMode for OFDM at 13.5Mbps with 5MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 13.5Mbps with 5MHz channel spacing
    */
   static WifiMode GetOfdmRate13_5MbpsBW5MHz ();
   /**
-   * Return a WifiMode for ODFM at 6.5Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 6.5Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 6.5Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate6_5MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 13Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 13Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 13Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate13MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 19.5Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 19.5Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 19.5Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate19_5MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 26Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 26Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 26Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate26MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 39Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 39Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 39Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate39MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 52Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 52Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 52Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate52MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 58.5Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 58.5Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 58.5Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate58_5MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 65Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 65Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 65Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate65MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 13.5Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 13.5Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 13.5Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate13_5MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 27Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 27Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 27Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate27MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 40.5Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 40.5Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 40.5Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate40_5MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 54Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 54Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 54Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate54MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 81Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 81Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 81Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate81MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 108Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 108Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 108Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate108MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 121.5Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 121.5Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 121.5Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate121_5MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 135Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 135Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 135Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate135MbpsBW40MHz ();
   //Rates for clause 20 with short guard interval
   /**
-   * Return a WifiMode for ODFM at 7.2Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 7.2Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 7.2Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate7_2MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 14.4Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 14.4Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 14.4Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate14_4MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 21.7Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 21.7Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 21.7Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate21_7MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 28.9Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 28.9Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 28.9Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate28_9MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 43.3Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 43.3Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 43.3Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate43_3MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 57.8Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 57.8Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 57.8Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate57_8MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 65Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 65Mbps with 20MHz channel spacing.
    * The rate supports short guard interval.
    *
    * \return a WifiMode for OFDM at 65Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate65MbpsBW20MHzShGi ();
   /**
-   * Return a WifiMode for ODFM at 72.2Mbps with 20MHz channel spacing.
+   * Return a WifiMode for OFDM at 72.2Mbps with 20MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 72.2Mbps with 20MHz channel spacing
    */
   static WifiMode GetOfdmRate72_2MbpsBW20MHz ();
   /**
-   * Return a WifiMode for ODFM at 15Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 15Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 15Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate15MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 30Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 30Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 30Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate30MbpsBW40MHz (); 
   /**
-   * Return a WifiMode for ODFM at 45Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 45Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 45Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate45MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 60Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 60Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 60Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate60MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 90Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 90Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 90Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate90MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 120Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 120Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 120Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate120MbpsBW40MHz ();
   /**
-   * Return a WifiMode for ODFM at 135Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 135Mbps with 40MHz channel spacing.
    * The rate supports short guard interval.
    *
    * \return a WifiMode for OFDM at 135Mbps with 40MHz channel spacing
    */
   static WifiMode GetOfdmRate135MbpsBW40MHzShGi ();
   /**
-   * Return a WifiMode for ODFM at 150Mbps with 40MHz channel spacing.
+   * Return a WifiMode for OFDM at 150Mbps with 40MHz channel spacing.
    *
    * \return a WifiMode for OFDM at 150Mbps with 40MHz channel spacing
    */
@@ -973,9 +990,32 @@
   void NotifyRxDrop (Ptr<const Packet> packet);
 
   /**
+   * Public method used to fire a MonitorSniffer trace for a wifi packet
+   * being received.  Implemented for encapsulation purposes.
+   *
+   * \param packet the packet being received
+   * \param channelFreqMhz the frequency in MHz at which the packet is
+   *        received. Note that in real devices this is normally the
+   *        frequency to which  the receiver is tuned, and this can be
+   *        different than the frequency at which the packet was originally
+   *        transmitted. This is because it is possible to have the receiver
+   *        tuned on a given channel and still to be able to receive packets
+   *        on a nearby channel.
+   * \param channelNumber the channel on which the packet is received
+   * \param rate the PHY data rate in units of 500kbps (i.e., the same
+   *        units used both for the radiotap and for the prism header)
+   * \param isShortPreamble true if short preamble is used, false otherwise
+   * \param signalDbm signal power in dBm
+   * \param noiseDbm  noise power in dBm
+   */
+  void NotifyMonitorSniffRx (Ptr<const Packet> packet, uint16_t channelFreqMhz,
+                             uint16_t channelNumber, uint32_t rate,
+                             bool isShortPreamble, double signalDbm,
+                             double noiseDbm);
+
+  /**
+   * TracedCallback signature for monitor mode receive events.
    *
-   * Public method used to fire a MonitorSniffer trace for a wifi packet being received.  Implemented for encapsulation
-   * purposes.
    *
    * \param packet the packet being received
    * \param channelFreqMhz the frequency in MHz at which the packet is
@@ -992,13 +1032,31 @@
    * \param signalDbm signal power in dBm
    * \param noiseDbm  noise power in dBm
    */
-  void NotifyMonitorSniffRx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble,
-                             double signalDbm, double noiseDbm);
+  typedef void (* MonitorSnifferRxCallback)
+    (Ptr<const Packet> packet, uint16_t channelFreqMhz,
+     uint16_t channelNumber, uint32_t rate,
+     bool isShortPreamble, double signalDbm,
+     double noiseDbm);
 
   /**
+   * Public method used to fire a MonitorSniffer trace for a wifi packet
+   * being transmitted.  Implemented for encapsulation purposes.
    *
-   * Public method used to fire a MonitorSniffer trace for a wifi packet being transmitted.  Implemented for encapsulation
-   * purposes.
+   * \param packet the packet being transmitted
+   * \param channelFreqMhz the frequency in MHz at which the packet is
+   *        transmitted.
+   * \param channelNumber the channel on which the packet is transmitted
+   * \param rate the PHY data rate in units of 500kbps (i.e., the same
+   *        units used both for the radiotap and for the prism header)
+   * \param isShortPreamble true if short preamble is used, false otherwise
+   * \param txPower the transmission power in dBm
+   */
+  void NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz,
+                             uint16_t channelNumber, uint32_t rate,
+                             bool isShortPreamble, uint8_t txPower);
+
+  /**
+   * TracedCallback signature for monitor mode transmit events.
    *
    * \param packet the packet being transmitted
    * \param channelFreqMhz the frequency in MHz at which the packet is
@@ -1009,7 +1067,11 @@
    * \param isShortPreamble true if short preamble is used, false otherwise
    * \param txPower the transmission power in dBm
    */
-  void NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower);
+  typedef void (* MonitorSnifferTxCallback)
+    (const 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
@@ -1039,11 +1101,11 @@
    */
   virtual uint32_t GetNumberOfTransmitAntennas (void) const=0;
    /**
-   * \param rx the number of recievers on this node.
+   * \param rx the number of receivers on this node.
    */
   virtual void SetNumberOfReceiveAntennas (uint32_t rx)=0 ;
   /**
-   * \return the number of recievers on this node.
+   * \return the number of receivers on this node.
    */
   virtual uint32_t GetNumberOfReceiveAntennas (void) const=0;
   /**
@@ -1159,7 +1221,9 @@
    * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet>, uint16_t, uint16_t, uint32_t, bool,uint8_t> m_phyMonitorSniffTxTrace;
-
+    
+  uint32_t m_totalAmpduNumSymbols; //!< Number of symbols previously transmitted for the MPDUs in an A-MPDU, used for the computation of the number of symbols needed for the last MPDU in the A-MPDU
+  uint32_t m_totalAmpduSize;       //!< Total size of the previously transmitted MPDUs in an A-MPDU, used for the computation of the number of symbols needed for the last MPDU in the A-MPDU
 };
 
 /**
diff -Naur ns-3.21/src/wifi/model/wifi-phy-state-helper.cc ns-3.22/src/wifi/model/wifi-phy-state-helper.cc
--- ns-3.21/src/wifi/model/wifi-phy-state-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-phy-state-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,11 +21,12 @@
 #include "ns3/log.h"
 #include "ns3/simulator.h"
 #include "ns3/trace-source-accessor.h"
-
-NS_LOG_COMPONENT_DEFINE ("WifiPhyStateHelper");
+#include <algorithm>
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WifiPhyStateHelper");
+
 NS_OBJECT_ENSURE_REGISTERED (WifiPhyStateHelper);
 
 TypeId
@@ -36,15 +37,19 @@
     .AddConstructor<WifiPhyStateHelper> ()
     .AddTraceSource ("State",
                      "The state of the PHY layer",
-                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_stateLogger))
+                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_stateLogger),
+                     "ns3::WifiPhyStateHelper::StateTracedCallback")
     .AddTraceSource ("RxOk",
                      "A packet has been received successfully.",
-                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_rxOkTrace))
+                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_rxOkTrace),
+                     "ns3::WifiPhyStateHelper::RxOkTracedCallback")
     .AddTraceSource ("RxError",
                      "A packet has been received unsuccessfully.",
-                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_rxErrorTrace))
+                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_rxErrorTrace),
+                     "ns3::WifiPhyStateHelper::RxErrorTracedCallback")
     .AddTraceSource ("Tx", "Packet transmission is starting.",
-                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_txTrace))
+                     MakeTraceSourceAccessor (&WifiPhyStateHelper::m_txTrace),
+                     "ns3::WifiPhyStateHelper::TxTracedCallback")
   ;
   return tid;
 }
@@ -81,6 +86,15 @@
 {
   m_listeners.push_back (listener);
 }
+void
+WifiPhyStateHelper::UnregisterListener (WifiPhyListener *listener)
+{
+  ListenersI i = find (m_listeners.begin(), m_listeners.end(), listener);
+  if (i != m_listeners.end())
+    {
+      m_listeners.erase(i);
+    }
+}
 
 bool
 WifiPhyStateHelper::IsStateIdle (void)
diff -Naur ns-3.21/src/wifi/model/wifi-phy-state-helper.h ns-3.22/src/wifi/model/wifi-phy-state-helper.h
--- ns-3.21/src/wifi/model/wifi-phy-state-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-phy-state-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -58,6 +58,12 @@
    */
   void RegisterListener (WifiPhyListener *listener);
   /**
+   * Remove WifiPhyListener from this WifiPhyStateHelper.
+   *
+   * \param listener
+   */
+  void UnregisterListener (WifiPhyListener *listener);
+  /**
    * Return the current state of WifiPhy.
    *
    * \return the current state of WifiPhy
@@ -179,12 +185,60 @@
    */
   void SwitchFromSleep (Time duration);
 
+  /** \todo Why is this public? */
   TracedCallback<Time,Time,enum WifiPhy::State> m_stateLogger;
+
+  /**
+   * TracedCallback signature for state changes.
+   *
+   * \param [in] start Time when the \p state started.
+   * \param [in] duration Amount of time we've been in (or will be in)
+   *             the \p state.
+   * \param [in] state The state.
+   */
+  typedef void (* StateTracedCallback)
+    (const Time start, const Time duration, const WifiPhy::State state);
+
+  /**
+   * TracedCallback signature for receive end ok event.
+   *
+   * \param [in] packet The received packet.
+   * \param [in] snr    The SNR of the received packet.
+   * \param [in] mode   The transmission mode of the packet.   
+   * \param [in] preamble The preamble of the packet.
+   */
+  typedef void (* RxOkTracedCallback)
+    (const Ptr<const Packet> packet, const double snr,
+     const WifiMode mode, const WifiPreamble preamble);
+
+  /**
+   * TracedCallback signature for receive end error event.
+   *
+   * \param [in] packet The received packet.
+   * \param [in] snr    The SNR of the received packet.
+   */
+  typedef void (* RxEndErrorTracedCallback)
+    (const Ptr<const Packet> packet, const double snr);
+
+  /**
+   * TracedCallback signature for transmit event.
+   *
+   * \param [in] packet The received packet.
+   * \param [in] mode   The transmission mode of the packet.   
+   * \param [in] preamble The preamble of the packet.
+   * \param [in] power  The transmit power level.
+   */
+  typedef void (* TxTracedCallback)
+    (const Ptr<const Packet> packet, const WifiMode mode,
+     const WifiPreamble preamble, const uint8_t power);
+     
+                
 private:
   /**
    * typedef for a list of WifiPhyListeners
    */
   typedef std::vector<WifiPhyListener *> Listeners;
+  typedef std::vector<WifiPhyListener *>::iterator ListenersI;
 
   /**
    * Log the ideal and CCA states.
diff -Naur ns-3.21/src/wifi/model/wifi-preamble.h ns-3.22/src/wifi/model/wifi-preamble.h
--- ns-3.21/src/wifi/model/wifi-preamble.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-preamble.h	2015-02-05 15:46:22.000000000 -0800
@@ -31,7 +31,8 @@
   WIFI_PREAMBLE_LONG,
   WIFI_PREAMBLE_SHORT,
   WIFI_PREAMBLE_HT_MF,
-  WIFI_PREAMBLE_HT_GF
+  WIFI_PREAMBLE_HT_GF,
+  WIFI_PREAMBLE_NONE
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/wifi-remote-station-manager.cc ns-3.22/src/wifi/model/wifi-remote-station-manager.cc
--- ns-3.21/src/wifi/model/wifi-remote-station-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-remote-station-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -18,6 +18,7 @@
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
 
+#include <iostream>
 #include "wifi-remote-station-manager.h"
 #include "ns3/simulator.h"
 #include "ns3/assert.h"
@@ -27,19 +28,19 @@
 #include "ns3/double.h"
 #include "ns3/uinteger.h"
 #include "ns3/wifi-phy.h"
+#include "ns3/wifi-mac.h"
 #include "ns3/trace-source-accessor.h"
 #include "wifi-mac-header.h"
 #include "wifi-mac-trailer.h"
 
-NS_LOG_COMPONENT_DEFINE ("WifiRemoteStationManager");
-
-
 /***************************************************************
  *           Packet Mode Tagger
  ***************************************************************/
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WifiRemoteStationManager");
+
 class HighLatencyDataTxVectorTag : public Tag
 {
 public:
@@ -300,16 +301,20 @@
                    MakeUintegerChecker<uint8_t> ())
     .AddTraceSource ("MacTxRtsFailed",
                      "The transmission of a RTS by the MAC layer has failed",
-                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxRtsFailed))
+                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxRtsFailed),
+                     "ns3::Mac48Address::TracedCallback")
     .AddTraceSource ("MacTxDataFailed",
                      "The transmission of a data packet by the MAC layer has failed",
-                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxDataFailed))
+                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxDataFailed),
+                     "ns3::Mac48Address::TracedCallback")
     .AddTraceSource ("MacTxFinalRtsFailed",
                      "The transmission of a RTS has exceeded the maximum number of attempts",
-                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxFinalRtsFailed))
+                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxFinalRtsFailed),
+                     "ns3::Mac48Address::TracedCallback")
     .AddTraceSource ("MacTxFinalDataFailed",
                      "The transmission of a data packet has exceeded the maximum number of attempts",
-                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxFinalDataFailed))
+                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxFinalDataFailed),
+                     "ns3::Mac48Address::TracedCallback")
   ;
   return tid;
 }
@@ -356,6 +361,14 @@
   Reset ();
 }
 void
+WifiRemoteStationManager::SetupMac (Ptr<WifiMac> mac)
+{
+  // We need to track our MAC because it is the object that knows the
+  // full set of interframe spaces.
+  m_wifiMac = mac;
+  Reset ();
+}
+void
 WifiRemoteStationManager::SetHtSupported (bool enable)
 {
   m_htSupported=enable;
@@ -410,6 +423,7 @@
 void
 WifiRemoteStationManager::Reset (Mac48Address address)
 {
+  NS_LOG_FUNCTION (this << address);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStationState *state = LookupState (address);
   state->m_operationalRateSet.clear ();
@@ -420,6 +434,7 @@
 void
 WifiRemoteStationManager::AddSupportedMode (Mac48Address address, WifiMode mode)
 {
+  NS_LOG_FUNCTION (this << address << mode);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStationState *state = LookupState (address);
   for (WifiModeListIterator i = state->m_operationalRateSet.begin (); i != state->m_operationalRateSet.end (); i++)
@@ -432,6 +447,18 @@
     }
   state->m_operationalRateSet.push_back (mode);
 }
+void
+WifiRemoteStationManager::AddAllSupportedModes (Mac48Address address)
+{
+  NS_ASSERT (!address.IsGroup ());
+  WifiRemoteStationState *state = LookupState (address);
+  state->m_operationalRateSet.clear ();
+  for (uint32_t i = 0; i < m_wifiPhy->GetNModes (); i++)
+    {
+      state->m_operationalRateSet.push_back ( m_wifiPhy->GetMode (i));
+    }
+}
+
 /*void
 WifiRemoteStationManager::AddBssMembershipParameters(Mac48Address address, uint32_t selector)
 {
@@ -456,6 +483,7 @@
 void 
 WifiRemoteStationManager::AddSupportedMcs (Mac48Address address, uint8_t mcs)
 {
+  NS_LOG_FUNCTION (this << address << (uint16_t) mcs);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStationState *state = LookupState (address);
   for (WifiMcsListIterator i = state->m_operationalMcsSet.begin (); i != state->m_operationalMcsSet.end (); i++)
@@ -523,6 +551,7 @@
 WifiRemoteStationManager::PrepareForQueue (Mac48Address address, const WifiMacHeader *header,
                                            Ptr<const Packet> packet, uint32_t fullPacketSize)
 {
+  NS_LOG_FUNCTION (this << address << *header << packet << fullPacketSize);
   if (IsLowLatency () || address.IsGroup ())
     {
       return;
@@ -550,6 +579,7 @@
 WifiRemoteStationManager::GetDataTxVector (Mac48Address address, const WifiMacHeader *header,
                                        Ptr<const Packet> packet, uint32_t fullPacketSize)
 {
+  NS_LOG_FUNCTION (this << address << *header << packet << fullPacketSize);
   if (address.IsGroup ())
     {
       WifiTxVector v;
@@ -578,7 +608,7 @@
 WifiRemoteStationManager::GetCtsToSelfTxVector(const WifiMacHeader *header,
                                       Ptr<const Packet> packet)
 {
-  
+  NS_LOG_FUNCTION (this << *header << packet);
   if (!IsLowLatency ())
     {
       HighLatencyCtsToSelfTxVectorTag ctstoselftag;
@@ -603,6 +633,7 @@
 WifiRemoteStationManager::GetRtsTxVector (Mac48Address address, const WifiMacHeader *header,
                                       Ptr<const Packet> packet)
 {
+  NS_LOG_FUNCTION (this << address << *header << packet);
   NS_ASSERT (!address.IsGroup ());
   if (!IsLowLatency ())
     {
@@ -620,6 +651,7 @@
 void
 WifiRemoteStationManager::ReportRtsFailed (Mac48Address address, const WifiMacHeader *header)
 {
+  NS_LOG_FUNCTION (this << address << *header);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStation *station = Lookup (address, header);
   station->m_ssrc++;
@@ -629,6 +661,7 @@
 void
 WifiRemoteStationManager::ReportDataFailed (Mac48Address address, const WifiMacHeader *header)
 {
+  NS_LOG_FUNCTION (this << address << *header);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStation *station = Lookup (address, header);
   station->m_slrc++;
@@ -639,6 +672,7 @@
 WifiRemoteStationManager::ReportRtsOk (Mac48Address address, const WifiMacHeader *header,
                                        double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {
+  NS_LOG_FUNCTION (this << address << *header << ctsSnr << ctsMode << rtsSnr);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStation *station = Lookup (address, header);
   station->m_state->m_info.NotifyTxSuccess (station->m_ssrc);
@@ -649,6 +683,7 @@
 WifiRemoteStationManager::ReportDataOk (Mac48Address address, const WifiMacHeader *header,
                                         double ackSnr, WifiMode ackMode, double dataSnr)
 {
+  NS_LOG_FUNCTION (this << address << *header << ackSnr << ackMode << dataSnr);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStation *station = Lookup (address, header);
   station->m_state->m_info.NotifyTxSuccess (station->m_slrc);
@@ -658,6 +693,7 @@
 void
 WifiRemoteStationManager::ReportFinalRtsFailed (Mac48Address address, const WifiMacHeader *header)
 {
+  NS_LOG_FUNCTION (this << address << *header);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStation *station = Lookup (address, header);
   station->m_state->m_info.NotifyTxFailed ();
@@ -668,6 +704,7 @@
 void
 WifiRemoteStationManager::ReportFinalDataFailed (Mac48Address address, const WifiMacHeader *header)
 {
+  NS_LOG_FUNCTION (this << address << *header);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStation *station = Lookup (address, header);
   station->m_state->m_info.NotifyTxFailed ();
@@ -679,6 +716,7 @@
 WifiRemoteStationManager::ReportRxOk (Mac48Address address, const WifiMacHeader *header,
                                       double rxSnr, WifiMode txMode)
 {
+  NS_LOG_FUNCTION (this << address << *header << rxSnr << txMode);
   if (address.IsGroup ())
     {
       return;
@@ -690,6 +728,7 @@
 WifiRemoteStationManager::NeedRts (Mac48Address address, const WifiMacHeader *header,
                                    Ptr<const Packet> packet)
 {
+  NS_LOG_FUNCTION (this << address << *header << packet);
   if (address.IsGroup ())
     {
       return false;
@@ -700,6 +739,7 @@
 bool
 WifiRemoteStationManager::NeedCtsToSelf (WifiTxVector txVector)
 {
+  NS_LOG_FUNCTION (this << 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
@@ -708,6 +748,7 @@
     {
       if (mode == *i)
         {
+          NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning false");
           return false;
         }
     }
@@ -719,46 +760,55 @@
         {
           if (mcs == *i)
             {
+              NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning false");
               return false;
             }
         }
     }
+  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning true");
   return true;
 }
 bool
 WifiRemoteStationManager::NeedRtsRetransmission (Mac48Address address, const WifiMacHeader *header,
                                                  Ptr<const Packet> packet)
 {
+  NS_LOG_FUNCTION (this << address << packet << *header);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStation *station = Lookup (address, header);
   bool normally = station->m_ssrc < GetMaxSsrc ();
+  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedDataRetransmission count: " << station->m_ssrc << " result: " << std::boolalpha << normally);
   return DoNeedRtsRetransmission (station, packet, normally);
 }
 bool
 WifiRemoteStationManager::NeedDataRetransmission (Mac48Address address, const WifiMacHeader *header,
                                                   Ptr<const Packet> packet)
 {
+  NS_LOG_FUNCTION (this << address << packet << *header);
   NS_ASSERT (!address.IsGroup ());
   WifiRemoteStation *station = Lookup (address, header);
   bool normally = station->m_slrc < GetMaxSlrc ();
+  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedDataRetransmission count: " << station->m_slrc << " result: " << std::boolalpha << normally);
   return DoNeedDataRetransmission (station, packet, normally);
 }
 bool
 WifiRemoteStationManager::NeedFragmentation (Mac48Address address, const WifiMacHeader *header,
                                              Ptr<const Packet> packet)
 {
+  NS_LOG_FUNCTION (this << address << packet << *header);
   if (address.IsGroup ())
     {
       return false;
     }
   WifiRemoteStation *station = Lookup (address, header);
   bool normally = (packet->GetSize () + header->GetSize () + WIFI_MAC_FCS_LENGTH) > GetFragmentationThreshold ();
+  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedFragmentation result: " << std::boolalpha << normally);
   return DoNeedFragmentation (station, packet, normally);
 }
 
 void
 WifiRemoteStationManager::DoSetFragmentationThreshold (uint32_t threshold)
 {
+  NS_LOG_FUNCTION (this << threshold);
   if (threshold < 256)
     {
       /*
@@ -794,6 +844,7 @@
 uint32_t
 WifiRemoteStationManager::GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet)
 {
+  NS_LOG_FUNCTION (this << *header << packet);
   //The number of bytes a fragment can support is (Threshold - WIFI_HEADER_SIZE - WIFI_FCS).
   uint32_t nFragments = (packet->GetSize () / (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH));
 
@@ -802,6 +853,7 @@
     {
       nFragments++;
     }
+  NS_LOG_DEBUG ("WifiRemoteStationManager::GetNFragments returning " << nFragments);
   return nFragments;
 }
 
@@ -809,39 +861,48 @@
 WifiRemoteStationManager::GetFragmentSize (Mac48Address address, const WifiMacHeader *header,
                                            Ptr<const Packet> packet, uint32_t fragmentNumber)
 {
+  NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
   NS_ASSERT (!address.IsGroup ());
   uint32_t nFragment = GetNFragments (header, packet);
   if (fragmentNumber >= nFragment)
     {
+      NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning 0");
       return 0;
     }
   //Last fragment
   if (fragmentNumber == nFragment - 1)
     {
       uint32_t lastFragmentSize = packet->GetSize () - (fragmentNumber * (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH));
+      NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning " << lastFragmentSize);
       return lastFragmentSize;
     }
   //All fragments but the last, the number of bytes is (Threshold - WIFI_HEADER_SIZE - WIFI_FCS).
   else
     {
-      return GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH;
+      uint32_t fragmentSize = GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH;
+      NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning " << fragmentSize);
+      return fragmentSize;
     }
 }
 uint32_t
 WifiRemoteStationManager::GetFragmentOffset (Mac48Address address, const WifiMacHeader *header,
                                              Ptr<const Packet> packet, uint32_t fragmentNumber)
 {
+  NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
   NS_ASSERT (!address.IsGroup ());
   NS_ASSERT (fragmentNumber < GetNFragments (header, packet));
   uint32_t fragmentOffset = fragmentNumber * (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH);
+  NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentOffset returning " << fragmentOffset);
   return fragmentOffset;
 }
 bool
 WifiRemoteStationManager::IsLastFragment (Mac48Address address, const WifiMacHeader *header,
                                           Ptr<const Packet> packet, uint32_t fragmentNumber)
 {
+  NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
   NS_ASSERT (!address.IsGroup ());
   bool isLast = fragmentNumber == (GetNFragments (header, packet) - 1);
+  NS_LOG_DEBUG ("WifiRemoteStationManager::IsLastFragment returning " << std::boolalpha << isLast);
   return isLast;
 }
 WifiMode
@@ -861,6 +922,7 @@
    *   sequence (as defined in Annex G) and that is of the same
    *   modulation class (see Section 9.7.8) as the received frame...
    */
+  NS_LOG_FUNCTION (this << address << reqMode);
   WifiMode mode = GetDefaultMode ();
   bool found = false;
 
@@ -990,6 +1052,7 @@
                       << ". Check standard and selected rates match.");
     }
 
+  NS_LOG_DEBUG ("WifiRemoteStationManager::GetControlAnswerMode returning " << mode);
   return mode;
 }
 
@@ -1135,10 +1198,12 @@
 WifiRemoteStationState *
 WifiRemoteStationManager::LookupState (Mac48Address address) const
 {
+  NS_LOG_FUNCTION (this << address);
   for (StationStates::const_iterator i = m_states.begin (); i != m_states.end (); i++)
     {
       if ((*i)->m_address == address)
         {
+          NS_LOG_DEBUG ("WifiRemoteStationManager::LookupState returning existing state");
           return (*i);
         }
     }
@@ -1151,8 +1216,10 @@
   state->m_greenfield=m_wifiPhy->GetGreenfield();
   state->m_rx=1;
   state->m_tx=1;
+  state->m_ness=0;
   state->m_stbc=false;
   const_cast<WifiRemoteStationManager *> (this)->m_states.push_back (state);
+  NS_LOG_DEBUG ("WifiRemoteStationManager::LookupState returning new state");
   return state;
 }
 WifiRemoteStation *
@@ -1172,6 +1239,7 @@
 WifiRemoteStation *
 WifiRemoteStationManager::Lookup (Mac48Address address, uint8_t tid) const
 {
+  NS_LOG_FUNCTION (this << address << (uint16_t) tid);
   for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++)
     {
       if ((*i)->m_tid == tid
@@ -1196,6 +1264,7 @@
 void
 WifiRemoteStationManager::AddStationHtCapabilities (Mac48Address from, HtCapabilities htcapabilities)
 {
+  NS_LOG_FUNCTION (this << from << htcapabilities);
   WifiRemoteStationState *state;
   state=LookupState (from);
   state->m_shortGuardInterval=htcapabilities.GetShortGuardInterval20();
@@ -1221,6 +1290,7 @@
 void
 WifiRemoteStationManager::Reset (void)
 {
+  NS_LOG_FUNCTION (this);
   for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++)
     {
       delete (*i);
@@ -1235,6 +1305,7 @@
 void
 WifiRemoteStationManager::AddBasicMode (WifiMode mode)
 {
+  NS_LOG_FUNCTION (this << mode);
   for (uint32_t i = 0; i < GetNBasicModes (); i++)
     {
       if (GetBasicMode (i) == mode)
@@ -1357,10 +1428,27 @@
   return station->m_state->m_tx;
 }
 uint32_t 
+WifiRemoteStationManager::GetNess (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_ness;
+}
+uint32_t 
 WifiRemoteStationManager::GetShortRetryCount (const WifiRemoteStation *station) const
 {
   return station->m_ssrc;
 }
+
+Ptr<WifiPhy>
+WifiRemoteStationManager::GetPhy (void) const
+{
+  return m_wifiPhy;
+}
+Ptr<WifiMac>
+WifiRemoteStationManager::GetMac (void) const
+{
+  return m_wifiMac;
+}
+
 uint32_t 
 WifiRemoteStationManager::GetLongRetryCount (const WifiRemoteStation *station) const
 {
@@ -1424,4 +1512,10 @@
 {
   return m_failAvg;
 }
+
+WifiRemoteStation::~WifiRemoteStation ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/model/wifi-remote-station-manager.h ns-3.22/src/wifi/model/wifi-remote-station-manager.h
--- ns-3.21/src/wifi/model/wifi-remote-station-manager.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-remote-station-manager.h	2015-02-05 15:46:22.000000000 -0800
@@ -36,6 +36,7 @@
 struct WifiRemoteStation;
 struct WifiRemoteStationState;
 class WifiPhy;
+class WifiMac;
 class WifiMacHeader;
 
 /**
@@ -97,6 +98,13 @@
    * \param phy the PHY of this device
    */
   virtual void SetupPhy (Ptr<WifiPhy> phy);
+  /**
+   * Set up MAC associated with this device since it is the object that
+   * knows the full set of timing parameters (e.g. IFS).
+   *
+   * \param phy the PHY of this device
+   */
+  virtual void SetupMac (Ptr<WifiMac> mac);
 
   /**
    * Return the maximum STA short retry count (SSRC).
@@ -268,6 +276,14 @@
    * \param mode the WifiMode supports by the station
    */
   void AddSupportedMode (Mac48Address address, WifiMode mode);
+  /**
+   * Invoked in a STA or AP to store all of the modes supported 
+   * by a destination which is also supported locally.
+   * The set of supported modes includes the BSSBasicRateSet.
+   *
+   * \param address the address of the station being recorded
+   */
+  void AddAllSupportedModes (Mac48Address address);
   //void  AddBssMembershipParameters(Mac48Address address, uint32_t selector);
 
   /**
@@ -630,6 +646,13 @@
    */
   uint32_t GetNumberOfTransmitAntennas (const WifiRemoteStation *station) const;
   /**
+   * \returns the number of Ness the station has.
+   *
+   * \param station the station being queried
+   * \return the number of Ness the station has
+   */
+  uint32_t GetNess (const WifiRemoteStation *station) const;
+  /**
    * Return the long retry limit of the given station.
    *
    * \param station the station being queried
@@ -643,6 +666,20 @@
    * \return the short retry limit of the the station
    */
   uint32_t GetShortRetryCount (const WifiRemoteStation *station) const;
+
+  /**
+   * Return the WifiPhy.
+   *
+   * \return WifiPhy
+   */
+  Ptr<WifiPhy> GetPhy (void) const;
+  /**
+   * Return the WifiMac.
+   *
+   * \return WifiMac
+   */
+  Ptr<WifiMac> GetMac (void) const;
+
 private:
   /**
    * \param station the station that we need to communicate
@@ -894,6 +931,14 @@
    * "DeviceRateSet").
    */
   Ptr<WifiPhy> m_wifiPhy;
+  /**
+   * This is a pointer to the WifiMac associated with this
+   * WifiRemoteStationManager that is set on call to
+   * WifiRemoteStationManager::SetupMac(). Through this pointer the
+   * station manager can determine MAC characteristics, such as the
+   * interframe spaces.
+   */
+  Ptr<WifiMac> m_wifiMac;
   WifiMode m_defaultTxMode;  //!< The default transmission mode
   uint8_t m_defaultTxMcs;  //!< The default transmission modulation-coding scheme (MCS)
 
@@ -967,8 +1012,9 @@
   Mac48Address m_address;  //!< Mac48Address of the remote station
   WifiRemoteStationInfo m_info;
   bool m_shortGuardInterval;  //!< Flag if short guard interval is supported by the remote station
-  uint32_t m_rx;  //!< Number of RX antennae of the remote station
-  uint32_t m_tx;  //!< Number of TX antennae of the remote station
+  uint32_t m_rx;  //!< Number of RX antennas of the remote station
+  uint32_t m_tx;  //!< Number of TX antennas of the remote station
+  uint32_t m_ness;  //!< Number of streams in beamforming of the remote station
   bool m_stbc;  //!< Flag if STBC is used by the remote station
   bool m_greenfield;  //!< Flag if green field is used by the remote station
 
@@ -981,9 +1027,13 @@
  * of association status if we are in an infrastructure
  * network and to perform the selection of tx parameters
  * on a per-packet basis.
+ *
+ * This class is typically subclassed and extended by 
+ * rate control implementations
  */
 struct WifiRemoteStation
 {
+  virtual ~WifiRemoteStation ();
   WifiRemoteStationState *m_state; //!< Remote station state
   uint32_t m_ssrc; //!< STA short retry count
   uint32_t m_slrc; //!< STA long retry count
diff -Naur ns-3.21/src/wifi/model/wifi-tx-vector.cc ns-3.22/src/wifi/model/wifi-tx-vector.cc
--- ns-3.21/src/wifi/model/wifi-tx-vector.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-tx-vector.cc	2015-02-05 15:46:22.000000000 -0800
@@ -20,10 +20,18 @@
  */
 
 #include "ns3/wifi-tx-vector.h"
+#include "ns3/fatal-error.h"
 
 namespace ns3 {
 
 WifiTxVector::WifiTxVector ()
+  : m_retries (0),
+    m_shortGuardInterval (false),
+    m_nss (1),
+    m_ness (0),
+    m_stbc (false),
+    m_modeInitialized (false),
+    m_txPowerLevelInitialized (false)
 {
 }
 
@@ -35,18 +43,28 @@
     m_shortGuardInterval(shortGuardInterval),
     m_nss(nss),
     m_ness(ness),
-    m_stbc(stbc)
+    m_stbc(stbc),
+    m_modeInitialized (true),
+    m_txPowerLevelInitialized (true)
 {
 }
 
 WifiMode
 WifiTxVector::GetMode (void) const
 {
+  if (!m_modeInitialized)
+    {
+      NS_FATAL_ERROR ("WifiTxVector mode must be set before using");
+    }
   return m_mode;
 }
 uint8_t 
 WifiTxVector::GetTxPowerLevel (void) const
 {
+  if (!m_txPowerLevelInitialized)
+    {
+      NS_FATAL_ERROR ("WifiTxVector txPowerLevel must be set before using");
+    }
   return m_txPowerLevel;
 }
 uint8_t 
@@ -79,11 +97,13 @@
 WifiTxVector::SetMode (WifiMode mode)
 {
   m_mode=mode;
+  m_modeInitialized = true;
 }
 void 
 WifiTxVector::SetTxPowerLevel (uint8_t powerlevel)
 {
   m_txPowerLevel=powerlevel;
+  m_txPowerLevelInitialized = true;
 }
 void 
 WifiTxVector::SetRetries (uint8_t retries)
diff -Naur ns-3.21/src/wifi/model/wifi-tx-vector.h ns-3.22/src/wifi/model/wifi-tx-vector.h
--- ns-3.21/src/wifi/model/wifi-tx-vector.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/wifi-tx-vector.h	2015-02-05 15:46:22.000000000 -0800
@@ -35,6 +35,20 @@
  * and also 15.4.4.2 "PMD_SAP peer-to-peer service primitive
  * parameters".
  *
+ * If this class is constructed with the constructor that takes no
+ * arguments, then the client must explicitly set the mode and 
+ * transmit power level parameters before using them.  Default
+ * member initializers are provided for the other parameters, to
+ * conform to a non-MIMO/long guard configuration, although these
+ * may also be explicitly set after object construction.
+ *
+ * When used in a infrastructure context, WifiTxVector values should be 
+ * drawn from WifiRemoteStationManager parameters since rate adaptation 
+ * is responsible for picking the mode, number of streams, etc., but in 
+ * the case in which there is no such manager (e.g. mesh), the client 
+ * still needs to initialize at least the mode and transmit power level 
+ * appropriately.
+ *
  * \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
@@ -105,7 +119,7 @@
    */
   uint8_t GetNss (void) const;
   /**
-   * Sets the number of Nss refer to IEEE802.11n Table 20-28 for explanation and range
+   * Sets the number of Nss refer to IEEE 802.11n Table 20-28 for explanation and range
    *
    * \param nss
    */
@@ -115,7 +129,7 @@
    */
   uint8_t GetNess (void) const;
   /**
-   * Sets the Ness number refer to IEEE802.11n Table 20-6 for explanation
+   * Sets the Ness number refer to IEEE 802.11n Table 20-6 for explanation
    *
    * \param ness
    */
@@ -144,10 +158,13 @@
                            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
+  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 streams in beamforming */
+  bool     m_stbc; /**< STBC used or not */
+
+  bool     m_modeInitialized; //*< Internal initialization flag */
+  bool     m_txPowerLevelInitialized; //*< Internal initialization flag */
 
 };
 
diff -Naur ns-3.21/src/wifi/model/yans-error-rate-model.cc ns-3.22/src/wifi/model/yans-error-rate-model.cc
--- ns-3.21/src/wifi/model/yans-error-rate-model.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/yans-error-rate-model.cc	2015-02-05 15:46:22.000000000 -0800
@@ -16,6 +16,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
 #include <cmath>
@@ -24,10 +25,10 @@
 #include "wifi-phy.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("YansErrorRateModel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("YansErrorRateModel");
+
 NS_OBJECT_ENSURE_REGISTERED (YansErrorRateModel);
 
 TypeId
@@ -176,7 +177,8 @@
 YansErrorRateModel::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)
         {
@@ -269,6 +271,19 @@
                                    16  // adFreePlusOne
                                    );
             }
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_5_6)
+            {
+              //Table B.32  in Pâl Frenger et al., "Multi-rate Convolutional Codes".
+              return GetFecQamBer (snr,
+                                   nbits,
+                                   mode.GetBandwidth (), // signal spread
+                                   mode.GetPhyRate (), // phy rate
+                                   64, // m
+                                   4,  // dFree
+                                   14,  // adFree
+                                   69  // adFreePlusOne
+                                   );
+            }
           else
             {
               return GetFecQamBer (snr,
diff -Naur ns-3.21/src/wifi/model/yans-wifi-channel.cc ns-3.22/src/wifi/model/yans-wifi-channel.cc
--- ns-3.21/src/wifi/model/yans-wifi-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/yans-wifi-channel.cc	2015-02-05 15:46:22.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ns3/propagation-loss-model.h"
 #include "ns3/propagation-delay-model.h"
 
-NS_LOG_COMPONENT_DEFINE ("YansWifiChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("YansWifiChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (YansWifiChannel);
 
 TypeId
@@ -76,7 +76,7 @@
 
 void
 YansWifiChannel::Send (Ptr<YansWifiPhy> sender, Ptr<const Packet> packet, double txPowerDbm,
-                       WifiTxVector txVector, WifiPreamble preamble) const
+                       WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType, Time duration) const
 {
   Ptr<MobilityModel> senderMobility = sender->GetMobility ()->GetObject<MobilityModel> ();
   NS_ASSERT (senderMobility != 0);
@@ -107,18 +107,25 @@
             {
               dstNode = dstNetDevice->GetObject<NetDevice> ()->GetNode ()->GetId ();
             }
+
+          double *atts = new double[3];
+          *atts = rxPowerDbm;
+          *(atts+1)= packetType;
+          *(atts+2)= duration.GetNanoSeconds();
+
           Simulator::ScheduleWithContext (dstNode,
                                           delay, &YansWifiChannel::Receive, this,
-                                          j, copy, rxPowerDbm, txVector, preamble);
+                                          j, copy, atts, txVector, preamble);
         }
     }
 }
 
 void
-YansWifiChannel::Receive (uint32_t i, Ptr<Packet> packet, double rxPowerDbm,
+YansWifiChannel::Receive (uint32_t i, Ptr<Packet> packet, double *atts,
                           WifiTxVector txVector, WifiPreamble preamble) const
 {
-  m_phyList[i]->StartReceivePacket (packet, rxPowerDbm, txVector, preamble);
+  m_phyList[i]->StartReceivePacket (packet, *atts, txVector, preamble,*(atts+1), NanoSeconds(*(atts+2)));
+  delete[] atts;
 }
 
 uint32_t
diff -Naur ns-3.21/src/wifi/model/yans-wifi-channel.h ns-3.22/src/wifi/model/yans-wifi-channel.h
--- ns-3.21/src/wifi/model/yans-wifi-channel.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/yans-wifi-channel.h	2015-02-05 15:46:22.000000000 -0800
@@ -27,6 +27,7 @@
 #include "wifi-mode.h"
 #include "wifi-preamble.h"
 #include "wifi-tx-vector.h"
+#include "ns3/nstime.h"
 
 namespace ns3 {
 
@@ -81,6 +82,8 @@
    * \param txPowerDbm the tx power associated to the packet
    * \param txVector the TXVECTOR associated to the packet
    * \param preamble the preamble associated to the packet
+   * \param packetType the type of packet, used for A-MPDU to say whether it's the last MPDU or not
+   * \param duration the transmission duration associated to the packet
    *
    * This method should not be invoked by normal users. It is
    * currently invoked only from WifiPhy::Send. YansWifiChannel
@@ -88,7 +91,7 @@
    * e.g. PHYs that are operating on the same channel.
    */
   void Send (Ptr<YansWifiPhy> sender, Ptr<const Packet> packet, double txPowerDbm,
-             WifiTxVector txVector, WifiPreamble preamble) const;
+             WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType, Time duration) const;
 
  /**
   * Assign a fixed random variable stream number to the random variables
@@ -115,11 +118,11 @@
    *
    * \param i index of the corresponding YansWifiPhy in the PHY list
    * \param packet the packet being sent
-   * \param rxPowerDbm the received power of the packet
+   * \param atts a vector containing the received power in dBm and the packet type
    * \param txVector the TXVECTOR of the packet
    * \param preamble the type of preamble being used to send the packet
    */
-  void Receive (uint32_t i, Ptr<Packet> packet, double rxPowerDbm,
+  void Receive (uint32_t i, Ptr<Packet> packet, double *atts,
                 WifiTxVector txVector, WifiPreamble preamble) const;
 
 
diff -Naur ns-3.21/src/wifi/model/yans-wifi-phy.cc ns-3.22/src/wifi/model/yans-wifi-phy.cc
--- ns-3.21/src/wifi/model/yans-wifi-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/yans-wifi-phy.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,12 +36,13 @@
 #include "ns3/net-device.h"
 #include "ns3/trace-source-accessor.h"
 #include "ns3/boolean.h"
+#include "ampdu-tag.h"
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("YansWifiPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("YansWifiPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (YansWifiPhy);
 
 TypeId
@@ -131,7 +132,7 @@
                    MakeUintegerAccessor (&YansWifiPhy::GetNumberOfTransmitAntennas,
                                         &YansWifiPhy::SetNumberOfTransmitAntennas),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Recievers", "The number of recievers.",
+    .AddAttribute ("Receivers", "The number of receivers.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&YansWifiPhy::GetNumberOfReceiveAntennas,
                                         &YansWifiPhy::SetNumberOfReceiveAntennas),
@@ -168,9 +169,11 @@
 }
 
 YansWifiPhy::YansWifiPhy ()
-  :  m_channelNumber (1),
+  :  m_initialized (false),
+    m_channelNumber (1),
     m_endRxEvent (),
-    m_channelStartingFrequency (0)
+    m_channelStartingFrequency (0),
+    m_mpdusNum(0)
 {
   NS_LOG_FUNCTION (this);
   m_random = CreateObject<UniformRandomVariable> ();
@@ -195,6 +198,13 @@
 }
 
 void
+YansWifiPhy::DoInitialize ()
+{
+  NS_LOG_FUNCTION (this);
+  m_initialized = true;
+}
+
+void
 YansWifiPhy::ConfigureStandard (enum WifiPhyStandard standard)
 {
   NS_LOG_FUNCTION (this << standard);
@@ -373,7 +383,7 @@
 void
 YansWifiPhy::SetChannelNumber (uint16_t nch)
 {
-  if (Simulator::Now () == Seconds (0))
+  if (!m_initialized)
     {
       // this is not channel switch, this is initialization
       NS_LOG_DEBUG ("start at channel " << nch);
@@ -423,11 +433,17 @@
 }
 
 uint16_t
-YansWifiPhy::GetChannelNumber () const
+YansWifiPhy::GetChannelNumber (void) const
 {
   return m_channelNumber;
 }
 
+Time
+YansWifiPhy::GetChannelSwitchDelay (void) const
+{
+  return m_channelSwitchDelay;
+}
+
 double
 YansWifiPhy::GetChannelFrequencyMhz () const
 {
@@ -501,12 +517,13 @@
 YansWifiPhy::StartReceivePacket (Ptr<Packet> packet,
                                  double rxPowerDbm,
                                  WifiTxVector txVector,
-                                 enum WifiPreamble preamble)
+                                 enum WifiPreamble preamble, 
+                                 uint8_t packetType, Time rxDuration)
 {
-  NS_LOG_FUNCTION (this << packet << rxPowerDbm << txVector.GetMode()<< preamble);
+  NS_LOG_FUNCTION (this << packet << rxPowerDbm << txVector.GetMode()<< preamble << (uint32_t)packetType);
+  AmpduTag ampduTag;
   rxPowerDbm += m_rxGainDb;
   double rxPowerW = DbmToW (rxPowerDbm);
-  Time rxDuration = CalculateTxDuration (packet->GetSize (), txVector, preamble);
   WifiMode txMode = txVector.GetMode();
   Time endRx = Simulator::Now () + rxDuration;
 
@@ -566,6 +583,33 @@
         {
           if (IsModeSupported (txMode) || IsMcsSupported(txMode))
             {
+              if (preamble != WIFI_PREAMBLE_NONE && packet->PeekPacketTag (ampduTag) && m_mpdusNum == 0)
+                {
+                  //received the first MPDU in an MPDU
+                  m_mpdusNum = ampduTag.GetNoOfMpdus()-1;
+                }
+              else if (preamble == WIFI_PREAMBLE_NONE && packet->PeekPacketTag (ampduTag) && m_mpdusNum > 0)
+                {
+                  //received the other MPDUs that are part of the A-MPDU
+                  if (ampduTag.GetNoOfMpdus() < m_mpdusNum)
+                    {
+                      NS_LOG_DEBUG ("Missing MPDU from the A-MPDU " << m_mpdusNum - ampduTag.GetNoOfMpdus());
+                      m_mpdusNum = ampduTag.GetNoOfMpdus();
+                    }
+                  else
+                      m_mpdusNum--;
+                }
+              else if (preamble != WIFI_PREAMBLE_NONE && m_mpdusNum > 0 )
+                {
+                  NS_LOG_DEBUG ("Didn't receive the last MPDUs from an A-MPDU " << m_mpdusNum);
+                  m_mpdusNum = 0;
+                }
+              else if (preamble == WIFI_PREAMBLE_NONE && m_mpdusNum == 0)
+                {
+                  NS_LOG_DEBUG ("drop packet because no preamble has been received");
+                  NotifyRxDrop (packet);
+                  goto maybeCcaBusy;
+                }
               NS_LOG_DEBUG ("sync to signal (power=" << rxPowerW << "W)");
               // sync to signal
               m_state->SwitchToRx (rxDuration);
@@ -613,9 +657,9 @@
 }
 
 void
-YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble)
+YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType)
 {
-  NS_LOG_FUNCTION (this << packet << txVector.GetMode() << preamble << (uint32_t)txVector.GetTxPowerLevel());
+  NS_LOG_FUNCTION (this << packet << txVector.GetMode() << preamble << (uint32_t)txVector.GetTxPowerLevel() << (uint32_t)packetType);
   /* 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
@@ -631,18 +675,26 @@
       return;
     }
 
-  Time txDuration = CalculateTxDuration (packet->GetSize (), txVector, preamble);
+  Time txDuration = CalculateTxDuration (packet->GetSize (), txVector, preamble, GetFrequency(), packetType, 1);
   if (m_state->IsStateRx ())
     {
       m_endRxEvent.Cancel ();
       m_interference.NotifyRxEnd ();
     }
   NotifyTxBegin (packet);
-  uint32_t dataRate500KbpsUnits = txVector.GetMode().GetDataRate () * txVector.GetNss() / 500000;
+  uint32_t dataRate500KbpsUnits;
+  if (txVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
+    {
+      dataRate500KbpsUnits = 128 + WifiModeToMcs (txVector.GetMode());
+    }
+  else
+    {
+      dataRate500KbpsUnits = txVector.GetMode().GetDataRate () * txVector.GetNss() / 500000;
+    }
   bool isShortPreamble = (WIFI_PREAMBLE_SHORT == preamble);
   NotifyMonitorSniffTx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, isShortPreamble, txVector.GetTxPowerLevel());
   m_state->SwitchToTx (txDuration, packet, GetPowerDbm (txVector.GetTxPowerLevel()), txVector, preamble);
-  m_channel->Send (this, packet, GetPowerDbm ( txVector.GetTxPowerLevel()) + m_txGainDb, txVector, preamble);
+  m_channel->Send (this, packet, GetPowerDbm (txVector.GetTxPowerLevel()) + m_txGainDb, txVector, preamble, packetType, txDuration);
 }
 
 uint32_t
@@ -784,6 +836,12 @@
   m_state->RegisterListener (listener);
 }
 
+void
+YansWifiPhy::UnregisterListener (WifiPhyListener *listener)
+{
+  m_state->UnregisterListener (listener);
+}
+
 bool
 YansWifiPhy::IsStateCcaBusy (void)
 {
@@ -904,7 +962,15 @@
   if (m_random->GetValue () > snrPer.per)
     {
       NotifyRxEnd (packet);
-      uint32_t dataRate500KbpsUnits = event->GetPayloadMode ().GetDataRate () * event->GetTxVector().GetNss()/ 500000;
+      uint32_t dataRate500KbpsUnits;
+      if ((event->GetPayloadMode ().GetModulationClass () == WIFI_MOD_CLASS_HT))
+        {
+          dataRate500KbpsUnits = 128 + WifiModeToMcs (event->GetPayloadMode ());
+        }
+      else
+        {
+          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;
@@ -1022,13 +1088,22 @@
 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 ());
+  if (m_channelStartingFrequency>=2400 && m_channelStartingFrequency<=2500) //@ 2.4 GHz
+    {
+      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 ());
+    }
+  if (m_channelStartingFrequency>=5000 && m_channelStartingFrequency<=6000) //@ 5 GHz
+    {
+      m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6Mbps ());
+      m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12Mbps ());
+      m_deviceRateSet.push_back (WifiPhy::GetOfdmRate24Mbps ());
+    }
   m_bssMembershipSelectorSet.push_back(HT_PHY);
   for (uint8_t i=0; i <8; i++)
     {
diff -Naur ns-3.21/src/wifi/model/yans-wifi-phy.h ns-3.22/src/wifi/model/yans-wifi-phy.h
--- ns-3.21/src/wifi/model/yans-wifi-phy.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/model/yans-wifi-phy.h	2015-02-05 15:46:22.000000000 -0800
@@ -87,7 +87,11 @@
    *
    * \return the current channel number
    */
-  uint16_t GetChannelNumber () const;
+  uint16_t GetChannelNumber (void) const;
+  /**
+   * \return the required time for channel switch operation of this WifiPhy
+   */
+  Time GetChannelSwitchDelay (void) const;
   /**
    * Return current center channel frequency in MHz.
    *
@@ -102,11 +106,15 @@
    * \param rxPowerDbm the receive power in dBm
    * \param txVector the TXVECTOR of the arriving packet
    * \param preamble the preamble of the arriving packet
+   * \param packetType The type of the received packet (values: 0 not an A-MPDU, 1 corresponds to any packets in an A-MPDU except the last one, 2 is the last packet in an A-MPDU) 
+   * \param rxDuration the duration needed for the reception of the arriving packet
    */
   void StartReceivePacket (Ptr<Packet> packet,
                            double rxPowerDbm,
                            WifiTxVector txVector,
-                           WifiPreamble preamble);
+                           WifiPreamble preamble,
+                           uint8_t packetType,
+                           Time rxDuration);
 
   /**
    * Sets the RX loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver.
@@ -247,8 +255,9 @@
   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, WifiTxVector txvector, enum WifiPreamble preamble);
+  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txvector, enum WifiPreamble preamble, uint8_t packetType);
   virtual void RegisterListener (WifiPhyListener *listener);
+  virtual void UnregisterListener (WifiPhyListener *listener);
   virtual void SetSleepMode (void);
   virtual void ResumeFromSleep (void);
   virtual bool IsStateCcaBusy (void);
@@ -458,6 +467,9 @@
   void EndReceive (Ptr<Packet> packet, Ptr<InterferenceHelper::Event> event);
 
 private:
+  virtual void DoInitialize (void);
+
+  bool     m_initialized;         //!< Flag for runtime initialization
   double   m_edThresholdW;        //!< Energy detection threshold in watts
   double   m_ccaMode1ThresholdW;  //!< Clear channel assessment (CCA) threshold in watts
   double   m_txGainDb;            //!< Transmission gain (dB)
@@ -477,7 +489,7 @@
   bool     m_stbc;                  //!< Flag if STBC is used      
   bool     m_greenfield;            //!< Flag if GreenField format is supported
   bool     m_guardInterval;         //!< Flag if short guard interval is used
-  bool     m_channelBonding;        //!< Flag if channel conding is used
+  bool     m_channelBonding;        //!< Flag if channel bonding is used
 
 
   /**
@@ -527,7 +539,7 @@
   Ptr<WifiPhyStateHelper> m_state;      //!< Pointer to WifiPhyStateHelper
   InterferenceHelper m_interference;    //!< Pointer to InterferenceHelper
   Time m_channelSwitchDelay;            //!< Time required to switch between channel
-
+  uint16_t m_mpdusNum;                  //!< carries the number of expected mpdus that are part of an A-MPDU
 };
 
 } // namespace ns3
diff -Naur ns-3.21/src/wifi/test/block-ack-test-suite.cc ns-3.22/src/wifi/test/block-ack-test-suite.cc
--- ns-3.21/src/wifi/test/block-ack-test-suite.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/test/block-ack-test-suite.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,6 +26,7 @@
 using namespace ns3;
 
 NS_LOG_COMPONENT_DEFINE ("BlockAckTest");
+
 /**
  * This simple test verifies the correctness of buffering for packets received
  * under block ack. In order to completely understand this example is important to cite
diff -Naur ns-3.21/src/wifi/test/dcf-manager-test.cc ns-3.22/src/wifi/test/dcf-manager-test.cc
--- ns-3.21/src/wifi/test/dcf-manager-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/test/dcf-manager-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,6 +37,8 @@
   virtual void DoNotifyInternalCollision (void);
   virtual void DoNotifyCollision (void);
   virtual void DoNotifyChannelSwitching (void);
+  virtual void DoNotifySleep (void);
+  virtual void DoNotifyWakeUp (void);
 
   typedef std::pair<uint64_t,uint64_t> ExpectedGrant;
   typedef std::list<ExpectedGrant> ExpectedGrants;
@@ -136,7 +138,16 @@
 {
   m_test->NotifyChannelSwitching (m_i);
 }
+void
+DcfStateTest::DoNotifySleep (void)
+{
 
+}
+void
+DcfStateTest::DoNotifyWakeUp (void)
+{
+
+}
 
 DcfManagerTest::DcfManagerTest ()
   : TestCase ("DcfManager")
diff -Naur ns-3.21/src/wifi/test/power-rate-adaptation-test.cc ns-3.22/src/wifi/test/power-rate-adaptation-test.cc
--- ns-3.21/src/wifi/test/power-rate-adaptation-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.22/src/wifi/test/power-rate-adaptation-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -0,0 +1,601 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Universidad de la República - Uruguay
+ *
+ * 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: Matías Richart <mrichart@fing.edu.uy>
+ */
+
+#include "ns3/wifi-net-device.h"
+#include "ns3/yans-wifi-channel.h"
+#include "ns3/adhoc-wifi-mac.h"
+#include "ns3/yans-wifi-phy.h"
+#include "ns3/parf-wifi-manager.h"
+#include "ns3/propagation-delay-model.h"
+#include "ns3/propagation-loss-model.h"
+#include "ns3/error-rate-model.h"
+#include "ns3/yans-error-rate-model.h"
+#include "ns3/constant-position-mobility-model.h"
+#include "ns3/node.h"
+#include "ns3/simulator.h"
+#include "ns3/test.h"
+#include "ns3/object-factory.h"
+#include "ns3/dca-txop.h"
+#include "ns3/mac-rx-middle.h"
+#include "ns3/pointer.h"
+#include "ns3/rng-seed-manager.h"
+#include "ns3/edca-txop-n.h"
+#include "ns3/config.h"
+#include "ns3/boolean.h"
+
+using namespace ns3;
+
+class PowerRateAdaptationTest : public TestCase
+{
+public:
+  PowerRateAdaptationTest ();
+
+  virtual void DoRun (void);
+private:
+  void TestParf ();
+  void TestAparf ();
+  Ptr<Node> ConfigureNode ();
+
+  ObjectFactory m_manager;
+};
+
+PowerRateAdaptationTest::PowerRateAdaptationTest ()
+  : TestCase ("PowerRateAdaptation")
+{
+}
+
+Ptr<Node>
+PowerRateAdaptationTest::ConfigureNode ()
+{
+  /*
+   * Create channel model. Is is necessary to configure correctly the phy layer.
+   */
+  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
+
+  /*
+   * Create mac layer. We use Adhoc because association is not needed to get supported rates.
+   */
+  Ptr<AdhocWifiMac> mac = CreateObject<AdhocWifiMac> ();
+  mac->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
+
+  /*
+   * Create mobility model. Is needed by the phy layer for transmission.
+   */
+  Ptr<ConstantPositionMobilityModel> mobility = CreateObject<ConstantPositionMobilityModel> ();
+
+  /*
+   * Create and configure phy layer.
+   */
+  Ptr<WifiNetDevice> dev = CreateObject<WifiNetDevice> ();
+  Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy> ();
+  phy->SetChannel (channel);
+  phy->SetDevice (dev);
+  phy->SetMobility (mobility);
+  phy->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
+
+  /*
+   * Configure power control parameters.
+   */
+  phy->SetNTxPower(18);
+  phy->SetTxPowerStart(0);
+  phy->SetTxPowerEnd(17);
+
+  /*
+   * Create manager.
+   */
+  Ptr<WifiRemoteStationManager> manager = m_manager.Create<WifiRemoteStationManager> ();
+
+  /*
+   * Create and configure node. Add mac and phy layer and the manager.
+   */
+  Ptr<Node> node = CreateObject<Node> ();
+  mac->SetAddress (Mac48Address::Allocate ());
+  dev->SetMac (mac);
+  dev->SetPhy (phy);
+  dev->SetRemoteStationManager (manager);
+  node->AddDevice (dev);
+
+  return node;
+}
+
+void
+PowerRateAdaptationTest::TestParf ()
+{
+  m_manager.SetTypeId ("ns3::ParfWifiManager");
+  Ptr<Node> node = ConfigureNode();
+  Ptr<WifiNetDevice> dev = DynamicCast<WifiNetDevice> (node->GetDevice(0));
+  Ptr<WifiRemoteStationManager> manager = dev->GetRemoteStationManager();
+
+  /*
+   * Configure thresholds for rate and power control.
+   */
+  manager->SetAttribute("AttemptThreshold",UintegerValue (15));
+  manager->SetAttribute("SuccessThreshold",UintegerValue(10));
+
+  /*
+   * Create a dummy packet to simulate transmission.
+   */
+  Mac48Address remoteAddress = Mac48Address::Allocate ();
+  WifiMacHeader packetHeader;
+  packetHeader.SetTypeData ();
+  packetHeader.SetQosTid (0);
+  Ptr<Packet> packet = Create<Packet> (10);
+  WifiMode ackMode;
+
+  /*
+   * To initialize the manager we need to generate a transmission.
+   */
+  Ptr<Packet> p = Create<Packet> ();
+  dev->Send (p, remoteAddress, 1);
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * Parf initiates with maximal rate and power.
+   */
+  WifiTxVector txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  WifiMode mode = txVector.GetMode();
+  int power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Initial data rate wrong");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Initial power level wrong");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After 10 consecutive successful transmissions parf increase rate or decrease power.
+   * As we are at maximal rate, the power should be decreased. recoveryPower=true.
+   */
+  for(int i = 0; i<10; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 16, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * As we are using recovery power, one failure make power increase.
+   *
+   */
+  manager->ReportDataFailed(remoteAddress,&packetHeader);
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After 15 transmissions attempts parf increase rate or decrease power.
+   * As we are at maximal rate, the power should be decreased. recoveryPower=true.
+   */
+  for(int i = 0; i<7; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+      manager->ReportDataFailed(remoteAddress,&packetHeader);
+    }
+  manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 16, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * As we are using recovery power, one failure make power increase. recoveryPower=false.
+   */
+
+  manager->ReportDataFailed(remoteAddress,&packetHeader);
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After two consecutive fails the rate is decreased or the power increased.
+   * As we are at maximal power, the rate should be decreased.
+   */
+  manager->ReportDataFailed(remoteAddress,&packetHeader);
+  manager->ReportDataFailed(remoteAddress,&packetHeader);
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After 10 consecutive successful transmissions parf increase rate or decrease power.
+   * As we are not at maximal rate, the rate is increased again. recoveryRate=true.
+   */
+  for(int i = 0; i<10; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * As we are using recovery rate, one failure make rate decrease. recoveryRate=false.
+   */
+
+  manager->ReportDataFailed(remoteAddress,&packetHeader);
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After 10 consecutive successful transmissions parf increase rate or decrease power.
+   * As we are not at maximal rate, the rate is increased again. recoveryRate=true.
+   */
+  for(int i = 0; i<10; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After 10 consecutive successful transmissions parf increase rate or decrease power.
+   * As we are at maximal rate, the power is decreased. recoveryRate=false, recoveryPower=true.
+   */
+  for(int i = 0; i<10; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 16, "PARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * One successful transmissions after a power decrease make recoverPower=false.
+   * So we need two consecutive failures to increase power again.
+   */
+  manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+
+  for(int i = 0; i<2; i++)
+    {
+      manager->ReportDataFailed(remoteAddress,&packetHeader);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
+
+  Simulator::Stop (Seconds (10.0));
+
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+}
+
+void
+PowerRateAdaptationTest::TestAparf ()
+{
+  m_manager.SetTypeId ("ns3::AparfWifiManager");
+  Ptr<Node> node = ConfigureNode();
+  Ptr<WifiNetDevice> dev = DynamicCast<WifiNetDevice> (node->GetDevice(0));
+  Ptr<WifiRemoteStationManager> manager = dev->GetRemoteStationManager();
+
+  /*
+   * Configure thresholds for rate and power control.
+   */
+  manager->SetAttribute("SuccessThreshold 1",UintegerValue (3));
+  manager->SetAttribute("SuccessThreshold 2",UintegerValue(10));
+  manager->SetAttribute("FailThreshold",UintegerValue (1));
+  manager->SetAttribute("PowerThreshold",UintegerValue(10));
+
+  /*
+   * Create a dummy packet to simulate transmission.
+   */
+  Mac48Address remoteAddress = Mac48Address::Allocate ();
+  WifiMacHeader packetHeader;
+  packetHeader.SetTypeData ();
+  packetHeader.SetQosTid (0);
+  Ptr<Packet> packet = Create<Packet> (10);
+  WifiMode ackMode;
+
+  /*
+   * To initialize the manager we need to generate a transmission.
+   */
+  Ptr<Packet> p = Create<Packet> ();
+  dev->Send (p, remoteAddress, 1);
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * Aparf initiates with maximal rate and power.
+   */
+  WifiTxVector txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  WifiMode mode = txVector.GetMode();
+  int power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Initial data rate wrong");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Initial power level wrong");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * As Aparf starts in state High, after 3 consecutive successful transmissions aparf increase rate or decrease power.
+   * As we are at maximal rate, the power should be decreased.
+   * Change to state Spread.
+   */
+  for(int i = 0; i<3; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 16, "APARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * One failure make the power to be increased again.
+   * Change to state Low.
+   */
+  manager->ReportDataFailed(remoteAddress,&packetHeader);
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * As we are in state Low we need 10 successful transmissions to increase rate or decrease power.
+   * As we are at maximal rate, the power should be decreased.
+   * Change to state Spread.
+   */
+  for(int i = 0; i<10; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 16, "APARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * One more successful transmission make to change to state High.
+   * Two more successful transmissions make power decrease.
+   */
+
+  for(int i = 0; i<3; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 15, "APARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * As we are in state High we need 3 successful transmissions to increase rate or decrease power.
+   * After 16*3 successful transmissions power is decreased to zero.
+   */
+  for(int i = 0; i<16*3; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 0, "APARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After one fail the rate is decreased or the power increased.
+   * As we are at minimal power, the power should be increased.
+   */
+  manager->ReportDataFailed(remoteAddress,&packetHeader);
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 1, "Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After one fail the rate is decreased or the power increased.
+   * After 16 failed transmissions power is increase to 17.
+   */
+  for(int i = 0; i<16; i++)
+    {
+      manager->ReportDataFailed(remoteAddress,&packetHeader);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * After one fail the rate is decreased or the power increased.
+   * As we are at maximal power, the rate should be decreased.
+   * Set critical rate to 54 Mbps.
+   */
+  manager->ReportDataFailed(remoteAddress,&packetHeader);
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * As we are in state High we need 3 successful transmissions to increase rate or decrease power.
+   * As rate critical is set, after 3 successful transmissions power is decreased.
+   */
+  for(int i = 0; i<3; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 16, "APARF: Incorrect value of power level");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * As we are in state High we need 3 successful transmissions to increase rate or decrease power.
+   * After 10 power changes critical rate is reseted.
+   * So after 10*3 successful transmissions critical rate is set to 0.
+   * And 3 successful transmissions more will make power increase to maximum and rate increase to the critical rate.
+   */
+  for(int i = 0; i<9*3; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 7, "APARF: Incorrect value of power level");
+
+  for(int i = 0; i<3; i++)
+    {
+      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
+    }
+
+  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
+  mode = txVector.GetMode();
+  power = (int) txVector.GetTxPowerLevel();
+
+  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
+  NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Incorrect value of power level");
+
+  Simulator::Stop (Seconds (10.0));
+
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+}
+
+void
+PowerRateAdaptationTest::DoRun (void)
+{
+
+  TestParf ();
+  TestAparf ();
+}
+
+//-----------------------------------------------------------------------------
+class PowerRateAdaptationTestSuite : public TestSuite
+{
+public:
+  PowerRateAdaptationTestSuite ();
+};
+
+PowerRateAdaptationTestSuite::PowerRateAdaptationTestSuite ()
+  : TestSuite ("power-rate-adaptation-wifi", UNIT)
+{
+  AddTestCase (new PowerRateAdaptationTest, TestCase::QUICK);
+}
+
+static PowerRateAdaptationTestSuite g_powerRateAdaptationTestSuite;
diff -Naur ns-3.21/src/wifi/test/tx-duration-test.cc ns-3.22/src/wifi/test/tx-duration-test.cc
--- ns-3.21/src/wifi/test/tx-duration-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/test/tx-duration-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -23,11 +23,14 @@
 #include <ns3/test.h>
 #include <iostream>
 #include "ns3/interference-helper.h"
-#include "ns3/wifi-phy.h"
+#include "ns3/yans-wifi-phy.h"
+
+using namespace ns3;
 
 NS_LOG_COMPONENT_DEFINE ("InterferenceHelperTxDurationTest");
 
-using namespace ns3;
+static const double CHANNEL_1_MHZ  = 2412.0; // a 2.4 GHz center frequency (MHz)
+static const double CHANNEL_36_MHZ = 5180.0; // a 5 GHz center frequency (MHz)
 
 class TxDurationTest : public TestCase
 {
@@ -43,11 +46,11 @@
    *
    * @param size size of payload in octets (includes everything after the PLCP header)
    * @param payloadMode the WifiMode used
-   * @param knownDurationMicroSeconds the known payload size
+   * @param knownDurationMicroSeconds the known duration value of the transmission in microseconds
    *
    * @return true if values correspond, false otherwise
    */
-  bool CheckPayloadDuration (uint32_t size, WifiMode payloadMode,  uint32_t knownDurationMicroSeconds);
+  bool CheckPayloadDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, uint32_t knownDurationMicroSeconds);
 
   /**
    * Check if the overall tx duration returned by InterferenceHelper
@@ -56,11 +59,11 @@
    * @param size size of payload in octets (includes everything after the PLCP header)
    * @param payloadMode the WifiMode used
    * @param preamble the WifiPreamble used
-   * @param knownDurationMicroSeconds the known value of the transmission
+   * @param knownDurationMicroSeconds the known duration value of the transmission in microseconds
    *
    * @return true if values correspond, false otherwise
    */
-  bool CheckTxDuration (uint32_t size, WifiMode payloadMode,  WifiPreamble preamble, double knownDurationMicroSeconds);
+  bool CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, double knownDurationMicroSeconds);
 
 };
 
@@ -76,11 +79,18 @@
 }
 
 bool
-TxDurationTest::CheckPayloadDuration (uint32_t size, WifiMode payloadMode, uint32_t knownDurationMicroSeconds)
+TxDurationTest::CheckPayloadDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble, uint32_t knownDurationMicroSeconds)
 {
   WifiTxVector txVector;
   txVector.SetMode (payloadMode);
-  uint32_t calculatedDurationMicroSeconds = WifiPhy::GetPayloadDurationMicroSeconds (size, txVector);
+  double testedFrequency = CHANNEL_1_MHZ;
+  Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy> ();
+  if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_OFDM || 
+      payloadMode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+    {
+      testedFrequency = CHANNEL_36_MHZ;
+    }
+  double calculatedDurationMicroSeconds = (double)phy->GetPayloadDuration (size, txVector, preamble, testedFrequency, 0, 0).GetMicroSeconds();;
   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
     {
       std::cerr << " size=" << size
@@ -90,6 +100,21 @@
                 << std::endl;
       return false;
     }
+  if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+    {
+      // Durations vary depending on frequency; test also 2.4 GHz (bug 1971)
+      testedFrequency = CHANNEL_1_MHZ;
+      calculatedDurationMicroSeconds = (double)phy->GetPayloadDuration (size, txVector, preamble, testedFrequency, 0, 0).GetMicroSeconds();;
+      if (calculatedDurationMicroSeconds != knownDurationMicroSeconds + 6)
+        {
+          std::cerr << " size=" << size
+                    << " mode=" << payloadMode
+                    << " known=" << knownDurationMicroSeconds
+                    << " calculated=" << calculatedDurationMicroSeconds
+                    << std::endl;
+          return false;
+        }
+    }
   return true;
 }
 
@@ -101,7 +126,14 @@
   txVector.SetNss(1);
   txVector.SetStbc(0);
   txVector.SetNess(0);
-  double calculatedDurationMicroSeconds = WifiPhy::CalculateTxDuration (size, txVector, preamble).GetMicroSeconds ();
+  double testedFrequency = CHANNEL_1_MHZ;
+  Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy> ();
+  if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_OFDM || 
+      payloadMode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+    {
+      testedFrequency = CHANNEL_36_MHZ;
+    }
+  double calculatedDurationMicroSeconds = ((double)phy->CalculateTxDuration (size, txVector, preamble, testedFrequency, 0, 0).GetNanoSeconds ())/1000;
   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
     {
       std::cerr << " size=" << size
@@ -112,6 +144,22 @@
                 << std::endl;
       return false;
     }
+  if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+    {
+      // Durations vary depending on frequency; test also 2.4 GHz (bug 1971)
+      testedFrequency = CHANNEL_1_MHZ;
+      calculatedDurationMicroSeconds = ((double)phy->CalculateTxDuration (size, txVector, preamble, testedFrequency, 0, 0).GetNanoSeconds ())/1000;
+      if (calculatedDurationMicroSeconds != knownDurationMicroSeconds + 6)
+        {
+          std::cerr << " size=" << size
+                    << " mode=" << payloadMode
+                    << " preamble=" << preamble
+                    << " known=" << knownDurationMicroSeconds
+                    << " calculated=" << calculatedDurationMicroSeconds
+                    << std::endl;
+          return false;
+        }
+    }
   return true;
 }
 
@@ -123,11 +171,12 @@
 
   // IEEE Std 802.11-2007 Table 18-2 "Example of LENGTH calculations for CCK"
   retval = retval
-    && CheckPayloadDuration (1023, WifiPhy::GetDsssRate11Mbps (), 744)
-    && CheckPayloadDuration (1024, WifiPhy::GetDsssRate11Mbps (), 745)
-    && CheckPayloadDuration (1025, WifiPhy::GetDsssRate11Mbps (), 746)
-    && CheckPayloadDuration (1026, WifiPhy::GetDsssRate11Mbps (), 747);
+    && CheckPayloadDuration (1023, WifiPhy::GetDsssRate11Mbps (), WIFI_PREAMBLE_LONG, 744)
+    && CheckPayloadDuration (1024, WifiPhy::GetDsssRate11Mbps (), WIFI_PREAMBLE_LONG, 745)
+    && CheckPayloadDuration (1025, WifiPhy::GetDsssRate11Mbps (), WIFI_PREAMBLE_LONG, 746)
+    && CheckPayloadDuration (1026, WifiPhy::GetDsssRate11Mbps (), WIFI_PREAMBLE_LONG, 747);
 
+    NS_TEST_EXPECT_MSG_EQ (retval, true, "an 802.11b CCK duration failed");
 
   // Similar, but we add PLCP preamble and header durations
   // and we test different rates.
@@ -167,9 +216,12 @@
     && CheckTxDuration (1025, WifiPhy::GetDsssRate1Mbps (), WIFI_PREAMBLE_LONG, 8200 + 192)
     && CheckTxDuration (1026, WifiPhy::GetDsssRate1Mbps (), WIFI_PREAMBLE_LONG, 8208 + 192);
 
+
   // values from http://mailman.isi.edu/pipermail/ns-developers/2009-July/006226.html
   retval = retval && CheckTxDuration (14, WifiPhy::GetDsssRate1Mbps (), WIFI_PREAMBLE_LONG, 304);
 
+    NS_TEST_EXPECT_MSG_EQ (retval, true, "an 802.11b duration failed");
+
   // values from
   // http://www.oreillynet.com/pub/a/wireless/2003/08/08/wireless_throughput.html
   retval = retval
@@ -180,21 +232,50 @@
     && CheckTxDuration (76, WifiPhy::GetOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 32)
     && CheckTxDuration (14, WifiPhy::GetOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 24);
 
+    NS_TEST_EXPECT_MSG_EQ (retval, true, "an 802.11a duration failed");
+
   // 802.11g durations are same as 802.11a durations but with 6 us signal extension
   retval = retval
     && CheckTxDuration (1536, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 254)
     && CheckTxDuration (76, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 38)
     && CheckTxDuration (14, WifiPhy::GetErpOfdmRate54Mbps (), WIFI_PREAMBLE_LONG, 30);
 
+    NS_TEST_EXPECT_MSG_EQ (retval, true, "an 802.11g duration failed");
+
   //802.11n durations
   retval = retval
-    && CheckTxDuration (1536,WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,228) 
+    && 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);
+    && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,40)
+    && CheckTxDuration (1536,WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_GF,220)
+    && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_GF,40)
+    && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_GF,32)
+    && CheckTxDuration (1536,WifiPhy::GetOfdmRate7_2MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,1746)
+    && CheckTxDuration (76, WifiPhy::GetOfdmRate7_2MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,126)
+    && CheckTxDuration (14, WifiPhy::GetOfdmRate7_2MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,57.6)
+    && CheckTxDuration (1536,WifiPhy::GetOfdmRate7_2MbpsBW20MHz (), WIFI_PREAMBLE_HT_GF,1738)
+    && CheckTxDuration (76, WifiPhy::GetOfdmRate7_2MbpsBW20MHz (), WIFI_PREAMBLE_HT_GF,118)
+    && CheckTxDuration (14, WifiPhy::GetOfdmRate7_2MbpsBW20MHz (), WIFI_PREAMBLE_HT_GF,49.6)
+    && CheckTxDuration (1536, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_MF,226.8)
+    && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_MF,46.8)
+    && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_MF,39.6)
+    && CheckTxDuration (1536, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,218.8)
+    && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,38.8)
+    && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,31.6)
+    && CheckTxDuration (1536,WifiPhy::GetOfdmRate135MbpsBW40MHz (), WIFI_PREAMBLE_HT_MF,128)
+    && CheckTxDuration (76,WifiPhy::GetOfdmRate135MbpsBW40MHz (), WIFI_PREAMBLE_HT_MF,44)
+    && CheckTxDuration (14,WifiPhy::GetOfdmRate135MbpsBW40MHz (), WIFI_PREAMBLE_HT_MF,40)
+    && CheckTxDuration (1536,WifiPhy::GetOfdmRate135MbpsBW40MHz (), WIFI_PREAMBLE_HT_GF,120)
+    && CheckTxDuration (76,WifiPhy::GetOfdmRate135MbpsBW40MHz (), WIFI_PREAMBLE_HT_GF,36)
+    && CheckTxDuration (14,WifiPhy::GetOfdmRate135MbpsBW40MHz (), WIFI_PREAMBLE_HT_GF,32)
+    && CheckTxDuration (1536,WifiPhy::GetOfdmRate150MbpsBW40MHz (), WIFI_PREAMBLE_HT_MF,118.8)
+    && CheckTxDuration (76,WifiPhy::GetOfdmRate150MbpsBW40MHz (), WIFI_PREAMBLE_HT_MF,43.2)
+    && CheckTxDuration (14,WifiPhy::GetOfdmRate150MbpsBW40MHz (), WIFI_PREAMBLE_HT_MF,39.6)
+    && CheckTxDuration (1536,WifiPhy::GetOfdmRate150MbpsBW40MHz (), WIFI_PREAMBLE_HT_GF,110.8)
+    && CheckTxDuration (76,WifiPhy::GetOfdmRate150MbpsBW40MHz (), WIFI_PREAMBLE_HT_GF,35.2)
+    && CheckTxDuration (14,WifiPhy::GetOfdmRate150MbpsBW40MHz (), WIFI_PREAMBLE_HT_GF,31.6);
+
+    NS_TEST_EXPECT_MSG_EQ (retval, true, "an 802.11n duration failed");
 }
 
 class TxDurationTestSuite : public TestSuite
diff -Naur ns-3.21/src/wifi/test/wifi-test.cc ns-3.22/src/wifi/test/wifi-test.cc
--- ns-3.21/src/wifi/test/wifi-test.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/test/wifi-test.cc	2015-02-05 15:46:22.000000000 -0800
@@ -214,7 +214,6 @@
 
 //-----------------------------------------------------------------------------
 /**
- * \internal
  * See \bugid{991}
  */
 class InterferenceHelperSequenceTest : public TestCase
@@ -352,7 +351,6 @@
  * 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}
  */
 
diff -Naur ns-3.21/src/wifi/wscript ns-3.22/src/wifi/wscript
--- ns-3.21/src/wifi/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wifi/wscript	2015-02-05 15:46:22.000000000 -0800
@@ -63,6 +63,12 @@
         'model/snr-tag.cc',
         'model/ht-capabilities.cc',
         'model/wifi-tx-vector.cc',
+        'model/parf-wifi-manager.cc',
+        'model/aparf-wifi-manager.cc',
+        'model/ampdu-subframe-header.cc',
+        'model/mpdu-aggregator.cc',
+        'model/mpdu-standard-aggregator.cc',
+        'model/ampdu-tag.cc',
         'helper/ht-wifi-mac-helper.cc',
         'helper/athstats-helper.cc',
         'helper/wifi-helper.cc',
@@ -76,6 +82,7 @@
         'test/block-ack-test-suite.cc',
         'test/dcf-manager-test.cc',
         'test/tx-duration-test.cc',
+        'test/power-rate-adaptation-test.cc',
         'test/wifi-test.cc',
         ]
 
@@ -139,7 +146,13 @@
         'model/block-ack-cache.h',
         'model/snr-tag.h',
         'model/ht-capabilities.h',
+        'model/parf-wifi-manager.h',
+        'model/aparf-wifi-manager.h',
         'model/wifi-tx-vector.h',
+        'model/ampdu-subframe-header.h',
+        'model/mpdu-aggregator.h',
+        'model/mpdu-standard-aggregator.h',
+        'model/ampdu-tag.h',
         'helper/ht-wifi-mac-helper.h',
         'helper/athstats-helper.h',
         'helper/wifi-helper.h',
diff -Naur ns-3.21/src/wimax/bindings/modulegen__gcc_ILP32.py ns-3.22/src/wimax/bindings/modulegen__gcc_ILP32.py
--- ns-3.21/src/wimax/bindings/modulegen__gcc_ILP32.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/bindings/modulegen__gcc_ILP32.py	2015-02-05 15:46:22.000000000 -0800
@@ -522,6 +522,7 @@
     module.add_enum('State', ['SS_STATE_IDLE', 'SS_STATE_SCANNING', 'SS_STATE_SYNCHRONIZING', 'SS_STATE_ACQUIRING_PARAMETERS', 'SS_STATE_WAITING_REG_RANG_INTRVL', 'SS_STATE_WAITING_INV_RANG_INTRVL', 'SS_STATE_WAITING_RNG_RSP', 'SS_STATE_ADJUSTING_PARAMETERS', 'SS_STATE_REGISTERED', 'SS_STATE_TRANSMITTING', 'SS_STATE_STOPPED'], outer_class=root_module['ns3::SubscriberStationNetDevice'])
     ## ss-net-device.h (module 'wimax'): ns3::SubscriberStationNetDevice::EventType [enumeration]
     module.add_enum('EventType', ['EVENT_NONE', 'EVENT_WAIT_FOR_RNG_RSP', 'EVENT_DL_MAP_SYNC_TIMEOUT', 'EVENT_LOST_DL_MAP', 'EVENT_LOST_UL_MAP', 'EVENT_DCD_WAIT_TIMEOUT', 'EVENT_UCD_WAIT_TIMEOUT', 'EVENT_RANG_OPP_WAIT_TIMEOUT'], outer_class=root_module['ns3::SubscriberStationNetDevice'])
+    module.add_container('std::map< std::string, ns3::LogComponent * >', ('std::string', 'ns3::LogComponent *'), container_type=u'map')
     module.add_container('std::vector< ns3::ServiceFlow * >', 'ns3::ServiceFlow *', container_type=u'vector')
     module.add_container('std::vector< bool >', 'bool', container_type=u'vector')
     module.add_container('ns3::bvec', 'bool', container_type=u'vector')
@@ -2248,8 +2249,8 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
-    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, std::string const & file, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('std::string const &', 'file'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
     ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
@@ -2258,6 +2259,16 @@
     cls.add_method('Enable', 
                    'void', 
                    [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): std::string ns3::LogComponent::File() const [member function]
+    cls.add_method('File', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## log.h (module 'core'): static std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,ns3::LogComponent*,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ns3::LogComponent*> > > * ns3::LogComponent::GetComponentList() [member function]
+    cls.add_method('GetComponentList', 
+                   'std::map< std::string, ns3::LogComponent * > *', 
+                   [], 
+                   is_static=True)
     ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
@@ -2475,10 +2486,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -3187,10 +3198,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4369,7 +4380,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -4420,6 +4436,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -4496,6 +4517,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -4530,6 +4555,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -10103,10 +10130,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
@@ -10604,11 +10631,6 @@
                    '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', 
@@ -10679,6 +10701,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/wimax/bindings/modulegen__gcc_LP64.py ns-3.22/src/wimax/bindings/modulegen__gcc_LP64.py
--- ns-3.21/src/wimax/bindings/modulegen__gcc_LP64.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/bindings/modulegen__gcc_LP64.py	2015-02-05 15:46:22.000000000 -0800
@@ -522,6 +522,7 @@
     module.add_enum('State', ['SS_STATE_IDLE', 'SS_STATE_SCANNING', 'SS_STATE_SYNCHRONIZING', 'SS_STATE_ACQUIRING_PARAMETERS', 'SS_STATE_WAITING_REG_RANG_INTRVL', 'SS_STATE_WAITING_INV_RANG_INTRVL', 'SS_STATE_WAITING_RNG_RSP', 'SS_STATE_ADJUSTING_PARAMETERS', 'SS_STATE_REGISTERED', 'SS_STATE_TRANSMITTING', 'SS_STATE_STOPPED'], outer_class=root_module['ns3::SubscriberStationNetDevice'])
     ## ss-net-device.h (module 'wimax'): ns3::SubscriberStationNetDevice::EventType [enumeration]
     module.add_enum('EventType', ['EVENT_NONE', 'EVENT_WAIT_FOR_RNG_RSP', 'EVENT_DL_MAP_SYNC_TIMEOUT', 'EVENT_LOST_DL_MAP', 'EVENT_LOST_UL_MAP', 'EVENT_DCD_WAIT_TIMEOUT', 'EVENT_UCD_WAIT_TIMEOUT', 'EVENT_RANG_OPP_WAIT_TIMEOUT'], outer_class=root_module['ns3::SubscriberStationNetDevice'])
+    module.add_container('std::map< std::string, ns3::LogComponent * >', ('std::string', 'ns3::LogComponent *'), container_type=u'map')
     module.add_container('std::vector< ns3::ServiceFlow * >', 'ns3::ServiceFlow *', container_type=u'vector')
     module.add_container('std::vector< bool >', 'bool', container_type=u'vector')
     module.add_container('ns3::bvec', 'bool', container_type=u'vector')
@@ -2248,8 +2249,8 @@
 def register_Ns3LogComponent_methods(root_module, cls):
     ## log.h (module 'core'): ns3::LogComponent::LogComponent(ns3::LogComponent const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LogComponent const &', 'arg0')])
-    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
-    cls.add_constructor([param('std::string const &', 'name'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
+    ## log.h (module 'core'): ns3::LogComponent::LogComponent(std::string const & name, std::string const & file, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('std::string const &', 'file'), param('ns3::LogLevel const', 'mask', default_value='::ns3::LOG_NONE')])
     ## log.h (module 'core'): void ns3::LogComponent::Disable(ns3::LogLevel const level) [member function]
     cls.add_method('Disable', 
                    'void', 
@@ -2258,6 +2259,16 @@
     cls.add_method('Enable', 
                    'void', 
                    [param('ns3::LogLevel const', 'level')])
+    ## log.h (module 'core'): std::string ns3::LogComponent::File() const [member function]
+    cls.add_method('File', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## log.h (module 'core'): static std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,ns3::LogComponent*,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ns3::LogComponent*> > > * ns3::LogComponent::GetComponentList() [member function]
+    cls.add_method('GetComponentList', 
+                   'std::map< std::string, ns3::LogComponent * > *', 
+                   [], 
+                   is_static=True)
     ## log.h (module 'core'): static std::string ns3::LogComponent::GetLevelLabel(ns3::LogLevel const level) [member function]
     cls.add_method('GetLevelLabel', 
                    'std::string', 
@@ -2475,10 +2486,10 @@
                    '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]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -3187,10 +3198,10 @@
     cls.add_constructor([param('ns3::PcapHelper const &', 'arg0')])
     ## trace-helper.h (module 'network'): ns3::PcapHelper::PcapHelper() [constructor]
     cls.add_constructor([])
-    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=65535, int32_t tzCorrection=0) [member function]
+    ## trace-helper.h (module 'network'): ns3::Ptr<ns3::PcapFileWrapper> ns3::PcapHelper::CreateFile(std::string filename, std::_Ios_Openmode filemode, uint32_t dataLinkType, uint32_t snapLen=std::numeric_limits<unsigned int>::max(), int32_t tzCorrection=0) [member function]
     cls.add_method('CreateFile', 
                    'ns3::Ptr< ns3::PcapFileWrapper >', 
-                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='65535'), param('int32_t', 'tzCorrection', default_value='0')])
+                   [param('std::string', 'filename'), param('std::_Ios_Openmode', 'filemode'), param('uint32_t', 'dataLinkType'), param('uint32_t', 'snapLen', default_value='std::numeric_limits<unsigned int>::max()'), param('int32_t', 'tzCorrection', default_value='0')])
     ## trace-helper.h (module 'network'): std::string ns3::PcapHelper::GetFilenameFromDevice(std::string prefix, ns3::Ptr<ns3::NetDevice> device, bool useObjectNames=true) [member function]
     cls.add_method('GetFilenameFromDevice', 
                    'std::string', 
@@ -4369,7 +4380,12 @@
     ## 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')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -4420,6 +4436,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=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', 
@@ -4496,6 +4517,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -4530,6 +4555,8 @@
     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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', 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]
@@ -10103,10 +10130,10 @@
     cls.add_method('SetLoss', 
                    'void', 
                    [param('ns3::Ptr< ns3::MobilityModel >', 'a'), param('ns3::Ptr< ns3::MobilityModel >', 'b'), param('double', 'loss'), param('bool', 'symmetric', default_value='true')])
-    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double arg0) [member function]
+    ## propagation-loss-model.h (module 'propagation'): void ns3::MatrixPropagationLossModel::SetDefaultLoss(double defaultLoss) [member function]
     cls.add_method('SetDefaultLoss', 
                    'void', 
-                   [param('double', 'arg0')])
+                   [param('double', 'defaultLoss')])
     ## propagation-loss-model.h (module 'propagation'): double ns3::MatrixPropagationLossModel::DoCalcRxPower(double txPowerDbm, ns3::Ptr<ns3::MobilityModel> a, ns3::Ptr<ns3::MobilityModel> b) const [member function]
     cls.add_method('DoCalcRxPower', 
                    'double', 
@@ -10604,11 +10631,6 @@
                    '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', 
@@ -10679,6 +10701,11 @@
     cls.add_method('SetNixVector', 
                    'void', 
                    [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
diff -Naur ns-3.21/src/wimax/examples/wimax-ipv4.cc ns-3.22/src/wimax/examples/wimax-ipv4.cc
--- ns-3.21/src/wimax/examples/wimax-ipv4.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/examples/wimax-ipv4.cc	2015-02-05 15:46:22.000000000 -0800
@@ -60,10 +60,10 @@
 #include "ns3/global-route-manager.h"
 #include <iostream>
 
-NS_LOG_COMPONENT_DEFINE ("wimaxIpV4Simulation");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("wimaxIpV4Simulation");
+
 int main (int argc, char *argv[])
 {
   // default values
diff -Naur ns-3.21/src/wimax/examples/wimax-multicast.cc ns-3.22/src/wimax/examples/wimax-multicast.cc
--- ns-3.21/src/wimax/examples/wimax-multicast.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/examples/wimax-multicast.cc	2015-02-05 15:46:22.000000000 -0800
@@ -63,11 +63,12 @@
 #include "ns3/internet-module.h"
 #include "ns3/vector.h"
 
+using namespace ns3;
+
 NS_LOG_COMPONENT_DEFINE ("WimaxMulticastSimulation");
 
 #define MAXSS 1000
 #define MAXDIST 10 // km
-using namespace ns3;
 
 int main (int argc, char *argv[])
 {
diff -Naur ns-3.21/src/wimax/examples/wimax-simple.cc ns-3.22/src/wimax/examples/wimax-simple.cc
--- ns-3.21/src/wimax/examples/wimax-simple.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/examples/wimax-simple.cc	2015-02-05 15:46:22.000000000 -0800
@@ -54,10 +54,10 @@
 #include "ns3/service-flow.h"
 #include <iostream>
 
-NS_LOG_COMPONENT_DEFINE ("WimaxSimpleExample");
-
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("WimaxSimpleExample");
+
 int main (int argc, char *argv[])
 {
   bool verbose = false;
diff -Naur ns-3.21/src/wimax/helper/wimax-helper.cc ns-3.22/src/wimax/helper/wimax-helper.cc
--- ns-3.21/src/wimax/helper/wimax-helper.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/helper/wimax-helper.cc	2015-02-05 15:46:22.000000000 -0800
@@ -36,10 +36,10 @@
 #include "ns3/wimax-mac-to-mac-header.h"
 
 
-NS_LOG_COMPONENT_DEFINE ("WimaxHelper");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WimaxHelper");
+
 WimaxHelper::WimaxHelper (void)
   : m_channel (0)
 {
diff -Naur ns-3.21/src/wimax/helper/wimax-helper.h ns-3.22/src/wimax/helper/wimax-helper.h
--- ns-3.21/src/wimax/helper/wimax-helper.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/helper/wimax-helper.h	2015-02-05 15:46:22.000000000 -0800
@@ -28,7 +28,6 @@
 #include "ns3/net-device-container.h"
 #include "ns3/bs-net-device.h"
 #include "ns3/ss-net-device.h"
-#include "ns3/deprecated.h"
 #include "ns3/service-flow.h"
 #include "ns3/propagation-loss-model.h"
 #include "ns3/simple-ofdm-wimax-channel.h"
@@ -278,7 +277,6 @@
   static void AsciiTxEvent (Ptr<OutputStreamWrapper> stream, std::string path, Ptr<const Packet> packet, const Mac48Address &dest);
   /**
    * \brief Enable pcap output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
@@ -292,7 +290,6 @@
 
   /**
    * \brief Enable ascii trace output on the indicated net device.
-   * \internal
    *
    * NetDevice-specific implementation mechanism for hooking the trace and
    * writing to the trace file.
diff -Naur ns-3.21/src/wimax/model/bandwidth-manager.cc ns-3.22/src/wimax/model/bandwidth-manager.cc
--- ns-3.21/src/wimax/model/bandwidth-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bandwidth-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,10 +33,10 @@
 #include "service-flow-manager.h"
 #include "connection-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("BandwidthManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BandwidthManager");
+
 NS_OBJECT_ENSURE_REGISTERED (BandwidthManager);
 
 TypeId BandwidthManager::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/bs-link-manager.cc ns-3.22/src/wimax/model/bs-link-manager.cc
--- ns-3.21/src/wimax/model/bs-link-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-link-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include "bs-uplink-scheduler.h"
 #include "connection-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("BSLinkManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BSLinkManager");
+
 NS_OBJECT_ENSURE_REGISTERED (BSLinkManager);
 
 TypeId BSLinkManager::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/bs-net-device.cc ns-3.22/src/wimax/model/bs-net-device.cc
--- ns-3.21/src/wimax/model/bs-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-net-device.cc	2015-02-05 15:46:22.000000000 -0800
@@ -46,10 +46,10 @@
 #include "ns3/ipv4-address.h"
 #include "ns3/llc-snap-header.h"
 
-NS_LOG_COMPONENT_DEFINE ("BaseStationNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BaseStationNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (BaseStationNetDevice);
 
 TypeId BaseStationNetDevice::GetTypeId (void)
@@ -149,27 +149,40 @@
                                         &BaseStationNetDevice::SetServiceFlowManager),
                    MakePointerChecker<ServiceFlowManager> ())
 
-    .AddTraceSource ("BSTx", "A packet has been received from higher layers and is being processed in preparation for "
-                     "queueing for transmission.", MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsTxTrace))
+    .AddTraceSource ("BSTx",
+                     "A packet has been received from higher layers "
+                     "and is being processed in preparation "
+                     "for queueing for transmission.",
+                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsTxTrace),
+                     "ns3::Packet::TracedCallback")
 
     .AddTraceSource ("BSTxDrop",
-                     "A packet has been dropped in the MAC layer before being queued for transmission.",
-                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsTxDropTrace))
+                     "A packet has been dropped in the MAC layer "
+                     "before being queued for transmission.",
+                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsTxDropTrace),
+                     "ns3::Packet::TracedCallback")
 
     .AddTraceSource ("BSPromiscRx",
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsPromiscRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a promiscuous trace,",
+                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
 
     .AddTraceSource ("BSRx",
-                     "A packet has been received by this device, has been passed up from the physical layer "
-                     "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsRxTrace))
+                     "A packet has been received by this device, "
+                     "has been passed up from the physical layer "
+                     "and is being forwarded up the local protocol stack.  "
+                     "This is a non-promiscuous trace,",
+                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsRxTrace),
+                     "ns3::Packet::TracedCallback")
 
     .AddTraceSource ("BSRxDrop",
-                     "A packet has been dropped in the MAC layer after it has been passed up from the physical "
-                     "layer.",
-                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsRxDropTrace));
+                     "A packet has been dropped in the MAC layer "
+                     "after it has been passed up from the physical layer.",
+                     MakeTraceSourceAccessor (&BaseStationNetDevice::m_bsRxDropTrace),
+                     "ns3::Packet::TracedCallback");
   return tid;
 }
 
diff -Naur ns-3.21/src/wimax/model/bs-scheduler.cc ns-3.22/src/wimax/model/bs-scheduler.cc
--- ns-3.21/src/wimax/model/bs-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,9 +35,10 @@
 #include "service-flow-record.h"
 #include "service-flow-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("BSScheduler");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("BSScheduler");
+  
 NS_OBJECT_ENSURE_REGISTERED (BSScheduler);
 
 TypeId
diff -Naur ns-3.21/src/wimax/model/bs-scheduler-rtps.cc ns-3.22/src/wimax/model/bs-scheduler-rtps.cc
--- ns-3.21/src/wimax/model/bs-scheduler-rtps.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-scheduler-rtps.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,10 +37,10 @@
 #include "service-flow-manager.h"
 #include "wimax-mac-queue.h"
 
-NS_LOG_COMPONENT_DEFINE ("BSSchedulerRtps");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BSSchedulerRtps");
+
 NS_OBJECT_ENSURE_REGISTERED (BSSchedulerRtps);
 
 TypeId
diff -Naur ns-3.21/src/wimax/model/bs-scheduler-simple.cc ns-3.22/src/wimax/model/bs-scheduler-simple.cc
--- ns-3.21/src/wimax/model/bs-scheduler-simple.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-scheduler-simple.cc	2015-02-05 15:46:22.000000000 -0800
@@ -35,10 +35,10 @@
 #include "service-flow-record.h"
 #include "service-flow-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("BSSchedulerSimple");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BSSchedulerSimple");
+
 NS_OBJECT_ENSURE_REGISTERED (BSSchedulerSimple);
 
 TypeId BSSchedulerSimple::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/bs-service-flow-manager.cc ns-3.22/src/wimax/model/bs-service-flow-manager.cc
--- ns-3.21/src/wimax/model/bs-service-flow-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-service-flow-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -37,10 +37,11 @@
 #include "ss-scheduler.h"
 #include "ns3/buffer.h"
 #include "service-flow-record.h"
-NS_LOG_COMPONENT_DEFINE ("BsServiceFlowManager");
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BsServiceFlowManager");
+
 BsServiceFlowManager::BsServiceFlowManager (Ptr<BaseStationNetDevice> device)
   : m_device (device),
     m_sfidIndex (100),
diff -Naur ns-3.21/src/wimax/model/bs-uplink-scheduler.cc ns-3.22/src/wimax/model/bs-uplink-scheduler.cc
--- ns-3.21/src/wimax/model/bs-uplink-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-uplink-scheduler.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,10 +32,10 @@
 #include "bs-link-manager.h"
 #include "bandwidth-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("UplinkScheduler");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UplinkScheduler");
+
 NS_OBJECT_ENSURE_REGISTERED (UplinkScheduler);
 
 UplinkScheduler::UplinkScheduler (void)
diff -Naur ns-3.21/src/wimax/model/bs-uplink-scheduler-mbqos.cc ns-3.22/src/wimax/model/bs-uplink-scheduler-mbqos.cc
--- ns-3.21/src/wimax/model/bs-uplink-scheduler-mbqos.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-uplink-scheduler-mbqos.cc	2015-02-05 15:46:22.000000000 -0800
@@ -29,10 +29,10 @@
 #include "bandwidth-manager.h"
 #include "connection-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("UplinkSchedulerMBQoS");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("UplinkSchedulerMBQoS");
+
 NS_OBJECT_ENSURE_REGISTERED (UplinkSchedulerMBQoS);
 
 UplinkSchedulerMBQoS::UplinkSchedulerMBQoS ()
diff -Naur ns-3.21/src/wimax/model/bs-uplink-scheduler-rtps.cc ns-3.22/src/wimax/model/bs-uplink-scheduler-rtps.cc
--- ns-3.21/src/wimax/model/bs-uplink-scheduler-rtps.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-uplink-scheduler-rtps.cc	2015-02-05 15:46:22.000000000 -0800
@@ -33,9 +33,10 @@
 #include "bs-link-manager.h"
 #include "bandwidth-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("UplinkSchedulerRtps");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("UplinkSchedulerRtps");
+  
 NS_OBJECT_ENSURE_REGISTERED (UplinkSchedulerRtps);
   
 
diff -Naur ns-3.21/src/wimax/model/bs-uplink-scheduler-simple.cc ns-3.22/src/wimax/model/bs-uplink-scheduler-simple.cc
--- ns-3.21/src/wimax/model/bs-uplink-scheduler-simple.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/bs-uplink-scheduler-simple.cc	2015-02-05 15:46:22.000000000 -0800
@@ -32,9 +32,10 @@
 #include "bs-link-manager.h"
 #include "bandwidth-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("UplinkSchedulerSimple");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("UplinkSchedulerSimple");
+  
 NS_OBJECT_ENSURE_REGISTERED (UplinkSchedulerSimple);
 
 UplinkSchedulerSimple::UplinkSchedulerSimple (void)
diff -Naur ns-3.21/src/wimax/model/burst-profile-manager.cc ns-3.22/src/wimax/model/burst-profile-manager.cc
--- ns-3.21/src/wimax/model/burst-profile-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/burst-profile-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/log.h"
 #include "mac-messages.h"
 
-NS_LOG_COMPONENT_DEFINE ("BurstProfileManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("BurstProfileManager");
+
 NS_OBJECT_ENSURE_REGISTERED (BurstProfileManager);
 
 TypeId BurstProfileManager::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/connection-manager.cc ns-3.22/src/wimax/model/connection-manager.cc
--- ns-3.21/src/wimax/model/connection-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/connection-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include "ss-net-device.h"
 #include "bs-net-device.h"
 
-NS_LOG_COMPONENT_DEFINE ("ConnectionManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ConnectionManager");
+
 NS_OBJECT_ENSURE_REGISTERED (ConnectionManager);
 
 TypeId ConnectionManager::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/default-traces.h ns-3.22/src/wimax/model/default-traces.h
--- ns-3.21/src/wimax/model/default-traces.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/default-traces.h	2015-02-05 15:46:22.000000000 -0800
@@ -19,25 +19,46 @@
  *                              <amine.ismail@udcast.com>
  */
 
-/**
- * \brief this file represents default traces providing for each SNR value (1): the bit error rate BER (2), the block error
- * rate BlcER(3), the standard deviation on block error rate (4) and the confidence interval (5 and 6) for a given
- * modulation.
- * It is made of 7 tables: one for each modulation and coding scheme. Each table is made of 6 columns (see (1) to (6) above).
- * These traces are generated by an external OFDM simulator: It is based on an external mathematics and signal processing
- * library IT++ and includes : a random block generator, a Reed Solomon (RS) coder, a convolutional coder, an interleaver, a 256
- * FFT-based OFDM modulator, a multi-path channel simulator and an equalizer. The multipath channel is simulated using
- * the TDL_channel class of the IT++ library.
- */
-
-
-
-
 #ifndef WIMAX_DEFAULT_TRACES_H
 #define WIMAX_DEFAULT_TRACES_H
 
 namespace ns3 {
 
+/**
+ * \brief These represent default traces, providing a number of
+ * parameters for each SNR value.
+ *
+ * The parameters provided are (in order):
+ *
+ * -#  The SNR value,
+ * -#  The bit error rate BER,
+ * -#  The block error rate BlcERm,
+ * -#  The standard deviation on block error rate,
+ * -#  The lower bound confidence interval for a given modulation, and
+ * -#  The upper bound confidence interval for a given modulation.
+ *
+ * It is made of 7 tables: one for each modulation and coding scheme.
+ * Each table is made of 6 columns, as listed above.
+ *
+ * These traces are generated by an external OFDM simulator: It is based
+ * on an external mathematics and signal processing library IT++ and includes:
+ *
+ * *  A random block generator,
+ * *  A Reed Solomon (RS) coder,
+ * *  A convolutional coder,
+ * *  an interleaver,
+ * *  A 256 FFT-based OFDM modulator,
+ * *  A multi-path channel simulator, and
+ * *  An equalizer.
+ *
+ * The multipath channel is simulated using the TDL_channel class of
+ * the IT++ library.
+ *
+ * \relates ns3::SNRToBlockErrorRateManager
+ * \hideinitializer
+ * @{
+ */
+
 static const double modulation0[6][29] = {
 
   { 0.00, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80,
@@ -833,6 +854,7 @@
     0.01943 }
 };
 
+/** @}*/
 }
 
 #endif /* WIMAX_DEFAULT_TRACES_H */
diff -Naur ns-3.21/src/wimax/model/ipcs-classifier.cc ns-3.22/src/wimax/model/ipcs-classifier.cc
--- ns-3.21/src/wimax/model/ipcs-classifier.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/ipcs-classifier.cc	2015-02-05 15:46:22.000000000 -0800
@@ -31,10 +31,10 @@
 #include "ns3/udp-l4-protocol.h"
 #include "ns3/tcp-l4-protocol.h"
 
-NS_LOG_COMPONENT_DEFINE ("IpcsClassifier");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("IpcsClassifier");
+
 NS_OBJECT_ENSURE_REGISTERED (IpcsClassifier);
 
 TypeId IpcsClassifier::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/ipcs-classifier-record.cc ns-3.22/src/wimax/model/ipcs-classifier-record.cc
--- ns-3.21/src/wimax/model/ipcs-classifier-record.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/ipcs-classifier-record.cc	2015-02-05 15:46:22.000000000 -0800
@@ -21,10 +21,11 @@
 #include <stdint.h>
 #include "ns3/ipv4-address.h"
 #include "wimax-tlv.h"
-NS_LOG_COMPONENT_DEFINE ("IpcsClassifierRecord");
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("IpcsClassifierRecord");
+
 IpcsClassifierRecord::IpcsClassifierRecord (void)
 {
   m_priority = 255;
diff -Naur ns-3.21/src/wimax/model/mac-messages.cc ns-3.22/src/wimax/model/mac-messages.cc
--- ns-3.21/src/wimax/model/mac-messages.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/mac-messages.cc	2015-02-05 15:46:22.000000000 -0800
@@ -26,10 +26,10 @@
 #include "ns3/log.h"
 #include "wimax-tlv.h"
 
-NS_LOG_COMPONENT_DEFINE ("MACMESSAGES");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("MACMESSAGES");
+
 NS_OBJECT_ENSURE_REGISTERED (ManagementMessageType);
 
 ManagementMessageType::ManagementMessageType (void)
diff -Naur ns-3.21/src/wimax/model/service-flow-manager.cc ns-3.22/src/wimax/model/service-flow-manager.cc
--- ns-3.21/src/wimax/model/service-flow-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/service-flow-manager.cc	2015-02-05 15:46:22.000000000 -0800
@@ -39,10 +39,11 @@
 #include "ss-scheduler.h"
 #include "ns3/buffer.h"
 #include "service-flow-record.h"
-NS_LOG_COMPONENT_DEFINE ("ServiceFlowManager");
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("ServiceFlowManager");
+
 NS_OBJECT_ENSURE_REGISTERED (ServiceFlowManager);
 
 TypeId ServiceFlowManager::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/simple-ofdm-wimax-channel.cc ns-3.22/src/wimax/model/simple-ofdm-wimax-channel.cc
--- ns-3.21/src/wimax/model/simple-ofdm-wimax-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/simple-ofdm-wimax-channel.cc	2015-02-05 15:46:23.000000000 -0800
@@ -33,11 +33,11 @@
 #include "ns3/cost231-propagation-loss-model.h"
 #include "simple-ofdm-send-param.h"
 
-NS_LOG_COMPONENT_DEFINE ("simpleOfdmWimaxChannel");
-
 namespace ns3 {
-// NS_OBJECT_ENSURE_REGISTERED (simpleOfdmWimaxChannel)
-//   ;
+
+NS_LOG_COMPONENT_DEFINE ("simpleOfdmWimaxChannel");
+  
+// NS_OBJECT_ENSURE_REGISTERED (simpleOfdmWimaxChannel);
 
 
 SimpleOfdmWimaxChannel::SimpleOfdmWimaxChannel (void)
diff -Naur ns-3.21/src/wimax/model/simple-ofdm-wimax-phy.cc ns-3.22/src/wimax/model/simple-ofdm-wimax-phy.cc
--- ns-3.21/src/wimax/model/simple-ofdm-wimax-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/simple-ofdm-wimax-phy.cc	2015-02-05 15:46:23.000000000 -0800
@@ -35,9 +35,10 @@
 #include <string>
 #include <cmath>
 
-NS_LOG_COMPONENT_DEFINE ("SimpleOfdmWimaxPhy");
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SimpleOfdmWimaxPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (SimpleOfdmWimaxPhy);
 
 TypeId SimpleOfdmWimaxPhy::GetTypeId (void)
@@ -89,33 +90,42 @@
                                        &SimpleOfdmWimaxPhy::SetTraceFilePath),
                    MakeStringChecker ())
 
-    .AddTraceSource ("Rx", "Receive trace", MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_traceRx))
-
-    .AddTraceSource ("Tx", "Transmit trace", MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_traceTx))
+    .AddTraceSource ("Rx", "Receive trace",
+                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_traceRx),
+                     "ns3::PacketBurst::Traced::Ptr")
+    .AddTraceSource ("Tx", "Transmit trace",
+                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_traceTx),
+                     "ns3::PacketBurst::TracedCallback")
 
     .AddTraceSource ("PhyTxBegin",
                      "Trace source indicating a packet has begun transmitting over the channel medium",
-                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyTxBeginTrace))
+                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyTxBeginTrace),
+                     "ns3::PacketBurst::TracedCallback")
 
     .AddTraceSource ("PhyTxEnd",
                      "Trace source indicating a packet has been completely transmitted over the channel",
-                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyTxEndTrace))
+                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyTxEndTrace),
+                     "ns3::PacketBurst::TracedCallback")
 
     .AddTraceSource ("PhyTxDrop",
                      "Trace source indicating a packet has been dropped by the device during transmission",
-                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyTxDropTrace))
+                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyTxDropTrace),
+                     "ns3::PacketBurst::TracedCallback")
 
     .AddTraceSource ("PhyRxBegin",
                      "Trace source indicating a packet has begun being received from the channel medium by the device",
-                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyRxBeginTrace))
+                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyRxBeginTrace),
+                     "ns3::PacketBurst::TracedCallback")
 
     .AddTraceSource ("PhyRxEnd",
                      "Trace source indicating a packet has been completely received from the channel medium by the device",
-                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyRxEndTrace))
+                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyRxEndTrace),
+                     "ns3::PacketBurst::TracedCallback")
 
     .AddTraceSource ("PhyRxDrop",
                      "Trace source indicating a packet has been dropped by the device during reception",
-                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyRxDropTrace));
+                     MakeTraceSourceAccessor (&SimpleOfdmWimaxPhy::m_phyRxDropTrace),
+                     "ns3::PacketBurst::TracedCallback");
   return tid;
 }
 
diff -Naur ns-3.21/src/wimax/model/snr-to-block-error-rate-manager.cc ns-3.22/src/wimax/model/snr-to-block-error-rate-manager.cc
--- ns-3.21/src/wimax/model/snr-to-block-error-rate-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/snr-to-block-error-rate-manager.cc	2015-02-05 15:46:23.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/assert.h"
 #include <fstream>
 
-NS_LOG_COMPONENT_DEFINE ("SNRToBlockErrorRateManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SNRToBlockErrorRateManager");
+
 SNRToBlockErrorRateManager::SNRToBlockErrorRateManager (void)
 {
 
diff -Naur ns-3.21/src/wimax/model/snr-to-block-error-rate-manager.h ns-3.22/src/wimax/model/snr-to-block-error-rate-manager.h
--- ns-3.21/src/wimax/model/snr-to-block-error-rate-manager.h	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/snr-to-block-error-rate-manager.h	2015-02-05 15:46:23.000000000 -0800
@@ -31,17 +31,26 @@
 
 /**
  * \ingroup wimax
- * \brief This class handles the  SNR to BlcER traces.  A path to a repository containing trace files should be provided.
- * If no repository is provided the traces form default-traces.h will be loaded.
- * A valid repository should contain 7 files, one for each modulation and coding scheme.
- * The names of the files should respect the following format: modulation0.txt for modulation 0, modulation1.txt for
- * modulation 1 and so on...
- * The files format should be as follows
- * SNR_value(1)   BER(1)    Blc_ER(1)    STANDARD_DEVIATION(1)    CONFIDENCE_INTERVAL1(1)    CONFIDENCE_INTERVAL2(1)
- * SNR_value(2)   BER(2)    Blc_ER(2)    STANDARD_DEVIATION(2)    CONFIDENCE_INTERVAL1(2)    CONFIDENCE_INTERVAL2(2)
- *  ...           ...       ...          ...                      ...                        ...
- *  ...           ...       ...          ...                      ...                        ...
- * SNR_value(n)   BER(n)    Blc_ER(n)    STANDARD_DEVIATION(n)    CONFIDENCE_INTERVAL1(n)    CONFIDENCE_INTERVAL2(n)
+ * \brief This class handles the  SNR to BlcER traces.
+ *
+ * A path to a repository containing trace files should be provided.
+ * If no repository is provided the traces from default-traces.h will be loaded.
+ * A valid repository should contain 7 files, one for each modulation
+ * and coding scheme.
+ *
+ * The names of the files should respect the following format:
+ * \c modulation<modulation-and-conding-index>.txt, _e.g._
+ * \c modulation0.txt, \c modulation1.txt, _etc._ for
+ * modulation 0, modulation 1, and so on...
+ * 
+ * The file format is ASCII with six columns as follows:
+ *
+ * -#  The SNR value,
+ * -#  The bit error rate BER,
+ * -#  The block error rate BlcERm,
+ * -#  The standard deviation on block error rate,
+ * -#  The lower bound confidence interval for a given modulation, and
+ * -#  The upper bound confidence interval for a given modulation.
  */
 class SNRToBlockErrorRateManager
 {
diff -Naur ns-3.21/src/wimax/model/ss-link-manager.cc ns-3.22/src/wimax/model/ss-link-manager.cc
--- ns-3.21/src/wimax/model/ss-link-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/ss-link-manager.cc	2015-02-05 15:46:23.000000000 -0800
@@ -31,10 +31,10 @@
 #include "burst-profile-manager.h"
 #include "service-flow-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("SSLinkManager");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SSLinkManager");
+
 NS_OBJECT_ENSURE_REGISTERED (SSLinkManager);
 
 TypeId SSLinkManager::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/ss-manager.cc ns-3.22/src/wimax/model/ss-manager.cc
--- ns-3.21/src/wimax/model/ss-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/ss-manager.cc	2015-02-05 15:46:23.000000000 -0800
@@ -25,9 +25,10 @@
 #include "ns3/log.h"
 #include "service-flow.h"
 
-NS_LOG_COMPONENT_DEFINE ("SSManager");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("SSManager");
+  
 NS_OBJECT_ENSURE_REGISTERED (SSManager);
 
 TypeId SSManager::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/ss-net-device.cc ns-3.22/src/wimax/model/ss-net-device.cc
--- ns-3.21/src/wimax/model/ss-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/ss-net-device.cc	2015-02-05 15:46:23.000000000 -0800
@@ -42,10 +42,10 @@
 #include "ss-link-manager.h"
 #include "bandwidth-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("SubscriberStationNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SubscriberStationNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (SubscriberStationNetDevice);
 
 Time SubscriberStationNetDevice::GetDefaultLostDlMapInterval ()
@@ -183,22 +183,27 @@
 
     .AddTraceSource ("SSTxDrop",
                      "A packet has been dropped in the MAC layer before being queued for transmission.",
-                     MakeTraceSourceAccessor (&SubscriberStationNetDevice::m_ssTxDropTrace))
+                     MakeTraceSourceAccessor (&SubscriberStationNetDevice::m_ssTxDropTrace),
+                     "ns3::Packet::TracedCallback")
 
     .AddTraceSource ("SSPromiscRx",
                      "A packet has been received by this device, has been passed up from the physical layer "
                      "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
-                     MakeTraceSourceAccessor (&SubscriberStationNetDevice::m_ssPromiscRxTrace))
+                     MakeTraceSourceAccessor (&SubscriberStationNetDevice::m_ssPromiscRxTrace),
+                     "ns3::Packet::TracedCallback")
 
     .AddTraceSource ("SSRx",
                      "A packet has been received by this device, has been passed up from the physical layer "
                      "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
-                     MakeTraceSourceAccessor (&SubscriberStationNetDevice::m_ssRxTrace))
+                     MakeTraceSourceAccessor (&SubscriberStationNetDevice::m_ssRxTrace),
+                     "ns3::Packet::TracedCallback")
 
     .AddTraceSource ("SSRxDrop",
                      "A packet has been dropped in the MAC layer after it has been passed up from the physical "
                      "layer.",
-                     MakeTraceSourceAccessor (&SubscriberStationNetDevice::m_ssRxDropTrace));
+                     MakeTraceSourceAccessor (&SubscriberStationNetDevice::m_ssRxDropTrace),
+                     "ns3::Packet::TracedCallback")
+    ;
   return tid;
 }
 
diff -Naur ns-3.21/src/wimax/model/ss-scheduler.cc ns-3.22/src/wimax/model/ss-scheduler.cc
--- ns-3.21/src/wimax/model/ss-scheduler.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/ss-scheduler.cc	2015-02-05 15:46:23.000000000 -0800
@@ -31,9 +31,10 @@
 #include "service-flow-record.h"
 #include "service-flow-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("SSScheduler");
-
 namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("SSScheduler");
+  
 NS_OBJECT_ENSURE_REGISTERED (SSScheduler);
 
 TypeId SSScheduler::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/ss-service-flow-manager.cc ns-3.22/src/wimax/model/ss-service-flow-manager.cc
--- ns-3.21/src/wimax/model/ss-service-flow-manager.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/ss-service-flow-manager.cc	2015-02-05 15:46:23.000000000 -0800
@@ -38,10 +38,11 @@
 #include "ss-scheduler.h"
 #include "ns3/buffer.h"
 #include "service-flow-record.h"
-NS_LOG_COMPONENT_DEFINE ("SsServiceFlowManager");
 
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("SsServiceFlowManager");
+
 SsServiceFlowManager::SsServiceFlowManager (Ptr<SubscriberStationNetDevice> device)
   : m_device (device),
     m_maxDsaReqRetries (100),
diff -Naur ns-3.21/src/wimax/model/wimax-channel.cc ns-3.22/src/wimax/model/wimax-channel.cc
--- ns-3.21/src/wimax/model/wimax-channel.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/wimax-channel.cc	2015-02-05 15:46:23.000000000 -0800
@@ -23,10 +23,10 @@
 #include "wimax-channel.h"
 #include "wimax-phy.h"
 
-NS_LOG_COMPONENT_DEFINE ("WimaxChannel");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WimaxChannel");
+
 NS_OBJECT_ENSURE_REGISTERED (WimaxChannel);
 
 TypeId WimaxChannel::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/wimax-mac-queue.cc ns-3.22/src/wimax/model/wimax-mac-queue.cc
--- ns-3.21/src/wimax/model/wimax-mac-queue.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/wimax-mac-queue.cc	2015-02-05 15:46:23.000000000 -0800
@@ -27,10 +27,10 @@
 #include "ns3/simulator.h"
 #include "ns3/log.h"
 
-NS_LOG_COMPONENT_DEFINE ("WimaxMacQueue");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WimaxMacQueue");
+
 NS_OBJECT_ENSURE_REGISTERED (WimaxMacQueue);
 
 WimaxMacQueue::QueueElement::QueueElement (void)
@@ -88,13 +88,16 @@
       MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("Enqueue",
                      "Enqueue trace",
-                     MakeTraceSourceAccessor (&WimaxMacQueue::m_traceEnqueue))
+                     MakeTraceSourceAccessor (&WimaxMacQueue::m_traceEnqueue),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("Dequeue",
                      "Dequeue trace",
-                     MakeTraceSourceAccessor (&WimaxMacQueue::m_traceDequeue))
+                     MakeTraceSourceAccessor (&WimaxMacQueue::m_traceDequeue),
+                     "ns3::Packet::TracedCallback")
     .AddTraceSource ("Drop",
                      "Drop trace",
-                     MakeTraceSourceAccessor (&WimaxMacQueue::m_traceDrop))
+                     MakeTraceSourceAccessor (&WimaxMacQueue::m_traceDrop),
+                     "ns3::Packet::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.21/src/wimax/model/wimax-net-device.cc ns-3.22/src/wimax/model/wimax-net-device.cc
--- ns-3.21/src/wimax/model/wimax-net-device.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/wimax-net-device.cc	2015-02-05 15:46:23.000000000 -0800
@@ -39,10 +39,10 @@
 #include "connection-manager.h"
 #include "bandwidth-manager.h"
 
-NS_LOG_COMPONENT_DEFINE ("WimaxNetDevice");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WimaxNetDevice");
+
 NS_OBJECT_ENSURE_REGISTERED (WimaxNetDevice);
 
 uint32_t WimaxNetDevice::m_nrFrames = 0;
@@ -120,9 +120,15 @@
                    MakePointerAccessor (&WimaxNetDevice::m_broadcastConnection),
                    MakePointerChecker<WimaxConnection> ())
 
-    .AddTraceSource ("Rx", "Receive trace", MakeTraceSourceAccessor (&WimaxNetDevice::m_traceRx))
-
-    .AddTraceSource ("Tx", "Transmit trace", MakeTraceSourceAccessor (&WimaxNetDevice::m_traceTx));
+    .AddTraceSource ("Rx",
+                     "Receive trace",
+                     MakeTraceSourceAccessor (&WimaxNetDevice::m_traceRx),
+                     "ns3::Packet::TracedCallback")
+
+    .AddTraceSource ("Tx",
+                     "Transmit trace",
+                     MakeTraceSourceAccessor (&WimaxNetDevice::m_traceTx),
+                     "ns3::Packet::TracedCallback");
   return tid;
 }
 
diff -Naur ns-3.21/src/wimax/model/wimax-phy.cc ns-3.22/src/wimax/model/wimax-phy.cc
--- ns-3.21/src/wimax/model/wimax-phy.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/wimax-phy.cc	2015-02-05 15:46:23.000000000 -0800
@@ -30,10 +30,10 @@
 #include "ns3/uinteger.h"
 #include "ns3/double.h"
 
-NS_LOG_COMPONENT_DEFINE ("WimaxPhy");
-
 namespace ns3 {
 
+NS_LOG_COMPONENT_DEFINE ("WimaxPhy");
+
 NS_OBJECT_ENSURE_REGISTERED (WimaxPhy);
 
 TypeId WimaxPhy::GetTypeId (void)
diff -Naur ns-3.21/src/wimax/model/wimax-tlv.cc ns-3.22/src/wimax/model/wimax-tlv.cc
--- ns-3.21/src/wimax/model/wimax-tlv.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wimax/model/wimax-tlv.cc	2015-02-05 15:46:23.000000000 -0800
@@ -21,11 +21,11 @@
 
 #include "wimax-tlv.h"
 
-NS_LOG_COMPONENT_DEFINE ("Tlv");
-
 namespace ns3 {
-// NS_OBJECT_ENSURE_REGISTERED ("Tlv")
-//    ;
+
+NS_LOG_COMPONENT_DEFINE ("Tlv");
+  
+// NS_OBJECT_ENSURE_REGISTERED ("Tlv");
 
 TypeId Tlv::GetInstanceTypeId (void) const
 {
diff -Naur ns-3.21/src/wscript ns-3.22/src/wscript
--- ns-3.21/src/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/src/wscript	2015-02-05 15:46:23.000000000 -0800
@@ -442,7 +442,7 @@
 def apply_ns3header(self):
     if self.module is None:
         raise WafError("'module' missing on ns3headers object %s" % self)
-    ns3_dir_node = self.bld.path.find_dir("ns3")
+    ns3_dir_node = self.bld.path.find_or_declare("ns3")
     for filename in set(self.to_list(self.source)):
         src_node = self.path.find_resource(filename)
         if src_node is None:
@@ -530,6 +530,98 @@
             return 0
 
 
+@TaskGen.feature('ns3privateheader')
+@TaskGen.after_method('process_rule')
+def apply_ns3privateheader(self):
+    if self.module is None:
+        raise WafError("'module' missing on ns3headers object %s" % self)
+    ns3_dir_node = self.bld.path.find_or_declare("ns3/private")
+    for filename in set(self.to_list(self.source)):
+        src_node = self.path.find_resource(filename)
+        if src_node is None:
+            raise WafError("source ns3 header file %s not found" % (filename,))
+        dst_node = ns3_dir_node.find_or_declare(src_node.name)
+        assert dst_node is not None
+        task = self.create_task('ns3privateheader')
+        task.mode = getattr(self, 'mode', 'install')
+        if task.mode == 'install':
+            task.set_inputs([src_node])
+            task.set_outputs([dst_node])
+        else:
+            task.header_to_remove = dst_node
+    self.headers = set(self.to_list(self.source))
+    self.source = '' # tell WAF not to process these files further
+
+class ns3privateheader_task(Task.Task):
+    before = 'cxx gen_ns3_module_header'
+    after = 'ns3_header'
+    color = 'BLUE'
+
+    def __str__(self):
+        "string to display to the user"
+        env = self.env
+        src_str = ' '.join([a.nice_path(env) for a in self.inputs])
+        tgt_str = ' '.join([a.nice_path(env) for a in self.outputs])
+        if self.outputs: sep = ' -> '
+        else: sep = ''
+        if self.mode == 'remove':
+            return 'rm-ns3-header %s\n' % (self.header_to_remove.abspath(),)
+        return 'install-ns3-header: %s%s%s\n' % (src_str, sep, tgt_str)
+
+    def __repr__(self):
+        return str(self)
+
+    def uid(self):
+        try:
+            return self.uid_
+        except AttributeError:
+            m = Utils.md5()
+            up = m.update
+            up(self.__class__.__name__.encode())
+            for x in self.inputs + self.outputs:
+                up(x.abspath().encode())
+            up(self.mode)
+            if self.mode == 'remove':
+                up(self.header_to_remove.abspath().encode())
+            self.uid_ = m.digest()
+            return self.uid_
+
+    def runnable_status(self):
+        if self.mode == 'remove':
+            if os.path.exists(self.header_to_remove.abspath()):
+                return Task.RUN_ME
+            else:
+                return Task.SKIP_ME
+        else:
+            return super(ns3privateheader_task, self).runnable_status()
+
+    def run(self):
+        if self.mode == 'install':
+            assert len(self.inputs) == len(self.outputs)
+            inputs = [node.abspath() for node in self.inputs]
+            outputs = [node.abspath() for node in self.outputs]
+            for src, dst in zip(inputs, outputs):
+                try:
+                    os.chmod(dst, 0600)
+                except OSError:
+                    pass
+                shutil.copy2(src, dst)
+                ## make the headers in builddir read-only, to prevent
+                ## accidental modification
+                os.chmod(dst, 0400)
+            return 0
+        else:
+            assert len(self.inputs) == 0
+            assert len(self.outputs) == 0
+            out_file_name = self.header_to_remove.abspath()
+            try:
+                os.unlink(out_file_name)
+            except OSError, ex:
+                if ex.errno != 2:
+                    raise
+            return 0
+
+
 class gen_ns3_module_header_task(Task.Task):
     before = 'cxx'
     after = 'ns3header'
@@ -616,7 +708,7 @@
 @TaskGen.after_method('process_rule')
 def apply_ns3moduleheader(self):
     ## get all of the ns3 headers
-    ns3_dir_node = self.bld.path.find_dir("ns3")
+    ns3_dir_node = self.bld.path.find_or_declare("ns3")
     all_headers_inputs = []
     found_the_module = False
     for ns3headers in self.bld.all_task_gen:
diff -Naur ns-3.21/test.py ns-3.22/test.py
--- ns-3.21/test.py	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/test.py	2015-02-05 15:46:23.000000000 -0800
@@ -1772,13 +1772,17 @@
     # Repeat summary of skipped, failed, crashed, valgrind events 
     #
     if skipped_testnames:
-        print 'List of SKIPped tests: %s' % ' '.join(map(str, skipped_testnames))
+        skipped_testnames.sort()
+        print 'List of SKIPped tests: %s' % '\n    '.join(map(str, skipped_testnames))
     if failed_testnames:
-        print 'List of FAILed tests: %s' % ' '.join(map(str, failed_testnames))
+        failed_testnames.sort()
+        print 'List of FAILed tests: %s' % '\n    '.join(map(str, failed_testnames))
     if crashed_testnames:
-        print 'List of CRASHed tests: %s' % ' '.join(map(str, crashed_testnames))
+        crashed_testnames.sort()
+        print 'List of CRASHed tests: %s' % '\n    '.join(map(str, crashed_testnames))
     if valgrind_testnames:
-        print 'List of VALGR failures: %s' % ' '.join(map(str, valgrind_testnames))
+        valgrind_testnames.sort()
+        print 'List of VALGR failures: %s' % '\n    '.join(map(str, valgrind_testnames))
     #
     # The last things to do are to translate the XML results file to "human
     # readable form" if the user asked for it (or make an XML file somewhere)
diff -Naur ns-3.21/utils/print-introspected-doxygen.cc ns-3.22/utils/print-introspected-doxygen.cc
--- ns-3.21/utils/print-introspected-doxygen.cc	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/utils/print-introspected-doxygen.cc	2015-02-05 15:46:23.000000000 -0800
@@ -1,16 +1,38 @@
+/* -*- 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
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
 #include <iostream>
 #include <algorithm>
 #include <map>
+#include <climits>    // CHAR_BIT
 
-#include "ns3/object.h"
-#include "ns3/pointer.h"
-#include "ns3/object-vector.h"
+#include "ns3/command-line.h"
 #include "ns3/config.h"
-#include "ns3/log.h"
 #include "ns3/global-value.h"
+#include "ns3/log.h"
+#include "ns3/object-vector.h"
+#include "ns3/object.h"
+#include "ns3/pointer.h"
 #include "ns3/string.h"
 #include "ns3/node-container.h"
-#include "ns3/csma-channel.h"
+#include "ns3/simple-channel.h"
 
 using namespace ns3;
 
@@ -18,58 +40,173 @@
 
 namespace
 {
-  std::string anchor;                        ///< hyperlink anchor
-  std::string boldStart;                     ///< start of bold span
-  std::string boldStop;                      ///< end of bold span
-  std::string breakBoth;                     ///< linebreak
-  std::string breakHtmlOnly;                 ///< linebreak for html output only
-  std::string breakTextOnly;                 ///< linebreak for text output only
-  std::string brief;                         ///< brief tag
-  std::string commentStart;                  ///< start of code comment
-  std::string commentStop;                   ///< end of code comment
-  std::string flagSpanStart;                 ///< start of Attribute flag value
-  std::string flagSpanStop;                  ///< end of Attribute flag value
-  std::string functionStart;                 ///< start of a class/function
-  std::string functionStop;                  ///< end of a class/function
-  std::string headingStart;                  ///< start of section heading (h3)
-  std::string headingStop;                   ///< end of section heading (h3)
-  std::string indentHtmlOnly;                ///< small indent
-  std::string pageAttributeList;             ///< start Attributes list
-  std::string pageGlobalValueList;           ///< start GlobalValue page
-  std::string pageTraceSourceList;           ///< start Trace sources page
-  std::string listStart;                     ///< start unordered list
-  std::string listStop;                      ///< end unordered list
-  std::string listLineStart;                 ///< start unordered list item
-  std::string listLineStop;                  ///< end unordered list item
-  std::string reference;                     ///< reference tag
-  std::string temporaryCharacter;            ///< "%" placeholder
+  std::string anchor;              ///< hyperlink anchor
+  std::string argument;            ///< function argument
+  std::string boldStart;           ///< start of bold span
+  std::string boldStop;            ///< end of bold span
+  std::string breakBoth;           ///< linebreak
+  std::string breakHtmlOnly;       ///< linebreak for html output only
+  std::string breakTextOnly;       ///< linebreak for text output only
+  std::string brief;               ///< brief tag
+  std::string classStart;          ///< start of a class
+  std::string classStop;           ///< end of a class
+  std::string codeWord;            ///< format next word as source code
+  std::string commentStart;        ///< start of code comment
+  std::string commentStop;         ///< end of code comment
+  std::string copyDoc;             ///< copy (or refer) to docs elsewhere
+  std::string flagSpanStart;       ///< start of Attribute flag value
+  std::string flagSpanStop;        ///< end of Attribute flag value
+  std::string functionStart;       ///< start of a method/function
+  std::string functionStop;        ///< end of a method/function
+  std::string headingStart;        ///< start of section heading (h3)
+  std::string headingStop;         ///< end of section heading (h3)
+  std::string indentHtmlOnly;      ///< small indent
+  std::string listLineStart;       ///< start unordered list item
+  std::string listLineStop;        ///< end unordered list item
+  std::string listStart;           ///< start unordered list
+  std::string listStop;            ///< end unordered list
+  std::string page;                ///< start a separate page
+  std::string reference;           ///< reference tag
+  std::string returns;             ///< the return value
+  std::string sectionStart;        ///< start of a section or group
+  std::string seeAlso;             ///< Reference to other docs
+  std::string subSectionStart;     ///< start a new subsection
+  std::string variable;            ///< variable or class member
 
 } // anonymous namespace
 
+
+/**
+ * Initialize the markup strings, for either doxygen or text.
+ *
+ * \param [in] outputText true for text output, false for doxygen output.
+ */
 void
-PrintAttributes (TypeId tid, std::ostream &os)
+SetMarkup (bool outputText)
 {
+  NS_LOG_FUNCTION (outputText);
+  if (outputText)
+    {
+      anchor                       = "";
+      argument                     = "  Arg: ";
+      boldStart                    = "";
+      boldStop                     = "";
+      breakBoth                    = "\n";
+      breakHtmlOnly                = "";
+      breakTextOnly                = "\n";
+      brief                        = "";
+      classStart                   = "";
+      classStop                    = "\n\n";
+      codeWord                     = " ";
+      commentStart                 = "===============================================================\n";
+      commentStop                  = "";
+      copyDoc                      = "  See: ";
+      flagSpanStart                = "";
+      flagSpanStop                 = "";
+      functionStart                = "";
+      functionStop                 = "\n\n";
+      headingStart                 = "";
+      headingStop                  = "";
+      indentHtmlOnly               = "";
+      page                         = "Page ";
+      listStart                    = "";
+      listStop                     = "";
+      listLineStart                = "    * ";
+      listLineStop                 = "";
+      reference                    = " ";
+      returns                      = "  Returns: ";
+      sectionStart                 = "Section ";
+      seeAlso                      = "  See: ";
+      subSectionStart              = "Subsection ";
+      variable                     = "Variable: ";
+    }
+  else
+    {
+      anchor                       = "\\anchor ";
+      argument                     = "\\param ";
+      boldStart                    = "<b>";
+      boldStop                     = "</b>";
+      breakBoth                    = "<br>";
+      breakHtmlOnly                = "<br>";
+      breakTextOnly                = "";
+      brief                        = "\\brief ";
+      classStart                   = "\\class ";
+      classStop                    = "";
+      codeWord                     = "\\p ";
+      commentStart                 = "/*!\n";
+      commentStop                  = "*/\n";
+      copyDoc                      = "\\copydoc ";
+      flagSpanStart                = "<span class=\"mlabel\">";
+      flagSpanStop                 = "</span>";
+      functionStart                = "\\fn ";
+      functionStop                 = "";
+      headingStart                 = "<h3>";
+      headingStop                  = "</h3>";
+      indentHtmlOnly               = "  ";
+      page                         = "\\page ";
+      listStart                    = "<ul>";
+      listStop                     = "</ul>";
+      listLineStart                = "<li>";
+      listLineStop                 = "</li>";
+      reference                    = " \\ref ";
+      returns                      = "\\returns ";
+      sectionStart                 = "\\ingroup ";
+      seeAlso                      = "\\see ";
+      subSectionStart              = "\\addtogroup ";
+      variable                     = "\\var ";
+    }
+}  // SetMarkup ()
+
+
+/***************************************************************
+ *        Docs for a single TypeId
+ ***************************************************************/
+
+/**
+ * Print direct Attributes for this TypeId.
+ *
+ * Only attributes defined directly by this TypeId will be printed.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] tid The TypeId to print.
+ */
+void
+PrintAttributesTid (std::ostream &os, const TypeId tid)
+{
+  NS_LOG_FUNCTION (tid);
   os << listStart << std::endl;
   for (uint32_t j = 0; j < tid.GetAttributeN (); j++)
     {
       struct TypeId::AttributeInformation info = tid.GetAttribute(j);
-      os << listLineStart << boldStart << info.name << boldStop << ": "
-		<< info.help << std::endl;
-      os << "  " << listStart << std::endl 
-	 << "    " << listLineStart << "Set with class: " << reference << info.checker->GetValueTypeName () << listLineStop << std::endl;
+      os << listLineStart
+	 <<   boldStart << info.name << boldStop << ": "
+	 <<   info.help
+	 <<   std::endl;
+      os <<   "  "
+	 <<   listStart << std::endl;
+      os <<     "    "
+	 <<     listLineStart
+	 <<       "Set with class: " << reference
+	 <<       info.checker->GetValueTypeName ()
+	 <<     listLineStop
+	 << std::endl;
       if (info.checker->HasUnderlyingTypeInformation ())
 	{
-	  os << "    " << listLineStart << "Underlying type: ";
-	  if (    (info.checker->GetValueTypeName () != "ns3::EnumValue")
-	       && (info.checker->GetUnderlyingTypeInformation () != "std::string")
-	      )
+	  os << "    "
+	     << listLineStart
+	     <<   "Underlying type: ";
+          
+          std::string valType = info.checker->GetValueTypeName ();
+          std::string underType = info.checker->GetUnderlyingTypeInformation ();
+	  if ((valType   != "ns3::EnumValue") && (underType != "std::string"))
 	    {
-	      // Two indirect cases to handle
+	      // Indirect cases to handle
 	      bool handled = false;
-
-	      if (info.checker->GetValueTypeName () == "ns3::PointerValue")
+              
+	      if (valType == "ns3::PointerValue")
 		{
-		  const PointerChecker *ptrChecker = dynamic_cast<const PointerChecker *> (PeekPointer (info.checker));
+		  const PointerChecker *ptrChecker =
+		    dynamic_cast<const PointerChecker *> (PeekPointer (info.checker));
 		  if (ptrChecker != 0)
 		    {
 		      os << reference << "ns3::Ptr" << "< "
@@ -78,9 +215,10 @@
 		      handled = true;
 		    }
 		}
-	      else if (info.checker->GetValueTypeName () == "ns3::ObjectPtrContainerValue")
+	      else if (valType == "ns3::ObjectPtrContainerValue")
 		{
-		  const ObjectPtrContainerChecker * ptrChecker = dynamic_cast<const ObjectPtrContainerChecker *> (PeekPointer (info.checker));
+		  const ObjectPtrContainerChecker * ptrChecker =
+		    dynamic_cast<const ObjectPtrContainerChecker *> (PeekPointer (info.checker));
 		  if (ptrChecker != 0)
 		    {
 		      os << reference << "ns3::Ptr" << "< "
@@ -89,16 +227,47 @@
 		      handled = true;
 		    }
 		}
+              // Helper to match first part of string
+              class StringBeginMatcher
+              {
+              public:
+                StringBeginMatcher (const std::string s)
+                  : m_string (s) { };
+                bool operator () (const std::string t)
+                {
+                  std::size_t pos = m_string.find (t);
+                  return pos == 0;
+                };
+              private:
+                std::string m_string;
+              };
+              StringBeginMatcher match (underType);
+                  
+              if ( match ("bool")     || match ("double")   ||
+                   match ("int8_t")   || match ("uint8_t")  ||
+                   match ("int16_t")  || match ("uint16_t") ||
+                   match ("int32_t")  || match ("uint32_t") ||
+                   match ("int64_t")  || match ("uint64_t")
+                   )
+                {
+                  os << underType;
+                  handled = true;
+                }
 	      if (! handled)
 		{
-		  os << reference << info.checker->GetUnderlyingTypeInformation ();
+		  os << reference << underType;
 		}
 	    }
 	  os << listLineStop << std::endl;
 	}
       if (info.flags & TypeId::ATTR_CONSTRUCT && info.accessor->HasSetter ())
 	{
-	  os << "    " << listLineStart << "Initial value: " << info.initialValue->SerializeToString (info.checker) << listLineStop << std::endl;
+	  os << "    "
+	     << listLineStart
+	     <<   "Initial value: "
+	     <<   info.initialValue->SerializeToString (info.checker)
+	     << listLineStop
+	     << std::endl;
 	}
       os << "    " << listLineStart << "Flags: ";
       if (info.flags & TypeId::ATTR_CONSTRUCT && info.accessor->HasSetter ())
@@ -114,29 +283,654 @@
 	  os << flagSpanStart << "read " << flagSpanStop;
 	}
       os << listLineStop << std::endl;
-      os << "  " << listStop << " " << std::endl;
+      os << "  "
+	 << listStop
+	 << " " << std::endl;
       
     }
   os << listStop << std::endl;
-}
+}  // PrintAttributesTid ()
 
+
+/**
+ * Print the Attributes block for tid,
+ * including Attributes declared in base classes.
+ *
+ * All Attributes of this TypeId will be printed,
+ * including those defined in parent classes.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] tid The TypeId to print.
+ */
 void
-PrintTraceSources (TypeId tid, std::ostream &os)
+PrintAttributes (std::ostream & os, const TypeId tid)
 {
+  NS_LOG_FUNCTION (tid);
+  if (tid.GetAttributeN () == 0)
+    {
+      os << "No Attributes are defined for this type."
+	 << breakBoth
+	 << std::endl;
+    }
+  else
+    {
+      os << headingStart
+	 <<   "Attributes"
+	 << headingStop
+	 << std::endl;
+      PrintAttributesTid (os, tid);
+    }
+
+  // Attributes from base classes
+  TypeId tmp = tid.GetParent ();
+  while (tmp.GetParent () != tmp)
+    {
+      if (tmp.GetAttributeN () != 0)
+	{
+	  os << headingStart
+	     <<   "Attributes defined in parent class "
+	     <<   tmp.GetName ()
+	     << headingStop
+	     << std::endl;
+	  PrintAttributesTid (os, tmp);
+	}
+      tmp = tmp.GetParent ();
+
+    }  // Attributes
+} // PrintAttributes ()
+
+
+/**
+ * Print direct Trace sources for this TypeId.
+ *
+ * Only Trace sources defined directly by this TypeId will be printed.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] tid The TypeId to print.
+ */
+void
+PrintTraceSourcesTid (std::ostream & os, const TypeId tid)
+{
+  NS_LOG_FUNCTION (tid);
   os << listStart << std::endl;
   for (uint32_t i = 0; i < tid.GetTraceSourceN (); ++i)
     {
       struct TypeId::TraceSourceInformation info = tid.GetTraceSource (i);
-      os << listLineStart << boldStart << info.name << boldStop << ": "
-	 << info.help
-	 << std::endl;
+      os << listLineStart
+	 <<   boldStart << info.name << boldStop << ": "
+	 <<   info.help << breakBoth
+	//    '%' prevents doxygen from linking to the Callback class...
+	 <<   "%Callback signature: " 
+	 <<   info.callback
+	 <<   std::endl;
       os << listLineStop << std::endl;
     }
   os << listStop << std::endl;
-}
+}  // PrintTraceSourcesTid ()
+
+
+/**
+ * Print the Trace sources block for tid,
+ * including Trace sources declared in base classes.
+ *
+ * All Trace sources of this TypeId will be printed,
+ * including those defined in parent classes.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] tid The TypeId to print.
+ */
+void
+PrintTraceSources (std::ostream & os, const TypeId tid)
+{
+  NS_LOG_FUNCTION (tid);
+  if (tid.GetTraceSourceN () == 0)
+    {
+      os << "No TraceSources are defined for this type."
+	 << breakBoth
+	 << std::endl;
+    }
+  else
+    {
+      os << headingStart
+	 <<   "TraceSources"
+	 << headingStop  << std::endl;
+      PrintTraceSourcesTid (os, tid);
+    }
+
+  // Trace sources from base classes
+  TypeId tmp = tid.GetParent ();
+  while (tmp.GetParent () != tmp)
+    {
+      if (tmp.GetTraceSourceN () != 0)
+	{
+	  os << headingStart
+	     << "TraceSources defined in parent class "
+	     << tmp.GetName ()
+	     << headingStop << std::endl;
+	  PrintTraceSourcesTid (os, tmp);
+	}
+      tmp = tmp.GetParent ();
+    }
+
+}  // PrintTraceSources ()
+
+/**
+ * Print the size of the type represented by this tid.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] tid The TypeId to print.
+ */
+void PrintSize (std::ostream & os, const TypeId tid)
+{
+  NS_LOG_FUNCTION (tid);
+  NS_ASSERT_MSG (CHAR_BIT != 0, "CHAR_BIT is zero");
+  
+  std::size_t arch = (sizeof (void *) * CHAR_BIT);
+  
+  os << boldStart << "Size" << boldStop
+     << " of this type is " << tid.GetSize ()
+     << " bytes (on a " << arch << "-bit architecture)."
+     << std::endl;
+}  // PrintSize ()
+
+
+/***************************************************************
+ *        Lists of All things
+ ***************************************************************/
+
+/**
+ * Print the list of all Attributes.
+ *
+ * \param [in,out] os The output stream.
+ */
+void
+PrintAllAttributes (std::ostream & os)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  os << commentStart << page << "AttributeList All Attributes\n"
+     << std::endl;
+  os << "This is a list of all" << reference << "attribute by class.  "
+     << "For more information see the" << reference << "attribute "
+     << "section of this API documentation and the Attributes sections "
+     << "in the Tutorial and Manual.\n"
+     << std::endl;
+
+  for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
+    {
+      TypeId tid = TypeId::GetRegistered (i);
+      if (tid.GetAttributeN () == 0 ||
+	  tid.MustHideFromDocumentation ())
+	{
+	  continue;
+	}
+      os << boldStart << tid.GetName () << boldStop << breakHtmlOnly
+	 << std::endl;
+      
+      os << listStart << std::endl;
+      for (uint32_t j = 0; j < tid.GetAttributeN (); ++j)
+	{
+	  struct TypeId::AttributeInformation info = tid.GetAttribute(j);
+	  os << listLineStart
+	     <<   boldStart << info.name << boldStop
+	     <<   ": "      << info.help
+	     << listLineStop
+	     << std::endl;
+	}
+      os << listStop << std::endl;
+    }
+  os << commentStop << std::endl;
+
+}  // PrintAllAttributes ()
+
+
+/**
+ * Print the list of all global variables.
+ *
+ * \param [in,out] os The output stream.
+ */
+void
+PrintAllGlobals (std::ostream & os)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  os << commentStart << page << "GlobalValueList All GlobalValues\n"
+     << std::endl;
+  os << "This is a list of all" << reference << "ns3::GlobalValue instances.\n"
+     << std::endl;
+  
+  os << listStart << std::endl;
+  for (GlobalValue::Iterator i = GlobalValue::Begin ();
+       i != GlobalValue::End ();
+       ++i)
+    {
+      StringValue val;
+      (*i)->GetValue (val);
+      os << indentHtmlOnly
+	 <<   listLineStart
+	 <<     boldStart
+	 <<       anchor
+	 <<       "GlobalValue" << (*i)->GetName () << " " << (*i)->GetName ()
+	 <<     boldStop
+	 <<     ": "            << (*i)->GetHelp ()
+	 <<     ".  Default value: " << val.Get () << "."
+	 <<   listLineStop
+	 << std::endl;
+    }
+  os << listStop << std::endl;
+  os << commentStop << std::endl;
+
+}  // PrintAllGlobals ()
+
+
+/**
+ * Print the list of all LogComponents.
+ *
+ * \param [in,out] os The output stream.
+ */
+void
+PrintAllLogComponents (std::ostream & os)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  os << commentStart << page << "LogComponentList All LogComponents\n"
+     << std::endl;
+  os << "This is a list of all" << reference << "ns3::LogComponent instances.\n"
+     << std::endl;
+
+  /**
+   * \todo Switch to a border-less table, so the file links align
+   * See http://www.stack.nl/~dimitri/doxygen/manual/htmlcmds.html
+   */
+  os << listStart << std::endl;
+  LogComponent::ComponentList * logs = LogComponent::GetComponentList ();
+  LogComponent::ComponentList::const_iterator it;
+  for (it = logs->begin (); it != logs->end (); ++it)
+    {
+      std::string file = it->second->File ();
+      // Strip leading "../" related to depth in build directory
+      // since doxygen only sees the path starting with "src/", etc.
+      while (file.find ("../") == 0)
+        {
+          file = file.substr (3);
+        }
+      
+      os << listLineStart
+         <<   boldStart << it->first << boldStop <<   ": " << file
+         << listLineStop
+         << std::endl;
+    }
+  os << listStop << std::endl;
+  os << commentStop << std::endl;
+}  // PrintAllLogComponents ()
+
+
+/**
+ * Print the list of all Trace sources.
+ *
+ * \param [in,out] os The output stream.
+ */
+void
+PrintAllTraceSources (std::ostream & os)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  os << commentStart << page << "TraceSourceList All TraceSources\n"
+     << std::endl;
+  os << "This is a list of all" << reference << "tracing sources.  "
+     << "For more information see the " << reference << "tracing "
+     << "section of this API documentation and the Tracing sections "
+     << "in the Tutorial and Manual.\n"
+     << std::endl;
+
+  for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
+    {
+      TypeId tid = TypeId::GetRegistered (i);
+      if (tid.GetTraceSourceN () == 0 ||
+	  tid.MustHideFromDocumentation ())
+	{
+	  continue;
+	}
+      os << boldStart << tid.GetName () << boldStop  << breakHtmlOnly
+	 << std::endl;
+      
+      os << listStart << std::endl;
+      for (uint32_t j = 0; j < tid.GetTraceSourceN (); ++j)
+	{
+	  struct TypeId::TraceSourceInformation info = tid.GetTraceSource(j);
+	  os << listLineStart 
+	     <<   boldStart << info.name << boldStop
+	     <<   ": "      << info.help
+	     << listLineStop
+	     << std::endl;
+	}
+      os << listStop << std::endl;
+    }
+  os << commentStop << std::endl;
+
+}  // PrintAllTraceSources ()
+
+
+/***************************************************************
+ *        Docs for Attribute classes
+ ***************************************************************/
+
+
+/**
+ * Print the section definition for an AttributeValue.
+ *
+ * In doxygen form this will print a comment block with
+ * \verbatim
+ *   \ingroup attribute
+ *   \defgroup attribute_<name>Value <name>Value
+ * \endverbatim
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] name The base name of the resulting AttributeValue type.
+ * \param [in] seeBase Print a "see also" pointing to the base class.
+ */
+void
+PrintAttributeValueSection (std::ostream & os,
+                            const std::string & name,
+                            const bool seeBase = true)
+{
+  NS_LOG_FUNCTION (name);
+  std::string section = "attribute_" + name;
+
+  // \ingroup attribute
+  // \defgroup attribute_<name>Value <name> Attribute
+  os << commentStart << sectionStart << "attribute\n"
+     <<   subSectionStart << "attribute_" << name << " "
+     <<     name << " Attribute\n"
+     <<     "Attribute implementation for " << name << "\n";
+  if (seeBase)
+    {
+      // Some classes don't live in ns3::.  Yuck
+      if (name != "IeMeshId")
+        {
+          os << seeAlso << "ns3::" << name << "\n";
+        }
+      else
+        {
+          os << seeAlso << "ns3::dot11s::" << name << "\n";
+        }
+    }
+  os << commentStop;
+
+}  // PrintAttributeValueSection ()
+
+
+/**
+ * Print the AttributeValue documentation for a class.
+ *
+ * This will print documentation for the \p <name>Value class and methods.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] name The token to use in defining the accessor name.
+ * \param [in] type The underlying type name.
+ * \param [in] header The header file which contains this declaration.
+ */
+void
+PrintAttributeValueWithName (std::ostream & os,
+                             const std::string & name,
+                             const std::string & type,
+                             const std::string & header)
+{
+  NS_LOG_FUNCTION (name << type << header);
+  std::string sectAttr = sectionStart + "attribute_" + name;
+  
+  // \ingroup attribute_<name>Value
+  // \class ns3::<name>Value "header"
+  std::string valClass  = name + "Value";
+  std::string qualClass = " ns3::" + valClass;
+  
+  os << commentStart << sectAttr << std::endl;
+  os <<   classStart << qualClass << " \"" << header << "\"" << std::endl;
+  os <<   "AttributeValue implementation for " << name << "." << std::endl;
+  os <<   seeAlso << "AttributeValue" << std::endl;
+  os << commentStop;
+
+  // Copy ctor: <name>Value::<name>Value
+  os << commentStart
+     <<   functionStart << name
+     <<     qualClass << "::" << valClass;
+  if ( (name == "EmptyAttribute") ||
+       (name == "ObjectPtrContainer") )
+    {
+      // Just default constructors.
+      os << "(void)\n";
+    }
+  else
+    {
+      // Copy constructors
+      os << "(const " << type << " & value)\n"
+         << "Copy constructor.\n"
+         << argument << "[in] value The " << name << " value to copy.\n";
+    }
+  os << commentStop;
+
+  // <name>Value::Get (void) const
+  os << commentStart
+     <<   functionStart << type
+     <<     qualClass << "::Get (void) const\n"
+     <<   returns << "The " << name << " value.\n"
+     << commentStop;
+
+  // <name>Value::GetAccessor (T & value) const
+  os << commentStart
+     <<   functionStart << "bool"
+     <<     qualClass << "::GetAccessor (T & value) const\n"
+     <<   "Access the " << name << " value as type " << codeWord << "T.\n"
+     <<   argument << "[out] value The " << name << " value, as type "
+     <<     codeWord << "T.\n"
+     <<   returns << "true.\n"
+     << commentStop;
+
+  // <name>Value::Set (const name & value)
+  if (type != "Callback")  // Yuck
+    {
+      os << commentStart
+         <<   functionStart << "void"
+         <<     qualClass << "::Set (const " << type << " & value)\n"
+         <<   "Set the value.\n"
+         <<   argument << "[in] value The value to adopt.\n"
+         << commentStop;
+    }
+
+  // <name>Value::m_value
+  os << commentStart
+     <<   variable << type
+     <<     qualClass << "::m_value\n" 
+     <<   "The stored " << name << " instance.\n"
+     << commentStop
+     << std::endl;
+  
+}  // PrintAttributeValueWithName ()
+
+
+/**
+ * Print the AttributeValue MakeAccessor documentation for a class.
+ *
+ * This will print documentation for the \p Make<name>Accessor functions.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] name The token to use in defining the accessor name.
+ */
+void
+PrintMakeAccessors (std::ostream & os, const std::string & name)
+{
+  NS_LOG_FUNCTION (name);
+  std::string sectAttr = sectionStart + "attribute_" + name + "\n";
+  std::string make = "ns3::Make" + name + "Accessor ";
+  
+  // \ingroup attribute_<name>Value
+  // Make<name>Accessor (T1 a1)
+  os << commentStart << sectAttr
+     <<   functionStart << "ns3::Ptr<const ns3::AttributeAccessor> "
+     <<     make << "(T1 a1)\n"
+     <<   copyDoc << "ns3::MakeAccessorHelper(T1)\n"
+     <<   seeAlso << "AttributeAccessor\n"
+     << commentStop;
+
+  // \ingroup attribute_<name>Value
+  // Make<name>Accessor (T1 a1)
+  os << commentStart << sectAttr
+     <<   functionStart << "ns3::Ptr<const ns3::AttributeAccessor> "
+     <<     make << "(T1 a1, T2 a2)\n"
+     <<   copyDoc << "ns3::MakeAccessorHelper(T1,T2)\n"
+     <<   seeAlso << "AttributeAccessor\n"
+     << commentStop;
+}  // PrintMakeAccessors ()
+
+
+/**
+ * Print the AttributeValue MakeChecker documentation for a class.
+ *
+ * This will print documentation for the \p Make<name>Checker function.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] name The token to use in defining the accessor name.
+ * \param [in] header The header file which contains this declaration.
+ */
+void
+PrintMakeChecker (std::ostream & os,
+                  const std::string & name,
+                  const std::string & header)
+{
+  NS_LOG_FUNCTION (name << header);
+  std::string sectAttr = sectionStart + "attribute_" + name + "\n";
+  std::string make = "ns3::Make" + name + "Checker ";
+
+  // \ingroup attribute_<name>Value
+  // class <name>Checker
+  os << commentStart << sectAttr << std::endl;
+  os <<   classStart << " ns3::" << name << "Checker"
+     <<   " \"" << header << "\"" << std::endl;
+  os <<   "AttributeChecker implementation for " << name << "Value." << std::endl;
+  os <<   seeAlso << "AttributeChecker" << std::endl;
+  os << commentStop;
+    
+  // \ingroup attribute_<name>Value
+  // Make<name>Checker (void)
+  os << commentStart << sectAttr
+     <<   functionStart << "ns3::Ptr<const ns3::AttributeChecker> "
+     <<     make << "(void)\n"
+     <<   returns << "The AttributeChecker.\n"
+     <<   seeAlso << "AttributeChecker\n"
+     << commentStop;
+}  // PrintMakeChecker ()
+
+
+/**Descriptor for an AttributeValue. */
+typedef struct {
+  const std::string m_name;   //!< The base name of the resulting AttributeValue type.
+  const std::string m_type;   //!< The name of the underlying type.
+  const bool m_seeBase;       //!< Print a "see also" pointing to the base class.
+  const std::string m_header; //!< The header file name.
+} AttributeDescriptor;
 
 
 /**
+ * Print documentation corresponding to use of the
+ * ATTRIBUTE_HELPER_HEADER macro or
+ * ATTRIBUTE_VALUE_DEFINE_WITH_NAME macro.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] attr The AttributeDescriptor.
+ */
+void
+PrintAttributeHelper (std::ostream & os,
+                      const AttributeDescriptor & attr)
+{
+  NS_LOG_FUNCTION (attr.m_name << attr.m_type << attr.m_seeBase <<
+                   attr.m_header);
+  PrintAttributeValueSection  (os, attr.m_name, attr.m_seeBase);
+  PrintAttributeValueWithName (os, attr.m_name, attr.m_type, attr.m_header);
+  PrintMakeAccessors          (os, attr.m_name);
+  PrintMakeChecker            (os, attr.m_name, attr.m_header);
+}  // PrintAttributeHelper ()
+
+
+/**
+ * Print documentation for Attribute implementations.
+ */
+void
+PrintAttributeImplementations (std::ostream & os)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  const AttributeDescriptor attributes [] =
+    {
+      // Users of ATTRIBUTE_HELPER_HEADER
+      //
+      { "Address",        "Address",        true,  "address.h"          },
+      { "Box",            "Box",            true,  "box.h"              },
+      { "DataRate",       "DataRate",       true,  "data-rate.h"        },
+      { "HtCapabilities", "HtCapabilities", true,  "ht-capabilities.h"  },
+      { "IeMeshId",       "IeMeshId",       true,  "id-dot11s-id.h"     },
+      { "Ipv4Address",    "Ipv4Address",    true,  "ipv4-address.h"     },
+      { "Ipv4Mask",       "Ipv4Mask",       true,  "ipv4-address.h"     },
+      { "Ipv6Address",    "Ipv6Address",    true,  "ipv6-address.h"     },
+      { "Ipv6Prefix",     "Ipv6Prefix",     true,  "ipv6-address.h"     },
+      { "Mac16Address",   "Mac16Address",   true,  "mac16-address.h"    },
+      { "Mac48Address",   "Mac48Address",   true,  "mac48-address.h"    },
+      { "Mac64Address",   "Mac64Address",   true,  "mac64-address.h"    },
+      { "ObjectFactory",  "ObjectFactory",  true,  "object-factory.h"   },
+      { "OrganizationIdentifier",
+                          "OrganizationIdentifier",
+                                            true,  "vendor-specific-action.h" },
+      { "Rectangle",      "Rectangle",      true,  "rectangle.h"        },
+      { "Ssid",           "Ssid",           true,  "ssid.h"             },
+      { "TypeId",         "TypeId",         true,  "type-id.h"          },
+      { "UanModesList",   "UanModesList",   true,  "uan-tx-mode.h"      },
+      { "ValueClassTest", "ValueClassTest", false, "" /* outside ns3 */ },
+      { "Vector2D",       "Vector2D",       true,  "vector.h"           },
+      { "Vector3D",       "Vector3D",       true,  "vector.h"           },
+      { "Waypoint",       "Waypoint",       true,  "waypoint.h"         },
+      { "WifiMode",       "WifiMode",       true,  "wifi-mode.h"        },
+      
+      // All three (Value, Access and Checkers) defined, but custom
+      { "Boolean",        "Boolean",        false, "boolean.h"          },
+      { "Callback",       "Callback",       true,  "callback.h"         },
+      { "Double",         "double",         false, "double.h"           },
+      { "Enum",           "int",            false, "enum.h"             },
+      { "Integer",        "int64_t",        false, "integer.h"          },
+      { "Pointer",        "Pointer",        false, "pointer.h"          },
+      { "RandomVariable", "RandomVariable", true,  "random-variable.h"  },
+      { "String",         "std::string",    false, "string.h"           },
+      { "Time",           "Time",           true,  "nstime.h"           },
+      { "Uinteger",       "uint64_t",       false, "uinteger.h"         },
+      { "",               "",               false, "last placeholder"   }
+    };
+
+  int i = 0;
+  while (attributes[i].m_name != "")
+    {
+      PrintAttributeHelper (os, attributes[i]);
+      ++i;
+    }
+
+  // Special cases
+  PrintAttributeValueSection  (os, "EmptyAttribute", false);
+  PrintAttributeValueWithName (os, "EmptyAttribute", "EmptyAttribute",
+                                   "attribute.h");
+
+  PrintAttributeValueSection  (os, "ObjectPtrContainer", false);
+  PrintAttributeValueWithName (os, "ObjectPtrContainer", "ObjectPtrContainer", "object-ptr-container.h");
+  PrintMakeChecker            (os, "ObjectPtrContainer",  "object-ptr-container.h");
+
+  PrintAttributeValueSection  (os, "ObjectVector", false);
+  PrintMakeAccessors          (os, "ObjectVector");
+  PrintMakeChecker            (os, "ObjectVector", "object-vector.h");
+
+  PrintAttributeValueSection  (os, "ObjectMap", false);
+  PrintMakeAccessors          (os, "ObjectMap");
+  PrintMakeChecker            (os, "ObjectMap", "object-map.h");
+  
+}  // PrintAttributeImplementations ()
+
+
+/***************************************************************
+ *        Aggregation and configuration paths
+ ***************************************************************/
+
+/**
  * Gather aggregation and configuration path information from registered types.
  */
 class StaticInformation
@@ -165,7 +959,12 @@
    *
    * \param tid [in] the TypeId to return information for
    */
-  std::vector<std::string> Get (TypeId tid);
+  std::vector<std::string> Get (TypeId tid) const;
+
+  /**
+   * \return the type names we couldn't aggregate.
+   */
+  std::vector<std::string> GetNoTypeIds (void) const;
 
 private:
   /**
@@ -191,14 +990,6 @@
    */
   bool HasAlreadyBeenProcessed (TypeId tid) const;
   /**
-   * (Inplace) find and replace all instances of string
-   *
-   * \param source [inout] string to search and replace in
-   * \param find [in] string to search for
-   * \param replace [in] string to insert in place of find
-   */
-  void find_and_replace (std::string &source, const std::string find, std::string replace );
-  /**
    * Configuration path for each TypeId
    */
   std::vector<std::pair<TypeId,std::string> > m_output;
@@ -214,17 +1005,44 @@
    * List of aggregation relationships.
    */
   std::vector<std::pair<TypeId,TypeId> > m_aggregates;
-};
+  /**
+   * List of type names without TypeIds, because those modules aren't enabled.
+   *
+   * This is mutable because GetNoTypeIds sorts and uniquifies this list
+   * before returning it.
+   */
+  mutable std::vector<std::string> m_noTids;
+  
+};  // class StaticInformation
+
 
 void 
 StaticInformation::RecordAggregationInfo (std::string a, std::string b)
 {
-  m_aggregates.push_back (std::make_pair (TypeId::LookupByName (a), TypeId::LookupByName (b)));
+  NS_LOG_FUNCTION (this << a << b);
+  TypeId aTid;
+  bool found = TypeId::LookupByNameFailSafe (a, &aTid);
+  if (!found)
+    {
+      m_noTids.push_back (a);
+      return;
+    }
+  TypeId bTid;
+  found = TypeId::LookupByNameFailSafe (b, &bTid);
+  if (!found)
+    {
+      m_noTids.push_back (b);
+      return;
+    }
+
+  m_aggregates.push_back (std::make_pair (aTid, bTid));
 }
 
+
 void 
 StaticInformation::Print (void) const
 {
+  NS_LOG_FUNCTION (this);
   for (std::vector<std::pair<TypeId,std::string> >::const_iterator i = m_output.begin (); i != m_output.end (); ++i)
     {
       std::pair<TypeId,std::string> item = *i;
@@ -232,9 +1050,11 @@
     }
 }
 
+
 std::string
 StaticInformation::GetCurrentPath (void) const
 {
+  NS_LOG_FUNCTION (this);
   std::ostringstream oss;
   for (std::vector<std::string>::const_iterator i = m_currentPath.begin (); i != m_currentPath.end (); ++i)
     {
@@ -244,15 +1064,19 @@
   return oss.str ();
 }
 
+
 void
 StaticInformation::RecordOutput (TypeId tid)
 {
+  NS_LOG_FUNCTION (this << tid);
   m_output.push_back (std::make_pair (tid, GetCurrentPath ()));
 }
 
+
 bool
 StaticInformation::HasAlreadyBeenProcessed (TypeId tid) const
 {
+  NS_LOG_FUNCTION (this << tid);
   for (uint32_t i = 0; i < m_alreadyProcessed.size (); ++i)
     {
       if (m_alreadyProcessed[i] == tid)
@@ -263,9 +1087,11 @@
   return false;
 }
 
+
 std::vector<std::string> 
-StaticInformation::Get (TypeId tid)
+StaticInformation::Get (TypeId tid) const
 {
+  NS_LOG_FUNCTION (this << tid);
   std::vector<std::string> paths;
   for (uint32_t i = 0; i < m_output.size (); ++i)
     {
@@ -278,19 +1104,51 @@
   return paths;
 }
 
+/**
+ * Helper to keep only the unique items in a container.
+ *
+ * The container is modified in place; the elements end up sorted.
+ *
+ * The container must support \c begin(), \c end() and \c erase(),
+ * which, among the STL containers, limits this to
+ * \c std::vector, \c std::dequeue and \c std::list.
+ *
+ * The container elements must support \c operator< (for \c std::sort)
+ * and \c operator== (for \c std::unique).
+ *
+ * \tparam T The container type.
+ * \param t The container.
+ */
+template <typename T>
+void
+Uniquefy (T t)
+{
+  std::sort (t.begin (), t.end ());
+  t.erase (std::unique (t.begin (), t.end ()), t.end ());
+}
+
+std::vector<std::string>
+StaticInformation::GetNoTypeIds (void) const
+{
+  NS_LOG_FUNCTION (this);
+  Uniquefy (m_noTids);
+  return m_noTids;
+}
+
+
 void
 StaticInformation::Gather (TypeId tid)
 {
+  NS_LOG_FUNCTION (this << tid);
   DoGather (tid);
-
-  std::sort (m_output.begin (), m_output.end ());
-  m_output.erase (std::unique (m_output.begin (), m_output.end ()), m_output.end ());
+  Uniquefy (m_output);
 }
 
+
 void 
 StaticInformation::DoGather (TypeId tid)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << tid);
   if (HasAlreadyBeenProcessed (tid))
     {
       return;
@@ -341,10 +1199,7 @@
       TypeId child = TypeId::GetRegistered (j);
       if (child.IsChildOf (tid))
         {
-          //please take a look at the following note for an explanation 
-          std::string childName = "$" + temporaryCharacter + child.GetName ();
-          std::string replaceWith = "::" + temporaryCharacter;
-          find_and_replace(childName,"::",replaceWith);
+          std::string childName = "$" + child.GetName ();
           m_currentPath.push_back (childName);
           m_alreadyProcessed.push_back (tid);
           DoGather (child);
@@ -366,21 +1221,7 @@
             {
               other = tmp.first;
             }
-          /**
-           * Note: for the Doxygen version only, we insert a % in the
-           * path below to ensure that doxygen does not attempt to
-           * resolve the typeid names included in the string.  if the
-           * name contains ::, using the % sign will remove that sign
-           * resulting for instance in $ns3MobilityModel instead of
-           * $ns3::MobilityModel hence the output must be in the form
-           * $%ns3::%MobilityModel in order to show correctly
-           * $ns3::MobilityModel We add at the beginning of the name
-           * $% and we replace all the :: in the string by ::%.
-           */  
-          std::string name = "$" + temporaryCharacter + other.GetName ();
-          //finding and replacing :: by ::% (for Doxygen version only).
-          std::string replaceWith = "::" + temporaryCharacter;
-          find_and_replace(name,"::",replaceWith);
+          std::string name = "$" + other.GetName ();
           m_currentPath.push_back (name);
           m_alreadyProcessed.push_back (tid);
           DoGather (other);
@@ -388,118 +1229,13 @@
           m_currentPath.pop_back ();	  
         }
     }
-}
-
-void 
-StaticInformation::find_and_replace( std::string &source, const std::string find, std::string replace )
-{
-  size_t j; 
-  j = source.find (find);
-  while (j != std::string::npos ) 
-    {
-      source.replace (j, find.length (),replace);
-      j = source.find (find,j+1);
-    }
-}
+}  // StaticInformation::DoGather ()
 
-void
-PrintHelp (const char *program_name)
-{
-  std::cout << "Usage: " << program_name << " [options]" << std::endl
-            << std::endl
-            << "Options:" << std::endl
-            << "  --help        : print these options" << std::endl
-            << "  --output-text : format output as plain text" << std::endl;  
-}
 
-int main (int argc, char *argv[])
+StaticInformation
+GetTypicalAggregations ()
 {
-  bool outputText = false;
-  char *programName = argv[0];
-
-  argv++;
-
-  while (*argv != 0)
-    {
-      char *arg = *argv;
-
-      if (strcmp (arg, "--help") == 0)
-        {
-          PrintHelp (programName);
-          return 0;
-        }
-      else if (strcmp(arg, "--output-text") == 0)
-        {
-          outputText = true;
-        }
-      else
-        {
-          // un-recognized command-line argument
-          PrintHelp (programName);
-          return 0;
-        }
-      argv++;
-    }
-
-  if (outputText)
-    {
-      anchor                       = "";
-      boldStart                    = "";
-      boldStop                     = "";
-      breakBoth                    = "\n";
-      breakHtmlOnly                = "";
-      breakTextOnly                = "\n";
-      brief                        = "";
-      commentStart                 = "===============================================================\n";
-      commentStop                  = "";
-      flagSpanStart                = "";
-      flagSpanStop                 = "";
-      functionStart                = "";
-      functionStop                 = "\n\n";
-      headingStart                 = "";
-      headingStop                  = "";
-      indentHtmlOnly               = "";
-      pageAttributeList            = "";
-      pageGlobalValueList          = "";
-      pageTraceSourceList          = "";
-      listStart                    = "";
-      listStop                     = "";
-      listLineStart                = "    * ";
-      listLineStop                 = "";
-      reference                    = "";
-      temporaryCharacter           = "";
-    }
-  else
-    {
-      anchor                       = "\\anchor ";
-      boldStart                    = "<b>";
-      boldStop                     = "</b>";
-      breakBoth                    = "<br>";
-      breakHtmlOnly                = "<br>";
-      breakTextOnly                = "";
-      brief                        = "\\brief ";
-      commentStart                 = "/*!\n";
-      commentStop                  = "*/\n";
-      flagSpanStart                = "<span class=\"mlabel\">";
-      flagSpanStop                 = "</span>";
-      functionStart                = "\\class ";
-      functionStop                 = "";
-      headingStart                 = "<h3>";
-      headingStop                  = "</h3>";
-      indentHtmlOnly               = "  ";
-      pageAttributeList            = "\\page AttributesList ";
-      pageGlobalValueList          = "\\page GlobalValueList ";
-      pageTraceSourceList          = "\\page TraceSourceList ";
-      listStart                    = "<ul>";
-      listStop                     = "</ul>";
-      listLineStart                = "<li>";
-      listLineStop                 = "</li>";
-      reference                    = "\\ref ";
-      temporaryCharacter           = "%";
-    }
-
-  NodeContainer c; c.Create (1);
-
+  NS_LOG_FUNCTION_NOARGS ();
   // The below statements register typical aggregation relationships
   // in ns-3 programs, that otherwise aren't picked up automatically
   // by the creation of the above node.  To manually list other common
@@ -513,17 +1249,27 @@
   info.RecordAggregationInfo ("ns3::Node", "ns3::olsr::RoutingProtocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::MobilityModel");
   info.RecordAggregationInfo ("ns3::Node", "ns3::Ipv4L3Protocol");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::Ipv4NixVectorRouting");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::Icmpv4L4Protocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::ArpL3Protocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::Icmpv4L4Protocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::UdpL4Protocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::Ipv6L3Protocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::Icmpv6L4Protocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::TcpL4Protocol");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::RipNg");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::GlobalRouter");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::aodv::RoutingProtocol");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::dsdv::RoutingProtocol");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::dsr::DsrRouting");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::olsr::RoutingProtocol");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::EnergyHarvesterContainer");
+  info.RecordAggregationInfo ("ns3::Node", "ns3::EnergySourceContainer");
 
   // Create a channel object so that channels appear in the namespace
   // paths that will be generated here.
-  Ptr<CsmaChannel> csma;
-  csma = CreateObject<CsmaChannel> ();
+  Ptr<SimpleChannel> simpleChannel;
+  simpleChannel = CreateObject<SimpleChannel> ();
 
   for (uint32_t i = 0; i < Config::GetRootNamespaceObjectN (); ++i)
     {
@@ -531,11 +1277,25 @@
       info.Gather (object->GetInstanceTypeId ());
     }
 
-  std::map< std::string, uint32_t> nameMap;
-  std::map< std::string, uint32_t>::const_iterator nameMapIterator;
+  return info;
+
+}  // GetTypicalAggregations ()
+
+
+// Map from TypeId name to tid
+typedef std::map< std::string, int32_t> NameMap;
+typedef NameMap::const_iterator         NameMapIterator;
+
 
-  // Create a map from the class names to their index in the vector of
-  // TypeId's so that the names will end up in alphabetical order.
+// Create a map from the class names to their index in the vector of
+// TypeId's so that the names will end up in alphabetical order.
+NameMap
+GetNameMap (const StaticInformation & info)
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  NameMap nameMap;
+
+  // Registered types
   for (uint32_t i = 0; i < TypeId::GetRegisteredN (); i++)
     {
       TypeId tid = TypeId::GetRegistered (i);
@@ -543,7 +1303,7 @@
 	{
 	  continue;
 	}
-
+      
       // Capitalize all of letters in the name so that it sorts
       // correctly in the map.
       std::string name = tid.GetName ();
@@ -551,193 +1311,150 @@
 	{
 	  name[j] = toupper (name[j]);
 	}
-
+      
       // Save this name's index.
       nameMap[name] = i;
     }
 
-  // Iterate over the map, which will print the class names in
-  // alphabetical order.
-  for (nameMapIterator = nameMap.begin ();
-       nameMapIterator != nameMap.end ();
-       nameMapIterator++)
+  // Type names without TypeIds
+  std::vector<std::string> noTids = info.GetNoTypeIds ();
+  for (std::vector<std::string>::const_iterator i = noTids.begin ();
+       i != noTids.end ();
+       ++i)
     {
-      // Get the class's index out of the map;
-      uint32_t i = nameMapIterator->second;
+      nameMap[*i] = -1;
+    }
+       
+  return nameMap;
+}  // GetNameMap ()
 
-      std::cout << commentStart << std::endl;
-      TypeId tid = TypeId::GetRegistered (i);
-      if (tid.MustHideFromDocumentation ())
-	{
-	  continue;
-	}
-      std::cout << functionStart << tid.GetName () << std::endl;
-      std::cout << std::endl;
-      std::vector<std::string> paths = info.Get (tid);
 
-      // Config --------------
-      if (paths.empty ())
-	{
-	  std::cout << "Doxygen introspection did not find any typical Config paths."
-		    << breakBoth << std::endl;
-	}
-      else
-	{
-	  std::cout << headingStart
-		    << "Config Paths"
-		    << headingStop << std::endl;
-	  std::cout << std::endl;
-	  std::cout << tid.GetName ()
-		    << " is accessible through the following paths"
-		    << " with Config::Set and Config::Connect:"
-		    << std::endl;
-	  std::cout << listStart << std::endl;
-	  for (uint32_t k = 0; k < paths.size (); ++k)
-	    {
-	      std::string path = paths[k];
-	      std::cout << listLineStart << path
-			<< listLineStop  << breakTextOnly << std::endl;
-	    }
-	  std::cout << listStop << std::endl;
-	}  // Config
+void
+PrintConfigPaths (std::ostream & os, const StaticInformation & info,
+		  const TypeId tid)
+{
+  NS_LOG_FUNCTION (tid);
+  std::vector<std::string> paths = info.Get (tid);
 
-      // Attributes ----------
-      if (tid.GetAttributeN () == 0)
+  // Config --------------
+  if (paths.empty ())
+    {
+      os << "Introspection did not find any typical Config paths."
+	 << breakBoth
+	 << std::endl;
+    }
+  else
+    {
+      os << headingStart
+	 <<   "Config Paths"
+	 << headingStop
+	 << std::endl;
+      os << std::endl;
+      os << tid.GetName ()
+	 << " is accessible through the following paths"
+	 << " with Config::Set and Config::Connect:"
+	 << std::endl;
+      os << listStart << std::endl;
+      for (uint32_t k = 0; k < paths.size (); ++k)
 	{
-	  std::cout << "No Attributes are defined for this type."
-		    << breakBoth << std::endl;
+	  std::string path = paths[k];
+	  os << listLineStart
+             <<   "\"" << path << "\""
+	     <<  listLineStop 
+	     << breakTextOnly
+	     << std::endl;
 	}
-      else
-	{
-	  std::cout << headingStart << "Attributes"
-		    << headingStop  << std::endl;
-	  PrintAttributes (tid, std::cout);
+      os << listStop << std::endl;
+    }
+}  // PrintConfigPaths ()
+      
 
-	  TypeId tmp = tid.GetParent ();
-	  while (tmp.GetParent () != tmp)
-	    {
-	      if (tmp.GetAttributeN () != 0)
-		{
-		  std::cout << headingStart
-			    << "Attributes defined in parent class "
-			    << tmp.GetName ()
-			    << headingStop << std::endl;
-		  PrintAttributes (tmp, std::cout);
-		}
-	      tmp = tmp.GetParent ();
-	    }
-	}  // Attributes
+/***************************************************************
+ *        Main
+ ***************************************************************/
 
-      // Tracing -------------
-      if (tid.GetTraceSourceN () == 0)
-	{
-	  std::cout << "No TraceSources are defined for this type."
-		    << breakBoth << std::endl;
-	}
-      else
-	{
-	  std::cout << headingStart << "TraceSources"
-		    << headingStop  << std::endl;
-	  PrintTraceSources (tid, std::cout);
-	}
-      {
-	TypeId tmp = tid.GetParent ();
-	while (tmp.GetParent () != tmp)
-	  {
-	    if (tmp.GetTraceSourceN () != 0)
-	      {
-		std::cout << headingStart
-			  << "TraceSources defined in parent class "
-			  << tmp.GetName ()
-			  << headingStop << std::endl;
-		PrintTraceSources (tmp, std::cout);
-	      }
-	    tmp = tmp.GetParent ();
-	  }
-      }
-      std::cout << commentStop << std::endl;
-    }  // class documentation
+int main (int argc, char *argv[])
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  bool outputText = false;
 
+  CommandLine cmd;
+  cmd.Usage ("Generate documentation for all ns-3 registered types, "
+	     "trace sources, attributes and global variables.");
+  cmd.AddValue ("output-text", "format output as plain text", outputText);
+  cmd.Parse (argc, argv);
+    
+  SetMarkup (outputText);
 
-  std::cout << commentStart
-            << pageTraceSourceList << "All TraceSources\n"
-	    << std::endl;
 
-  for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
-    {
-      TypeId tid = TypeId::GetRegistered (i);
-      if (tid.GetTraceSourceN () == 0 ||
-	  tid.MustHideFromDocumentation ())
-	{
-	  continue;
-	}
-      std::cout << boldStart << tid.GetName ()
-		<< boldStop  << breakHtmlOnly << std::endl
-		<< listStart << std::endl;
-      for (uint32_t j = 0; j < tid.GetTraceSourceN (); ++j)
-	{
-	  struct TypeId::TraceSourceInformation info = tid.GetTraceSource(j);
-	  std::cout << listLineStart
-		    << boldStart << info.name << boldStop
-		    << ": " << info.help
-		    << listLineStop  << std::endl;
-	}
-      std::cout << listStop << std::endl;
-    }
-  std::cout << commentStop << std::endl;
-
-  std::cout << commentStart
-            << pageAttributeList << "All Attributes\n"
-	    << std::endl;
+  // Create a Node, to force linking and instantiation of our TypeIds
+  NodeContainer c;
+  c.Create (1);
 
-  for (uint32_t i = 0; i < TypeId::GetRegisteredN (); ++i)
+  // mode-line:  helpful when debugging introspected-doxygen.h
+  if (!outputText)
     {
-      TypeId tid = TypeId::GetRegistered (i);
-      if (tid.GetAttributeN () == 0 ||
-	  tid.MustHideFromDocumentation ())
-	{
-	  continue;
-	}
-      std::cout << boldStart << tid.GetName ()
-		<< boldStop  << breakHtmlOnly << std::endl
-		<< listStart << std::endl;
-      for (uint32_t j = 0; j < tid.GetAttributeN (); ++j)
-	{
-	  struct TypeId::AttributeInformation info = tid.GetAttribute(j);
-	  std::cout << listLineStart
-		    << boldStart << info.name << boldStop
-		    << ": " << info.help
-		    << listLineStop  << std::endl;
-	}
-      std::cout << listStop << std::endl;
+      std::cout << "/* -*- Mode:C++; c-file-style:\"gnu\"; "
+	           "indent-tabs-mode:nil; -*- */\n"
+		<< std::endl;
     }
-  std::cout << commentStop << std::endl;
+    
+  // Get typical aggregation relationships.
+  StaticInformation info = GetTypicalAggregations ();
+  
+  NameMap nameMap = GetNameMap (info);
 
+  // Iterate over the map, which will print the class names in
+  // alphabetical order.
+  for (NameMapIterator nameMapIterator = nameMap.begin ();
+       nameMapIterator != nameMap.end ();
+       nameMapIterator++)
+    {
+      // Get the class's index out of the map;
+      std::string name = nameMapIterator->first;
+      int32_t i = nameMapIterator->second;
+      TypeId tid;
 
+      if (i >= 0)
+        {
+          tid = TypeId::GetRegistered (i);
+          if (tid.MustHideFromDocumentation ())
+            {
+              continue;
+            }
+          name = tid.GetName ();
+        }
+      
+      std::cout << commentStart << std::endl;
+      
+      std::cout << classStart << name << std::endl;
+      std::cout << std::endl;
+
+      if (i >= 0)
+        {
+          PrintConfigPaths (std::cout, info, tid);
+          PrintAttributes (std::cout, tid);
+          PrintTraceSources (std::cout, tid);
+          PrintSize (std::cout, tid);
+        }
+      else
+        {
+          std::cout << "Introspection could not find Config paths for " << name
+                    << " in this build because the parent module"
+                    << " was not included in the waf configuration."
+                    << breakBoth
+                    << std::endl;
+        }
+      
+      std::cout << commentStop << std::endl;
+    }  // class documentation
 
-  std::cout << commentStart
-            << pageGlobalValueList << "All GlobalValues\n"
-	    << std::endl
-	    << listStart << std::endl;
-  
-  for (GlobalValue::Iterator i = GlobalValue::Begin ();
-       i != GlobalValue::End ();
-       ++i)
-    {
-      StringValue val;
-      (*i)->GetValue (val);
-      std::cout << indentHtmlOnly
-		<<   listLineStart
-		<<     boldStart
-		<<       anchor
-		<< "GlobalValue" << (*i)->GetName () << " " << (*i)->GetName ()
-		<<     boldStop
-		<< ": " << (*i)->GetHelp () << ".  Default value: " << val.Get () << "."
-		<<   listLineStop << std::endl;
-    }
-  std::cout << listStop    << std::endl
-	    << commentStop << std::endl;
 
+  PrintAllAttributes (std::cout);
+  PrintAllGlobals (std::cout);
+  PrintAllLogComponents (std::cout);
+  PrintAllTraceSources (std::cout);
+  PrintAttributeImplementations (std::cout);
 
   return 0;
 }
diff -Naur ns-3.21/utils/rescale-pdf.sh ns-3.22/utils/rescale-pdf.sh
--- ns-3.21/utils/rescale-pdf.sh	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/utils/rescale-pdf.sh	2015-02-05 15:46:23.000000000 -0800
@@ -4,7 +4,8 @@
 
 TMPFILE=`mktemp -t $(basename ${2}).XXXXXX`
 
-echo "Rescaling ${2} to ${1}"
+ME=$(basename $0)
+echo "$ME $(basename ${2}) to ${1}"
 
 echo "
 \documentclass{book}
diff -Naur ns-3.21/utils/wscript ns-3.22/utils/wscript
--- ns-3.21/utils/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/utils/wscript	2015-02-05 15:46:23.000000000 -0800
@@ -28,7 +28,7 @@
 
         # Make sure that the csma module is enabled before building
         # this program.
-        if 'ns3-csma' in env['NS3_ENABLED_MODULES']:
-            obj = bld.create_ns3_program('print-introspected-doxygen', ['network', 'csma'])
-            obj.source = 'print-introspected-doxygen.cc'
-            obj.use = [mod for mod in env['NS3_ENABLED_MODULES']]
+        # if 'ns3-csma' in env['NS3_ENABLED_MODULES']:
+        obj = bld.create_ns3_program('print-introspected-doxygen', ['network'])
+        obj.source = 'print-introspected-doxygen.cc'
+        obj.use = [mod for mod in env['NS3_ENABLED_MODULES']]
diff -Naur ns-3.21/VERSION ns-3.22/VERSION
--- ns-3.21/VERSION	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/VERSION	2015-02-05 15:46:22.000000000 -0800
@@ -1 +1 @@
-3.21
+3.22
diff -Naur ns-3.21/waf ns-3.22/waf
--- ns-3.21/waf	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/waf	2015-02-05 15:46:23.000000000 -0800
@@ -32,10 +32,10 @@
 
 import os, sys
 
-VERSION="1.7.13"
-REVISION="5a064c2686fe54de4e11018d22148cfc"
+VERSION="1.7.16"
+REVISION="9ca17eb492c97b689870b4ff9db75880"
 INSTALL=''
-C1='#('
+C1='#%'
 C2='#$'
 cwd = os.getcwd()
 join = os.path.join
@@ -163,5 +163,6 @@
 	Scripting.waf_entry_point(cwd, VERSION, wafdir)
 
 #==>
-#BZh91AY&SY_6t "DЀ H  Ha_{                  jhQ k{u]5I#(M[v2)T٨_bN-RZkU;tc`5hz{{>/Kw|3kp] :^o|o=smr{Tm>  N  6 ><Tc3ۣ :u@VW JJ"0(@Z Z#$Qkswomw=P^A}ͽigK^w{qwm}ϻ_/fo}{N>{s IliT֣Kc`N=X*UPHP5/{M=^{U!*uK};V.Իmj:lUJa/ʟ=]ۺ5Z(ە_Nvwzv^s;_l;KuNݯuA[=>yB{ﺽk|ZZ;O[ݹ9sypw_conw]1:{=i£v^öq =yu｠X&@R#(J̛:8mӲ*Wd޳Bf9әUg Svo7׼ހۼk8rnorZ9j>f vl_{{[Cϧyx#(mngut3j=+v>|wˮWwml9w۹._;wݝV <A(=#(4x=l=oz(n9ɻv7۷b=6kUwّ/[=﷧c @NΧUU:ӚÃNm#( P2i =7v}    =3PYt&vwGgZuLJ#(L!}HkϮەUw_|}o:=vfwY;n6qѦ}}kW6qZo;\`o &   4 F#$&LPML0	M e41(=#$dm #$   &" M &=LORȞԞd ѣLL$JIM̄e<z h=Czd iHhɔѦ#(zO?FM5)U?ʧG%ѵMHC    "	FFMjaMJQ)=S4 F jS%*夵\yY+jr	$	f* O?/?\~Ǳ5NTEQzSzzUU*^TL̇f-2u.#$#(t"	"#(N8~bHVBw,M@MYZwջ吀{!lE[R֣ZUFQ\J@T,EA:R )hE,H-BQ"A-FlH&bXS"hd,f*A,a2Sf)jRP1MQY FP$#(+cA%(64EcAI)RIK-&`)bFƪMPc,R&6R$biMAQYԵVM2R[Ie*mE$Ҷk66j6#(Rcdi(4Xfd0`&d(@f"I ɆԐX&M(3!)%$1)5BZ5 ,1bB)(23"HQ1Ii"#IȤDfFԅM4*bLL$MhY#$RI)*,I,$XLfcF)	c!F&HI`ę"SDSB#$A&ZjEJCFYb,fTc6f2H,ؓ6#$,#h%٢&41f13)2R$S%(M)Rj"!2($l$P&FT3l6dIKHY1HhI4Ɇ5Xʑ,-3(Ѵ$C!a34&1%$̋T "`&HI0h,2dd5b!MeA&2Hk6TlY#$LdJJ"ѤYi1Fd64H	bXhclZh)0ICH5LAd6V[ZBjM,$љ)bZ,4LMEPM5#(2e#4M_[HYZBBYd&U%b52E%cS["e#$KR&5(PͨKQfIFclQjZbjlXd6,ȚҲ*b)FRF*J͕Jf62BR"ƨYQ&2FZ6MQQ%&ѵ&I 5lXf6	Y"Q)BR	5$d%j, lSR$4$[6*MlYTB4&RTadȥ#$Im-5K#LJ0Ba# bbdfmI%2IRK3)4R(FZYR E1HƲFa([LLTԖ4L$jCPQ4͈-#$f-JZhRke+lQK2YM!fmllb06FV)JT 1IH6c3,Tԣ&4dBdFQeDK	j&*e ,)42Q6Ԍ̚,(͐Q2XM2dk)*,JDE,TThU4dJ#(M" PdƂٲ	$Ԅe2JS!-	F$LڄE,0hTQFЅJTIh#$[l-D-%A$L&J$+ETAl&&	ERi4be&mET4*ddذ!,X̔I-&*RXFQkaaFhdHFMQTEEQLŤIZ6RQFc4" L[QQcZ4i-hC6cFąQ3YZ5ji#$,65EjJVQh&Z5i#mRQL̢ɴhR4Th*&EED6Q6H֒ѪEѵC-ljHi%hYJ7lҢ(&cc!AiD&TH{pO)\CQq6)=+5xYyw/K8CCN_/wY#(K)$bո3|	uHG]uQ|t,;bTB0DN%O<מ?/cGˌ֠0i+%C߷qräƷL0ZAT0ȉb/iYʗmMdeAI8UDLx`v>5VN'+9l*6#$|mw˜p]`U?CY2%J!ZOV=6_[2??aMN!cw}tn*LRf(<jf J,9鐯2&1GYHV{=e u<t#HPDhdF !S1 aERQ8(c+IԒTX>}Ifs&G	UI1; b{zЕӛ^Sk^+#$z{8^S},ĽZ#$hh[~P?O#((~	zIDAѾd钱_j?K?>&Iכ#(&!@P_a_:EʖiI2"  733?$'ϞRgKh^iݧe^7{pLyAt:?#(=wUsM դ2Q*T%~\ҋ:mqC0K71Xz2c>xQA`s;Hh~xAznwuB1vlU[F,CFR1O'|3=y*-_jzڝbە)V`F_{gVAH2X+jY5kP@0g`.JT_~EёO&?k+NR!XXg+#dTH``?#(TfUlQ#$IW{=B#>=01yzsсF{Pg"`~yf'C/l#$h (_U&p%V1HT<2hPbKjȽ߆NrHe,>铍L)+)Ӥ<XZ+>Py!ky˒2;S.tv܁M#(#$YhVqEfi.?s#(vZzRϿq>	,@hQ,r^A*~TqYfPݮ4Q?ֺE g*"ُ15l)Ky3A$>L4LJì+1⿓LYb__~>'oS6q2}\w#}kF{*[7AMprf)2+~i!*D4Oya}_=Rx@t~Jb#OChN%aNѷzY<k>f")2#.D}ES& Ls3cX;QAWq-!ąTSs(6TaRg9ms1LFs"r"u=1ƜIQRלiR	/ďuM4C;+ږ9jGs?zDDYJEݥ(#%uVѳ t1O=_Sp=nxۏ]=Һ2ԣ>nm&d߸Nԑ{luS$uZwH;@Bs#$+;;Qt1emKFD͡S.FHY67//y}/YfSr,(MvrB#'""G-A#~\%E~>>UCHTvݜCK%TloݓdJ>#?e~W˂z0ʠ4|43C8i$tKvBw,h-o8|zgh,+]`b7O{?Ʉ̅gwp@B|F*|&~^׶x{)<#(e&h}mw)9Od#(mlłäݘQ'~<0pk}g\3Bk7|yoh Hu"rq7%*[EZb}v3ZS*C?1oa|5C $>{7N"-:f?ڇ7(~\Ppgb	ytjv28:۸QԵߗ!([řNӶ/(p,%.ǚ"[e%6*u|qBtaeѺ째gH8IcټOf:|!Z"0E=wy&j vkO4 뫶f?	7nۧTs|'k_=:˸MQd'Az-_d+rɬglgzD\O#$1#$$Rr\| 0CDbLm(<0dd2Bx/%<?Cs%>si=:X-$}Kii"DYMDNuEfj9RyDKXbYOT!ŇGL_;Ylr<k6ߤ}̶,HDG؟8iC`MPOIBB"n~5u5i=MPb7gwܢ#();T"IFH\)Љs#(HH%Wm@=hKd{!!XpPM(o^xq[]ʴCKHXIŷyK	A5zY3l3>$>/IUJ%>OWZ/P1L4Νw+k&'اx2F;a7FGZSJJ3fo:;i0J_qM/]mH?ܴQp伤fus(7Vg?σ6,{_	YDbt?N{?J/E"Ww'_oU"BpL0ةYC=t}Px?3S|&C7oN^efgYgZ`G꾬mA" C/RT/=GP!w͊V՚~.>O˽S/N518*"O}w?~ٞޛ,mq_<O霦uY31%Zf	ptftTF&{#onPdpD8+7];7C^k誏#'c>ĳq#(A^)$@H(GrWvMk'c?QeY?ɸ*ߓ5<5#$DOjc#$&n`C)em~wצږߧ=5CctW)dE?g߉Jt.]]h#+Ow*pp#(4ĸyy9'tʖ7m,>{xQKIEG6U]zT%)W.N"+V֖	BbM3~]	sԤ0b1=+X1Ou9 C3sd(~#$@;Osn1zoX=((YO}R`u(ys(^y3Iq>:L"w@\v=I'L1ά@a曥D8!*jݓlRInwGt܀6i7U#uOjLNp&ׅ{KFR䣞Biҵ[1䂟]%[3#g|x{;TW&]?]_ɫ<-2vYQ󯒫oTAl,t>9WYKB|dOqMQ9N\':31WŰS>?/U>m1}{⥴ILuw3|=,yE|gh{oVnC՜e	,:ǆs.._|ml\n@#$.ҙ.1z_n䰤Jקs䓊y?ݟ%9gٽHn_BMJ	!:HJa+'̖Md6,HZm˸N.Pk٨=Έulrk<>5#$Aݜ%͓;eAȢդAe{ӯ4+K;xҽ:*-㳴&'B9vf%37M8DWQE44n[4c^h^*g+.~wfZKN"j5)tlL,Uln'ۖp~VU4{:09ֺqgMH@OPoK$uubx]Ӽys0d[YK_䣿ZTʰ}CK$F([YQ* )*"I,R;?rm%͙2a`qh*<	L#(!+]nG0UKҝY#s;徺!!ir2҂;\d&lC6#(791:;WwV2qy9>8YQex׼^Mj/HkCGI~{|6J,lPӆ59,C9D1Lr.RJF92>תcJ%:գC9ZdfߍR2Y`C{bK#$eL̲]P'Nnxnv||o-Q^,s{YyR(DʏD6/	h`^|g(mC6JGvBD$BD/ȁ#(1z=U$9+, ~Q`C;`awqU!ۃpeO&#Be_ǜGw-zuTt'P(^3I#XU˿Su_,~5Hވ`- X[i)H,.qslgTr䄪&2FIp 8yĭ!B*gYK{9#z̙#(Dcn޸Ez=(Ĩ ż{[`1ÎГIcsY|U!-L"tYߤW_~}5k4֫_ 3hhLGS÷>"faZl)R,t8?`-G7U#(%a"I?Lf>XgO"/4[ac~r_|Go^q=	5<&]W0xWYKlR$#׃Rٞ	-cݮxE2@ B;-S6sF̌Zuo]㴼UzstkX HE2alCNS#B-.KX<[om99I*Զ$u<˱gpV.)Ǝ۟=M\b 皣_Y23pwoo#$twHͶ=.KU %rE-)FcQB$J#(s*1+]}Zut"Es18 	--ŵ.j|G><U$z[ƚ»3٭i=i"p+EY҇=Hn-.P+!*MBxv59>fS=˹oyZ=vȏ_Aqi­It7%G5m#$sBykQkщn5v11;XӠf	>i@vӕq|vee>R՘WD^N;DMeFxo_D0h-3 vfǷuK<QfZ*U5~t9~#(8zQBgͬ%~O`al:-Rfm(ޭhECRXb}gN˼j~0{nCN{{-AT8\HR޿033v~v9aZL6o{K7H<om(ʂupL|oMYd|I[8vxWeK#(oj h=E3jEn3RR䆑B#z03%cF|pYYMp-l&fpE	jLxNEj%D1U36#ymfWfcB΄CB0fG{!"noVo /JQѰT {] +]O0:|g['^R]7eFw*II*ӝD_.63wdd^]ce5^"s oigdlv#(^*dZ];/5ۡr0E>ʧăI$Ɏ{˥3>En%Ҋ_޽+k14zc%}܀9)gXA:DttFKNur朋ŦRP͒YVJ#$KGhoPD9=\%\εm!#GG9Vx#s6dvmh%K{>^ o-`>L#(3,g$09F~ZU[zg̗L}_ig+P:L3ǲbKZ.`=	D/AEɮ"H,V~7sz5}PPvYX#(4#st8#$>I@juM;BlAm#$r`zKRڛAGşJ=ɢ/H+b.JmGcK11b.:-dNBPD]#(ĊN>gLy;Qtsi:Ik1Q37$E0&muO<,BG267N-WđoS'Ǻ&c0D(Hu0Kf|Fe=_zN9smE3s#(Ct"f\'!%((.2Օ-ܖ2`b-r[[~faq	Y44(±=EP;$ЍBtG%QLSm\1̸`HNGJR*I"k.VSop_lΙxSKQAY`x-h\[3%l{j^EQhέB [ݛkhŃ+gt{u݇_P"iP~ş=Wz=Z'ץS3c> 1jF.ڳp>y]6ĢGftfbSK9%,;ơrnU!ZPu+eȷB$&k1eH~"QC7a8Ib=IYU3(k==ų"L;;*@I3eRuaܡ KM.!0݊ƞ)ط/' O^v@Φl" Qo>d0)QzCVAeŁsrt7ewfц^,7>yЩRƆjT"筸eY)<&S:k#$ṃb	aFXu)@,KZ6f0BNY &uIJ	X,`baSb_jO@ͥ)%f,$0)w:c.ў+b	sX#p8\	{"nD"qtlZ[[e9JQUWNd=_7+{ ummf9NE[4{EǊs?.pyh4:#.B厖*2J+,6oT.Z$ȴQ{3:Ԯnϭ1QE<P\eszKF[\ui5hxeӊvݘ35#('セc[d#$ 	ڜݑt˃]L,Щe~ζ,(͸!18SpX#(EX=4?D^oC:RHPª4vM YI	ltCͧ1ɒqZ$B9m/9?=^`eS-'YIQ;Xx_	J"{{*kf0Y{v^'ob5 ,[CMwv{NysAiC#.E#`0[IRT	FccIMDEQu4C	L !Tp}1jvه"ɬmha^s̸9Y=A2(8z=ya{0;+d4oCNI#"]xD2Jrf[P%7&<b<T֣Tgi§|$?àhr]|@|GHxtϞ`"vFiST_SFQ-B( wpTmo2ɰpE.=:uy8{(ډ{ cSV#$?cDvH.]jhFNѰ8L@\~HeI#$?ͲK#~HL9#(simtV+8;wSDV3!Oav95p9|a<?^s/+N!$yO4{:+<cEO}ӻL%#$e*4VH!	BB@PA{@*%,/P}gUD=ıiYOrO)OɎr:Ze5:22ܶUBG PMAC]<g DL $@Mۇ:ߟm?'ӏiGqOv\)Sed$XZZorHԩbR}65-YD]o{fxѻ9łnaN,DF#(JCچ#(gώNX(ID8bȿ.#NJr|ĖqQ#-\G1{`Qp4@~߰ѵWsLqD³$?Bk#$`QćL4C_0Q1%:Bb#(k-)`ܻ_P?;fXb6[$Úė]eFZ#-Yx?4vw! Aq?4Έ#׬}!0'Q1nmXt(X]ʪhdJS[&yױ>	Z#(!hnu#(fƙCw\|q6g¹pnJy"}5֨gUx2`,<eU4{Q>)|.Ÿnq	#﯒	\v/v,{#?oyCZ#(_ud*6>dA\pc{J]SKe}?˄J8u%]u'7\GӥwvGlWMbqݑp~Yq*]"6${V	$#L}UɎ[;ӭa0])5ڻ*ʺne{g6Ko,`T1j_\ۺ?e4Ppq	HPa98*!OGb"ow$%;uEBLڬg \#(?ъkI{Z~<}PP#(}MQ~Y؈AAӦwzR>b tTcPNC?k/Nܦor-T#e	oxj5"kQA#(P	p'R K^AKأV,X#(XCʏF]wmTsri۪-f!$v&cܬGh#$ mKR$)g4&*O]$B+ ~AaXon6ׇgK*oO#~<I겭>"^|#$G,YZ#$Ye|a#$gӿ眵׏6FE}fh5/kޡzss-|,7~m={o2xlg|۷۫?=r9#>wijoN{nߙ+`h@r;2z{xV%0.fNWuXfL/[@v]=76_~sRe%g|zՊ/#((fμ4I-gR:yvo.}K)`ȫSj=TyEoTsmpQ5"?MxLv`[emh"LL>YMƙƱɐ]e~|sٟſ]ka%Cnޣ;o%MJ2!	l*U`s!n^b|_s&awzr~vvKָ-Y^oaoU}YT]>1tJy9cz?1lgtzm5Atz6;oxC,Qg'`xR߳7Gn\s<K;w<unɆ8Hz#$Q5I:j|歶@767&Z<RGLK[j͕G#pWdơ]Fl=ǟXT3#ᗧ|~y~8}"(1O|ySe+ƯK?ۡ#$(ߨhvNGO3|v~ǬreOP^_>~vQIrϔ9aN.	!9yUg<~W0cxy8qO=#(}f=_wVwvڮ[F\k,{ۗ-w5O7ɲcbLrpT#jρ&; |!CZ˞PnkOrU,8&߽4P_6`,xGgV_TW]#$}*;Oe&LzgeRC#~4|F+hr^#w4u2Y (UPQ%Y#~7߱հ|FGGm.|̃jpd1_ލ$[=|ngphVfͻuq nl6Yӽ83Fc7Jo~`3#$^̻#FgdxQC0kzʴ}'ҭML#(Ok2X9|R9~Ƿ1wN"lZjx/N=!}9+=&"4C.}e^,R78#$7sޢ#(G0Ϛk$KUDg㯙 7DC5]ףI~#$@stN#NGE}C#$)0{/\~HnE`2?%NU_ޫJ6iWQ\N_OLͻ7%B3ژwNu1W.m:*Q~zGgNM6ރ^%aOVb/$j~#(HZ?أ廍;^{3\m 3NOVoC21[J~bF;ɰ:lxK3	Be0E.RRa0R'5a&MٳVE#heȸAHbӮxXOC4UCzROnF+F\M뛴鳹(o<y}.o1ٓZ{<O6È#(ςl66G&Z8`o!MT!`9(s`\*ת&I^irWKwO`FUn1H4ٝHGD<8]1?xǄ'eVoǓM"2*_)u_7ET,$ DJpNTqM >~Տ5ۈJЂҾrh_׽|#$X|yD(\#(90aOS~$E÷ݬ/>=Tﾮ_77onY?!#(>AXu8bC݁91?BQ,=6L/a#$RS)&Y˃ -R`1S@b#$]+Xc#(*AAeC@`9˒XZV9apaLYr,RBe\8bf2_?= \z0:4ㄬLc"b#$ceCŽotJPRBBHf#&H#RE(l;pJ4%.+7]) /tYݥNj1L"sfS!PRԘ S#mL}W.#(Mɉx˔̂نM54]jd!s^JXBit(CPĳAE/O>egJ):G0];+?yoH'N^V몕gVhl՞&|$Ʉ/΍{x}c@\.`#]x ,H/S&s",wD-ܔ;(2:lb)oxHR.5n17i,TiDvcc4B/͒D|8ZPpQ\ 5MX{^©6)ѹ?fɽZJI$nb@Q~B-a-n""v=Op|6Ö_C*_?rd]}|fm,g_-{8Dd531.H	w(RO*-YCmGp\z/oMۡ[h!Q^UJ@Z o5FW{<5$42uû6Ml_W}nkNLRXj7Oxu-RɅCMtk)(L&o4Us'fePݩF~?JJBtOWд8«li)wO1[#KJredgzt&b8G:zX*{>2ȢDdOnOBi_˃01DIz0#(0FϮ[zd!a3!`<k/y塝gIl39BW3i7׭?BWC&`vg2#(#$HP&E%9s#$sJYL9)&8akYdnþSZK4bE)f x}5u1Z2as~-1ykM.EU7T~6C {J:fG#$`&t{v)w#`6*@X.Yh{?GPNnzvTߚY۽HTDݚWN}n*`# @N8pSKIy	vu HN0lLL߸8ݼL3N`̂hе,	/k^Fhtŋ2plKxLFn=9ӆZK28%|9l}<}	Oh)"mDoMdKKvoޘ|SBY:eAب7 ~X~1IwݼgK0zb~e8^?,P5fAFCLQS_):+'-[3.=&FnK;ò3n	߯^^U@Q.I!|10xJ]!ca-J8͢-2;'q(lR1#$ET	:hL-IVVb=#`(ǆYJoYmD")+ﭤ[=14r`^	y#4FS5G(Lj;馦bз"኏n8f:dfKe'BSgq i{x3q<:=Bׄ⿔|K󀔷_ͱf&ۘ%!:ΘG)8FLT5Ӕj_JTTNWڦ5R2eU"&£[/N%}UX&A{h{FK#(TR*j"	19%2x62t0	#OXsBj@	Neb^|B	1;ϸl Tuuˆ/	fMWr`1yx<o!,! :Q(_-UֽZ&TIUݬ_Pٰ%tLPuۊZ5-r;ٍBPg[wc#${9&hJ#$YE`J;hyr8iQ8md>کY-ЁbM* n0̱7ݓEEY/n7ZK{]@e3H"DDK8~b-}NH}Θ󎟲ctL"=hb*iW3P#$c#$y7h=je9r.z¢uŲҟ*DN!sC/"19~<]?aJՅ6y/S,^0Ufwxt"Jn]T^GT^Qqk?9ƣ	&.?|ؖK^+ܸ	ƈrQ̬/IEe9Ȗd.A2UO4UגRۘ#uy2Nk|vĲT#$龖-wEE+l$륾;P|>UYU&Uu?ܬD7ݪxĳo+1x|hbD.k}=g:<;ER#(H&ˉLf#(:1G=ytԒ\o-˩G.&6d`&6#$1tNhZ2T)[40evc+*t]F$Id#(BB^C⤡G^ƦS	Dr*ݵ'߈ц!ݎGifO;4	A9y~**,$uW-/:	W,q>/To~ߟhYѤuUc8~:/_büx{ӫ;n?FUKy~@H?yG|V)UEJ>;!:O߿bI9eYceص%"k鲺?☥(TNj#( X	q -NwN|AU,)Pے<mJt?ιZQlpi;bʊuJ	L!CYwoWs4~Hڊ"dgĒԔ8!yCܯmKˏܩؐw3 ٱ]%pQ̄ Aim#$]Ȃ	xNf6;	#(]6t{qk{՚<Y+d_E<ev86h2\w :CwbCY74QE{W)`D͉ʤ2NFȢdx+&ftZn1b03	Rۤ#$jƺ׼Acaݡ'@&`vkWvv-6G2~fީm{C`_ģ#$DO7)i8#$d:ݚ֋PO70w^CXhHt~qby2MlN[C2hvtm?#(mvP	`/=gφDEb񇦜;$3Y܌|h3#%NMVmoov76!DC"G$8#A6Jq"8j+x=ɤٲX\jD{ǿϋzjo䈇#pHwNjPmHOk:ʛ9-K$X`kYuh_Q_4#(q8LwR)8D}=D#(9)D[LvGLY@sn;/fkqo&zmJVjo'I[AMwa&q6!V#abtK,b S#IA]$F;a|UwbAz}ßۿLZ#$^k{+X}yJ4ԨZ97{ab;&緺<Č!Ucl.d'$]yxl%{v:,%gs3mb&Б#(k&gGATLGCPMiBhnvTխ dUFW<cOM"ltC$OWn,`ӧ>dY$7F(Hw\٭Ԃ;ƑkDc3V4xne]/1ܺZB5T4CM̗<Ej*#(N/SugѐLAYdDxm?KyX-bIl~Zn@cEPUF4DPC#(yZoi-fJ4]H¡tξx&Yį2c,Tj6\-a4S=.4yvB.kJ/!*\w*>iFv$ΕZK,ڤo{z:Ur~*Xk%dٕW5~|\#(OHI'e.\q>!3#$f,ѷY75b#(qDê{TiI#tvRЎjH+iN'3VYD^26ӏ$0>*	}yZZAڪ/M#({E#(WHN,S{>a@D5hfk(yka.x.y2g#$߷JFXG)RjDGԿmaAf~e6""[t0ݓw,#$oh,*-9ZՑ]^4Y˝N[g!feƊ<=̟j 'IZ&u#(3o5Z}i.ZatJW((v7Qόk*V#$~mg/=9[>Wg~4Ρ#A5ZԒ]_fq7ٌ+ʶ^#$/*V+Ҷ]-w8wRٕ$ez練жPo\׺mlj.o8OtYMo,+_8Z^fKxژJ*:&1]y#$w^)Z4[cpSZѯ6;hLZg|&e6F2Dgq[իò}Ŋ/3U ܳia(WH,\$e`.xR0r$MmjScUpuaCS%UX[]L&&"g\}]|8_5kDF[H#$PkWSt*4w::G?x=NUմ5G* @\%;Tw\h>>gCZ"9W}KeWu׮BS.sXESzTL#$nIHQ+igĝ62Tm*X-ϜlYFh1w,"c#(Qa5%"Jq98sbq\.:-mJwFyH<j:]Eqm0~3ŜEAxSb%f-U4gGba%Vil,%PAg]HL2ˏ	ypK#?ϴTI(SUEU[Tqv]AU>vaic8}52IZٖ^խea;Jq}K6tZ皗2].'\><Mnjmv#($QZ[UJ(hM,lרj,n{a]nxnb]֍&	ob3m4Z-&T"ύx4׹B@P2gBƤv8,suF,VnFeGkt&c%չ0Z/3s[?mEI0SNy<Wɸ)"#(E.takzY\h\6!`7fbѓ0JeAGJ\2Hk q@PU]W{]ʢn#Dfu.mUmEE#(ͥpX_\w+>vf*6\X!L+4>Y#$V%X^*nH_JM8Eu߶+=ZPU]-@56O#(&TZNnљ1|spe|+jCa{5޺!*hYOל}8d"	6<f^qI&ds,yԢzl%IKy{$:*Ǖ j럵2ٍ՝Вu aƺXjU3nعnR#(v4m+!lfQ}Vd~T3oE\RpE16	ͭy/.9iZA\)d+9/!lSY38T:<ۮ$1W+o޺Y*#7J[#(Ǖ#(KRj[oEwrՆSlm١vjjK	xv~fkP75]=hǂ<;F;Dn@|j(荫Hp^3&]T^(:'7JwF|AE(ꉍRy.fTU_rEMuRҘ;?Mɏ!#(E[#( ,V.N|prqS.peK̢P/D xm&<]IPy!ͱਭJ9CYFyT=#("R,suiy*#$}t~#(+8=<uE3m2E<>Bj˳_ E^R]̪BQm#$,~}FiJ4]V+1Ebb.3%Gêw%#(_8y՛`M2r#4.<rVDGg]Rm#$pXF]6k,u{уOG>0t>"s2!i9(v΂8l`-@tV2Zol	(cgyRUUjG`%Z#$Gw>V~Skz3s(Er,~jOrP6bt=r{#(U:#s#ߡEm%os޺szs.l姉VLq^`F=>Y?f+=T,WꂿAa(gۜbs@`<7T_emPAŕYY@"e_(P)xqpԘ:(~*#skQqgyN侷%cWvn#.d{=7bQaPR|GU-4!D0ST#(OKBeEEt"N B%J@CN]yU]ABI9ZU1 @XW12ܻ*5"%$B%2uN5g\^RxUis3<۵ȁx_izK=Wt)whuy7/}G^Ё O%W[ZMгhYɅ%^x<X:8D|P1YXD=$櫙w~ˌ8޳Y,N.޾BjbyΖΉҚI\3VזCH6M>}_N^bӌIeq/*ǭHoL\Bm <nDbmKj5 Sg8`r:%W(p3W*yH1:};ǯ-&ʧJOw*{Ĵ%O_1*%?fbsl쩃j}pdtP"0sTthGiq'ÚQF-vF'	}~.ūkzcX48ؙ^i&`.YZbO~yIicbq vl*I(w!!/ٓli6	/8^f}g}ET5UቪIڝj)"*VqS"\bA^]_S#[-[/6L[%\VD#(hoHՌYۣNsnI"@=wX7rnnì*$ ?h#$*С"Spz j89(ʃ'd*c_Tmyv5'5V4oX^m-`PnvH<j`>F$N!xᤱ#6Y;ٝ!Vq(&,;ZvzONC>ˏ(jD\I,ʷHw:<">w/ꄥ(CY5b%/n-[)Гja:MobE*$q`_^*ǽ^yJ</uv#?ߛ@@P"?@ ={#$\ipL3lbk8=:pZ[matA?)7$*W;})I5]As=c[G<ٯ^NSzo5S"$F$BZQ:zʨr>Ajv2d| DH@w-r&5#$O	yP0sSA0RQ4 JI#;a#$U@BHY}YwAūE_#(*A @THɽkAzceqp2c&KL8$/+r ܙ$m\9ǌd}aiP-"+UUTo^M<d87&D#$hC#)3ó;=ɲ[YI?2KR(,#(>oͳ_gU|#eu(rT$^@Zz #(<NgRYh<n"g?'#$icQo84{	g#$S	QuYp?D9#$*\4}}TR}x`X"E(2tk%͠hAhhBb#;5BQ!AGl>!Kt[fBsbذL%OPtII]ĝ+y٠iF_xuu綦Ha[dBefo$#L8`nAD-vdW(?\~Ij1mRd%&e0vZA%bNMpF/tIW8IA@YbHw:n랮l-aVi_5$%4x^azvO h@ӒNfZz	Hn: 'Ė;_Y7O; yzA&#(=fߙ?oʮǘS5#$o<;#${4+Meyc!teBemKt7_kŮb="lm/3ͫ0y~&z@#$qdY3k	NnjxĄ!D=ZL$+bFP1=PɘE'C'qOt.|L?ٲӓ!x|5LAIԡ$hP.z`<g"Ğź@vA[$!E⃖MY<Lv_f։Q$F1 -ׅH#()ĥN%kLV0UdEwׇ)^FksYXS2lo*k/-7bSt4#TG%X.lɱ2c)'Eoc͍/#(_\mQ<5w{L̗fN8pMIk:yՖ,UW=$g".d#(6Ȅ$8]Z`RA|ȯ+|Uc뽜z;9O[>j{#; s⫰TIu}XHKv#˧M-\su=t1_Gǥ[/Հqۍvȩ yPowcy;`=)#$F_h?~M.r.(\Xe*^3E	邊NQE9dכes}|˘6c&q'ۏUwvXĀ"gU,qDl03`tg<;tהrxo$i|jM߉;NCA\csD#$k#gD1븲V5(O2xq-&EɌS9(Qd0 Ra}t>J;Rl۳\^SN{+<gV#(fK+~2JgC;3.Us2ȣϷ4׃٨4l^Sz}M}Xs뾙zdA}G<XoΪYsTNXA(ٮzg&}._	S^,,J6z>%3^eFM\b{ճEH95h%Lϋ &p)^"#(oqX̾QuLs>Mǻxy\9︐f$H@wHI":?7_ctMj#	9s)~||V5zP$߱^VځhDJO%Kj+!IL#* *8 PwXҕvv,I"v]T#$?O_MA_$HDJ}5ɟ%@?'J`msk؎)pHHߺ*2v`p??olG=yeۖ h TP(s8tW[Q-`	K$qd[!UP[	4W_bl97ۙaai<]!ȅ Ly?0/BۓVʅ p ?8)!~jaEh9r[Go>s?{#$5ZJ9J,,ôY>E8aG?dHZ Ql&Rs9QOs~j	I2Pl!x)MX;IKJ/{xOUH;? }ܧ*< ߣZ @ħ`Dǽ\@`Od] (zo&!%hV\ő&,D	[	P7Bxжq| ⮹vw 2)l4HЉ:I,!H*E)fCImyݽ@{@^T,L%RoiʄNCjvk={`Hl#(WI6rԞZbUePK	V}hGʵb?G,89Tã,bk#)O<46DJIl|D=\)#8o4ҍ`gğoUm=*6#(N͢cRA;#$+z(%,H,<̲w}f2ڝ3t![Eĺa~ڡs+P[_!Ⱥ>Azxh~UQ!|sjH8PLK2X[dA#>Nu/ٴER[˗?t)e8R\+q߱GUq0iyKj5e!~(W/|@2)QB!t t!qӉp);Z\$9ER||~$Ok(µ:@btB}\6Ooc|eI	g=;uwB`ʷ{hBj'+D1NքN,2wG3c=f^<9L'#(lx	"sH@ChTU$UUF`M#wa@" FBD={zl#(XI#(۝Hqq7LjJF a%p7Dqc6|5&{VIǦ9udH\A0A:nl3$'[|8[B#('h+XT`w[PRa"ަA$#JR "$T%dAB-%i>#$F鿍Z;Ox#$O',(6Y{[,Nj跃z#$;I$!@!LCa߄k7]7?91ۻ7Ū$L"ޞ{ߘ8s47F0|5jj_N\}=#(*sےI*Kr; o}n#(t7Pl3Oy#ҙs?*VϺjBF;HH$!?Mr.y7:Mbd"Fa}OdBO#$ |vA1*8W- )bR^ΕE,זV0diN#$WN! Оsi[};m=5ڀT<bƭlIPt`׉aF6EJK&ajh:oFeNjct.!9T0ݍ|Vtɕ狡͝KYXRxGCl5Љ"l(T#(O,AT.h <T!4|O$qzh,!f wMqo}6mve;#z"T{"qOëħSᗲE_AdPXrJdQZPװgs#("/1LǨąl*n\v:#$U,{+עXDpO	N(	ҫ )|Ozcup59˿G$mom%HQ~mU{ÓyoO.U+E`&`OL<%_P<7OBL6>G]IJS?MNqnaiX$ =B0X%Őds*h}8ֵA4Ml=?IxE"#(naU1'i#$mY֝QPq<HG6^*`G_S8/mr(2a9['zqP9a(>4Ƭ|W,]Ȱ2jgVlGǡ3?TEVzuMI悐ݓO^Kiڈ_S<0nŜcH0Jӗ}&xv6N<ys8::"=Cq7P"=|(֡alҞ:2y$薗ѓE l$$׮&\)j;pN<P2B'TdCgA}iߋTWSٽtL)E]z{` f{Dta2>QЗEb|0 o.Kv~qU%4tbhcݽeɮv1bt"	(:|fxf.^0Dֲ1qяXzS^aF,0B|%l/ˇ!oj1j}L= Ӫ)a뢯À(v-tv[ɾ&#(vl]5=bztG$f*o2!=G0IS4'M&{덞WWڊ	G<sފ( ?G`fIy	?SъJV*wŚͲj9HA{#(%©@ RQTQNpbg LICm(BMwhJٙwB{d  DS?_?~2A3L82AvׅA;oy?"%-Dkᙀes_z^?_~џԸZQF |yf^mih#$_@YP6ta	U)xi(خ|/.cZw' 	BSQv[A `AGSUހFY9[U#u֤'QT$8e|G( =ZŘ1w B<Ф9H'ұӻ^&!.x?:7ӗaRAhޜ7w%7Npy~5$Q*&ǳ8|l#(#W/A\`{%*$HB0^='tOL^<u~?wywJOCǉ>Ğ)?$0T 8#ȩfWs|1adaR$fdhQ-E^3g9x۔yy*3t=O o7nP/ύȊ3I߼KMfಧޚ"GU_{*˼'M4S!̘@>xmS ˤ'[*AG#(0w' 0Dw#(fDa̼<~xrul׋;wo)ej֏5Bj2&yH?qA7ۡsy^:uUHwbyV|({" Af=1=0w0;W	:'9Z	 WOON y|9_xTQ㏻6Y],²G|M⨨ѡCO:o`uک"fEx1ϸÑU8:8ǑȈ R翌'	rcZɨ흣lfZTǯ͛m8WV| #@(PDބ;=Yq8ځE]<! ׭Nm&L%+=zAW}1Ev$=Vz԰vv:TbK;mTx;fMLs5`[7~?F@z\%PZlsӍ/0@<2*"#$ғ/MH>#(J9⦵gPZ5c?C&v66ycԳ0T}|Ze!9|]ټ TrתWGhAO6#(qNL= xn;iEl|ǜub9҉P#(v}dPֺܿHEf#(}Edzt7PSU_+\_Ei!qMixrqeʽ${5UT*B\^Zf2~Z!ŘL|LRl$溊A45 h|&z%:*_i\ uQɊN 3O戙rh&^bi6!GNSw8zKV-l+;=#(h>o<xCƊ=荭ůG"QrX,EID-@2<GFZ#ϵrp{,sQ;]PRЌE3-RbfVWjщ3h^)cC$HEoy빖x)	}&<	y[6"d#(N\wjLULWOm}c+1bim-ϞGeׄetP(R.!ľuV3%c62ƭ=ÖToc^o2t[#V"xE9.&*n /,8~j7gҫ5F]Y|ql>0VJշ4հC4t**z_?8}+VyỴ0ׄQЦNPa7x>1SSQ+j:~8Wt;ay}3I«oDf?e}&5C~OG+DQTfY!%0 >o'*{Eѻ>WI/|WI'BE;z+̋]I!=4yͯl dvmÔ+жV3}-m#$EЮ9Ǿy~0ԩ^ϙt_#$4zjХ8~#0}~TBhWYufD$~#()݇ld)L?X_U2|yG:-m[ίjnOy>uKt9h"T'3TxmGTQJJY߀{{vz܉WE8/̞yArI#!f0mZǝb駠.ct'i^|YYfGyTȩ1*g=dTVyG2]X2:HbLP]i#$z0QLey>M#(Cm-}n39bN3m;Kr':d|t+P]ٗiˎu9mgPo3){iۋfty,-Wgõ~Α8fZOgn_^SVgۦM@Bl&""FPǸO:G)}N{ol0Lk]c,P:O|'1'ņ#$Z{2^8~:S||\$Yۦ1"ժdB#(#@7Kq_.ݿ%00[ZeII1s|{e66+3tD%x?Y@ zӽ®7=i39;C ,'I0*V\& 2W,	9BP^qS0T]$-w}<T"#$h  z{\uʲ";-#$vM63`uV 8fGDyvE`(y7D簒Y]Ř	p  W=Ư>И*89d@ꐌ\~ۇJ>O],E[X wd.PEc8Ng{ԞE+~ab͔QHי!ׄh@b˜1{@pPVtL	ƴ~_'Hώ?K!P(ǫb6F'V VO̸B6G$-ߗٌ<ca ^8T?xyb:Q2@ێy<Q;"zZH;%iܿXAXf ]ߚ P_Ah P`&Gf61s>_7I#*fѸ>SׯD$9>Vh Phve::TpE|#$/=/a-֑X#("o63N{ށ 7?cy^gRzԣ"^*x|Oho9kbD`]C9AIC!	.B$"B#(eن_zGc2/4 >\@=x؏u;/#U/,΄$UKk_(n-610H#(bɄ#( C]",U]]7hTb/b,rC޾8tNNav>{jvoJ55E	}#$żnz{P"968=?ˍ~nqp#${g^2\rǓ9#{#W"0sL|xLo b#(BTSkÖ-\rors`gs>{?=~=*ƧΡw:fA_;[0ƏHf&:i9EYYXѼp½FH;f(h@<z<XGm7"~M9umEhZ<_`jSA=AR	$(qH'yU4>a(|	FUf.~]2?r1յ<O&GpW[sˆ׌|kΝw)/ݢQ9Aej!DgAW*_I[|:UXj:M[Hf ju| ݀VgYiн{	 GT91+2X`c189u@OE,/okիςxe%Bgn7),9׳+q@:u:K^izuT#a]r>C:,O( Oͽ	j5]dBx]Pmj:A^22fQRw"0Nz0@Qw'WD]CUXvh;k+g[%Δ#(+e#˳*1n+n~^5mhmD.ϑl-`ԛh#(C4NMlEat`۔z)=#$9dW"؆ZI=!NYG=۰n2Dϯ=~q@DR0BM7/{;^;Voj%QReHS"캴9FVV!2jR5pH|9擤Mٔ68a0>_lFTtre06INy$3!{2xl9#$$.cL#$Ou0~9oL]X[}7r`GuFR`@zZ5Oڐ)S\<eVbAOW (LH@sioJ-\C;3#$ě]*^n?j-~#[at6Vҹ0!đILuuZ@M"GAJFmhU4#$lk(^#$^wo)ݻtMv7[bemϧ~|?e>U26z_o d+USwSIHJQ$')nӅ"MB鐶fA_%0Sr={F	fA#c麹>ڬJ#$\c:d#$}k'{ϊ<27h#{}\l1ՅۭQ/]TW3w[+g9tA][GMT~ֺZ%ntn9iZ'C$bu!P2qKB8N7Z5wF}5Cэ)[q-X;lݩgxT!+ٞ(1vf5}7GpwDxw7ݾNB^I,Z=[Es?#(*	4W >yA$s;'eWaKEj]*U0߮|Î`>.#K;}6y1'\KY ߤ|DdsN᫈_±@,FVNly}cwl_:5jǺ@Ĳ6t/Ǯ+?ͱHl'#$YÉya0t$k;GzKˣge5DUh;X2Wǖz_v7=rՕ*?<QJiB/K#$ѩ֒lyZ HH\oQU!]W{&y &,Snǻ|sS dG|-ڿ)Ó9cp`DV~经)[E0ȸu!cuLTEwn-FhS6%hyN0#$%Kc!ݾg|5"	O₦<Nnk(6Eũ%Jձ;g߄335	(nBXTκ)ҡj@#(@tc{V0ŜmԷoA\M4ݞl4WadHC[kIҋ>l^|7;)u߳6<Cr ?#$J,1lJتwvs͒Tt T$EJl2".X`^-t7PljxUi8z7q`l.bG+_>y}QzRC.V2'6iTҵFsU?b?ݏπyPJ:PLb~ nq c ?`i@U@C(, rs	#$s<,Z8#$`;A綏__1sEX?۶@'A.#&SSOaǷ	T2 EO.gp{a]&g_D!.c$E$§GoʢsEa/6N燹?ln/ |Mqx Zy@ÓbfG2\υN A*xozuHN?Q`h<A?jfvró3j*sdtVbtCL_r1U1&c@3䤡P)b/1NP'aD~qoX#gtlz<6.{z0Ē5d)OI:Oq[_xꓠ#(#(i,a!|B[>6]'	[:B]J^*MM^ZS$;#(2j|/"dgn>u%d	?(: I56xЏG@TD=&mۨE1qԚG x7q$c$ Gphb0>sRi{'Z$p#(.,w᪘L&s})P^R8W̽vG:e |GEon 6	@r5v` &G9e%-oe雦Ɉ$Z΁K\' Uos)Uvk!@S/\S=ǕqLsh/'GD $>8Ԕ&GU|>QOoQ>G_6:Kҫ߫!%[1Ҟ#(;>6O˾{c!M%Q#&IL`ז#(<M#YUHm4&?wS!#(B`}_sS#/KݨmM%%d"3kU;UbvǥU2YO~}H,dK ޏ(zRw&W/px<t8p0ǎ]MM`ж@{>+/-OF؊?) x|*ti1y =!J)Yk)t-j7vE[H8MՉwVݙtĹ`/Q!_.\`B&@,0B0?(|qlBB,G.kx}	J{B]ƷX>:s;Me}]&+2z}o7DHJdJ#$y:d@:Nl5"<m\9ਚ;~iOipزEJMGOJDD8vtbȈ	&I3E0'%ddhF`;ξȚ0	H$3|5ԓAzA!^sfǼbx)dtbÀ:_A8o)!??n4m{X-2XTZx_ &Uq/fy8'5}o);.88wLRt/SęS;tt54e·t N	EQ#$#("%j5{Y,o\3r;b=(ןʈ ?#>_hnQ8μx~P5g_#$}~f }LP䠦$wn#$ 	h}=^/D B*_yD5^$/{D>3![UDE#=վ#(Fu|\ެSmUNHny$]ô)2-8(}G8#$}}oNI]yVS	A@jzx^;tDNLBɿ]ΝnPSf_ƿVviWdHK:P>sߖOZ4舝=4*h}egENcvDqf#$,>|p,Ia^aσ5	HnMks7X4#(0vlEve#(BCr8s&qpqO2*Ԏ<f2> SlLg+`a7q7Z3A1>D oƅ]D`EI>|?9W}kzwsj#$qOmCXch:{ ,zhh"_P;sn/ڇtzo u"$`??SytO[Ɯ_o~{~j(طׯ?p0c!ȀGP+" O7;҄[}~z$3zyS|BS!"! I~ӤYx):_3M}:N/gݙ }+q H;W#(G#YS>ژFLռOhvwWO	=?]	]na)BCoFI$p(u@h`h;~ I nǟ/ؿ-5ySM9h춯MG9M ~_;2.U=u%`}Fg]Coz|QD:װ-_g:)>&ñ:!qlh>vtI)H/7YCYs%Q=<=UGPV~_'"r1&i]b;0¬<h6'ˈl{N}A?Q5eˬ(I_3J"H?f[	U6HՔ]nۀp:;(yh/Xx##$6uCóM$yTǣwCϠ*fA/tF8>FTmQ[_m['cex#$)d>C<#u+0IVI,"U@x3gxD;==B]Np&}a.ZoUU[%0O3h3=yCG"n!_6#(qz# B%>Bs0.}#$G*D@;	lzw80l}Nʵpx̙φN糝?"~"*QI$$Vl~ք#aDR>7Ciii=FQI)a0TU)""95oFnPjubعbF>1Q؋!2#$#$b$WsG1B&T5=~@AܛK[?&z&j{<sGycCT(W%Zhpajwc6O@)L}yZ$G_A~w}39lT`s٥m;oz4BId"$O AIUIPhCK-<u똥$don|x/K^_P0&H\<#$h˶s~"K@#(T<}N!jbOJ]]Z%׈׻*ŤmIl礆eHCcp R{A tg@kܹwqrǂ:Q#r-ۂw?T-\BnwYQ9gIa`LAw<6ai S>"g-䜚ed$᥮Sp;N>'kw=M+'7	4nb7D͢mz#(fBdBHQA"|ն#$QI{uF@:8pBmM0Eq˿_y^LIFx<:wqڒ@$:>똜Me7#(SܞZ%wLa#fM+QAgqaG۟\#(h_?%OOߎ#(a#(#$ˌ@*GzQΧBȒI IMn]iwIKUbɅ$	?$˕SWEB~tuG.v!29hȯ0h;s!qq@;8m6ڧX|\ H#hy	*b>P|n*p!5pB#$,q	6zC^8:eWN fu{-	$B=iwin#(,g{7&#QNK}a&yKS}GEqv@oݠ#Wr33Z?P;ZaZPEj~#(.٧XWwv<3Bbv-Yf==-)_+MG$EMwQiMr yo$:ܚ$!_yA<@xq/|-~e	IhA6ZHrAr7F_K&7^cJI!\!#(@+uOp>GA| ]aU-Ypr;=~Gzj1ՀbzD(t'nwDI%jcFy(;`8JHD$-C,8w2	5 uT0#%V!6X<a_c؃6Yͬ)f4<_e@[0OᜣΩ4z֞,*L5[1Þ/FtAלQ1/sjCu<7;d8+C\Gk1,"R{pky0hqP#$?D:ÈD_kes_ˣ(ua4P(6zGN845OߣaOXqq=o#$Iy}64V؜=غ г!ْ>Sa>P,?_;`?NbLd[ڄ\C9Jqa]#(ubvaf4w/q8pZZls${#D>QQ*I2N׆w ƐHI}{h(* Qou}z]<m~46^~LJ>_\|`l{=$#$~Fk_>+n0g(>=~AQ>GTT m'ܹTK2#( ,fBQ0U7(-_n<Iyz!^#(umDEZF1I"3#$Û^	$=@XQ 6Uur&RI6FLno_)ݟq0؁`OTh'm$h$a<luN-\<ﬦd3ȨeBxWqFb"D=}_T{0m)Y*#(Nlo!xl^>` KEV[J'jZvyc}>}rhF]dVLYt YRHp< 8_CD D:_8$ǃg$L؏9xGO!ïP9 "W`=,AV8e!]`Sad0dE!,1Ya1a˩%R	b!q\@\\!ln "E &1	P!r0lbRGLg<hM9PbŝͅBŦ*p"$"y5FgbH%bmDL/K1h&ѽMP߹1`# v[efbRjS?nȣ}6UpC+h{r~nEe!HR| 9|#(P\|k KۆwBDc#(xE*	eS`yYJ jf{`_-'.y,n*nGPTޔwQy&zGbܠ"#(OS	-a>NoaᦋCTB̞`̢*5Hń<]!ܰ`A0ݩhwdiPAL&z3;\9Hge?O(z	|IyDqi|y&\2;"%/2=q}vX{Lbօ?=U56it6V*|쐋q,qR&%¬8Aov&F?Ls_̡cNxAāh($*,먱O)-F&Ic#Y2H=IHphD||gäBhxdtߋ[	? MBقcKA6YOEAA'bwuƈN@.mĒ 1b\oS~Qgl#$=)Yy]GhgpA}:H+>1M_8!`oʌD1  ?b5#$[5j$os^PFDJv"xt|swzGt0]x22y@Xrիke~|8Eլ?_^:j~	9<?:m6a<953lP.t31p]yU+Ȏ#Qd65GEpPBV*VFR.PtJdI&#_93\8#İ}n9ma-/Sr2ߡ")|^йi'iԸ>Vv&ZK		y&k	ܧΧn!ѭӦ6)R3'U1v{q &1QS4h5)*B"omi@m\	d*.=hjbfZ|G=G6JI#;zSH3eݝ\]Zt44ME*~ZG!94SP#:ǂ,fC\IFq?JM;l%[);̳>@u>{\ֱ"HoBRD)%ɢyR1Qت6[XcMPs,H0>uK|}n[.SH^ E)$!( 4rl>_+P:'T*n#$@Njlkr8׿eO{iH3!rL@#("YJ;1L3]>X5`Iug#$eJAR63v6꽈9wYsunCIf0<8|~Èe(D6f`;,+.8SJ?;MH{3ς4:D1P=Y3,10Oz#(㼑O^:p0S /Rf &`(bd6!Bڳ{gZWS"JaSo. nY\ȡchܡP_yG@W&\FݜuߢW%Gb#${K.4ƚV*(<.'(o"(Wa0}M ȁm?Wg^O76yUU{OH!g@ٍGzXsm݋I#A#$7c8␒#?ؑͥyO'C&'<.kpY X=Z\DCiN<#(9l?G6ԏzP8zH2I%-M#$Řhj=mj\|x9!`$3k)7}ԆhdTr~gzbB[G$ߣu<vH[ww(64W:;z#$VCSN/P8a03CN-#$"!'h-Ni˄딣a(#$\4Ģo+׸gix^#(˟b0@K(um*р|t&ݩ5/qd:_kjtiZHᏳO)6{;XǬSHa:y#$>k@u\Sh!rbbd,D9ŉXA(#$AȮ^md~S@Ph܁aҾ7Z<@w#$=U,\.bʆ-`6n/_fά"B64gz9$GNkKlxj.UOrrIJHVIC!7Kbǃ9f݄ÅR`,dlޚ9>ē#(>!'9rRLqi<!U5˷Z$~<7^3u:	u Rx8QRyfzn =C綶dK|! q()w탅^Ԙ9&ҪS?/̲yYn[+EPO4]8fz$;z;ЭV|wv6nweg8UXٗ23:θ8voHsmd[I#MPn) \3W%un&-A|gd`68HQymsm	ާqP(N5zv݇Ʉɓl}5o>4fI,c=%&)'xO#$*{K6M{/_ $314RӾjؘ<wG:UԨg94O'caƆF4~OG̿M%:W8*^/3 i$I6jשmoI< ӓJ/KH<Cqt;tb1gt2E9(*WXl9\AM!,{OeRMcM#XP,>IɞC͜<3ðz|ϴn;lmOrfM<_lc	B'$κ|Dǎp^s,n$!C0z$Nv.LɄ|bWwd{X1Ite윖=2sdjEwAQr3hLCDjz8ɔPXZ'0|~Jn#BfY	oS0J"&SĩJbdbfR31ݛ|BM]T9fOa6AX, "Z8$凇b$L1!6em䅫qK4!0Jyq\6q0Uq͚E}mXsgW&Iks2  r8V:w#$4A%zMru<3SE%#(-Z"1a~iL#"iV|Bv7lgn}Z(.0S7=m#$asPY#(GXHP @wp@}9ެzoUة7RPhB0':Е;\7(U̜|7`"hExZ5nفГ,ɚ7MReo"pä`U;;4 (DOrer}';cMAFبM8Y		04Lz4L)Dy&@eW pV H74iI'3q! @`cշ	B#(.	; bhq1VEq#$L`>? 7b#(1g$Evڞ^n6]a 2SNX,؃,bȹ #(uHvc~ }}tRNtچ&x)LHo!DQcMf+0uӦ(gP(I#(n} }2)ۍ&y:Q |dg8ٓA2<MHCUD2ˠ8W9MzLf#$y4}fn^	]!@eEN]IAipq8~mY4Fրi:F|U!Di͡~m㻷r(/HQwo7#$,57KnĘ!d8Yц2v@>mHxѸn[fmf۱#(@韽8fIѰݥA\o8˶ay\c .#3~o\( R?R\Fs#$~m6ocy[fUm3883z|v=|0HYReP%kl=V#(qА<eQF0С@@O#$[)3$?Cl?z8-pHޭwzWs1""BB?܊ξVc؝~)>>'xD21#e%:ii@Dԏ6oAZ>k6V*_~#I#9K6Y*PS$aI]+Gx~'R4*z({GQڙy{"2&17Q#$O DBŠ>b&Ȁs;L#(R1!/i%U'өnYNBx[7) aF6O#$u(Q!dD2Fi[(_.ұ1uc f:udL9Y6AئSiBZ!}iB~;?ld\2ߖг`r6`cBe1<ߍpATπ`R+}_lr:&mfRU_5UG|_AYAUix$e6r&.!b8ղbb\fM)`pDxRa'$F#(MR1ѭVC-LJ2бeAT4V b!!A=PQ@=0eWŏB3};7$6|&Ҩ	=	{xug"ٗĕPTxK F%a߈㞔BQs7Q42?t; ȣU$Lu ec1	Y#$(>:o܁ChULI.{I#(FI#(DA;Bt$#HUZcr=#(Jb eFPq:~G#(`:}t%]Q^)ѮMw8$h@o&ِs!AFڪ e_:KU^!%7kD( DCNAPKX<qeńN2p:c@!ӐtYGryn(,7  1#l AS@f2vwkQb}񩨵+=K.ᣰۭ"*wq6ƥP)rd{	QOWoՉZ6bR6*`dV+&M&jRUO3I|UHTp^qADF HG!.OϺt)#@|ٌs0gGC96$CDUH7Cd ŔnOrοVV/pRM`v[1X"-2ES| ].͂)9h.\`,@#$~| OD8#(""sM>xo$k}2汲dInjlQFZW+++I[tɪ,Y ";cppz_Ji?ɀlxa=o;vh$#$bn -ÐsfoJ #y$$"]~EP	RH	y2R,X#u=7_+e*;_ʉa;#"D㋹sXfҝ8V;)7ߣ pT#" lxײbz5e	/	Od^7XLxÖ	ejpzމ8|(D5)u8sbNq,ѦO4)%v99%|~'8y^r7@!Pɂ>4[^Xbp/FP߈@5S	"#$N@q&t0ſnΝ;m]Jd<:X0C7;C#(\\'qȦ-ũSIqd*ZW4" A{>P|΃͆+@ 9̬in@eʔK6|O(#%Ui"0/G8(	1b(oY1A)BBJJYd0p7m8OhGx>h@q!OJ84]^u[Ep.:ug,,`jq)U&M/NAz+H/[UǶ8◊T,C!= >&Z6m|mm'3nxLv'Gwm:oXq8vmvE,-bUJkn,匫#(I+mVJIR8YDA~۝Εӑd͐6g9!2؎m3i~{ݬ&fwZl1̍3b>{M4n,T=A1Lmn@q_o.58GVقlY6)Bm#~PDߊNݒbfn=qg`d :r|.נzGaɁ$hlYx[OÖ{ÎF ep{r!3{÷wlb,ϠdxJٓoy+]e#$f-pmDkHnpF#(:;32nqms\&;MΜt]Ʒ;˲9p+fIUE6FM\wQ9녎BQ1;mRW~ϟwިF=тE+Awwg:W&cdgǦcw,|3~onv!`xOў` CRgVHN/5U#vfܿ$;Ccߑ /{FM`N(jQVn}|NϸޔC{(Ĺ!q^jB2dvNP`,BŃYKJCf#$Je:=~q	9#(tb:v5rDKPfa	Hf4c#8fARvYգkV4N7W[BUf~,_ed(PAV!#$qbqv$X@z9ߪ#('>4IGKC'楥v| å_xE.db02ki/#$҈=A|]A='X:DВD))D`)%IeII`XK`yqw3ZٚkfykRiW4 nc5-[#$c_d3z٤,pT ~4_pQXT߭<\|M:EݽB{swB2}qDyCwwE1&wEV9Qn6-pID'ʹOm#t\#WdLC𯮧hgi=^#(z|cUӿ܍@QxBpqj}=wfQN{#$w&oAn/l	5\	[fHa^LWS=7V ,q`^2ӕ12#$}2$DNx@$VS´^!i٪elhRМJ2OvS$ hhhM|K5G6b.RHIƩ(G3{aֳRcJRei{J-AF+TT8!DtJi J6]E5*e5>F؝37T0曑tX˱-ux@>#(I-kJ FS$@6~;]:nKP< z.DK|HSeM8lljA]萧dj4<D&C	y-\*Ĩɻ)7>FUĺɶ?he쐙C&圭K1i///pǩaIƻ@S.i,`>M"{ܥQ- ?AA#$(qRޯmߑV%K><ҷ@P'n=ysʹG#(Ecj/w8W:\ɱrȘj8|"- a><aS2;+w&DX!0;(2񳩄0W^G@XC>iTL◫X3 } |$قoG`RvQLٔN).h81YnAPt{L*2!4Nh-jԜ%yhЊy~ާ!cQ~N﹄KaU %d:U(e%	اĿ=#(IJDǗ_(r_zH^[8䧒]xrjhFSn97@m=9Ud}M#(Ty&3*[@oRRb؍eYXeZjgkg85$nᇘAt==O}9!a@	pճ#4SPНۗw;܉mߩ)ƾ#$J#(<J-t}{S;U!8~tq+ʕ*:ݔQԫvԯoS)Y	(H dNh#$ Ϗ;zAb4I<(LBt:-`nj5ulJ0Y!CgF,.;p=Qnkv'YÄ-8,*gQ/$+&1ғ<C7&a#$Μ^FǍ[аpo#(G?U2v3׎<&Nm0Rc(d@@BB.#$μbY3 &:M$P.RxMNr7Nd}o[6hT0H-a^Z`R[ɪH-ÆPAY@1;^:Zo#$	3(?#iQluM^3rE,f:ǹP7ciH$W8{QuCه*#$vlb6[Bbn9#$}ml2eQF@o|8x.,RH0#()xw~R}!nw"`tx*q8I{{-rx*aEvj/5tMQϱrhf^|oci!ɺ>6S3	E+}EBISϹ`#`!!=v:4OuG$$4hڿ]mrEhj*mi-[jĂpDVA	(azUFD_3 =lVm!ȝUt#( ˡ*s~;ZU$Q	 #$-HfLL%i2&ZiBSL$%fHHdfe2FdR`bDhiv,e,"%jLAhE&L+Jm&YA#%*23(c{{>'T˷'Ջ@H|mpe1B`s!@ܜ1EUUT0-Gr%`Wf#(gx	Yf("]?ؐ	&5sA%7Όu3prlaCd'^qoUrniO/3	[yqea4ߏ#$ܷ`*CLIe*t;7"DEHCf,SM$`T4f^׿|(*8~	YȋMhE$ʹwُ}\|vk@Nw֤F0&l:e<p_OҔluEPvU5I;CovP㕇9PKp#$#(#`i,`#=3z1嚿b~{p|3h'oz2ʸc!YxPP0-pDHPK#(3[ٛX/F~6˜[x8-$30ZD	/<c~Wzr3.ώ-ܳYj{f[mۖޒnev6XM\๩EU<꜈wE89!V%{jHB6/57ps>>*h.6Ľ0m$E#$N.<&vUҽZNqw5CNO7ӗUϿ/w'1a%+#(HM8:	H~kE<n>ܿ $M{r:wv{K~y-2M`TzoǎKދ4K5Qy) 1뻞5&Fѭ$A3AxT骞{8,>b*$3qH+PvL+4b<m<aZgy2:K:saz)]imG;nm,nb}1Y1㓧g:<^\Y\+!L˩9\59^dٯ3Ӝ]IҚLK0PK94ن1W`i+e56!CbѵJ2=(eNTZ#tlRa̗XLGͩEFb蹵^:)( K)L3>mARUkSʊGFmG5,Ba΂*,'=ٴt .]ŞJ{ۓ 6vֆpݦ>@bo3duc̝1zƜt[AkLchK%Y\ȓ!#({d׶%]shjpu	6RCLS]&$/#(~{9ec6ymzkWDUN\xpaMѐ b6laaʇXa"Sl:QFbۡw5"aIv7t^w~aة|6,/yo8t/̜zf|Ӈl<G#$YCs5DE\xApa*+9IrQ4)Cd)=XixcBSWqx7FދKn}9\GLe	6nɄbtg=MiԾTw.Ĺ.F7 Ww	s%d%[#ZY6u+e7NyxbZv`n#$`{y|ctBք'M-Z0NC	Ajr#$Qhq_e%[.m\JPEk3I YPe%l$熎.}#EAe41-%U#(LQl*IҎrۼvT"6sNB͔4$$58!>Xa˚gt7p)O斨wBz?yRן#$C:Njˬ|	ZPC_=gqKxh'qg[3Lpܽ>/@\[K{jJBBG7u^pZGE*0i%oX{{ʁWñg.wNgI\#(-JĶ:aQdݱ@o|kn7c9aUN+w{f<5mu]3YvS­-vuwMPː3oN )Υ$Ԓb2X#(NAYOrbS^Ο.]03:ad^REh y"Ėii5,FvE<nɇbâ3ubJF]l8q$aij\.HĦw^}#:~L(oJI𜧅ZYUzᦢ/R잒Ml:ovШZDInvw1*#(*̴1ƌK`J w21͊ @>88XCM9͊9M\dqdFnqa$R:.:*ZHpIP۬4ξ{X,0/5퇾R]&2h JoK3`&6ά1J8xS!s+fyCcY&$N#(䝜=sap;?0K>a1xmNbɘ|[.؝#$^o/Bnk.dMmcFS<F6fj22,:6Q;h=3%GEf9j;S3XA@$quvty{'>~wliLZEyVIP>sw'>&Da(Z9?5nT$@-_H[L:ΞK"|9xn,˸Y+K%DDA:vjA4Б-:XQ#(1baEs&@՞k T&deQNV̈́@f@s֍\Xԥc&7pf"jnY8(!I, 0H1˓ER;5&nl;'z@A#$6bG#9|85$,-$iv(qrgql N',8*e97N]ƸN;+AplCjFv\%ŔP#((4)RS[*宵klV n.+SyHf)JQH*%?9gpaӽT5$SRKÙf՚w_E{eN@ S*FO؆	 n("B1I#$0裕p*Kл.=!_φ#B#p&(6m5._)[e{n[kHkYLMY.=,Y,[L^bgs@l1Li#+8|0	dק P˚@Hg9B_iI'G΁ `YF.fk_vC5jMRjlPE"X2nYiwmB`=B1b1 bG_@DwxːB31X!y~L0CtZ+֜_H?iT8PՕ:!cCwit]_"6A?jo0ҵb_.#m?^Mu܄ܻß#dD #EV̂\v=w'3 gI%C#sxi#$Q?_|?P H)3TrS)j\3hMk&ڍV4%E-36#dƒA#$2$JJ؛=fXE#(SW?JKԨt"z=`BmPātȉA BCwQE/!A>J/* HN$[lIuRc#$6׾Sm88!NC<0AʰIo04>Eg=kLę#(X⚩2Oԛγ3֟/nvjĂol՞|&6{zo6ZY<~do=:1#(ʲdV,1,D}3-Rtԙԡ8ϞtA-Vj.Xp84%2K/o]i*5ڬ~!&%+PY/_;!(J 0b i2k0У@Z/sLBLP/B,_!4[f$8"lƃgo!yv:Q=ycی\I#(yP<'}a2Yar2'#$!ǧ"G|Qġᰴްꇶ]0x:~h)PL#$?w7/l9:C#$`NU2"£hٸW)ˎKyN2r̹@ƍ%s6&Qjwqʖ.2&YMakF6"»jnA8NHa(46,P$Po "#(P	`f{2*0ψH*sÐ_⟳߈3EF֎L*zϕ%xK=FteWE`<7\&XC|}!M*ڶ0c=A\HIU@VѵIZѭk[k)l_k]nziC}\%fIq{UNB~mZ;Tfӯ^ћiD;ƞuwbѭ#(clq% lr[ѽgI۬փkYTd#$_'R,,:43`母)٩ZERts$&/8SF}v)30508ص䌳M,0B7sYOjx4+!6ʴ9|T:ÔdJhFs<:-(ŚE/ryIcUplK̷`c}<.`		#x'Pe(+S1 "fn|ƨF$X(4)"#(E<ɀP#(fB?oSA;݂3L~u2PE	%bR-eF5EkK3WJJ]Ŗ#-;)Bc"ʮE{A)f3%SX)c:iJL[,S5jZYVƗ=&@hԆ ( #~VEm	Bh#@:6I RTNT.UQ2pC]tNy1^use3=^NJ<rUE_؄R97h2>~|sgHjtx|vO-/׍y$ݝ[d~ ~`uBaB7`qJ8XIP %TY>O[3Emġ56p@pD5JµZPD=̙#(Bf\d^D2QF۶M{969ƃ/.$ugNO+7˷8@ m9	Q	bԕN1#(#$I.sA(\p\d`rn]H!8LFܺuZc4<MJ'N>"D'CmӲV@8D*#(_/߸}.ؓ-=F%S=wUxkVM֒Ͳ"S,|[aS,&,Ŗ$EmTz*Dk:RZ%h+EM&*k~U{4V6ecmdmVKFhRM(ɲm^έ+b*<[fut\fWk5IȺĭ5b!@ar_^FIYx+u:r}>mwmoLAީ\uNGYՔ&4~<tQj*	êۍPG,Q@r$!VcF#fб45LF5Dɭ~m^DZn3SK[͍WM%a(x3 * ]5`_	@&VرfE5&5_sۯ6,e*ښ͔Қ)dTj%L%)IJBTH%٢)66iE(&1LV$,٦FVddej)REII2f#"4RʩV%ښڥ)1fRmMjXYiMUtR #(B#(IBA`Dd8@+  Hc`bv&@,#$Yѓ+=3>KBК8bo"x8y27=#$+	"HCX<|sE7g!8J\$3gxKAzc(P٨)ttlĢ*m*Ow#$PoUTI>FdYDV-^uS^v+OZnj:m ߮muP@PD}4Hg6/<_tIkEԆA#$#$S4Xuju-qWF;ڢYk;ٺo,6U)`A"(.ߜX#(;gB6tt{zT>,2Bz{#(xUZcgycFNKhn%W|UΊ #(Ŷ5XmUԤ*Yx ' ~H@#(w e)63Xd(A F@c XzDL-t'E_tϦ!#wP,nК=鰑<vBQaf \1L?P~Vj,%j,WheK`N0~L"36B2nZPZ,"xq`ˀY8m8rJ rҰOkF4ҧQHr T:>NVfX(I_T#$҆6!C_]ѣWqn<|C5Cp'ݠWY>:t7hep&D͵e`,$Otw=4>5&AWGjN`G3%!0qe!D@!nCǇz1#$T!ؑgY*6`k:#mK|C|r/$3U-}d8$[x!j0Js"Rh@&IIb#G}|d7,ˌ  se=(&bi7@F~Z4"2_TKȥ1ёZ3u\T71RԃJ\5. [(1Sr/C \P>4}]E5PDei#(7Fx|[اz8wsM4Y]UY]E{uOn4$Jw,>7 '/[uiO=	HȒDΊZ:#U-LHDdz#9ar)u]AQuvƅCedipD#(Ka#(r{3w^v{iaH%NmiqTP8Mz< ms{=va#(B'GH5RI8@ˉ'aYT*q#$a=z\n9E)Y#(jvQDIϡW@:U,007MY.@Yfst"z=HĤPRHmWڳ[yrƴPDڲ)iW#$EX9\Ճͨ9~\r0I s>{.h^PU%9F#	kӹή܀JJZYZdED۳P`#$eLbOZU"e]aP^Yy<{qv!%ѓ 'z;:_MYuwZm][uBWhH Bm1y.kBJ5#=T+/K</f#$.YCOy2F+!ΔQ`iE&Z"8==s"*	s&U4 #,KiAb\0#(2I钯J#9aRSPO?m6q"WYMrә1ߖcQHavwGHY*q(rWCqc5)Hiw#$CӗdVq=v8s!'0V)02VliY.TLJ+}n[,IkV#(B]0Pd&2',Q"UbB2Qg@׿s	P`5=M뾹!bd(|i<r'4e/ g9\4~;4AXKq| & 29@,hש^ooizkQh<h$T8"pˑC #(b+0MDjZR#((r::AjEC݋e˗}#$vQbL+y7yDBuH)llC8@#$FS]D'oJ2& S0瓇ǐd^BB 5 L"G¡}mDPzm}7OC6?}zxG5E0peM9*:6|ɇhX|-{AM&Ø24u65'^$Ǥߚ%xi/zp@BGtwCbo5E6 ~zNG/O_KSĊTR	%AHje@!Au@YNtvH]ޑmRq!bQJoS8)s#$>'6&ͣ3Ngqg;eԒȩWLG΂2C?sM2?Y@LC ~@oJ3-y$z<!(0B?68aU5eCW/MҪ*̆0*n dY1!S"n)/!\K9CQV-δ P]HbvN="T'H>l4xBeG$0Q'#$D Z:xX#(Xa:u{ snMd#$eH51 ;CHaUg|!t"F4f[ vPTa5.EIk5"4.R;5ƒ汪1yx<X%xLMlݢq;faL`JKYnL2wl;KJsr6V9<LA&Ι7<ΪpFHԅ@	$,_,A j=Ƞig׃bhsHB|D+EmFdw\.]RIba(pSgm~^|;2rWjS@	?iB5~J@`5Ox+zIYj+ήm#(ɍlM)1H|@@b*H9EE#(-	qaP~dꙘlqD&n !IM2Ru@);Q]KL%9t:{L"#( .RPXC, V;LYZMi.b"'ogZ$Mm5Qt(@E xu,,dP([˔RaLiJ2#nIP@f9aˈ1#)u4cT[	Dk<RYBțpVk$	RVPQcOũiQ`vSdI'8krĤ<@Xdhz:ed/-H~ujxk/ĨB؍9#$߳n~k!^Z3KPdוBĶ\* ӪX]Ϛ6ң ]ƺvk~ C/gօDIS*S5hSK4i^JP&c	1傀Xz708##$.|#$WÏß%7;{8dh<!ϋ31>ڲjq	&.6(FDE	,"$! dI"Ab8J.$AI3 {:mǴ̅h8շ6F!JTXI**?WaY:	|f6f1#iH4~|2"O<*KhW!jTXYtMt׋C`dhQ_ۿN#$raPvUj_B2a-?fa&NZIЉ̣2x{SLךds]߮jXII3"-RQ~݉4%EK?"Ͷf[,mb2	1֕lkJi&&[#$f4֤S56)PegσAf-i`?ˮ-[ڻ9Q#(SB4Dhd(8uےEH0؄0ViIQA6ﲾd춰?TƖ~_ӣYIܔ#$z<BrB׀ݟob4#$E[P@(jQ)QDJQ%Ȉ^ԷH:Pa}a;BsV%cƓC~8PO*(vY=AIS"B=@i~l-!JCc)D7p<BQk7ʪrfm56@; r]ZK#$m&Hw@j>RBQdqɺB^'UP#(>?`_7kG#$	㯥5sXӎ~`-4a$C7$$HL}m[D>U ܎Ǳ۲IVϸl	T?-Uƀ16*\=&6㙓iW[@$	"0)~9#$W=:;>]b:r-T$آ|p-lb9ahS,-XaF@X\pa&A Jz!!Yz4҇L/x6#(K?""*'*#$?n#	PP* ތ.'r*[y?߹b틢ȑv<LAC-#(JL3#$:SSI|t群cayŋÖ(8 DJ), d%(G&'~m%؈r1T.;C۾Td<R9*W\OҚkfd1nDG4T%;9D#("fDaؠý?m}MkPX<kW66KV#5FdQG! paD`Sr&G9Xζaӗ΅F]]╹טyuU1MfS+J1A?~M.3P&~^#&lIl1Utܯaq|R}̷7QV߷ւ岅G/lb&f`QVxH!w(A!=6+dqĶL텉wdpiN10k^$jL]-}g:gC#$4T;EY+v4t[\|<gS'50!3*%c߱hQ(RYJd # ҉q)@a Ch8|#(fa?t7cmy:0y;6a;}FF8!֧okPUW(Uxc?Vi7_T |md 9ubB	H(A5%2fdWx؞uk5jk(#(JDG	&b&TL#(,'Y`2Zؾ[麩*UTT!Uym_<E0H1G1GI%dD9Kw96}^ˈnHW2)*#PH[PFN`pE&ơBfD5%g tĈo99&#&^rݢr]͕vʲ%EQ0,æi:3&B6B6J\l29!5ড়`xӈy!"B ":ƞbtxyUDT!3N~!U9Թ4(!،>R'\C@I;!A Fũ**LZSmէvF썮W+2?^_CC6{0ZKpo" ;-fChE:o=N˘EÚK=3d$g#(L7'˛F*-&WprC3ɶ=s^* "IamYFw#$L/oW+W15f#$5zV0CS(0NۡdiŜ[WvLĦ*T#$15h3BĽqEŊe@A<JQw37Ohs#$>`]du9I#]/Sbpy rQ04o~|	ֆ`E"%~gCbCi=MˬmWk4%ooetkB~"QO8.3`%FoarطYk8ʉHTkqɀ`j~ƂzW_l\SP۸vqzݎ_auI:eYp.,Hr#$s.B4EK )[IX*"ŀcJFAY0u2Z_ȓzN>:1b#}2Gl/ܹ2QA%Ta|8|y R/~[yKZYuVͧ)D6;Ө`@G~*qЅ`!xy`O!w Jܝ~>a"/A9g~B)SBa1HKHR$5ke6kYm4nKH*jLYHx\Ý==>Je]u+4pٌ?m&2x{p(?aJ[1;t|gp,#i,zJ[l&퐲s5wP鳛)eVXBu;P񀃞NN<J16f8߰vճ6+0,МǶn#fExWy.߿lbIx"˵H` @.^MRAPmQ[#$FiiܙA<b`?R-a$j؆L^~?/+PL86l9k!(zT.Lή٬HBf*D;2G3[	@bz޹˸aդS)&/|ܑLm(Dpp&vU$;(?gih3˫qf`#::3ȷ!#VfP/~mEùյ\9,g< zFߤQ6Xl^}#"vbGQ#(h:LGqb#('Q3gI&a{@[hA>/x`n&%^#$OGxۭY3J`#8"<-S#Oo}5呢#$9nm`,i1ֆgCcF["yQ%zT7=V=&LobwHHzNfDܸE8"!`8;F+y6!	 ](mUUZ6[I65sUFk_Yr:;L3nrp@ow{:	Ue +VA!Y[݆ L쬃R#(/:LY$2Afu,`FS^?BHQ;ۘwe]B9Rܩ*;(m:ߢ\w^ƦZL8x]E?H`T2$=yLB'^3-GjD>	;[{k=BjƫJByxݾ։@fJ+\6H9hC;,";\\#(PEo+yj10h}}eh_*300!׾xt,#$T#(Z*BxO#(EC豣f,&1Eo9s량v&ClJ4S:yGqˈX׍	l(96eF#$??b??p^=	{.877£60͆Hh2Ջ?s܇[CMÏGWlPai`Q`G)f	M8pIk3dڙ3X-%PY%I777CQd01E"Ӄf)`PBF ȩ[GrlL&K-KlBy`XƕoEBAuF:-jZC3Z z`A".Rk8xdAAV_[(5SJ6ySdc4$1lR$6Z^ǩ:[cM\=^y޷XiTgTz+UE2^͇ELNfȤpe9Al467:=DnL󲸅'Pz,n1Ҁ8NÆT/VgyNSu*-j?B)p GHTX(B+Wm"srbQdDC` 2!8V<!/F`N0mLb)3FL8f0 #yc b!}ntl:]&e#$0P9Ɍ.mٶgc533#$>xҷi~O%6l7	d1x3O.v.XZ\= #v/R	~skd>~0`W0yqb'/a&׋pA^`d!aRQ6T01(|VMaBēLO:wWuyĥl&4kw,}'\<ӳC]4;<4a&iRan)@!8OB*-sRR3*/T\w;)L"*A@ 2%4,Q0dK3!aE]D-AS͛aܣ獥\9̧p42טtM20η+}Q;EXaF"H#	RYQ;φZKʘ5wC#&8Sȕ	N?sz3[ɦYZtꦚN㦇~k&jh[ByyBec>;_aFT䰎'i,BY{NPM ! ĳu*z3[4_|;gM8#(9س3$w>C#(?ޑ	qQςz.؈V@}X6#:?껺`#( a'_{yg}^|n%	v:O11Li )ۢ0B#$pz=_=+Rվ~_ohl&6} fXش dD@F9@rB£K"G0cX, OVnbmRj[]܌ͻu,LS0si+IYYUr|[ԗmY(!&2FCi1i.<LL0狑HdDR-1B9#`49F;hHD!DjP8aeP#(E-ljQMbj-bQF*e$cjI*"	},G硠|ڽ^dДj̉Q݇ͭڶmpp@#$H!<#T 	$dPTAW!K$R(mXfK[+mM$)zC:Lٝ >E	2?V&b-Č "f-j6ji0W^#(m!2/s	#>uT;WnE:w_Ͻl{#(D*󄄡8ԙ>+5MٳTm3Oݕ156 Ld4++)i#LRsX(&^#2N}>bI77h]yiVn;M#gE;V&wpkkkڢ*c6υ:OKebSG}b|-a}$!/Sy#$Ջ{yX7DcJ5!h}v#$NM^ةuRH׿l/U}鱢\oz-XM[b]JjצKz	oeUck|IƶѶW5`/1āgNс>@r@ntyL[$YGȰAREZ" Y Shd(Ç)ߊ9$S1 n;dPK$Ry8@e"`"IhsdDI^eL@I9s1[fNidId	%p(`6~#()Դ a)Wq $d0NHc^`!сP{O;i1c{xBUk6d|Y&L~k[["`M#$nIVC诗#(_QgSV g#$<|iݨ({Gf(_brq7OO<žQ3<)T_Z-[oNs1931,@a$oW?}9:`a@f؆uf't2#$#(1CC:#a{t'W	9CǤGw],0#,hEzZv	l{՞@ΖNDdjT@A)NBq@-pT~]%+Pj	xju~ㅣMjܥW OAdMz-1]wo3P-u3X*m*jƊ	,h56hwktaZ(Q1H  <W9jݭcmMըՊiSړ&].ݛFm;PԱ-e C4"<AL(=yl/Ɍ|LXʏrCOB 3#(p d*8|} "tcQ=x_] AH#(k$+ķ#$;_HUVc w>Szbr;[RE!+TL_smV}B\($b!a^1mY6=j{AB	BI$LMїuKy!:	:j[(P3Q#(y^"cQEd	u Y"0(JH#(H)a(!:'Ċ}H)TIĥ@ "0FhxV^;QP^"R*HA DuftUCv! D!DdE`[W~OvShҙ*J6S%jJ*MmTz:gһ&އ%:K &5?,<O_ǿ 7{wF #(~oӄl7ozWOP	(Rvv %Ί!;q/sAPWr_ӥ[@G>hf2ܰ&V6˻dBZACw%"ʲ	%2D@E'GT*udYt<xEhW66&"\ x BH俵ٵӝo"Y@8Gh&-9&NfymA2E*I)DdmoJUNVӺK^!T߼ڌ頇E]N<x @N,Cu)T#$KIB҃%LJd5;0]'Id/ bBF12IJT"btQkƕ%׭QHHH"0Wy>M$U!H$!~єG(Npf7М;|#$$[Qv*M˭#([(Pb,)7VDJ~'d#$z3#(34t\ؘUFףzzve9w(D<MSdO-@.ӟjT$ IVyPU"XXpW1K0HKmxiO·~\4XĆ\RD'GqlNBl@6~{><_2}<#﬌_Y.D)I\%, }&8YDJvN܃:Hyq1C}A8w½T<tJ<hGvQjZ@ZːݫG"ϥQx\>DaWCi4g}<Eq޶ UQsl	%ECӐ~ >JLY>ΌZI|1c`bDz[yL$d)پu -	y^Y^.ń34\<7U.amRK@Avb#.~}gZ#(ri:HKOTBh}>@~m	 b:2M1D!!C]=)rqDLŏ<:>c6CJN~Ɂm0%-,Gڧy-#(W[q{GS&#(К0Mz3fh-W(G!ĭoGckN3tMwI/Jq.o&dr9{٢BtN,|k-$/A#(Paq51ah,*$47'@&#(с5P1Y}JpԌa-K.354aR!W(I,Nw%9ϧߢ*贈tT9SIs#$1n8_xfN	eߐ,2IڮY{e#$=C|I+0L]-#,]wLt-AEpׇ4rՋC㹎t$s\&J&a햧VCO1L		$OMdæt-7QVoZcwGo?{0d`H$T$!1aƶYnvZQj4h#(U#$bۛ9>_a`P2y7us`#{]QgӤ-z9"t|N@Ã~cPF=aN^A|m~\ځkPԸpKd|$I&d$z`z'Ixc׻fǔQ]g2#+.U.êp9*sX[$Т(Ϋ_ZTDBAOdE1#(F#:,˜_#s-7KىEINA8;iv|C&>})L54ZQ\JpN	ٯ1@T]ld9>4O?4pV!BÉ$};Kb쿳J'o{NjՅ<xI5i6YK]`u_Aj YX}$K `BJs8cS( t8fF4*!%~9V6+ѝ7O8Qiَ8gVjFIRSS1:]j׮ϮL\R#9-/|H=hl(*EjnpyeR?d`QN#$ >"z0{kJM2yuK$P$I$;e%RjeVҡV!(b;/:@h|5y>=PRHW>??{elDF#(l3Rkle6IM6T4@7/m^捯#~on6?<lnjmݝQFeCBI+Vs|ZIXR#U|+Em]lkY.gA$xb,2aF*rd2.pZθGQk&2,Ƿd3v1fPm~O/q4GV)R.CZM4(mqJA a%433	U+hT041a$2	)}xB`ȲhVRU	cXK!%#$Z)If"58B`4)lQ*^%yofw#(5S5⊈h3|?-'^Rq/!!gP!S %'?DɅ,(f)	y	e M%#$y3O4$xciV('W֜X5CS h6Yj)w;YRc!XrUfHJas r"idJk,weU&QD4ZUDٴ(12PLi0&Ti:٤C$*`!.!\ՓRP:0NZkK%\*%(o].fAxγ%n&RSIe_<04WۊR\"BQJ1paݘ(sae޸q91I޲x9_́!DFWc*ydܢn,+mMX9b̧I&OoVK^Xx:$:#(/hͰ9!C0)C:IS(2`#⢜.X1Jxddph!@m{d8S9:HʄJDNYBY#weЇOX]' sNS0$)n<ɝ$)Yb:5ꔯ{%!j%q͌<`f@7N$ΒÛ|hb.wCmC!SL2uZm=>K:s8.vOi_NE#$lRwjJ#$"erbQL"EVLL#(C0FHn/['*`ѩ>i^t*TUđڈ]-:c)JaaĴ%ܬ| rQ_duЊr" \^X4.v=V aY #E7[#(	Υ#$A5<k""kͱI	j|$(i͒B ,,SLI"(QNJ lfBKLO28#"_05˒pCߩ\`B5i djT!w׵æ%[5)&Ct6BPUȇp%QǄL$O"Z1${ۉފ7'vjB$5u<B'CIdDN`y,ެ뵬zn0B)Κ:TvoG#(뿿=u"۽.lDlt&N&NߟQ'#(YwJEmfÌ[D$M0+ꂉ#dJN1#$wI@}Q;s8`1/ :hX=󫉍ښA v6֭!y,/`MPAĺX*"AAB~LZxD%>ujG)fЪ$5F@b&1 X):PnC<?#$EF$'Kk>8#-Ad:ˌ[u=74[o^mo1"²CJTbt5trUDVLB#`IfT4F`z/·=plnh!D "!BM8Z16rʫvSnV@9P?B &?H%XZKS|[[\[ritV9]ê_Z\=&H Qĵ\#$MDт4#$Q<bEE>A$E+{`#(zvu2'EQLmz@RTA2cܪT:iXrC~4<)8&vDsBk$Ffl(mM-&L5ڋjQMZ+#(	>nXݸ6X晤AܛdryK!nBI3!D%fPidX(c#(YN'"	IXAHE1X!%B@	ƐR_6b@XB3H#(!s	BAφ"rmuu}XHT$޾@!(38BmT{%Z5tbiQj鐋"F%]SuIQ!08'5] 4')s&ppN>O1AD1A+#Oej5EbֶDT0wy9,v̞P}PAޙ뛊,#$ᓬAa@B`fSqkJ5BEQO؀zCmtq[ꃭ3_m`~SkN=p^/ a#G5-[Θ_+|/HvV\5kv&!2F*Q~[?\}iËsy1,sƐkp!NюC)u]ST^6E h\~{:08ECCI70aNÌX'#$'F.^}+=m)KС]ѧN!.HƍK&MmLKliXs@q>Of7g8{dji-HRp#(k9ck	L<gl	2o>1(<¡LQOJ.Ċ;	W.38w_oLWQVzKi$0G|A(_:[|m*Yn)#ˏZMZߪL{ZW:É{uɰ<#ʘ9q]î2Zs&.wn/53t&tuiȖI VO<ZX'XՍ!g uV乭F<YL#$>\j>߫#`ӎ$Z&7W6Q!hMR<)ps!8SӎnH;*.7kb\	#(Ӻ|3ou".h`ٺFh띈<̒#(&5A|20ݙ0!#$7E)[/wK>~ƽcB4~^s/mKCtG~j'm8wz=Tz*:(;Q]W8O[h*M:~}N0?E3w89Gh}OJV&29:f[./)X1h.0v#v3Ak0u\>6'dc=tZa+s-KcG-j*^.[rѰH<Ljk_d$B7̀<`z36o]z(,DqALUۘsMuuNQ.>ݓrrUG΍#(XyQ#(K44B&Yů]JBM_V@:H$_ܢe D@Șτٲ7]GY$pqNu4k0l7CN%Сb/6t4GyOH-Ґ(4 Ru#Qy8"bRg[׹ݳ620U3f̌YspԧIT&0z &1vGP(@>Zjo&%c'|o3*RiNJ t&J=^4ؿ`O U<ͶuR$tQ"1aQPn;o&Do}LL`NbSnQ<;~MYnx~.	ϩn#)P%İ[FmkM`sԴ枹|C"bI.#$U\#($Uo[h+whxb:8=>ƞB֍.&cZN-\|Fazlڎ`[b۠\>6Uή(uÆbFWkO~}.2+1̙.wX;gcs7i8cZiG!{Gx9\ۑYcq)refjfo.D4{K)p.tq{xC;h<-##(r3-8zZ̬ӷc'uots~}hC;#z¾+L7cʔ%[7(`ΧHq##.cP~>Pp2Q{7	&Rs!paO#(	T&$ywo:gPj9 @:3BL%3sL3I(nVf#">0xfZ eîɯT>P[pL"lEdw-DN_M0xqC+[xg5(z\80 ȵ*$H,!3#$7a0<.CeQ+C"m[4b:x yŨ#("T B#$ҹ\SJl()6BZ;4Owv|N;KZ e5:Ciu%ܸ@	_oݼsA6<kVYZkd8	"H-1DdhMϼ٩Ax~~-ӶK,/Seĩ4|-#(1m(q9:-|	&OC3bDC)v.YZ[0%Se,Y(^RfXtwy6w-1Kw1Q`)͑%2S޷IN}[*}/|ҫ'avxs!˘#$"bkΞ/TPD:YeצT>#$0St2)\VxÜM޶E-zӕ޲͋af-.\뙻ٹZ=.aoX{'JQQgC_n.BNZ%<=Aðq9A9hi7fܑf'E,ř--:eWd.QD'WpD#$EVv\0ɦcDW̼ny98xC:k+Xv%1.N͠Cw70&<'OSzUC¸!ޛyep]7a3x18[*+!%QhphbwVzr&&a7LmمPo3PUe@q垚h*x3?޸f_YLǸcԕlɍ^2oEй$#$N0|3mô"3+#$3AChb-2W#F>MZ];EP]*g#(cYYa=9:A,dهZ#xdr;UT}H)"H;4ߴ;?̞hHA*M%@$}6*|;觜ʰ	YLLgfUFJp?gLL:6>}<g*gPl=D-%=@ ^f}tl#YsHb[Q02f4u]-E-TVٮoWuQtJ"IO>^8{"zjK jM6v7R#(&0XTgu~GYfN@yi=!fֳlRDmQ$	 ӿ̞=_{lIkQTƔi,lYe-M6*,%&3&LieJlT4ҥ"-d4S4lH#LPLH$!$  H?0TNtk~krg>7#.f'^ob#LH{j:w. :f<FFg3OzD1H2rhGoT3BfdEw1.(K9BSMWifZ$I0#R5J9[F2̽Eg)ܮۚ+Eh}֮m"E:Ͷm@E'zR*Kμ`;/u#$Cwg[bXU~#$8b<&'0L0*LqrxBd@1ѻ@5$DP¬#$e(mGa؆$QȌN~4apaL&8a(LHXR*!D;Df`=X	X@, ?#$xr"1`#(priOlNIV+ᔳZx&dQeԘM !7*GCCDEt-#$B$H )8#(iJ	 Y80L<4·;wBr!݅%P`p*#(P`Haw<D;QF#(FM@#8?jꡔ88!!(xY=}~uq{t.Ϭ2*<ߴ7#(,\%ZS]#_ ;v9~OA3ZQm:9zi<pHA|Q$]էZq;Я|khFD%NY4$$+"uO|@wv d/G.)t<Ǯ 3"!4)4;Q_pfjgF'o';>GtbY@"B[c9iS?Hxpw#(̣~Oߌ<~,4QodS_%.	"Fζ5?EyCX*nQVݾUQ.#(4wBEXw`Yv;QJ2-)f@F# uLF$)$@jzF9 SE0%Y,4z޸= nI)R|[yU6]+=-E$57hHq!VrwaӆnۿCf1!ˍ8(9YI*l;Sm(䄎n(xA1D¼|rt\(cYv0RȂp 6򣯬!+pzo&N	!ze٦Lͨg3z^<\lۥe Wh)"UCK!aMJ$swZkms	C@`KbjX/V{='([6"N :A6@ҁw/a _xX!.Ù btjNsǝt5sW^pUs뷗^frƴDDsͺ.ke HE!e3Wk16Z4CA&ʘԐ#(202I3Yb|[7c6sbM.t8@|PO+>plY}!cZ#(r&8P8Bw6s lIiqBVQ)S»<RU:s5:O'YnKaɓ\1"b4 uDaj-LnfzXe8/^8[qzWNO|Zv%)fiUp+.JZ&-VlЍ,3r>|JlL7dK=h\ġԭ>&N5y.Xfhhy8kD/q`bF*Yd'CM99;: ,>C{ҕpP<!κ<,d^B`xC#(&H!:1N#$k#$h[DأMmi0bHn[s/ۚ9E#M#$ɜegKK!0bB,ߍw$60(r;^iߜg<X.3x<7g՘:èq*gXq4Ϻ3;u7qPݟQ*&ZP^bЃk2wE5,6vA6pIΩJAXcdpblr$833] (T隢ͷLa/p	۬sGFB2hȰ(	Q%aNg]^_r`tS17@2Wa]F#p&_0>㴳%5ט&Qf5wf7T+!#u!m0Hhmq-"]k`z#!lmW8Ӽ]Hj#a} C^iN|I.i3JcL&%xY\Z4AL$ ̪x#$ yC6NO<",`c2p{NN #(pHiHaŒBaf^BȍMlM#$&we R;<Bv=a`@ãҖP;CyEтش&6hpI7CNBxJxST!N !4Wh|GǛߚ	"Ja$fu)'!4D p_ç~P;يhE{^[2͆)6E	l#(=G'f,?	(hK}q̵sú\w:,+8y/_9Q?"2 <䊜$Lq]di2eceh%/)gٿ%7s*,uX=ˢC'9uHOΒ)m.yR\3/8_G"7zHKEObآ!aGʱ{Ng:λۄ|E'PL{vX E"p	TX-I6QFҥB~L#${Nk$.DpdAQ]k𗛺+6ʗJ鄁)#($-hSVQ&>,{5eQirEbZĨ2 ORrОɏ^h#$ъv0#$&L0˙C!W>Hw9,:2_	dcbpވKGvHWv¤$MԷLBJi>7xÞXr/TS+S9솧ą8_ #tAT8 %espd*P;1>u)ûa~ʕV~'s::u}B!=P<b/AAQ B@_ɵIjOskBB+pS9DV9#D9`IXHlDI: u\ v	B2'T_j(5f+qTNgd@IDEB[^=g{UwG(D "HL:`Z#(#iډ4Mِ9`qG=]P9C|xf$!B#(G2jH-mZ]'6U(F 	fABoA͘. #$fTϣ<CFq3{\ha	#(ueF_8Jԁ]\6NREB[u@BQU6zI	1fƛ+m۴z@&9(#R@f6MP#xBI)(b~L~n:(A!A|lAx;Fc$t;?sDm҈i=̏A(! 	(2dKmwM6/ߗ>G:۴#<oH"EBE ##(f6Aڲ3P͆RnJ(Frj7#$:Whs<<yq= {5] lD7A$D\#`Ǧg婝\O ]^*AҼՂIl +{#(ʢXx#(/d(t,mSlsJ³(dAOnz'=.0=$N&9zwt	2ó:lV*Lg;ct6G)|]{>zL6Ҷҁ$	6-lC}9*s=~J 0ARBhd2lZ#(WWI`cå5%sIBAےJT(@. )F~ZN}8qN{׽2rw#$SSsĈ+* FCfIB-t7qihh}0eg`?/g6_} Z~[1:E?xh>X4B#^T#(UN;9kop5Fj@``ʛ#(Z5/q%E@Nh@"yBčY	T학13ˍ-5]͛znyn64ZeS*d`(Ap3ǌyFic=.:NFS["l/Z׫_e^6R%&4ɬKWb=5*cIQe)-t	D@	IK]+3.2`(|#gfK4IʳXŶjdV@z󼪥MRw@PoqèLI'`>j=zFD_Bwb<	 ;l4t@̚	 ~C;K\ T*kP/g#$KK%mC\D+,rlSp02 &"Z  #(f65RU䪥DH %*y?Wh`#$.JH HƆ1l:}#y.̿DU#&:*o'](C^4h:Tf4~eb{OO*>F#(BV)XɶŷJEh4U^][Bmc#(4(14cGBgѪ,#(}'\<Wf^;}oR#(F֫ͨEd)X֛(jkH!imI$#$D0@K@GaǤ!:#(;OON$~4V'i77tV=-I'1,YzZ cѳ2~W_'^oa<zox6,#$1EF*cD bJeCP5X]E#$"t`ȡX,*	2JA0 iSlkvͣRM#("eP&m#$sF카R[e6e-t۷unr9uNl=Z` GWu-QܖIRp+P$,;ݴ%~g"C<?<O[;O)|sB)!!i=!?5:p#G$#LvO_!Mɚ]#$:JRQ([CP,VH!ۋ̗:jyYtz#$HߞUJH`IoTWR'dGJS)6`(w@@[rc"h#(fB,#$4%J ~W1ޖ17|¸e	rCKĢ0b.o??W1݇[kcja*0FA_Iv·	M;Efρb&3n%ZXe#$N&_Ig>N:!,"eU$>E~>-X`>;	6F|hpaZ>}u<\BBfFœ];SK'_sF >o05ΘПV3GH |!'yt#Ԛ=G=x?;#( O 3wP@JmNgj($(^f޺qD]R*~7˲g`/( n_];'ww?#$w?/@N~#&p35@sM)4	@ 03K	-䐄;:_?>x INA0bn^(oQ2Qw4أi&Km<0T<7qOMz]{HKhI;iRu"1 9p2|@$eBcqzRXg0Q4?6$# 94*gw7-zwҧ[1RatƖ)}95QZLˌ&ӣS,^lc?/XuSbԞ49C8ڇSn	!Yx1\ q	L,_K]1"^BXMYy<U42#( SݢHc1qfeنK4LFZ/7kɯȞbFqA%nj0ĺbp+^&<bh#$M84u+Syw!ïFe;]&SAСν.?b<R<]V"|MQ1t/$RF]9lbT5lwˆ(DuQT _e!""H0&{RyPt#(k$5@}1r/+7mhPچ74lUicha*#$ثIjɵ&Ԅ &e RO8:?.1z˲C;}4c$~BV%'NM!ZŀL߂1x΍IbDuxww32Ug7%9\>-i@E6Y?9HP?zfᄱE4f[qe%ŧm	!cc=g4圗ѱ#(qr.muFnjRbJZדh+AĠPJ!={$k&@X6o,Lp~6K9HXw@ݡAl4е#*EnQǠaL75Zd<bӵ1ft$$d$7s %gd=Y:&_ ڛt @8<6VR*D"DCiH!-HDXP<p;> 9!==+4es#ߔL6vbħPz>yrBj*)Ӡ"ph.@>?JO ,@E}liXMK!AP{c7}ߛnd-sչuy9G 9G<]}pcvǌwn*|jP!P*#(?\Yg㉟RvLP6hwט2{1?PAFT~k<^dg,c1CD1A>?g27Vc~j]/I~8J4K3?P{\N7>zMi|4>>p!"(HN_
+#BZh91AY&SYb6d  "dА I!  Ha\                  iM۾Q`:]e QWݜ,JUh7{n{JH7gsܜcVСnŚڹ)FdH"hݶ}Ts_cVvmjs l]   o;pWqVN*#%j^V 4#Jѷp!P@RR#% JQh4#$Ƈggu3jg(o>QsǺ{fH}O;|o{N[뇯-ש۴kvݛմURzЦ5NGZQGQL$ #%U%#%=Gmތ꬙|疚aS>^P$"yqx7bkh/ik%_w/WKzxמ]qy|=8*ٚ+1bo{U乽%ތ݃{Wi듳_N	G{sRŖRI^K݁τ6֨oyu=s;ݝ  р#%D EL!-ZjnrݶE;*v'/f; 7v 9^pzw׾}NIh8u9ha>fyw  }ڻԺ-u+yl/\=4Ծ֧:;yw}旷]7knl}4=]7bκf5#$bZmJ}wK\{'^'UnU4{mޫirEMlu>32P(#$qחy}ep>M˻ni﹮ )NS5;@.w7gx}AJ {3-}Z1C͍a-ۻ7qj\zw:{_v,t}Ϟ4t]U_KW޺Rz}݁w;ޭ^M@ @ &&#LiMh@cH# zS@ @!0CI@)	=MF$hCM   HBi 	Ҟ(Ԟ6(!   )DCRQ<$M44  z      $@&&	#A4=FLLښde=TFDhޤ2~b "H@4AhFSɢi#DO4zPzi40 [rIjƭnWY	%@b x|WY`z>/fLUŞk蛜M=J|Tg'92{15W͵_-Hm"H" V(:f{=Ns-Ԭ\D()<#%qZzDOYa҈I'ͮǺ; `!E*"#%1r	P("*5H &РȊ"*E,DRPHEn-miS]űhڽjV[k[$A	&Ț1-1JKLيZj`B%jTVH!	3Ce#%&0la(XiJ#$$dh)%*RZ0	eL(5BH6F)H6-EfSkYHId5%,TIJ٬TR͐#M@ƙĔhdRc,&dTaTHPE"A% , LPfCARKLH6"c&Rj	jAdXbąS P#2"M!D,LXM&RѤH$""1#%)*iSba$#%lFɡfH6AI$$JdQc$d	2Df#1̦l%DA4 I&d)L5M#%4"R4MjY#%$1)#$afRQQI"TCbLf44Fє6J!)DKjh(c$cLfRdHJQ	24S(EB2e%4P0HRl$P&FT3l6dIKHY1HhI4Ɇ5XHh	Mi!ٓF$iiIjLID3")H4X1I)d6L6KB+1YAdؠD2FiLe5*,Y#$LdJJ"ѤYi1Fd64H	bXґIi4M$aa"$i2%ٵR&ԛ060Y$I2RdYdi%2bj6dFhHѤ,!!,Xl	QM"U12R&5(PͨKQfIFclҰ4KLMM̦څZVERlSe24[hU%IY)LنFHJDXk*$fQDedRXRmZmQ4#$AZ6ņjCm%jl2% 1aJmMcQIVH[-6Va-eʚ&6Y-lڌ)ZSRmf&4&RTadȥ#$Im-5K#LJ0Ba# bbdfmI%2IRK3)4R(dH-,"ScYJiI06$2S5%&)I&M!`3b#%-#$f-JZhRke+lPYb)FB6(آ06ȑR"LmR4̈́)Fb5S&*6S&L͊DK	j&*e ,)42Q6Ԍ̚,(͐Q2XM2dk)*,JDE,TThU4dJ#%M" PdƂٲ	$Ԅe2JS!-	F$LڄE,0hTQFІI%L*J$l65Q&IPI)Dh	$U[!IIBQhM&U1LMeL!4EJK62(5c,21"ڍ,hddڥMELT[EZMl%a(	F3B"l0e-FV3h0lHU5+FcV2mR2!Ƣ(IJ2cYFm$bVJ)Y6#%F-mlT,"Je6EPdDډ"ZJ"+F-FEjV[e XE#$e(.JD&Tǻh>5Rrx1?;^!-"ajj'hrM6*`ti~O(>}/:S`<7q(9l	hZ2i?mTY1c3o0Ъy= ~ù'5E֠0i+%C߷qJrtjc[b-J!,E+9R鬞<)#~*UQ!`v>5'qܶMb/x.quTdJBV=6_[2?ÌKU#$]'.{X/'f`53S%CY}s!^eRLcj:6!E03c5#8oahBX,DgEni2RZJ/Q[œwXfb(ԑh6bwaBVׯNny{Lg/(d<V/UWHj0W,6ﮰyLxd#%,3h6ţ-2o&*Mor<_ÿ?H_z^QDo2`XK?>&YeBɈf*؄!*Z$LȌ~1t|C|Q͹h؏]:);)5bu|Zwo~|*ȝXI8T$>|5VD@H~uB%~\ҋ:mʱh|> f	WC&8CF{sah""ߛMޮ]urйqoͰ8"<K!`)e'D_m_jzڝbە)`F_{gVAHdW9X}}.HaUσ=6ed\"LDIRz9r	D1"jL~V+$uHX#'˂X"2VGAY8ɂ=/@~>VɱQCRwY7_LKPTRz^,b9VpY(3K`D?k{l<3`T塗dTD]JG/d*oUI)Gd%V1$yN`Q(1Hd^9j|ڇ2vtƦ[vipD}-]>ıGwgih>*QɗUp;#$@ֲhVqElǾN<BJYmIREyF#%̳y6㎭+:<~ Q˱v)B@TEeN(mrRp$^|1*pw<eJ>8W6s;~QOٳ?y|;M!8^3߆f*UxWuSRgSD3I:|/Rm?[D<OaIr\b GLWN'N<w3>c~uy8f_D8!sL($H")2GՐa7D'd#%af`k{h#%$	7Д۞')YW{}-^I	#qHdOϏ:uSqfiJ(yɮf}ǻC!nK{,rX߄=xTX"~{:]g\D3mÞO[q#%S+5{#%#%X]$Me(^kVNu"gt8Ûu}郌Y}qN;bSuiыO i#$+I݌|i\6&/֭PTGѹ~Q|W{?bgY|ZͿ5c_ߔe!E//l󴃔8`H`>P`ߗQ_OϛUP7	#$>,1u~`enLq&8?:|G`IID̞gSѷTx2(z^wϛzޮ\FpvBu$#O_ѻic~r0dEz^QFj}kY7Ǘl!'h}v;qq'Ay	lb@a{n(?^lr8Vi9@R̠MMRzvFoWn+Ղ ~	rq7%*[E9	v9ӷQ݅23-0H0j{xޮҐc1/d*Ӧc}||"ǪT{<8xs0O̠9}',<+p'k.B8'e{;OģÛyd	)v=VQD=Ky0~oseN.ct13ڕ𙅏gЏ&+Mbe=P"`{<MP@M4A<s#w&Tv.`z7IlD<U H"J%nf<#ǘ[	tX-M`q5OGTߌ3B|Q<U,dਈ#$1l²k#$bŒh#%Dbϒd_gɆh_%<?3s%>[6o/N1쌠n(Ȫj$z*,,V6{Qʕm[b"ZP`\ Ŕsbɕ hl֢=7N9߁-ļ턋t\"#O6v!2LzSTP*\k>6 jU(SyjfXzaS]ޱ.|`)Љs*1HHR@=|z%2^hI&\<fTJ=G+.+ߔ=U֧B]2@đN\tW#,@J7 v]dt>{Ͳn|&V(>6kq6^}<r)ݧdy9e.b"p`~ҚRTTfa/ӓ4yO>kv{7gb.w7C"7=rBN(o8r^Rz3:Ӈ9bwbm˙>Y6/a;(8<C]\~9te[?jb!ޓrES:A2|itPk:yz=|e;<	~^=x&	T<g^o#$3OFD=JRo1!m!(YZw]eQDAko	7mBa&˺$"dGأR03JY(E"]kw'Lzs*NN#3Ki䛪}8GB!ǎD'{#$ؙ+1;y1ϢY8XV i"Zn)HL:#%DS79A2myI#%3MmO#$fᨃLz;aֈe?M,VL|&0Զv֕'%K̑/c8iˢ#$}r߈RUB#%#%.IO;c88b\IpbPpeKaRV jDg,RQEͺJ " c%F¢j<hLZj,\}o4&%TYR1,*$|<WA#$S罐U~_4Lu>I82Qrͺ`TQGtJ[s{'$$>fx"yvGY6ҲL\WtsrY^*A曥D8!*jݓlaN~Ms[B9_.[}+A˔*)VgуY`rmPZAv=SU789b$nh$_< mI0p0-iWk)LݖToDp''Nvtf꜌aXf3'])6{w-q#$VG3B@:˻	uV[z~x}9FQt!J|m'הQ͖v:{y3U$OYTMKEX<H*R7PD7A0o𨦓q<WVK!*)Q:n|qO?~gmy$Rcx7/YǯCHw3KI%䦵-P|iAC#$Σ_fg#$vk{<>U#$AJ	BGM97yRⶈ-c^~i8~F vnˢ9hȷSÃ$k:TQM-m8{W=y黓ڭ%ȧqG5eߔ*#$~\C'p~VU4{:09mubu3RP #%W9mC͌h`tHֺ#$Wb%}?ȋpk)k_CxYQTʱ}NoNIJ=T4R&YJ$wv:K4#$FƓMQᜅV"`wםyBbtG+rGrU~ yAEuw3üΛ(suRtNrQ욧	@l(Y9:_ElzKt{LYcX9>ܣ8s>Gz;;zu(̏>:~{+ldI*q#$*Ƨ%(q0ꖍbf)EA?ZR1ɑTWvUQ(^:]$#6aJl2]xm=V,_dNU@HmDI;ꆯm|6G#DN56|\_GHQ{t=ed1HeӀfa֚!ïYݯ6ACwl}#x	$2wG8wxUU$9, `!0L<yꐋnz2_#%7F(#e_+ǬGsZ{NDBFN~-ڎ8hHE!~Mmˣ[uS+kۛ_UmZpgyzh+Hxy fD&X,KvF24 V8E{=(Ĩ 8g:(jC(Ykl'gsrϓ!9ρ CO|x`fo?j ?L ihLGssZ0qJnOPS_XE?ymզ;-NpQ+)Nva8-rg6_g_E wr}~sE;,oY^V8f9i/ӵА/Sp%zH=gw?,nIgUOvtc H#c?آˮҙ>4pb,<xQQeu@dâ#$<aLt1umU[@ve3<ř7soB`1ŴܵP[df{.W1Zu*3o:(A"p^ZazK] %GSx"MsOiχ] %m`	vgTcp`6	z	7<D-=0ǽHa#EX2WjtA,tϋ8iYXYCBT{g?dڳOTKN'sCoMjt=Olq?v-5U5@ΆD[CdP[W78_Jfz.W~z7ҷk(a_TOq?l-XϊVU-ZM |Q#$v!Gyff ͞;kbhwOK ʚU>~{&WN)'|m.R.CMSθ&Dp+7ECNql&`o(7JXcY0K	([;:p~&~LدeÄ8tgו[oj/AewL|٦Om}O[M'.J¡_8NoMq ĲL0Cw!ƱDiicKE#%iі̕2odfҊK5D185e&a~nt||.C` ^1;WH#%Tߜ?z}CwCݮJMI	#$uI?Ey?8㚶1H#$<DYRMS So;~)Y懿{5bBA%.1pqX/H[g}3TJ/Gm qIhahkrB&39.}ZHAuqsn-Ic*d];Sx\S^;#+0q&BQQ+#%њqDYS&9Ig]{׋cmN	fK/.:kYPe6ehE[nxR#$ʌQoSwL$(z;5/W#%ӫ¬op"csly	F;:>%n#%#$klFnG%fBdF7=; s-p@k&KҌVRE9fV?-sm|\[%So۳,-\s׾l/Ԑ;SUȹ5WI۰΀I\/8{O"Υx!֠*#%cDCώq!!`_'Џ^[h!i:#l#(s:,v;(aÆhzIbaõEH=!a;`#%#%[:̜|܈bP<׍5hPʙ B"H%:&H@h/99EU֜o1@o#$oKfHz_݃{F&cPD&_◀LJq\12C,u5^ܜY|sV1!ar<;CzC	`8!  c&"a$SA"<8!&fwJ,~p;UGnDVvJcRҫЛ\5Uj..2"b`*H [ue登KܷǷ=]m}K__Z:O5B֏Au專?V7UPm/P0|M3~am~˰*@;ju{Z=q4^Ew#$6"};#:D@+ J521T׵gsv%klú_YwX'#%#$F[W Jn}LY$-f(YJ-=T PN&Rv:370akpΏ+~TeyUNwyǯ"l&OÞ#;<*5՜i'^w_ba.<$?)ؿG1!90#$xz_zdd17Y(#%Thj,8pD@Ǥ#f4|^oSi}㗷$$lc+<6g6dagYcpMa70lA,(ثE(	c!aMY9SVE,8&'I@CapV3rih21&>w^)$櫺-12.]'{::+b Hł<%Ln#$vo'SF7'OWٳtSt^َZWw!\v:~ 30<TTYu#$T˞v&#$K#`|dR#$U>g/$ȹ[3.Yg9}%T`".^7]`Wnw$zքCF,C.n=(J񟸿nd7`L#% 0'Ot(Z~e/<:xHMmgeo|FHR1#Z?v!fQ˶m=f HMD$b@8HQg!UĴ5z!9r7jǔ:ȳ32PFH¦j0b2Lw[4SKd  DA**&a-d#%eҨT	7516Q0<R)"&ܵZHەJ$[#%Jn"*ZdMXh2g݋#$2;p::-hbW3m -3q`,o(7w|rn{>t~^lkd4og4^.ZoxA9ų-|>|4=Yt; ̋?bry;χGͤiwn}Z$/<'L98h3Q}OQDmLh?ՊޯY6NQ"s۷w|z˜952#%'%MZ% xe;c_^11pU r|w=8ʒim,mG#x 9~)~CfXWpv.X}N\}w}z~}ߪ9ǯɣkGIs0`YZu@<K=LG=qtw#$5<V*&gv7KJ	TiBP8!!`D?8*>Ԫ0{$ıiY~m>l9<&;wnʩL:Z\S)C-`J(BA	~4Gwb5$?zi#%$/gƽMϟɏW$t).Y	HJ5Iՠe6W1,JO1ƯM,oVx7kF#%?O}`J	8b)*[j	f+5͟+1(Qq& 6ő~XZ#<^k=`fX/>DP<=3w&#$!3$dj˵ѵWsWLq ;gH~dk#$($U$$?4Ap0a(h!!C}˶ZHHy-XSYiNĒϛ,]@1blO^Ճe5b׹?6|2@o`05?C0:WǪ5wC?%Y|sc!R^(}~m؇i)}3[}_{Y5Tֹ?ϕ	4B0>u#%fʙCg.x?	rxMG@H\$I?'aE`#c @<|ڶ	E޵[؃O6}`|g;N29a}#%`yqھBG~x(ud*7>A]xc{]SĳKm}τJ8u%]'>؏S,wGtWUbp~Zq*]B6${օ	`>JC[F( `Ãn<r$|;X"x8tq6͒˵74X(#$Bޑ0Mk]pKH/SZIO;}00ܥQW-re>?1m?I}	HK;wEB#$L]3ȐQ`Fi4?={ _<-VrL#2CZ)nGQx|四md"3}|K8siPٷ0!9i'n2Fb2co~<s/7gjA;ӆxFUTdOc?+q#%)h UHK^AKأV,\XJXCʏF]mT\ԩyw7qYNtqLoqiOԬGc<FׇHw~1#%1*X'^n]ؒ!? OGV6ұ^~uv'ʵ{zosg68gk+#$XnFhD岼z7B7p*+>K5[A[wןNs_C~7~+#k;Nz<.#G'#%)p#$ߩZ]4ف]#<n-J`>{jx.=L=\Oj==v`l7@:g--̭K8nQo9G<GP9DN`)%GUg|>^8˧X6*ڦmU-^[:Fvz~CS*+<aV4[xZȓ7Bk&gDw~1u36AvWf7}tm͆F	zlʚ}IeCUU]U=hs!b|߃&b(~`;{%\r`ݜ_ߺ.u~uJ%?A|VVj#%յc|`Vt?.Bsk#ʖu]BZG}7ACO5'ʪRjζ=$ܛky&]y;F裭L8tƱ]N%i>~xE!Ok2>>}_Fy`Qb+?Fu>߳%5woes9mJ%rOX;?%92{?_=3W8~gq!wBs9vdz?;Ϗ01<܇9'؞΍)vPOƈóhw㺫lpi˕rves=ɳ4f<$'B>v`~i׵Ur4yVC#%`BbfP@ 	7&Ѿ+/pׯ쓊s寫bG~ɒ\H}vu&#~ݕ~m#嗞UlxonʆYK r#%2$¨$}AWe|c$85Ba[@#%#$NR'QXIZ]	>=UDx:]fѸ~ӽ8-͹Xo$#$Siv!$|w=+ 4G"T~pQ_.3U[]|۫stҳ뜭$sSkԎc89a^V.;EuٿqEF>x#%G2=$8v[WX~ܺwxKjyTnt#$|Mxȁ#$t;Hu5Fu@Mi#$WhI/c>aٞ_T=cq#%j((dRۑFLSƯoe%hzw{qWQ\^_w6^XҡAqxnuW.#$w_]NߖoEaO0Ve8_I.X~2~GGgw+xAÍ1$5y!2ei?̹LV҅?*$t1#$I¶%	2܌SSRd)0)g|0F&ل"42dd\#%aL 1[RT)T<Fv,'ݞ;=!`93z}6XS?Y*_c79̜w=|EYTD:pL*r_|%_:#%{>2'тe-0gpxSmU,c21,dhқ7pC_[N㕺_r=Un1H99B8R\?vy;wyN1p[5}#I_~VB%9΢ꪘ]U[鄄c DEG|ޱgw ~:34UeF>nvӢo&#%?7(sg`00?ñݯ|?/#<pxl##SzyK8O	Wߣѐvj>XuQ9rLsCCs3ZbeB7Q,=6L/a#$RS)&\ F0k#%Š1Mͮ@#$,1A Ȍ!b N2ld$bjV%#%eˑb,F21q[Tîk.6&1ȑ1E޷`	[JJX0`PHSR)Ddݢ	2$bHE:ᒽm|.F fk<`eqCns34+1;IB`& @Nbqxd"j#%Rxd#%dv#$йr?؁Ir1/r[0SI˯u0%ApXOR!(bbYp"Ǘ{LĨp1]z3˧wGu|Q5u5=)ٯ]'v͔3~A%fγό0_O'4WOp٧N5!bA{4dPBx{<izSgig`Me!KO_L=U v\E!1\{^tbˢBDPǄ9EZPk\`;;;RlSmznɽI$Po*2&,߭"}jl_+rq}#.<y׈Ƃ=N@vu$.n3@VM2zil I$"(92Pt#	#%F+ EFߔ|URhel+.^/C>|1ux]x6e١{-lS34P Z~{9a- #$˖z`|/ԫUj4{mnխSF;2ZzƋTrabC>];%4JJ	czIۤbT7Eӣebu%A#%Nӥ˷]t-0%ڊmBe p!~##%2ҶFY?ԒgC .P_?v'jc_qE!BDXr޲}8J+bt&%x3cD\n?`+Ǭsm@ml|3$<	ϹY{]H-=Nkf)sIi40¸3?7WlDzY7:(d,g̽ԇxGa2^9,&\AAXbLCdio/0==;夰LF$R6bAr6	frhP$tӋ׮bomɕ j ",/C͙bRHk`JtIb{~8;-mMeEyTY(b  ``/. )( @Nn`SMIؤzH׿M~zRtzA398S`e^8;yiC0sA9xt"?obˌ-sEI4'2pk@zxCGo0]o>~Oq"nSDsMh#$|ebί떮$k)a!L[<2Y[SqxL$o@PxיaZhi1|e5êaXRp'-0mcCaFIC[Rpw\eGpBVB7%L4]U4Bbaڌ'&[e3y~L(L<&cR2ln8CQUN&Kg}ՅsS'lK)C0-*1w-ޟs{Ara̽qGS5C&7xή#mW3NX"lɰnBa;II~D>Û@m4N[`ѕG!Y!#%ry/DǜHKJ\Alq[wgLz'j#&\fw**'SֆUmSfaWMcXZa2ls#%o52LbK㩝|UxyL8牼l=g%k*)!'t{	ŧ:bu&(4x84#$eRF߃|&-l%;|iwU3sP>$?"RM×a9+ܝBo@L&{@lܿ^n'AhI$$j:tecmxƷ6m&=ri%Vknl7		a)YLg~:PY\)mpQ\s`}1JcWBnsNv䜉;oS7mꎽg#$Ռe6J4Vk<$=3#$}Tm/̜d#$"`4Kdu"1}X\#+pufF`Y9C5o:@Bu(@̡$D<kQ3(Jws6eh,/Z.~u4@Cf:r0=gQ]0zc??YmOjDOt<" SCB>U6qSȵ,2U'yjpdXt#JpaTCgA.##$oS5n2В`BdC}&Hb5!##V}y$kɜdKN2k[9殩qv'U|fl̲Ti/9jIz}Rwp|>MYU&U?ܭ3oUjyvzaChK<BБ7m4eCPM!UWV`/*ά(/|vS|t5xNP;CQ7dBbA	Cj"nQs`۳.#%V]ʶ_hT(=GISw,q2J'ЪC,MwhQ #_4'O4p+A]徴`,OU|-ώ?Y~G۲AʩR:ZuX6mp|suhޕ\ٷVqr[=L	7;PNnْF#=!@#.>=}U0I6*.`"IfDLrj4^!sSX}aQ@}~оUfOF<#ے< #ʿ+X0.G:N똲ύ;_5aæ]i7kζU]|iPt">KbIjEGtE\ˢCi#%q:qܖD$'#4uh6b8lf6ZI`6B5!"/Jmᝌ3Ȃ#%IH_@'us<|#G&#%x"T)v:qY?S=֨=y:4|t0?OBޛ܆o,ixZ*tXoEG[#$xzC?zN<>\'hƺn8Kb%m#$ko܊;OF#oBRO",uGS9$$Prǭ889$v#FWj^?iU4j}iٲ{ٔe낐8oFJw2.ϰM;6;Ď.Lw#~dY;{_·e8~oDˀ^hׯFDE#%5闦$3[)|蜳#E>#$+4ײUp*%NIA?B$q|C4q|G*L,CbfME͐XXd6`+MNDr=q!;B:k"B}竞-֔ےߏX['dO,NkFqGB8(~8Ly`ϯ_^_c2?n/CSXNE?>Ǆvͨet^k?qɧ	]usfo{ @$AE$75,OF]&AO#$am>nցGxxcg\'9vɵ۰]8ZsP\"$Q*Rhqa#(XعW<6Cף͸*zн蔌;^1)c}aΪǖ[Kgݘ}I8y~rSZl}Oin4I¡t|.1&s]8.$ls&.Qk3|wJ0(RWf$OWI}2L3fVlDxp܂R<Tgh'ejjͤ}ULo8:FvST,bM)ݣ|wH5M>Oddm(͏%y;x/׵]D!ǜ_z!w,$܏^c|<s=;Ft[m&D-}j8ǳ;[IvF"2la;-`-"!fbH-BI;lO	gfrܾn]GX4εWtn*Dp翟5ѴsgXͺG;(0XEo.|N!ۙ.gϤƒ^ݧ :*(̑N'<Fwƃi-#8߳s-rn9.&˨S&S<Êky/do͝=en-9{>Đ[Mq=y+H+jFȾs~#$ڠߝP;a<UF)Ob-Dxdabt=y0]nEɅd23 Y	sܑ8v>#%{mx}W0ۥIưϋO8&;mVxAle8""[0I]G訿Lְ&VaЍ9TN3?>O	!(wum߱s'"ݴ&w6{7a?#-pSB:edFHJ^4DUbYv-g6lg@"}|0u	z֤<9a] .U^.*m!}IUHW84?Y+Ҷ]mw*8RTl#$xUXd[I)'c);_	UjTDU^|ltYMzkp,+_<-`UPg%Q#%#$/DҟMX)#%[IԲaH5>5:_-5_)a~MeZⷫWdE^fAf!Q2ѱN<	}&_znsxus)oO#'ߝj~eE^	=	ș%h_|gD00f+QdC5VMq.wd03#%.G/vo}(Sjum0Q#%%3P	N,CeCg+n.#%̢+]Sфب[ɝttESzTL5XVc]aH+o<792TqXJ|uŖzmTg[8˘q}scQ#%0v#G'.dˋ|sjxyG4yh8ժx;Zpsc1g!t<)cMyGGXZhΏC#%\JYJ(κe..Kh֢pxpZ׺FjՃZqFTWqnO}qfuG"f<^2I]-iz-+{7]<|>XܺM˵Rc<Zlth#$><#$Sjmv4#%$QZ[UJ(hM,|׬j,n{a]nxne˭YX%ZYuѢ)mi78}q(l}C̽]>{In{$+y(F{d*)LjLrm-FKt1F{UEY8-tϨZvtZ&֋>y<κ7OI1&:dSN&ΜzWѺwJHdW[!|Rp3݃hAsl+6!_OLbYʸތudɆ?s58,_t:iX1kү{]΢o#Dfv.{;eoX#$p:힥`Z(qB<Y+1W	ͅaCK呮@b]Eou^17Yrc٩ u^rySe\40aStppS3"7	i\1rZWI!*`$Xpt_{!.-;"d d:Dpzk;i&dsL<Q6HN̽:M>x@)%W_Ro;S%uö 6Xk*ɮ\sPR#%vTm+!lfa}VbȕB;\'HSzuw1-Na>[]jyx/&~Yyk4%!tޏetx[Ip#!+vh+^~D(~9Bԡ%UMNMsZkpug+sZ]8N\nsZQ&jihJ5CBxvv_O]̑Ǆ_YW* (ʉ|#mׂ0Ǯ9e8᫐+9e(q,n3^f7T˅rEMuRҘ;?ɏA#%Ec#% LV.V|prrS.pS~OOkpG%kD]IP"CcQZrNӬ%Ʃkz<DY٪oN{`6vҳ,P(f6Qq.}͎&U+鈎=J4e.b:pE+ͥybPH]V(h(E-@*0{Εn<k]}?8cs	=!Jb; 05xVDUd/\)6HqpuRl4YݎՃOGF0t>"seIdC_:UoXS#$i	$.L^YIUU 7ezpp>3sIڹX;|<t啑բYFֲ+d`@E3U#$~ֿ4X	{S@o)i!*\N[7n/kj>׸JMTaAmXsMTڶ[˪D+ouuA_W>SntsȊw1r}5aT_umYU+I/9YU:QIrW-Ig(	Qf@d(nk}9:w#M<3옜X29B#%n׳#q%v.88른D("#%j^{L9tUu\Q-]uR*q2y_= X	Qs=J0镮`ES	+7^&}GX3tnWTq$狹jVQ!@tIwNsKo_'.Y/Kr)?{E7'kLJ%M8J=OoTֺㆆA)pY'Eyms#%J#$z b [zœF՘;d.ܔOJYosמ_پsz2==@o2cbk	hk?bM}BIpr|b72zペMn dCr/ga5TNce8l뎓#G[˵\^``!n"2f3hmV9=ׇ5K'i|LĶ%O_ҕ|\shը|l8ui#Ttv]x8$F]λNFϺ>Ei{tO6HO-v9<xG'6?`ٙ	?"8tH+ezk@3yrIT-287L8N ~#$gJ][)b	pUphUfWleUCPH]15I;SHqS"]3 {ןwd{Kt;;CՓvۺ\C!A}1-0tidH$E;q=-mZI	)(;m{:o@#% IҮ*%=7Kཱٮ#$@z,<:@ EPuv 늘UM#$FpV4X^n.`Vz:^0ÚS>Xj,H͖NhHC~HH5TX	OwHOܟB~Q:DJPq. ^ʷ<UیC˸<l]<KlC$JEJr=/;#%f@\l[-)6C$QB~Hq1WH+2T#%Q7gByAތk7SSazCۍ&GցJjǐuX-D#$hDTBdUmjvK@B91f[`G{WXϞfۙA$1$H@3_jIGٕiʨr>zw2| DH@w-==dLk-HX# `(slRSx	5A!TJ=lFp4U	!ff4t$+D#%&	|*ުisD<hES-Bo7Q#%<,Kpm >M0$rhޑpcR^;YZ]qH @飔9Ntp,y#|2NfD1">2S9A: CaI%pS2U;[nLJ*M=*s<5c_ֈc.s.9D(-[ F!GԸmP]-'0iji>d4#$aD!/<N((?fEhTMG?m<,P `ȂJKRtU8ȿteCŐ2 Q2Ab+u O!hb?~nkT@r V́TT9DIҿ[hQ^qzq3M3Ha[2!L3\{+YGvs˲HLۮ ;L2I}e+xh>ye,Q\Wz5iNwJ	/$Mp4Pa4HT#$!wc;DsKwhЁxwY&#$#%z﵇YVUω#0QwfLSw@a}nI:=5[ט4LCZB	F 'Ė;_Y7O; iZ(<>Lcsg/o@J#$$#%S5#%#$2.6PW"2?<71d)Y!9Ta&/bPmbG-*&sh>MlJ %ȫhBȐMT9K7θ"qY	MCB7| rW؁08gZdiMENL}KtO#%N,OTr'|]ޛ,}9A{Sb#$БP(A)]JJ&硬]ՖAq?8:*3ݭHTW?T;uƘ$i2IX8fvT@\%8:a#%&S&%*q.njvDP?0e!vWkа]-r9XS4?KK%ik!Y90y&	)#%=ȕd/wuMI:+=Xcy}Tgٍ7ܲ}"4$>>gsEz$4ܸ"d@0:ÎF69"gx h}{YWքF8vHӆZrAr?\Dۋrtvb3<{7}^"ι^f nQta\pm˝9ZW-W%TXb8/Q'9eD5[]v㲘!Kb?Ǚgh#$̊l *d!.M.B*z@[Gob#$"È[F>d^x׾a%&Ȣ،vrbq#$:T/w0d)6uQ91ƌycd/ ^$MK<v#$	*̓c FrўlmUaEKɭ-sg<?PI099AjMŽ9 b:?^&x.vtzAUw(@(#$i#_\Y+^';*;ߜrDMyn~RtQd)\HgqJP03SΞft !U^	r3zyF#=V"s^hl:~>ĲXGMNC!0L0gךJ`%VB<5U2u~sGqcR<2m!=z\P	*l0Ma':HZeeϥR*p*Ģ	EPWݐr@OZ4T$v>QkM%yѴ#u#-Ϫ.q"b$\b|.H9%L5ы &)^ `o`Y0g0z9F*@6Q21{<柀QdS%wY΃Ig]N#$2(cO,S{{kEᰃ"d{_z%c#%<LCq#Kj+%>B_F_/ْ~vb~#X eil2#$HV#%~n:Q1z7<g?a!#|I%#%_;9z17n:cӧ-BHh 	|AKg;Ozv;4a4bOg{4~%vvX$u@CU-MjCNKMa_1GXy|i=Ṯ.=;+Ko1I".QN_HH%$8қ_ߡfmե"h#%r/<Q8byP;݆nz^\vGgsvw:?mR$B@AjK!xM,8}#vF2BuBq4b9KE3tq?NqTӀ=>yCtHDʁ.Qed00O f@YŊ]&YݠAaΥDX!R2#%J1`%􎈗1d١lmW<B 4"]ܢbڽ4t^t{	P[(2E*yӛQzקdׁLKu=`<5N8,E9t\>fUPʡx2M=1,IzҺEGLں9ވS1cFHRd:LҖ5KV-6xj	D9S~/FU+"ʬQ몄%a$u^!#%Bd/QbGae5yximeOPė	wk{C%ˋD*m5i`(1Dcߛa"@BJT౦K4VKlk ':~Dm,%-Kts2.g4oG@5SSQuh\vԽf`!{p0=S[Q,0gҁ:Rq8'JAAMMu`s*C\+HP6MջFV={5wtinKArD+Sf)D!ۡr+R	YQfZxz[l$'qR Ự8L;g\HÔsCN˝@3oo7/ClC($*I4vaT9HA5a^ʲmmmkxi[ ,T#$5B$/-_&&^1#%X$̂ktp~]4ƫBRV5eޮ1$e>]!#xIU?+4f#j{8~l3$$dAݐ&8)	'niu'y[>VYf2<L(P8HDaSdRB9ew4~1IY yD%a%T(#% s] d+[mgîq{7kU9mhSԐa	 pNqSeou|o?dIbUYE@) n9Ca+lpN)JB&B?g;٢Cuc>#$A9Ngfokoa*Ƞ,"pOJb$ P%c7`[PLaPvorg6#%;3Ჺ&y"*z|m|7gQ ߸ujv\'y7:MbdHQ*2%Jt;qQz:Ikzo(&;Wu"a`T»@#%gRA}PdȞ91ȍ)ݷuC5ˡdOd7_Xfm#$*T]{b#${	5s܌Ř^pʊM٣|h[#$0&=N	|x7\m&W<ap]Ԯ.Gr*:/\ :+chIkoLwLi4,) o CnO_H#oF͢VmϦ7\D|琁	\ga'dsD`paOþr'J{<={-=XyE~4A:K	"%JQZvIkav砞u>9XS5T}Ҡ+,۱&)>s}T'(H ޕXMlD]v:QgTcSxi#$1B(imU{Û2mgĪex'mrrv!	UGycI<ZI\辚!	0Fh9+pBZN$8t;5sP}P|,a&dI:4cH^6fE"ڑb`Q60j!6a?ΌtDT7'>c$#셬&:Waćjz/S""ЩNVaE\r9@hǖ#O7a]Y	se4nêЏC3?*V"ի=cI(K81ւwL9F=^k{SP;H}&7tCWKYíR;bݒ6@Aϕ΄OPX펕JtPLϹh	BJ0Qў:2y$薗ѓEhlLޝ,ŉJZp"DҲH#$\M~׵ʦZu]犝&ב"'H`|aFrOa-Eb| lZGoTܛ_dWnDfVT k	T ^>~)2l/vH`xIq~:߻v4v PeYCn\n,}6 -谬0ya/a~}UͿ3&ǁ۪a#%k9"tU7O`(p.Nb4̻k,{{vG$j*wϗMCχQRT7GN?X38b6=2z(dr'apxMBa1FpP~v{N^1>[ejU0Tb	+`xw5<'|o,8ϧfQi,PJJv޵FGeo}OQ!EFö	em皹ml@]ƉHq~Ks0\πp&Y<83	}erc%r`W0@A:\drs_\ϝ|w=oLG/~џθ[R|?2rZFق5kBqkB?兡Q$ B@S"謤*|k{W?uU,޻-uZ,B*-R4E Fq9[U#u֤'QTܒ	.PdArf'p\[剏Q{Lm;F3.WIj\$.?{ߘ#S7Wt&s$3UupyxWTҼ#$ød!I	#%lyCz WbJAX"1 *Pi΁(Î%d{g{T@!T>H?5'#%#$.*OTT 7#짇N^}t^66]*ɲҢ [h	y:9(ő;MW d ($η8n;&nA? #7mJ4OEscMxa%]gf19ֈ1q)vq+}\Bn{ܯ!PyP'_XΞ@p:OKrH2a jw|Hr	w2Tpw>#PhX*@e]]5!#$y,U)MG=:4zypD	eDAs=4Wuy)O:B̽򈁐 ,G/t@L<POlA\㳡TBه}xi:<Ǆʢ6cm .Xao恛CACg#$8y_gQVɖ$$6ws:+aNdDg:fFVY!ޠ7nlPHss<#%+s:sm\a˯N H{F0nEwwc9[<!'Be%K#$bPToUsl'b&Zܘ:%#$G}u.5>5'pIS@Qnik*i2YP<t?7'=e=⩋+=17gkWMhWxyRߒ(T;O~?,_c4~,|c\Rb7D1ǡJ3c	{mhꈫ *rR]iزVOZXv 	Pi<8#%Rv=ھXt#qfg^z-V GU+g7Q3G=(z@l[	 _{aW/#kY!/wM:TAԱ/gCM4%=skk88hz=Κ!q}Bl^O-i#[:Co#l7ƽgA v+!T	~<O$)AR!t@<1I^0|Ή?S"ghɧl|ڊ=gIL)XtUI˼?y#$fB؂JgRB2R-(T,ͳ좟u(a;4dy(.F5=jXd-46sevL6=غeLP2x0Dsv4rG	W?d6Y]֊˙9_T͔ʿP0J١ۇ/;!]L?oo'U0u}yq-͔olJ3D+WhR JY(DĨaCL~׻GJqu}gWeVk*5tҕA'ݚ)r6[\C ԰Ͼ"ڗowH^5FA~Rew|S>s3X+#$E_jۜ״C9შ(UUS~U+/3./8E	#%AO&*PǇof2	BuLIGWpYdRIϬx5s_<3휴qDf?2(q3ެ$qJuUJhK>91Fð+8hhï:vz`T$Sʳ^^ԐBG^/ _>7n	XւTOCJVEد+sz8"B1-Jg>a'7SCm۸Ret[3P|Q	as¦D$~(tP-V.PᜣJJ`<#% 't>6_^[;"/_|B;N-twCT@y/ϩ^ƫ'dHU	Ô(A^$Q`:{TpRR,,hg\h#.Ϭ3xb	:b"G#$$+Wi=/'Rx"Vbk@T"h#.eTȩ1*hB{m!S(Zt)vfH-1klam#${0QLiz3#%Ct:AW.ޙ_bZ1/9`ó/JɧӎwÑ8o9ᙔ`"w9٪@0=褎AB)љhk5=}}>N$4; OȈ~,t	}'Hk;kZcyjG04xLiFB1bA^q/~{KnO$C/5;D\ިA\fsU&nيAac߭oAh2__lAG>L=2ʇ"FW߷Y0vs3l41]!#%3B U Tj垺:aI!<*nu$\^<TRý]NuZ~:( H(/g^gv:*m0!1qd5Ʊh63`uV 3ǗL+ve`(y)D簒̮VbcKCV,#!圿|O@!tnpqzTJ/1-Xyz/u#%hdp?9IA&VZd%A!\.n8eW%RCVZH˻{-_F"`N5D>E#Ksp"iMNvfwdnH@ߐHC1 RqGG}?dG=@P/zrKu=\{y\=yۏSפHƴs?V)DrQ~{cWlj-DHL|$>؄M3ڎKΗ8kum~1"IB6uj	oCMǠ~¯/}IT/hcfltXY#%#(|$8w Sn0@wȠHHlzmGzX, QS:f֥QP}_٦X;U# ^B#%J|x(9L0p$1Tn<u-¿?o4H $<J?R>ò>5_ݙВn8{e=~i#$yIC0A`}bg>4;Vab1C~i& 2if"Naں䐈c#$윿,0?j}C!GckKT7~(Ƿ#$(#$3|;"'}6X_vK6AOz,fnu	vq9g9#|n#x2sL|&]ϊS{csP'@}TrˮNp\`@)W[+2xlSPu;#$z-3ՇWv:41>R5DêS; @_O6 9chsvUu8aYݛIa\koaϳ/u}-KD ^BIenv_og#%I "}j׫տD ߹b[BQ>AJ0օjH!n= C)AXUmqO3'acUu|czpcv}ӦܤZF?1KpRLڪƢʤs{́qv:{eF=WuCߦ%IQ3#%ϭ#^ݩAW+]y䞌DL%%0CҐNWk/Wﶪyz+vgWi}QQV@eQxeT	81tMX[#$Ug_+w6Qr1Ϫ>]'{ĸF_џǳeXȝ^׊#ڪˏk8z;zw6-4¨TysN}kFtdG/pEqbw^B\{ܜl#%C6(hc{2qcɐ#%6l;%N]D's>F&NipC-Ǵi'|-#xC,<#!aY?q7xlo@0B?6@+M	?ߤ:ϓ\rD$e&׻ĤkPHMVJ7Q\򤠺	&ML-!D\$e	XZy$3!{!on$$'kf4dzFS:gePmU=JQqT'ӈjB)b0WQoTO_O#%K'^>:1K5!kV[+~/ڐ)S\<VbAOo (L@tj%CGe _Ep8א=MgE`هj Y]j,`Q)#v6θS?wz^Ji!5Z>#%Wv"3m@a8#$k)2i;mZFIUD7g?OD뚂+d uM-PNl3{!#%dv>',yY#%hkTR(@t	uaH[id-GWL |Fo Α\ߣuV%bφ;1@ѫ#%FUX1xg<NѼa*у\#%WRC0Zo@p#d TuPI]6Ubha;jْ+kAA0	=/{]m-'Lήntn9Z'K$bv*!P2qKb8V75FV4(+M,g=S d t^0kYŕ449`$wh<jjz$s.Pǲ\B:Mɪ6%hJ<V, -Wa(ꊞxq$Kß'g~,Q\~Pkeq2Aj2l#%Db@ۅj]*U0ᲧlÖaz#+P&-gZ9\$g39MFh._!Z9 bZް[yaA+TC*Ʒ~lF1=7g§`:ZhQY>{iW2N ttgqto;ǕcMQpH (!je^[+ΰj!#%ziJƴO4Roq;xbVcs6x9[e'gނHWIiޱ۫q>%Q8]uT\1<3WX#$r@#$ BWP+Ο36JJo|:yȚS 373w7<@]wMѦZFT4v{XKk!3Ex5"	O䂦ď<(#%D2Q+62d|ĢPz.CT#莯d IdT3c}2Hc۳V:8`K4$ӎ;[sݻZq4vEe^jmj 2C T^Z.ҵDpXp!.b;?ߞ]i97OR59 ֿ#>6*(3i[T}}֞_~,žΰ(H'j<NL |!g,W<kW^;6߲>>B?ORHz%z[*՜UE Mq< 4[wޟao5D~>3	J x%+z+c`؇F :2$#%Bd  ߙ_,D?S	#$l:,J,8q_ZU瞺><o`W#%MBmbC'!	PaEPunT;a4<{	s-β>(>MB)CSԾF%(39c=^ڽ w!O8Td8XiĹ{˿7c0Tozv{Ɖ{]À.#%{Ie4<J^rOVV4X##B u9e\	!@O{]ĊTC>t!+~D?DGK~bҀ[ټC#%$VS47yii*pX0ʖ˓DpPUu̉c,5#↺w+KA%b.J^W#%MS,5#+4_q#$Hwf$d$P`aeוRQ@EAUYvSxcǲ9 yw|xj_'vɷߐT9fS{^)f啨lL:[\AiJ0m12Nk2GJKg2`e#%Ph	E6{`|* o\3ҞWVpYQOQP:W7 dÀ2	#% Frd%,}st1m3hY{@w?sǍ	K0Ɂ CzTύ3zdQ{8΅Lof%聎IGꤥa^6>YG;"/0mViL75qj>Ѵ/48 BD|/w#$k>5Ywhcld8TU2dsTn;([T;(B ýԏCR8,pBu^ZR]xLM4$1ҴHY=LFXuz٬cbw 8?^ONC={tdddfz2(;)lF\<~M(dvaxi y=_Lj'U\tHC)Z7S	:t,11	GDd}V`8 l@80<~ZהB\d !L?uMoA !Os$ۯb=p\ĝ|3M)#$/{8t	4i1\Hv#%2ӹ#$>qo"*_#5OY"7.zTM^%di\5,(FifG$$	óD@I1S,nVFFpZ6ttND'QHF!/RMi:ם$?5k24/F{>k9#$",9?W6s[baN!uסQJ_o~^y2|u4ki9'4xrrニt'@{;{f?יc¹ݜØbT&D4+[Mr=ZO\3rv{VQ?o ʂ ?4܀aaϩpy[wO{뻋UosA(|Nz,Juo%4wƝ6S`j7 KCC%H0PtR#%0]4U8$/D?!Kf BsURv¿[pSVSqVNI$SI:hRenwn4ɓ(BНq짼jyy<Y`²=ad&JuQ	Y6頹ꐀI!e6`EݮpݚUiD"[^_8}cO6#${'Z	-ZQ{6,\jO;w a$<#%#$^\91|#PCpS\]\^0@4ġ_XRdxMynk8Va#%o؛:!EZƗ FGx%	pdM7-stCOi =ZvYSB0 w7w~e^u׳Co}a)BjVk{^c@#D!C,bYM9"$`>@ݚs:_4|C'T<ž`;M:zS 8pttbR`8Ba2Z48X@ :<l:[|.m<egG(|IMi8iKg$$$I!Ff"[CE2(DcM.`f{HB DsP}_3#%}A{m#چ=eV=/ލOlifVKܦ[	I;Ÿ#%vcCot\Ĺ$7	={O8coqu>e_>휈	п=eS|Qeo+5k3 #|=2C(7_+fcH}#%!Da0n^@>&&m߇X)CC#Al_ꡫBO&X|y5<ܪ'#%C}/]zJf/MyK7ߌU7Fw}Sڙ@pXD=<aBHwq;f0QAew0ZSkI$Xզq/OGGCكC^sPi<t2GUJ,o;_O×(T!;ڿ~_'"ƿZ12_ܘc;s+ƨiK!2Q;hոbPtOSNioxu6f#%} ijUl8@®`Qjxay@'x8|"&w}K5xBA$dHBD'N#~  Q~`xIg6g<Z6Kӣc]OƎfl㣌-(+m#aDC!7y5#qwlI$e:WLs:6[!"yþl3m;K|\P$PRLHv#%:d3b# uhj	 qq"f*gӒ:&CVB/7Y߅2LyHHpU(nae;K~)L}tMK#$'B3Z$kr@l*9!B#%~aR~-"QX H$^wm;rvm!Q#$,jiB(_owǞ~H0:@s۠|%%p͹~K@#%>!l4@Ў$\F  |:S8!S@.@/J0=`ނ@^\ab:Ɍp @9-gYu\P&li6;@8֔9Nk:'	qo4CIZAak')ɍ Tv\-U4KKLeUE,X!'U|Q@VZ;foghB$蘓iYm$,=/ƈf5ês'xf(t뢇ņ<n3I#2p˗%MېeB\"v˛7q֏#oÛg.%H$#h>ίn	Jol6'xD#,$0$qyGD?/*_) {;ҬOeg;=~Q>UP_w8tLg(|U$hdKe┹b9lselÏ(y3[R#"`P{l7;)Cch?6k$"AN H#dy{ĀPϵ>,!7h=6퐪Bʍq	52>V){porD[rI"\6l^^7{?<s^uV4S^os͛=a&lM`@8}96Sߖ*@e\q. &&]=AN;"'yw#uBf3MRMo2{O7A!;D]$ھ.	%i@?oW/Hp+Pyc@H0b$텼B{9RI1ٹ'kk	9#$?~׷+L`L?q6y[#$+PTU)h!#%@z+;@q #%6$#%pnputFA(G=R!uBWrz$LΟPpB,{QBV!0DS&dȿf` >9{\;a%k!߬/uDl·rL9*x*_MځUFB?gvSS4m.yCc[xff 0QUKdb3HR9pI!ٕxcS<Yzao#$-݀Џİ"Lښ`2*B'D:/7%s=(wa5P(7\T}VK'u:9_=Ym#$fI35$ 	N%nC0wk'J8zmkx&2	-BB$?fqstZ/6n5JL?;Y.Rc𓷨a{ED$:]٪H$$þ=4IV):>2*(rTd?Iӻ7CokX{/Hw'<KxUal#$#Ԟy١+qx j#$~;w#%$tm>ۡpˁxgܹo[[J3F\=Tܠb%d'owĥ踮+ \DP妡cl8,W6.wn$ ]N#%$=cwb>yT r)rVKLj;]siٶ}4#%N&~a,x;g'/w;D儌=@-;Go8__qbU͑Pʅ;vL DaoJ~"ͥ+%BAg2Rp3f!CY$1,@tCN#%܍E[~Ͼu]M;@̴;,x8=pЈAD8#+s0%\S<GOIӷ X#%H,VC(3Jգ Gld+#%awl8H4":&$a˩%#!r17C$"&0$hIĚeb,0`Y5!JM_@Y؝u;	<hM9PRŋ;#%LUDI!3$1nBDL%4IqNp3IfuY,v#n/hQӬ3mPcG^ۆE+gȟu~v|xwq Lu)fJ#$3Y4+w>4k+y@(BdHA#%ʦ7_EfI"A+'dɛ3kbX `x#$7|Ua tPTyx=e]®euىoN/Ƕ/E#$tS(C{4*5H^OǢz<#z89b:CaPa[4}Gak-aPѡ]'lmρ2X#$c`?Pzsߧbxˑ HҹeCdD4A3kk0?^X8it6CVT!!:uOQ#$lv*U6I66D{gXNB1жϸNz mkQ3JCNOPKu둉v@eXF*LuF2h+$:L.s 7@s D1apǼ`= /Eowa'C=03P`M~,BnGH!a֗t!9Iyi$171.LRB(ѫn}d6#%n.U#%!#k3@ >R؛RsÄ/lLzÉA;&18mo C`Uck~G> AfDb +805raSP?E_-Z:_'~(y]ZߪG=_Y|V\JQY|%-Ӝ䕙S0Ά[V.*UPpy9#j)xH	|e.nr dkNe*l*U-Т8@"EGRieby!ABYg`IОvQX56XGnKǚTޠ7|J_.pC**+MNPw6N#%԰`v;KnrF7J`Nַ	ٌ^)d[uZ%ELѠA{rtzv{u_@g|Lm`l"ڨva@#$a^s>od$?o|>JnO ͗p`Y"l4}Ne\j\gXW(OJCrT;NƃO:9{NL>k?a5U֖-sZƨ+JWk1VK#F&fhYuٶNZPžj7GꮩwZ/HLäI=#¯`:bsu«<UΛyZ5i3$3gWf<d;*z#%T@X%C}6|U:FI33r;0CBRT|{D#$t#GcG\˝SvaU;%tԳm#$tgQt #%2 t	F!<LfhYHO҆ X#%p9N!ff|E5#$a~%3GB䃄g:@9l;q%Y {v?7o.6Mqcb!GϹ;犫#i^Ll)NH u@d:EK3Gai}S}3φ)ba#$,Ύ$27m?6rQ	IwJu$^ѥh/Y(TP6d#$C#%L#_G+0d Owk?6GꁼqO8UUl	 #Jj{	͉#`8o4$-˫vB0!\xDF<rb]3#$)p	Jx=r/_J@oT!-xA-䏓oz J<XH2I%2C>g tjURVlqÉiOi#%C6IIOu?O!bͥ(P#$$`{˾8Q%*7FAB~]saOV9:z4S2Bx,fD!P 4Y!p6B8x>с#	y)F"P>iM'sp\}ݧ:)%Q'-Ҵ`*6`>:vouuv-$pdu'?ӔmKwgۑf# сPY(veceC4KRYm`|a7~m޻dU,#	$O{wEF#%!I3ҽl#$eZ֖q3*b&ي7*nհ|#$ZBHibϡ۴.fÑidK&)[rrI;OsOO)rD5ws҂.C9UWa6LO"Iu<3aI/9uǅF1EvMĄ FqsU5J$Xq	dd(k~'i;<8?u׾Іb,7YA#cؗ8沪2ޯ2PߙÜ5WI tMƇqCm}?V|wv6nweg8UXٗ23:ι7|Y?<wԛĹϊͻIE50$E<%#$<	p4#H{3D?Z}}+,Q'U;%ç ;6~\~#%I;^lI5NY_:iN1:/Y@Ұ 	{@Śq$lL?u@X:rw6N:+#@[T'c0Gʄi	cz=67= {|߂ٸQMmai'riQ㟇&Y~z]KbG32GSM#$;/(˔!D#%#%5 pf MWay[#%A='C̣.X|=e;$8St;j]qܧrrLEՌǬԹ`B@#`Bu&&><UBIZx&"e#Bfѐo])>{6k}6Xac48"mR@7D崜s];Lq\ w=70	#%61$<-$JǨ.\Cb,/{sw#$LɭwwnU4ٔ%Ly3sPWX$p:&+$C&iarKǇxS<Lr9l{aG=-Єd	(qǉrHa]aUtm"u|Ejü9	gZ5L@xH, H)gcgQǓ0:4AÞQpϻ^##Vɒ.n|"*>/]Ŵ}SB#$qYVEc*35S<OhL#Ab8(P<F$$~0Sx8lgT#$u*Mw0!,n6B]I`L}xW:no=ՃGOa4#F[Ơt$Rjl'䩙q9kh!e`wn&v|4>	0+f[)ccCBsHD)}!\Ȼ:{1dKOjWDOO1dыFP~b!S	i:UI# LM{   1&g ;H!8!7&bJr#%!ثEY6Hyӷ݃ɨﺧ QM:`FM2sL3=/W#$ld2B ;(EAsj8e1 8d0^2VEm6q< }J<rW$X)}>yƆڙvQ*gJ`nu؆pHꭌFb!NS1n2*6tEۃ'΂Ƌ̂WX$nwb'C=w@=7͋Nt DPR2E LM`~*H}93ure}{:cc~ɔuyէ/^Z@ T2pp{L@4$H46bR#X,j04#$!<U!卡\)ItP+}>Iqbcp>c+?I(\ΦwЅ(Hܥ]yζGh/+ak(	aGwHNxWxJ8p#Z#%װ`|X1L#!SBBf.)"B}ӈ7ʢCS	%͂P[}ҡEC?gOV?CgƵ֭y !W2""BB?(9$h77"@n«jf٭1PbZ󮆚MZuzOdCA$(b#kR.<N85)s$aI\jF*} F#$5Bǋܾ4sXuDБa#$	#%<Y &'>#$F*X3"``H(wJpXTJ!O{rvB0F)L(DST<5ԢFDR'yKnm6Q;o+*(#%IKД3!4J=e	hH/0:'OE޽acPu%lFz	c ou? |#%#%/U"GխL"HH o8X"䂕V+kb̭[m#%qB[:ZKvKƭ!ζrPAsL94`M"O'e|/5XIBF!XQV3-(abʂ!i>ij:"AgjC	z#B0,XC\!p2yA`#%չg猒B3;#'m*>Yz=va6(Zgyvm$VK2E(0-#%*Jjg<<baUGXH x$c"$*4;Mh#$v	~P*Dݗ<ɋ{2.r蹚SAJC+à>'ZD5ЇўK#%J` gFهlr۩!r1Cc\iR9iʝ绶'mѠ!īIjs$x{_Rrٮr#$_[Gg.,%Px$Y֨fAȳuyp^(Ps]&j]uE7/|OH2F@Ac*#%GYxN҈Rkŭ\g+pZ7Rjl5LH%E>.GVdTMmʶ24dҢSUmoI<fzRqËJvDF H@G 'f#%uC	AABeA $qt3xj2JN $l5BLYN&\nN^ǸY&;R³#$2KB+́D #,3U /ۭEuj 6F!|F;fWC#$%(3o戠B.Mڂ! lVQқClA$d$1"&Mmf"%DP#%1~7U.VrX@	C1G":_nnTFi?`o":ka=$pI>XG+<go4!\ٻ#%a"'%9\LJ#%YT",#%bE$(9Z߾rϕvT#7A 6ꢍ?%]ёDݪUMq})Ŧm|GSȀY1)to9ӑ6^.&"{ٙ{`T7瀖+7PcwͶv:#$GHqa̝X4]y~T?)%xNû`G8CՓrrS\/&l[*?{:X`ͪ;6@Qme)qЋ 	"@[xeÛ`U8vS-&`+vto:V'I%b5	#%n=xghZةLp{!:BY	7 $@! E)v=/M (slA<{%C^s?O7:̳ٔAhXPk?MWwu7d/wG fXfۼ<ϗ9zeM_KUk@=*씲ĉ.n6hn2:1>F;#E",`&q{IhU_@6xEOFug,,`jq)U&M(zֹZAzڮ=TDvBd"#$:7>JѦ'zI0q'u'4q;s\](Ѽ#$eT&>Yt2a漢a~Sz)I6#%\V+	","2<0&77דv>#$9.δL#āCǛ|g=#${aBLz#GxŽ6nT>Cp1lsno	@#%תV#% [pƞ#%1 tDQT6/I7iU^#%z~ $i>X;9qMP1	$v:[t\O˖ iPq`@^_/#$3_w`wJ1&3+@ߣcr<[E浸͜'+gfvrC5##	υ7;GP7[*s.˔˴ۑQ$#$85wzIUE6#&x!͜\,rj~~}z~><zoF0Azݏ9ʷ-47&#$75A- @lapL(TFU#%#%GٜD,y3lDjXL&MUH&EyH9z!QüHUnĪpM&G~"̽w¶Д;AF6+t9B#%yEɓcWM; Y%e`)Rp}$,Evdfs+8[$  atn@D$Qd|Wg$;[t<s P ~"YLdyKm!dd(J1i<CEQl`#$'Pt_+" L<hT	8Nԝ>qR|P-3,U 廕_!R]A`J~YW!h qEn=y' 냘9҉$T)DH)%IeII`XK`D-llyiŁyW#2#sFj4[M5j~Z\4\0!>#ְ.<s}vmK6v9em.(O!2GV&`xnIhY&""^0]*V~\B9Ԣ,[HBE΄D+7>wČlF$sG10W#RLE}nw#%g;O|N%ht̐0pqj}=wfQN{$C=b溅BIm}.7-"ǆn:xra@@Bz脕;9來i'70} b΄ 30ܯ3Nq$<ٷ87ِ@ZϒK0/R{FC9&z,`hhN?aCc ddhM?gBsqI	8%&qysRxf{;2K:XBA*Tj#%5wqY(#JA J6]E5*e5>F؝37T0曑{fr8p~nC6o]I-kJE:F 8ǋ}Da$:TQ[.-6 cO	d϶Ac7MO\a"CEJ2).m/o/3$칻~ٞG6֙;ēng[eoS. v= `I}r$Zc,0#$>ǋ3戞0)ATK@%'H(0!W6x_upjTդI=Fu8MO$wʠ""(mQ"T2%ʌ/,<ɍgSU$,'TFC2;+wDX!0wW0c]#$2#$ E"䆜a۳&藫`fCkm>l7`Q]R>ه ״w#$1hz&>Be t5L`jMnbPĊxK6[dj^4iMz_Ө=a;Ua	YvUT#$qb7)G㼷<$^%"c˯?CK3OI8cr<\/S\MMmaʫe)vPK(R3 tU(RJc1'Kh^y"mf#,f0M=2uoP͑F`tUWb+hr2>V0Bʁ&õ#oSzApM0"[JsQ36CnB%^:zy澇*zې~&UJ`neg5*ݺƵ+70k0% B':?gP'CEX gҝ= 1`j$Xt&A	:\0e]LK5@z`:%jb,!gF,.;0=Qfo'Z˄ۻ:bVPbVyjNx/,a 9tfoxN-jEl#$C`nlSgєn֍1:bXA#%X y@BǡC:Xh@C4'	`Ѐ?#$`p8#$ޛN9fyNdў9h\6T$!bٵi8ɇa}$pO&% su..AQj~`#$}Г2=]([M^?wCE,h{}h6$Dݰon{xQjӫEv,Cde B b#$Yla0DdÇ(0!"qALh\2FLݠ6Cߖ8Ӊ/oE\?C e[bnwÁqbhfO|cy!>)F1+X%($}Y?D\ MA#FMo\DVVF֓jء_PmE#%"0j=dH/iҲYNUsF moJǾ:KZERL	Ԇd̤R[,)2j`Ŧ!%4KVd|tJ6iVYLL$fE&$M&hRȒ(YI4#$XHdɘ"Be22YR(0hH*F1pw@c=]v.CݩTaO7_!bSȢBC%dXf#%gkȉ*&Q\ *LoCa%h{e8pg\طCN{g~mҬJZ2ZExݶ? ^? #%pkt4^K~b8$Bm2RXM$PS*Ia{/[7盩(*8,/CbgަnȌhMpZI%|g;XoR9 N7wH`Ms2xh;ySե{>Tsi	Tqx\q]92;2O[}"Bw1ڨi##J	TRB4\?oC"WWگr\BOs[-3|M\.PX`ף~VC2>75s1):l/>DR]c*Xslɏ87vpfX%A-۫/:wWٍԙ.D	/Ŭ=9gK-Uqǎ'$ix8YM]\p]jQUG';"!*[*)a>rR`8uwFZ\+Cةt6Ľ0]$E#$H\WZö<n<xoyn{{.v'e%+#%9M0?;"]h@OQ,?>y0zwp7*y-2T-`W#$[[߂ћ"̿aIGGl<̡<nrgퟑ125g[!$	IPS%;k'7O~_EDf~8	yJŅfGG9+L&\St/o}s;o۶sv'=*:vsު[\J*,J-8ȂD~xT<r	iUU:JPФt~i3/HA/Sjm`LebcO=>p\\qR%L2t :|#%#p(8~fdĺ˱=5O7O*5F+͓e3 	e)gfԃU[QRl7Q# [BaKL썧>)ٶv4fuvpNm䡇2 TBZ.B!w Qjdu߃9L>.7?uNpc:#8.nb#$upcBNW`7kd<;.q X(!v<QQNbmP4I/x罾7AqΙy|nx8.*r0V/>ziftmth-BQqUwp.9P]̳U](ΣQo!%90$\Z9ջ/m;cP8*_CrSz'-C'9=\ZrY"O(zxc7jB(%vT5oQY^0\i|BO Մ:'a]	#%	O_R&sW3z--Aka:+l<6&PZa AxΛQxv	len;Ӫe0r3)'#$#$O`rXwff*Ivv:6ʈa.Z8#%Wrr#s&%}#t7Y@j9D-HLfzDbmSQ0*\5EÏf8RU!OĨV!ѫyLl@ӊ(4d6RNѣlPZnq%U#%ڣeF:pJIڎn^ze49<j߾_<'')CC/0TH`;:jGtqN!~Jd3t֫Ln~~]cMκg"|0|5,Y.u4x0AJOS=l[F&	Q3G`jT4".a:xX"JBBG\:Xb.;)QoN.	58AuDSE#%@1-:a(ݱ@o|kn7c9aUN+w{f<5mu]3YvS­-vuwMPː3oN )RqXv2ysA~հ;n|HI|Ls$S&hó8NH"o*a%b&-w/%;I!&Bl,!+)جtbâ3ubJF]l8)3Dm#A8"KSƳ;1FuP,K*]tW@<;+t*E&-3@3#%"MKZ󾽼\jca m8#$!Xn_t#$gqаRkHfu#$:.ۮ%i5!謆<PaCXd8$k۬4ξN#${a픬<zɌ,js҆8fw,Xc9՘`4<'VNh5YeaX,x~ǎ(yL`q6PІl#0	>q-AYf]/Y#%wߛKOW>0za<6e	|ϗPK	]1 A8+ztY9J^dWJg#$U}\FEdg`pX,"iL*ʄ<k+XzUI:00C)(QE:aty{'>p|Fu-"zgL8f.`FZVqd|BI!I0d7@3\#$3;ҞܒCskqQḳ.dl_ZEH|~}̀6Lonh9%EK2h$$i8#%GB2vф@G097\JM^.#%N!E	#%M"#,6vr!~	qow₦%#$6bfpĔM%;JrtxVy뮥*{q!OBCpɪSwM;*xqqfa#$K{P#$p#$Xh#%TXDX P "gKEth)"dWW/ĻWɯFֻkddmI#$gpF< )T m$%<#%J$`4B1I䣅nV	>eiLC5m2|3wGػE+S}_"/[OwB/w#Eݴ鉫wK6\LnpL+a"2$ Vo8N&zw$9&{C>W ؙk!.qIr 6Ajۧcvfk_Djف Uld )CȈab7ڛjsq3KZB\͇	-xxs8_@Dvv#$ A׍yxKLƊ3iL,>pa h+ƚ^1A.ꡨJ})#~NQw}mA>acwj70@n ~G9H,|G32FU"cѾ,,Iۜh»/9r#%'T3T@:I(pׅJ:8%t˭.C" 1>qQ/KRT#$H EI&ڍV4%E-36#dƴY֣]mߨ:j2$](W8b.C:(XPE-PāBys> Hl9ZNy6#34넢( )M|0mM{0PӃYzu85!2U"Kyo(@^zA?Ayؑ4G5R0dj4Gw5GfA7Uo>j^=6Zv^M,/RrBa0;;0R\&Eb*`T@8a2'MIJ7wVtA-I'No&cie8l`n	 ʑ/ ;ް(򖐲Qh,h	6\{Ȗ+PY/_! H0` gq@&:m-X1/tρו,{(!Tq/l9g3bMl(BFOٍ7B=|tz?V-BǦxNÜ8-6dC'%+țbKf:syᰴްꇶ#% r2t|OѦUu!&L.HQvO=;-"Xwᔬtlĺ0jɨ];l;cȜ#$؊#0`pس3D! ,lYz,<I:%`" 	 m1+#% HtpA{-]o5ez0Y[~ܔS!gƟwu`#+KUHM*s,Mw/	$r|ky:+hڤhAC޹!W+Np4ZHڄ?|US&wg׊T:u+L!vs٪N3g]8ps& ٧JIsdZ06-³#%糠ɴ<ONXX"t3i7f\N!*lc%M3g	62YTƋxJCZسH%1x4Rpe9sz2OtMl)&XME-#$sqa(f-2j^g/x Uyz$a|u4vyXB-t挜Ϭn :R($F1X51)Ffc#-*0AѼ摶yqbue#%XD)l R (b#$K=#$Ϧ[fu2PE	%bR-eF5!λuWfurݤWБ;)Bb*B `Rd)f3%+֮k^4e4Ҕf+*XkҴL!!Y0dZf4jCZԕ@G/ClC:jJT Cd >'2@D Sw:n XyM煃˘P~<S0a49;t(U2IxH&Nhɫ'6t'O烺dq?xT$y#$/S )DL#%Y-T-6#%@9h%#|Q*4EaB!Qd<'=s/bD_!;IHƮZ֢!dR/-NEIK	jYkCw=CʥĪj())?P;%{T(, Y6h>=Re`C36_:Ai.낲0k$l_xhIyPnHxGxbiWB`J0D #NYCןW˕gqT^:682wb,d%S=;b<mB^]]#%kIf)f#$`)ZbFF[6X;qEJwt>Jδƽz$T4Vj5hMoZݷI*cfV5Mjױ]hҴPyXi6V[MkնlEGtZlήZ*f7YYX&Į2V"jΜKIXf:WJ9N\3>_zmmXګ*/"GMrwάtuOLVJE*CPZR׶kZx鑳hXRZ#dy?WUxm|lM/7[͍WM[V $!| !&,3k	Pd1fhƫzuf%6̥[SYZSE,#-DLR%I)Q*MmlRY)bKR͚delVFK!Y#%h&$Pʔ&b2JdK*ZZdSjk5JRbM)PdT`m&ZEU)Ud#%و! "2`#$EA$WQ~=ӛk mxhзz@dL9ʰ<[rŌ#$'YK	"HCW:AD#%cC$1c`]~?!ձ#%aj(&c]D2\Q%PiZ&yVGCз0?_3>$bȤXDR%> QH>"T~0$e܁V\(tn#$|˛\ x"p>#%<޼,FI%GC%#$bihMi$9ܬm8NSn|kVVl(0bJSÐm~p_ٺo,U{)`ٝ 		o9E"&VоB%Qdi=pTK®J=S͔OuNkj!Tt$@u/{[׬訨 ] [cQU]Z.JE8 \k%uPIx,X]`u@#% H0縩IkNW6!NP'ec׶_Adß}8a1xoM'5'{\\1'5#$ktH]~6j,%jtz()s90CtD&RBĊS/F`"'ÇӇ,D*-m+;d&cKm*x"I1lQj1ee@(cc.D`߉$|-c@'T0B{Bڏ6"tf8G\C*jbXU(!DA4_U|uiO:̲ve##%pD@©l_P3 CfӌU7ع[RrF@S~?bRHods:a@bK!['5ItbE(%mҀlo)2mqq$#>gk=_[{13zQ>{>݅_L(.~ #%20B?NsKX@)yGdV#$8ksܬ-H4\X!2#%EM"=l>	xP0ݙ8eI=1WԓC0miilS`wM|;mq:pBP-aF9|(uOGte"ScF#rBSρ8{A$dI"gE-J틮1w[U˅ק}>zĳ-2)$#$/|F@ V^t`)i;;v{iaH%C#$._6țkeC:5V@"rzuw2MTlni{K}LSᑛ#*tƌ{s	d"$*BЧE'=Jʩauh8͙bϸD"n#$CHWivگfS_?h/uqw\{-9IX9\Ճͨ9~<TX"*1húĬ<Z#%=),N֢̅91?!v;Nuv6Ȋf\#b'*CZ&R`MH-r4㖗ddv3ܾ#%sT56mFMDP &`>3>6sQ^C  Ҙ|4_[UGQ8WnO,\p89#%oߜ#J}4-UFǩk>Y,3f7R@y`#%[Jƪa(Q@؊H7LxEQ)P0,#% $by+Awv"ɖn!E"=1$,J)Vg[ŋmUX0GiQ95QN^!'&CIqR0aVscM4qrguj6\X$#$`LeBOոP!+P!D#-`ǘɕ8+E0 kߌd9# jzκRO!|Hi<r'p4n|tM_#$G`#,%ypU@MDP0G0l^lVYMLaMM88`P5+0MDjA#%8Ae^QPX]C.\P6jA*3K=ƪ"Q$O%4C9h~^[a``h`Q	pR CxV	snݡ!ݒTu@$U=Ίe$EJ=՚zo?l4*W<z")K*o\00OF`#%*H<tQPV."sκ̖0S3E6-+YG Mg#%jlAgz}GGz*TZaQJb $b! #(E$2sLh#$D{QAtN|#$>k{hg#KgQ8yԒȩWKE/e2?I~C?'z`eȄ;2b >lloBGjTҀgpAa(1!RPh~v>Lc1TU#$^XTU7ETUC9`T-kV *Fc!?j"Q$!S"߄ݰR_,q.PY#$EX:Au!8B?ҕ|h;lȎHaNL<2@tQIa';d1&8t&C\CY9n	&FY̤0_=,G'B/TcFe#%jK<Y^dfR,SLR#"ŕc,+#%7ŋY'ʝ)m'f%q2ݰ/))zZFjS=[Μ(M2Q:d|1X* '6׆G&09#"c4uϮ5IF&uқ,{T'4F+n3&s#%*Kb%%4ĺ1-`ꜗExaӓT#%¨'8?`>#$$ keגէ+zZif$,W	6cd[%Ij6#$dآ@S4hD"P`sr*Z	d݅`d>	3jqtL#$ BQƘb1XO2Y]1"-Js=)v|{GL"#% q+?#%§l)?BnBdI8)]hY66UEP["<x:S2-WmvrL))U&ڣ,5*mNP"L:9q>^] e?ȳ%J%E	!1'hIh+lIT,,*65,K0-Φȓ*MC/FŉHxo5a[@Q^GDirC#%A7ObQgb]r혿>9(stP-0h	#$l/cH]9F:dW^@(v<B|D- ()k)[)4SKe<ѨMHDi^7(~-%CՃdځ#%(.Q`m3ьpQS~1xOD9ff4Uk߻XMXv)8X%ECuᷱ	KC.#%#$KbJfɩB̓1PIxY=WT;qI4 }xe={!}u5m#$njRJh'ߤUk"?ӲMW&̍֑@?PG[@?/dxZE#%G#$jQglMNvɓ͉&A~r˴X4\!`^bUj߅fXvWrRK#$!ИM'L\ 5yW@g݋|<P#%T0*JIjFڌfkMؓBTTUm2f*()Mf&fZSMi65k5"ٵmJS cAV-dL"¤,L)ٵku7fI wiӆjHm$BF@N ]'tY$~b	mA	EȪBiE;w%&I#$z:z#%/ckx@j(lMga]$0Dz@Q*-D?,KntXMGOZf,}ޕ_( ̦#%s9ixZB&(SD#$v7P<g*Qi6ʪrf5Kcu)8a ]O58!2C(CZP h7!BZ	>?5#%<|>b6^9oЙ,.kƟ뢃a1Ńҷt〢u͉,մe$C\[$Bf`V7qh%p|9&C< !~;#(ZTKKéhf5#$|h	C`"0)~^sN5k1wZgm,X	IX|p-lb9ahS,DQ;r?cvXIH5@Ho(V@޺-&&A,SG!d -b)eBe(1B<a#%Ì3R$BꥹhZ!r'p=71Iڬ(Ա{('s;R1Gdng"v\呔0yإb'B!@@ȉA>"HB)9Z8;NM970E͉뤰zy!T<RBEA\s'"|ɖL LAC&z ygϒ#(vLbq	(5cz.I5#$N|	$EQ Xo͑#s2(rHH?VNw|٬>؜#%b.DpG719r:9ТѰ뫼R;`^pb\6qKpO}SЈs䒥)6OB85zhne)m9u+ܡT'<gqD̢Jk?=?<UwZ\PBhm,DlQo	&86EBf=3qĶL텉N.Jr/;]3<;3kTf#VjxsF.7kBY$PJ2H2+,R_w#$;Doў#%K1 LB{$D`QY10ن !7}ȍ_z`ar|NpN#%Ҷ]}ߓDCS"&9z;d>^he'..OM8? Y<Gv갟J$,a#$q	LY(\lG(B.C5O-oB#%D,Aذ^ؙ?Hk[@x'mU%JR#%["~mNQLjd~qk1	YR<]>Ư]qzF$b+JfAjM&ơBfD5b[ -2e5Zf]s0xURS˲ue]QTz0IΌ*2!&66hFΉK}Xa:9u#% $!lQ擟lڃAAhֿy'*NdԹ4(i"bԖA9/$CullZɵ6+]ZwknڢP*#!#t ސ7,uR۩DutY#%#AGK&*}2a$*X$-0D1 ><_]4c,$Nٝ.&ۼx$V1KM+^'l,p(Ot#1aZUH	\cHƞMm^A`gv\BgLRS*j4N{گ.MKxvx{6?~Fx!v<y420ZQmIj^,S:U OFϿ%&CqQPϿV00w'06/ic,,F^Mtt<e{X/l6_aBhM"UAKiD8e߫X/g;X2HKQɀ#cWoW_m!P@mR< p~\5̽	nJhpK.)?ƙm-AbIf 2 ,m$2I#$ad([봹u9=107ny;.`,:dJVamuܷaъEۣn^=R֖w?C(Ubgs$#B	0*qL#3gQ'~qCLy,S5ԝo!"/Oi$Z@R;i!^f$nY-iMʶk7L P	R""*963ѯC,kf[1dOnE8~ֱr!#w>Ȅ[HX:d2:jeRZ表UmC"l>>eCbw!B,cmAS`Ae~Wulɕ4'#8+߷=0nKN0s~>mi. nDyWᶛw'>e|#$]Skomm$i]ܙA)wذ`?:IWEQ䒤$IXEC`ۍ32 wxP#%]lԃ,Twe+f:sspUIL`g1 @t/H8۪ge\O˳;VM1։[jeUP5JըDQsgHyd(w#$ny^r CAB #$Æ^	zb5ؿbd&	|ϘDf~7yV9@f$|~f	|DGx 40/n{?sӎp64_ƆZ2OZW,rdagq6-A1LlX-b'#%3{ICr|L=Z!Ю`_0rّ9=zz0 $(7A[c9@$yU]>+UxVVƭfkRmj\Re8qǍ}۲@THUB87 @wVrb"#$=u+j+vH [ن L::uSl׍vJ&Pq\q̒C(#$v՜~!;1#$NR|?BHQ={ho+̩]	nuJo#$`TG9Je-LGtF1Ӽo@9-FD3=PX)7a~w{~`fBᏰ*mrf/"Z	hVUTONg۵^$f-=" r#$,TDr?p)AB"-{iqIpX}xaֱK,~tm,YVmKbpd`$籣f,1Eo9sBM$y}qp,4lڨn[VV-.!`-QUJqk.]TuB9s	FyҌ.uֿ$:BaZ#%	2`8`bIE+(VzKF5nVr`Ӈ	Dc"2"D%-[4!sst5CR M86`/9A#%%"mg7Eʔ2$FY,-e`~VATRsBmG.eAI"0$@L%-Lwey{=)EW dT#%d#$ySdc4$&6BMTSXĆKK׸64vh׈̿se"!Rq D@W<"eVaXz76	91;ɛ"Qã9#$ eӼ3ږ0te0CeqgU&NYa)LQnni*iʧpaLTZ~e#%R)T%lnu{Uyyِ+9W+V%!1	DD60!%lCjX$*]4f!Z@9dÆas`97V1 X"f"s;a6k(XW4CɌ.mٶa_;Crՙ|#%mn%iΞ19KٲjJ:yA=Ɇ&$nln+:gB[*TpApp ̌`Cc@ŖCH:{aЍb|uwNݠbMP!aRQ6T01(pɣ:C`BjN~8A;M2i$2B0coi?#$@D2BGoJP"Ti=#%$^R7#-KK0=P}qޒ0fJ "`s Ȕ#f lD,!%3KIt06DN#$puG>?pnە!Q{Xf%B秹CVNJTI"O%GȒYQ;φo:{7ܴ=zfjS<Y9Kpz3[ɦYZt7<67m$8Viq#%g>SwBb#O4o81=x6eSt7ǎ_7hR"K7[#$Fe2IӕK=7y{D#%ufH,#%?sH~HO@Z+X y#%Fez1 xU|m'}؅O:*Lf#%z#t%@>PǷ1;)D&Xx^PnFg	uQX[#h	ܷͮ޵C0c#%#ai. {H9  BPt'!3t25QdHLkbHMEQWInwr36[451L5wU%eD ब "`%0 $HҒhc>63~8ǉfr>r HC%TBi,Zsl̑JXIɄ,BXaB?Kl;6RFPI`ES5DFVfe6+QlmfF6edBFԒT(T ҤxqX=#* #d{;^֍\hC#7@`6ԫ__3Km%3j><f̩^"Z/m$V*)T]]MsmXvҭզ-Wm6MڜFbQ!7"ك@g`vׁ!ӒZyӰmIxAN"}l/l#$_UN͕Fs[|h@!Pi	>Rgl7fQ?,#$E)v3piVVRF3HwCEP^)@,I2:3gIăDMWIt9$~mN9*ɭa3#%Yn	܅quyR̢g98k2դ6DIbHI<zҜ>wث⦄Y1v!POWސBB={:ƥ;Q_xhž{9L 2H_z5_n[cĖUY/s붷QTkml TUw2&N\ddl=(r7.IG`REZ"#%(QSbOdT \H"2,J:SC X$0i>u3$"HJ./=pŘ@I9s1[fNidId	%p(a2?he!  ѶxO@ܡ$#wR c|xXw`ZG1s?Pn!*z7h}NBƵɻwna؅  (bA	 /̓oC_ΨO	@i#$~4?k}mځ?#%23(TG3Uqu$/hd3sjmbQqJBGSPļK3B#$}~rueA@(i4j5{&ؚP6B#%̡MjE%#"$tJ \p#@%|!HUn*sH42Z0 bPQa@\bJҰ#%!`0}9\.E%+Pj	sdmy}֍bUHEIB#$@dPY^qs2jURLA#%e[3X*m*jƊ	,h56hwkh֥d"LCWr˵sI1jZX;]2k-x]wk7]nw]\ۨr챨PVDDX~R#ڝ#$%Jyyvd=npKQ:Sth1#{#%n *8}"uGB"o#$I  P]j#%cykU_R.B5<9#$SѴ#%34¯Ne犵B\~Gkզ4U2I$;T1lYuJ%.`ɂ"Ao]&|";`CR1bA@2@uw@5#%)a(bZbE=()*$g@*¡>&s#$J | EmڲSXⷀ.HMu "䬬iԙ5ڥ$|[ (l#%N L%Y)#%*BH\kM3BBS2I=Qa<P>}o{&oÏ`@by@1-@G_p%#%@N@3,SBJ-#%*8nݸ43PWDdsVLA@)a!?-iIka&A!Z,-!դ:rQ,*PrXc!HT#$q$RtuI0raަHNeJJȣUPE&!j0͡.}	"qUH`?M2@OO">@1iI2p0j!a&O鮵6h%QT`\ `r;lkF2CrVI.#DSH̖5|OEV6CPIF@$n1l<O!#%~dcHJR($cOaOL*"@B	M  -ddRX@W_ei RADyCy0j[BIipȳaO	j7ivhRBg)Ma%W;lfj7Ǳ?ɘQt4%էFG@<Yd-<!ѽ=ol!DAO`OY#$ |P	"Ug}#$2(<+%#%~Qzut@[\3a?g+=a!-ԑ)F˼1 CQk2ha?xFA8?\Ѓ-M`0CIhc|Λ>*yc7IP?z:5ӣV*擢W6")&9b#%&uC%Iy8;RT]Fmwx[y܁K\X< \oeGBjqx^+*ldOqP4龩FqڴS:]08ɻC1$L1:9HplG7WM_i3^_k-3,C3JϫQ©p+X/7يLqR5O5SW]Ǘr$ٶ텣kF_T>˚B H	qpQfX)"#(HPOJ_W><ǇΈ w1g'TLp!#$);aL`hLȆ Y,k}rC%q`QU]6n{GS%&#%К0MsΑ Qp@	sQ+;_y>fꦑAƞ2@KJ3aWVG,Gop{#?ϔt~*rʨW0-lURxJ<9k mYde	eM$-YpyԌa-K3 H0P#$$'Yǒo}g;NJM#%gWƝ&SìQ#L1-hPBMhqr	9,I@Ȋ *	,Ҕ7N\Dt0EA`7Ew@4}?8ueyzyBI0d9:s0$j*k7)$$MOZ7B=wQH4ph%$^w2 DjK=C؟&("PCHzA/܃rH!"B*H#%ZU#$"?]2?\>2@T15<ǇDOlt#$YAdyd_:_Pa]FώBK2Ⓔ?{'lYNH&@H+ч$)}q}vt (%:Yykn8g>y-<Q.#$Q	B:`,R1!b|}8ӳ*"pw(#%mg<wQؼVC%GH^Gj}7) $WF9\'Ҁ׬?8l@BwIΗ}PT	%՟Gƈ/Gq,WN=1	h>^"~ȫ|3.d;+.I1Gv0py s$<2Og[9/v?<:kY-j_!~ng6Kmt4#'6T![fi<%{abHغ}<PPT-dXhuYNl6B3̀8;P~ף/t;Ã{{ ڣ@lSeF4MR[L,ߵNF@c? U$n'PZHHf#$#JJ656f`$*MC |2"$}|xn^u[l}4օQFCB_:JC:	gJi%byk CvV?c`?$,dE0$6͞)AMTig.wy9B=RrjZ+/xyxS7r-SoXh*W{GWNԩ!;gwJmB@Jiff\:S5zT#$bJn@1B%`"KĬE2\	(xhrׁLWMK4d!Ɇ>{E3nTFxW:s]t#7SBx8u.~u:<YxN#L[rφM^!y/mgzj~eaFi=g3i_:H0hңW֜X5CS  b@s+y͘#%9*L3$eTs r"idK&Z-fGBɻQ#$Q6m#%"94Ld20ZdAN)i#%1	.!\ՓRP:0NZkK%\*%(B<aYQU3ĲC@;-;4xi=<S{q\KWZVJ:)Xf4L2l4-3H\6JȂS3#́!DFT#%pY(37(`ʹ)k2Z9D؀i60{JkSY$@aSE#$#S84aY%(pI8+'Q;C Xf~)߲lhHh@Y/7rl0@!qP#%Μdc*R'HXłr#%dC ūW#%^& UZpi D(H@@dqLu%LnѯT{-#$Q+la#2k3#$Ӊ3)X5!8x7Va㭨kT0覀xXX#ե*݆UJ74hK[]32{H0X_N|Rʺj%"ap^QrAvBXŴIy"J!lB(HrK)=ҽ\i*TUfb%Op2錥*fcz{֣ZƅA!B0@#%OGW2ṃq1t~UAJ(kȈz@S_<{PGv+oJ >qF@0ZL)ܰT< H>(j	)&X,g%%5Gc$Lq 0f%?I"(QNJ lfBKLO28#Fc߯|߯mwE@|&CӳX2=%+`%+oPDS{r-c\%/U1Q-/9+a(wfrba.=z6ʊ6'ݑr'#){dD%(a-?qG@<mkˡ{T6S[N*9T}Ity>e}&η2P F Mt R?@G#%[YdL3j'Aaρ\"}Q$`]d&ARP)֨Xq\// +.Y<:]PW[]hwb#$P@#"qsh;9ėKF B#%#%d:r'a6~;rb[$`PACP,[_(xs}%%a+	=F\pUO1-PL.1mURq&2!2(<E6׍nkr⹷jj*\6i/B#`IfVB#N=fP=П }><-H(#%D[^n$bjUd4Ձ}0BeP?&IV>o o2ZcYoLkEEh>Dy(XLD 	P$uڮKmxk#$uDxb̀Ò`#%&?_L	z@IKآd>,ǩUiJÙqr|T;7C&tT ~T-Tb6RYI6&iPI&kjMJY*V-SͿ]#$ۊP+#liD]ɹFAG(pu#$8pI#%%BݦBba* bh8!8榨͵5M,b #%/(?	`8`!a+d	aӖ+,>y91^[<HT$z+A/Pf4udkii	XQiI˟q6avH|7Ct:ëDXk.CSjH@Lc8((d1V#l*T@QEDTF@"s@qQ37XI>{xQHK,֔kGg{}2`z0q$Έ?L5}N?t5_vo#MLbJ#%˝##EqkO+gLH΁w$;C+u'JU)yFES9IG,HAn2j!5?Hx#3=wE.jG!WO3##$gHdT0T1a|:ɖ<9#\q8TFpb}>%q)kBPCNP88d$cC	 RUʊHJ, ^,vKm\,`oznt|?n˗/	#$RtO	~=W>H$)x2ߥXuʲo-/ꢓm`SSTTE""	1Ɣ9EK:J_o@j(b4*$Ơ`1tQҡc=wxAʬV$yzMm6}t-9ݑ_&$.&Mn:!33H`;q/Ltj6J'Cad\JmgiBgGyv	hi$Zri<fhg	&Nϔq9:<\q2:.Wwq&G0u:8ǖDF؛ xRB!pΠ10Cr2:=8@祭_%"0lŁks)܎y{iSy%bLn8K8y~ZřhbְG1gI-M<p-و1߼&<X#k=W<+}irNck$GGwڣV1AU=deRiM*sA|d/::bT>+&2=Nڹ/N/9$Yia)L4#xH^#$PjZZu󍏣[dLKIB܁s-KcG-j*^g\ =TRFă΁&ctDCb;։L!\:7rr5^Ql.{};C{B`gvm}9#$IՌZ=#K5DU՝#%XyQ#%K44B'#9>QXj7BݙsH$_cB$J kmդSᴳ8]Gy$㐀ٔ0l>[5]6#.";\8+IICM*6#%$EXDdDAx8LDrmˍw_wLR!"{g0j*XfP!{k~;k(#+NUM, ف3vԹZvST&P{&Qw`P~:Isvq<s*w]Yjd=n{6>noW^QqR_UHیdeG2<w*G/!>4nj!vO6bc)IؒaPm4Ų$ŤPV9XҹR_2u{3o~\##TTGa$ԫQ(3V^3ড়A\G6Ź)(qqCh+%e#%l,wԮo{aat鷖W:52\6KNAW{4vQ <Oz;xc#%꾙]n+j6"_=Gᙢ@Xx=k2'6 _<#$]i$)OL%F	),bhc0g	U8N!2=M6Vc!8`&4X;@xQ5װ!=zSduȡa.iNFL.YlhduC|]rӱ8!2n2؅>2Q}h|]"}MS\pn/rU	Nw;ls l$C[hlI]5 DG?7<wfSf7t+n5yjе0}TYR<Ildgubs7نm>/D7y`m#Q.;CNC=;/#$ $$fo,GF`'yN#$d.CeQ+C"i&VlTsVY6ע5]qj(x $FA541KE8	MAMİ,B-iOv,Lz9Z a39C˕93=Q(ưUd_7VUUVIc!IN멽͚TΓɄ~ԩs7t4+B[J9a8#%rt[2=XJRNOcL31eilؖULiĲd<xyKan=A<<ƚ0BC-E<6D`O3z&Z0c锧gI%P|iʬPRE	,ă.`6:xSQAf9s^5Rc 4rNZ<[MqYr7zطNTwz6,91s"&pLt;0m{xi|Y<jWǠ%x"<LZupreX T54ED	6Sے,d襑x1%9%gL*0#%6|=h˒pن4=RlcC񙗖='gVebkĸf2%n\!4	x-aͅmXv2D+>鷘(W}7=<AܢUjև#$V'y#$Aeg.2`kzFڝ_om18uZzTY馎)OA⪩݁G962w7d=SV{fLjDz(>Y'o:q<n)Xi̻C&ai41j(*WS8S:B 	np{qF|2mC.G1$8w%Jxg0ؘMvb4Ҽ<^п2cAD$N|HA*M%@$}ujt"$> YU>}GwYLLRHE8sAK[X$j-Sn/I*Z! jggm@km٣my;BV\$Bϭer3:⮖j+l7w麨%[eHX=.. d%UWy&)&dFAD9K*,|wWro19k'|jhobu(D#Z""5Q%sknoUx$	 4L]pg!,lIkQTƔi,lYe-M6*,%&ɓYlR4#$4H)FjD(M,Қ#LPLHi!+S!" ,s×H/|;X>|{9?9PsA<x{⚛j<]@bCƵq tAoʠy&,3$A_c|i8΂ޔ_ en~QBB+',NXh8Pl,B)&߁׿2|vqNXu"I5#[䣒C+бнEiSo zAHfF"L:ͶmTm>޹#%E%8`Fc C$b?;~c8r­6poe1<Y`VUN5rxBd@1ѻ@5$NY2Qxñ#$H屑,6hX<p\bLpP<)d"Tԅ#M9]=j't2:Iމ+slP4e3Ul[n̉%r0riOlNIV/)f:Q ,@l:b]6n ڳH ::: :1"z	I$p '@94P,u>#$>!A><:P9Hc-%P`>R!U,M0<sg`~z,%V"m,w3+3y {t>k[9J׫,㤳`{!uo#$@)FM*ܒ=ZN@><{x7a91֮TGfNwޚO<R_(NK4`BB@meXVظHepO׍dBT.EdOb-Y3j@fmAsEH$`r\;3%lgqZI=9LzvRg;HQ_f#$uPϯڍ:}!y ȲEP1ο|~&y)?8x0w#%̥9o	ï9;u`&\9lDKF++| ! `Zb6<z:US4xaiv6':s_?.fwBEƝ DǛvv,MrD<	($*ziN?𙬼k0& 6#@!NRd 7lJD-2fIN0%Y,4z޸= nC" OV{ % ֡}-r(%%,Jkw- ^dx8f]!hvТ[(s괒%Z-Tj:Ý1p|ht#%{nM#%JrOs#%rs Qd'N$Ʋ%d=@"#$s\!2Y6rc7̽2^ ,e⿯Ӆx]:ARDUjYaml~qsS0@\#%7\;ux:o׆C⳽.eo[@H;X`r.#%"B9@'L֦%HJUT%sTU|:󗧕qiNK3{9ncZ""96εP[!<lupA4OM0c<*crBL!KH3*U0Z ΰ#$1>GGSn#%4Ĝ6%p߁:&OBfHYE9/H~(C]8Bw7u~3rٙ4#b$XQ)[¶yCJ7VS\	ɂcԝϲ#%hiPCpD,vz=S:,r"jo;Tujcs3ܺ)?qzۋբpb^GQN`C;F߼b#%a%Ձ*b7sB4ύʗus	]z7%Ǟ4Y]bP+o	tiMK:!]"N؉y:qę6ȄpJ	3Э$.)!4\s@<b,(Ev/X!L<nȘA,D\&SKYdӮ|aD4R|\:sOrQH&p0SC3&QU^Ep\1j&a/]ND"mlsi~#$!q@g'qӁ{g֘:{8ӈt8-Jw~{20pE$e:-1ne-SQq8d1i>#$-G{NuLT#%#%#,3In&N-x|ʗC<.Nupttnzd,&33!34T]	e,4p! q3>An֭fe#$#;K2SYPH]i24&F;1beB$rd/w[W'oU#dIP3bFZۢؖhɰW\4SA$(4(~nZkRڡ;=Y}`ð1hI4MiW#$!.s.E̷#D"B g&Arx9bETcFѓC0rqUlSDJC,K#%QRu۴f6b"4M56nfd24R.B<!*T[gghN3I"@3I#b.1#d&[,AgC;3rm{ø`d`pɐr?y?o/j=#,EAr(wY>#3әB$$D %Av`#%gRG~XK'ylI(/ gKdx.`8x;1cIF[e"[.F8li3ףſvXJz?'|kYet@,7@	".S +I!C!,35;I'CQU}v}!NOZ2fY߰˲cէwA	tCgˆL@Zf$;Rokv!<_0m{>v$ImwGPK)?80xrQ#%E	T$02EJ$<i0655lI]\6RE"^wШ*DQR*\+@(P@N0ad6=hK(4]mʨ2=9"D8v@#:ӛ{8w9 P	OPs//c|ɓvL0n9b(iϴn>k6`fi	(sf*BKpzd+OѰ9aaxgp_˦&,Ϛv0sj}9GL刨n Kn9"TG06P^2ȧg~VZ!;wƌ1 =uP< @"ґJVW6-BeDVSDWN։@u%b2	!$Q #%'UsQdOQ}jM[rzs!s|K$"ء-^GFS~uQddI]l男.p(.eBnܓyxĚSMPtTP?, kك\bFHbfФ̓8賺Uvk-t)  2LߙT	#` vES@OwTPR޻rzaPVVv,e$mᝏsiȨP+g.<2#$[<bZШF`B"G#%,	FsҘ=6OP<ttlv lC0#$4CznƲL[)(byߝD#%C9GdLv9`6IR5_\|2>PЏq!($("٦#$UPc>ׁ/oiZ>z ':`>QE1#$HPEJe0AՑl4lڔW4ZMY+Wt7-vo_&6ѝ]b~\+CNH<;DcQE8^[aB".e>ݳ:P^Ea W.ICɿ^d|^Paܖ+>Ņ?18vڞS=y8+2-n"Sz7A4YEheS#$HBiVy\2I]/Xuwmc8yբ[ `-D:oN'| I	$ﲓdyÇ8{YŧJ6jK)`!0vs㹷zJ* W/.),.ZN<<g;zv&zCcPfpN "#%;α|yMP^MA-!*pr%iYa_0E-9>Y͢7jAJCf+~gQ6=}VX|S/h̔W".{Q RV`)	77oAhg oJH	k-yBčY	w(o0b8Kf`22zka#$<Ki,FP)#%R$`_0M!C5iz5N=L8}A:wS) ]Q1)! AKMiYb꽿~5*cIQe)-:z5jf~2Rwfp"|U̟qzjiMj21m$w #%u#%C]_`Ēt 4:߾tnfIhnED'A~' 'T`)sBHZ@ U!!d}ӛ0`hABY~PhMl4$B+r(V< u19h@(QlI5RJ\TijU:TE@]9wd꾅UuQ)V	`Bh		yg9'${E]^L#?eW0©ԐfHMnDc%og#$g}vc΢pPC~(#$!F+QAbdb5FI"@',AbcXX>!:B1e$è~zZ~>%Bc~a>%ߺ@TWQjjR	6QV64֕/{f;hI#%a݃-3^4=d(TmQZ8AzQO>fQJ¤&Cr1(?X)<0% OK@`,F&eVFz;Fȵa<zmox6,#$ּl&LULZJeC5XY=Lqغ#$l#$bHŐ"0٘A i-٩]ζT(Z9jTed2wvLXP)-SM2ٖe+P(1 sRn:@e>?®QO2}MVzda{"@(b MUNm}opf206y3O[;O)m7>#%)]|=#$N/HNTOx#%<ՠ)\<|'#$`BLW#$7[o:iq7Y[KqamĚ8;cHܗʭk#%Tp3M3jƈ?~;#%Mn)"JKws"y&f=;z("T"Pܢ:njbȵ9MBm/pNj#%f!|	DcGH֡`daQ`%!udiؘ&['ZQML%FWs40WۗSNCpl|sn3"mp:3q/BԒpOՖdo;e} q#$H#2W(NH|j|Z=|w:m0*txç?>6Ԩ +2s'@ Y$kPHP5Ll,cȜ[LOJ㠢YGY97Do:W"<ɱy|{юaXpP}z ^IG#%))Ndwבz#%ҮX'>>xmiC$T5whku4?o_??g?|}SsT	5CA!J? CD2gj#P'07#%HBDME?2@	2|_7`iwnEȔcͱ3]5	lw*8-7Ly\z!,Г|uʤDbA9p2}^j2Dޣ!ը?%L`f#k$daSV?7-zwҧ[1Ra#$э,R,j9CMGќ2zF?IU^5:V-IC:k-y5;N3:QJed?ҌE1"^,-y=rU44+ SGRv7L6</6P	fF']xm4pWTn0u]du0`~l6odh6^7xFu/6K#$^3xdCJF3H䂐pӑ^7YQF)vתe؅e#$ɴaa:/$RFku<7di! m3XҌaml!y""H0&;RxPr3@/;olPN0Y	AX#%#$ɵdړjH*1MUjkoMO9D?~:-j]3Dpob.ʀ,H(zS]?I)=O"y1;1c7sizx8Udk	KǾ]q,YiNwr4kE(mX8_o*7Rvc02(GL0@%d$k׳#$&Ixحw! A-c|&&ZY+XL`4ZRx#$my6 @+4:h\Ytk l@ݦ#%zo>vnkL-7$xt(MV4Zu!'^Ӭ>k/yCٛ^l!u!PkM9PO"(@(adkjjCe&w:B$7s!p=+emִjOA?؈'7#%bdPO2T?_唌K@0\[Zݪ&#%vֿ(*Ǿ=?l~=٤G#ó"<W Fx>m~~a(>_O<2@lP\ Q4őeRv,P6h *3z'Poҏҥ(]bdg=W<f8.!#$-[:^]e,sbב0a	2#o{'y	Xfps~|2c7>/VI[SM/%T?rE8Pb
 #<==
+#-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1.4.11 (GNU/Linux)\n\niQIcBAABAgAGBQJTHvSFAAoJEGelZe39+Q5kWwkQALEljJFszU8FMMjKDlX0Au09\nOjr1yPRMFYwPfnotrbqPRpqDMs0oEhZXBxtYSpUPc6oQoIsJljYTMHfi0VTeSLV8\nw149AMLvKHcl0sPkdiJ24GyxNmUBirMETFTJ9aqKXbtJL42wv869vWWmfjOP2PKY\n12X0gUso7GZyMAQUu0bRr+4/OtBF0BiGSQ0p+CXNZoKXaZ31ug2ADTUTx4PudHHj\naf4FjBkHI5gdmNxaWUdq7yxWbWMh8ctDzXKnwIKqVsi072LF4IYqzwcBeBJnXOLR\n3Ixme3Dl/Z3AnFx4rUGEdslLpkmXJVQq1Yhsxzcjjm4gz7yJZllv0xi0b1WINoM0\ntFYXq048wtMZN1Be1Z5MO/um9C3ipJTXkaHWaVaCzsTuqq5NFL3LLxDYFCdmSyyq\nwSNmILbGYmI6MP/14S5sBJ96UMI7gOCf6NoHmyMrRTFbXuNu7lcWUFHWKa9TMdKK\nDaEnkGOLga6Sj+TnwagmSVBX3S6GFnQwYSHjfumABGYMZUpP4H9nvjn5EGnZlI4n\nLqgg2k7c2QWY0n+Bxn2bjtvRUXnoci1pam6OL/qGIURvFIPN9Wxrezg4IZtoX1yi\n9/YorArlleK7TD4/w84woH6XpvC10A0WSiqy648G8rQ5gKH1BbIserprcxtY97Od\n8o8Ri+hR4fwg3ys8dZD1\n=AcNa\n-----END PGP SIGNATURE-----\n
diff -Naur ns-3.21/wscript ns-3.22/wscript
--- ns-3.21/wscript	2014-09-17 20:03:14.000000000 -0700
+++ ns-3.22/wscript	2015-02-05 15:46:23.000000000 -0800
@@ -308,6 +308,7 @@
         env.append_value('CXXFLAGS', '-fprofile-arcs')
         env.append_value('CXXFLAGS', '-ftest-coverage')
         env.append_value('LINKFLAGS', '-lgcov')
+        env.append_value('LINKFLAGS', '-coverage')
 
     if Options.options.build_profile == 'debug':
         env.append_value('DEFINES', 'NS3_ASSERT_ENABLE')
@@ -806,6 +807,11 @@
                 if ("ns3-%s" % obj.module) not in modules:
                     obj.mode = 'remove' # tell it to remove headers instead of installing 
 
+            # disable the ns3privateheader_taskgen
+            if 'ns3privateheader' in getattr(obj, "features", []):
+                if ("ns3-%s" % obj.module) not in modules:
+                    obj.mode = 'remove' # tell it to remove headers instead of installing 
+
             # disable pcfile taskgens for disabled modules
             if 'ns3pcfile' in getattr(obj, "features", []):
                 if obj.module not in bld.env.NS3_ENABLED_MODULES:
@@ -854,7 +860,7 @@
             program_obj = wutils.find_program(program_name, bld.env)
             program_obj.use.append('ns3-visualizer')
         for gen in bld.all_task_gen:
-            if type(gen).__name__ in ['ns3header_taskgen', 'ns3moduleheader_taskgen']:
+            if type(gen).__name__ in ['ns3header_taskgen', 'ns3privateheader_taskgen', 'ns3moduleheader_taskgen']:
                 gen.post()
         bld.env['PRINT_BUILT_MODULES_AT_END'] = False 
 
